The Eloquent · UI kit
Reference
Every component, brand component and block in the Eloquent UI registry, each with a live preview, its states, keyboard support and a Vietnamese example.
Components58
- Button
Ink-fill, outline, secondary, ghost, link and destructive (✕ icon) buttons; 44px hit targets.
- Label
Form label in the Barlow 600 kicker style.
- Field
Label, control, description and error layout on Base UI Field and Fieldset; errors shown by a 2px ink rule and an ! icon.
- Input
Single-line text field as a 1px ink form line; invalid is a 2px rule; 44px high.
- Textarea
Multi-line text field with the 1px ink form line; invalid is a 2px rule.
- Input group
One form line with a control plus text, icons or buttons either side, split by ink hairlines.
- Combobox
Filterable single or multiple select on Base UI Combobox; ink rules, tint-1 highlight with an ink rule, no shadow.
- Kbd
Keyboard key and shortcut chips: Barlow Condensed capitals in a 1px ink rule.
- Native select
Native <select> with an ink border, chevron and 44px height; invalid is a 2px ink underline.
- Select
Select on Base UI: ink trigger, paper popup with a 1px rule, ink check on the chosen item; no shadow or radius.
- Input OTP
One-time code entry on Base UI OTP Field: square 44px cells sharing 1px ink rules, Barlow Condensed figures.
- Checkbox
Tick, untick or mixed choice on Base UI Checkbox; checked is an ink fill plus a check glyph.
- Radio Group
Pick one option on Base UI RadioGroup and Radio; selected is an ink fill with a paper dot.
- Switch
On/off setting on Base UI Switch; on is an ink track with a paper thumb, optional ON/OFF text.
- Slider
Number or range input on Base UI Slider; hairline track, heavy ink range, square thumb.
- Toggle
Two-state button on Base UI Toggle; pressed shown by an ink fill and aria-pressed, never colour alone.
- Toggle Group
Segmented set of toggles on Base UI ToggleGroup, divided by shared 1px ink rules; pressed segments are ink fills.
- Button Group
Joins related buttons into one segmented control divided by shared 1px ink rules, with a text cell and separator.
- Form
Validated forms on Base UI Form and Field with react-hook-form and zod; errors shown by ink rules, icons and an error summary at the top on submit.
- Separator
Ink rule on Base UI Separator: hair (1px) or heavy (3px), horizontal or vertical.
- Collapsible
Collapsible on Base UI: 44px ink trigger, opacity-only panel, no hover effect.
- Scroll Area
Scroll area on Base UI: square ink thumb on a tint-1 track, focusable viewport.
- Popover
Popover on Base UI: ink on paper, 1px ink rule, no shadow, radius or arrow.
- Tooltip
Tooltip on Base UI: ink block, paper Barlow 12px, no arrow, shadow or radius; opens on focus.
- Dialog
Dialog on Base UI: paper popup, 1px ink rule and heavy top rule, 85% paper backdrop, focus trapped.
- Sheet
Sheet on Base UI Dialog: full-height paper panel from any side, 1px inner ink rule, focus trapped.
- Table
Semantic table in Barlow: heavy header rule, hairline rows, tabular right-aligned figures.
- Alert Dialog
Alert dialog on Base UI: Dialog's paper and rules, no corner close, Action and Cancel are Buttons, focus trapped.
- Drawer
Drawer on Base UI: paper panel from any edge, heavy 3px ink rule as the handle, swipe to dismiss, focus trapped.
- Hover Card
Hover card on Base UI PreviewCard: link trigger with the marker highlight, popover-style paper and 1px ink rule, opens on hover and focus.
- Dropdown Menu
Dropdown menu on Base UI Menu: paper popup, 1px ink rule, ink-fill highlight, hairline separators, checkbox, radio and submenu rows.
- Context Menu
Context menu on Base UI ContextMenu: focusable area, opens at the pointer or from Shift+F10, ink-fill highlight, hairline separators.
- Menubar
Menubar on Base UI Menubar and Menu: heavy top rule and bottom hairline, ink-fill trigger when open, Dropdown Menu rows.
- Sonner
Toaster and toast() on Base UI Toast: paper and 1px ink rule at bottom-right, state by icon, rule or hatched band, never colour.
- Tabs
Tabs on Base UI: 3px ink rule on the selected tab, big ModeSwitcher variant, no hover.
- Accordion
Accordion on Base UI: hairline items, +/- glyph, opacity-only panel, no hover effect.
- Navigation Menu
Navigation menu on Base UI: Barlow caps bar, heavy rule under the current page, flat ruled panel, no hover effect.
- Breadcrumb
Breadcrumb trail: nav, ordered list, underlined ink links, middle-dot separators, no hover effect.
- Pagination
Pagination links: Barlow Condensed numerals, ink fill on the current page, 44px targets, no hover effect.
- Aspect Ratio
Aspect ratio box: CSS aspect-ratio, unstyled, no hover effect.
- Resizable
Resizable panels on react-resizable-panels: hairline handle with grip dots, 44px hit area, no hover effect.
- Card
Card with no box: heavy 3px top rule, serif content, hairline footer; header, title, description, action, content and footer parts.
- Item
Row for a record: media, title, description and actions, closed by an ink hairline; renders as a link with the render prop.
- Empty
Empty state: ink hairline, tracked kicker, Playfair headline, serif sentence and an optional ink drawing or icon slot.
- Command
Command palette on Base UI Autocomplete (inline): type to filter, arrows to choose, Enter to run; CommandDialog for Ctrl+K.
- Sidebar
Side navigation: hairline edge, heavy-rule active item, collapsible groups, icon rail with tooltips and a sheet on small screens.
- Calendar
Month grid on react-day-picker: hairline weeks, ink-fill selection, heavy-rule today, Barlow Condensed numerals, 44px days.
- Date picker
Date field on Calendar and Popover: a ruled trigger opens a square, flat calendar; Esc returns focus to the trigger.
- Data table
Table with sortable headers (aria-sort, ink glyphs), a column filter, a columns popover and paging, on TanStack Table and the Eloquent table.
- Carousel
Slides on Embla: ruled slides, numbered Barlow Condensed controls, labelled previous and next, jumps under reduced motion.
- Chart
Charts on Recharts in ink: series told apart by pattern, dash and label; one labelled image with a data table alternative; no animation under reduced motion.
- Badge
Square status label in Barlow Condensed capitals: ink fill, tint, outline or 2px destructive outline with a cross.
- Avatar
Square avatar on Base UI Avatar: hairline frame, greyscale image, initials fallback from props.
- Alert
Alert panel with a state per variant: tint-1 info, check success, hatched tint-2 warning, 2px ink rule error.
- Progress
Progress bar on Base UI Progress: hairline track, ink fill, value text in Barlow Condensed.
- Meter
Meter on Base UI Meter: same hairline track and ink fill as Progress, for a value in a known range.
- Skeleton
tint-1 placeholder block that pulses only when motion is allowed.
- Spinner
Ink square outline that turns while loading; labelled status, still under reduced motion.
Brand components16
- Typography
Brand text elements: two-voice headline, kicker, lede, body, drop cap, pull-quote, figure and meta.
- Kicker
tracked-capitals label with an optional leading ink rule.
- Headline
two-voice headline (roman lead, italic tail) in four sizes; the marker highlight shows only when it is a link.
- Tech line
middle-dot separated stack line in Barlow.
- Ink figure
greyscale illustration frame (multiply blend) in 9:16, 16:9, 3:4 or 1:1, with required alt text.
- Stat tile
tint-1 figure tile (Barlow Condensed figure, unit, caption) and StatRow, a row of exactly three.
- Language switch
EN · VI switch; the current locale in ink 700, the other a real link that keeps the hash and ?mode. No flags.
- Folio line
name · title · city between two ink hairlines, with the language switch.
- Proof
three lines, Problem. / Built. / Result., with a bold sans lead word and serif text.
- Story card
kicker, headline, lede and stack under a heavy rule, with an optional 96px 9:16 ink thumbnail.
- Cover
kicker, two-voice headline and a 16:9 ink scene, for slide titles and social images.
- Calling card
a 390 × 844 no-scroll screen with four contact buttons, two tiles and a black footer.
- Language bar
a non-modal bottom bar that offers the other language once, written in that language.
- Mode switcher
a tint-2 band asking what brings you to the paper, with two large tabs (solid ink when selected) synced to the URL hash; controlled or uncontrolled.
- CTA band
the press band with a classifieds kicker, a two-voice Playfair headline and an outlined on-press mailto button.
- Editor panel
Get in touch with labelled contact rows, a QR slot and an Email me button; variant=band is the press-black contact band for the CV.
Blocks6
- Article layout
Brand block: front-page link, kicker, headline, standfirst and byline, body column, At a glance aside, pull quote and Keep reading.
- Masthead
Block: the nameplate, folio line with the language switch, and the section nav.
- Press footer
Block: the one inverse block, with contact, Download CV, a LinkedIn QR code slot, the language switch and Back to top.
- Philosophy carousel
Block: three tabs (I Leverage, II Habit, III Delivery), each with a Playfair quote, body text, a 3:4 ink panel and a signature.
- Classifieds form
Block: the brief form (name, company, email, brief, four-way project size) with an error summary, inline success and error messages and an onSubmit prop; no network call.
- Print A4
Block: an A4 page shell (210 by 297mm, 44 to 52px margins, main column plus a 210 to 228px side column), a named @page rule for print and a page-break helper. Pure layout.