@ds-mo/ui 11.0.0 → 12.0.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 +1 -1
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +150 -9
- package/dist/agent.json +940 -220
- package/dist/angular/ds-bar-title.d.ts +28 -0
- package/dist/angular/ds-bar-title.js +48 -0
- package/dist/angular/ds-button-filled.d.ts +1 -1
- package/dist/angular/ds-button-filled.js +3 -3
- package/dist/angular/ds-chart-donut.d.ts +1 -1
- package/dist/angular/ds-chart-donut.js +3 -3
- package/dist/angular/ds-panel-nav.d.ts +1 -1
- package/dist/angular/{ds-app-shell.d.ts → ds-shell-app.d.ts} +5 -5
- package/dist/angular/{ds-app-shell.js → ds-shell-app.js} +10 -10
- package/dist/angular/ds-shell-page.d.ts +12 -0
- package/dist/angular/ds-shell-page.js +38 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +3 -1
- package/dist/angular/proxies.d.ts +3 -1
- package/dist/angular/proxies.js +3 -1
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-response.js.map +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-avatar.js +1 -1
- package/dist/components/ds-avatar.js.map +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-app-shell.d.ts → ds-bar-title.d.ts} +4 -4
- package/dist/components/ds-bar-title.js +2 -0
- package/dist/components/ds-bar-title.js.map +1 -0
- 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-donut.js +1 -1
- package/dist/components/ds-card-data-viz-donut.js.map +1 -1
- package/dist/components/ds-card-setting.js +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-donut.js.map +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-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-input.js +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-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-sub-nav.js.map +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-panel-tools.js.map +1 -1
- package/dist/components/ds-radio.js +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.d.ts +11 -0
- package/dist/components/ds-shell-app.js +2 -0
- package/dist/components/ds-shell-app.js.map +1 -0
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +1 -1
- package/dist/components/ds-shell-page.d.ts +11 -0
- package/dist/components/ds-shell-page.js +2 -0
- package/dist/components/ds-shell-page.js.map +1 -0
- 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-toast.js.map +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js.map +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-DJ78wdNv.js → p-6vj4kh70.js} +2 -2
- package/dist/components/p-B3YvoGjS.js +2 -0
- package/dist/components/p-B3YvoGjS.js.map +1 -0
- package/dist/components/{p-BEWtqFX7.js → p-BH3es4p7.js} +2 -2
- package/dist/components/p-BUmDHPr3.js +2 -0
- package/dist/components/p-BUmDHPr3.js.map +1 -0
- package/dist/components/p-BYHKdFzV.js +2 -0
- package/dist/components/p-BYHKdFzV.js.map +1 -0
- package/dist/components/p-BZZwQfmN.js +2 -0
- package/dist/components/{p-CbckeueL.js.map → p-BZZwQfmN.js.map} +1 -1
- package/dist/components/{p-Dh4q5TSS.js → p-BhKhX1er.js} +2 -2
- package/dist/components/{p-CZZYGqKz.js → p-Bs6SS34m.js} +2 -2
- package/dist/components/p-CUik7PCi.js +2 -0
- package/dist/components/p-CUik7PCi.js.map +1 -0
- package/dist/components/{p-M5pt9I13.js → p-Cf-i-6aE.js} +2 -2
- package/dist/components/{p-C8e2A66f.js → p-Cf2J9MEo.js} +2 -2
- package/dist/components/{p-bDx_rlLm.js → p-CwTVEAl2.js} +2 -2
- package/dist/components/p-Cy04lXlc.js +2 -0
- package/dist/components/p-Cy04lXlc.js.map +1 -0
- package/dist/components/{p-BKhG2xrW.js → p-D2x17ei-.js} +1 -1
- package/dist/components/{p-BKhG2xrW.js.map → p-D2x17ei-.js.map} +1 -1
- package/dist/components/{p-CjP8sYlo.js → p-DABj3qTX.js} +2 -2
- package/dist/components/{p-DTqCBjUj.js → p-DUHcJWTQ.js} +2 -2
- package/dist/components/{p-CPPAndX2.js → p-DVk0wxxX.js} +2 -2
- package/dist/components/p-DfIch2Dk.js +2 -0
- package/dist/components/{p-BMwnjAIq.js.map → p-DfIch2Dk.js.map} +1 -1
- package/dist/components/p-Dg3xLna0.js +2 -0
- package/dist/components/{p-C_0Q8Cnp.js.map → p-Dg3xLna0.js.map} +1 -1
- package/dist/components/{p-DrDHC7V6.js → p-DxeHimqk.js} +2 -2
- package/dist/components/{p-DrDHC7V6.js.map → p-DxeHimqk.js.map} +1 -1
- package/dist/components/{p-CLn7QnE0.js → p-Dy_sZ-dI.js} +2 -2
- package/dist/components/{p-0kEg-Z4f.js → p-liMPkhUP.js} +2 -2
- package/dist/components/p-xFbUt9Tc.js +2 -0
- package/dist/components/p-xFbUt9Tc.js.map +1 -0
- package/dist/docs/components.json +1139 -255
- package/dist/lib/shell/chrome-transition.d.ts +1 -1
- package/dist/lib/shell/index.js +1 -1
- package/dist/lib/shell/index.js.map +1 -1
- package/dist/lib/shell/shell-gradient.d.ts +2 -2
- package/dist/mcp/cli.js +8 -12
- package/dist/mcp-data/registry/avatar.json +1 -1
- package/dist/mcp-data/registry/badge.json +4 -4
- package/dist/mcp-data/registry/bar-nav.json +8 -8
- package/dist/mcp-data/registry/bar-title.json +431 -0
- package/dist/mcp-data/registry/button-filled.json +38 -2
- package/dist/mcp-data/registry/card-data-viz-donut.json +73 -4
- package/dist/mcp-data/registry/chart-bar.json +67 -3
- package/dist/mcp-data/registry/chart-donut.json +94 -8
- package/dist/mcp-data/registry/chart-legend.json +73 -3
- package/dist/mcp-data/registry/chart-line.json +67 -3
- package/dist/mcp-data/registry/code-block.json +4 -3
- package/dist/mcp-data/registry/menu.json +1 -1
- package/dist/mcp-data/registry/message-composer.json +7 -5
- package/dist/mcp-data/registry/message-scroller.json +4 -3
- package/dist/mcp-data/registry/modal.json +5 -4
- package/dist/mcp-data/registry/panel-nav.json +8 -8
- package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
- package/dist/mcp-data/registry/panel-tool-header.json +4 -3
- package/dist/mcp-data/registry/panel-tool-search.json +6 -5
- package/dist/mcp-data/registry/panel-tools.json +13 -13
- package/dist/mcp-data/registry/registry.json +921 -195
- package/dist/mcp-data/registry/select-multi.json +2 -1
- package/dist/mcp-data/registry/select.json +2 -1
- package/dist/mcp-data/registry/shell-app.json +213 -0
- package/dist/mcp-data/registry/shell-gradient-picker.json +8 -8
- package/dist/mcp-data/registry/shell-gradient-swatch.json +2 -2
- package/dist/mcp-data/registry/shell-page.json +199 -0
- package/dist/mcp-data/registry/swatch-picker.json +1 -1
- package/dist/mcp-data/registry/tooltip-data-viz.json +68 -4
- package/dist/react/components.d.ts +3 -1
- package/dist/react/components.js +3 -1
- package/dist/react/ds-bar-title.d.ts +14 -0
- package/dist/react/ds-bar-title.js +16 -0
- package/dist/react/{ds-app-shell.d.ts → ds-shell-app.d.ts} +3 -3
- package/dist/react/ds-shell-app.js +12 -0
- package/dist/react/ds-shell-page.d.ts +9 -0
- package/dist/react/ds-shell-page.js +12 -0
- package/dist/types/components/Badge/Badge.d.ts +1 -1
- package/dist/types/components/BarTitle/BarTitle.d.ts +71 -0
- package/dist/types/components/BarTitle/bar-title-types.d.ts +29 -0
- package/dist/types/components/BarTitle/index.d.ts +2 -0
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +9 -0
- package/dist/types/components/ButtonFilled/index.d.ts +1 -1
- package/dist/types/components/CardDataVizDonut/CardDataVizDonut.d.ts +1 -0
- package/dist/types/components/ChartDonut/ChartDonut.d.ts +12 -2
- package/dist/types/components/Menu/Menu.d.ts +5 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +1 -1
- package/dist/types/components/{AppShell/AppShell.d.ts → ShellApp/ShellApp.d.ts} +3 -3
- package/dist/types/components/ShellPage/ShellPage.d.ts +37 -0
- package/dist/types/components/ShellPage/index.d.ts +3 -0
- package/dist/types/components/ShellPage/shell-page-responsive.d.ts +12 -0
- package/dist/types/components/ShellPage/shell-page-types.d.ts +5 -0
- package/dist/types/components/TooltipDataViz/TooltipDataViz.d.ts +3 -2
- package/dist/types/components.d.ts +314 -67
- package/dist/types/shell/chrome-transition.d.ts +1 -1
- package/dist/types/shell/shell-gradient.d.ts +2 -2
- package/dist/types/shell/shell-shortcuts.d.ts +1 -1
- package/package.json +1 -1
- package/dist/components/ds-app-shell.js +0 -2
- package/dist/components/ds-app-shell.js.map +0 -1
- package/dist/components/p-BHtg1fh3.js +0 -2
- package/dist/components/p-BHtg1fh3.js.map +0 -1
- package/dist/components/p-BMwnjAIq.js +0 -2
- package/dist/components/p-C3nDIMX5.js +0 -2
- package/dist/components/p-C3nDIMX5.js.map +0 -1
- package/dist/components/p-CKaJx0IX.js +0 -2
- package/dist/components/p-CKaJx0IX.js.map +0 -1
- package/dist/components/p-CTFBf97-.js +0 -2
- package/dist/components/p-CTFBf97-.js.map +0 -1
- package/dist/components/p-C_0Q8Cnp.js +0 -2
- package/dist/components/p-CbckeueL.js +0 -2
- package/dist/components/p-DirD-b2y.js +0 -2
- package/dist/components/p-DirD-b2y.js.map +0 -1
- package/dist/components/p-Hw-HMjCk.js +0 -2
- package/dist/components/p-Hw-HMjCk.js.map +0 -1
- package/dist/mcp-data/registry/app-shell.json +0 -210
- package/dist/react/ds-app-shell.js +0 -12
- /package/dist/components/{p-DJ78wdNv.js.map → p-6vj4kh70.js.map} +0 -0
- /package/dist/components/{p-BEWtqFX7.js.map → p-BH3es4p7.js.map} +0 -0
- /package/dist/components/{p-Dh4q5TSS.js.map → p-BhKhX1er.js.map} +0 -0
- /package/dist/components/{p-CZZYGqKz.js.map → p-Bs6SS34m.js.map} +0 -0
- /package/dist/components/{p-M5pt9I13.js.map → p-Cf-i-6aE.js.map} +0 -0
- /package/dist/components/{p-C8e2A66f.js.map → p-Cf2J9MEo.js.map} +0 -0
- /package/dist/components/{p-bDx_rlLm.js.map → p-CwTVEAl2.js.map} +0 -0
- /package/dist/components/{p-CjP8sYlo.js.map → p-DABj3qTX.js.map} +0 -0
- /package/dist/components/{p-DTqCBjUj.js.map → p-DUHcJWTQ.js.map} +0 -0
- /package/dist/components/{p-CPPAndX2.js.map → p-DVk0wxxX.js.map} +0 -0
- /package/dist/components/{p-CLn7QnE0.js.map → p-Dy_sZ-dI.js.map} +0 -0
- /package/dist/components/{p-0kEg-Z4f.js.map → p-liMPkhUP.js.map} +0 -0
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": "
|
|
4
|
+
"packageVersion": "12.0.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -335,127 +335,6 @@
|
|
|
335
335
|
"text"
|
|
336
336
|
]
|
|
337
337
|
},
|
|
338
|
-
{
|
|
339
|
-
"id": "component:ds-app-shell",
|
|
340
|
-
"tag": "ds-app-shell",
|
|
341
|
-
"name": "app-shell",
|
|
342
|
-
"title": "AppShell",
|
|
343
|
-
"summary": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
344
|
-
"intentStatus": "complete",
|
|
345
|
-
"intent": {
|
|
346
|
-
"audience": "specialized",
|
|
347
|
-
"status": "stable",
|
|
348
|
-
"summary": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
349
|
-
"useWhen": [
|
|
350
|
-
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
351
|
-
"PanelNav, BarNav, PanelTools, page content, shared chrome, responsive behavior, and shell shortcuts must be composed as one application frame.",
|
|
352
|
-
"Future application templates need the supported base-page composition boundary."
|
|
353
|
-
],
|
|
354
|
-
"avoidWhen": [
|
|
355
|
-
"Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences that require a different layout.",
|
|
356
|
-
"Another AppShell already exists in the page; applications must render exactly one and must never nest AppShells.",
|
|
357
|
-
"Building content inside an existing AppShell; render the page content rather than another shell."
|
|
358
|
-
],
|
|
359
|
-
"commonlyComposedWith": [
|
|
360
|
-
"component:ds-panel-nav",
|
|
361
|
-
"component:ds-bar-nav",
|
|
362
|
-
"component:ds-panel-tools",
|
|
363
|
-
"component:ds-swatch-picker"
|
|
364
|
-
],
|
|
365
|
-
"patterns": [
|
|
366
|
-
"pattern:application-shell"
|
|
367
|
-
],
|
|
368
|
-
"accessibility": [
|
|
369
|
-
"Keep primary destinations in PanelNav and secondary route sections in BarNav.",
|
|
370
|
-
"Ensure the default content region contains the page's single main landmark.",
|
|
371
|
-
"Keep PanelNav, BarNav, and PanelTools chrome available in the shell's supported desktop and tablet compositions.",
|
|
372
|
-
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
373
|
-
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
374
|
-
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
375
|
-
],
|
|
376
|
-
"states": [
|
|
377
|
-
"Render exactly one AppShell as the workspace root and never nest it.",
|
|
378
|
-
"PanelNav, BarNav, and PanelTools are required shell regions; PanelTools contains at least Search and Help even when no additional product tools apply.",
|
|
379
|
-
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
380
|
-
"AppShell propagates navStyle and coordinates layout, gradient alignment, transitions, metrics, shortcuts, and responsive composition.",
|
|
381
|
-
"Set gradientPreset to the single resolved global chrome preference: neutral by default, none for solid chrome, or cool, neutral, warm, and fresh for token-based washes.",
|
|
382
|
-
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; AppShell owns rendering the resolved preset across authenticated routes.",
|
|
383
|
-
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
384
|
-
"Update PanelNav groups, BarNav tabs and heading, navStyle, basePath, and currentUrl atomically from one resolved route state.",
|
|
385
|
-
"BarNav remains present: it shows route-section tabs when available and the active PanelNav destination label as heading otherwise.",
|
|
386
|
-
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
387
|
-
],
|
|
388
|
-
"responsiveBehavior": [
|
|
389
|
-
"AppShell owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
390
|
-
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
391
|
-
"On tablet, AppShell keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
392
|
-
"On mobile, AppShell remains the page root but replaces PanelNav and desktop navigation composition with a future dedicated mobile navigation design.",
|
|
393
|
-
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
394
|
-
"The current runtime does not yet implement the complete desktop, tablet, and mobile composition contract; consuming applications must enforce missing breakpoint behavior until AppShell provides it."
|
|
395
|
-
],
|
|
396
|
-
"frameworkCaveats": {
|
|
397
|
-
"customElements": [
|
|
398
|
-
"Assign complex navigation and tool collections as JavaScript properties on the slotted components.",
|
|
399
|
-
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
400
|
-
],
|
|
401
|
-
"react": [
|
|
402
|
-
"Use generated wrappers and preserve native slot names for PanelNav, BarNav, PanelTools, and main content.",
|
|
403
|
-
"Resolve all shell inputs from one router state before rendering the composition."
|
|
404
|
-
],
|
|
405
|
-
"angular": [
|
|
406
|
-
"Use generated standalone adapters and preserve slot attributes in templates.",
|
|
407
|
-
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
408
|
-
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
409
|
-
]
|
|
410
|
-
},
|
|
411
|
-
"references": [
|
|
412
|
-
{
|
|
413
|
-
"label": "Component guide",
|
|
414
|
-
"path": "src/wc/components/AppShell/AppShell.mdx"
|
|
415
|
-
},
|
|
416
|
-
{
|
|
417
|
-
"label": "Executable Storybook composition",
|
|
418
|
-
"path": "src/wc/components/AppShell/AppShell.stories.ts"
|
|
419
|
-
},
|
|
420
|
-
{
|
|
421
|
-
"label": "Framework integration",
|
|
422
|
-
"path": "docs/framework-integration.md"
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
"label": "Application shell contract",
|
|
426
|
-
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
427
|
-
}
|
|
428
|
-
]
|
|
429
|
-
},
|
|
430
|
-
"api": {
|
|
431
|
-
"props": {
|
|
432
|
-
"gradientPreset": {
|
|
433
|
-
"type": "ShellGradientPreset",
|
|
434
|
-
"required": false
|
|
435
|
-
},
|
|
436
|
-
"navStyle": {
|
|
437
|
-
"type": "NavChromeStyle",
|
|
438
|
-
"required": false
|
|
439
|
-
},
|
|
440
|
-
"shortcutsEnabled": {
|
|
441
|
-
"type": "boolean",
|
|
442
|
-
"required": false
|
|
443
|
-
}
|
|
444
|
-
},
|
|
445
|
-
"events": [],
|
|
446
|
-
"slots": []
|
|
447
|
-
},
|
|
448
|
-
"exports": {
|
|
449
|
-
"customElement": "ds-app-shell",
|
|
450
|
-
"react": "DsAppShell",
|
|
451
|
-
"angular": "DsAppShell"
|
|
452
|
-
},
|
|
453
|
-
"dependencies": [
|
|
454
|
-
"@ds-mo/ui",
|
|
455
|
-
"@ds-mo/tokens"
|
|
456
|
-
],
|
|
457
|
-
"componentDependencies": []
|
|
458
|
-
},
|
|
459
338
|
{
|
|
460
339
|
"id": "component:ds-attachment-list",
|
|
461
340
|
"tag": "ds-attachment-list",
|
|
@@ -649,7 +528,7 @@
|
|
|
649
528
|
"Badge keeps one brand treatment; semantic severity belongs to another component or adjacent content.",
|
|
650
529
|
"Use the ring only when Badge overlaps an icon or other content. Disable it in a reserved safe-area slot.",
|
|
651
530
|
"When enabled, the ring matches the immediate backing surface for both variants. Use a direct ring override only for a component-local fill that no surface preset represents.",
|
|
652
|
-
"Enabled shell gradient rings align automatically inside active
|
|
531
|
+
"Enabled shell gradient rings align automatically inside active ShellApp gradient chrome and may be explicitly enabled or disabled when composition requires it."
|
|
653
532
|
],
|
|
654
533
|
"responsiveBehavior": [
|
|
655
534
|
"The owning control or layout positions Badge and decides whether notification indicators remain visible, condense, or move at responsive breakpoints.",
|
|
@@ -729,14 +608,14 @@
|
|
|
729
608
|
"tag": "ds-bar-nav",
|
|
730
609
|
"name": "bar-nav",
|
|
731
610
|
"title": "BarNav",
|
|
732
|
-
"summary": "Required secondary route navigation within
|
|
611
|
+
"summary": "Required secondary route navigation within ShellApp, showing peer sections of the active PanelNav destination or its destination label when no section tabs apply.",
|
|
733
612
|
"intentStatus": "complete",
|
|
734
613
|
"intent": {
|
|
735
614
|
"audience": "specialized",
|
|
736
615
|
"status": "stable",
|
|
737
|
-
"summary": "Required secondary route navigation within
|
|
616
|
+
"summary": "Required secondary route navigation within ShellApp, showing peer sections of the active PanelNav destination or its destination label when no section tabs apply.",
|
|
738
617
|
"useWhen": [
|
|
739
|
-
"Rendering the required secondary navigation region inside
|
|
618
|
+
"Rendering the required secondary navigation region inside ShellApp.",
|
|
740
619
|
"The active primary destination has peer route sections that users can navigate between.",
|
|
741
620
|
"The active primary destination has no route sections or is showing a detail route and its destination label must preserve the BarNav region."
|
|
742
621
|
],
|
|
@@ -745,7 +624,7 @@
|
|
|
745
624
|
"A third navigation level is needed; BarNav is never tertiary navigation.",
|
|
746
625
|
"The choices switch local content without navigating routes; use TabGroup instead.",
|
|
747
626
|
"Document-style tabs need reordering, pinning, closing, or user customization.",
|
|
748
|
-
"BarNav would be mounted outside the application's single
|
|
627
|
+
"BarNav would be mounted outside the application's single ShellApp."
|
|
749
628
|
],
|
|
750
629
|
"alternatives": [
|
|
751
630
|
{
|
|
@@ -765,7 +644,7 @@
|
|
|
765
644
|
}
|
|
766
645
|
],
|
|
767
646
|
"commonlyComposedWith": [
|
|
768
|
-
"component:ds-app
|
|
647
|
+
"component:ds-shell-app",
|
|
769
648
|
"component:ds-panel-nav",
|
|
770
649
|
"component:ds-panel-tools"
|
|
771
650
|
],
|
|
@@ -794,7 +673,7 @@
|
|
|
794
673
|
"Keep the BarNav region present so shell height and main-content origin remain stable across routes.",
|
|
795
674
|
"Allow the built-in overflow behavior to move trailing sections into Menu when the available width is insufficient.",
|
|
796
675
|
"The active section does not need to remain visible in the tab row when it moves into overflow because page content supplies the page title.",
|
|
797
|
-
"Do not infer mobile navigation behavior from desktop BarNav; future
|
|
676
|
+
"Do not infer mobile navigation behavior from desktop BarNav; future ShellApp mobile composition may use a different navigation design."
|
|
798
677
|
],
|
|
799
678
|
"frameworkCaveats": {
|
|
800
679
|
"customElements": [
|
|
@@ -883,6 +762,187 @@
|
|
|
883
762
|
"text"
|
|
884
763
|
]
|
|
885
764
|
},
|
|
765
|
+
{
|
|
766
|
+
"id": "component:ds-bar-title",
|
|
767
|
+
"tag": "ds-bar-title",
|
|
768
|
+
"name": "bar-title",
|
|
769
|
+
"title": "BarTitle",
|
|
770
|
+
"summary": "Page-level title chrome with optional Back navigation, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
771
|
+
"intentStatus": "complete",
|
|
772
|
+
"intent": {
|
|
773
|
+
"audience": "general",
|
|
774
|
+
"status": "stable",
|
|
775
|
+
"summary": "Page-level title chrome with optional Back navigation, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
776
|
+
"useWhen": [
|
|
777
|
+
"A top-level page needs one h1 above its content.",
|
|
778
|
+
"A list or detail page has multiple route-level sections that belong in the inline active-section menu.",
|
|
779
|
+
"A detail, create, or edit page needs a page-level Back action.",
|
|
780
|
+
"A page needs one primary action plus optional secondary or destructive overflow commands."
|
|
781
|
+
],
|
|
782
|
+
"avoidWhen": [
|
|
783
|
+
"The title belongs to a PanelTools drawer or fullscreen pane; use PanelToolHeader through PanelTools instead.",
|
|
784
|
+
"The choices are primary application destinations or BarNav destinations rather than sections within the current page.",
|
|
785
|
+
"The heading belongs to a card, modal, or other bounded region rather than the page.",
|
|
786
|
+
"Local panels inside page content should remain directly selectable; use TabGroup instead.",
|
|
787
|
+
"Automatic sticky or responsive page orchestration is required; compose BarTitle in ShellPage rather than implementing it in the header."
|
|
788
|
+
],
|
|
789
|
+
"alternatives": [
|
|
790
|
+
{
|
|
791
|
+
"when": "The header belongs to a PanelTools product view.",
|
|
792
|
+
"component": "component:ds-panel-tool-header",
|
|
793
|
+
"reason": "PanelToolHeader owns pane-level Back and actions without creating page chrome."
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
"when": "A small set of inner-page panels should remain visible as tabs.",
|
|
797
|
+
"component": "component:ds-tab-group",
|
|
798
|
+
"reason": "TabGroup is the local content-view control rather than route-level page title chrome."
|
|
799
|
+
}
|
|
800
|
+
],
|
|
801
|
+
"commonlyComposedWith": [
|
|
802
|
+
"component:ds-shell-page",
|
|
803
|
+
"component:ds-button-filled",
|
|
804
|
+
"component:ds-button-unfilled",
|
|
805
|
+
"component:ds-menu",
|
|
806
|
+
"component:ds-text"
|
|
807
|
+
],
|
|
808
|
+
"patterns": [
|
|
809
|
+
"pattern:shell-page"
|
|
810
|
+
],
|
|
811
|
+
"accessibility": [
|
|
812
|
+
"Provide one concise heading; BarTitle renders exactly one h1 and changes only its visual recipe between variants.",
|
|
813
|
+
"Give Back a destination-specific accessible name such as Back to Drivers, provide the concise parent label such as Drivers for the expanded breadcrumb, and handle dsBack in the route owner.",
|
|
814
|
+
"Keep value synchronized with the current child route; dsSectionChange returns the selected section id.",
|
|
815
|
+
"Section and overflow triggers expose menu relationships and restore focus after selection or dismissal.",
|
|
816
|
+
"Use one filled primary action in the page decision area and mark destructive overflow actions explicitly."
|
|
817
|
+
],
|
|
818
|
+
"states": [
|
|
819
|
+
"Omitting Back, sections, primaryAction, and actions produces the top-level title-only header.",
|
|
820
|
+
"Two or more selectable sections add the inline section trigger; one section does not render a redundant menu.",
|
|
821
|
+
"Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
|
|
822
|
+
"expanded renders the larger heading, optional description, inset divider, and an xs icon-label Back breadcrumb above a flush-left h1; compact renders 48px chrome with inline Back; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
|
|
823
|
+
"primaryAction collapse defaults to auto. Use never for Save-like actions whose hierarchy must remain visible in constrained layouts."
|
|
824
|
+
],
|
|
825
|
+
"responsiveBehavior": [
|
|
826
|
+
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
827
|
+
"ShellPage is the standard owner for automatic expanded, compact, and constrained selection.",
|
|
828
|
+
"Compact titles use the shared md control inset so top-level headings align with BarNav and inline Back geometry aligns with PanelToolHeader. Long headings and section labels truncate independently while Back and action controls retain complete hit targets and accessible names.",
|
|
829
|
+
"A never-collapse primary action remains visible in constrained mode; the title and section label yield space first."
|
|
830
|
+
],
|
|
831
|
+
"frameworkCaveats": {
|
|
832
|
+
"customElements": [
|
|
833
|
+
"Assign sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
834
|
+
"Handle dsBack in the router owner, update value after dsSectionChange, and execute product commands from dsAction."
|
|
835
|
+
],
|
|
836
|
+
"react": [
|
|
837
|
+
"Pass arrays and objects directly to DsBarTitle and keep value controlled from route state.",
|
|
838
|
+
"Place DsBarTitle in DsShellPage with slot=header when automatic page behavior is required."
|
|
839
|
+
],
|
|
840
|
+
"angular": [
|
|
841
|
+
"Bind complex values on the standalone DsBarTitle adapter and handle the three intent events in the route shell.",
|
|
842
|
+
"Place ds-bar-title in ds-shell-page with slot=header; do not render router-outlet inside BarTitle."
|
|
843
|
+
]
|
|
844
|
+
},
|
|
845
|
+
"references": [
|
|
846
|
+
{
|
|
847
|
+
"label": "Explicit variant examples",
|
|
848
|
+
"path": "src/wc/components/BarTitle/BarTitle.stories.ts"
|
|
849
|
+
},
|
|
850
|
+
{
|
|
851
|
+
"label": "ShellPage composition and responsive examples",
|
|
852
|
+
"path": "src/wc/components/ShellPage/ShellPage.stories.ts"
|
|
853
|
+
},
|
|
854
|
+
{
|
|
855
|
+
"label": "Cross-browser shell-page and header coverage",
|
|
856
|
+
"path": "tests/e2e/bar-title.spec.ts"
|
|
857
|
+
}
|
|
858
|
+
]
|
|
859
|
+
},
|
|
860
|
+
"api": {
|
|
861
|
+
"props": {
|
|
862
|
+
"actions": {
|
|
863
|
+
"type": "BarTitleActionItem[]",
|
|
864
|
+
"required": false
|
|
865
|
+
},
|
|
866
|
+
"actionsAriaLabel": {
|
|
867
|
+
"type": "string",
|
|
868
|
+
"required": false
|
|
869
|
+
},
|
|
870
|
+
"backAriaLabel": {
|
|
871
|
+
"type": "string",
|
|
872
|
+
"required": false
|
|
873
|
+
},
|
|
874
|
+
"backLabel": {
|
|
875
|
+
"type": "string",
|
|
876
|
+
"required": false
|
|
877
|
+
},
|
|
878
|
+
"description": {
|
|
879
|
+
"type": "string",
|
|
880
|
+
"required": false
|
|
881
|
+
},
|
|
882
|
+
"heading": {
|
|
883
|
+
"type": "string",
|
|
884
|
+
"required": true
|
|
885
|
+
},
|
|
886
|
+
"primaryAction": {
|
|
887
|
+
"type": "BarTitlePrimaryAction | null",
|
|
888
|
+
"required": false
|
|
889
|
+
},
|
|
890
|
+
"sections": {
|
|
891
|
+
"type": "BarTitleSectionItem[]",
|
|
892
|
+
"required": false
|
|
893
|
+
},
|
|
894
|
+
"sectionsAriaLabel": {
|
|
895
|
+
"type": "string",
|
|
896
|
+
"required": false
|
|
897
|
+
},
|
|
898
|
+
"showBack": {
|
|
899
|
+
"type": "boolean",
|
|
900
|
+
"required": false
|
|
901
|
+
},
|
|
902
|
+
"value": {
|
|
903
|
+
"type": "string",
|
|
904
|
+
"required": false
|
|
905
|
+
},
|
|
906
|
+
"variant": {
|
|
907
|
+
"type": "BarTitleVariant",
|
|
908
|
+
"required": false
|
|
909
|
+
}
|
|
910
|
+
},
|
|
911
|
+
"events": [
|
|
912
|
+
{
|
|
913
|
+
"name": "dsAction",
|
|
914
|
+
"detail": "string"
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"name": "dsBack",
|
|
918
|
+
"detail": "MouseEvent"
|
|
919
|
+
},
|
|
920
|
+
{
|
|
921
|
+
"name": "dsSectionChange",
|
|
922
|
+
"detail": "string"
|
|
923
|
+
}
|
|
924
|
+
],
|
|
925
|
+
"slots": []
|
|
926
|
+
},
|
|
927
|
+
"exports": {
|
|
928
|
+
"customElement": "ds-bar-title",
|
|
929
|
+
"react": "DsBarTitle",
|
|
930
|
+
"angular": "DsBarTitle"
|
|
931
|
+
},
|
|
932
|
+
"dependencies": [
|
|
933
|
+
"@ds-mo/ui",
|
|
934
|
+
"@ds-mo/tokens",
|
|
935
|
+
"@ds-mo/icons"
|
|
936
|
+
],
|
|
937
|
+
"componentDependencies": [
|
|
938
|
+
"button-filled",
|
|
939
|
+
"button-unfilled",
|
|
940
|
+
"icon",
|
|
941
|
+
"menu",
|
|
942
|
+
"text",
|
|
943
|
+
"tooltip"
|
|
944
|
+
]
|
|
945
|
+
},
|
|
886
946
|
{
|
|
887
947
|
"id": "component:ds-button-filled",
|
|
888
948
|
"tag": "ds-button-filled",
|
|
@@ -933,6 +993,8 @@
|
|
|
933
993
|
"Use only one filled action per local decision area; render all secondary actions with ButtonUnfilled.",
|
|
934
994
|
"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.",
|
|
935
995
|
"Contrast serves both surface adaptation and hierarchy, but never permits a second filled action in the same decision area.",
|
|
996
|
+
"The optional inset border is off by default. Enable it only when the filled action needs an explicit edge against its parent surface.",
|
|
997
|
+
"Parent surface context changes only the optional inset border color. Contrast continues to own the button fill, foreground, hover, pressed, and focus treatments; never use surface context to change action hierarchy.",
|
|
936
998
|
"Rounded changes only the control radius to the half-radius treatment; it does not change hierarchy, size, variant, intent, or interaction semantics.",
|
|
937
999
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
938
1000
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width."
|
|
@@ -964,10 +1026,18 @@
|
|
|
964
1026
|
"type": "string | null",
|
|
965
1027
|
"required": false
|
|
966
1028
|
},
|
|
1029
|
+
"background": {
|
|
1030
|
+
"type": "ButtonFilledBackground | undefined",
|
|
1031
|
+
"required": false
|
|
1032
|
+
},
|
|
967
1033
|
"contrast": {
|
|
968
1034
|
"type": "ButtonFilledContrast",
|
|
969
1035
|
"required": false
|
|
970
1036
|
},
|
|
1037
|
+
"hasBorder": {
|
|
1038
|
+
"type": "boolean",
|
|
1039
|
+
"required": false
|
|
1040
|
+
},
|
|
971
1041
|
"icon": {
|
|
972
1042
|
"type": "string",
|
|
973
1043
|
"required": false
|
|
@@ -1237,9 +1307,78 @@
|
|
|
1237
1307
|
"tag": "ds-card-data-viz-donut",
|
|
1238
1308
|
"name": "card-data-viz-donut",
|
|
1239
1309
|
"title": "CardDataVizDonut",
|
|
1240
|
-
"summary": "
|
|
1241
|
-
"intentStatus": "
|
|
1242
|
-
"intent":
|
|
1310
|
+
"summary": "Canonical donut-plus-legend dashboard card with shared data-viz chrome, a filter action, fill chart region, content-sized legend, and built-in hover synchronization.",
|
|
1311
|
+
"intentStatus": "complete",
|
|
1312
|
+
"intent": {
|
|
1313
|
+
"audience": "specialized",
|
|
1314
|
+
"status": "experimental",
|
|
1315
|
+
"summary": "Canonical donut-plus-legend dashboard card with shared data-viz chrome, a filter action, fill chart region, content-sized legend, and built-in hover synchronization.",
|
|
1316
|
+
"useWhen": [
|
|
1317
|
+
"A dashboard widget needs the standard donut and visible legend composition in one data-viz card.",
|
|
1318
|
+
"Chart slices and legend rows should cross-highlight without application hover wiring.",
|
|
1319
|
+
"The card needs the shared header filter action while the application owns filter state and menu content."
|
|
1320
|
+
],
|
|
1321
|
+
"avoidWhen": [
|
|
1322
|
+
"The visualization is a bar, line, metric, or custom chart; compose CardShellDataViz directly.",
|
|
1323
|
+
"The product needs a custom legend treatment such as chips, external stat callouts, or selectable filters.",
|
|
1324
|
+
"The surface is a settings section or generic content card."
|
|
1325
|
+
],
|
|
1326
|
+
"alternatives": [
|
|
1327
|
+
{
|
|
1328
|
+
"when": "The visualization needs shared data-viz chrome without the canonical donut layout.",
|
|
1329
|
+
"component": "component:ds-card-shell-data-viz",
|
|
1330
|
+
"reason": "CardShellDataViz owns only the header, actions, width, and body boundary."
|
|
1331
|
+
},
|
|
1332
|
+
{
|
|
1333
|
+
"when": "A donut and legend need a custom layout without card chrome.",
|
|
1334
|
+
"component": "component:ds-chart-donut",
|
|
1335
|
+
"reason": "Compose the chart and ChartLegend directly and own their layout and hover synchronization."
|
|
1336
|
+
}
|
|
1337
|
+
],
|
|
1338
|
+
"commonlyComposedWith": [
|
|
1339
|
+
"component:ds-card-shell-data-viz",
|
|
1340
|
+
"component:ds-chart-donut",
|
|
1341
|
+
"component:ds-chart-legend",
|
|
1342
|
+
"component:ds-empty-state",
|
|
1343
|
+
"component:ds-skeleton"
|
|
1344
|
+
],
|
|
1345
|
+
"accessibility": [
|
|
1346
|
+
"Provide a concise card heading and a localized filter label for the icon-only header action.",
|
|
1347
|
+
"Keep essential values available through the chart and visible legend rather than encoding meaning through slice color alone.",
|
|
1348
|
+
"The application owns meaningful loading, empty, and error status copy when either content region is temporarily replaced or absent."
|
|
1349
|
+
],
|
|
1350
|
+
"states": [
|
|
1351
|
+
"The chart region fills remaining card height while the legend remains content-sized.",
|
|
1352
|
+
"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.",
|
|
1353
|
+
"Hover synchronization changes highlight only; it never represents selection, filtering, or navigation.",
|
|
1354
|
+
"The filter action emits intent while the parent owns popup content, applied constraints, and data updates."
|
|
1355
|
+
],
|
|
1356
|
+
"responsiveBehavior": [
|
|
1357
|
+
"Select the token-based card width appropriate to the parent grid; the matching minimum height preserves the chart region.",
|
|
1358
|
+
"The parent dashboard owns wrapping and column changes while the internal chart-over-legend arrangement remains stable."
|
|
1359
|
+
],
|
|
1360
|
+
"frameworkCaveats": {
|
|
1361
|
+
"customElements": [
|
|
1362
|
+
"Assign chart data and legend items as JavaScript properties and place the components in the chart and legend slots."
|
|
1363
|
+
],
|
|
1364
|
+
"react": [
|
|
1365
|
+
"Keep filter and dataset state in the owner; the card handles hover synchronization for the canonical slotted pair."
|
|
1366
|
+
],
|
|
1367
|
+
"angular": [
|
|
1368
|
+
"Keep filter and dataset state in the owner; the card handles hover synchronization for the canonical slotted pair."
|
|
1369
|
+
]
|
|
1370
|
+
},
|
|
1371
|
+
"references": [
|
|
1372
|
+
{
|
|
1373
|
+
"label": "Storybook examples",
|
|
1374
|
+
"path": "src/wc/components/CardDataVizDonut/CardDataVizDonut.stories.ts"
|
|
1375
|
+
},
|
|
1376
|
+
{
|
|
1377
|
+
"label": "Dashboard review examples",
|
|
1378
|
+
"path": "src/wc/stories/DataViz/OverviewReview.stories.ts"
|
|
1379
|
+
}
|
|
1380
|
+
]
|
|
1381
|
+
},
|
|
1243
1382
|
"api": {
|
|
1244
1383
|
"props": {
|
|
1245
1384
|
"cardWidth": {
|
|
@@ -1526,9 +1665,73 @@
|
|
|
1526
1665
|
"tag": "ds-chart-bar",
|
|
1527
1666
|
"name": "chart-bar",
|
|
1528
1667
|
"title": "ChartBar",
|
|
1529
|
-
"summary": "
|
|
1530
|
-
"intentStatus": "
|
|
1531
|
-
"intent":
|
|
1668
|
+
"summary": "Single-series bar chart for comparing discrete categories or evenly spaced time buckets on a band-scaled axis.",
|
|
1669
|
+
"intentStatus": "complete",
|
|
1670
|
+
"intent": {
|
|
1671
|
+
"audience": "specialized",
|
|
1672
|
+
"status": "experimental",
|
|
1673
|
+
"summary": "Single-series bar chart for comparing discrete categories or evenly spaced time buckets on a band-scaled axis.",
|
|
1674
|
+
"useWhen": [
|
|
1675
|
+
"Users need to compare one numeric measure across a small set of categories.",
|
|
1676
|
+
"Values are grouped into ordered time buckets such as hours, days, weeks, or months and equal visual spacing is appropriate.",
|
|
1677
|
+
"A data-viz card needs a compact magnitude comparison rather than a continuous trend."
|
|
1678
|
+
],
|
|
1679
|
+
"avoidWhen": [
|
|
1680
|
+
"Timestamp positions must reflect irregular elapsed time; pre-bucket the data or use a future continuous time-scale chart.",
|
|
1681
|
+
"The visualization needs stacked, grouped, or multi-series bars.",
|
|
1682
|
+
"The interaction requires selection, drill-down, brushing, or zoom.",
|
|
1683
|
+
"The data communicates a part-to-whole relationship."
|
|
1684
|
+
],
|
|
1685
|
+
"alternatives": [
|
|
1686
|
+
{
|
|
1687
|
+
"when": "Users need to follow one or more trends across ordered categories.",
|
|
1688
|
+
"component": "component:ds-chart-line",
|
|
1689
|
+
"reason": "ChartLine connects ordered observations and supports multiple named series."
|
|
1690
|
+
},
|
|
1691
|
+
{
|
|
1692
|
+
"when": "The data communicates parts of a total.",
|
|
1693
|
+
"component": "component:ds-chart-donut",
|
|
1694
|
+
"reason": "ChartDonut provides the part-to-whole composition and center aggregate."
|
|
1695
|
+
}
|
|
1696
|
+
],
|
|
1697
|
+
"commonlyComposedWith": [
|
|
1698
|
+
"component:ds-card-shell-data-viz",
|
|
1699
|
+
"component:ds-tooltip-data-viz"
|
|
1700
|
+
],
|
|
1701
|
+
"accessibility": [
|
|
1702
|
+
"Keep category labels concise and provide an adjacent textual summary when exact values are critical to completing a task.",
|
|
1703
|
+
"Do not rely on bar color alone to communicate category meaning.",
|
|
1704
|
+
"A future interactive tooltip must supplement rather than replace the chart's accessible value representation."
|
|
1705
|
+
],
|
|
1706
|
+
"states": [
|
|
1707
|
+
"The chart is currently a static single-series rendering without hover, selection, loading, or empty-state policy.",
|
|
1708
|
+
"An empty dataset renders no bars; the owning card or product supplies meaningful empty-state messaging.",
|
|
1709
|
+
"Use one consistent bar color across time buckets when every bar is the same measure at a different interval; categorical color changes are for genuinely distinct categories.",
|
|
1710
|
+
"Authored datum colors override the shared categorical palette."
|
|
1711
|
+
],
|
|
1712
|
+
"responsiveBehavior": [
|
|
1713
|
+
"The owner supplies dimensions and updates them with its layout; the chart does not measure its container.",
|
|
1714
|
+
"Limit or pre-format long category labels so they remain legible at the chosen width.",
|
|
1715
|
+
"Time labels remain ordered, pre-formatted buckets with equal spacing rather than raw continuous timestamps."
|
|
1716
|
+
],
|
|
1717
|
+
"frameworkCaveats": {
|
|
1718
|
+
"customElements": [
|
|
1719
|
+
"Assign data as a JavaScript property; arrays are not supported as HTML attributes."
|
|
1720
|
+
],
|
|
1721
|
+
"react": [
|
|
1722
|
+
"Pass a stable data array and dimensions derived from the containing layout."
|
|
1723
|
+
],
|
|
1724
|
+
"angular": [
|
|
1725
|
+
"Bind data as a property and update dimensions from the containing layout."
|
|
1726
|
+
]
|
|
1727
|
+
},
|
|
1728
|
+
"references": [
|
|
1729
|
+
{
|
|
1730
|
+
"label": "Storybook examples",
|
|
1731
|
+
"path": "src/wc/components/ChartBar/ChartBar.stories.ts"
|
|
1732
|
+
}
|
|
1733
|
+
]
|
|
1734
|
+
},
|
|
1532
1735
|
"api": {
|
|
1533
1736
|
"props": {
|
|
1534
1737
|
"data": {
|
|
@@ -1563,9 +1766,75 @@
|
|
|
1563
1766
|
"tag": "ds-chart-donut",
|
|
1564
1767
|
"name": "chart-donut",
|
|
1565
1768
|
"title": "ChartDonut",
|
|
1566
|
-
"summary": "
|
|
1567
|
-
"intentStatus": "
|
|
1568
|
-
"intent":
|
|
1769
|
+
"summary": "Part-to-whole donut chart with a center aggregate, responsive fill sizing, local slice tooltip feedback, and externally controlled legend highlighting.",
|
|
1770
|
+
"intentStatus": "complete",
|
|
1771
|
+
"intent": {
|
|
1772
|
+
"audience": "specialized",
|
|
1773
|
+
"status": "experimental",
|
|
1774
|
+
"summary": "Part-to-whole donut chart with a center aggregate, responsive fill sizing, local slice tooltip feedback, and externally controlled legend highlighting.",
|
|
1775
|
+
"useWhen": [
|
|
1776
|
+
"Users need to understand a small part-to-whole breakdown with a prominent total or status in the center.",
|
|
1777
|
+
"A standalone donut needs pointer and keyboard-focus value feedback through a chart-owned data-viz tooltip.",
|
|
1778
|
+
"A donut and visible ChartLegend should cross-highlight by matching stable labels."
|
|
1779
|
+
],
|
|
1780
|
+
"avoidWhen": [
|
|
1781
|
+
"The data is a trend, time sequence, or independent magnitude comparison.",
|
|
1782
|
+
"The category count creates slices too small to understand reliably.",
|
|
1783
|
+
"Hover is intended to select, filter, or navigate rather than temporarily highlight data."
|
|
1784
|
+
],
|
|
1785
|
+
"alternatives": [
|
|
1786
|
+
{
|
|
1787
|
+
"when": "The product needs the canonical card, filter action, visible legend, and built-in hover synchronization.",
|
|
1788
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1789
|
+
"reason": "The dedicated card owns that complete composition and suppresses redundant slice tooltips."
|
|
1790
|
+
},
|
|
1791
|
+
{
|
|
1792
|
+
"when": "Users need to compare independent category magnitudes.",
|
|
1793
|
+
"component": "component:ds-chart-bar",
|
|
1794
|
+
"reason": "Bars make category magnitude differences easier to compare."
|
|
1795
|
+
}
|
|
1796
|
+
],
|
|
1797
|
+
"commonlyComposedWith": [
|
|
1798
|
+
"component:ds-chart-legend",
|
|
1799
|
+
"component:ds-tooltip-data-viz",
|
|
1800
|
+
"component:ds-card-data-viz-donut"
|
|
1801
|
+
],
|
|
1802
|
+
"accessibility": [
|
|
1803
|
+
"Every non-empty slice remains keyboard focusable and exposes its label and value without depending on the visual tooltip.",
|
|
1804
|
+
"Use a visible legend when the full set of labels, values, or percentages must remain continuously available.",
|
|
1805
|
+
"Provide localized no-data text for the neutral empty ring.",
|
|
1806
|
+
"Center text is a visual summary and must not be the only source of essential category detail."
|
|
1807
|
+
],
|
|
1808
|
+
"states": [
|
|
1809
|
+
"Genuine local pointer or keyboard focus may show a chart-owned tooltip; externally synchronized highlight never opens it.",
|
|
1810
|
+
"When a visible legend already owns label and value detail, suppress the redundant donut tooltip. CardDataVizDonut does this automatically.",
|
|
1811
|
+
"Local hover and external highlight remain separate while both may dim non-matching slices.",
|
|
1812
|
+
"Zero or negative totals render a neutral empty ring without interactive slices.",
|
|
1813
|
+
"Center value and caption truncate when they exceed the safe inner-circle measure."
|
|
1814
|
+
],
|
|
1815
|
+
"responsiveBehavior": [
|
|
1816
|
+
"Prefer container-fill sizing inside data-viz cards and explicit sizing only in layouts that own a stable diameter.",
|
|
1817
|
+
"Fill sizing remains centered and constrained to the shared donut size band.",
|
|
1818
|
+
"The owner adapts category count and legend placement for available space."
|
|
1819
|
+
],
|
|
1820
|
+
"frameworkCaveats": {
|
|
1821
|
+
"customElements": [
|
|
1822
|
+
"Assign data as a JavaScript property and wire slice-hover detail to a sibling legend only when not using CardDataVizDonut."
|
|
1823
|
+
],
|
|
1824
|
+
"react": [
|
|
1825
|
+
"Keep synchronized highlight controlled by the composition and disable slice tooltips when a sibling legend continuously shows the same details."
|
|
1826
|
+
],
|
|
1827
|
+
"angular": [
|
|
1828
|
+
"Keep synchronized highlight controlled by the composition and disable slice tooltips when a sibling legend continuously shows the same details."
|
|
1829
|
+
]
|
|
1830
|
+
},
|
|
1831
|
+
"references": [
|
|
1832
|
+
{
|
|
1833
|
+
"label": "Storybook examples",
|
|
1834
|
+
"path": "src/wc/components/ChartDonut/ChartDonut.stories.ts"
|
|
1835
|
+
}
|
|
1836
|
+
]
|
|
1837
|
+
},
|
|
1569
1838
|
"api": {
|
|
1570
1839
|
"props": {
|
|
1571
1840
|
"activeLabel": {
|
|
@@ -1600,6 +1869,10 @@
|
|
|
1600
1869
|
"type": "string",
|
|
1601
1870
|
"required": false
|
|
1602
1871
|
},
|
|
1872
|
+
"showTooltip": {
|
|
1873
|
+
"type": "boolean",
|
|
1874
|
+
"required": false
|
|
1875
|
+
},
|
|
1603
1876
|
"size": {
|
|
1604
1877
|
"type": "number | undefined",
|
|
1605
1878
|
"required": false
|
|
@@ -1626,16 +1899,88 @@
|
|
|
1626
1899
|
"@ds-mo/ui",
|
|
1627
1900
|
"@ds-mo/tokens"
|
|
1628
1901
|
],
|
|
1629
|
-
"componentDependencies": [
|
|
1902
|
+
"componentDependencies": [
|
|
1903
|
+
"tooltip-data-viz"
|
|
1904
|
+
]
|
|
1630
1905
|
},
|
|
1631
1906
|
{
|
|
1632
1907
|
"id": "component:ds-chart-legend",
|
|
1633
1908
|
"tag": "ds-chart-legend",
|
|
1634
1909
|
"name": "chart-legend",
|
|
1635
1910
|
"title": "ChartLegend",
|
|
1636
|
-
"summary": "
|
|
1637
|
-
"intentStatus": "
|
|
1638
|
-
"intent":
|
|
1911
|
+
"summary": "Display-first chart legend with swatches, labels, optional values and percentages, explicit deep links, and highlight-only chart synchronization.",
|
|
1912
|
+
"intentStatus": "complete",
|
|
1913
|
+
"intent": {
|
|
1914
|
+
"audience": "specialized",
|
|
1915
|
+
"status": "experimental",
|
|
1916
|
+
"summary": "Display-first chart legend with swatches, labels, optional values and percentages, explicit deep links, and highlight-only chart synchronization.",
|
|
1917
|
+
"useWhen": [
|
|
1918
|
+
"A chart needs the standard swatch, label, and optional numeric-detail legend.",
|
|
1919
|
+
"Donut slices or line series need a continuously visible key beside or below the visualization.",
|
|
1920
|
+
"A category has an explicit deep-link destination and should render as an accessible link."
|
|
1921
|
+
],
|
|
1922
|
+
"avoidWhen": [
|
|
1923
|
+
"The design calls for chips, bare swatches, external stat callouts, or another custom legend treatment.",
|
|
1924
|
+
"Rows need to toggle visibility, filter data, or represent selection.",
|
|
1925
|
+
"The content is a command menu or navigation list unrelated to chart data."
|
|
1926
|
+
],
|
|
1927
|
+
"alternatives": [
|
|
1928
|
+
{
|
|
1929
|
+
"when": "The product needs a nonstandard legend treatment.",
|
|
1930
|
+
"component": "component:ds-text",
|
|
1931
|
+
"reason": "Compose product-owned semantic markup from the same chart data rather than forcing it into this row recipe."
|
|
1932
|
+
},
|
|
1933
|
+
{
|
|
1934
|
+
"when": "The donut belongs in the canonical dashboard card.",
|
|
1935
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1936
|
+
"reason": "The dedicated card places the legend and handles bidirectional highlight synchronization."
|
|
1937
|
+
}
|
|
1938
|
+
],
|
|
1939
|
+
"commonlyComposedWith": [
|
|
1940
|
+
"component:ds-chart-donut",
|
|
1941
|
+
"component:ds-chart-line",
|
|
1942
|
+
"component:ds-card-data-viz-donut",
|
|
1943
|
+
"component:ds-card-shell-data-viz"
|
|
1944
|
+
],
|
|
1945
|
+
"accessibility": [
|
|
1946
|
+
"Rows remain non-interactive unless the item supplies an actual link destination.",
|
|
1947
|
+
"Synced highlight changes opacity only and never moves focus or announces selection.",
|
|
1948
|
+
"Keep full labels available when visible text truncates, and retain stable tabular numeric columns.",
|
|
1949
|
+
"Do not rely on swatch color alone; every entry requires a meaningful visible label."
|
|
1950
|
+
],
|
|
1951
|
+
"states": [
|
|
1952
|
+
"Local pointer or focus interaction and external chart highlight remain separate; both may dim peers, but only a real link row receives interactive affordances.",
|
|
1953
|
+
"Hover synchronization is temporary emphasis, never filtering, toggling, or selected state.",
|
|
1954
|
+
"Percentage values use one consistent precision across the complete legend.",
|
|
1955
|
+
"The list owns pointer leave so moving across row gaps does not clear and reapply highlight."
|
|
1956
|
+
],
|
|
1957
|
+
"responsiveBehavior": [
|
|
1958
|
+
"Vertical legends let the label yield width and truncate before right-aligned value and percentage columns.",
|
|
1959
|
+
"Horizontal legends wrap complete entries and suit compact series keys below a chart.",
|
|
1960
|
+
"The parent constrains width and decides when a custom condensed treatment is necessary."
|
|
1961
|
+
],
|
|
1962
|
+
"frameworkCaveats": {
|
|
1963
|
+
"customElements": [
|
|
1964
|
+
"Assign items as a JavaScript property and set href only for genuine navigation."
|
|
1965
|
+
],
|
|
1966
|
+
"react": [
|
|
1967
|
+
"Intercept the item-click event only when application routing must replace native link navigation."
|
|
1968
|
+
],
|
|
1969
|
+
"angular": [
|
|
1970
|
+
"Intercept the item-click event only when application routing must replace native link navigation."
|
|
1971
|
+
]
|
|
1972
|
+
},
|
|
1973
|
+
"references": [
|
|
1974
|
+
{
|
|
1975
|
+
"label": "Storybook examples",
|
|
1976
|
+
"path": "src/wc/components/ChartLegend/ChartLegend.stories.ts"
|
|
1977
|
+
},
|
|
1978
|
+
{
|
|
1979
|
+
"label": "Rendered interaction tests",
|
|
1980
|
+
"path": "tests/e2e/chart-legend.spec.ts"
|
|
1981
|
+
}
|
|
1982
|
+
]
|
|
1983
|
+
},
|
|
1639
1984
|
"api": {
|
|
1640
1985
|
"props": {
|
|
1641
1986
|
"activeLabel": {
|
|
@@ -1663,39 +2008,103 @@
|
|
|
1663
2008
|
"required": false
|
|
1664
2009
|
}
|
|
1665
2010
|
},
|
|
1666
|
-
"events": [
|
|
1667
|
-
{
|
|
1668
|
-
"name": "dsItemClick",
|
|
1669
|
-
"detail": "{ item: ChartLegendItem; originalEvent: MouseEvent }"
|
|
1670
|
-
},
|
|
2011
|
+
"events": [
|
|
2012
|
+
{
|
|
2013
|
+
"name": "dsItemClick",
|
|
2014
|
+
"detail": "{ item: ChartLegendItem; originalEvent: MouseEvent }"
|
|
2015
|
+
},
|
|
2016
|
+
{
|
|
2017
|
+
"name": "dsItemHover",
|
|
2018
|
+
"detail": "ChartLegendItem | null"
|
|
2019
|
+
}
|
|
2020
|
+
],
|
|
2021
|
+
"slots": []
|
|
2022
|
+
},
|
|
2023
|
+
"exports": {
|
|
2024
|
+
"customElement": "ds-chart-legend",
|
|
2025
|
+
"react": "DsChartLegend",
|
|
2026
|
+
"angular": "DsChartLegend"
|
|
2027
|
+
},
|
|
2028
|
+
"dependencies": [
|
|
2029
|
+
"@ds-mo/ui",
|
|
2030
|
+
"@ds-mo/tokens"
|
|
2031
|
+
],
|
|
2032
|
+
"componentDependencies": [
|
|
2033
|
+
"text"
|
|
2034
|
+
]
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
"id": "component:ds-chart-line",
|
|
2038
|
+
"tag": "ds-chart-line",
|
|
2039
|
+
"name": "chart-line",
|
|
2040
|
+
"title": "ChartLine",
|
|
2041
|
+
"summary": "Static single- or multi-series line chart for trends across ordered, evenly spaced categories, including preformatted time-period labels.",
|
|
2042
|
+
"intentStatus": "complete",
|
|
2043
|
+
"intent": {
|
|
2044
|
+
"audience": "specialized",
|
|
2045
|
+
"status": "experimental",
|
|
2046
|
+
"summary": "Static single- or multi-series line chart for trends across ordered, evenly spaced categories, including preformatted time-period labels.",
|
|
2047
|
+
"useWhen": [
|
|
2048
|
+
"Users need to follow one or more numeric trends across a shared ordered x-axis.",
|
|
2049
|
+
"Time periods are already grouped into equally spaced labels such as months, weeks, or days.",
|
|
2050
|
+
"A horizontal ChartLegend should identify multiple series."
|
|
2051
|
+
],
|
|
2052
|
+
"avoidWhen": [
|
|
2053
|
+
"Pixel position must reflect irregular elapsed time or continuous timestamps.",
|
|
2054
|
+
"The primary task is comparing unrelated category magnitudes rather than following a trend.",
|
|
2055
|
+
"The chart needs built-in zoom, brushing, selection, or drill-down.",
|
|
2056
|
+
"Series lengths do not align with the shared category list."
|
|
2057
|
+
],
|
|
2058
|
+
"alternatives": [
|
|
2059
|
+
{
|
|
2060
|
+
"when": "Users need to compare one measure across discrete categories or time buckets.",
|
|
2061
|
+
"component": "component:ds-chart-bar",
|
|
2062
|
+
"reason": "Bars emphasize independent bucket magnitudes."
|
|
2063
|
+
},
|
|
2064
|
+
{
|
|
2065
|
+
"when": "The data communicates parts of a total.",
|
|
2066
|
+
"component": "component:ds-chart-donut",
|
|
2067
|
+
"reason": "Donut provides the part-to-whole and center-summary treatment."
|
|
2068
|
+
}
|
|
2069
|
+
],
|
|
2070
|
+
"commonlyComposedWith": [
|
|
2071
|
+
"component:ds-chart-legend",
|
|
2072
|
+
"component:ds-card-shell-data-viz",
|
|
2073
|
+
"component:ds-tooltip-data-viz"
|
|
2074
|
+
],
|
|
2075
|
+
"accessibility": [
|
|
2076
|
+
"Provide a visible legend or adjacent textual summary when exact series values are important; the chart image name alone is not a complete data table.",
|
|
2077
|
+
"Do not rely on series color alone to communicate meaning.",
|
|
2078
|
+
"A future point tooltip must supplement rather than replace accessible series and value context."
|
|
2079
|
+
],
|
|
2080
|
+
"states": [
|
|
2081
|
+
"The chart is currently static and does not own hover, selection, loading, or empty-state policy.",
|
|
2082
|
+
"Point markers may be shown or hidden without changing the underlying series meaning.",
|
|
2083
|
+
"Authored series colors override the shared categorical palette."
|
|
2084
|
+
],
|
|
2085
|
+
"responsiveBehavior": [
|
|
2086
|
+
"The owner supplies dimensions and updates them when its layout changes.",
|
|
2087
|
+
"Category positions are always equally spaced, even when labels represent time.",
|
|
2088
|
+
"Reduce or pre-format dense labels before passing them; the chart renders authored labels without a continuous time scale."
|
|
2089
|
+
],
|
|
2090
|
+
"frameworkCaveats": {
|
|
2091
|
+
"customElements": [
|
|
2092
|
+
"Assign series and categories as JavaScript properties and keep every series aligned to the category count."
|
|
2093
|
+
],
|
|
2094
|
+
"react": [
|
|
2095
|
+
"Pass stable series and category arrays with dimensions derived from the containing layout."
|
|
2096
|
+
],
|
|
2097
|
+
"angular": [
|
|
2098
|
+
"Bind series and categories as properties with dimensions derived from the containing layout."
|
|
2099
|
+
]
|
|
2100
|
+
},
|
|
2101
|
+
"references": [
|
|
1671
2102
|
{
|
|
1672
|
-
"
|
|
1673
|
-
"
|
|
2103
|
+
"label": "Storybook examples",
|
|
2104
|
+
"path": "src/wc/components/ChartLine/ChartLine.stories.ts"
|
|
1674
2105
|
}
|
|
1675
|
-
]
|
|
1676
|
-
"slots": []
|
|
1677
|
-
},
|
|
1678
|
-
"exports": {
|
|
1679
|
-
"customElement": "ds-chart-legend",
|
|
1680
|
-
"react": "DsChartLegend",
|
|
1681
|
-
"angular": "DsChartLegend"
|
|
2106
|
+
]
|
|
1682
2107
|
},
|
|
1683
|
-
"dependencies": [
|
|
1684
|
-
"@ds-mo/ui",
|
|
1685
|
-
"@ds-mo/tokens"
|
|
1686
|
-
],
|
|
1687
|
-
"componentDependencies": [
|
|
1688
|
-
"text"
|
|
1689
|
-
]
|
|
1690
|
-
},
|
|
1691
|
-
{
|
|
1692
|
-
"id": "component:ds-chart-line",
|
|
1693
|
-
"tag": "ds-chart-line",
|
|
1694
|
-
"name": "chart-line",
|
|
1695
|
-
"title": "ChartLine",
|
|
1696
|
-
"summary": "ChartLine component from @ds-mo/ui.",
|
|
1697
|
-
"intentStatus": "migration-pending",
|
|
1698
|
-
"intent": null,
|
|
1699
2108
|
"api": {
|
|
1700
2109
|
"props": {
|
|
1701
2110
|
"categories": {
|
|
@@ -2038,7 +2447,7 @@
|
|
|
2038
2447
|
"component:ds-button-unfilled"
|
|
2039
2448
|
],
|
|
2040
2449
|
"accessibility": [
|
|
2041
|
-
"The copy action has
|
|
2450
|
+
"The copy action has matching accessible-name and visible-tooltip status wording, and the code remains selectable text.",
|
|
2042
2451
|
"Language and filename labels supplement rather than replace the code content."
|
|
2043
2452
|
],
|
|
2044
2453
|
"responsiveBehavior": [
|
|
@@ -2080,7 +2489,8 @@
|
|
|
2080
2489
|
],
|
|
2081
2490
|
"componentDependencies": [
|
|
2082
2491
|
"button-unfilled",
|
|
2083
|
-
"text"
|
|
2492
|
+
"text",
|
|
2493
|
+
"tooltip"
|
|
2084
2494
|
]
|
|
2085
2495
|
},
|
|
2086
2496
|
{
|
|
@@ -3546,16 +3956,16 @@
|
|
|
3546
3956
|
"pattern:conversation"
|
|
3547
3957
|
],
|
|
3548
3958
|
"accessibility": [
|
|
3549
|
-
"Always provide a localized textarea label and submit or stop action names.",
|
|
3959
|
+
"Always provide a localized textarea label and submit or stop action names; the built-in icon action exposes the same name in its tooltip.",
|
|
3550
3960
|
"Shift plus Enter inserts a newline while Enter submits non-empty content.",
|
|
3551
3961
|
"Streaming and error states remain perceivable without relying on icon shape alone."
|
|
3552
3962
|
],
|
|
3553
3963
|
"states": [
|
|
3554
3964
|
"The owner controls draft value and transport state; the composer emits intent without performing transport.",
|
|
3555
|
-
"Use the tools slot for leading actions such as add and the actions slot for trailing actions such as dictation; the built-in submit or stop action remains last with an 8px gap from the preceding action. These icon buttons use the standard non-rounded control radius.",
|
|
3965
|
+
"Use the tools slot for leading actions such as add and the actions slot for trailing actions such as dictation; the built-in submit or stop action remains last with an 8px gap from the preceding action. These icon buttons use the standard non-rounded control radius, and the application supplies tooltips for slotted icon actions.",
|
|
3556
3966
|
"The composer surface uses the 10px --dimension-radius-125 token.",
|
|
3557
3967
|
"Mouse or keyboard focus on the textarea gives the complete composer surface the same bold-brand inset stroke width and color as an active Input; the native textarea never draws a separate outline.",
|
|
3558
|
-
"The submit action
|
|
3968
|
+
"The empty or otherwise inactive submit action is a disabled bordered ButtonUnfilled. Ready submit actions use submitIntent, while the streaming stop action remains a bold-brand ButtonFilled."
|
|
3559
3969
|
],
|
|
3560
3970
|
"responsiveBehavior": [
|
|
3561
3971
|
"The textarea begins at two body-medium lines, grows one line at a time through six lines, and then scrolls internally."
|
|
@@ -3624,7 +4034,9 @@
|
|
|
3624
4034
|
"@ds-mo/tokens"
|
|
3625
4035
|
],
|
|
3626
4036
|
"componentDependencies": [
|
|
3627
|
-
"button-filled"
|
|
4037
|
+
"button-filled",
|
|
4038
|
+
"button-unfilled",
|
|
4039
|
+
"tooltip"
|
|
3628
4040
|
]
|
|
3629
4041
|
},
|
|
3630
4042
|
{
|
|
@@ -3654,7 +4066,7 @@
|
|
|
3654
4066
|
"accessibility": [
|
|
3655
4067
|
"Give each transcript a concise localized label.",
|
|
3656
4068
|
"New content is exposed through log semantics without stealing focus.",
|
|
3657
|
-
"The scroll-to-latest control remains keyboard accessible when follow behavior is released."
|
|
4069
|
+
"The scroll-to-latest control remains keyboard accessible when follow behavior is released and exposes its action name in a tooltip."
|
|
3658
4070
|
],
|
|
3659
4071
|
"states": [
|
|
3660
4072
|
"Selection and transcript interaction release automatic following.",
|
|
@@ -3709,7 +4121,8 @@
|
|
|
3709
4121
|
"@ds-mo/tokens"
|
|
3710
4122
|
],
|
|
3711
4123
|
"componentDependencies": [
|
|
3712
|
-
"button-unfilled"
|
|
4124
|
+
"button-unfilled",
|
|
4125
|
+
"tooltip"
|
|
3713
4126
|
]
|
|
3714
4127
|
},
|
|
3715
4128
|
{
|
|
@@ -3761,7 +4174,7 @@
|
|
|
3761
4174
|
"accessibility": [
|
|
3762
4175
|
"Provide a concise visible heading; the component uses it as the dialog's accessible name.",
|
|
3763
4176
|
"Give the primary explanatory copy a stable id and pass it through aria-describedby so assistive technology receives the decision context.",
|
|
3764
|
-
"Opening the native modal dialog moves focus to the header Close action, traps Tab navigation inside the top layer, and makes outside content inert.",
|
|
4177
|
+
"Opening the native modal dialog moves focus to the header Close action, whose visible tooltip matches its accessible name, traps Tab navigation inside the top layer, and makes outside content inert.",
|
|
3765
4178
|
"Close, Escape, and backdrop activation emit dsClose with close-button, escape, or backdrop reason before beginning dismissal; use the component only when every dismissal path is safe.",
|
|
3766
4179
|
"After exit motion completes, the native dialog leaves the top layer, focus returns to the previously focused element, and dsAfterClose emits.",
|
|
3767
4180
|
"Use visible label-only footer buttons. Keep at most two actions: one bold filled primary action followed by one bordered unfilled action, or two bordered unfilled actions.",
|
|
@@ -3859,7 +4272,8 @@
|
|
|
3859
4272
|
],
|
|
3860
4273
|
"componentDependencies": [
|
|
3861
4274
|
"button-unfilled",
|
|
3862
|
-
"text"
|
|
4275
|
+
"text",
|
|
4276
|
+
"tooltip"
|
|
3863
4277
|
]
|
|
3864
4278
|
},
|
|
3865
4279
|
{
|
|
@@ -3903,7 +4317,7 @@
|
|
|
3903
4317
|
}
|
|
3904
4318
|
],
|
|
3905
4319
|
"commonlyComposedWith": [
|
|
3906
|
-
"component:ds-app
|
|
4320
|
+
"component:ds-shell-app",
|
|
3907
4321
|
"component:ds-bar-nav",
|
|
3908
4322
|
"component:ds-panel-tools",
|
|
3909
4323
|
"component:ds-menu"
|
|
@@ -3934,7 +4348,7 @@
|
|
|
3934
4348
|
"At 1200px and wider, default to expanded, allow the user to expand or collapse, and restore the locally persisted desktop preference when available.",
|
|
3935
4349
|
"From 768px through 1199px, present PanelNav permanently collapsed and do not allow user expansion.",
|
|
3936
4350
|
"Below 768px, the consuming application replaces PanelNav with a dedicated mobile navigation component; PanelNav does not own mobile navigation.",
|
|
3937
|
-
"
|
|
4351
|
+
"ShellApp permanently owns responsive composition: it determines shell mode, enforces tablet collapse, and replaces PanelNav with future mobile navigation below 768px.",
|
|
3938
4352
|
"When the viewport is below breakpoint, PanelNav locks collapsed, disables its header toggle affordance, and preserves the persisted desktop collapse preference.",
|
|
3939
4353
|
"Collapsed presentation must preserve destination ordering, active state, notification status, and accessible names."
|
|
3940
4354
|
],
|
|
@@ -3945,12 +4359,12 @@
|
|
|
3945
4359
|
],
|
|
3946
4360
|
"react": [
|
|
3947
4361
|
"Pass groups as an array through the generated React wrapper and synchronize currentUrl with the host router.",
|
|
3948
|
-
"
|
|
4362
|
+
"ShellApp owns mobile replacement; PanelNav enforces its configured breakpoint expansion lock."
|
|
3949
4363
|
],
|
|
3950
4364
|
"angular": [
|
|
3951
4365
|
"Import DsPanelNav from @ds-mo/ui/angular/ds-panel-nav and bind groups as a property.",
|
|
3952
4366
|
"Bind both the nav-style attribute and navStyle property when first-paint route styling must be deterministic.",
|
|
3953
|
-
"
|
|
4367
|
+
"ShellApp owns mobile replacement; PanelNav enforces its configured breakpoint expansion lock."
|
|
3954
4368
|
]
|
|
3955
4369
|
},
|
|
3956
4370
|
"references": [
|
|
@@ -4133,7 +4547,7 @@
|
|
|
4133
4547
|
{
|
|
4134
4548
|
"when": "The choices are secondary application routes.",
|
|
4135
4549
|
"component": "component:ds-bar-nav",
|
|
4136
|
-
"reason": "BarNav owns route sections inside
|
|
4550
|
+
"reason": "BarNav owns route sections inside ShellApp."
|
|
4137
4551
|
},
|
|
4138
4552
|
{
|
|
4139
4553
|
"when": "The choices are transient actions or options.",
|
|
@@ -4245,7 +4659,7 @@
|
|
|
4245
4659
|
"component:ds-button-unfilled"
|
|
4246
4660
|
],
|
|
4247
4661
|
"accessibility": [
|
|
4248
|
-
"Leading navigation or dismiss actions and trailing icon actions require concise localized names.",
|
|
4662
|
+
"Leading navigation or dismiss actions and trailing icon actions require concise localized names; the header reuses each name as the action tooltip.",
|
|
4249
4663
|
"The visible heading names the active panel or subview."
|
|
4250
4664
|
],
|
|
4251
4665
|
"states": [
|
|
@@ -4336,7 +4750,8 @@
|
|
|
4336
4750
|
],
|
|
4337
4751
|
"componentDependencies": [
|
|
4338
4752
|
"button-unfilled",
|
|
4339
|
-
"text"
|
|
4753
|
+
"text",
|
|
4754
|
+
"tooltip"
|
|
4340
4755
|
]
|
|
4341
4756
|
},
|
|
4342
4757
|
{
|
|
@@ -4366,13 +4781,13 @@
|
|
|
4366
4781
|
],
|
|
4367
4782
|
"accessibility": [
|
|
4368
4783
|
"Provide an aria-label that names the searched domain, such as Search agent chats or Search messages.",
|
|
4369
|
-
"The standard search clear action restores focus and emits both the empty query and dsClear.",
|
|
4370
|
-
"When showFilter is enabled, provide stable filterTriggerId and filterControls values, synchronize filterExpanded with the controlled menu, and restore focus after selection."
|
|
4784
|
+
"The standard search clear action restores focus, exposes its localized name in a tooltip, and emits both the empty query and dsClear.",
|
|
4785
|
+
"When showFilter is enabled, provide stable filterTriggerId and filterControls values, synchronize filterExpanded with the controlled menu, and restore focus after selection; filterAriaLabel also labels its tooltip."
|
|
4371
4786
|
],
|
|
4372
4787
|
"states": [
|
|
4373
4788
|
"The row is always 48px high with 8px outer padding and a complete md search recipe: 32px control, text-body-medium at 14px/20px, and a 20px md search icon.",
|
|
4374
4789
|
"The search icon stays foreground-secondary at rest, hover, focus, active, and while the query is filled.",
|
|
4375
|
-
"The row and control surface remain transparent so the
|
|
4790
|
+
"The row and control surface remain transparent so the ShellApp chrome wash is visible behind them.",
|
|
4376
4791
|
"The row divider remains the same tertiary 1px boundary while the input is focused because it belongs to the 48px container rather than the input control.",
|
|
4377
4792
|
"With filtering enabled, the md search control, decorative vertical divider, and borderless md Filter action are separated by 8px; filterActive promotes only the trigger foreground without adding a selected fill."
|
|
4378
4793
|
],
|
|
@@ -4477,7 +4892,8 @@
|
|
|
4477
4892
|
"button-unfilled",
|
|
4478
4893
|
"divider",
|
|
4479
4894
|
"icon",
|
|
4480
|
-
"text"
|
|
4895
|
+
"text",
|
|
4896
|
+
"tooltip"
|
|
4481
4897
|
]
|
|
4482
4898
|
},
|
|
4483
4899
|
{
|
|
@@ -4485,14 +4901,14 @@
|
|
|
4485
4901
|
"tag": "ds-panel-tools",
|
|
4486
4902
|
"name": "panel-tools",
|
|
4487
4903
|
"title": "PanelTools",
|
|
4488
|
-
"summary": "Required
|
|
4904
|
+
"summary": "Required ShellApp utility rail and persistent drawer host for the fixed set of global Search, Agents, Messages, Stacks, Activity, and Help products.",
|
|
4489
4905
|
"intentStatus": "complete",
|
|
4490
4906
|
"intent": {
|
|
4491
4907
|
"audience": "specialized",
|
|
4492
4908
|
"status": "stable",
|
|
4493
|
-
"summary": "Required
|
|
4909
|
+
"summary": "Required ShellApp utility rail and persistent drawer host for the fixed set of global Search, Agents, Messages, Stacks, Activity, and Help products.",
|
|
4494
4910
|
"useWhen": [
|
|
4495
|
-
"Composing the required global tools region inside the application's single
|
|
4911
|
+
"Composing the required global tools region inside the application's single ShellApp.",
|
|
4496
4912
|
"Users need to move between application-wide utilities without losing each tool's in-progress state.",
|
|
4497
4913
|
"Search, AI conversations, user messages, review stacks, notifications, or help content must remain available alongside route content."
|
|
4498
4914
|
],
|
|
@@ -4500,8 +4916,8 @@
|
|
|
4500
4916
|
"The action is specific to the current page or selected content rather than globally available across the application.",
|
|
4501
4917
|
"The item navigates to a primary or secondary route; use PanelNav or BarNav instead.",
|
|
4502
4918
|
"A consumer wants to add arbitrary tools, reorder fixed tools, or repurpose a semantic tool id.",
|
|
4503
|
-
"Building the mobile tools experience; future mobile
|
|
4504
|
-
"PanelTools would be mounted outside the application's single
|
|
4919
|
+
"Building the mobile tools experience; future mobile ShellApp composition uses a different bottom-bar and panel pattern.",
|
|
4920
|
+
"PanelTools would be mounted outside the application's single ShellApp."
|
|
4505
4921
|
],
|
|
4506
4922
|
"alternatives": [
|
|
4507
4923
|
{
|
|
@@ -4521,7 +4937,7 @@
|
|
|
4521
4937
|
}
|
|
4522
4938
|
],
|
|
4523
4939
|
"commonlyComposedWith": [
|
|
4524
|
-
"component:ds-app
|
|
4940
|
+
"component:ds-shell-app",
|
|
4525
4941
|
"component:ds-panel-nav",
|
|
4526
4942
|
"component:ds-bar-nav"
|
|
4527
4943
|
],
|
|
@@ -4549,7 +4965,7 @@
|
|
|
4549
4965
|
"Each tool supplies its current header title, base-versus-detail Back state, and right-side actions through the headers property. Base views omit Back; deeper views expose Back and update the same header in place.",
|
|
4550
4966
|
"Header Back and action events express intent only; the owning tool changes product navigation, menus, and data state. PanelTools keeps the final header action exactly 8px from the drawer edge.",
|
|
4551
4967
|
"Menus opened from a right-side header action use PANEL_TOOLS_HEADER_MENU_PLACEMENT: bottom/end choice-cell alignment and a 12px side offset, placing the popup 4px below the 48px header while aligning the final menu item edge with the trigger.",
|
|
4552
|
-
"Tool view roots stay transparent so
|
|
4968
|
+
"Tool view roots stay transparent so ShellApp's chrome wash remains visible; only explicitly designed child surfaces introduce a fill.",
|
|
4553
4969
|
"Tools with search compose ds-panel-tool-search immediately below the shared header. Its 48px row always contains the md search control and must not be reduced to sm or xs.",
|
|
4554
4970
|
"If an active optional tool becomes unavailable, PanelTools closes the drawer, clears activeTool, and emits its deselection.",
|
|
4555
4971
|
"Use isInactive only for a temporarily unavailable visible tool; omit tools the user is not authorized to access.",
|
|
@@ -4560,8 +4976,8 @@
|
|
|
4560
4976
|
],
|
|
4561
4977
|
"responsiveBehavior": [
|
|
4562
4978
|
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
4563
|
-
"
|
|
4564
|
-
"Below 768px, do not reuse desktop PanelTools: future
|
|
4979
|
+
"ShellApp owns the fixed drawer-width variable; consumers must not hardcode alternate drawer widths.",
|
|
4980
|
+
"Below 768px, do not reuse desktop PanelTools: future ShellApp mobile composition uses a bottom bar for Search, Agents, Notifications, and Stacks, while Help moves into mobile primary navigation.",
|
|
4565
4981
|
"Keep named-slot content mounted while tools switch or the drawer closes so users can return to in-progress global work.",
|
|
4566
4982
|
"Conversation products may use fullscreenHeaderMode split for a 300px history rail beside a flexible detail pane, each with its own canonical header; the application owns that internal split layout.",
|
|
4567
4983
|
"Use fixed drawer widths for now; do not add user resizing or width persistence."
|
|
@@ -4570,10 +4986,10 @@
|
|
|
4570
4986
|
"customElements": [
|
|
4571
4987
|
"Assign items as a JavaScript property for structured data; items-json is the string fallback.",
|
|
4572
4988
|
"Assign headers as a JavaScript property and replace its object identity whenever an active tool changes title, depth, or actions.",
|
|
4573
|
-
"Keep PanelTools mounted at
|
|
4989
|
+
"Keep PanelTools mounted at ShellApp scope across route changes and provide each product through its matching named slot."
|
|
4574
4990
|
],
|
|
4575
4991
|
"react": [
|
|
4576
|
-
"Pass the fixed item collection through the generated React wrapper and keep named-slot product content mounted at
|
|
4992
|
+
"Pass the fixed item collection through the generated React wrapper and keep named-slot product content mounted at ShellApp scope.",
|
|
4577
4993
|
"Use storageKey only for same-browser last-tool continuity; do not persist the open drawer."
|
|
4578
4994
|
],
|
|
4579
4995
|
"angular": [
|
|
@@ -5094,7 +5510,8 @@
|
|
|
5094
5510
|
"empty-state",
|
|
5095
5511
|
"icon",
|
|
5096
5512
|
"loader",
|
|
5097
|
-
"text"
|
|
5513
|
+
"text",
|
|
5514
|
+
"tooltip"
|
|
5098
5515
|
]
|
|
5099
5516
|
},
|
|
5100
5517
|
{
|
|
@@ -5354,25 +5771,150 @@
|
|
|
5354
5771
|
"empty-state",
|
|
5355
5772
|
"icon",
|
|
5356
5773
|
"loader",
|
|
5357
|
-
"text"
|
|
5774
|
+
"text",
|
|
5775
|
+
"tooltip"
|
|
5358
5776
|
]
|
|
5359
5777
|
},
|
|
5778
|
+
{
|
|
5779
|
+
"id": "component:ds-shell-app",
|
|
5780
|
+
"tag": "ds-shell-app",
|
|
5781
|
+
"name": "shell-app",
|
|
5782
|
+
"title": "ShellApp",
|
|
5783
|
+
"summary": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
5784
|
+
"intentStatus": "complete",
|
|
5785
|
+
"intent": {
|
|
5786
|
+
"audience": "specialized",
|
|
5787
|
+
"status": "stable",
|
|
5788
|
+
"summary": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
5789
|
+
"useWhen": [
|
|
5790
|
+
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
5791
|
+
"PanelNav, BarNav, PanelTools, page content, shared chrome, responsive behavior, and shell shortcuts must be composed as one application frame.",
|
|
5792
|
+
"Future application templates need the supported base-page composition boundary."
|
|
5793
|
+
],
|
|
5794
|
+
"avoidWhen": [
|
|
5795
|
+
"Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences that require a different layout.",
|
|
5796
|
+
"Another ShellApp already exists in the page; applications must render exactly one and must never nest ShellApps.",
|
|
5797
|
+
"Building content inside an existing ShellApp; render the page content rather than another shell."
|
|
5798
|
+
],
|
|
5799
|
+
"commonlyComposedWith": [
|
|
5800
|
+
"component:ds-panel-nav",
|
|
5801
|
+
"component:ds-bar-nav",
|
|
5802
|
+
"component:ds-panel-tools",
|
|
5803
|
+
"component:ds-shell-page",
|
|
5804
|
+
"component:ds-swatch-picker"
|
|
5805
|
+
],
|
|
5806
|
+
"patterns": [
|
|
5807
|
+
"pattern:application-shell",
|
|
5808
|
+
"pattern:shell-page"
|
|
5809
|
+
],
|
|
5810
|
+
"accessibility": [
|
|
5811
|
+
"Keep primary destinations in PanelNav and secondary route sections in BarNav.",
|
|
5812
|
+
"Ensure the default content region contains the page's single main landmark.",
|
|
5813
|
+
"Keep PanelNav, BarNav, and PanelTools chrome available in the shell's supported desktop and tablet compositions.",
|
|
5814
|
+
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
5815
|
+
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
5816
|
+
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
5817
|
+
],
|
|
5818
|
+
"states": [
|
|
5819
|
+
"Render exactly one ShellApp as the workspace root and never nest it.",
|
|
5820
|
+
"PanelNav, BarNav, and PanelTools are required shell regions; PanelTools contains at least Search and Help even when no additional product tools apply.",
|
|
5821
|
+
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
5822
|
+
"ShellApp propagates navStyle and coordinates layout, gradient alignment, transitions, metrics, shortcuts, and responsive composition.",
|
|
5823
|
+
"Set gradientPreset to the single resolved global chrome preference: neutral by default, none for solid chrome, or cool, neutral, warm, and fresh for token-based washes.",
|
|
5824
|
+
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; ShellApp owns rendering the resolved preset across authenticated routes.",
|
|
5825
|
+
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
5826
|
+
"Update PanelNav groups, BarNav tabs and heading, navStyle, basePath, and currentUrl atomically from one resolved route state.",
|
|
5827
|
+
"BarNav remains present: it shows route-section tabs when available and the active PanelNav destination label as heading otherwise.",
|
|
5828
|
+
"Render one ShellPage as the default-slot child for each standard routed page; ShellApp owns the content scroller while ShellPage owns page header stickiness and content inset.",
|
|
5829
|
+
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
5830
|
+
],
|
|
5831
|
+
"responsiveBehavior": [
|
|
5832
|
+
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
5833
|
+
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
5834
|
+
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
5835
|
+
"On mobile, ShellApp remains the page root but replaces PanelNav and desktop navigation composition with a future dedicated mobile navigation design.",
|
|
5836
|
+
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
5837
|
+
"The current runtime does not yet implement the complete desktop, tablet, and mobile composition contract; consuming applications must enforce missing breakpoint behavior until ShellApp provides it."
|
|
5838
|
+
],
|
|
5839
|
+
"frameworkCaveats": {
|
|
5840
|
+
"customElements": [
|
|
5841
|
+
"Assign complex navigation and tool collections as JavaScript properties on the slotted components.",
|
|
5842
|
+
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
5843
|
+
],
|
|
5844
|
+
"react": [
|
|
5845
|
+
"Use generated wrappers and preserve native slot names for PanelNav, BarNav, PanelTools, and main content.",
|
|
5846
|
+
"Resolve all shell inputs from one router state before rendering the composition."
|
|
5847
|
+
],
|
|
5848
|
+
"angular": [
|
|
5849
|
+
"Use generated standalone adapters and preserve slot attributes in templates.",
|
|
5850
|
+
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
5851
|
+
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
5852
|
+
]
|
|
5853
|
+
},
|
|
5854
|
+
"references": [
|
|
5855
|
+
{
|
|
5856
|
+
"label": "Component guide",
|
|
5857
|
+
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
5858
|
+
},
|
|
5859
|
+
{
|
|
5860
|
+
"label": "Executable Storybook composition",
|
|
5861
|
+
"path": "src/wc/components/ShellApp/ShellApp.stories.ts"
|
|
5862
|
+
},
|
|
5863
|
+
{
|
|
5864
|
+
"label": "Framework integration",
|
|
5865
|
+
"path": "docs/framework-integration.md"
|
|
5866
|
+
},
|
|
5867
|
+
{
|
|
5868
|
+
"label": "Application shell contract",
|
|
5869
|
+
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
5870
|
+
}
|
|
5871
|
+
]
|
|
5872
|
+
},
|
|
5873
|
+
"api": {
|
|
5874
|
+
"props": {
|
|
5875
|
+
"gradientPreset": {
|
|
5876
|
+
"type": "ShellGradientPreset",
|
|
5877
|
+
"required": false
|
|
5878
|
+
},
|
|
5879
|
+
"navStyle": {
|
|
5880
|
+
"type": "NavChromeStyle",
|
|
5881
|
+
"required": false
|
|
5882
|
+
},
|
|
5883
|
+
"shortcutsEnabled": {
|
|
5884
|
+
"type": "boolean",
|
|
5885
|
+
"required": false
|
|
5886
|
+
}
|
|
5887
|
+
},
|
|
5888
|
+
"events": [],
|
|
5889
|
+
"slots": []
|
|
5890
|
+
},
|
|
5891
|
+
"exports": {
|
|
5892
|
+
"customElement": "ds-shell-app",
|
|
5893
|
+
"react": "DsShellApp",
|
|
5894
|
+
"angular": "DsShellApp"
|
|
5895
|
+
},
|
|
5896
|
+
"dependencies": [
|
|
5897
|
+
"@ds-mo/ui",
|
|
5898
|
+
"@ds-mo/tokens"
|
|
5899
|
+
],
|
|
5900
|
+
"componentDependencies": []
|
|
5901
|
+
},
|
|
5360
5902
|
{
|
|
5361
5903
|
"id": "component:ds-shell-gradient-picker",
|
|
5362
5904
|
"tag": "ds-shell-gradient-picker",
|
|
5363
5905
|
"name": "shell-gradient-picker",
|
|
5364
5906
|
"title": "ShellGradientPicker",
|
|
5365
|
-
"summary": "Deprecated compatibility wrapper that maps the fixed
|
|
5907
|
+
"summary": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
5366
5908
|
"intentStatus": "complete",
|
|
5367
5909
|
"intent": {
|
|
5368
5910
|
"audience": "specialized",
|
|
5369
5911
|
"status": "deprecated",
|
|
5370
5912
|
"replacedBy": "component:ds-swatch-picker",
|
|
5371
5913
|
"replacementReason": "SwatchPicker now owns the same accessible interaction with a generic option model that supports both flat colors and gradients.",
|
|
5372
|
-
"summary": "Deprecated compatibility wrapper that maps the fixed
|
|
5914
|
+
"summary": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
5373
5915
|
"useWhen": [
|
|
5374
5916
|
"Adding the Appearance or Theme section to the application's user or account menu.",
|
|
5375
|
-
"Users must choose the global
|
|
5917
|
+
"Users must choose the global ShellApp chrome treatment from none, cool, neutral, warm, or fresh."
|
|
5376
5918
|
],
|
|
5377
5919
|
"avoidWhen": [
|
|
5378
5920
|
"Choosing semantic intent, page background, chart, content, or brand colors.",
|
|
@@ -5388,7 +5930,7 @@
|
|
|
5388
5930
|
}
|
|
5389
5931
|
],
|
|
5390
5932
|
"commonlyComposedWith": [
|
|
5391
|
-
"component:ds-app
|
|
5933
|
+
"component:ds-shell-app",
|
|
5392
5934
|
"component:ds-menu"
|
|
5393
5935
|
],
|
|
5394
5936
|
"patterns": [
|
|
@@ -5402,7 +5944,7 @@
|
|
|
5402
5944
|
"states": [
|
|
5403
5945
|
"Neutral is the default preset; none renders solid shell chrome without a wash.",
|
|
5404
5946
|
"Cool, neutral, warm, and fresh use design tokens and automatically adapt to the active light or dark color theme.",
|
|
5405
|
-
"Apply dsChange immediately to
|
|
5947
|
+
"Apply dsChange immediately to ShellApp.gradientPreset and keep the containing account menu open.",
|
|
5406
5948
|
"The application owns local persistence, cross-tab synchronization, and server or account preference precedence; the picker owns only selection UI and events.",
|
|
5407
5949
|
"Treat the fixed preset union as the only supported values and do not construct custom gradients."
|
|
5408
5950
|
],
|
|
@@ -5412,7 +5954,7 @@
|
|
|
5412
5954
|
],
|
|
5413
5955
|
"frameworkCaveats": {
|
|
5414
5956
|
"customElements": [
|
|
5415
|
-
"Listen for dsChange, resolve application preference precedence, and assign the result to the single
|
|
5957
|
+
"Listen for dsChange, resolve application preference precedence, and assign the result to the single ShellApp gradientPreset property."
|
|
5416
5958
|
],
|
|
5417
5959
|
"react": [
|
|
5418
5960
|
"Use the generated wrapper and handle onDsChange without closing the containing account menu."
|
|
@@ -5427,8 +5969,8 @@
|
|
|
5427
5969
|
"path": "src/wc/components/SwatchPicker/SwatchPicker.stories.ts"
|
|
5428
5970
|
},
|
|
5429
5971
|
{
|
|
5430
|
-
"label": "
|
|
5431
|
-
"path": "src/wc/components/
|
|
5972
|
+
"label": "ShellApp gradient contract",
|
|
5973
|
+
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
5432
5974
|
},
|
|
5433
5975
|
{
|
|
5434
5976
|
"label": "Application shell composition",
|
|
@@ -5473,14 +6015,14 @@
|
|
|
5473
6015
|
"tag": "ds-shell-gradient-swatch",
|
|
5474
6016
|
"name": "shell-gradient-swatch",
|
|
5475
6017
|
"title": "ShellGradientSwatch",
|
|
5476
|
-
"summary": "Deprecated internal compatibility component for one legacy
|
|
6018
|
+
"summary": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
5477
6019
|
"intentStatus": "complete",
|
|
5478
6020
|
"intent": {
|
|
5479
6021
|
"audience": "internal",
|
|
5480
6022
|
"status": "deprecated",
|
|
5481
6023
|
"replacedBy": "component:ds-swatch-picker",
|
|
5482
6024
|
"replacementReason": "SwatchPicker renders its option buttons internally so an individually published radio swatch is no longer needed.",
|
|
5483
|
-
"summary": "Deprecated internal compatibility component for one legacy
|
|
6025
|
+
"summary": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
5484
6026
|
"useWhen": [
|
|
5485
6027
|
"Maintaining or extending ShellGradientPicker inside CompoMo."
|
|
5486
6028
|
],
|
|
@@ -5568,6 +6110,120 @@
|
|
|
5568
6110
|
],
|
|
5569
6111
|
"componentDependencies": []
|
|
5570
6112
|
},
|
|
6113
|
+
{
|
|
6114
|
+
"id": "component:ds-shell-page",
|
|
6115
|
+
"tag": "ds-shell-page",
|
|
6116
|
+
"name": "shell-page",
|
|
6117
|
+
"title": "ShellPage",
|
|
6118
|
+
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement, container-aware header variants, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6119
|
+
"intentStatus": "complete",
|
|
6120
|
+
"intent": {
|
|
6121
|
+
"audience": "general",
|
|
6122
|
+
"status": "stable",
|
|
6123
|
+
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement, container-aware header variants, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6124
|
+
"useWhen": [
|
|
6125
|
+
"Rendering a standard routed page inside ShellApp's default content region.",
|
|
6126
|
+
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the page column narrows.",
|
|
6127
|
+
"Pages need consistent content gutters with an explicit full-bleed option."
|
|
6128
|
+
],
|
|
6129
|
+
"avoidWhen": [
|
|
6130
|
+
"Building authentication, onboarding, public, modal, drawer, or intentionally focused fullscreen layouts outside the standard ShellApp page region.",
|
|
6131
|
+
"Another ShellPage already owns the routed page; never nest ShellPages.",
|
|
6132
|
+
"A bounded card or pane needs its own header rather than a page-level main landmark."
|
|
6133
|
+
],
|
|
6134
|
+
"alternatives": [
|
|
6135
|
+
{
|
|
6136
|
+
"when": "The composition is a persistent application-wide workspace frame.",
|
|
6137
|
+
"component": "component:ds-shell-app",
|
|
6138
|
+
"reason": "ShellApp owns global navigation, tools, and the content scroll region; ShellPage belongs inside it."
|
|
6139
|
+
},
|
|
6140
|
+
{
|
|
6141
|
+
"when": "Only static page title chrome is required without sticky or responsive orchestration.",
|
|
6142
|
+
"component": "component:ds-bar-title",
|
|
6143
|
+
"reason": "BarTitle can be used standalone with an explicit variant."
|
|
6144
|
+
}
|
|
6145
|
+
],
|
|
6146
|
+
"commonlyComposedWith": [
|
|
6147
|
+
"component:ds-shell-app",
|
|
6148
|
+
"component:ds-bar-title",
|
|
6149
|
+
"component:ds-tab-group"
|
|
6150
|
+
],
|
|
6151
|
+
"patterns": [
|
|
6152
|
+
"pattern:shell-page"
|
|
6153
|
+
],
|
|
6154
|
+
"accessibility": [
|
|
6155
|
+
"ShellPage exposes the routed page as the main landmark; render exactly one active ShellPage inside ShellApp.",
|
|
6156
|
+
"Provide exactly one BarTitle through the header slot so the page has one h1.",
|
|
6157
|
+
"Keep loading, empty, validation, error, progress, success, and failure communication in the default product-content slot.",
|
|
6158
|
+
"Responsive variant changes preserve the same heading, controls, accessible names, and keyboard focus targets."
|
|
6159
|
+
],
|
|
6160
|
+
"states": [
|
|
6161
|
+
"headerPresentation=auto selects expanded, compact, or constrained from ShellPage's own inline capacity and scroll position.",
|
|
6162
|
+
"expanded, compact, and constrained are explicit overrides for exceptional layouts and deterministic examples.",
|
|
6163
|
+
"contentInset=default supplies standard page gutters; none permits maps, canvases, and other full-bleed content.",
|
|
6164
|
+
"The required header slot accepts one BarTitle. The default slot owns router output and all page product content."
|
|
6165
|
+
],
|
|
6166
|
+
"responsiveBehavior": [
|
|
6167
|
+
"ShellPage observes its own rendered width instead of viewport media queries or ShellApp desktop/tablet modes.",
|
|
6168
|
+
"Roomy pages expand at the top and compact after scroll; medium-capacity pages start compact; narrow pages use the constrained header variant.",
|
|
6169
|
+
"Token-based capacity bands use hysteresis so opening tools or resizing navigation cannot oscillate near a boundary.",
|
|
6170
|
+
"Scroll compaction preserves the expanded page flow offset so content never jumps beneath the sticky header.",
|
|
6171
|
+
"ShellPage relies on ShellApp's content scroller and never introduces nested scrolling."
|
|
6172
|
+
],
|
|
6173
|
+
"frameworkCaveats": {
|
|
6174
|
+
"customElements": [
|
|
6175
|
+
"Import ShellPage and BarTitle, place one ds-bar-title in slot=header, and render route content as default children.",
|
|
6176
|
+
"Do not set BarTitle.variant while ShellPage owns headerPresentation."
|
|
6177
|
+
],
|
|
6178
|
+
"react": [
|
|
6179
|
+
"Render DsBarTitle with slot=header inside DsShellPage and keep routed content as the remaining children.",
|
|
6180
|
+
"Use contentInset none only for deliberately full-bleed page products."
|
|
6181
|
+
],
|
|
6182
|
+
"angular": [
|
|
6183
|
+
"Import the generated standalone DsShellPage and DsBarTitle adapters, preserve slot=header, and place router-outlet in the ShellPage default slot.",
|
|
6184
|
+
"Do not add another overflow auto wrapper around the routed page."
|
|
6185
|
+
]
|
|
6186
|
+
},
|
|
6187
|
+
"references": [
|
|
6188
|
+
{
|
|
6189
|
+
"label": "Page-family and responsive examples",
|
|
6190
|
+
"path": "src/wc/components/ShellPage/ShellPage.stories.ts"
|
|
6191
|
+
},
|
|
6192
|
+
{
|
|
6193
|
+
"label": "Cross-browser geometry and interaction coverage",
|
|
6194
|
+
"path": "tests/e2e/bar-title.spec.ts"
|
|
6195
|
+
},
|
|
6196
|
+
{
|
|
6197
|
+
"label": "Reusable framework composition",
|
|
6198
|
+
"path": "agent/patterns/shell-page/pattern.agent.json"
|
|
6199
|
+
}
|
|
6200
|
+
]
|
|
6201
|
+
},
|
|
6202
|
+
"api": {
|
|
6203
|
+
"props": {
|
|
6204
|
+
"contentInset": {
|
|
6205
|
+
"type": "ShellPageContentInset",
|
|
6206
|
+
"required": false
|
|
6207
|
+
},
|
|
6208
|
+
"headerPresentation": {
|
|
6209
|
+
"type": "ShellPageHeaderPresentation",
|
|
6210
|
+
"required": false
|
|
6211
|
+
}
|
|
6212
|
+
},
|
|
6213
|
+
"events": [],
|
|
6214
|
+
"slots": []
|
|
6215
|
+
},
|
|
6216
|
+
"exports": {
|
|
6217
|
+
"customElement": "ds-shell-page",
|
|
6218
|
+
"react": "DsShellPage",
|
|
6219
|
+
"angular": "DsShellPage"
|
|
6220
|
+
},
|
|
6221
|
+
"dependencies": [
|
|
6222
|
+
"@ds-mo/ui",
|
|
6223
|
+
"@ds-mo/tokens"
|
|
6224
|
+
],
|
|
6225
|
+
"componentDependencies": []
|
|
6226
|
+
},
|
|
5571
6227
|
{
|
|
5572
6228
|
"id": "component:ds-skeleton",
|
|
5573
6229
|
"tag": "ds-skeleton",
|
|
@@ -5966,7 +6622,7 @@
|
|
|
5966
6622
|
],
|
|
5967
6623
|
"commonlyComposedWith": [
|
|
5968
6624
|
"component:ds-menu",
|
|
5969
|
-
"component:ds-app
|
|
6625
|
+
"component:ds-shell-app"
|
|
5970
6626
|
],
|
|
5971
6627
|
"accessibility": [
|
|
5972
6628
|
"Provide a localized groupLabel describing the complete choice.",
|
|
@@ -6953,9 +7609,73 @@
|
|
|
6953
7609
|
"tag": "ds-tooltip-data-viz",
|
|
6954
7610
|
"name": "tooltip-data-viz",
|
|
6955
7611
|
"title": "TooltipDataViz",
|
|
6956
|
-
"summary": "
|
|
6957
|
-
"intentStatus": "
|
|
6958
|
-
"intent":
|
|
7612
|
+
"summary": "Chart-owned, non-interactive label and value callout positioned from pointer or focused-mark coordinates inside a visualization wrapper.",
|
|
7613
|
+
"intentStatus": "complete",
|
|
7614
|
+
"intent": {
|
|
7615
|
+
"audience": "specialized",
|
|
7616
|
+
"status": "experimental",
|
|
7617
|
+
"summary": "Chart-owned, non-interactive label and value callout positioned from pointer or focused-mark coordinates inside a visualization wrapper.",
|
|
7618
|
+
"useWhen": [
|
|
7619
|
+
"A chart needs immediate visual value feedback for a genuinely hovered or keyboard-focused mark.",
|
|
7620
|
+
"The anchor lives inside SVG or chart coordinates rather than on a slotted HTML trigger.",
|
|
7621
|
+
"The owning chart can mount the callout for one interaction session and update its coordinates while tracking."
|
|
7622
|
+
],
|
|
7623
|
+
"avoidWhen": [
|
|
7624
|
+
"A normal control or text trigger needs supplemental explanation; use Tooltip.",
|
|
7625
|
+
"The content needs links, actions, focus, or touch-primary disclosure.",
|
|
7626
|
+
"An externally synchronized highlight has no genuine local pointer or keyboard interaction.",
|
|
7627
|
+
"The callout would be the only accessible source of an essential value."
|
|
7628
|
+
],
|
|
7629
|
+
"alternatives": [
|
|
7630
|
+
{
|
|
7631
|
+
"when": "A slotted control or text trigger needs a conventional tooltip.",
|
|
7632
|
+
"component": "component:ds-tooltip",
|
|
7633
|
+
"reason": "Tooltip owns trigger semantics, focus behavior, and anchored overlay lifecycle."
|
|
7634
|
+
},
|
|
7635
|
+
{
|
|
7636
|
+
"when": "Donut details should remain continuously visible beside the chart.",
|
|
7637
|
+
"component": "component:ds-chart-legend",
|
|
7638
|
+
"reason": "A visible legend avoids redundant transient slice callouts."
|
|
7639
|
+
}
|
|
7640
|
+
],
|
|
7641
|
+
"commonlyComposedWith": [
|
|
7642
|
+
"component:ds-chart-bar",
|
|
7643
|
+
"component:ds-chart-line",
|
|
7644
|
+
"component:ds-chart-donut"
|
|
7645
|
+
],
|
|
7646
|
+
"accessibility": [
|
|
7647
|
+
"The callout is presentation-only and never replaces the owning chart mark's accessible label or an adjacent data summary.",
|
|
7648
|
+
"Keyboard-focused marks receive the same visual feedback as pointer-hovered marks.",
|
|
7649
|
+
"The callout never receives focus or contains interactive descendants."
|
|
7650
|
+
],
|
|
7651
|
+
"states": [
|
|
7652
|
+
"The owning chart mounts the callout when a local interaction starts and unmounts it when that interaction ends.",
|
|
7653
|
+
"Coordinate updates track within one mounted interaction session without restarting the show delay.",
|
|
7654
|
+
"Placement flips horizontally or vertically when the rendered callout approaches a viewport edge.",
|
|
7655
|
+
"Reduced motion preserves the final visible state without an opacity transition."
|
|
7656
|
+
],
|
|
7657
|
+
"responsiveBehavior": [
|
|
7658
|
+
"Render inside a positioned chart wrapper and pass coordinates relative to that wrapper.",
|
|
7659
|
+
"Keep labels concise enough for the single-line callout; persistent or long explanations belong outside the chart."
|
|
7660
|
+
],
|
|
7661
|
+
"frameworkCaveats": {
|
|
7662
|
+
"customElements": [
|
|
7663
|
+
"The owning chart computes coordinates and conditionally mounts the component; applications should not use it as a standalone overlay."
|
|
7664
|
+
],
|
|
7665
|
+
"react": [
|
|
7666
|
+
"Keep callout lifecycle and coordinates inside the chart wrapper rather than application-global tooltip state."
|
|
7667
|
+
],
|
|
7668
|
+
"angular": [
|
|
7669
|
+
"Keep callout lifecycle and coordinates inside the chart wrapper rather than application-global tooltip state."
|
|
7670
|
+
]
|
|
7671
|
+
},
|
|
7672
|
+
"references": [
|
|
7673
|
+
{
|
|
7674
|
+
"label": "Storybook example",
|
|
7675
|
+
"path": "src/wc/components/TooltipDataViz/TooltipDataViz.stories.ts"
|
|
7676
|
+
}
|
|
7677
|
+
]
|
|
7678
|
+
},
|
|
6959
7679
|
"api": {
|
|
6960
7680
|
"props": {
|
|
6961
7681
|
"delay": {
|