Primitives
Every shared primitive in packages/ui, rendered across its variants and states. Use it to eyeball a base-primitive change — or a shadcn upgrade — against the whole surface at once. See DESIGN.md § 5 for which primitives are forked and why.
CFX signatures
The three patterns that make a surface read as CFX rather than as shadcn with tokens: cents set smaller than the dollars, a ledger ID rendered verbatim beside a copy control, and a sensitive value revealed in place. DESIGN.md § 3 and § 5.
Badge
Tags and permanent metadata only. Status is never a badge — see the Containers table below and The Status-As-Text Rule in DESIGN.md § 2. badgeVariants is exported by upstream and kept exported here.
Inputs
Resting, invalid and disabled side by side — aria-invalid is what drives the destructive ring, so it has to be set to be seen.
Select
Placeholder, a committed value, grouped options with a disabled item, and both trigger sizes. The trigger draws its own border, so it takes the bordered half of The Focus-Contrast Rule — border-ring at full alpha plus the 3px halo.
InputOTP
The primitive most likely to come back from a regen broken: rules/shadcn.md records that its <div role="separator"> needs three biome-ignore comments re-added by hand after every overwrite. Empty, partially filled, and the separator between the two groups of three.
Feedback
Alert, Skeleton and Spinner — the surfaces a loading or failed state lands on.
Containers
Card, Tabs, Table and Separator — the layout register the dashboards build pages from. The status column is the rule in practice: plain inline text coloured by role, across all three of its colours.
Accordion
Both root types, each with an item open at rest so the collapsed and expanded treatments sit side by side. single collapsible closes the open item when it is clicked again; multiple keeps every open item open.
Overlays
Popover and DropdownMenu, plus the two CFX modules that live beside their primitives so those stay overwritable.
Tooltip
All four sides off the raw composition, the QuickTooltip wrapper that carries its own provider — what CopyToClipboard uses — and one left open at rest so the inverted content chip and its arrow are visible without a pointer.
Avatar
Avatar, AvatarBadge, AvatarGroup and AvatarGroupCount all ship upstream — kept here so a future overwrite can be checked against them.
Command
The cmdk surface, with CommandLoading — the CFX pending row that now lives beside command.tsx. Loading and results are mutually exclusive states, so they are two specimens rather than one.
Calendar
Reverted to upstream source. Its only residual divergence is import order and the bracket-access rewrites noPropertyAccessFromIndexSignature requires.