Accent

Components

The system components — one anatomy, one home, rendered everywhere it applies.


Every component

Data table

THE listing — tree icons, search, per-column sort, selection with bulk verbs; folders interleave by name.

Content toolbar

The strip on every content seat — tree toggle, the trail as a preference, verbs as arguments.

Location select

Where a thing lives, chosen from the tree — display titles, indent as nesting, never a typed path.

The UI section is the admin's vocabulary — the controls the skin has claimed, and the Bootstrap markup a call site writes. This section is one altitude up: the system components, the composed pieces the admin is actually built from. A listing, a toolbar, a location picker — each exists exactly once, as a named React component with a single home, and every surface that needs that anatomy renders the component rather than a copy of it.

The codify rule

A system component is born the moment the same anatomy appears on a second surface. Before that it is just a surface's own markup; after that, a copy is a fork waiting to drift. The content toolbar is the cautionary tale: it was hand-written on five surfaces, and hiding the breadcrumbs had to be threaded through every copy by hand — each pass missing one. Extraction is not tidying, it is how a preference (a hidden trail, a docked toolbar, a folder's display title) gets to mean the same thing everywhere.

The contract cuts both ways:

  • A surface never re-implements a claimed anatomy. If the page is a list of things, it renders the data table. If it asks where something lives, it renders the location select. "Almost the same but ours" is the failure these components exist to prevent.
  • What varies is an argument. Each component fixes the anatomy and takes the differences — which columns, which crumbs, which verbs — as props. When a surface cannot express itself through the props, the component grows a prop; the surface does not grow a copy.

The components

Component Claims Home
Data table Every listing — container contents, media, inventories, registries. src/components/CmsDataTable.tsx
Content toolbar The strip on every content seat — where you are, what you can do here. src/components/CmsContentToolbar.tsx
Location select Every "where does this live?" — a parent chosen from the tree, never typed. src/components/CmsLocationSelect.tsx

More join as they are codified. The bar for an entry here is the bar for the component itself: one anatomy, one home, and at least two surfaces rendering it.