Components

Reference documentation for every component in the Bundy UI library.

Actions

Charts

AreaChart

A filled trend over time — stacked to show a total, normalized to show share, or overlapping for two or three series. Strokes the top edge of each band so a stack stays readable where two fills meet, and takes `gradient` to fade the fill out toward its baseline.

BarChart

Categorical comparison as bars, vertical or horizontal, with multiple series grouped, stacked, or normalized to 100%. Reach for `horizontal` whenever the category labels are words rather than dates.

ChartAxes

The grid rules behind a cartesian plot, drawn from tick positions a chart has already computed. Paired with `ChartLabels`, which draws the text for the same ticks.

ChartFrame

The shell every other chart is built in: it measures its container, reserves the axis margins, handles loading and empty states, places the legend and tooltip, and hands your default slot a plot rect to draw SVG into. Use it when the composition you need isn't one of the named charts.

ChartLabels

Tick text and axis titles for a cartesian plot, positioned from ticks a chart has already computed. Paired with `ChartAxes`, which draws the rules for the same ticks.

ChartLegend

The swatch-and-label list every multi-series chart renders under its plot. Presentational by default; `interactive` turns each entry into a button for an app that filters series.

ChartTooltip

The panel that follows the pointer across a plot, carrying a title and a list of swatch/label/value rows. Same chrome as `Tooltip`, but positioned from plot coordinates rather than anchored to an element.

DonutChart

A `PieChart` with its middle opened up and filled with the number the chart is actually about — a total, a headline share — as ordinary DOM rather than SVG text.

GaugeChart

A single bounded value on a dial — an arc over a restricted sweep, with the exact number in the middle. Good for a status summary; a `Progress` bar is the better read when the value needs comparing to another one.

HeatmapChart

A matrix of cells coloured by magnitude on a single-hue sequential ramp, for spotting concentration across two categorical dimensions. Ships a ramp legend, since a cell's colour can't be read back to a number without one.

LineChart

One or more trends over an ordered x axis, with a shared crosshair tooltip listing every series at the hovered position. The default for change over time — and with `guides="false"` and a small `height`, the inline sparkline in a stat tile or table cell.

PieChart

Parts of a single whole as slices, sorted largest-first. Honest for two or three shares and a rough read of the rest; past about five slices a `BarChart` compares them far better.

RadarChart

Several comparable measures as one closed polygon per profile, for comparing shapes across five to eight axes. Every axis shares one radial scale, so the measures have to be normalized to a common range first.

RadialBarChart

Bars bent around a circle — a rose growing outward from a shared centre, or concentric activity rings. A compact summary; bending a bar makes its length depend on its radius, so a plain `BarChart` is the honest choice for close ranking.

ScatterChart

Two quantities against each other as points, optionally grouped by colour and sized by a third value for a bubble chart. Keep colour groups to three — any two points can end up adjacent, which is a harder test than a bar chart's neighbours.

Data

Elements

Feedback

Forms

Autocomplete

A text input that filters and selects from a list of suggestions as you type.

Checkbox

A single checkbox input with label and description.

CheckboxGroup

A set of checkboxes sharing a single array `v-model`.

ColorInput

A hex text input, sized to its own value, with a live `ColorSwatch` preview that falls back to transparent while the typed text isn't a valid hex color. Optionally opens a `ColorPicker` popover, and optionally supports an alpha channel via `alpha`.

ColorPicker

A hue/saturation/lightness picker over a hex `v-model`, with an optional alpha track for an 8-digit hex and a `ColorSwatch` + hex code preview of the current selection.

ColorSwatch

A single color swatch with a checkmark when `selected` and a checkerboard behind translucent colors — purely presentational, so a parent like `ColorSwatchPicker` owns the actual selection and listens for a click. Also usable standalone with a custom `icon`, or as a plain non-interactive preview by leaving `selected` unbound.

ColorSwatchPicker

A row of hex color swatches to pick a single value from, sharing a `v-model` like a radio group.

Combobox

A searchable, richer alternative to `Select`, supporting icons/avatars and multi-select.

