@ds-mo/ui 12.6.2 → 12.7.0
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/README.md +44 -115
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +5 -3
- package/dist/agent.json +56 -32
- package/dist/angular/ds-menu.d.ts +1 -1
- package/dist/angular/ds-menu.js +3 -3
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-nav.js.map +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-title.js.map +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-bar-workflow.js.map +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-data-viz-bar.js +1 -1
- package/dist/components/ds-card-data-viz-bar.js.map +1 -1
- package/dist/components/ds-card-data-viz-donut.js +1 -1
- package/dist/components/ds-card-data-viz-donut.js.map +1 -1
- package/dist/components/ds-card-data-viz-line.js +1 -1
- package/dist/components/ds-card-data-viz-line.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-card-shell-data-viz.js +1 -1
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-conversation-list.js.map +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-field.js.map +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-input.js.map +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-composer.js.map +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message-scroller.js.map +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js.map +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js.map +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-modal.js.map +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-nav.js.map +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-radio.js.map +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select-multi.js +1 -1
- package/dist/components/ds-select-multi.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-picker.js.map +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-shell-tools.js.map +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-DwX7UmLl.js → p--eKXTylf.js} +2 -2
- package/dist/components/p-1darPzys.js +2 -0
- package/dist/components/{p-DXLWm4PF.js.map → p-1darPzys.js.map} +1 -1
- package/dist/components/{p-DIoiApa-.js → p-5-QAFB4j.js} +2 -2
- package/dist/components/{p-D-xttdpn.js → p-B-9A0e_0.js} +2 -2
- package/dist/components/{p-CaRyxTMz.js → p-BT5hgg5i.js} +2 -2
- package/dist/components/{p-DQDpDYyF.js → p-B_5nxOeB.js} +2 -2
- package/dist/components/p-BcfC6phQ.js +2 -0
- package/dist/components/p-BcfC6phQ.js.map +1 -0
- package/dist/components/{p-BkAMkjIR.js → p-Bl001G0Y.js} +2 -2
- package/dist/components/p-BuiZcSga.js +2 -0
- package/dist/components/p-BuiZcSga.js.map +1 -0
- package/dist/components/p-Bv9frkvW.js +2 -0
- package/dist/components/p-Bv9frkvW.js.map +1 -0
- package/dist/components/{p-DWdRSOBV.js → p-C0-K8vnW.js} +2 -2
- package/dist/components/p-C61yJkfr.js +2 -0
- package/dist/components/p-C61yJkfr.js.map +1 -0
- package/dist/components/p-C6xC48hG.js +2 -0
- package/dist/components/p-C6xC48hG.js.map +1 -0
- package/dist/components/p-C9h13YnX.js +2 -0
- package/dist/components/{p-CnHrJTD5.js → p-CUAYsK44.js} +2 -2
- package/dist/components/p-C_9ZH0A3.js +2 -0
- package/dist/components/p-C_9ZH0A3.js.map +1 -0
- package/dist/components/p-Ca9-fnFl.js +2 -0
- package/dist/components/p-Ca9-fnFl.js.map +1 -0
- package/dist/components/p-CnAkobDW.js +2 -0
- package/dist/components/p-CnAkobDW.js.map +1 -0
- package/dist/components/{p-CWTih3Gc.js → p-CqWV4Hl_.js} +2 -2
- package/dist/components/{p-B9bxDfZV.js → p-Crsn82rz.js} +2 -2
- package/dist/components/p-CuwopElg.js +2 -0
- package/dist/components/p-CuwopElg.js.map +1 -0
- package/dist/components/{p-BwsGYxZx.js → p-CvyTZ4Mg.js} +2 -2
- package/dist/components/p-DIa73GJP.js +2 -0
- package/dist/components/p-DIa73GJP.js.map +1 -0
- package/dist/components/{p-DqubRds2.js → p-DNFd4Ao-.js} +2 -2
- package/dist/components/p-De7NquTI.js +2 -0
- package/dist/components/p-De7NquTI.js.map +1 -0
- package/dist/components/p-DjbTFy2B.js +2 -0
- package/dist/components/p-DjbTFy2B.js.map +1 -0
- package/dist/components/p-guQ7hv6W.js +2 -0
- package/dist/components/p-guQ7hv6W.js.map +1 -0
- package/dist/components/{p-BwGnhInj.js → p-k0Hmj1KV.js} +2 -2
- package/dist/components/p-pgxlkvUy.js +2 -0
- package/dist/docs/components.json +110 -25
- package/dist/lib/utils/control-text.d.ts +3 -1
- package/dist/lib/utils/index.d.ts +1 -1
- package/dist/lib/utils/index.js +8 -0
- package/dist/lib/utils/index.js.map +2 -2
- package/dist/mcp-data/registry/bar-nav.json +2 -2
- package/dist/mcp-data/registry/bar-title.json +2 -2
- package/dist/mcp-data/registry/bar-workflow.json +2 -2
- package/dist/mcp-data/registry/button-filled.json +5 -4
- package/dist/mcp-data/registry/button-unfilled.json +3 -2
- package/dist/mcp-data/registry/card-data-viz-bar.json +3 -2
- package/dist/mcp-data/registry/card-data-viz-donut.json +3 -2
- package/dist/mcp-data/registry/card-data-viz-line.json +3 -2
- package/dist/mcp-data/registry/card-setting.json +2 -2
- package/dist/mcp-data/registry/card-shell-data-viz.json +2 -2
- package/dist/mcp-data/registry/checkbox.json +9 -9
- package/dist/mcp-data/registry/conversation-list-item.json +2 -2
- package/dist/mcp-data/registry/conversation-list.json +2 -2
- package/dist/mcp-data/registry/empty-state.json +5 -1
- package/dist/mcp-data/registry/field.json +3 -2
- package/dist/mcp-data/registry/input.json +8 -7
- package/dist/mcp-data/registry/menu.json +22 -3
- package/dist/mcp-data/registry/message-scroller.json +2 -2
- package/dist/mcp-data/registry/mobile-bar-nav.json +3 -3
- package/dist/mcp-data/registry/mobile-header.json +2 -2
- package/dist/mcp-data/registry/mobile-sheet-nav.json +5 -3
- package/dist/mcp-data/registry/modal.json +2 -2
- package/dist/mcp-data/registry/panel-nav.json +2 -2
- package/dist/mcp-data/registry/panel-tool-header.json +2 -2
- package/dist/mcp-data/registry/panel-tool-search.json +2 -2
- package/dist/mcp-data/registry/panel-tools.json +2 -2
- package/dist/mcp-data/registry/radio.json +9 -9
- package/dist/mcp-data/registry/registry.json +55 -31
- package/dist/mcp-data/registry/select-multi.json +9 -7
- package/dist/mcp-data/registry/select.json +9 -7
- package/dist/mcp-data/registry/shell-app.json +2 -1
- package/dist/mcp-data/registry/shell-tools.json +1 -1
- package/dist/mcp-data/registry/skeleton.json +2 -2
- package/dist/mcp-data/registry/slider.json +3 -2
- package/dist/mcp-data/registry/switch.json +7 -7
- package/dist/styles/control-elevation.css +27 -2
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +1 -1
- package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/types/components/Input/Input.d.ts +1 -1
- package/dist/types/components/Menu/Menu.d.ts +4 -1
- package/dist/types/components/MobileSheetNav/MobileSheetNav.d.ts +0 -1
- package/dist/types/components/Radio/Radio.d.ts +1 -1
- package/dist/types/components/Select/Select.d.ts +6 -23
- package/dist/types/components/SelectMulti/SelectMulti.d.ts +5 -20
- package/dist/types/components/ShellTools/ShellTools.d.ts +1 -0
- package/dist/types/components/Switch/Switch.d.ts +1 -1
- package/dist/types/components.d.ts +13 -2
- package/dist/types/utils/choice-list-parts.d.ts +4 -0
- package/dist/types/utils/control-press.d.ts +9 -0
- package/dist/types/utils/control-text.d.ts +3 -1
- package/dist/types/utils/index.d.ts +1 -1
- package/dist/types/utils/select-controller.d.ts +67 -0
- package/package.json +1 -1
- package/dist/components/p-B9xVWER6.js +0 -2
- package/dist/components/p-B9xVWER6.js.map +0 -1
- package/dist/components/p-BLea0TrP.js +0 -2
- package/dist/components/p-BLea0TrP.js.map +0 -1
- package/dist/components/p-BY0PzkUp.js +0 -2
- package/dist/components/p-BbgPGF2a.js +0 -2
- package/dist/components/p-BbgPGF2a.js.map +0 -1
- package/dist/components/p-BhC1YyId.js +0 -2
- package/dist/components/p-BhC1YyId.js.map +0 -1
- package/dist/components/p-Ccj5Op6E.js +0 -2
- package/dist/components/p-CiqnkENu.js +0 -2
- package/dist/components/p-CiqnkENu.js.map +0 -1
- package/dist/components/p-Cx-ywr1e.js +0 -2
- package/dist/components/p-Cx-ywr1e.js.map +0 -1
- package/dist/components/p-DPME1wUJ.js +0 -2
- package/dist/components/p-DPME1wUJ.js.map +0 -1
- package/dist/components/p-DSa0Hnd3.js +0 -2
- package/dist/components/p-DSa0Hnd3.js.map +0 -1
- package/dist/components/p-DUlqUNbE.js +0 -2
- package/dist/components/p-DUlqUNbE.js.map +0 -1
- package/dist/components/p-DXLWm4PF.js +0 -2
- package/dist/components/p-DYcC5-R9.js +0 -2
- package/dist/components/p-DYcC5-R9.js.map +0 -1
- package/dist/components/p-DbpfpeQT.js +0 -2
- package/dist/components/p-DbpfpeQT.js.map +0 -1
- package/dist/components/p-DuFm-ieS.js +0 -2
- package/dist/components/p-DuFm-ieS.js.map +0 -1
- package/dist/components/p-uQhuDEVt.js +0 -2
- package/dist/components/p-uQhuDEVt.js.map +0 -1
- /package/dist/components/{p-DwX7UmLl.js.map → p--eKXTylf.js.map} +0 -0
- /package/dist/components/{p-DIoiApa-.js.map → p-5-QAFB4j.js.map} +0 -0
- /package/dist/components/{p-D-xttdpn.js.map → p-B-9A0e_0.js.map} +0 -0
- /package/dist/components/{p-CaRyxTMz.js.map → p-BT5hgg5i.js.map} +0 -0
- /package/dist/components/{p-DQDpDYyF.js.map → p-B_5nxOeB.js.map} +0 -0
- /package/dist/components/{p-BkAMkjIR.js.map → p-Bl001G0Y.js.map} +0 -0
- /package/dist/components/{p-DWdRSOBV.js.map → p-C0-K8vnW.js.map} +0 -0
- /package/dist/components/{p-Ccj5Op6E.js.map → p-C9h13YnX.js.map} +0 -0
- /package/dist/components/{p-CnHrJTD5.js.map → p-CUAYsK44.js.map} +0 -0
- /package/dist/components/{p-CWTih3Gc.js.map → p-CqWV4Hl_.js.map} +0 -0
- /package/dist/components/{p-B9bxDfZV.js.map → p-Crsn82rz.js.map} +0 -0
- /package/dist/components/{p-BwsGYxZx.js.map → p-CvyTZ4Mg.js.map} +0 -0
- /package/dist/components/{p-DqubRds2.js.map → p-DNFd4Ao-.js.map} +0 -0
- /package/dist/components/{p-BwGnhInj.js.map → p-k0Hmj1KV.js.map} +0 -0
- /package/dist/components/{p-BY0PzkUp.js.map → p-pgxlkvUy.js.map} +0 -0
package/README.md
CHANGED
|
@@ -2,22 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@ds-mo/ui)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Framework-neutral Stencil web components styled with TokoMo tokens. CompoMo
|
|
6
|
+
ships custom elements plus generated Angular and React adapters.
|
|
6
7
|
|
|
7
8
|
## Install
|
|
8
9
|
|
|
9
10
|
```bash
|
|
10
|
-
npm install @ds-mo/
|
|
11
|
+
npm install @ds-mo/tokens @ds-mo/icons @ds-mo/ui
|
|
11
12
|
```
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- **`@ds-mo/tokens`** — CSS custom properties (colors, dimensions, typography, effects). Components will not render correctly without it.
|
|
16
|
-
- **`@ds-mo/icons`** — SVG sources for `<ds-icon>` and built-in icon props. Resolved at **your app bundle time** from your installed IcoMo version (not baked into `@ds-mo/ui`).
|
|
17
|
-
|
|
18
|
-
## Setup
|
|
19
|
-
|
|
20
|
-
Import TokoMo tokens globally (once, at your app root):
|
|
14
|
+
Import TokoMo once at the application root:
|
|
21
15
|
|
|
22
16
|
```ts
|
|
23
17
|
import '@ds-mo/tokens';
|
|
@@ -25,131 +19,66 @@ import '@ds-mo/tokens/reset';
|
|
|
25
19
|
import '@ds-mo/tokens/globals';
|
|
26
20
|
```
|
|
27
21
|
|
|
28
|
-
|
|
22
|
+
## Use
|
|
23
|
+
|
|
24
|
+
Custom elements auto-define when their module is imported:
|
|
29
25
|
|
|
30
26
|
```ts
|
|
31
27
|
import '@ds-mo/ui/dist/components/ds-button-filled.js';
|
|
32
|
-
import '@ds-mo/ui/dist/components/ds-button-unfilled.js';
|
|
33
|
-
import '@ds-mo/ui/dist/components/ds-bar-nav.js';
|
|
34
|
-
// …import only the <ds-*> tags your app uses
|
|
35
28
|
```
|
|
36
29
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
### Framework wrappers (optional)
|
|
40
|
-
|
|
41
|
-
| Host | Import | Usage |
|
|
42
|
-
| --- | --- | --- |
|
|
43
|
-
| **Angular** | `@ds-mo/ui/angular` | Stencil proxy directives — property/event bindings in templates |
|
|
44
|
-
| **React** | `@ds-mo/ui/react` | `DsButtonFilled`, `DsBarNav`, … — thin wrappers around the same custom elements |
|
|
45
|
-
| **Any** | `@ds-mo/ui/dist/components/ds-*.js` | Use `<ds-*>` directly (motive-webapp-lab pattern) |
|
|
46
|
-
|
|
47
|
-
There is **no** published `@ds-mo/ui/loader` or global `@ds-mo/ui/css` bundle — styles ship scoped inside each custom-element module.
|
|
48
|
-
|
|
49
|
-
**SPA hosts (Angular / React):** `ds-panel-nav` and `ds-bar-nav` need a [first-paint integration contract](docs/framework-integration.md) on hard reload — seed bar-nav state and stamp `data-nav-style` before custom elements upgrade.
|
|
50
|
-
|
|
51
|
-
## Agent recipes through MCP
|
|
52
|
-
|
|
53
|
-
The package includes a local stdio MCP server that exposes component metadata and
|
|
54
|
-
executable Custom Elements, React, and Angular composition recipes. It runs on the
|
|
55
|
-
developer's machine; no hosted MCP service or API key is required.
|
|
56
|
-
|
|
57
|
-
When `@ds-mo/ui` is installed in the consuming project, point Codex at the package binary:
|
|
58
|
-
|
|
59
|
-
```toml
|
|
60
|
-
# .codex/config.toml
|
|
61
|
-
[mcp_servers.compomo]
|
|
62
|
-
command = "./node_modules/.bin/compomo-mcp"
|
|
30
|
+
```html
|
|
31
|
+
<ds-button-filled label="Save"></ds-button-filled>
|
|
63
32
|
```
|
|
64
33
|
|
|
65
|
-
|
|
34
|
+
Angular applications should prefer per-component standalone adapters:
|
|
66
35
|
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
command = "npx"
|
|
70
|
-
args = ["-y", "--package", "@ds-mo/ui@latest", "compomo-mcp"]
|
|
36
|
+
```ts
|
|
37
|
+
import { DsButtonFilled } from '@ds-mo/ui/angular/ds-button-filled';
|
|
71
38
|
```
|
|
72
39
|
|
|
73
|
-
|
|
74
|
-
`get_component_source`, `list_patterns`, and `get_pattern`. Add a repository
|
|
75
|
-
instruction telling agents to retrieve the applicable pattern before composing
|
|
76
|
-
multiple design-system components; connecting the MCP makes recipes available,
|
|
77
|
-
while the instruction makes their use consistent.
|
|
78
|
-
|
|
79
|
-
Registry-oriented tools return both readable Markdown and schema-validated
|
|
80
|
-
`structuredContent`. Compatible MCP clients can consume the generated component
|
|
81
|
-
API, authored design intent, dependencies, and executable pattern recipes as JSON
|
|
82
|
-
without reparsing prose; text content remains available for older clients. Every
|
|
83
|
-
tool is annotated as read-only, idempotent, and closed-world.
|
|
84
|
-
|
|
85
|
-
## Components
|
|
40
|
+
React applications use the generated wrappers:
|
|
86
41
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
### Primitives
|
|
90
|
-
- **Text**, **Icon**, **Divider**, **Loader**, **Skeleton**
|
|
91
|
-
- **ButtonFilled** — filled button; `variant` (label / icon / icon-label) + `size` + intent×contrast
|
|
92
|
-
- **ButtonUnfilled** — unfilled button; same variants/sizes; surface-aware chrome through `background`
|
|
93
|
-
- **Tag** (static metadata or compact menu trigger), **Chip** (removable metadata on primary surfaces), **Badge**
|
|
94
|
-
|
|
95
|
-
### Controls
|
|
96
|
-
- **Toggle**, **Checkbox**, **Radio**, **Input**, **Slider**, **Field**
|
|
97
|
-
|
|
98
|
-
### Overlays
|
|
99
|
-
- **Modal**, **Menu**, **Tooltip**, **Select**, **Toast**
|
|
100
|
-
|
|
101
|
-
### Navigation
|
|
102
|
-
- **Breadcrumb** (hierarchical page ancestors), **TabGroup** (horizontal local views), **PanelSubNav** (vertical local views)
|
|
103
|
-
- **ShellApp**, **ShellPage**, **PanelNav**, **BarNav**, **BarTitle**, **BarWorkflow**, **PanelTools**
|
|
104
|
-
|
|
105
|
-
### Status & layout
|
|
106
|
-
- **EmptyState**, **Loader**, **Skeleton**, **CardSetting**, **CardDataVizDonut**, **CardDataVizLine**
|
|
107
|
-
|
|
108
|
-
## Token dependency
|
|
109
|
-
|
|
110
|
-
All styling uses TokoMo CSS custom properties. No hardcoded colors, sizes, or shadows — everything maps to the token system. Components will render unstyled if `@ds-mo/tokens` is not imported.
|
|
111
|
-
|
|
112
|
-
## Semantic prose
|
|
113
|
-
|
|
114
|
-
Safe semantic DOM produced by Markdown, CMS, or documentation renderers can use the renderer-neutral prose stylesheet:
|
|
115
|
-
|
|
116
|
-
```css
|
|
117
|
-
@import '@ds-mo/ui/prose.css';
|
|
42
|
+
```tsx
|
|
43
|
+
import { DsButtonFilled } from '@ds-mo/ui/react';
|
|
118
44
|
```
|
|
119
45
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
<h2>Summary</h2>
|
|
123
|
-
<p>Renderer-owned semantic content.</p>
|
|
124
|
-
</article>
|
|
125
|
-
```
|
|
46
|
+
Install `@ds-mo/icons` in the consuming application. `ds-icon` resolves exact
|
|
47
|
+
canonical IcoMo export names at application bundle time.
|
|
126
48
|
|
|
127
|
-
|
|
49
|
+
## Public support surfaces
|
|
128
50
|
|
|
129
|
-
|
|
51
|
+
- `@ds-mo/ui/shell` — framework-neutral shell contracts.
|
|
52
|
+
- `@ds-mo/ui/toast` — toast manager.
|
|
53
|
+
- `@ds-mo/ui/utils` — generic helpers such as `registerIcons`.
|
|
54
|
+
- `@ds-mo/ui/prose.css` — renderer-neutral semantic prose styling.
|
|
55
|
+
- `@ds-mo/ui/control-elevation.css` — elevated outer control wrappers.
|
|
130
56
|
|
|
131
|
-
|
|
57
|
+
There is no global component CSS bundle; styles ship with each custom element.
|
|
132
58
|
|
|
133
|
-
|
|
134
|
-
@import '@ds-mo/ui/control-elevation.css';
|
|
135
|
-
```
|
|
59
|
+
## Agent recipes
|
|
136
60
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
</div>
|
|
141
|
-
```
|
|
61
|
+
The package includes the local `compomo-mcp` executable with generated
|
|
62
|
+
component metadata and executable Custom Elements, Angular, and React
|
|
63
|
+
composition recipes.
|
|
142
64
|
|
|
143
|
-
|
|
65
|
+
```toml
|
|
66
|
+
# .codex/config.toml
|
|
67
|
+
[mcp_servers.compomo]
|
|
68
|
+
command = "./node_modules/.bin/compomo-mcp"
|
|
69
|
+
```
|
|
144
70
|
|
|
145
|
-
|
|
71
|
+
Use registry tools when component selection or a composition contract is
|
|
72
|
+
unclear. API facts come from Stencil metadata; curated intent comes from
|
|
73
|
+
co-located component agent JSON and executable patterns.
|
|
146
74
|
|
|
147
|
-
|
|
75
|
+
## Documentation
|
|
148
76
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
```
|
|
77
|
+
- [Storybook introduction and usage](src/docs/Introduction.mdx)
|
|
78
|
+
- [Framework integration](docs/framework-integration.md)
|
|
79
|
+
- [Maintainer documentation router](docs/index.md)
|
|
80
|
+
- [Repository instructions](AGENTS.md)
|
|
154
81
|
|
|
155
|
-
|
|
82
|
+
Package versions, components, props, events, and exports are intentionally not
|
|
83
|
+
duplicated here. Read `package.json`, Storybook, or the generated registry for
|
|
84
|
+
current facts.
|
package/dist/.build-stamp
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1785106690096
|
package/dist/agent-patterns.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "12.
|
|
4
|
+
"packageVersion": "12.7.0",
|
|
5
5
|
"kind": "patterns",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -322,7 +322,8 @@
|
|
|
322
322
|
"Do not force the reader back to the live edge after deliberate transcript interaction."
|
|
323
323
|
],
|
|
324
324
|
"responsiveBehavior": [
|
|
325
|
-
"Let the containing product select drawer or full-width layout while keeping transcript measure readable and rich content horizontally scrollable."
|
|
325
|
+
"Let the containing product select drawer or full-width layout while keeping transcript measure readable and rich content horizontally scrollable.",
|
|
326
|
+
"When history and transcript are simultaneously visible, establish one shared master-detail layout contract for pane width, divider, transcript measure, composer containment, and empty-region placement; do not independently recreate that geometry for each conversation channel."
|
|
326
327
|
],
|
|
327
328
|
"implementations": {
|
|
328
329
|
"customElements": {
|
|
@@ -346,7 +347,8 @@
|
|
|
346
347
|
},
|
|
347
348
|
"references": [
|
|
348
349
|
"src/wc/components/ConversationList/ConversationList.stories.ts",
|
|
349
|
-
"src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
350
|
+
"src/wc/components/MessageScroller/MessageScroller.stories.ts",
|
|
351
|
+
"docs/layout-recipe-foundation.md"
|
|
350
352
|
]
|
|
351
353
|
},
|
|
352
354
|
{
|
package/dist/agent.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "12.
|
|
4
|
+
"packageVersion": "12.7.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -1299,6 +1299,7 @@
|
|
|
1299
1299
|
"Use native submit behavior for form submission and handle the form submit event rather than submitting from the button click event."
|
|
1300
1300
|
],
|
|
1301
1301
|
"states": [
|
|
1302
|
+
"Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
|
|
1302
1303
|
"Use only one filled action per local decision area; render all secondary actions with ButtonUnfilled.",
|
|
1303
1304
|
"Choose brand or neutral for general commands. Reserve positive, negative, warning, and caution for matching action consequences, and AI, guide, or walkthrough for actions that enter those feature experiences.",
|
|
1304
1305
|
"Contrast serves both surface adaptation and hierarchy, but never permits a second filled action in the same decision area.",
|
|
@@ -1468,6 +1469,7 @@
|
|
|
1468
1469
|
"For form submission, use native submit behavior and handle the form submit event rather than submitting from the button click event."
|
|
1469
1470
|
],
|
|
1470
1471
|
"states": [
|
|
1472
|
+
"Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
|
|
1471
1473
|
"General content UI keeps the selected interaction fill and border for persistent active state.",
|
|
1472
1474
|
"Shell, navigation, and tool-rail chrome uses foreground-only active state with no selected fill or border.",
|
|
1473
1475
|
"The omitted default surface treatment is for primary and secondary parent surfaces and uses the brand-active selected fill; pass faint explicitly on faint surfaces to use the neutral active fill.",
|
|
@@ -1660,6 +1662,7 @@
|
|
|
1660
1662
|
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1661
1663
|
],
|
|
1662
1664
|
"states": [
|
|
1665
|
+
"Bar, Line, and Donut cards share the same fill-chart and content-sized-legend body contract so dashboard card geometry remains aligned across chart types.",
|
|
1663
1666
|
"The chart region fills the remaining card body while an optional legend remains content-sized.",
|
|
1664
1667
|
"The card disables local hover highlighting on a slotted ChartLegend because bar legends are static keys.",
|
|
1665
1668
|
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
@@ -1771,6 +1774,7 @@
|
|
|
1771
1774
|
"The application owns meaningful loading, empty, and error status copy when either content region is temporarily replaced or absent."
|
|
1772
1775
|
],
|
|
1773
1776
|
"states": [
|
|
1777
|
+
"Bar, Line, and Donut cards share the same fill-chart and content-sized-legend body contract so dashboard card geometry remains aligned across chart types.",
|
|
1774
1778
|
"The chart region fills remaining card height while the legend remains content-sized.",
|
|
1775
1779
|
"Chart and legend regions render only when their corresponding slots contain content, allowing the owner to substitute loading, empty, or error presentations without dangling region padding.",
|
|
1776
1780
|
"Hover synchronization changes highlight only; it never represents selection, filtering, or navigation.",
|
|
@@ -1882,6 +1886,7 @@
|
|
|
1882
1886
|
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1883
1887
|
],
|
|
1884
1888
|
"states": [
|
|
1889
|
+
"Bar, Line, and Donut cards share the same fill-chart and content-sized-legend body contract so dashboard card geometry remains aligned across chart types.",
|
|
1885
1890
|
"The chart region fills the remaining card body while the legend remains content-sized.",
|
|
1886
1891
|
"The card disables local hover highlighting on a slotted ChartLegend because the line chart is static.",
|
|
1887
1892
|
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
@@ -2823,12 +2828,12 @@
|
|
|
2823
2828
|
"tag": "ds-checkbox",
|
|
2824
2829
|
"name": "checkbox",
|
|
2825
2830
|
"title": "Checkbox",
|
|
2826
|
-
"summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and
|
|
2831
|
+
"summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and four density states.",
|
|
2827
2832
|
"intentStatus": "complete",
|
|
2828
2833
|
"intent": {
|
|
2829
2834
|
"audience": "general",
|
|
2830
2835
|
"status": "stable",
|
|
2831
|
-
"summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and
|
|
2836
|
+
"summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and four density states.",
|
|
2832
2837
|
"useWhen": [
|
|
2833
2838
|
"A user may independently select zero or more choices.",
|
|
2834
2839
|
"A form requires acknowledgment, consent, or an opt-in value before submission.",
|
|
@@ -2868,15 +2873,15 @@
|
|
|
2868
2873
|
"Use presentation mode only inside a composite option that owns selection semantics, focus, and interaction."
|
|
2869
2874
|
],
|
|
2870
2875
|
"states": [
|
|
2871
|
-
"Unchecked boxes use a tertiary-foreground inset stroke: 1.25px at md, 1px at sm, and 0.75px at xs. Selected and mixed boxes remove the border, use a brand fill, and draw a component-owned check or subtract mark at the same density-specific stroke width.",
|
|
2876
|
+
"Unchecked boxes use a tertiary-foreground inset stroke: 1.5px at lg, 1.25px at md, 1px at sm, and 0.75px at xs. Selected and mixed boxes remove the border, use a brand fill, and draw a component-owned check or subtract mark at the same density-specific stroke width.",
|
|
2872
2877
|
"Activating an indeterminate checkbox clears the mixed state, toggles checked, and emits dsChange with the resulting boolean.",
|
|
2873
2878
|
"The initial checked and indeterminate values are restored by native form reset; checked values submit under name and unchecked values submit nothing.",
|
|
2874
|
-
"Sizes are md with a 16px box in a 20px placement, sm with a 12px box in a 16px placement, and xs with an 8px box in a 12px placement.",
|
|
2879
|
+
"Sizes are lg with a 20px box in a 24px placement, md with a 16px box in a 20px placement, sm with a 12px box in a 16px placement, and xs with an 8px box in a 12px placement.",
|
|
2875
2880
|
"Presentation mode removes checkbox semantics, focus, interaction, label rendering, and form submission while preserving the visual state."
|
|
2876
2881
|
],
|
|
2877
2882
|
"responsiveBehavior": [
|
|
2878
2883
|
"Choose size from the density of the containing row; labels may wrap while the placement box stays fixed.",
|
|
2879
|
-
"Use the
|
|
2884
|
+
"Use the same density as the shared option icon zone in multi-select rows."
|
|
2880
2885
|
],
|
|
2881
2886
|
"frameworkCaveats": {
|
|
2882
2887
|
"customElements": [
|
|
@@ -3204,7 +3209,7 @@
|
|
|
3204
3209
|
"actionLayout footer stretches a long action between 8px side and bottom insets.",
|
|
3205
3210
|
"Both action layouts share the always-active scroll-overlay fade controller, reserve measured end clearance, and begin fading 8px before the visible action.",
|
|
3206
3211
|
"ConversationList paints its measured fade on a separate surface-aware layer so contextual row actions retain a real backdrop for blur; hovered, focused, and menu-open rows rise above that decorative fade.",
|
|
3207
|
-
"The persistent action wrapper splits its md outer shadow from a top inset-highlight overlay so opaque filled actions keep the complete TokoMo elevation; slotted
|
|
3212
|
+
"The persistent action wrapper splits its md outer shadow from a top inset-highlight overlay so opaque filled actions keep the complete TokoMo elevation; slotted buttons disable optional resting borders and the press-scale modifier moves the button and elevated surface as one unit."
|
|
3208
3213
|
],
|
|
3209
3214
|
"responsiveBehavior": [
|
|
3210
3215
|
"The list fills its owner, scrolls independently, and keeps its persistent action above scrolling rows."
|
|
@@ -3275,7 +3280,7 @@
|
|
|
3275
3280
|
"Hover and press use the shared interaction hover and pressed overlays. Only the selected conversation uses the persistent active fill.",
|
|
3276
3281
|
"The title uses body-medium, not title-small, and the body-small preview truncates after one line. Unread titles use emphasis with primary foreground; read titles use regular weight with secondary foreground.",
|
|
3277
3282
|
"The actions slot overlays the row at an 8px right inset without changing title or preview measure, and paints above the row interaction wash while that wash remains active.",
|
|
3278
|
-
"Contextual actions use the shared md control-elevation wrapper so their transparent backdrop blur is unchanged while the split inset highlight remains above the borderless slotted action."
|
|
3283
|
+
"Contextual actions use the shared md control-elevation wrapper so their transparent backdrop blur is unchanged while the split inset highlight remains above the borderless slotted action and the press-scale modifier moves the complete elevated surface."
|
|
3279
3284
|
],
|
|
3280
3285
|
"responsiveBehavior": [
|
|
3281
3286
|
"Long titles and previews truncate without displacing trailing status."
|
|
@@ -3577,7 +3582,7 @@
|
|
|
3577
3582
|
"Supported compositions are icon plus title plus body, title plus body, and body only; body copy is present in every supported composition.",
|
|
3578
3583
|
"The decorative icon renders at xl in the primary foreground with an 8px gap before the text group and only when a title is also provided.",
|
|
3579
3584
|
"The visual title uses title-small primary text; body uses body-medium secondary text with a 4px title-to-body gap.",
|
|
3580
|
-
"All content is centered. The owner supplies container size and surrounding padding;
|
|
3585
|
+
"All content is centered. The owner supplies container size and surrounding padding; repeated panel and master-detail owners should share one empty-region geometry instead of wrapping each EmptyState differently. Do not compose actions into or immediately alongside the current EmptyState pattern.",
|
|
3581
3586
|
"First-use, no-content, no-results, and no-access states reuse this primitive with cause-specific localized messages rather than visual variants."
|
|
3582
3587
|
],
|
|
3583
3588
|
"responsiveBehavior": [
|
|
@@ -3599,6 +3604,10 @@
|
|
|
3599
3604
|
{
|
|
3600
3605
|
"label": "Storybook examples",
|
|
3601
3606
|
"path": "src/wc/components/EmptyState/EmptyState.stories.ts"
|
|
3607
|
+
},
|
|
3608
|
+
{
|
|
3609
|
+
"label": "Shared layout recipe foundation",
|
|
3610
|
+
"path": "docs/layout-recipe-foundation.md"
|
|
3602
3611
|
}
|
|
3603
3612
|
]
|
|
3604
3613
|
},
|
|
@@ -3677,6 +3686,7 @@
|
|
|
3677
3686
|
"Do not use placeholder text as the only label. Keep label text concise and put format or consequence guidance in description."
|
|
3678
3687
|
],
|
|
3679
3688
|
"states": [
|
|
3689
|
+
"Label, control, description, and error content follow the shared 4px vertical field flow without changing the slotted control's width or semantics.",
|
|
3680
3690
|
"Field exposes data-focused, data-filled, data-dirty, data-touched, data-invalid, data-disabled, and data-required hooks while the slotted control remains the source of value and interaction behavior.",
|
|
3681
3691
|
"A rendered error replaces the description; preserve essential guidance in the error message so users retain what they need to correct the field.",
|
|
3682
3692
|
"Field owns validation presentation but not validation timing; the form decides when to set error and errorMessage.",
|
|
@@ -3874,12 +3884,12 @@
|
|
|
3874
3884
|
"tag": "ds-input",
|
|
3875
3885
|
"name": "input",
|
|
3876
3886
|
"title": "Input",
|
|
3877
|
-
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior,
|
|
3887
|
+
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
|
|
3878
3888
|
"intentStatus": "complete",
|
|
3879
3889
|
"intent": {
|
|
3880
3890
|
"audience": "general",
|
|
3881
3891
|
"status": "stable",
|
|
3882
|
-
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior,
|
|
3892
|
+
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
|
|
3883
3893
|
"useWhen": [
|
|
3884
3894
|
"A user must enter or edit one line of text, an email address, telephone number, URL, search query, or password.",
|
|
3885
3895
|
"The value must participate in native, Angular, or React form state.",
|
|
@@ -3920,6 +3930,7 @@
|
|
|
3920
3930
|
"Suffix content must not carry information that is otherwise absent from the field's visible label, value, or description."
|
|
3921
3931
|
],
|
|
3922
3932
|
"states": [
|
|
3933
|
+
"Every size applies one complete control-density recipe across frame height, inline padding, icon zones, text-container inset, gap, and radius; supporting error content follows the shared 4px field flow.",
|
|
3923
3934
|
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry.",
|
|
3924
3935
|
"Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins.",
|
|
3925
3936
|
"Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
|
|
@@ -3931,7 +3942,7 @@
|
|
|
3931
3942
|
],
|
|
3932
3943
|
"responsiveBehavior": [
|
|
3933
3944
|
"Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
|
|
3934
|
-
"Choose density from the containing layout: md for ordinary forms, sm or xs only where
|
|
3945
|
+
"Choose density from the containing layout: md for ordinary forms, lg for a touch-primary layout, and sm or xs only where surrounding controls use the same compact recipe.",
|
|
3935
3946
|
"The owner supplies layout constraints and decides when a compact field moves to its own row."
|
|
3936
3947
|
],
|
|
3937
3948
|
"frameworkCaveats": {
|
|
@@ -4318,7 +4329,7 @@
|
|
|
4318
4329
|
"Anchor the menu to the control that opens it and return focus to that control when the menu closes.",
|
|
4319
4330
|
"Open with visible initial focus only when the trigger was activated from the keyboard.",
|
|
4320
4331
|
"Keep disabled items discoverable only when their unavailable state is meaningful.",
|
|
4321
|
-
"Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden
|
|
4332
|
+
"Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden presentation indicator at the same density as the menu.",
|
|
4322
4333
|
"Single-selection menus use menuitemradio semantics and aria-checked on each row, but render no nested radio control; selected interaction fill and primary foreground provide the visual state.",
|
|
4323
4334
|
"A swatch-picker section changes the popup to a non-modal dialog so its radio group and ordinary preference buttons keep valid nested semantics; Tab moves between its controls, then leaves and closes at the popup boundary.",
|
|
4324
4335
|
"Use notification dots only as supplemental status and not as the sole indication of important information."
|
|
@@ -4329,7 +4340,8 @@
|
|
|
4329
4340
|
"After dsSelect from a switch row, replace the items or sections array with updated switchValue data so the controlled indicator reflects the new state.",
|
|
4330
4341
|
"For selectionMode single, keep exactly one item isSelected and replace the items or sections array after dsSelect; Menu never mutates consumer-owned selection data.",
|
|
4331
4342
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
4332
|
-
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup; the legacy gradient-picker section and dsGradientSelect remain compatibility-only."
|
|
4343
|
+
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup; the legacy gradient-picker section and dsGradientSelect remain compatibility-only.",
|
|
4344
|
+
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics."
|
|
4333
4345
|
],
|
|
4334
4346
|
"responsiveBehavior": [
|
|
4335
4347
|
"Keep the default choice-cell anchor alignment so the first or last interactive row edge aligns with its trigger, matching Select; use popup-frame only for deliberate custom frame geometry.",
|
|
@@ -4419,6 +4431,10 @@
|
|
|
4419
4431
|
"sideOffset": {
|
|
4420
4432
|
"type": "number | string",
|
|
4421
4433
|
"required": false
|
|
4434
|
+
},
|
|
4435
|
+
"size": {
|
|
4436
|
+
"type": "MenuSize",
|
|
4437
|
+
"required": false
|
|
4422
4438
|
}
|
|
4423
4439
|
},
|
|
4424
4440
|
"events": [
|
|
@@ -4768,7 +4784,7 @@
|
|
|
4768
4784
|
"Selection and transcript interaction release automatic following.",
|
|
4769
4785
|
"Opening saved history, message jumps, and prepended history preserve deliberate position.",
|
|
4770
4786
|
"The scroll-to-latest action is absent at the live edge, appears only after the reader moves away, and disappears again after returning to the newest message.",
|
|
4771
|
-
"Scroll to latest uses the shared md control-elevation wrapper with a pointer-transparent top highlight, preserving its transparent backdrop blur and borderless unfilled action.",
|
|
4787
|
+
"Scroll to latest uses the shared md control-elevation wrapper with a pointer-transparent top highlight, preserving its transparent backdrop blur and borderless unfilled action while the press-scale modifier moves the complete elevated surface.",
|
|
4772
4788
|
"Place a composer container with 8px padding on every side in the overlay slot so messages scroll behind it; the shared scroll-overlay controller tracks every composer growth step, reserves matching transcript clearance, begins the fade 8px before the visible composer, and keeps scroll-to-latest above it."
|
|
4773
4789
|
],
|
|
4774
4790
|
"responsiveBehavior": [
|
|
@@ -4860,7 +4876,7 @@
|
|
|
4860
4876
|
"Direct touch paints the pressed overlay immediately, keeps a quick tap visible for one short frame, and clears it after release or cancellation without relying on Safari's latch-prone active state."
|
|
4861
4877
|
],
|
|
4862
4878
|
"responsiveBehavior": [
|
|
4863
|
-
"Render only below the mobile breakpoint
|
|
4879
|
+
"Render only below the mobile breakpoint; its secondary surface extends through the bottom safe-area inset when the application enables viewport-fit=cover.",
|
|
4864
4880
|
"The secondary-background bar keeps an 8px outer inset; its two icon-only groups anchor to opposite edges while retaining fixed 40px targets and a divider between Menu and current area.",
|
|
4865
4881
|
"Bar chrome and its divider are not text-selectable and suppress the iOS touch callout."
|
|
4866
4882
|
],
|
|
@@ -5189,7 +5205,9 @@
|
|
|
5189
5205
|
"Area, Help, and Account events express intent while the application owns navigation and product behavior."
|
|
5190
5206
|
],
|
|
5191
5207
|
"responsiveBehavior": [
|
|
5192
|
-
"The pane fills the mobile content stage while the bottom bar remains available."
|
|
5208
|
+
"The pane fills the mobile content stage while the bottom bar remains available.",
|
|
5209
|
+
"The sheet header and scrollable navigation body each use the shared 8px chrome inset; large destination controls retain their independent 40px density.",
|
|
5210
|
+
"Dashboard and Settings preserve their supplied visual groups with an 8px gap between destinations inside a section and a 32px gap between sections."
|
|
5193
5211
|
],
|
|
5194
5212
|
"references": [
|
|
5195
5213
|
{
|
|
@@ -6259,12 +6277,12 @@
|
|
|
6259
6277
|
"tag": "ds-radio",
|
|
6260
6278
|
"name": "radio",
|
|
6261
6279
|
"title": "Radio",
|
|
6262
|
-
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout,
|
|
6280
|
+
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, four densities, per-option inactive state, and roving keyboard focus.",
|
|
6263
6281
|
"intentStatus": "complete",
|
|
6264
6282
|
"intent": {
|
|
6265
6283
|
"audience": "general",
|
|
6266
6284
|
"status": "stable",
|
|
6267
|
-
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout,
|
|
6285
|
+
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, four densities, per-option inactive state, and roving keyboard focus.",
|
|
6268
6286
|
"useWhen": [
|
|
6269
6287
|
"A user must select exactly one visible option from a small set.",
|
|
6270
6288
|
"All available choices should remain visible for comparison.",
|
|
@@ -6303,9 +6321,9 @@
|
|
|
6303
6321
|
"Roving tabindex keeps one active option in the tab order, preferring the selected option."
|
|
6304
6322
|
],
|
|
6305
6323
|
"states": [
|
|
6306
|
-
"Unchecked circles use a tertiary-foreground inset stroke: 1.25px at md, 1px at sm, and 0.75px at xs.",
|
|
6307
|
-
"Selected circles remove the border, use a brand fill, and draw a centered on-bold foreground dot sized 8px at md, 6px at sm, and 4px at xs.",
|
|
6308
|
-
"Sizes are md with a 16px circle in a 20px placement, sm with a 12px circle in a 16px placement, and xs with an 8px circle in a 12px placement.",
|
|
6324
|
+
"Unchecked circles use a tertiary-foreground inset stroke: 1.5px at lg, 1.25px at md, 1px at sm, and 0.75px at xs.",
|
|
6325
|
+
"Selected circles remove the border, use a brand fill, and draw a centered on-bold foreground dot sized 10px at lg, 8px at md, 6px at sm, and 4px at xs.",
|
|
6326
|
+
"Sizes are lg with a 20px circle in a 24px placement, md with a 16px circle in a 20px placement, sm with a 12px circle in a 16px placement, and xs with an 8px circle in a 12px placement.",
|
|
6309
6327
|
"The initial value is restored by native form reset; the selected value submits under name and a required set is invalid until one active option is selected."
|
|
6310
6328
|
],
|
|
6311
6329
|
"responsiveBehavior": [
|
|
@@ -6541,6 +6559,8 @@
|
|
|
6541
6559
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6542
6560
|
],
|
|
6543
6561
|
"states": [
|
|
6562
|
+
"Select and SelectMulti share popup positioning, dismissal, focus, typeahead, and listbox traversal while retaining their distinct scalar and array selection contracts.",
|
|
6563
|
+
"Every size applies one complete control-density recipe across trigger height, inline padding, icon zones, text-container inset, gap, and radius; error content follows the shared 4px field flow.",
|
|
6544
6564
|
"Value is controlled through the mutable value property; dsChange reports user selection and clearing.",
|
|
6545
6565
|
"Required Selects begin without an automatic selection and require the user to make an explicit choice; do not preselect the first option merely to satisfy validity.",
|
|
6546
6566
|
"When allowClear is enabled, the clear affordance appears only after a value exists. Clearing is valid for optional and required fields; a required field becomes invalid until the user selects again.",
|
|
@@ -6552,9 +6572,9 @@
|
|
|
6552
6572
|
"When any option supplies subtext, every row uses the same subtext structure and missing values render an em dash. Subtext should disambiguate or add decision-helpful information.",
|
|
6553
6573
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
6554
6574
|
"The optional prefix icon and chevron always use the parent surface's secondary foreground color, including when a selected value promotes the label to primary.",
|
|
6555
|
-
"The shared popup search control
|
|
6556
|
-
"When search contains text, the shared control shows a rounded
|
|
6557
|
-
"The shared clear footer mirrors the
|
|
6575
|
+
"The shared popup search control follows the Select density, using the same text, icon, and internal spacing as a borderless trigger. Its container uses menu-item padding on every side and owns a 1px bottom divider that becomes a 1.5px bold-brand stroke while search has focus. Search placeholder text is secondary at rest and quaternary while focused because it becomes decorative once the editable field is active.",
|
|
6576
|
+
"When search contains text, the shared control shows a rounded icon-only ButtonUnfilled with the CrossCircle icon and no border, sized to remain inset within the current row density. It clears the local term, stays hidden for an empty term, and returns focus to search.",
|
|
6577
|
+
"The shared clear footer mirrors the owning density: menu-item padding surrounds a borderless density row, and the Clear label uses the same row and label insets as option text. The outer footer owns a 1px top divider.",
|
|
6558
6578
|
"An empty filtered list composes the message-only body variant of EmptyState. Keep the default neutral no-results message unless localized product guidance makes the outcome clearer.",
|
|
6559
6579
|
"Enable searchable for more than roughly 20 options, user-managed listings, large domains such as addresses, or sets users cannot efficiently scan. Local matching includes option labels, subtext, and section headings; the owner resolves remote data before assigning options.",
|
|
6560
6580
|
"Validation timing belongs to the form owner and may be immediate or deferred until blur or submit; the Select exposes validity and error presentation without imposing that policy.",
|
|
@@ -6790,23 +6810,25 @@
|
|
|
6790
6810
|
"The popup is a listbox with aria-multiselectable and every option exposes its independent aria-selected state.",
|
|
6791
6811
|
"Disabled options expose aria-disabled and are skipped by keyboard navigation and typeahead.",
|
|
6792
6812
|
"Keyboard navigation keeps the aria-activedescendant option scrolled into the visible listbox viewport.",
|
|
6793
|
-
"Each row uses a
|
|
6813
|
+
"Each row uses a presentation-only ds-checkbox indicator at the same density as the row; multi-select option rows never add a prefix icon alongside it, and the option remains the sole selection semantic and interaction target.",
|
|
6794
6814
|
"The trigger keeps its field label visible and appends the current selected count; an explicit aria-label or aria-labelledby remains the authoritative accessible name when supplied.",
|
|
6795
6815
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6796
6816
|
],
|
|
6797
6817
|
"states": [
|
|
6818
|
+
"Select and SelectMulti share popup positioning, dismissal, focus, typeahead, and listbox traversal while retaining their distinct scalar and array selection contracts.",
|
|
6819
|
+
"Every size applies one complete control-density recipe across trigger height, inline padding, icon zones, text-container inset, gap, and radius; error content follows the shared 4px field flow.",
|
|
6798
6820
|
"Values is a controlled JavaScript array; dsChange emits a new array after each user toggle.",
|
|
6799
6821
|
"Required SelectMulti controls begin without an automatic selection and require the user to make an explicit choice.",
|
|
6800
6822
|
"Selecting an option keeps the popup open so additional values can be toggled.",
|
|
6801
|
-
"The trigger label stays left-aligned at every width; every option row uses the same leading
|
|
6823
|
+
"The trigger label stays left-aligned at every width; every option row uses the same leading Checkbox indicator at its density. The default control size is md in both forms and filter bars.",
|
|
6802
6824
|
"The selected count always follows the persistent label as plain text separated by a centered dot, including for one selection, and counts every selected value even when search or grouping hides it. Never replace the count with selected option names.",
|
|
6803
6825
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
6804
6826
|
"When any option supplies subtext, every row uses the same subtext structure and missing values render an em dash. Subtext should disambiguate or add decision-helpful information.",
|
|
6805
6827
|
"Option labels stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
6806
6828
|
"The optional prefix icon and chevron always use the parent surface's secondary foreground color, including when selection promotes the label and count to primary.",
|
|
6807
|
-
"The shared popup search control
|
|
6829
|
+
"The shared popup search control follows the SelectMulti density, using the same text, icon, and internal spacing as a borderless trigger. Its container uses menu-item padding on every side and owns a 1px bottom divider that becomes a 1.5px bold-brand stroke while search has focus. Search placeholder text is secondary at rest and quaternary while focused because it becomes decorative once the editable field is active.",
|
|
6808
6830
|
"When search contains text, the shared control shows a rounded sm icon-only ButtonUnfilled with the Cross icon and no border. It clears the local term, stays hidden for an empty term, and returns focus to search.",
|
|
6809
|
-
"The shared summary-and-clear footer mirrors the
|
|
6831
|
+
"The shared summary-and-clear footer mirrors the owning density: menu-item padding surrounds a borderless density row, and both texts use the same row and label insets as option text. The outer footer owns a 1px top divider.",
|
|
6810
6832
|
"An empty filtered list composes the message-only body variant of EmptyState. Keep the default neutral no-results message unless localized product guidance makes the outcome clearer.",
|
|
6811
6833
|
"Enable searchable for more than roughly 20 options, user-managed listings, large domains such as addresses, or sets users cannot efficiently scan. Local matching includes option labels, subtext, and section headings; the owner resolves remote data before assigning options.",
|
|
6812
6834
|
"When allowClear is enabled, clear-all appears only after at least one value exists. Clearing is valid for optional and required fields; a required field becomes invalid until the user selects again.",
|
|
@@ -7068,6 +7090,7 @@
|
|
|
7068
7090
|
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
7069
7091
|
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
7070
7092
|
"On mobile, ShellApp hides and inerts PanelNav and BarNav, uses a solid primary stage, and composes routed ShellPage MobileHeader presentations, MobileSheetNav, ShellTools, and the persistent five-item MobileBarNav.",
|
|
7093
|
+
"When the application enables viewport-fit=cover, ShellApp reserves the shared top safe-area inset once for the complete mobile stage; nested routed, sheet, and tool headers must not add a second top inset.",
|
|
7071
7094
|
"Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
|
|
7072
7095
|
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
7073
7096
|
"The bottom bar remains visible at all route and tool depths in the foundation release."
|
|
@@ -7833,6 +7856,7 @@
|
|
|
7833
7856
|
"Read-only sliders remain focusable and submittable; inactive or disabled sliders leave the tab order and form submission."
|
|
7834
7857
|
],
|
|
7835
7858
|
"states": [
|
|
7859
|
+
"The label, slider control, value display, and supporting content follow the shared 4px vertical field flow.",
|
|
7836
7860
|
"value is mutable: user pointer, keyboard, or assistive-technology input updates it and emits dsChange continuously.",
|
|
7837
7861
|
"dsCommit emits once a pointer interaction completes or the native range input commits a keyboard or assistive-technology change.",
|
|
7838
7862
|
"Assign a two-number array through the JavaScript value property to create a range; values are ordered, clamped, stepped, and prevented from crossing.",
|
|
@@ -8131,12 +8155,12 @@
|
|
|
8131
8155
|
"tag": "ds-switch",
|
|
8132
8156
|
"name": "switch",
|
|
8133
8157
|
"title": "Switch",
|
|
8134
|
-
"summary": "Compact on/off setting control for changes that take effect immediately, with
|
|
8158
|
+
"summary": "Compact on/off setting control for changes that take effect immediately, with four sizes and form-associated behavior.",
|
|
8135
8159
|
"intentStatus": "complete",
|
|
8136
8160
|
"intent": {
|
|
8137
8161
|
"audience": "general",
|
|
8138
8162
|
"status": "stable",
|
|
8139
|
-
"summary": "Compact on/off setting control for changes that take effect immediately, with
|
|
8163
|
+
"summary": "Compact on/off setting control for changes that take effect immediately, with four sizes and form-associated behavior.",
|
|
8140
8164
|
"useWhen": [
|
|
8141
8165
|
"A binary setting takes effect immediately when the user turns it on or off.",
|
|
8142
8166
|
"A settings, form, or menu row needs a compact on/off control.",
|
|
@@ -8179,7 +8203,7 @@
|
|
|
8179
8203
|
"states": [
|
|
8180
8204
|
"Activation updates checked immediately and emits dsChange with the new boolean value.",
|
|
8181
8205
|
"The initial checked value is the form-reset baseline; unchecked switches submit nothing unless uncheckedValue is provided.",
|
|
8182
|
-
"Sizes are md 32×20 with a 12px thumb and 4px
|
|
8206
|
+
"Sizes are lg 40×24 with a 16px thumb and 4px body inset, md 32×20 with a 12px thumb and 4px inset, sm 24×16 with a 10px thumb and 3px inset, and xs 20×12 with an 8px thumb and 2px inset.",
|
|
8183
8207
|
"Unchecked uses a transparent track with a density-specific tertiary-foreground inset stroke and a solid tertiary-foreground thumb without a border. Checked uses a brand track and primary-background thumb with no strokes.",
|
|
8184
8208
|
"Presentation mode removes switch semantics, focus, interaction, and form submission while retaining the checked visual."
|
|
8185
8209
|
],
|
|
@@ -14,7 +14,7 @@ export declare class DsMenu {
|
|
|
14
14
|
dsSwatchSelect: EventEmitter<DsMenuCustomEvent<string>>;
|
|
15
15
|
constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<DsMenu, never>;
|
|
17
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DsMenu, "ds-menu", never, { "align": { "alias": "align"; "required": false; }; "alignOffset": { "alias": "alignOffset"; "required": false; }; "anchor": { "alias": "anchor"; "required": false; }; "anchorAlignment": { "alias": "anchorAlignment"; "required": false; }; "anchorId": { "alias": "anchorId"; "required": false; }; "initialFocusVisible": { "alias": "initialFocusVisible"; "required": false; }; "items": { "alias": "items"; "required": false; }; "menuLabel": { "alias": "menuLabel"; "required": false; }; "menuWidth": { "alias": "menuWidth"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "open": { "alias": "open"; "required": false; }; "sections": { "alias": "sections"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "side": { "alias": "side"; "required": false; }; "sideOffset": { "alias": "sideOffset"; "required": false; }; }, { "dsClose": "dsClose"; "dsAfterClose": "dsAfterClose"; "dsSelect": "dsSelect"; "dsGradientSelect": "dsGradientSelect"; "dsSwatchSelect": "dsSwatchSelect"; }, never, ["*"], true, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DsMenu, "ds-menu", never, { "align": { "alias": "align"; "required": false; }; "alignOffset": { "alias": "alignOffset"; "required": false; }; "anchor": { "alias": "anchor"; "required": false; }; "anchorAlignment": { "alias": "anchorAlignment"; "required": false; }; "anchorId": { "alias": "anchorId"; "required": false; }; "initialFocusVisible": { "alias": "initialFocusVisible"; "required": false; }; "items": { "alias": "items"; "required": false; }; "menuLabel": { "alias": "menuLabel"; "required": false; }; "menuWidth": { "alias": "menuWidth"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "open": { "alias": "open"; "required": false; }; "sections": { "alias": "sections"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "side": { "alias": "side"; "required": false; }; "sideOffset": { "alias": "sideOffset"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "dsClose": "dsClose"; "dsAfterClose": "dsAfterClose"; "dsSelect": "dsSelect"; "dsGradientSelect": "dsGradientSelect"; "dsSwatchSelect": "dsSwatchSelect"; }, never, ["*"], true, never>;
|
|
18
18
|
}
|
|
19
19
|
export declare interface DsMenu extends Components.DsMenu {
|
|
20
20
|
dsClose: EventEmitter<DsMenuCustomEvent<void>>;
|