Vesture

Component specification index

Components

All 85 components are free and open source — each with a live demo, full prop reference, and behavior notes. Every one reads exclusively from the token contract; no component ships a hardcoded color.

Inputs

Button

A native button with three visual weights. Forwards its ref and spreads every standard button attribute, so it drops into forms, dialogs, and toolbars without a wrapper.

Input

A styled text input with a built-in invalid state.

Textarea

A multi-line text field matching Input's styling and invalid-state contract.

Select

A native <select> with a themed chevron affordance layered on top — no custom listbox to keep in sync with platform behavior.

Checkbox

A checkbox built on a visually-hidden native input, so it keeps full native form semantics while the visible box is styled from tokens.

Radio

A radio input using the same hidden-input pattern as Checkbox. Group multiple with a shared name.

Switch

A toggle switch — a native checkbox with role="switch" under the hood, so assistive tech announces it correctly while behaving like any controlled checkbox.

Label

A form label with an optional required marker, meant to pair with Input, Select, Textarea, Checkbox, Radio, or Switch.

NumberInput

A text input for numeric values with increment/decrement stepper buttons, min/max/step clamping, and full keyboard support.

Slider

A draggable, keyboard-navigable slider. Pass a two-element tuple as the value to get a range slider with two thumbs instead of one.

Rating

A star rating input built on native radio buttons, plus a read-only display mode for showing an average rating.

Combobox

A typeahead search-and-select input built on Floating UI, supporting single selection or multi-select with removable chips.

FileUpload

A drag-and-drop file upload queue with per-file progress, client-side validation, and a remove action — the upload mechanism itself is entirely up to you.

OTPInput

A segmented one-time-code input — one box per character, auto-advancing focus as you type, with full paste support for codes copied from SMS/email.

SignaturePad

Canvas-based signature capture with smooth freehand strokes, DPR-correct rendering, and export to a PNG data URL.

RichTextEditor

A contentEditable rich text editor with a formatting toolbar, tables, images, text color/highlight/font-size, Notion-style markdown shortcuts, and a slash command menu — all sanitized through the same DOMPurify allowlist on every emitted change.

ColorPicker

A full color picker — saturation/lightness gradient, hue strip, preset swatches, and a format-aware text input — for theme customization and design-tool UIs.

MentionsInput

A contentEditable text input that opens a filtered autocomplete dropdown on "@" (or any trigger character) for tagging users/entities, inserting them as distinct non-editable chips.

ImageCropper

A draggable, resizable crop rectangle over a source image, with an imperative ref handle that exports the crop at the image's native resolution — not its on-screen display size.

TagInput

Chip input with typeahead suggestions, paste-splitting, validation and keyboard editing.

TransferList

Dual listbox for moving items between “available” and “selected”, with search, grouping and bulk actions.

Overlays

Navigation

Feedback

Data

DataGrid

A virtualized, sortable, filterable, resizable data table — the most involved component in the library, and the one built for real production datasets rather than demo lists.

TreeView

A virtualized, keyboard-navigable tree with optional cascading checkbox selection and lazy-loaded children — the hierarchical counterpart to DataGrid, reusing its exact scrollTop virtualization math against a flattened, expansion-aware node list.

QueryBuilder

A visual rule/condition builder — field, operator, value rows, groupable via AND/OR with nesting — the kind of filter UI Kendo/Syncfusion sell as a premium add-on.

KanbanBoard

A columns-of-cards board with pointer drag-and-drop (reorder within a column, move across columns, reorder columns) and a required keyboard alternative — built on the exact same Pointer Events technique as Scheduler's drag-to-reschedule, not a second drag mechanism.

Diagram

A node/edge graph renderer for flowcharts, org charts, and dependency graphs — a static server-safe SVG for previews, or a pan/zoom/editable InteractiveDiagram for exploring and building the graph interactively.

QRCode

Generates a QR code for a given string value, rendered as an <img>.

Barcode

Generates a linear barcode (CODE128, CODE39, EAN13, or UPC) for a given value, rendered as an inline SVG.

Gantt

A project timeline: a collapsible task tree beside day-scale bars, with progress fills, milestones, finish-to-start dependency arrows, and optional drag / keyboard editing.

Spreadsheet

An editable grid with a formula engine — cell references, ranges, SUM / AVERAGE / MIN / MAX / COUNT / MEDIAN / PRODUCT, your own functions, per-cell formatting and locking.

PivotGrid

A pivot table: cross-tabulates flat records into nested row groups and columns with totals — built-in or custom aggregates, drill-down clicks, and full control over labels and cell rendering.

OrgChart

A hierarchy of people or teams with collapsible branches, vertical or horizontal layout, three edge styles and custom node cards.

VirtualList

A windowed list for huge or endlessly loading data. Rows can be a fixed height, individually known, or measured after render.

FilterBar

Composable filter chips. Add typed conditions, edit or remove them, and save the set as a named view.

Charts

LineChart

A line chart with a static, zero-JS server component and a separate client component for hover tooltips and a toggleable legend — pick whichever your page actually needs.

BarChart

A grouped or stacked bar chart, following the same static/interactive split as LineChart — with per-bar hover instead of a continuous tooltip, since bars are discrete.

AreaChart

A filled-region chart reusing LineChart's scale, axis, and hover-tooltip logic almost entirely — the same static/interactive split, plus overlapping or stacked fills.

PieChart

A pie or donut chart with per-slice hover emphasis and a legend that redistributes percentages when a slice is hidden — a standalone chart with no x/y scales, unlike Line/Bar/AreaChart.

Sparkline

A tiny, axis-less line, area or bar chart sized for table cells, stat tiles and headlines. Server-safe — plain SVG, no JavaScript.

Gauge

RadialGauge and LinearGauge show one value against a range — color bands, a target marker, ticks, and fully replaceable center content.

Treemap

Area-proportional rectangles for part-to-whole data with many categories — disk usage, budget breakdowns, portfolio weight. Squarified layout, static SVG.

Heatmap

A rows × columns matrix colored by value — activity by hour, correlation tables, cohort retention. Single-hue by default, or bring any color scale.

FunnelChart

A conversion funnel: stages stack top to bottom and narrow with their value, with step-over-step and total-conversion percentages.

ScatterChart

Scatter and bubble chart with multiple series, optional per-series trendlines, and legend entries that toggle series on and off.

RadarChart

Compare several series across 3+ axes on a radial grid, with polygon or circular rings and per-axis maxima.

WaterfallChart

Shows how a starting value is built up or eroded by a sequence of increases and decreases, ending in totals.

CandlestickChart

Financial price chart with candles, OHLC ticks or a close line, volume bars, SMA/EMA overlays, a crosshair readout and pan/zoom.

SankeyChart

Flow diagram where link thickness is proportional to value. Hover or focus a node to isolate its flows.

CalendarHeatmap

A contribution-style calendar: one cell per day, columns are weeks, intensity shows the value.

GeoMap

Choropleth map with bubble markers, zoom and pan. No map data is bundled — pass SVG paths directly or convert GeoJSON with geoJsonToRegions.