Primitives

The component system is a small kit of thin wrappers over one headless UI library. Pages compose the kit and never import the raw library.

Imported system. Adopted from the app's design system. The rules apply as written; the inventory below is the contract; which library backs it on this site, and which pieces this site actually needs, are still to be configured.

Kit rules

  • One choke point. Vendor styling that breaks the system (a drop shadow, a default outline) is stripped once, at the kit boundary, never per page.
  • Conventions are defaults. The cursor, the press scale, the focus ring, and the border color are baked into the wrapper.
  • Small on purpose. A primitive is added only once it is needed twice. Until then, pages build with the existing pieces.

Inventory

PrimitiveContract
ButtonVariants primary / secondary / ghost / accent / danger; sizes sm / md / lg; iconOnly for square icon buttons. cursor-pointer and the active press-scale are baked in.
Input / TextareaLine border, accent focus ring. Multi-line fields auto-grow with their content instead of scrolling inside themselves.
Field / LabelLabel plus control wrapper with an optional hint line.
CheckboxBrand-accented; renders its own label from children.
CardBordered surface, standard padding, no shadow. Subparts: Header, Title, Description, Content, Footer.
ChipSmall inline tag, defaulting to the soft brand-tinted look.
LinkIn-text links and link-styled actions.
SpinnerBusy indicator; inherits the current text color inside buttons.
ProgressBarValue 0 to 100; color switches to danger for failing states.
RadioCardsCard-style single select; a render function hands the selected state to the caller, who owns the card visuals.
DateRangeFieldStart and end dates as one field.
ContainerThe global gutter (see Layout).
ToasterOne toast queue, fired through a single shim.