Extract shared home and environment settings for product reuse

This commit is contained in:
Codex
2026-09-07 22:54:17 +03:00
parent 26a1bf72a2
commit b10fd5d645
21 changed files with 1431 additions and 13 deletions
+101 -10
View File
@@ -71,17 +71,38 @@
"id": "button",
"status": "baseline",
"package": "@nodedc/ui-react",
"exports": ["Button", "IconButton"],
"domContract": ["nodedc-button", "nodedc-icon-button"],
"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"],
"sizes": ["default", "compact", "dense"],
"shapes": ["default", "pill", "rounded"],
"variants": [
"primary",
"secondary",
"ghost",
"danger",
"accent"
],
"sizes": [
"default",
"compact",
"dense"
],
"shapes": [
"default",
"pill",
"rounded"
],
"rules": [
"Icon-only actions are circular by default.",
"Controlled toggle actions expose aria-pressed and use the canonical active surface without changing geometry.",
"Filled accent actions derive foreground contrast from the actual accent.",
"Destructive actions remain neutral until confirmation unless danger is the principal message."
"Destructive actions remain neutral until confirmation unless danger is the principal message.",
"Primary tone=neutral is white when enabled and gray when disabled in every theme/accent; use it for accent-independent operator actions without local CSS overrides."
]
},
{
@@ -424,12 +445,28 @@
"id": "media-source-field",
"status": "baseline",
"package": "@nodedc/ui-react",
"exports": ["MediaSourceField"],
"exports": [
"MediaSourceField"
],
"domPackage": "@nodedc/ui-dom",
"domExports": ["createMediaSourceController"],
"domContract": ["nodedc-media-field", "nodedc-media-control", "nodedc-media-source-button", "nodedc-media-preview"],
"domExports": [
"createMediaSourceController"
],
"domContract": [
"nodedc-media-field",
"nodedc-media-control",
"nodedc-media-source-button",
"nodedc-media-preview"
],
"summary": "Launcher/CMS media control for video, image or logo file/URL sources, filename, preview and adapter-provided storage state.",
"behavior": ["controlled file/url source", "native accessible file input", "URL input", "image/video preview", "path, hint and error slots"],
"behavior": [
"controlled file/url source",
"native accessible file input",
"URL input",
"image/video preview",
"path, hint and error slots",
"controlled disabled state locks file, URL and source switching during a parent save/upload"
],
"rules": [
"The component owns geometry, source switching and accessibility.",
"The consumer owns media library, storage upload, validation and the persisted URL.",
@@ -510,6 +547,60 @@
"The panel variant reuses AdminNavigationPanel pill, icon and theme tokens while retaining the same controlled accordion state and domain-owned content.",
"Accent-filled section headers belong to Environment Settings; neutral headers remain available for other approved inspector contexts."
]
},
{
"id": "environment-settings",
"status": "baseline",
"package": "@nodedc/ui-react",
"exports": [
"EnvironmentSettingsWindow",
"EnvironmentMediaPlaylistEditor"
],
"domContract": [
"nodedc-environment-settings",
"nodedc-environment-media-playlist"
],
"summary": "Shared avatar Settings → Environment composition for product/home copy, quick actions and image/video playlists.",
"behavior": [
"product-configured page list",
"draft/reset/save",
"upload adapter",
"ordered media playlist",
"image timing",
"parent save/upload disabled state"
],
"rules": [
"Reuse FeatureSettingsWindow and existing form primitives; never fork an application-specific settings form.",
"Consumers own page/action IDs, storage, revision conflicts, authentication and upload URLs.",
"A single-home application passes one surface; multi-section applications pass all admitted pages.",
"Closing the window preserves host authority and never sends device commands."
]
},
{
"id": "landing-stage",
"status": "baseline",
"package": "@nodedc/ui-react",
"exports": [
"LandingStage",
"EnvironmentBackgroundMedia"
],
"domContract": [
"nodedc-landing-stage",
"nodedc-landing-stage__media"
],
"summary": "Shared product landing stage with editable copy, quick actions and ordered image/video background.",
"behavior": [
"image timer",
"video end advance",
"skip failed media",
"flat empty background",
"product status/footer slots"
],
"rules": [
"No decorative radial gradient or invented graphic appears without configured media.",
"Applications supply content and actions, not duplicate stage markup.",
"Background playback and scene navigation never own device acquisition."
]
}
]
}
+2 -1
View File
@@ -54,7 +54,8 @@
"moduleFoundry": "../docs/MODULE_STUDIO.md",
"mapTemplate": "../docs/MAP_TEMPLATE.md",
"icons": "../docs/ICONS.md",
"consumption": "../docs/CONSUMPTION.md"
"consumption": "../docs/CONSUMPTION.md",
"environmentSettings": "../docs/ENVIRONMENT_SETTINGS.md"
},
"applicationManifestSchema": "schemas/application-manifest-v0.1.schema.json",
"designProfileSchema": "schemas/design-profile-v0.1.schema.json",