symbiote-ui 0.3.0-alpha.21 → 0.3.0-alpha.23

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +53 -3
  3. package/canvas/AutoLayout.js +0 -1
  4. package/canvas/CanvasGraph/CanvasGraph.js +408 -44
  5. package/canvas/CanvasGraph/CanvasGraphDrawState.js +9 -2
  6. package/canvas/ForceLayout.js +459 -15
  7. package/canvas/ForceWorker.js +6 -7
  8. package/canvas/NodeCanvas/NodeCanvas.js +51 -7
  9. package/canvas/graph-explorer.js +81 -3
  10. package/canvas/graph-layout.js +182 -9
  11. package/canvas/graph-model.js +116 -3
  12. package/canvas/index.js +2 -0
  13. package/control/Button/Button.css.js +79 -16
  14. package/control/Button/Button.js +132 -14
  15. package/control/Button/Button.tpl.js +6 -1
  16. package/control/Field/Field.css.js +77 -0
  17. package/control/Field/Field.js +161 -0
  18. package/control/Field/Field.tpl.js +12 -1
  19. package/control/Rating/Rating.css.js +58 -0
  20. package/control/Rating/Rating.js +206 -0
  21. package/control/Rating/Rating.tpl.js +6 -0
  22. package/control/SegmentedControl/SegmentedControl.css.js +60 -0
  23. package/control/SegmentedControl/SegmentedControl.js +208 -0
  24. package/control/SegmentedControl/SegmentedControl.tpl.js +5 -0
  25. package/control/SelectionControl/SelectionControl.css.js +250 -0
  26. package/control/SelectionControl/SelectionControl.js +333 -0
  27. package/control/SelectionControl/SelectionControl.tpl.js +17 -0
  28. package/control/Slider/Slider.css.js +77 -0
  29. package/control/Slider/Slider.js +208 -0
  30. package/control/Slider/Slider.tpl.js +11 -0
  31. package/custom-elements.json +5504 -3396
  32. package/display/Badge/Badge.js +5 -0
  33. package/display/Banner/Banner.js +22 -0
  34. package/display/DataTable/DataTable.css.js +97 -2
  35. package/display/DataTable/DataTable.js +129 -6
  36. package/display/DataTable/DataTable.tpl.js +9 -4
  37. package/display/EmptyState/EmptyState.js +5 -0
  38. package/display/LoadingOverlay/LoadingOverlay.js +16 -0
  39. package/display/Metric/Metric.css.js +13 -13
  40. package/display/Metric/Metric.js +19 -0
  41. package/display/Tooltip/Tooltip.css.js +35 -0
  42. package/display/Tooltip/Tooltip.js +169 -0
  43. package/display/Tooltip/Tooltip.tpl.js +8 -0
  44. package/index.js +2 -0
  45. package/layout/ProjectTabs/ProjectTabs.js +108 -2
  46. package/layout/ProjectTabs/ProjectTabs.tpl.js +1 -1
  47. package/list/ListItem/ListItem.css.js +56 -18
  48. package/list/ListItem/ListItem.js +99 -4
  49. package/list/ListItem/ListItem.tpl.js +11 -4
  50. package/llms.txt +2 -0
  51. package/locale/index.js +64 -3
  52. package/manifest/component-registry.js +365 -1
  53. package/manifest/graph-schema.js +5 -0
  54. package/menu/ContextMenu/ContextMenu.css.js +67 -12
  55. package/menu/ContextMenu/ContextMenu.js +121 -23
  56. package/menu/ContextMenu/ContextMenu.tpl.js +8 -9
  57. package/navigation/QuickOpen/QuickOpen.css.js +1 -1
  58. package/navigation/QuickOpen/QuickOpen.js +29 -5
  59. package/navigation/QuickOpen/QuickOpen.tpl.js +10 -4
  60. package/package.json +3 -2
  61. package/skills/symbiote-adapter-ant-design/SKILL.md +72 -0
  62. package/skills/symbiote-adapter-chakra/SKILL.md +66 -0
  63. package/skills/symbiote-adapter-fluent-ui/SKILL.md +68 -0
  64. package/skills/symbiote-adapter-mantine/SKILL.md +69 -0
  65. package/skills/symbiote-adapter-material-web/SKILL.md +68 -0
  66. package/skills/symbiote-adapter-mui/SKILL.md +73 -0
  67. package/skills/symbiote-adapter-radix-zag/SKILL.md +69 -0
  68. package/skills/symbiote-adapter-shoelace/SKILL.md +76 -0
  69. package/skills/symbiote-adapter-spectrum/SKILL.md +71 -0
  70. package/skills/symbiote-library-adapter/SKILL.md +138 -0
  71. package/skills/symbiote-library-adapter/references/functional-comparison-checklist.md +174 -0
  72. package/skills/symbiote-ui/SKILL.md +21 -1
  73. package/surface/Card/Card.css.js +13 -6
  74. package/surface/Card/Card.js +27 -0
  75. package/surface/Card/Card.tpl.js +5 -1
  76. package/tree/TreePanel/TreePanel.js +8 -0
  77. package/tree/TreeView/TreeView.js +92 -4
  78. package/ui/index.js +31 -0
  79. package/ui/locale.js +9 -11
