Components

Primitives from src/components/ui. They know nothing about Delia’s domain; the Product page builds on them.

Buttons

One primary button per view. Everything else is outline or ghost.

Variants

Sizes

Default is 32 px. Small for table rows and cards.

With icons

Disabled

Form controls

Controls sit on the raised cream with a strong outline. Labels are always visible; errors appear next to the field.

Text fields

Delia matches incoming mail against this address.

Search field

Select

Checkbox

Radio group

An approval level, per tier.

Switch

Overlays

Floating surfaces are the only place a shadow appears.

Dialog

Sheet

Record previews, and navigation on mobile.

Menu

Popover

Tooltip

Toast

Confirms an action by name and offers Undo.

Command palette

Global search and commands, opened with ⌘K.

Data display

Dense data lives in tables with hairline rows, not cards.

Table

13 px cells, tabular figures, numbers right-aligned.

PersonRoleDaysDay rateTotal
Jonah WhitfieldDirector of photography2$950$1,900
Sam OkaforDrone pilot1$1,200$1,200
Lena BrandtSound mixer2$700$1,400

The second row is selected: selection uses the raised cream, hover uses the tint.

Badge

Generic labels. Stages and statuses have their own components.

NewColoristDrone

Avatar

JWJWJW
SOLB
+3

Progress

x

Separator

Oct 8Ojai, CA

Feedback

Every data view has four states: loading, empty, error and populated.

Banner

An offer or a notice at the top of a view.

Error

Says what went wrong and what to do next.

Loading

A skeleton shaped like the content.

Loading…

Empty

An invitation to act.

Nothing needs you
Delia will post here when an email, a date or a deadline needs a decision.