Add Launcher application template and icon system

This commit is contained in:
DCCONSTRUCTIONS
2026-07-10 11:56:27 +03:00
parent 4a9ad01ea6
commit 9261d3af36
30 changed files with 1466 additions and 363 deletions
+32 -2
View File
@@ -148,7 +148,37 @@
"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."
"Product routes and profile content are application data passed into stable slots.",
"The canonical application header is fixed and preserves the Launcher three-axis logo / navigation / profile positions."
]
},
{
"id": "application-shell",
"status": "baseline",
"package": "@nodedc/ui-react",
"exports": ["ApplicationShell", "ApplicationPanel"],
"domContract": ["nodedc-app-shell", "nodedc-application-panel"],
"summary": "Launcher-derived application template with fixed header, media stage, left navigation and a separate expandable content window.",
"anatomy": ["fixed AppHeader", "stage", "left navigation", "right content window", "expand and close actions"],
"behavior": ["navigation shifts stage", "content opens beside navigation", "expanded content replaces stage", "mobile panels use the available viewport sequentially", "independent content scrolling"],
"rules": [
"The bottom Launcher service rail is product-specific and is not part of the general application template.",
"Desktop page gap is 20 px and navigation width follows the Launcher 332352 px range.",
"Applications supply routes, profile data, stage media and panel content without changing shell geometry."
]
},
{
"id": "icon",
"status": "baseline",
"package": "@nodedc/ui-react",
"exports": ["Icon"],
"domContract": ["svg using currentColor"],
"summary": "Audited semantic icon subset shared by NODE.DC applications instead of product-local vendor imports.",
"variants": ["16 px", "18 px", "20 px"],
"rules": [
"Use semantic names from registry/icons.json.",
"The containing component owns surface, hit target and state; the icon owns only the glyph.",
"Do not copy complete Lucide or Font Awesome catalogs into an application."
]
},
{
@@ -161,7 +191,7 @@
"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.",
"The desktop panel follows the Launcher 332352 px width range with a 21.6 px shell radius and a 20 px page gap.",
"Active route state uses the active surface and icon contrast from the theme."
]
},
+53
View File
@@ -0,0 +1,53 @@
{
"schemaVersion": "1.0.0",
"component": "Icon",
"package": "@nodedc/ui-react",
"baseLibrary": "lucide-react",
"defaultSize": 18,
"supportedSizes": [16, 18, 20],
"strokeWidth": 1.8,
"groups": [
{
"id": "window-layer",
"label": "Окно и слой",
"referenceSources": ["launcher", "engine"],
"names": ["close", "plus", "expand", "minimize", "refresh", "panel", "apps"]
},
{
"id": "navigation",
"label": "Навигация",
"referenceSources": ["launcher", "engine", "bim-viewer"],
"names": ["chevron-left", "chevron-right", "chevron-down", "grid", "list", "sliders", "search"]
},
{
"id": "editing",
"label": "Редактирование",
"referenceSources": ["launcher", "seo"],
"names": ["save", "edit", "trash", "copy", "upload", "download", "external"]
},
{
"id": "state-access",
"label": "Состояние и доступ",
"referenceSources": ["launcher", "seo", "task-manager"],
"names": ["check", "alert", "activity", "lock", "key", "shield", "circle"]
},
{
"id": "entities",
"label": "Сущности",
"referenceSources": ["launcher", "task-manager"],
"names": ["profile", "users", "building", "globe", "database", "network", "inbox", "mail"]
},
{
"id": "content",
"label": "Контент",
"referenceSources": ["seo", "bim-viewer", "engine"],
"names": ["image", "video", "file", "folder", "clipboard", "settings"]
}
],
"rules": [
"Use semantic icon names from this registry instead of importing an application-local icon by shape.",
"Icons inherit currentColor; their button surface, active state and hit target are owned by Button, IconButton or the containing pattern.",
"Do not copy the complete Font Awesome or Lucide vendor catalog into application code.",
"A new icon requires a confirmed product use, a registry entry and a catalog specimen."
]
}
+5 -2
View File
@@ -1,6 +1,6 @@
{
"schemaVersion": "1.0.0",
"libraryVersion": "0.2.0",
"libraryVersion": "0.3.0",
"name": "NODE.DC Design System",
"purpose": "Canonical code-level UI system for current and future NODE.DC applications.",
"packages": [
@@ -28,6 +28,7 @@
"sourceRegistry": "sources.json",
"componentRegistry": "components.json",
"candidateRegistry": "candidates.json",
"iconRegistry": "icons.json",
"documentation": {
"architecture": "../docs/ARCHITECTURE.md",
"components": "../docs/COMPONENTS.md",
@@ -36,7 +37,9 @@
"baseline": "../docs/SOURCE_BASELINE.md",
"governance": "../docs/GOVERNANCE.md",
"adoption": "../docs/ADOPTION.md",
"candidates": "../docs/CANDIDATES.md"
"candidates": "../docs/CANDIDATES.md",
"applicationTemplate": "../docs/APPLICATION_TEMPLATE.md",
"icons": "../docs/ICONS.md"
},
"operatingRule": "Check this registry before creating a NODE.DC interface element. Reuse or extend the canonical export instead of creating an application-local copy."
}