5.5 KiB
Shared WebUI Primitive Inventory
This 2026-08-18 inventory records the implementation state after the product-wide structural consolidation and second duplicate-rule audit. It is evidence for enforcement, not a substitute for the normative interface pattern language.
Implemented And Enforced
| Contract | Adoption evidence | Ownership now enforced |
|---|---|---|
ActionToolbar and groups |
50 source files | Raw module-prefixed toolbar elements and local toolbar definitions are rejected. Distribution, wrapping, density, grouping and panel/section surfaces are Core-owned. |
PageLayout / WorkspaceLayout / WorkspaceFrame |
25 / 16 / 17 source files | Headed page anatomy, full-height viewport frames and navigation/list-detail panes no longer repeat inset, heading, notices, loading, shell height, surface, overflow or pane geometry. The raw page-frame and raw workspace exception baselines are both empty. |
FilterBar |
14 source files | Catalogue and pane search/filter rows share width, surface, layout and wrapping. |
SelectionList family |
19 source files | Resource navigation shares selection, title/description, leading-icon and truncation anatomy. |
StatePanel |
25 source files | Whole-surface, compact and fill empty/blocked/error states replace module-local state shells. |
CountBadge |
8 source files | Notification, folder, search, postbox and graph counts use one compact badge contract. |
ContentSection |
5 source files | Repeated bordered/subtle editor sections and compact provenance panels share surface, density, flow and rhythm. |
ContentGrid |
22 source files | Equal-column content geometry and former dashboard/settings/assignment copies are Core-owned. |
FormGrid and FormLayout |
53 source files | Former generic/admin grids and equal-column dialog/editor copies use named collapse points and native form semantics. |
MetricGrid / MetricCard |
31 / 33 source files | Module-local metric helpers, grids and card visual definitions were removed. |
DescriptionList and DescriptionItem |
28 source files | Former generic property grids use semantic dl/dt/dd composition with central density and collapse. |
DefinitionPalette, node/canvas visuals and FloatingStatus |
2 Dataflow/Workflow consumers each | The copied graph palette, canvas controls, minimap, node icon/port, empty overlay and activity overlay definitions are Core-owned; graph semantics remain local. |
DialogActions, DialogForm, DialogSection |
every Core footer / 6 / 6 source files | Footer action flow, native dialog form flow and dialog content grouping are Core-owned. |
| Standard dialog sizing | 61 reviewed specialized selectors | Any width matching the Core 460/560/680/1040/1440px scale must use Dialog size; the remaining decrease-only exceptions are explicit. |
tools/checks/check-shared-webui-primitives.py verifies Core exports and
ownership, representative consumers, the absence of the retired raw anatomy,
and composition of every Dialog footer through DialogActions.
tools/checks/check-shared-webui-layouts.py additionally requires the reviewed
Core and module consumers and rejects any raw page or workspace frame; there
are no remaining allow-listed layout exceptions.
Dialog Width Classification
The remaining 61 width selectors do not duplicate the Core 460/560/680/1040/
1440px scale. They cover bounded editor widths between scale steps, high-density
definition and governance editors, preview/chooser canvases, message and file
overlays with coupled height behavior, and responsive full-canvas workflows.
Their exact selector set lives in
tools/checks/shared-webui-dialog-width-exceptions.txt. The focused check fails
for a new selector, a stale baseline entry, or any local width that duplicates
the Core scale.
Audit Result And Deliberate Local Ownership
The second scan compared exact CSS declaration bodies and JSX anatomy across every WebUI module after migration. All repeated generic structural candidates found in that pass were promoted: viewport frames, catalogue/list shells, filters, selectable lists, state panels, count badges, section frames, equal-column grids, section headers, metrics, and definition-editor chrome. The final legacy-baseline pass also migrated Access administration, Core Settings, Docs, Mail bounce processing, and Organizations to the shared page and workspace layouts and removed their copied responsive geometry.
The remaining cross-module declaration matches are not independent component anatomy. They are small token-based rules such as ellipsis, muted captions, uppercase terms, or flex-column containment applied to different semantic elements. Moving those rules into a component would erase meaning; their visual values already come from Core tokens. Remaining larger local layouts are deliberately domain-owned:
- unequal-track editors, import mappings and schema/data tables;
- calendar time grids, charts, graph node shapes and graph edge semantics;
- file/mail/postbox/records explorer panes whose interaction contracts differ;
- timelines, evidence histories, recipient compositions and policy-specific detail sections;
- compact list-row internals that cannot preserve their semantics through
SelectionListItemContent.
A future candidate is promoted only when a new audit identifies repeated structure plus the same responsive, accessibility and interaction contract. The enforcement script prevents regression for the patterns centralized in this pass and maintains the reviewed dialog-width baseline.