package/CHANGELOG.md CHANGED
@@ -4,6 +4,55 @@ All notable changes to `symbiote-ui` will be documented in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## [0.3.0-alpha.23] - 2026-06-08
8
+
9
+ ### Added
10
+
11
+ - Added reusable base controls and display primitives for rating, segmented
12
+ selection, native selection controls, sliders, and tooltips.
13
+ - Expanded agent-facing component metadata, Custom Elements output, and
14
+ discovery coverage for the broader component catalog.
15
+ - Added segmented browser smoke execution so visual/layout scenarios run as
16
+ independent release gates.
17
+
18
+ ### Changed
19
+
20
+ - Hardened reusable buttons, fields, list items, tables, menus, project tabs,
21
+ cards, banners, metrics, empty states, and loading overlays with stronger
22
+ state, ARIA, keyboard, and intent contracts.
23
+ - Synchronized package test execution through the suite runner and lock helper
24
+ so browser and non-browser tests do not collide.
25
+
26
+ ### Fixed
27
+
28
+ - Made browser smoke tests require Chrome for Testing, Chromium, or an explicit
29
+ `CHROME_BIN` instead of silently launching the unsupported macOS Chrome app
30
+ wrapper.
31
+ - Tightened CDP page readiness checks so browser tests only pass after the
32
+ expected URL and document body are present.
33
+
34
+ ## [0.3.0-alpha.22] - 2026-06-08
35
+
36
+ ### Added
37
+
38
+ - Added `canvas-graph` multi-node focus via `fitNodes()`, `flyToNodes()`,
39
+ and `focusNodes()`, including WebMCP/discovery metadata for
40
+ `canvas_graph_focus_nodes`.
41
+ - Extended `createGraphViewModeController().focusNode()` with `flatNodeIds` so
42
+ flat graph demos can fit several visible nodes without drilling into a parent
43
+ group.
44
+ - Added a main-thread `ForceLayout` fallback so bundled hosts still render
45
+ `canvas-graph` when the standalone worker file is not served.
46
+
47
+ ### Fixed
48
+
49
+ - Kept flat graph selection emphasis scoped to the selected node by default so
50
+ multi-node focus does not fan out repeated pulse waves across every fitted
51
+ neighbor.
52
+ - Refreshed cached `canvas-graph` drawing colors on `cascade-theme-change` and
53
+ root/component theme mutations so flat canvas nodes, edges, and backgrounds
54
+ inherit the active cascade theme without host-local redraw hacks.
55
+
7
56
  ## [0.3.0-alpha.20] - 2026-06-08
8
57
 
9
58
  ### Changed
package/README.md CHANGED
@@ -130,7 +130,7 @@ editor.addNode(node);
130
130
  let canvas = document.querySelector('node-canvas');
131
131
  canvas.setEditor(editor);
132
132
  canvas.setPathStyle('pcb');
133
- canvas.setFlowLayout({ nodeIds: [node.id], direction: 'vertical', scroll: true });
133
+ canvas.applyLayout({ algorithm: 'flow', nodeIds: [node.id], direction: 'vertical', scroll: true });
134
134
 
