Every primitive in the template, with its variants and states. Each card names the file it comes from, so you can copy that file and its imports straight into a new project.
Every colour is a CSS variable that flips with the theme. Re-skin the whole template by editing the two blocks at the top of globals.css.
Surfaces & lines
app/globals.css--canvas--surface--surface-soft--surface-sunken--border--border-strongSemantic colours
bg-success / bg-success-soft …successwarningdangerinfobrandpurpleChart palette
var(--chart-1) … var(--chart-6)--chart-1--chart-2--chart-3--chart-4--chart-5--chart-6Type scale
Inter (body) · Graphik (display)Display — Graphik
Gross volume $482,910
Section heading
Body — Inter
The quick brown fox jumps over the lazy dog — --ink
The quick brown fox jumps over the lazy dog — --ink-soft
The quick brown fox jumps over the lazy dog — --ink-muted
The quick brown fox jumps over the lazy dog — --brand
Tabular numerals: 1,204.50 · 9,887.00 · 3,141.59
Elevation & radius
.card-shadow · .pop-shadowLabel, hint and error live in one shell, so every field in the app lines up and reports problems the same way.
Text fields
components/ui/input.tsxSearch
components/ui/search-input.tsxType to see the clear affordance appear
Debounce it with useDebounce before feeding a query.
Selects
components/ui/select.tsx · custom-select.tsxCheckboxes, radios and switches are drawn by us rather than the OS, so they match across browsers and both themes.
Checkboxes
components/ui/checkbox.tsxRadios
components/ui/radio.tsxRadioGroup
RadioCards
Switches & slider
switch.tsx · slider.tsxVerification code & file upload
otp-input.tsx · file-drop.tsxOTP — paste fills every box
Entered: —
File drop
Every form in this app is React Hook Form with a Zod resolver. Submit this one empty to see how errors land, then fix a field and watch it clear on its own.
Validated form — submit it empty
features/gallery/sections/forms.tsxField states
components/ui/input.tsxModals, drawers and dropdowns all portal to <body>, lock page scroll and close on Escape or a backdrop click.
Dialogs
modal.tsx · drawer.tsx · confirm-modal.tsx · settings-modal.tsxDropdowns & menus
dropdown.tsx · menu.tsxThe panel flips and shifts to stay on screen
Tooltips & keyboard hints
Toasts
One DataTable takes column definitions and handles sorting, selection, row actions, responsive column dropping and horizontal scroll.
DataTable — sortable, selectable, clickable rows
components/ui/table.tsxClick a header to sort, a checkbox to select, a row to open.
Loading state
<DataTable loading />The pieces that carry numbers: stat tiles, meters, timelines and the loading and empty states that stand in for them.
Stat tiles
components/ui/stat-tile.tsxGross volume
$482.9K
Failed payments
112
Loading
Net volume
$468.1K
Progress, composition & meters
components/ui/progress.tsxComposition bar
Meters
Avatars, ids & payment methods
avatar.tsx · copy-button.tsx · card-brand.tsxAvatars
Copyable ids — hover to reveal the control
pi_3QhZk8Lm2NpXv7RtBw9YcPayment methods
Description list, footer & timeline
card.tsx · timeline.tsxLast edited
Payment intent created
Jul 27, 2026, 7:47 AM
Authorized
Jul 27, 2026, 7:47 AM
Captured
Jul 27, 2026, 7:47 AM
Dispute opened
Jul 29, 2026, 7:47 AM
Banners
components/ui/banner.tsxNext payout scheduled
One document outstanding
Webhook endpoint failing
Loading & empty states
skeleton.tsx · empty-state.tsxSkeletons
Ghost rows — the shape a list keeps while loading
Table skeleton
Empty panel — reason over ghost rows
Nothing here yet
Payments you take will show up here.
Empty state
No invoices match
Try a different search, or clear the status filter.
Error state
Something went wrong
The request didn't come back. It may just be the connection.
Recharts wrappers that read their colours from the theme variables, so every chart follows light and dark without a prop.
Metric cards — the headline shape
components/ui/metric-card.tsx + charts/trend-chart.tsxRevenue
$97.5K
New customers
842
Trend variants
<TrendChart variant='…' />area
line
bar
step
Area chart with comparison series
components/charts/area-chart.tsxLine chart — multiple series
components/charts/line-chart.tsxBar chart — columns
<BarChart layout='vertical' />Bar chart — rows
<BarChart layout='horizontal' />Donut chart
components/charts/donut-chart.tsx68%
Card
Sparklines
components/charts/sparkline.tsxFilled
Line only
Alternate colour