CreditCard

A live, flippable card visual — front number/name/expiry, back magstripe/CVC — with automatic network detection. Powers `CreditCardInput`'s preview but also usable standalone to just display a card.

CreditCardBrandMark

The card network logo/wordmark rendered on `CreditCard`, used internally.

CreditCardInput

A card number/name/expiry/CVC entry with a live, flipping card preview and network detection.

DateInput

A date or date-range picker backed by a calendar popover.

FileUpload

A drag-and-drop/click file picker with a list of selected files.

Form

The state and validation container the other form pieces sit in: it validates on submit, routes each error to the `FormField` carrying that `name`, and emits `submit` only once everything passes. Takes a rules record or any Standard Schema validator (zod, valibot, arktype) — neither is a dependency.

FormField

A label/description/error wrapper standardizing the layout around a form control. Inside a `Form`, `name` is what pairs it with a value and pulls in that field's error.

Input

A single-line text input with optional leading/trailing icon and validation states.

Label

A styled label/legend with an optional description and required asterisk, rendered as whichever tag fits the context — used internally by `FormField`, `Checkbox`, `Radio`, `Switch`, `CheckboxGroup`, and `RadioGroup`, but usable on its own for a custom field layout.

LanguageSelect

A language picker showing each language in its own name, with an optional flag — as a full-width field with search, or a compact icon button for a navbar.

LoginForm

A ready-made email/password sign-in form with 'remember me', a forgot-password link, and client-side validation — emits `submit` with the collected values instead of calling an API itself.

NumberInput

A numeric input with increment/decrement controls and min/max/step support.

PasswordInput

A password input with a show/hide toggle and an optional live checklist of length/character requirements.

PhoneInput

A text input paired with a searchable country picker, showing a flag and dial code.

PinInput

A row of single-character boxes for entering a PIN or verification code.

Radio

A single radio button with label and description, for use inside `RadioGroup`.

RadioGroup

A set of mutually-exclusive radio options sharing a single `v-model`.

Select

A native-feeling dropdown select over a list of items.

SignupForm

A ready-made account-creation form — name/email/password/confirm fields, a live password-strength checklist, and a required terms checkbox — emits `submit` with the collected values instead of calling an API itself.

Slider

A draggable single- or dual-thumb range input.

Switch

An on/off switch, with color and label/description options.

TagsInput

A text input that turns entries into removable tag chips.

Textarea

A multi-line text input with optional autosize.

TimeInput

A time or time-range picker.

Layout

Navigation

Overlays

CommandPalette

A keyboard-driven modal for finding and running commands over grouped, filterable items.

ContentSearchButton

A trigger button styled to open a `CommandPalette`, showing a placeholder and shortcut hint.

ContextMenu

A right-click-triggered menu of grouped, possibly nested actions.

Drawer

A panel that slides in from a viewport edge, for mobile-style navigation or actions.

DropdownMenu

A trigger-activated menu of grouped, possibly nested actions, with optional avatars/badges.

EmojiPicker

A trigger-activated emoji panel — grouped into labeled categories with a recently-used section, and searchable by name. Wraps `Popover` internally; pass a custom trigger via the default slot or use the built-in icon button.

MenuItem

A single row within menu-like components (`DropdownMenu`, `ContextMenu`), used internally.

Modal

A centered dialog overlay with header/body/footer slots.

Popover

A trigger-activated floating panel of arbitrary content, positioned relative to its trigger.

SettingsModal

A two-pane settings dialog — a `Navigation` sidebar of sections on the left, the selected section's panel on the right — in the style of Discord's or Claude's settings.

Slideover

A panel that slides in over the page from a viewport edge, for larger contextual content.

Spotlight

A guided tour overlay that dims the page and highlights one target element at a time, with a positioned card of title/description and step navigation — for onboarding walkthroughs and feature tutorials.

Tooltip

A hover/focus-triggered label shown next to its trigger element.

UserMenu

A sidebar/navbar-footer trigger showing the current user's avatar and name, opening a menu with a built-in presence status switcher and custom actions like settings or sign out.