192 lines
8.7 KiB
JSON
192 lines
8.7 KiB
JSON
{
|
|
"schemaVersion": "1.0.0",
|
|
"components": [
|
|
{
|
|
"id": "glass-surface",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["GlassSurface"],
|
|
"domContract": ["nodedc-glass", "nodedc-material-rim"],
|
|
"summary": "Canonical matte/glossy glass surface for cards, panels and window shells.",
|
|
"anatomy": ["theme-provided surface", "optional material rim", "backdrop blur", "content"],
|
|
"variants": ["default", "strong", "soft"],
|
|
"rules": [
|
|
"Geometry is invariant across application themes.",
|
|
"A material rim is a glass highlight, not a hard product-colored border.",
|
|
"Nested surfaces must use a softer tone to avoid card-inside-card noise."
|
|
]
|
|
},
|
|
{
|
|
"id": "button",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["Button", "IconButton"],
|
|
"domContract": ["nodedc-button", "nodedc-icon-button"],
|
|
"summary": "Text and icon actions with shared sizing, states and computed accent contrast.",
|
|
"variants": ["primary", "secondary", "ghost", "danger", "accent"],
|
|
"shapes": ["default", "pill", "rounded"],
|
|
"rules": [
|
|
"Icon-only actions are circular by default.",
|
|
"Filled accent actions derive foreground contrast from the actual accent.",
|
|
"Destructive actions remain neutral until confirmation unless danger is the principal message."
|
|
]
|
|
},
|
|
{
|
|
"id": "field",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["FieldFrame", "TextField", "TextAreaField"],
|
|
"domContract": ["nodedc-field", "nodedc-field__control"],
|
|
"summary": "Textual form controls with consistent labels, hints, geometry and focus surface.",
|
|
"rules": [
|
|
"Labels and validation copy are part of the field contract.",
|
|
"Keyboard focus changes the surface and remains visible without a browser-blue outline."
|
|
]
|
|
},
|
|
{
|
|
"id": "checker",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["Checker"],
|
|
"domContract": ["nodedc-checker"],
|
|
"summary": "Binary setting control derived from the redesigned Engine environment settings.",
|
|
"rules": [
|
|
"The visual anchor is circular, not a square native checkbox.",
|
|
"The control exposes checkbox semantics through role and aria-checked."
|
|
]
|
|
},
|
|
{
|
|
"id": "range-control",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["RangeControl"],
|
|
"domContract": ["nodedc-range"],
|
|
"summary": "Filled pill range control with embedded label and value from redesigned Engine settings.",
|
|
"rules": [
|
|
"The accent fill follows the active application theme.",
|
|
"The native range remains the accessible input while its chrome is visually replaced."
|
|
]
|
|
},
|
|
{
|
|
"id": "color-field",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["ColorField"],
|
|
"domContract": ["nodedc-color-field"],
|
|
"summary": "Combined color picker and textual value for settings/inspectors."
|
|
},
|
|
{
|
|
"id": "dropdown",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["Dropdown"],
|
|
"domPackage": "@nodedc/ui-dom",
|
|
"domExports": ["createFloatingLayer"],
|
|
"domContract": ["nodedc-dropdown-surface", "nodedc-dropdown-option"],
|
|
"summary": "Shared portal/fixed floating layer for action and selection menus.",
|
|
"behavior": ["portal to document body", "viewport clamp", "vertical flip", "outside pointer close", "Escape close", "scroll and resize reposition", "one open dropdown per window"],
|
|
"rules": [
|
|
"Never render a runtime dropdown as an absolute child of a card, sticky header or scroll container.",
|
|
"Action menus and selection menus share floating behavior even when their row content differs."
|
|
]
|
|
},
|
|
{
|
|
"id": "select",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["Select"],
|
|
"domPackage": "@nodedc/ui-dom",
|
|
"domExports": ["createSelectController"],
|
|
"summary": "Theme-independent selection control using the canonical dropdown layer.",
|
|
"variants": ["integrated", "split"],
|
|
"behavior": ["controlled value", "optional search", "disabled options", "selected state", "portal menu"],
|
|
"rules": [
|
|
"Integrated is the single-pill Hub/Launcher form.",
|
|
"Split is the Engine form: a separate value surface and a 46 px toggle separated by an 8 px gap.",
|
|
"The portal menu preserves its source-family row geometry instead of inheriting card radii."
|
|
]
|
|
},
|
|
{
|
|
"id": "window",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["Window", "WindowFooterActions"],
|
|
"domPackage": "@nodedc/ui-dom",
|
|
"domExports": ["createModalController"],
|
|
"domContract": ["nodedc-overlay", "nodedc-window"],
|
|
"summary": "Canonical controlled window for modal and right-side panel presentations.",
|
|
"behavior": ["portal to body", "focus entry", "modal-only focus trap", "focus restore", "Escape close", "backdrop close policy", "modal-only body scroll lock"],
|
|
"rules": [
|
|
"Open state belongs to the application; focus/layer behavior belongs to the component.",
|
|
"The same window contract is used by Launcher, CMS and SEO; theme variables supply color differences.",
|
|
"A right-side inspector is modeless by default: no dimming, no backdrop blur, no backdrop close, no focus trap and no body scroll lock."
|
|
]
|
|
},
|
|
{
|
|
"id": "confirmation-modal",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["ConfirmationModal"],
|
|
"summary": "Async-safe confirmation window for destructive and consequential operations.",
|
|
"behavior": ["pending state", "double-submit protection", "disabled close policy while pending"]
|
|
},
|
|
{
|
|
"id": "segmented-control",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["SegmentedControl"],
|
|
"domContract": ["nodedc-segmented"],
|
|
"summary": "Pill navigation used in the shared top header and compact mode switches."
|
|
},
|
|
{
|
|
"id": "app-header",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["AppHeader", "HeaderProfile", "HeaderProfileButton", "HeaderWorkspace", "HeaderAvatar"],
|
|
"domContract": ["nodedc-header-shell", "nodedc-header"],
|
|
"summary": "Three-axis NODE.DC application header with fixed brand geometry and composable center/right slots.",
|
|
"anatomy": ["left brand", "optional left context", "center navigation/workspace", "right actions/profile"],
|
|
"rules": [
|
|
"The logo occupies the same visual position and geometry across applications.",
|
|
"Product routes and profile content are application data passed into stable slots."
|
|
]
|
|
},
|
|
{
|
|
"id": "admin-navigation-panel",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["AdminNavigationPanel"],
|
|
"domContract": ["nodedc-admin-panel"],
|
|
"summary": "Hub-derived left administration panel with context selectors, route navigation, close action and footer identity.",
|
|
"anatomy": ["eyebrow and title", "close action", "workspace context", "company context", "route items", "footer identity"],
|
|
"rules": [
|
|
"The panel shell, full-bleed pills and icon circles are library geometry; routes and identity data remain application-owned.",
|
|
"The desktop panel is 352 px wide with a 21.6 px shell radius and opens beside, not over, the main Hub content.",
|
|
"Active route state uses the active surface and icon contrast from the theme."
|
|
]
|
|
},
|
|
{
|
|
"id": "status-badge",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["StatusBadge"],
|
|
"domContract": ["nodedc-status"],
|
|
"summary": "Semantic status pill whose tone is independent from the application accent."
|
|
},
|
|
{
|
|
"id": "inspector",
|
|
"status": "baseline",
|
|
"package": "@nodedc/ui-react",
|
|
"exports": ["Inspector", "ControlRow"],
|
|
"domContract": ["nodedc-inspector", "nodedc-control-row"],
|
|
"summary": "Accordion settings/definition inspector derived only from the redesigned Engine environment and NDC agent inspector.",
|
|
"rules": [
|
|
"Legacy Engine inspectors are not reference implementations.",
|
|
"Domain-specific field definitions remain in Engine; reusable layout and controls live here.",
|
|
"Desktop Engine geometry is fixed at 390 px panel, 330 px content, 154/14/162 px control rows and 50 px section headers with a 12 px radius.",
|
|
"Accent-filled section headers belong to Environment Settings; neutral headers remain available for other approved inspector contexts."
|
|
]
|
|
}
|
|
]
|
|
}
|