symbiote-ui 0.3.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/LICENSE +21 -0
- package/README.md +76 -0
- package/canvas/AutoLayout.js +731 -0
- package/canvas/Breadcrumb/Breadcrumb.css.js +75 -0
- package/canvas/Breadcrumb/Breadcrumb.js +96 -0
- package/canvas/Breadcrumb/Breadcrumb.tpl.js +7 -0
- package/canvas/CanvasConnectionRenderer.js +971 -0
- package/canvas/CanvasGraph/CanvasGraph.css.js +29 -0
- package/canvas/CanvasGraph/CanvasGraph.js +1697 -0
- package/canvas/CanvasGraph/CanvasGraphDrawState.js +280 -0
- package/canvas/CanvasGraph/CanvasGraphGeometry.js +194 -0
- package/canvas/CanvasViewport.js +550 -0
- package/canvas/ConnectionRenderer.js +1283 -0
- package/canvas/FlowSimulator.js +326 -0
- package/canvas/ForceLayout.js +226 -0
- package/canvas/ForceWorker.js +1303 -0
- package/canvas/FrameManager.js +223 -0
- package/canvas/GraphExplorerShell/GraphExplorerShell.css.js +136 -0
- package/canvas/GraphExplorerShell/GraphExplorerShell.js +129 -0
- package/canvas/GraphExplorerShell/GraphExplorerShell.tpl.js +12 -0
- package/canvas/GraphTabs/GraphTabs.css.js +101 -0
- package/canvas/GraphTabs/GraphTabs.js +189 -0
- package/canvas/GraphTabs/GraphTabs.tpl.js +12 -0
- package/canvas/LODManager.js +88 -0
- package/canvas/Minimap/Minimap.css.js +73 -0
- package/canvas/Minimap/Minimap.js +210 -0
- package/canvas/Minimap/Minimap.tpl.js +7 -0
- package/canvas/NodeCanvas/NodeCanvas.css.js +398 -0
- package/canvas/NodeCanvas/NodeCanvas.js +1499 -0
- package/canvas/NodeCanvas/NodeCanvas.tpl.js +22 -0
- package/canvas/NodeSearch/NodeSearch.css.js +97 -0
- package/canvas/NodeSearch/NodeSearch.js +140 -0
- package/canvas/NodeSearch/NodeSearch.tpl.js +25 -0
- package/canvas/NodeViewManager.js +748 -0
- package/canvas/PcbRouteDiagnostics.js +463 -0
- package/canvas/PcbRouter.js +1127 -0
- package/canvas/PinExpansion.js +134 -0
- package/canvas/PseudoConnection.js +84 -0
- package/canvas/SelectionSync.js +163 -0
- package/canvas/SubgraphManager.js +203 -0
- package/canvas/SubgraphRouter.js +452 -0
- package/canvas/ViewportActions.js +473 -0
- package/canvas/graph-explorer.js +339 -0
- package/canvas/graph-layout.js +148 -0
- package/canvas/graph-model.js +68 -0
- package/canvas/html-in-canvas.js +202 -0
- package/canvas/project-graph-builder.js +440 -0
- package/canvas/project-graph-model.js +183 -0
- package/chat/ChatComposer/ChatComposer.css.js +652 -0
- package/chat/ChatComposer/ChatComposer.js +304 -0
- package/chat/ChatList/ChatList.css.js +102 -0
- package/chat/ChatList/ChatList.js +99 -0
- package/chat/ChatList/ChatList.tpl.js +20 -0
- package/chat/ChatListItem/ChatListItem.css.js +117 -0
- package/chat/ChatListItem/ChatListItem.js +32 -0
- package/chat/ChatListItem/ChatListItem.tpl.js +17 -0
- package/chat/ChatMessageItem/ChatMessageItem.css.js +628 -0
- package/chat/ChatMessageItem/ChatMessageItem.js +156 -0
- package/chat/ChatSidebar/ChatSidebar.css.js +150 -0
- package/chat/ChatSidebar/ChatSidebar.js +230 -0
- package/chat/ChatSidebar/ChatSidebar.tpl.js +18 -0
- package/chat/ChatSidebar/constants.js +11 -0
- package/chat/ChatSidebarItem/ChatSidebarItem.css.js +445 -0
- package/chat/ChatSidebarItem/ChatSidebarItem.js +304 -0
- package/chat/ChatTranscript/ChatTranscript.css.js +90 -0
- package/chat/ChatTranscript/ChatTranscript.js +244 -0
- package/chat/chat-context.js +123 -0
- package/chat/message-model.js +156 -0
- package/cli.js +20 -0
- package/control/Button/Button.css.js +93 -0
- package/control/Button/Button.js +78 -0
- package/control/Button/Button.tpl.js +3 -0
- package/control/Field/Field.css.js +91 -0
- package/control/Field/Field.js +17 -0
- package/control/Field/Field.tpl.js +3 -0
- package/core/Connection.js +47 -0
- package/core/Editor.js +449 -0
- package/core/Frame.js +33 -0
- package/core/GraphMermaid.js +348 -0
- package/core/GraphText.js +228 -0
- package/core/Node.js +145 -0
- package/core/Portal.js +106 -0
- package/core/Socket.js +187 -0
- package/core/SubgraphNode.js +121 -0
- package/core/base-path.js +55 -0
- package/core/dom-utils.js +14 -0
- package/core/index.js +18 -0
- package/core/local-cache.js +26 -0
- package/core/state-sync.js +227 -0
- package/custom-elements.json +6380 -0
- package/discover.js +240 -0
- package/display/Badge/Badge.css.js +44 -0
- package/display/Badge/Badge.js +17 -0
- package/display/Badge/Badge.tpl.js +3 -0
- package/display/Banner/Banner.css.js +61 -0
- package/display/Banner/Banner.js +17 -0
- package/display/Banner/Banner.tpl.js +3 -0
- package/display/CodeBlock/CodeBlock.css.js +194 -0
- package/display/CodeBlock/CodeBlock.js +220 -0
- package/display/CodeBlock/CodeBlock.tpl.js +11 -0
- package/display/DataTable/DataTable.css.js +101 -0
- package/display/DataTable/DataTable.js +136 -0
- package/display/DataTable/DataTable.tpl.js +13 -0
- package/display/EmptyState/EmptyState.css.js +33 -0
- package/display/EmptyState/EmptyState.js +17 -0
- package/display/EmptyState/EmptyState.tpl.js +3 -0
- package/display/EventFeed/EventFeed.css.js +145 -0
- package/display/EventFeed/EventFeed.js +64 -0
- package/display/EventFeed/EventFeed.tpl.js +14 -0
- package/display/EventFeed/EventFeedItem.js +116 -0
- package/display/EventFeed/EventFeedItem.tpl.js +22 -0
- package/display/LoadingOverlay/LoadingOverlay.css.js +91 -0
- package/display/LoadingOverlay/LoadingOverlay.js +48 -0
- package/display/LoadingOverlay/LoadingOverlay.tpl.js +12 -0
- package/display/Metric/Metric.css.js +60 -0
- package/display/Metric/Metric.js +17 -0
- package/display/Metric/Metric.tpl.js +6 -0
- package/display/OutputGraphPreview/OutputGraphPreview.css.js +122 -0
- package/display/OutputGraphPreview/OutputGraphPreview.js +89 -0
- package/display/OutputGraphPreview/OutputGraphPreview.tpl.js +13 -0
- package/display/OutputListPreview/OutputListPreview.css.js +109 -0
- package/display/OutputListPreview/OutputListPreview.js +77 -0
- package/display/OutputListPreview/OutputListPreview.tpl.js +13 -0
- package/display/SourceEditor/SourceEditor.css.js +39 -0
- package/display/SourceEditor/SourceEditor.js +129 -0
- package/display/SourceEditor/SourceEditor.tpl.js +10 -0
- package/display/SourceViewer/SourceViewer.css.js +80 -0
- package/display/SourceViewer/SourceViewer.js +418 -0
- package/display/SourceViewer/SourceViewer.tpl.js +17 -0
- package/display/StatusRibbon/StatusRibbon.css.js +73 -0
- package/display/StatusRibbon/StatusRibbon.js +87 -0
- package/display/StatusRibbon/StatusRibbon.tpl.js +7 -0
- package/display/event-feed-adapter.js +72 -0
- package/display/format-utils.js +29 -0
- package/display/highlight.js +659 -0
- package/display/icons.js +37 -0
- package/display/markdown-formatter.js +60 -0
- package/display/network-approval-page.js +487 -0
- package/display/output-preview.js +261 -0
- package/effects/CellBg/CellBg.css.js +33 -0
- package/effects/CellBg/CellBg.js +410 -0
- package/effects/CellBg/CellBg.tpl.js +5 -0
- package/graph/canvas-adapter.js +223 -0
- package/graph/graph-algorithms.js +31 -0
- package/graph/index.js +46 -0
- package/graph/model.js +176 -0
- package/graph/project-graph-build.js +66 -0
- package/graph/project-graph-metadata.js +253 -0
- package/graph/project-package.js +128 -0
- package/graph/project-runtime.js +116 -0
- package/graph/project-transaction.js +284 -0
- package/graph/skeleton-utils.js +84 -0
- package/graph/theme-contract.js +36 -0
- package/graph/transaction-parser.js +56 -0
- package/icons/MaterialSymbols.js +69 -0
- package/icons/material-symbols-outlined-400.ttf +0 -0
- package/icons/material-symbols.css +24 -0
- package/index.js +95 -0
- package/inspector/InspectorPanel/InspectorPanel.css.js +375 -0
- package/inspector/InspectorPanel/InspectorPanel.js +368 -0
- package/inspector/InspectorPanel/InspectorPanel.tpl.js +96 -0
- package/inspector/TemplatePreview/TemplatePreview.css.js +104 -0
- package/inspector/TemplatePreview/TemplatePreview.js +145 -0
- package/inspector/TemplatePreview/TemplatePreview.tpl.js +33 -0
- package/interactions/ConnectFlow.js +304 -0
- package/interactions/Drag.js +104 -0
- package/interactions/Selector.js +133 -0
- package/interactions/SnapGrid.js +66 -0
- package/interactions/Zoom.js +139 -0
- package/layout/ActionZone/ActionZone.css.js +88 -0
- package/layout/ActionZone/ActionZone.js +261 -0
- package/layout/ActionZone/ActionZone.tpl.js +11 -0
- package/layout/CrossLayoutPortalBridge/CrossLayoutPortalBridge.js +255 -0
- package/layout/Layout/Layout.css.js +91 -0
- package/layout/Layout/Layout.js +637 -0
- package/layout/Layout/Layout.tpl.js +27 -0
- package/layout/LayoutNode/LayoutNode.css.js +302 -0
- package/layout/LayoutNode/LayoutNode.js +509 -0
- package/layout/LayoutNode/LayoutNode.tpl.js +39 -0
- package/layout/LayoutPreview/LayoutPreview.css.js +46 -0
- package/layout/LayoutPreview/LayoutPreview.js +102 -0
- package/layout/LayoutPreview/LayoutPreview.tpl.js +6 -0
- package/layout/LayoutRouter/LayoutRouter.js +274 -0
- package/layout/LayoutRouter/SectionRegistry.js +135 -0
- package/layout/LayoutRouter/routerSync.js +250 -0
- package/layout/LayoutSidebar/LayoutSidebar.css.js +411 -0
- package/layout/LayoutSidebar/LayoutSidebar.js +368 -0
- package/layout/LayoutSidebar/LayoutSidebar.tpl.js +26 -0
- package/layout/LayoutSidebar/SidebarSection.css.js +20 -0
- package/layout/LayoutSidebar/SidebarSection.js +184 -0
- package/layout/LayoutSidebar/SidebarSection.tpl.js +22 -0
- package/layout/LayoutTree.js +373 -0
- package/layout/PanelMenu/PanelMenu.css.js +43 -0
- package/layout/PanelMenu/PanelMenu.js +95 -0
- package/layout/PanelMenu/PanelMenu.tpl.js +17 -0
- package/layout/ProjectTabs/ProjectTabs.css.js +188 -0
- package/layout/ProjectTabs/ProjectTabs.js +77 -0
- package/layout/ProjectTabs/ProjectTabs.tpl.js +15 -0
- package/layout/index.js +40 -0
- package/list/ListDetailShell/ListDetailShell.css.js +128 -0
- package/list/ListDetailShell/ListDetailShell.js +72 -0
- package/list/ListDetailShell/ListDetailShell.tpl.js +36 -0
- package/list/ListItem/ListItem.css.js +111 -0
- package/list/ListItem/ListItem.js +66 -0
- package/list/ListItem/ListItem.tpl.js +18 -0
- package/locale/index.js +503 -0
- package/manifest/component-registry.js +2446 -0
- package/manifest/graph-schema.js +285 -0
- package/manifest/index.js +6 -0
- package/manifest/project-schema-catalog.js +246 -0
- package/manifest/rule-catalog.js +201 -0
- package/manifest/theme-catalog.js +2149 -0
- package/manifest/ui-schema-catalog.js +334 -0
- package/menu/ContextMenu/ContextMenu.css.js +61 -0
- package/menu/ContextMenu/ContextMenu.js +82 -0
- package/menu/ContextMenu/ContextMenu.tpl.js +19 -0
- package/navigation/QuickOpen/QuickOpen.css.js +92 -0
- package/navigation/QuickOpen/QuickOpen.js +185 -0
- package/navigation/QuickOpen/QuickOpen.tpl.js +15 -0
- package/navigation/quick-open-utils.js +101 -0
- package/node/CtrlItem/CtrlItem.css.js +41 -0
- package/node/CtrlItem/CtrlItem.js +24 -0
- package/node/CtrlItem/CtrlItem.tpl.js +17 -0
- package/node/GraphFrame/GraphFrame.css.js +66 -0
- package/node/GraphFrame/GraphFrame.js +32 -0
- package/node/GraphFrame/GraphFrame.tpl.js +13 -0
- package/node/GraphNode/GraphNode.css.js +815 -0
- package/node/GraphNode/GraphNode.js +173 -0
- package/node/GraphNode/GraphNode.tpl.js +33 -0
- package/node/NodeCallout/NodeCallout.css.js +91 -0
- package/node/NodeCallout/NodeCallout.js +281 -0
- package/node/NodeCallout/NodeCallout.tpl.js +8 -0
- package/node/NodeSocket/NodeSocket.css.js +68 -0
- package/node/NodeSocket/NodeSocket.js +26 -0
- package/node/NodeSocket/NodeSocket.tpl.js +7 -0
- package/node/PortItem/PortItem.css.js +93 -0
- package/node/PortItem/PortItem.js +87 -0
- package/node/PortItem/PortItem.tpl.js +10 -0
- package/package.json +165 -0
- package/palette/PaletteBrowser/PaletteBrowser.css.js +143 -0
- package/palette/PaletteBrowser/PaletteBrowser.js +152 -0
- package/palette/PaletteBrowser/PaletteBrowser.tpl.js +23 -0
- package/plugins/History.js +408 -0
- package/plugins/Readonly.js +60 -0
- package/rules/symbiote-3x.json +170 -0
- package/schemas/component-descriptor-v1.json +91 -0
- package/schemas/component-descriptor-v2.json +145 -0
- package/schemas/graph-model-v1.json +179 -0
- package/schemas/graph-v1.json +91 -0
- package/schemas/project-package-v1.json +102 -0
- package/schemas/project-transaction-v1.json +114 -0
- package/schemas/runtime-ui-v1.json +80 -0
- package/schemas/theme-rule-block-v1.json +73 -0
- package/shapes/CircleShape.js +79 -0
- package/shapes/CommentShape.js +35 -0
- package/shapes/DiamondShape.js +130 -0
- package/shapes/NodeShape.js +79 -0
- package/shapes/PillShape.js +91 -0
- package/shapes/RectShape.js +84 -0
- package/shapes/SVGShape.js +525 -0
- package/shapes/index.js +63 -0
- package/surface/Card/Card.css.js +57 -0
- package/surface/Card/Card.js +17 -0
- package/surface/Card/Card.tpl.js +3 -0
- package/themes/Palette.js +30 -0
- package/themes/Skin.js +113 -0
- package/themes/Theme.js +82 -0
- package/themes/carbon.js +135 -0
- package/themes/dark.js +140 -0
- package/themes/default-dark.js +714 -0
- package/themes/default-provider.css +635 -0
- package/themes/default-provider.js +718 -0
- package/themes/ebook.js +136 -0
- package/themes/grey.js +137 -0
- package/themes/light.js +139 -0
- package/themes/neon.js +138 -0
- package/themes/pcb.js +273 -0
- package/themes/synthwave.js +138 -0
- package/tokens/base.json +29 -0
- package/tokens/themes/carbon.json +11 -0
- package/tokens/themes/dark.json +12 -0
- package/tokens/themes/default-dark.json +1543 -0
- package/tokens/themes/default-provider.json +1543 -0
- package/tokens/themes/ebook.json +11 -0
- package/tokens/themes/grey.json +11 -0
- package/tokens/themes/light.json +12 -0
- package/tokens/themes/neon.json +11 -0
- package/tokens/themes/pcb.json +11 -0
- package/tokens/themes/synthwave.json +11 -0
- package/toolbar/QuickToolbar/QuickToolbar.css.js +152 -0
- package/toolbar/QuickToolbar/QuickToolbar.js +529 -0
- package/toolbar/QuickToolbar/QuickToolbar.tpl.js +34 -0
- package/tree/TreePanel/TreePanel.css.js +112 -0
- package/tree/TreePanel/TreePanel.js +147 -0
- package/tree/TreePanel/TreePanel.tpl.js +18 -0
- package/tree/TreeView/TreeView.css.js +122 -0
- package/tree/TreeView/TreeView.js +365 -0
- package/tree/TreeView/TreeView.tpl.js +10 -0
- package/ui/dialogs.js +221 -0
- package/ui/host-adapters.js +114 -0
- package/ui/index.js +660 -0
- package/ui/locale.js +50 -0
- package/ui/overlay-stack.js +89 -0
- package/ui/shared-styles.js +26 -0
- package/webmcp.js +37 -0
- package/xr/deep-graph.js +646 -0
- package/xr/emulation.js +198 -0
- package/xr/gesture.js +228 -0
- package/xr/html-canvas-renderer.js +472 -0
- package/xr/index.js +15 -0
- package/xr/layout-projection.js +1046 -0
- package/xr/panel-frame.js +128 -0
- package/xr/panel-host.js +267 -0
- package/xr/pointer.js +258 -0
- package/xr/scene-controller.js +242 -0
- package/xr/spatial-scene.js +212 -0
- package/xr/theme-bridge.js +105 -0
- package/xr/three-webxr-adapter.js +3439 -0
- package/xr/webgl-layer-renderer.js +419 -0
- package/xr/webxr.js +679 -0
- package/xr/workbench.js +516 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
export let RULES = [
|
|
2
|
+
{
|
|
3
|
+
id: 'SYM-001',
|
|
4
|
+
name: 'triple-file-standard',
|
|
5
|
+
description: 'Production components are split into .js, .tpl.js, and .css.js files.',
|
|
6
|
+
severity: 'error',
|
|
7
|
+
filePattern: '**/*.js',
|
|
8
|
+
check: 'component_has_triple_files',
|
|
9
|
+
tags: ['symbiote', 'components', 'architecture'],
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: 'SYM-002',
|
|
13
|
+
name: 'no-inline-templates',
|
|
14
|
+
description: 'Templates are defined in .tpl.js files instead of inline component bodies.',
|
|
15
|
+
severity: 'error',
|
|
16
|
+
filePattern: '**/*.js',
|
|
17
|
+
check: 'no_inline_html_template',
|
|
18
|
+
tags: ['symbiote', 'templates'],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'SYM-003',
|
|
22
|
+
name: 'reg-call-required',
|
|
23
|
+
description: "Every custom element component calls .reg('kebab-case-tag').",
|
|
24
|
+
severity: 'error',
|
|
25
|
+
filePattern: '**/*.js',
|
|
26
|
+
check: 'has_reg_call',
|
|
27
|
+
tags: ['symbiote', 'web-components'],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'SYM-004',
|
|
31
|
+
name: 'css-token-usage',
|
|
32
|
+
description: 'Component CSS uses --sn-* custom properties for themeable values.',
|
|
33
|
+
severity: 'warning',
|
|
34
|
+
filePattern: '**/*.css.js',
|
|
35
|
+
check: 'uses_sn_css_tokens',
|
|
36
|
+
tags: ['symbiote', 'theming', 'tokens'],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'SYM-005',
|
|
40
|
+
name: 'node-safe-core',
|
|
41
|
+
description: 'Root, core, manifest, rules, schemas, and tokens remain importable without DOM globals.',
|
|
42
|
+
severity: 'error',
|
|
43
|
+
filePattern: ['index.js', 'core/**/*.js', 'manifest/**/*.js'],
|
|
44
|
+
check: 'no_dom_side_effects',
|
|
45
|
+
tags: ['symbiote', 'node-safe', 'library'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'SYM-006',
|
|
49
|
+
name: 'single-binding-block',
|
|
50
|
+
description: 'Each template element has at most one Symbiote binding block.',
|
|
51
|
+
severity: 'error',
|
|
52
|
+
filePattern: '**/*.tpl.js',
|
|
53
|
+
check: 'no_multiple_binding_blocks',
|
|
54
|
+
tags: ['symbiote', 'templates', 'bindings'],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'SYM-007',
|
|
58
|
+
name: 'published-library-contract',
|
|
59
|
+
description: 'Public metadata, rules, schemas, and token files are reachable from package exports and files[].',
|
|
60
|
+
severity: 'error',
|
|
61
|
+
filePattern: 'package.json',
|
|
62
|
+
check: 'published_contract_in_exports_and_files',
|
|
63
|
+
tags: ['package', 'exports', 'library'],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: 'SYM-008',
|
|
67
|
+
name: 'agent-boundary',
|
|
68
|
+
description: 'Agent-facing manifests describe modules and rules without importing browser components.',
|
|
69
|
+
severity: 'error',
|
|
70
|
+
filePattern: 'manifest/**/*.js',
|
|
71
|
+
check: 'manifest_is_side_effect_free',
|
|
72
|
+
tags: ['agents', 'mcp', 'architecture'],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'SYM-009',
|
|
76
|
+
name: 'public-subpath-imports',
|
|
77
|
+
description: 'Consumers import symbiote-node through package exports instead of relative package internals or deep implementation paths.',
|
|
78
|
+
severity: 'error',
|
|
79
|
+
filePattern: '**/*.js',
|
|
80
|
+
check: 'uses_public_package_exports',
|
|
81
|
+
tags: ['package', 'exports', 'library', 'agents'],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: 'SYM-010',
|
|
85
|
+
name: 'light-dom-host-selector',
|
|
86
|
+
description: 'Light DOM rootStyles use the registered custom element selector as the host selector; Shadow DOM styles use :host. Shared CSS that must run in both modes includes both selectors.',
|
|
87
|
+
severity: 'error',
|
|
88
|
+
filePattern: '**/*.css.js',
|
|
89
|
+
check: 'root_styles_use_registered_host_selector',
|
|
90
|
+
tags: ['symbiote', 'styles', 'light-dom', 'theming'],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'SYM-011',
|
|
94
|
+
name: 'theme-cascade-contract',
|
|
95
|
+
description: 'Themeable components consume inherited CSS custom properties and do not require per-component applyTheme calls or local token resets.',
|
|
96
|
+
severity: 'error',
|
|
97
|
+
filePattern: ['**/*.css.js', 'themes/**/*.js', 'tokens/**/*.json'],
|
|
98
|
+
check: 'theme_values_cascade_from_stable_root',
|
|
99
|
+
tags: ['symbiote', 'theming', 'tokens', 'library'],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 'SYM-012',
|
|
103
|
+
name: 'css-data-for-visual-tokens',
|
|
104
|
+
description: 'Static visual tokens such as colors, spacing, radius, typography, and icon fonts are carried by CSS custom properties; PubSub and JS setters are reserved for application state or explicit dynamic measurements.',
|
|
105
|
+
severity: 'warning',
|
|
106
|
+
filePattern: '**/*.js',
|
|
107
|
+
check: 'visual_tokens_use_css_custom_properties',
|
|
108
|
+
tags: ['symbiote', 'css-data', 'theming', 'state'],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: 'SYM-013',
|
|
112
|
+
name: 'data-driven-runtime-ui',
|
|
113
|
+
description: 'Reusable UI primitives expose clean data, props, events, and manifest metadata so agents can assemble layouts and functionality at runtime without product-specific coupling.',
|
|
114
|
+
severity: 'error',
|
|
115
|
+
filePattern: ['**/*.js', 'manifest/**/*.js', 'custom-elements.json'],
|
|
116
|
+
check: 'component_contract_is_data_driven',
|
|
117
|
+
tags: ['symbiote', 'agents', 'runtime-ui', 'library'],
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
id: 'SYM-014',
|
|
121
|
+
name: 'theme-rule-block-composition',
|
|
122
|
+
description: 'Themes are composed from named rule blocks: source accents, derived color formulas, geometry formulas, typography formulas, motion/effect formulas, semantic aliases, and component aliases.',
|
|
123
|
+
severity: 'error',
|
|
124
|
+
filePattern: ['themes/**/*.js', 'tokens/**/*.json', 'manifest/**/*.js'],
|
|
125
|
+
check: 'theme_exposes_composable_rule_blocks',
|
|
126
|
+
tags: ['symbiote', 'themes', 'agents', 'design-rules'],
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: 'SYM-015',
|
|
130
|
+
name: 'geometry-cascade-formulas',
|
|
131
|
+
description: 'Spacing, radius, stroke, density, panel gaps, and component sizing derive from root geometry tokens through documented formulas instead of unrelated fixed values.',
|
|
132
|
+
severity: 'error',
|
|
133
|
+
filePattern: ['themes/**/*.js', 'tokens/**/*.json', '**/*.css.js'],
|
|
134
|
+
check: 'geometry_tokens_derive_from_root_scale',
|
|
135
|
+
tags: ['symbiote', 'themes', 'geometry', 'tokens'],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
id: 'SYM-016',
|
|
139
|
+
name: 'color-cascade-formulas',
|
|
140
|
+
description: 'Surface, text, border, accent, state, and overlay tokens derive from source palettes or accent tokens through documented formulas with contrast-aware roles.',
|
|
141
|
+
severity: 'error',
|
|
142
|
+
filePattern: ['themes/**/*.js', 'tokens/**/*.json', '**/*.css.js'],
|
|
143
|
+
check: 'color_tokens_derive_from_source_palette',
|
|
144
|
+
tags: ['symbiote', 'themes', 'color', 'tokens', 'accessibility'],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'SYM-017',
|
|
148
|
+
name: 'interaction-effect-formulas',
|
|
149
|
+
description: 'Hover, focus, active, selected, loading, error, and transition effects derive from semantic state tokens and motion formulas, not per-component bespoke effects.',
|
|
150
|
+
severity: 'warning',
|
|
151
|
+
filePattern: ['themes/**/*.js', 'tokens/**/*.json', '**/*.css.js'],
|
|
152
|
+
check: 'interaction_effects_derive_from_state_tokens',
|
|
153
|
+
tags: ['symbiote', 'themes', 'motion', 'effects', 'interaction'],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 'SYM-018',
|
|
157
|
+
name: 'no-legacy-ui-shell-classes',
|
|
158
|
+
description: 'Reusable and provider-owned UI must not introduce legacy .ui-* shared shell classes; use provider custom elements, host selectors, or component-namespaced classes.',
|
|
159
|
+
severity: 'error',
|
|
160
|
+
filePattern: ['**/*.tpl.js', '**/*.css.js', '**/*.js'],
|
|
161
|
+
check: 'no_legacy_ui_shell_classes',
|
|
162
|
+
tags: ['symbiote', 'styles', 'theming', 'components'],
|
|
163
|
+
},
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
export let RULESETS = [
|
|
167
|
+
{
|
|
168
|
+
name: 'symbiote-3x',
|
|
169
|
+
version: '1.0.0',
|
|
170
|
+
path: 'rules/symbiote-3x.json',
|
|
171
|
+
description: 'Machine-readable Symbiote.js 3.x rules for reusable package, UI, and provider contracts.',
|
|
172
|
+
ruleIds: RULES.map((rule) => rule.id),
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
|
|
176
|
+
export function listRuleSets() {
|
|
177
|
+
return RULESETS.map((ruleset) => ({ ...ruleset, ruleIds: [...ruleset.ruleIds] }));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function getRuleSet(name) {
|
|
181
|
+
return RULESETS.find((ruleset) => ruleset.name === name);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export function listRules(filter = {}) {
|
|
185
|
+
let ruleIds = null;
|
|
186
|
+
if (filter.ruleset) {
|
|
187
|
+
let ruleset = getRuleSet(filter.ruleset);
|
|
188
|
+
ruleIds = ruleset ? new Set(ruleset.ruleIds) : new Set();
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return RULES.filter((rule) => {
|
|
192
|
+
if (ruleIds && !ruleIds.has(rule.id)) return false;
|
|
193
|
+
if (filter.severity && rule.severity !== filter.severity) return false;
|
|
194
|
+
if (filter.tag && !rule.tags.includes(filter.tag)) return false;
|
|
195
|
+
return true;
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function getRule(id) {
|
|
200
|
+
return RULES.find((rule) => rule.id === id);
|
|
201
|
+
}
|