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.
- package/CHANGELOG.md +49 -0
- package/README.md +53 -3
- package/canvas/AutoLayout.js +0 -1
- package/canvas/CanvasGraph/CanvasGraph.js +408 -44
- package/canvas/CanvasGraph/CanvasGraphDrawState.js +9 -2
- package/canvas/ForceLayout.js +459 -15
- package/canvas/ForceWorker.js +6 -7
- package/canvas/NodeCanvas/NodeCanvas.js +51 -7
- package/canvas/graph-explorer.js +81 -3
- package/canvas/graph-layout.js +182 -9
- package/canvas/graph-model.js +116 -3
- package/canvas/index.js +2 -0
- package/control/Button/Button.css.js +79 -16
- package/control/Button/Button.js +132 -14
- package/control/Button/Button.tpl.js +6 -1
- package/control/Field/Field.css.js +77 -0
- package/control/Field/Field.js +161 -0
- package/control/Field/Field.tpl.js +12 -1
- package/control/Rating/Rating.css.js +58 -0
- package/control/Rating/Rating.js +206 -0
- package/control/Rating/Rating.tpl.js +6 -0
- package/control/SegmentedControl/SegmentedControl.css.js +60 -0
- package/control/SegmentedControl/SegmentedControl.js +208 -0
- package/control/SegmentedControl/SegmentedControl.tpl.js +5 -0
- package/control/SelectionControl/SelectionControl.css.js +250 -0
- package/control/SelectionControl/SelectionControl.js +333 -0
- package/control/SelectionControl/SelectionControl.tpl.js +17 -0
- package/control/Slider/Slider.css.js +77 -0
- package/control/Slider/Slider.js +208 -0
- package/control/Slider/Slider.tpl.js +11 -0
- package/custom-elements.json +5504 -3396
- package/display/Badge/Badge.js +5 -0
- package/display/Banner/Banner.js +22 -0
- package/display/DataTable/DataTable.css.js +97 -2
- package/display/DataTable/DataTable.js +129 -6
- package/display/DataTable/DataTable.tpl.js +9 -4
- package/display/EmptyState/EmptyState.js +5 -0
- package/display/LoadingOverlay/LoadingOverlay.js +16 -0
- package/display/Metric/Metric.css.js +13 -13
- package/display/Metric/Metric.js +19 -0
- package/display/Tooltip/Tooltip.css.js +35 -0
- package/display/Tooltip/Tooltip.js +169 -0
- package/display/Tooltip/Tooltip.tpl.js +8 -0
- package/index.js +2 -0
- package/layout/ProjectTabs/ProjectTabs.js +108 -2
- package/layout/ProjectTabs/ProjectTabs.tpl.js +1 -1
- package/list/ListItem/ListItem.css.js +56 -18
- package/list/ListItem/ListItem.js +99 -4
- package/list/ListItem/ListItem.tpl.js +11 -4
- package/llms.txt +2 -0
- package/locale/index.js +64 -3
- package/manifest/component-registry.js +365 -1
- package/manifest/graph-schema.js +5 -0
- package/menu/ContextMenu/ContextMenu.css.js +67 -12
- package/menu/ContextMenu/ContextMenu.js +121 -23
- package/menu/ContextMenu/ContextMenu.tpl.js +8 -9
- package/navigation/QuickOpen/QuickOpen.css.js +1 -1
- package/navigation/QuickOpen/QuickOpen.js +29 -5
- package/navigation/QuickOpen/QuickOpen.tpl.js +10 -4
- package/package.json +3 -2
- package/skills/symbiote-adapter-ant-design/SKILL.md +72 -0
- package/skills/symbiote-adapter-chakra/SKILL.md +66 -0
- package/skills/symbiote-adapter-fluent-ui/SKILL.md +68 -0
- package/skills/symbiote-adapter-mantine/SKILL.md +69 -0
- package/skills/symbiote-adapter-material-web/SKILL.md +68 -0
- package/skills/symbiote-adapter-mui/SKILL.md +73 -0
- package/skills/symbiote-adapter-radix-zag/SKILL.md +69 -0
- package/skills/symbiote-adapter-shoelace/SKILL.md +76 -0
- package/skills/symbiote-adapter-spectrum/SKILL.md +71 -0
- package/skills/symbiote-library-adapter/SKILL.md +138 -0
- package/skills/symbiote-library-adapter/references/functional-comparison-checklist.md +174 -0
- package/skills/symbiote-ui/SKILL.md +21 -1
- package/surface/Card/Card.css.js +13 -6
- package/surface/Card/Card.js +27 -0
- package/surface/Card/Card.tpl.js +5 -1
- package/tree/TreePanel/TreePanel.js +8 -0
- package/tree/TreeView/TreeView.js +92 -4
- package/ui/index.js +31 -0
- 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.
|
|
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: [
|
|
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:
|
package/canvas/AutoLayout.js
CHANGED
|
@@ -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);
|