135
135
  let graphView = createGraphViewModeController({
136
136
  shell: document.querySelector('graph-explorer-shell'),
@@ -138,15 +138,40 @@ let graphView = createGraphViewModeController({
138
138
  flatGraph: document.querySelector('canvas-graph'),
139
139
  structuredEditor: editor,
140
140
  flatModel: {
141
- nodes: [{ id: 'generated-view', label: 'Generated view', type: 'data' }],
141
+ nodes: [
142
+ { id: 'group/generated', label: 'Generated', type: 'data', children: ['generated-view'] },
143
+ { id: 'generated-view', label: 'Generated view', type: 'data' },
144
+ ],
142
145
  edges: [],
146
+ groups: [{ id: 'group/generated', nodeIds: ['generated-view'] }],
143
147
  },
144
148
  });
145
149
 
146
150
  graphView.setMode(new URLSearchParams(location.search).get('mode'));
147
- graphView.focusNode({ nodeId: 'generated-view' });
151
+ graphView.focusNode({ nodeId: 'generated-view', flatNodeIds: ['generated-view'] });
148
152
  ```
149
153
 
154
+ For flat overview demos, keep the nodes that should be visible together at the
155
+ root of the `canvas-graph` model and pass `flatNodeIds` to
156
+ `focusNode()`. The older `flatNodeId` field focuses a single node and may enter
157
+ that node's parent group when the model is hierarchical. Focus changes in flat
158
+ mode queue the next active node through the graph deactivation cycle, and
159
+ `canvas-graph` renders a small route marker along the available node links so
160
+ the viewer keeps visual continuity between selections.
161
+
162
+ Semantic overview groups can be declared with top-level `groups`, `node.children`,
163
+ `node.parentId`, or `node.group`. `canvas-graph` normalizes those groups, passes
164
+ them into the force layout, and derives group gravity weights from group size,
165
+ link density, and cross-group links. Hosts should provide the semantic model, not
166
+ product-local physics constants.
167
+
168
+ `node-canvas.applyLayout()` is the agent-facing layout entrypoint. Use
169
+ `algorithm: 'auto'` for grouped graph auto-layout, `algorithm: 'tree'` for
170
+ structured directory/tree layouts, and `algorithm: 'flow'` for document-like
171
+ previews. Flat graph seed positions from `computeInitialGraphPositions()` are
172
+ stable by default; pass `random: Math.random` only when a non-deterministic demo
173
+ is intentional.
174
+
150
175
  `panel-layout` owns reusable split and panel behavior only. Product routes,
151
176
  transport, persistence, and permission checks remain host policy:
152
177
 
@@ -319,6 +344,31 @@ host closes or removes UI-invoked panels. Hosts should pass `allowedMethods` or
319
344
  `allowMethod()` when applying agent-authored `state.methods`; use the component
320
345
  registry or a project policy allowlist to approve method calls.
321
346
 
347
+ ## Localization
348
+
349
+ `symbiote-ui/locale` supports English, Russian, and Spanish catalogs with an
350
+ `auto` mode that resolves browser language preferences by default. Browser hosts
351
+ can use the UI entrypoint helper once during startup and pass product-owned
352
+ messages without reimplementing locale detection:
353
+
354
+ ```js
355
+ import { configureBrowserLocalization, translate } from 'symbiote-ui/ui';
356
+
357
+ configureBrowserLocalization({
358
+ messages: {
359
+ ru: { 'app.title': 'Проект' },
360
+ es: { 'app.title': 'Proyecto' },
361
+ en: { 'app.title': 'Project' },
362
+ },
363
+ });
364
+
365
+ document.title = translate('app.title');
366
+ ```
367
+
368
+ Node-safe hosts can call `configureAutoLocalization()` from `symbiote-ui/locale`
369
+ with explicit `preferences` or a supplied `navigator` object. The helper sets
370
+ `document.documentElement.lang` when a document is available.
371
+
322
372
  ## Cascade Theme
323
373
 
324
374
  `symbiote-ui` exposes a reusable cascade theme contract for agent-built UI, graph canvases, layouts, scrollbars, and VR-ready panels:
@@ -414,7 +414,6 @@ export function computeAutoLayout(editor, options = {}) {
414
414
  for (let r = 0; r < maxR; r += step) {
415
415
  for (let delta = 0; delta <= M_PI; delta += angularStep) {
416
416
  for (const sign of [1, -1]) {
417
- cycleCount++;
418
417
  let a = prefAngle + delta * sign;
419
418
  let x = Math.round(Math.cos(a) * r);
420
419
  let y = Math.round(Math.sin(a) * r);