@ds-mo/ui 12.1.0 → 12.3.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 +26 -3
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +8 -7
- package/dist/agent.json +837 -66
- package/dist/angular/ds-avatar.d.ts +1 -1
- package/dist/angular/ds-avatar.js +3 -3
- package/dist/angular/ds-bar-title.d.ts +7 -1
- package/dist/angular/ds-bar-title.js +7 -4
- package/dist/angular/ds-bar-workflow.d.ts +28 -0
- package/dist/angular/ds-bar-workflow.js +48 -0
- package/dist/angular/ds-breadcrumb.d.ts +19 -0
- package/dist/angular/ds-breadcrumb.js +42 -0
- package/dist/angular/ds-card-data-viz-bar.d.ts +18 -0
- package/dist/angular/ds-card-data-viz-bar.js +42 -0
- package/dist/angular/ds-card-data-viz-line.d.ts +18 -0
- package/dist/angular/ds-card-data-viz-line.js +42 -0
- package/dist/angular/ds-chart-bar-stacked.d.ts +12 -0
- package/dist/angular/ds-chart-bar-stacked.js +38 -0
- package/dist/angular/ds-chart-legend.d.ts +1 -1
- package/dist/angular/ds-chart-legend.js +3 -3
- package/dist/angular/ds-conversation-list.d.ts +1 -1
- package/dist/angular/ds-conversation-list.js +4 -3
- package/dist/angular/ds-scroll-overlay.d.ts +19 -0
- package/dist/angular/ds-scroll-overlay.js +43 -0
- package/dist/angular/ds-shell-page.d.ts +1 -1
- package/dist/angular/ds-shell-page.js +3 -3
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +6 -0
- package/dist/angular/proxies.d.ts +6 -0
- package/dist/angular/proxies.js +6 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-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-bar-title.js +1 -1
- package/dist/components/ds-bar-title.js.map +1 -1
- package/dist/components/ds-bar-workflow.d.ts +11 -0
- package/dist/components/ds-bar-workflow.js +2 -0
- package/dist/components/ds-bar-workflow.js.map +1 -0
- package/dist/components/ds-breadcrumb.d.ts +11 -0
- package/dist/components/ds-breadcrumb.js +2 -0
- package/dist/components/ds-breadcrumb.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-bar.d.ts +11 -0
- package/dist/components/ds-card-data-viz-bar.js +2 -0
- package/dist/components/ds-card-data-viz-bar.js.map +1 -0
- package/dist/components/ds-card-data-viz-donut.js +1 -1
- package/dist/components/ds-card-data-viz-line.d.ts +11 -0
- package/dist/components/ds-card-data-viz-line.js +2 -0
- package/dist/components/ds-card-data-viz-line.js.map +1 -0
- 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-stacked.d.ts +11 -0
- package/dist/components/ds-chart-bar-stacked.js +2 -0
- package/dist/components/ds-chart-bar-stacked.js.map +1 -0
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-bar.js.map +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-chart-line.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-chip.js.map +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-section.js.map +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-conversation-list.js.map +1 -1
- package/dist/components/ds-divider.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-input.js.map +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-bubble.js.map +1 -1
- package/dist/components/ds-message-composer.js +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-panel-nav.js +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-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-radio.js.map +1 -1
- package/dist/components/ds-scroll-overlay.d.ts +11 -0
- package/dist/components/ds-scroll-overlay.js +2 -0
- package/dist/components/ds-scroll-overlay.js.map +1 -0
- package/dist/components/ds-select-multi.js +1 -1
- package/dist/components/ds-select-multi.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-page.js.map +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tab-group.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-tag.js.map +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/ds-typing-indicator.js.map +1 -1
- package/dist/components/{p-B9jvSGid.js → p-9dQQSgwT.js} +2 -2
- package/dist/components/p-B3rbhRAk.js +2 -0
- package/dist/components/p-B3rbhRAk.js.map +1 -0
- package/dist/components/{p-BWUTr_XN.js → p-BJMRBHKW.js} +2 -2
- package/dist/components/p-BJMRBHKW.js.map +1 -0
- package/dist/components/p-BVV_rlIP.js +2 -0
- package/dist/components/p-BVV_rlIP.js.map +1 -0
- package/dist/components/p-BhxwpOH8.js +2 -0
- package/dist/components/{p-DpyTrZa2.js.map → p-BhxwpOH8.js.map} +1 -1
- package/dist/components/p-Bi_bxbih.js +2 -0
- package/dist/components/{p-Dqwcw1-m.js.map → p-Bi_bxbih.js.map} +1 -1
- package/dist/components/p-BtEjlcB9.js +2 -0
- package/dist/components/{p-DABj3qTX.js.map → p-BtEjlcB9.js.map} +1 -1
- package/dist/components/{p-Bs6SS34m.js → p-BwGnhInj.js} +2 -2
- package/dist/components/p-BwGnhInj.js.map +1 -0
- package/dist/components/p-C0NPJ0h2.js +2 -0
- package/dist/components/p-C0NPJ0h2.js.map +1 -0
- package/dist/components/{p-BkwBtZs3.js → p-C7bZ-jiU.js} +2 -2
- package/dist/components/p-CH3w-P2H.js +2 -0
- package/dist/components/p-CH3w-P2H.js.map +1 -0
- package/dist/components/{p-DxeHimqk.js → p-CH6cNXXF.js} +2 -2
- package/dist/components/p-CWlh7HAg.js +2 -0
- package/dist/components/p-CWlh7HAg.js.map +1 -0
- package/dist/components/p-CY19gMiz.js +2 -0
- package/dist/components/p-CY19gMiz.js.map +1 -0
- package/dist/components/p-C_ewSXTT.js +2 -0
- package/dist/components/p-C_ewSXTT.js.map +1 -0
- package/dist/components/{p-tDXHTAJh.js → p-Ce52yVXF.js} +2 -2
- package/dist/components/p-CoYFJD-w.js +2 -0
- package/dist/components/{p-webARv8d.js.map → p-CoYFJD-w.js.map} +1 -1
- package/dist/components/{p-BzsITTZa.js → p-Cuw2Lo2g.js} +2 -2
- package/dist/components/p-CydY-v7X.js +2 -0
- package/dist/components/p-CydY-v7X.js.map +1 -0
- package/dist/components/{p-LFGbdi7Y.js → p-D-xttdpn.js} +2 -2
- package/dist/components/{p-DfIch2Dk.js → p-D3DYxbC5.js} +2 -2
- package/dist/components/{p-CR7yMitN.js → p-DC7yOUQx.js} +2 -2
- package/dist/components/{p-liMPkhUP.js → p-DSa0Hnd3.js} +2 -2
- package/dist/components/p-DXewjzkM.js +2 -0
- package/dist/components/p-DXewjzkM.js.map +1 -0
- package/dist/components/p-DYqReipj.js +2 -0
- package/dist/components/{p-Dy_sZ-dI.js.map → p-DYqReipj.js.map} +1 -1
- package/dist/components/p-DbpfpeQT.js +2 -0
- package/dist/components/p-DbpfpeQT.js.map +1 -0
- package/dist/components/{p-DszI94sZ.js → p-DjPZxzIG.js} +2 -2
- package/dist/components/{p-DszI94sZ.js.map → p-DjPZxzIG.js.map} +1 -1
- package/dist/components/{p-CTV_QWC5.js → p-J6xK6Ihq.js} +2 -2
- package/dist/components/{p-Dfxnxx7L.js → p-jCWtxthA.js} +2 -2
- package/dist/docs/components.json +2137 -743
- package/dist/lib/utils/anchored-popup.d.ts +5 -1
- package/dist/lib/utils/index.js +3 -1
- package/dist/lib/utils/index.js.map +2 -2
- package/dist/mcp/cli.js +142 -18
- package/dist/mcp-data/registry/agent-response.json +9 -4
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/avatar.json +26 -7
- package/dist/mcp-data/registry/bar-title.json +76 -37
- package/dist/mcp-data/registry/bar-workflow.json +368 -0
- package/dist/mcp-data/registry/breadcrumb.json +205 -0
- package/dist/mcp-data/registry/button-filled.json +1 -1
- package/dist/mcp-data/registry/button-unfilled.json +1 -1
- package/dist/mcp-data/registry/card-data-viz-bar.json +212 -0
- package/dist/mcp-data/registry/card-data-viz-line.json +206 -0
- package/dist/mcp-data/registry/card-shell-data-viz.json +7 -0
- package/dist/mcp-data/registry/chart-bar-stacked.json +225 -0
- package/dist/mcp-data/registry/chart-bar.json +9 -2
- package/dist/mcp-data/registry/chart-legend.json +29 -3
- package/dist/mcp-data/registry/chart-line.json +4 -2
- package/dist/mcp-data/registry/checkbox.json +1 -1
- package/dist/mcp-data/registry/conversation-list-item.json +2 -2
- package/dist/mcp-data/registry/conversation-list-section.json +2 -2
- package/dist/mcp-data/registry/conversation-list.json +36 -9
- package/dist/mcp-data/registry/markdown.json +15 -10
- package/dist/mcp-data/registry/menu.json +9 -7
- package/dist/mcp-data/registry/message-scroller.json +6 -4
- package/dist/mcp-data/registry/message.json +3 -2
- package/dist/mcp-data/registry/panel-tool-search.json +1 -1
- package/dist/mcp-data/registry/registry.json +863 -74
- package/dist/mcp-data/registry/scroll-overlay.json +183 -0
- package/dist/mcp-data/registry/shell-gradient-swatch.json +1 -1
- package/dist/mcp-data/registry/shell-page.json +40 -19
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +7 -7
- package/dist/react/components.d.ts +6 -0
- package/dist/react/components.js +6 -0
- package/dist/react/ds-bar-title.d.ts +2 -1
- package/dist/react/ds-bar-title.js +1 -0
- package/dist/react/ds-bar-workflow.d.ts +14 -0
- package/dist/react/ds-bar-workflow.js +16 -0
- package/dist/react/ds-breadcrumb.d.ts +12 -0
- package/dist/react/ds-breadcrumb.js +12 -0
- package/dist/react/ds-card-data-viz-bar.d.ts +12 -0
- package/dist/react/ds-card-data-viz-bar.js +12 -0
- package/dist/react/ds-card-data-viz-line.d.ts +12 -0
- package/dist/react/ds-card-data-viz-line.js +12 -0
- package/dist/react/ds-chart-bar-stacked.d.ts +9 -0
- package/dist/react/ds-chart-bar-stacked.js +12 -0
- package/dist/react/ds-scroll-overlay.d.ts +12 -0
- package/dist/react/ds-scroll-overlay.js +12 -0
- package/dist/styles/prose.css +215 -0
- package/dist/types/components/Avatar/Avatar.d.ts +4 -1
- package/dist/types/components/BarTitle/BarTitle.d.ts +14 -5
- package/dist/types/components/BarTitle/bar-title-types.d.ts +0 -1
- package/dist/types/components/BarWorkflow/BarWorkflow.d.ts +37 -0
- package/dist/types/components/BarWorkflow/bar-workflow-types.d.ts +12 -0
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +31 -0
- package/dist/types/components/Breadcrumb/breadcrumb-types.d.ts +17 -0
- package/dist/types/components/CardDataVizBar/CardDataVizBar.d.ts +24 -0
- package/dist/types/components/CardDataVizBar/index.d.ts +2 -0
- package/dist/types/components/CardDataVizLine/CardDataVizLine.d.ts +24 -0
- package/dist/types/components/CardDataVizLine/index.d.ts +2 -0
- package/dist/types/components/ChartBarStacked/ChartBarStacked.d.ts +15 -0
- package/dist/types/components/ChartBarStacked/index.d.ts +3 -0
- package/dist/types/components/ChartLegend/ChartLegend.d.ts +3 -0
- package/dist/types/components/ConversationList/ConversationList.d.ts +12 -0
- package/dist/types/components/Menu/Menu.d.ts +1 -2
- package/dist/types/components/MessageScroller/MessageScroller.d.ts +1 -6
- package/dist/types/components/ScrollOverlay/ScrollOverlay.d.ts +28 -0
- package/dist/types/components/ShellPage/ShellPage.d.ts +19 -7
- package/dist/types/components/ShellPage/shell-page-responsive.d.ts +0 -8
- package/dist/types/components/TypingIndicator/TypingIndicator.d.ts +1 -1
- package/dist/types/components.d.ts +572 -26
- package/dist/types/stories/isolated-overlay-docs.d.ts +13 -0
- package/dist/types/utils/anchored-popup.d.ts +5 -1
- package/dist/types/utils/scroll-overlay-controller.d.ts +35 -0
- package/package.json +4 -3
- package/dist/components/p-BWUTr_XN.js.map +0 -1
- package/dist/components/p-BfEjWe8U.js +0 -2
- package/dist/components/p-BfEjWe8U.js.map +0 -1
- package/dist/components/p-Bs6SS34m.js.map +0 -1
- package/dist/components/p-C3Zfn7hz.js +0 -2
- package/dist/components/p-C3Zfn7hz.js.map +0 -1
- package/dist/components/p-CUik7PCi.js +0 -2
- package/dist/components/p-CUik7PCi.js.map +0 -1
- package/dist/components/p-CzBnvtcz.js +0 -2
- package/dist/components/p-CzBnvtcz.js.map +0 -1
- package/dist/components/p-DABj3qTX.js +0 -2
- package/dist/components/p-DpyTrZa2.js +0 -2
- package/dist/components/p-Dqwcw1-m.js +0 -2
- package/dist/components/p-Dy3Skua8.js +0 -2
- package/dist/components/p-Dy3Skua8.js.map +0 -1
- package/dist/components/p-Dy_sZ-dI.js +0 -2
- package/dist/components/p-l6PmnW_P.js +0 -2
- package/dist/components/p-l6PmnW_P.js.map +0 -1
- package/dist/components/p-webARv8d.js +0 -2
- /package/dist/components/{p-B9jvSGid.js.map → p-9dQQSgwT.js.map} +0 -0
- /package/dist/components/{p-BkwBtZs3.js.map → p-C7bZ-jiU.js.map} +0 -0
- /package/dist/components/{p-DxeHimqk.js.map → p-CH6cNXXF.js.map} +0 -0
- /package/dist/components/{p-tDXHTAJh.js.map → p-Ce52yVXF.js.map} +0 -0
- /package/dist/components/{p-BzsITTZa.js.map → p-Cuw2Lo2g.js.map} +0 -0
- /package/dist/components/{p-LFGbdi7Y.js.map → p-D-xttdpn.js.map} +0 -0
- /package/dist/components/{p-DfIch2Dk.js.map → p-D3DYxbC5.js.map} +0 -0
- /package/dist/components/{p-CR7yMitN.js.map → p-DC7yOUQx.js.map} +0 -0
- /package/dist/components/{p-liMPkhUP.js.map → p-DSa0Hnd3.js.map} +0 -0
- /package/dist/components/{p-CTV_QWC5.js.map → p-J6xK6Ihq.js.map} +0 -0
- /package/dist/components/{p-Dfxnxx7L.js.map → p-jCWtxthA.js.map} +0 -0
|
@@ -136,15 +136,20 @@
|
|
|
136
136
|
],
|
|
137
137
|
"states": [
|
|
138
138
|
"The owner replaces immutable part arrays as scripted or live output changes.",
|
|
139
|
-
"AgentResponse renders directly in Message without borrowing a plain MessageBubble surface."
|
|
139
|
+
"AgentResponse renders directly in Message without borrowing a plain MessageBubble surface.",
|
|
140
|
+
"Markdown parts use the optional safe renderer; prose CSS owns only semantic-tree styling and never response ordering or streaming state."
|
|
140
141
|
],
|
|
141
142
|
"responsiveBehavior": [
|
|
142
|
-
"Rich content uses the available transcript width while respecting readable measure and overflow constraints."
|
|
143
|
+
"Rich content uses the available transcript width while respecting readable measure and local overflow constraints."
|
|
143
144
|
],
|
|
144
145
|
"references": [
|
|
145
146
|
{
|
|
146
|
-
"label": "
|
|
147
|
-
"path": "src/wc/components/
|
|
147
|
+
"label": "Representative streamed response",
|
|
148
|
+
"path": "src/wc/components/AgentResponse/AgentResponse.stories.ts"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"label": "Prose distribution decision",
|
|
152
|
+
"path": "docs/prose-foundation.md"
|
|
148
153
|
}
|
|
149
154
|
]
|
|
150
155
|
},
|
|
@@ -449,7 +454,7 @@
|
|
|
449
454
|
"status": "experimental",
|
|
450
455
|
"summary": "Compact icon avatar for visually identifying a person, group, channel, or conversation type.",
|
|
451
456
|
"useWhen": [
|
|
452
|
-
"A list or message composition needs a consistent
|
|
457
|
+
"A list or message composition needs a consistent circular identity marker represented by an icon at md, sm, or xs control density."
|
|
453
458
|
],
|
|
454
459
|
"avoidWhen": [
|
|
455
460
|
"The identity has a supplied photograph, initials, presence state, or editable profile behavior; those variants are not part of this primitive."
|
|
@@ -460,10 +465,11 @@
|
|
|
460
465
|
],
|
|
461
466
|
"accessibility": [
|
|
462
467
|
"Provide label only when the icon communicates meaning that surrounding text does not already convey.",
|
|
463
|
-
"Omit label when the owning row or message already provides an equivalent accessible name."
|
|
468
|
+
"Omit label when the owning row or message already provides an equivalent accessible name.",
|
|
469
|
+
"Treat primary and secondary as general icon hierarchy; an owning product may map that hierarchy to states such as unread and read, but Avatar does not own those states."
|
|
464
470
|
],
|
|
465
471
|
"responsiveBehavior": [
|
|
466
|
-
"The
|
|
472
|
+
"The selected size stays fixed across viewports: md is a 32px circle with a 20px icon, sm is 24px with 16px, and xs is 16px with 12px."
|
|
467
473
|
],
|
|
468
474
|
"references": [
|
|
469
475
|
{
|
|
@@ -484,6 +490,10 @@
|
|
|
484
490
|
"label": {
|
|
485
491
|
"type": "string | undefined",
|
|
486
492
|
"required": false
|
|
493
|
+
},
|
|
494
|
+
"size": {
|
|
495
|
+
"type": "AvatarSize",
|
|
496
|
+
"required": false
|
|
487
497
|
}
|
|
488
498
|
},
|
|
489
499
|
"events": [],
|
|
@@ -805,7 +815,7 @@
|
|
|
805
815
|
{
|
|
806
816
|
"name": "bar-title",
|
|
807
817
|
"title": "BarTitle",
|
|
808
|
-
"description": "Page-level title chrome with
|
|
818
|
+
"description": "Page-level title chrome with an optional expanded route breadcrumb, compact Back action, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
809
819
|
"type": "registry:ui",
|
|
810
820
|
"meta": {
|
|
811
821
|
"library": "@ds-mo/ui",
|
|
@@ -816,11 +826,11 @@
|
|
|
816
826
|
"intent": {
|
|
817
827
|
"audience": "general",
|
|
818
828
|
"status": "stable",
|
|
819
|
-
"summary": "Page-level title chrome with
|
|
829
|
+
"summary": "Page-level title chrome with an optional expanded route breadcrumb, compact Back action, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
820
830
|
"useWhen": [
|
|
821
831
|
"A top-level page needs one h1 above its content.",
|
|
822
832
|
"A list or detail page has multiple route-level sections that belong in the inline active-section menu.",
|
|
823
|
-
"A detail page needs
|
|
833
|
+
"A detail page needs route ancestors in expanded presentation and a page-level Back action in compact chrome.",
|
|
824
834
|
"A page needs one primary action plus optional secondary or destructive overflow commands."
|
|
825
835
|
],
|
|
826
836
|
"avoidWhen": [
|
|
@@ -831,6 +841,11 @@
|
|
|
831
841
|
"Automatic sticky or responsive page orchestration is required; compose BarTitle in ShellPage rather than implementing it in the header."
|
|
832
842
|
],
|
|
833
843
|
"alternatives": [
|
|
844
|
+
{
|
|
845
|
+
"when": "A create or edit workflow needs Exit, persistent step navigation, and a final Save or Submit action.",
|
|
846
|
+
"component": "component:ds-bar-workflow",
|
|
847
|
+
"reason": "BarWorkflow owns compact-only workflow progression rather than responsive page identity."
|
|
848
|
+
},
|
|
834
849
|
{
|
|
835
850
|
"when": "The header belongs to a PanelTools product view.",
|
|
836
851
|
"component": "component:ds-panel-tool-header",
|
|
@@ -846,6 +861,7 @@
|
|
|
846
861
|
"component:ds-shell-page",
|
|
847
862
|
"component:ds-button-filled",
|
|
848
863
|
"component:ds-button-unfilled",
|
|
864
|
+
"component:ds-breadcrumb",
|
|
849
865
|
"component:ds-menu",
|
|
850
866
|
"component:ds-text"
|
|
851
867
|
],
|
|
@@ -854,7 +870,8 @@
|
|
|
854
870
|
],
|
|
855
871
|
"accessibility": [
|
|
856
872
|
"Provide one concise heading; BarTitle renders exactly one h1 and changes only its visual recipe between variants.",
|
|
857
|
-
"Give Back a destination-specific accessible name such as Back to Drivers
|
|
873
|
+
"Give compact Back a destination-specific accessible name such as Back to Drivers and handle dsBack in the route owner.",
|
|
874
|
+
"Provide ordered breadcrumb items for deeper expanded paths and handle dsBreadcrumbSelect when native href navigation is not used; backLabel remains the single-parent expanded fallback.",
|
|
858
875
|
"Keep value synchronized with the current child route; dsSectionChange returns the selected section id.",
|
|
859
876
|
"Section and overflow triggers expose menu relationships and restore focus after selection or dismissal.",
|
|
860
877
|
"Use one filled primary action in the page decision area and mark destructive overflow actions explicitly."
|
|
@@ -863,28 +880,27 @@
|
|
|
863
880
|
"Omitting Back, sections, primaryAction, and actions produces the top-level title-only header.",
|
|
864
881
|
"Two or more selectable sections add the inline section trigger; one section does not render a redundant menu.",
|
|
865
882
|
"Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
|
|
866
|
-
"
|
|
867
|
-
"
|
|
868
|
-
"
|
|
883
|
+
"The overflow trigger uses its bordered treatment whenever the primary action is visible beside it; overflow-only and auto-collapsed-primary presentations keep the trigger borderless.",
|
|
884
|
+
"expanded renders the larger heading, optional description, inset divider, and a full-width caption breadcrumb row above the title. The breadcrumb begins after 32px top padding; the following title and right-side actions share one top alignment. Compact renders 48px chrome with the existing icon Back action; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
|
|
885
|
+
"primaryAction collapse defaults to auto. Use never for exceptional actions whose hierarchy must remain visible in constrained layouts."
|
|
869
886
|
],
|
|
870
887
|
"responsiveBehavior": [
|
|
871
888
|
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
872
889
|
"ShellPage is the standard owner for automatic expanded, compact, and constrained selection.",
|
|
873
890
|
"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.",
|
|
874
|
-
"A never-collapse
|
|
875
|
-
"Editor mode keeps Exit and Save available in every presentation. Supply a concise Exit accessible name through backAriaLabel, use backLabel for the expanded Exit label, and provide primaryAction so dsAction can identify Save."
|
|
891
|
+
"A never-collapse primary action remains visible in constrained mode; the title and section label yield space first."
|
|
876
892
|
],
|
|
877
893
|
"frameworkCaveats": {
|
|
878
894
|
"customElements": [
|
|
879
|
-
"Assign sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
880
|
-
"Handle dsBack
|
|
895
|
+
"Assign breadcrumbs, sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
896
|
+
"Handle dsBack for compact navigation and dsBreadcrumbSelect for application-owned expanded breadcrumb navigation, update value after dsSectionChange, and execute product commands from dsAction."
|
|
881
897
|
],
|
|
882
898
|
"react": [
|
|
883
|
-
"Pass
|
|
899
|
+
"Pass breadcrumb, section, and action arrays directly to DsBarTitle and keep value controlled from route state.",
|
|
884
900
|
"Place DsBarTitle in DsShellPage with slot=header when automatic page behavior is required."
|
|
885
901
|
],
|
|
886
902
|
"angular": [
|
|
887
|
-
"Bind complex values on the standalone DsBarTitle adapter and handle
|
|
903
|
+
"Bind complex values on the standalone DsBarTitle adapter and handle Back, breadcrumb, section, and action intent events in the route shell.",
|
|
888
904
|
"Place ds-bar-title in ds-shell-page with slot=header; do not render router-outlet inside BarTitle."
|
|
889
905
|
]
|
|
890
906
|
},
|
|
@@ -920,6 +936,14 @@
|
|
|
920
936
|
"type": "string",
|
|
921
937
|
"required": false
|
|
922
938
|
},
|
|
939
|
+
"breadcrumbAriaLabel": {
|
|
940
|
+
"type": "string",
|
|
941
|
+
"required": false
|
|
942
|
+
},
|
|
943
|
+
"breadcrumbs": {
|
|
944
|
+
"type": "BreadcrumbItem[]",
|
|
945
|
+
"required": false
|
|
946
|
+
},
|
|
923
947
|
"description": {
|
|
924
948
|
"type": "string",
|
|
925
949
|
"required": false
|
|
@@ -928,10 +952,6 @@
|
|
|
928
952
|
"type": "string",
|
|
929
953
|
"required": true
|
|
930
954
|
},
|
|
931
|
-
"mode": {
|
|
932
|
-
"type": "BarTitleMode",
|
|
933
|
-
"required": false
|
|
934
|
-
},
|
|
935
955
|
"primaryAction": {
|
|
936
956
|
"type": "BarTitlePrimaryAction | null",
|
|
937
957
|
"required": false
|
|
@@ -966,6 +986,10 @@
|
|
|
966
986
|
"name": "dsBack",
|
|
967
987
|
"detail": "MouseEvent"
|
|
968
988
|
},
|
|
989
|
+
{
|
|
990
|
+
"name": "dsBreadcrumbSelect",
|
|
991
|
+
"detail": "BreadcrumbSelectDetail"
|
|
992
|
+
},
|
|
969
993
|
{
|
|
970
994
|
"name": "dsSectionChange",
|
|
971
995
|
"detail": "string"
|
|
@@ -984,6 +1008,7 @@
|
|
|
984
1008
|
"@ds-mo/icons"
|
|
985
1009
|
],
|
|
986
1010
|
"registryDependencies": [
|
|
1011
|
+
"breadcrumb",
|
|
987
1012
|
"button-filled",
|
|
988
1013
|
"button-unfilled",
|
|
989
1014
|
"icon",
|
|
@@ -992,6 +1017,283 @@
|
|
|
992
1017
|
"tooltip"
|
|
993
1018
|
]
|
|
994
1019
|
},
|
|
1020
|
+
{
|
|
1021
|
+
"name": "bar-workflow",
|
|
1022
|
+
"title": "BarWorkflow",
|
|
1023
|
+
"description": "Compact bold-brand create/edit workflow chrome with Exit, controlled previous and next step navigation, and a final Save or Submit action.",
|
|
1024
|
+
"type": "registry:ui",
|
|
1025
|
+
"meta": {
|
|
1026
|
+
"library": "@ds-mo/ui",
|
|
1027
|
+
"distribution": "npm",
|
|
1028
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/bar-workflow",
|
|
1029
|
+
"source": "src/wc/components/BarWorkflow/BarWorkflow.tsx",
|
|
1030
|
+
"intentStatus": "complete",
|
|
1031
|
+
"intent": {
|
|
1032
|
+
"audience": "general",
|
|
1033
|
+
"status": "stable",
|
|
1034
|
+
"summary": "Compact bold-brand create/edit workflow chrome with Exit, controlled previous and next step navigation, and a final Save or Submit action.",
|
|
1035
|
+
"useWhen": [
|
|
1036
|
+
"A create or edit flow needs persistent page-level Exit and step navigation.",
|
|
1037
|
+
"A single-step form needs the same compact workflow chrome and final Save or Submit action.",
|
|
1038
|
+
"Next or Submit must remain visible while the application owns validation and the current step."
|
|
1039
|
+
],
|
|
1040
|
+
"avoidWhen": [
|
|
1041
|
+
"The header identifies a routed page, list, or detail view; use BarTitle instead.",
|
|
1042
|
+
"The steps must be visibly enumerated or expose progress; BarWorkflow uses steps only to resolve its navigation controls.",
|
|
1043
|
+
"The header belongs to a PanelTools drawer or fullscreen pane; use PanelToolHeader through PanelTools instead.",
|
|
1044
|
+
"The interaction is a local wizard inside page content rather than page-level workflow chrome."
|
|
1045
|
+
],
|
|
1046
|
+
"alternatives": [
|
|
1047
|
+
{
|
|
1048
|
+
"when": "A routed page needs responsive title, section, Back, and page-action presentations.",
|
|
1049
|
+
"component": "component:ds-bar-title",
|
|
1050
|
+
"reason": "BarTitle owns page identity and capacity variants rather than workflow progression."
|
|
1051
|
+
},
|
|
1052
|
+
{
|
|
1053
|
+
"when": "The workflow belongs to a tool drawer or fullscreen tool pane.",
|
|
1054
|
+
"component": "component:ds-panel-tool-header",
|
|
1055
|
+
"reason": "PanelToolHeader owns tool-pane navigation and actions within PanelTools."
|
|
1056
|
+
}
|
|
1057
|
+
],
|
|
1058
|
+
"commonlyComposedWith": [
|
|
1059
|
+
"component:ds-shell-page",
|
|
1060
|
+
"component:ds-button-filled",
|
|
1061
|
+
"component:ds-button-unfilled",
|
|
1062
|
+
"component:ds-text",
|
|
1063
|
+
"component:ds-tooltip"
|
|
1064
|
+
],
|
|
1065
|
+
"patterns": [],
|
|
1066
|
+
"accessibility": [
|
|
1067
|
+
"Provide one concise workflow heading; BarWorkflow renders exactly one h1 and appends the controlled current-step count as heading · X/N only for multi-step workflows.",
|
|
1068
|
+
"Provide a workflow-specific Exit accessible name that describes the consequence or destination.",
|
|
1069
|
+
"Give every step a stable id and concise label even though step labels are not rendered as visible progress.",
|
|
1070
|
+
"Previous is omitted on the first step; it appears from step two onward. Next remains visible on intermediate steps and becomes the final labeled Check action on the last step.",
|
|
1071
|
+
"Use submitAction.type=submit inside a form so the final action preserves native submission semantics."
|
|
1072
|
+
],
|
|
1073
|
+
"states": [
|
|
1074
|
+
"BarWorkflow always renders compact 48px bold-brand chrome and has no expanded, constrained, or responsive variant.",
|
|
1075
|
+
"An unrecognized value resolves navigation from the first step without mutating the controlled value.",
|
|
1076
|
+
"The first step omits Previous. Intermediate steps show Previous and Next. The last step replaces Next with the Check Save or Submit action.",
|
|
1077
|
+
"The default empty steps array is a single-step flow with the plain heading, no Previous control, and the final action visible. An explicit one-step array behaves the same way.",
|
|
1078
|
+
"isNextInactive blocks forward navigation while preserving the Next control; the target step's isInactive state also blocks entry.",
|
|
1079
|
+
"submitAction owns the final label, native button type, inactive state, and loading state."
|
|
1080
|
+
],
|
|
1081
|
+
"responsiveBehavior": [
|
|
1082
|
+
"BarWorkflow does not expose a presentation variant and never collapses its navigation actions.",
|
|
1083
|
+
"The heading truncates before Exit, Previous, and Next or Submit lose their complete hit targets.",
|
|
1084
|
+
"When slotted into ShellPage, BarWorkflow remains compact while ShellPage continues to provide sticky placement."
|
|
1085
|
+
],
|
|
1086
|
+
"frameworkCaveats": {
|
|
1087
|
+
"customElements": [
|
|
1088
|
+
"Assign steps and submitAction as JavaScript properties and replace their identities when controlled state changes.",
|
|
1089
|
+
"Update value after dsStepChange, handle dsExit in the workflow owner, and use dsSubmit only when product behavior supplements native form submission."
|
|
1090
|
+
],
|
|
1091
|
+
"react": [
|
|
1092
|
+
"Pass steps and submitAction directly to DsBarWorkflow and keep value controlled in the workflow route.",
|
|
1093
|
+
"Place DsBarWorkflow in DsShellPage with slot=header when sticky page placement is required."
|
|
1094
|
+
],
|
|
1095
|
+
"angular": [
|
|
1096
|
+
"Bind steps and submitAction on the standalone DsBarWorkflow adapter and update value from dsStepChange.",
|
|
1097
|
+
"Place ds-bar-workflow in ds-shell-page with slot=header and keep the form or router outlet in ShellPage content."
|
|
1098
|
+
]
|
|
1099
|
+
},
|
|
1100
|
+
"references": [
|
|
1101
|
+
{
|
|
1102
|
+
"label": "Workflow states and controlled navigation",
|
|
1103
|
+
"path": "src/wc/components/BarWorkflow/BarWorkflow.stories.ts"
|
|
1104
|
+
},
|
|
1105
|
+
{
|
|
1106
|
+
"label": "Cross-browser workflow behavior",
|
|
1107
|
+
"path": "tests/e2e/bar-workflow.spec.ts"
|
|
1108
|
+
}
|
|
1109
|
+
]
|
|
1110
|
+
},
|
|
1111
|
+
"props": {
|
|
1112
|
+
"exitAriaLabel": {
|
|
1113
|
+
"type": "string",
|
|
1114
|
+
"required": false
|
|
1115
|
+
},
|
|
1116
|
+
"exitLabel": {
|
|
1117
|
+
"type": "string",
|
|
1118
|
+
"required": false
|
|
1119
|
+
},
|
|
1120
|
+
"heading": {
|
|
1121
|
+
"type": "string",
|
|
1122
|
+
"required": true
|
|
1123
|
+
},
|
|
1124
|
+
"isNextInactive": {
|
|
1125
|
+
"type": "boolean",
|
|
1126
|
+
"required": false
|
|
1127
|
+
},
|
|
1128
|
+
"nextLabel": {
|
|
1129
|
+
"type": "string",
|
|
1130
|
+
"required": false
|
|
1131
|
+
},
|
|
1132
|
+
"previousLabel": {
|
|
1133
|
+
"type": "string",
|
|
1134
|
+
"required": false
|
|
1135
|
+
},
|
|
1136
|
+
"steps": {
|
|
1137
|
+
"type": "BarWorkflowStep[]",
|
|
1138
|
+
"required": false
|
|
1139
|
+
},
|
|
1140
|
+
"submitAction": {
|
|
1141
|
+
"type": "BarWorkflowSubmitAction",
|
|
1142
|
+
"required": false
|
|
1143
|
+
},
|
|
1144
|
+
"value": {
|
|
1145
|
+
"type": "string",
|
|
1146
|
+
"required": false
|
|
1147
|
+
}
|
|
1148
|
+
},
|
|
1149
|
+
"events": [
|
|
1150
|
+
{
|
|
1151
|
+
"name": "dsExit",
|
|
1152
|
+
"detail": "MouseEvent"
|
|
1153
|
+
},
|
|
1154
|
+
{
|
|
1155
|
+
"name": "dsStepChange",
|
|
1156
|
+
"detail": "string"
|
|
1157
|
+
},
|
|
1158
|
+
{
|
|
1159
|
+
"name": "dsSubmit",
|
|
1160
|
+
"detail": "MouseEvent"
|
|
1161
|
+
}
|
|
1162
|
+
],
|
|
1163
|
+
"slots": [],
|
|
1164
|
+
"exports": {
|
|
1165
|
+
"customElement": "ds-bar-workflow",
|
|
1166
|
+
"react": "DsBarWorkflow",
|
|
1167
|
+
"angular": "DsBarWorkflow"
|
|
1168
|
+
}
|
|
1169
|
+
},
|
|
1170
|
+
"dependencies": [
|
|
1171
|
+
"@ds-mo/ui",
|
|
1172
|
+
"@ds-mo/tokens"
|
|
1173
|
+
],
|
|
1174
|
+
"registryDependencies": [
|
|
1175
|
+
"button-filled",
|
|
1176
|
+
"button-unfilled",
|
|
1177
|
+
"text",
|
|
1178
|
+
"tooltip"
|
|
1179
|
+
]
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
"name": "breadcrumb",
|
|
1183
|
+
"title": "Breadcrumb",
|
|
1184
|
+
"description": "Compact hierarchical page navigation with native links or application-owned selection, optional current-page semantics, and slash separators.",
|
|
1185
|
+
"type": "registry:ui",
|
|
1186
|
+
"meta": {
|
|
1187
|
+
"library": "@ds-mo/ui",
|
|
1188
|
+
"distribution": "npm",
|
|
1189
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/breadcrumb",
|
|
1190
|
+
"source": "src/wc/components/Breadcrumb/Breadcrumb.tsx",
|
|
1191
|
+
"intentStatus": "complete",
|
|
1192
|
+
"intent": {
|
|
1193
|
+
"audience": "general",
|
|
1194
|
+
"status": "stable",
|
|
1195
|
+
"summary": "Compact hierarchical page navigation with native links or application-owned selection, optional current-page semantics, and slash separators.",
|
|
1196
|
+
"useWhen": [
|
|
1197
|
+
"A page needs to expose its hierarchical ancestors above the current page title.",
|
|
1198
|
+
"Users need to move directly to a broader page in the current route hierarchy.",
|
|
1199
|
+
"BarTitle expanded presentation needs an ancestor path instead of a directional Back button."
|
|
1200
|
+
],
|
|
1201
|
+
"avoidWhen": [
|
|
1202
|
+
"The navigation represents primary application destinations; use PanelNav or BarNav.",
|
|
1203
|
+
"The choices switch peer views within the current page; use TabGroup or the BarTitle section selector.",
|
|
1204
|
+
"Only a directional return command is needed in compact chrome; use the owning header's Back action.",
|
|
1205
|
+
"The path would repeat the same current-page label already communicated by a nearby h1 without adding useful ancestors."
|
|
1206
|
+
],
|
|
1207
|
+
"alternatives": [
|
|
1208
|
+
{
|
|
1209
|
+
"when": "The title and breadcrumb belong to responsive page chrome with page-level actions.",
|
|
1210
|
+
"component": "component:ds-bar-title",
|
|
1211
|
+
"reason": "BarTitle composes Breadcrumb in expanded mode and preserves compact Back behavior."
|
|
1212
|
+
},
|
|
1213
|
+
{
|
|
1214
|
+
"when": "A small set of peer content views should remain directly selectable.",
|
|
1215
|
+
"component": "component:ds-tab-group",
|
|
1216
|
+
"reason": "TabGroup communicates peer selection rather than route ancestry."
|
|
1217
|
+
}
|
|
1218
|
+
],
|
|
1219
|
+
"commonlyComposedWith": [
|
|
1220
|
+
"component:ds-bar-title",
|
|
1221
|
+
"component:ds-text",
|
|
1222
|
+
"component:ds-shell-page"
|
|
1223
|
+
],
|
|
1224
|
+
"accessibility": [
|
|
1225
|
+
"The component renders a named navigation landmark containing an ordered list.",
|
|
1226
|
+
"Provide href for native navigation or handle dsSelect when the application router owns navigation.",
|
|
1227
|
+
"Mark at most one item current; it renders without interaction and exposes aria-current=page.",
|
|
1228
|
+
"Visible caption labels use secondary foreground and slash separators are decorative and hidden from assistive technology.",
|
|
1229
|
+
"Every interactive item remains keyboard reachable and receives the shared focus ring."
|
|
1230
|
+
],
|
|
1231
|
+
"states": [
|
|
1232
|
+
"Items with href render native anchors; items without href render buttons and emit the same dsSelect detail.",
|
|
1233
|
+
"Preventing dsSelect cancels native anchor navigation.",
|
|
1234
|
+
"A current item is static text and never emits selection.",
|
|
1235
|
+
"Links have no resting underline and add a quaternary-foreground solid underline on hover; focus remains communicated by the shared focus ring."
|
|
1236
|
+
],
|
|
1237
|
+
"responsiveBehavior": [
|
|
1238
|
+
"The path stays on one caption line and truncates long labels within the available width.",
|
|
1239
|
+
"Width is protected newest-to-oldest: the oldest ancestor collapses to a literal ellipsis before the next ancestor yields width, and the current location truncates only after every ancestor reaches its minimum.",
|
|
1240
|
+
"A fully collapsed item keeps its complete label available to assistive technology while rendering only the literal ellipsis visually.",
|
|
1241
|
+
"Separators remain visible while labels yield width."
|
|
1242
|
+
],
|
|
1243
|
+
"frameworkCaveats": {
|
|
1244
|
+
"customElements": [
|
|
1245
|
+
"Assign items as a JavaScript property and replace its array identity when the route changes.",
|
|
1246
|
+
"Use relative or absolute href values for native navigation; omit href when the host router handles dsSelect."
|
|
1247
|
+
],
|
|
1248
|
+
"react": [
|
|
1249
|
+
"Pass items to DsBreadcrumb and handle onDsSelect when navigation is application-owned."
|
|
1250
|
+
],
|
|
1251
|
+
"angular": [
|
|
1252
|
+
"Bind items on the standalone DsBreadcrumb adapter and handle dsSelect when navigation is application-owned."
|
|
1253
|
+
]
|
|
1254
|
+
},
|
|
1255
|
+
"references": [
|
|
1256
|
+
{
|
|
1257
|
+
"label": "Storybook examples",
|
|
1258
|
+
"path": "src/wc/components/Breadcrumb/Breadcrumb.stories.ts"
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"label": "Expanded page-header composition",
|
|
1262
|
+
"path": "src/wc/components/BarTitle/BarTitle.tsx"
|
|
1263
|
+
}
|
|
1264
|
+
]
|
|
1265
|
+
},
|
|
1266
|
+
"props": {
|
|
1267
|
+
"ariaLabel": {
|
|
1268
|
+
"type": "string",
|
|
1269
|
+
"required": false
|
|
1270
|
+
},
|
|
1271
|
+
"items": {
|
|
1272
|
+
"type": "BreadcrumbItem[]",
|
|
1273
|
+
"required": false
|
|
1274
|
+
}
|
|
1275
|
+
},
|
|
1276
|
+
"events": [
|
|
1277
|
+
{
|
|
1278
|
+
"name": "dsSelect",
|
|
1279
|
+
"detail": "BreadcrumbSelectDetail"
|
|
1280
|
+
}
|
|
1281
|
+
],
|
|
1282
|
+
"slots": [],
|
|
1283
|
+
"exports": {
|
|
1284
|
+
"customElement": "ds-breadcrumb",
|
|
1285
|
+
"react": "DsBreadcrumb",
|
|
1286
|
+
"angular": "DsBreadcrumb"
|
|
1287
|
+
}
|
|
1288
|
+
},
|
|
1289
|
+
"dependencies": [
|
|
1290
|
+
"@ds-mo/ui",
|
|
1291
|
+
"@ds-mo/tokens"
|
|
1292
|
+
],
|
|
1293
|
+
"registryDependencies": [
|
|
1294
|
+
"text"
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
995
1297
|
{
|
|
996
1298
|
"name": "button-filled",
|
|
997
1299
|
"title": "ButtonFilled",
|
|
@@ -1340,21 +1642,138 @@
|
|
|
1340
1642
|
],
|
|
1341
1643
|
"slots": [],
|
|
1342
1644
|
"exports": {
|
|
1343
|
-
"customElement": "ds-button-unfilled",
|
|
1344
|
-
"react": "DsButtonUnfilled",
|
|
1345
|
-
"angular": "DsButtonUnfilled"
|
|
1645
|
+
"customElement": "ds-button-unfilled",
|
|
1646
|
+
"react": "DsButtonUnfilled",
|
|
1647
|
+
"angular": "DsButtonUnfilled"
|
|
1648
|
+
}
|
|
1649
|
+
},
|
|
1650
|
+
"dependencies": [
|
|
1651
|
+
"@ds-mo/ui",
|
|
1652
|
+
"@ds-mo/tokens",
|
|
1653
|
+
"@ds-mo/icons"
|
|
1654
|
+
],
|
|
1655
|
+
"registryDependencies": [
|
|
1656
|
+
"badge",
|
|
1657
|
+
"icon",
|
|
1658
|
+
"loader",
|
|
1659
|
+
"text"
|
|
1660
|
+
]
|
|
1661
|
+
},
|
|
1662
|
+
{
|
|
1663
|
+
"name": "card-data-viz-bar",
|
|
1664
|
+
"title": "CardDataVizBar",
|
|
1665
|
+
"description": "Canonical bar-chart dashboard card with shared data-viz chrome, a filter action, a fill chart region, and an optional static legend.",
|
|
1666
|
+
"type": "registry:ui",
|
|
1667
|
+
"meta": {
|
|
1668
|
+
"library": "@ds-mo/ui",
|
|
1669
|
+
"distribution": "npm",
|
|
1670
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz-bar",
|
|
1671
|
+
"source": "src/wc/components/CardDataVizBar/CardDataVizBar.tsx",
|
|
1672
|
+
"intentStatus": "complete",
|
|
1673
|
+
"intent": {
|
|
1674
|
+
"audience": "specialized",
|
|
1675
|
+
"status": "experimental",
|
|
1676
|
+
"summary": "Canonical bar-chart dashboard card with shared data-viz chrome, a filter action, a fill chart region, and an optional static legend.",
|
|
1677
|
+
"useWhen": [
|
|
1678
|
+
"A dashboard widget needs a regular, stacked, or percentage bar chart in the standard data-viz card.",
|
|
1679
|
+
"A stacked bar chart needs a visible static series key beneath the chart."
|
|
1680
|
+
],
|
|
1681
|
+
"avoidWhen": [
|
|
1682
|
+
"The visualization needs selectable legend rows or chart-to-legend hover synchronization.",
|
|
1683
|
+
"The product needs supporting metrics or an alternate chart layout beyond the chart and optional legend."
|
|
1684
|
+
],
|
|
1685
|
+
"alternatives": [
|
|
1686
|
+
{
|
|
1687
|
+
"when": "The bar chart needs a custom layout without card chrome.",
|
|
1688
|
+
"component": "component:ds-chart-bar",
|
|
1689
|
+
"reason": "Compose ChartBar directly in the product-owned layout."
|
|
1690
|
+
},
|
|
1691
|
+
{
|
|
1692
|
+
"when": "The visualization communicates change as continuous lines.",
|
|
1693
|
+
"component": "component:ds-card-data-viz-line",
|
|
1694
|
+
"reason": "CardDataVizLine owns the canonical line-chart card layout."
|
|
1695
|
+
},
|
|
1696
|
+
{
|
|
1697
|
+
"when": "The visualization communicates parts of one total with synchronized slice emphasis.",
|
|
1698
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1699
|
+
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1700
|
+
}
|
|
1701
|
+
],
|
|
1702
|
+
"commonlyComposedWith": [
|
|
1703
|
+
"component:ds-card-shell-data-viz",
|
|
1704
|
+
"component:ds-chart-bar",
|
|
1705
|
+
"component:ds-chart-bar-stacked",
|
|
1706
|
+
"component:ds-chart-legend",
|
|
1707
|
+
"component:ds-button-unfilled"
|
|
1708
|
+
],
|
|
1709
|
+
"accessibility": [
|
|
1710
|
+
"Provide a concise heading that identifies the measure and meaningful visible labels for every legend entry.",
|
|
1711
|
+
"Keep essential series and value context available textually rather than relying on bar color alone.",
|
|
1712
|
+
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1713
|
+
],
|
|
1714
|
+
"states": [
|
|
1715
|
+
"The chart region fills the remaining card body while an optional legend remains content-sized.",
|
|
1716
|
+
"The card disables local hover highlighting on a slotted ChartLegend because bar legends are static keys.",
|
|
1717
|
+
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1718
|
+
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1719
|
+
],
|
|
1720
|
+
"responsiveBehavior": [
|
|
1721
|
+
"The selected sm, md, or lg shell size controls the card dimensions while the bar chart shrinks within its chart region.",
|
|
1722
|
+
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1723
|
+
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1724
|
+
],
|
|
1725
|
+
"frameworkCaveats": {
|
|
1726
|
+
"customElements": [
|
|
1727
|
+
"Assign data or series and categories as JavaScript properties, then place the bar chart and optional legend in their named slots."
|
|
1728
|
+
],
|
|
1729
|
+
"react": [
|
|
1730
|
+
"Keep filter and dataset state in the owner; pass the chart and optional legend with chart and legend slot attributes."
|
|
1731
|
+
],
|
|
1732
|
+
"angular": [
|
|
1733
|
+
"Keep filter and dataset state in the owner; project the chart and optional legend into the chart and legend slots."
|
|
1734
|
+
]
|
|
1735
|
+
},
|
|
1736
|
+
"references": [
|
|
1737
|
+
{
|
|
1738
|
+
"label": "Storybook examples",
|
|
1739
|
+
"path": "src/wc/components/CardDataVizBar/CardDataVizBar.stories.ts"
|
|
1740
|
+
}
|
|
1741
|
+
]
|
|
1742
|
+
},
|
|
1743
|
+
"props": {
|
|
1744
|
+
"cardWidth": {
|
|
1745
|
+
"type": "CardDataVizBarWidth",
|
|
1746
|
+
"required": false
|
|
1747
|
+
},
|
|
1748
|
+
"filterLabel": {
|
|
1749
|
+
"type": "string",
|
|
1750
|
+
"required": false
|
|
1751
|
+
},
|
|
1752
|
+
"heading": {
|
|
1753
|
+
"type": "string",
|
|
1754
|
+
"required": true
|
|
1755
|
+
}
|
|
1756
|
+
},
|
|
1757
|
+
"events": [
|
|
1758
|
+
{
|
|
1759
|
+
"name": "dsFilterClick",
|
|
1760
|
+
"detail": "void"
|
|
1761
|
+
}
|
|
1762
|
+
],
|
|
1763
|
+
"slots": [],
|
|
1764
|
+
"exports": {
|
|
1765
|
+
"customElement": "ds-card-data-viz-bar",
|
|
1766
|
+
"react": "DsCardDataVizBar",
|
|
1767
|
+
"angular": "DsCardDataVizBar"
|
|
1346
1768
|
}
|
|
1347
1769
|
},
|
|
1348
1770
|
"dependencies": [
|
|
1349
1771
|
"@ds-mo/ui",
|
|
1350
|
-
"@ds-mo/tokens"
|
|
1351
|
-
"@ds-mo/icons"
|
|
1772
|
+
"@ds-mo/tokens"
|
|
1352
1773
|
],
|
|
1353
1774
|
"registryDependencies": [
|
|
1354
|
-
"
|
|
1355
|
-
"
|
|
1356
|
-
"loader",
|
|
1357
|
-
"text"
|
|
1775
|
+
"button-unfilled",
|
|
1776
|
+
"card-shell-data-viz"
|
|
1358
1777
|
]
|
|
1359
1778
|
},
|
|
1360
1779
|
{
|
|
@@ -1474,6 +1893,117 @@
|
|
|
1474
1893
|
"card-shell-data-viz"
|
|
1475
1894
|
]
|
|
1476
1895
|
},
|
|
1896
|
+
{
|
|
1897
|
+
"name": "card-data-viz-line",
|
|
1898
|
+
"title": "CardDataVizLine",
|
|
1899
|
+
"description": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1900
|
+
"type": "registry:ui",
|
|
1901
|
+
"meta": {
|
|
1902
|
+
"library": "@ds-mo/ui",
|
|
1903
|
+
"distribution": "npm",
|
|
1904
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz-line",
|
|
1905
|
+
"source": "src/wc/components/CardDataVizLine/CardDataVizLine.tsx",
|
|
1906
|
+
"intentStatus": "complete",
|
|
1907
|
+
"intent": {
|
|
1908
|
+
"audience": "specialized",
|
|
1909
|
+
"status": "experimental",
|
|
1910
|
+
"summary": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1911
|
+
"useWhen": [
|
|
1912
|
+
"A dashboard widget needs the standard line chart and visible series key in one data-viz card.",
|
|
1913
|
+
"The legend identifies static line series and should not highlight or dim rows on hover."
|
|
1914
|
+
],
|
|
1915
|
+
"avoidWhen": [
|
|
1916
|
+
"The visualization needs chart-to-legend hover synchronization or selectable series controls.",
|
|
1917
|
+
"The product needs a custom legend treatment, supporting metrics, or an alternate chart layout."
|
|
1918
|
+
],
|
|
1919
|
+
"alternatives": [
|
|
1920
|
+
{
|
|
1921
|
+
"when": "The line chart and legend need a custom layout without card chrome.",
|
|
1922
|
+
"component": "component:ds-chart-line",
|
|
1923
|
+
"reason": "Compose ChartLine and a static ChartLegend directly in the product-owned layout."
|
|
1924
|
+
},
|
|
1925
|
+
{
|
|
1926
|
+
"when": "The visualization communicates parts of a total with synchronized slice emphasis.",
|
|
1927
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1928
|
+
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1929
|
+
}
|
|
1930
|
+
],
|
|
1931
|
+
"commonlyComposedWith": [
|
|
1932
|
+
"component:ds-card-shell-data-viz",
|
|
1933
|
+
"component:ds-chart-line",
|
|
1934
|
+
"component:ds-chart-legend",
|
|
1935
|
+
"component:ds-button-unfilled"
|
|
1936
|
+
],
|
|
1937
|
+
"accessibility": [
|
|
1938
|
+
"Provide a concise heading that identifies the trend and meaningful visible labels for every legend entry.",
|
|
1939
|
+
"Keep essential series and value context available textually rather than relying on line color alone.",
|
|
1940
|
+
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1941
|
+
],
|
|
1942
|
+
"states": [
|
|
1943
|
+
"The chart region fills the remaining card body while the legend remains content-sized.",
|
|
1944
|
+
"The card disables local hover highlighting on a slotted ChartLegend because the line chart is static.",
|
|
1945
|
+
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1946
|
+
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1947
|
+
],
|
|
1948
|
+
"responsiveBehavior": [
|
|
1949
|
+
"The selected sm, md, or lg shell size controls the card dimensions while the line chart shrinks within its chart region.",
|
|
1950
|
+
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1951
|
+
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1952
|
+
],
|
|
1953
|
+
"frameworkCaveats": {
|
|
1954
|
+
"customElements": [
|
|
1955
|
+
"Assign series, categories, and legend items as JavaScript properties, then place the chart and legend in their named slots."
|
|
1956
|
+
],
|
|
1957
|
+
"react": [
|
|
1958
|
+
"Keep filter and dataset state in the owner; pass the chart and legend with chart and legend slot attributes."
|
|
1959
|
+
],
|
|
1960
|
+
"angular": [
|
|
1961
|
+
"Keep filter and dataset state in the owner; project the chart and legend into the chart and legend slots."
|
|
1962
|
+
]
|
|
1963
|
+
},
|
|
1964
|
+
"references": [
|
|
1965
|
+
{
|
|
1966
|
+
"label": "Storybook examples",
|
|
1967
|
+
"path": "src/wc/components/CardDataVizLine/CardDataVizLine.stories.ts"
|
|
1968
|
+
}
|
|
1969
|
+
]
|
|
1970
|
+
},
|
|
1971
|
+
"props": {
|
|
1972
|
+
"cardWidth": {
|
|
1973
|
+
"type": "CardDataVizLineWidth",
|
|
1974
|
+
"required": false
|
|
1975
|
+
},
|
|
1976
|
+
"filterLabel": {
|
|
1977
|
+
"type": "string",
|
|
1978
|
+
"required": false
|
|
1979
|
+
},
|
|
1980
|
+
"heading": {
|
|
1981
|
+
"type": "string",
|
|
1982
|
+
"required": true
|
|
1983
|
+
}
|
|
1984
|
+
},
|
|
1985
|
+
"events": [
|
|
1986
|
+
{
|
|
1987
|
+
"name": "dsFilterClick",
|
|
1988
|
+
"detail": "void"
|
|
1989
|
+
}
|
|
1990
|
+
],
|
|
1991
|
+
"slots": [],
|
|
1992
|
+
"exports": {
|
|
1993
|
+
"customElement": "ds-card-data-viz-line",
|
|
1994
|
+
"react": "DsCardDataVizLine",
|
|
1995
|
+
"angular": "DsCardDataVizLine"
|
|
1996
|
+
}
|
|
1997
|
+
},
|
|
1998
|
+
"dependencies": [
|
|
1999
|
+
"@ds-mo/ui",
|
|
2000
|
+
"@ds-mo/tokens"
|
|
2001
|
+
],
|
|
2002
|
+
"registryDependencies": [
|
|
2003
|
+
"button-unfilled",
|
|
2004
|
+
"card-shell-data-viz"
|
|
2005
|
+
]
|
|
2006
|
+
},
|
|
1477
2007
|
{
|
|
1478
2008
|
"name": "card-setting",
|
|
1479
2009
|
"title": "CardSetting",
|
|
@@ -1656,13 +2186,20 @@
|
|
|
1656
2186
|
"when": "The composition is the standard donut chart plus synchronized legend.",
|
|
1657
2187
|
"component": "component:ds-card-data-viz-donut",
|
|
1658
2188
|
"reason": "CardDataVizDonut composes this shell with donut-specific regions and hover synchronization."
|
|
2189
|
+
},
|
|
2190
|
+
{
|
|
2191
|
+
"when": "The composition is the standard line chart plus static horizontal legend.",
|
|
2192
|
+
"component": "component:ds-card-data-viz-line",
|
|
2193
|
+
"reason": "CardDataVizLine composes this shell with line-specific regions and disables decorative legend hover."
|
|
1659
2194
|
}
|
|
1660
2195
|
],
|
|
1661
2196
|
"commonlyComposedWith": [
|
|
1662
2197
|
"component:ds-chart-bar",
|
|
2198
|
+
"component:ds-chart-bar-stacked",
|
|
1663
2199
|
"component:ds-chart-donut",
|
|
1664
2200
|
"component:ds-chart-line",
|
|
1665
2201
|
"component:ds-chart-legend",
|
|
2202
|
+
"component:ds-card-data-viz-line",
|
|
1666
2203
|
"component:ds-button-unfilled"
|
|
1667
2204
|
],
|
|
1668
2205
|
"accessibility": [
|
|
@@ -1751,6 +2288,11 @@
|
|
|
1751
2288
|
"The data communicates a part-to-whole relationship."
|
|
1752
2289
|
],
|
|
1753
2290
|
"alternatives": [
|
|
2291
|
+
{
|
|
2292
|
+
"when": "Each category contains several additive series or needs normalized composition.",
|
|
2293
|
+
"component": "component:ds-chart-bar-stacked",
|
|
2294
|
+
"reason": "ChartBarStacked compares raw stacked totals or normalized 0–100% composition."
|
|
2295
|
+
},
|
|
1754
2296
|
{
|
|
1755
2297
|
"when": "Users need to follow one or more trends across ordered categories.",
|
|
1756
2298
|
"component": "component:ds-chart-line",
|
|
@@ -1763,6 +2305,7 @@
|
|
|
1763
2305
|
}
|
|
1764
2306
|
],
|
|
1765
2307
|
"commonlyComposedWith": [
|
|
2308
|
+
"component:ds-chart-bar-stacked",
|
|
1766
2309
|
"component:ds-card-shell-data-viz",
|
|
1767
2310
|
"component:ds-tooltip-data-viz"
|
|
1768
2311
|
],
|
|
@@ -1774,6 +2317,7 @@
|
|
|
1774
2317
|
"states": [
|
|
1775
2318
|
"The chart is currently a static single-series rendering without hover, selection, loading, or empty-state policy.",
|
|
1776
2319
|
"An empty dataset renders no bars; the owning card or product supplies meaningful empty-state messaging.",
|
|
2320
|
+
"Bars use 2px top corner radii while the lower corners touching the zero axis remain square.",
|
|
1777
2321
|
"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.",
|
|
1778
2322
|
"Authored datum colors override the shared categorical palette."
|
|
1779
2323
|
],
|
|
@@ -1828,6 +2372,126 @@
|
|
|
1828
2372
|
],
|
|
1829
2373
|
"registryDependencies": []
|
|
1830
2374
|
},
|
|
2375
|
+
{
|
|
2376
|
+
"name": "chart-bar-stacked",
|
|
2377
|
+
"title": "ChartBarStacked",
|
|
2378
|
+
"description": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2379
|
+
"type": "registry:ui",
|
|
2380
|
+
"meta": {
|
|
2381
|
+
"library": "@ds-mo/ui",
|
|
2382
|
+
"distribution": "npm",
|
|
2383
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/chart-bar-stacked",
|
|
2384
|
+
"source": "src/wc/components/ChartBarStacked/ChartBarStacked.tsx",
|
|
2385
|
+
"intentStatus": "complete",
|
|
2386
|
+
"intent": {
|
|
2387
|
+
"audience": "specialized",
|
|
2388
|
+
"status": "experimental",
|
|
2389
|
+
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2390
|
+
"useWhen": [
|
|
2391
|
+
"Users need to compare both a category total and the contribution of several consistent series.",
|
|
2392
|
+
"A time series needs to show how its composition changes across equal time buckets.",
|
|
2393
|
+
"Every category should normalize to 100% so proportional composition can be compared independently of total magnitude."
|
|
2394
|
+
],
|
|
2395
|
+
"avoidWhen": [
|
|
2396
|
+
"Users need to compare individual series values precisely across categories; use grouped bars or separate charts.",
|
|
2397
|
+
"The visualization has only one measure per category; use ChartBar.",
|
|
2398
|
+
"The primary task is following continuous trends; use ChartLine.",
|
|
2399
|
+
"Series contain negative values or do not align with the shared category list."
|
|
2400
|
+
],
|
|
2401
|
+
"alternatives": [
|
|
2402
|
+
{
|
|
2403
|
+
"when": "Each category contains one independent value.",
|
|
2404
|
+
"component": "component:ds-chart-bar",
|
|
2405
|
+
"reason": "ChartBar provides the simpler single-series magnitude comparison."
|
|
2406
|
+
},
|
|
2407
|
+
{
|
|
2408
|
+
"when": "Users need to follow one or more trends rather than compare stack composition.",
|
|
2409
|
+
"component": "component:ds-chart-line",
|
|
2410
|
+
"reason": "ChartLine preserves each series as a continuous path across the ordered axis."
|
|
2411
|
+
},
|
|
2412
|
+
{
|
|
2413
|
+
"when": "One category's parts-to-whole composition is the focus.",
|
|
2414
|
+
"component": "component:ds-chart-donut",
|
|
2415
|
+
"reason": "ChartDonut provides the dedicated single-total composition treatment."
|
|
2416
|
+
}
|
|
2417
|
+
],
|
|
2418
|
+
"commonlyComposedWith": [
|
|
2419
|
+
"component:ds-chart-legend",
|
|
2420
|
+
"component:ds-card-shell-data-viz",
|
|
2421
|
+
"component:ds-tooltip-data-viz"
|
|
2422
|
+
],
|
|
2423
|
+
"accessibility": [
|
|
2424
|
+
"Provide a visible legend or adjacent textual summary that names every series; do not rely on segment color alone.",
|
|
2425
|
+
"The chart image name includes each category and series value, using normalized percentages in percentage mode.",
|
|
2426
|
+
"Use an adjacent data table when exact cross-category comparisons are necessary to complete the task."
|
|
2427
|
+
],
|
|
2428
|
+
"states": [
|
|
2429
|
+
"Stacked mode preserves raw magnitudes and scales the y-axis to the largest category total.",
|
|
2430
|
+
"Percentage mode normalizes each non-empty category independently and renders a fixed 0%, 25%, 50%, 75%, and 100% axis.",
|
|
2431
|
+
"Series render bottom-to-top in authored order; keep that order and color mapping stable across categories.",
|
|
2432
|
+
"Stacked mode gives only the top visible segment 2px top corners. Percentage mode keeps every corner square because the normalized stack touches both axis edges.",
|
|
2433
|
+
"Adjacent segments are separated by a non-scaling 1px gap; the stack's outer edges do not receive that separator.",
|
|
2434
|
+
"Negative values are unsupported and render as zero; the owning product supplies loading, empty, and error states."
|
|
2435
|
+
],
|
|
2436
|
+
"responsiveBehavior": [
|
|
2437
|
+
"The SVG preserves its authored aspect ratio while shrinking to fit a narrower parent.",
|
|
2438
|
+
"The parent supplies dimensions and chooses how many time buckets remain legible at each width.",
|
|
2439
|
+
"Pre-format category labels and reduce bucket count before rendering when horizontal space becomes constrained."
|
|
2440
|
+
],
|
|
2441
|
+
"frameworkCaveats": {
|
|
2442
|
+
"customElements": [
|
|
2443
|
+
"Assign series and categories as JavaScript properties and keep every series aligned to the category count."
|
|
2444
|
+
],
|
|
2445
|
+
"react": [
|
|
2446
|
+
"Pass stable series and category arrays; choose percentage variant only when each category represents a meaningful whole."
|
|
2447
|
+
],
|
|
2448
|
+
"angular": [
|
|
2449
|
+
"Bind series and categories as properties; choose percentage variant only when each category represents a meaningful whole."
|
|
2450
|
+
]
|
|
2451
|
+
},
|
|
2452
|
+
"references": [
|
|
2453
|
+
{
|
|
2454
|
+
"label": "Storybook examples",
|
|
2455
|
+
"path": "src/wc/components/ChartBarStacked/ChartBarStacked.stories.ts"
|
|
2456
|
+
}
|
|
2457
|
+
]
|
|
2458
|
+
},
|
|
2459
|
+
"props": {
|
|
2460
|
+
"categories": {
|
|
2461
|
+
"type": "string[]",
|
|
2462
|
+
"required": false
|
|
2463
|
+
},
|
|
2464
|
+
"height": {
|
|
2465
|
+
"type": "number",
|
|
2466
|
+
"required": false
|
|
2467
|
+
},
|
|
2468
|
+
"series": {
|
|
2469
|
+
"type": "ChartSeries[]",
|
|
2470
|
+
"required": false
|
|
2471
|
+
},
|
|
2472
|
+
"variant": {
|
|
2473
|
+
"type": "ChartBarStackedVariant",
|
|
2474
|
+
"required": false
|
|
2475
|
+
},
|
|
2476
|
+
"width": {
|
|
2477
|
+
"type": "number",
|
|
2478
|
+
"required": false
|
|
2479
|
+
}
|
|
2480
|
+
},
|
|
2481
|
+
"events": [],
|
|
2482
|
+
"slots": [],
|
|
2483
|
+
"exports": {
|
|
2484
|
+
"customElement": "ds-chart-bar-stacked",
|
|
2485
|
+
"react": "DsChartBarStacked",
|
|
2486
|
+
"angular": "DsChartBarStacked"
|
|
2487
|
+
}
|
|
2488
|
+
},
|
|
2489
|
+
"dependencies": [
|
|
2490
|
+
"@ds-mo/ui",
|
|
2491
|
+
"@ds-mo/tokens"
|
|
2492
|
+
],
|
|
2493
|
+
"registryDependencies": []
|
|
2494
|
+
},
|
|
1831
2495
|
{
|
|
1832
2496
|
"name": "chart-donut",
|
|
1833
2497
|
"title": "ChartDonut",
|
|
@@ -2008,12 +2672,19 @@
|
|
|
2008
2672
|
"when": "The donut belongs in the canonical dashboard card.",
|
|
2009
2673
|
"component": "component:ds-card-data-viz-donut",
|
|
2010
2674
|
"reason": "The dedicated card places the legend and handles bidirectional highlight synchronization."
|
|
2675
|
+
},
|
|
2676
|
+
{
|
|
2677
|
+
"when": "A static line chart and series key belong in the canonical dashboard card.",
|
|
2678
|
+
"component": "component:ds-card-data-viz-line",
|
|
2679
|
+
"reason": "The dedicated card places the horizontal legend and disables decorative local hover highlighting."
|
|
2011
2680
|
}
|
|
2012
2681
|
],
|
|
2013
2682
|
"commonlyComposedWith": [
|
|
2014
2683
|
"component:ds-chart-donut",
|
|
2684
|
+
"component:ds-chart-bar-stacked",
|
|
2015
2685
|
"component:ds-chart-line",
|
|
2016
2686
|
"component:ds-card-data-viz-donut",
|
|
2687
|
+
"component:ds-card-data-viz-line",
|
|
2017
2688
|
"component:ds-card-shell-data-viz"
|
|
2018
2689
|
],
|
|
2019
2690
|
"accessibility": [
|
|
@@ -2023,7 +2694,8 @@
|
|
|
2023
2694
|
"Do not rely on swatch color alone; every entry requires a meaningful visible label."
|
|
2024
2695
|
],
|
|
2025
2696
|
"states": [
|
|
2026
|
-
"Local pointer or focus interaction and external chart highlight remain separate; both may dim peers, but only a real link row receives
|
|
2697
|
+
"Local pointer or focus interaction and external chart highlight remain separate; both may dim peers, but only a real link row receives navigation affordances.",
|
|
2698
|
+
"Disable local hover highlighting for static keys such as a line-chart legend; externally controlled activeLabel highlighting and genuine link affordances remain available.",
|
|
2027
2699
|
"Hover synchronization is temporary emphasis, never filtering, toggling, or selected state.",
|
|
2028
2700
|
"Percentage values use one consistent precision across the complete legend.",
|
|
2029
2701
|
"The list owns pointer leave so moving across row gaps does not clear and reapply highlight."
|
|
@@ -2064,6 +2736,10 @@
|
|
|
2064
2736
|
"type": "ChartLegendDirection",
|
|
2065
2737
|
"required": false
|
|
2066
2738
|
},
|
|
2739
|
+
"highlightOnHover": {
|
|
2740
|
+
"type": "boolean",
|
|
2741
|
+
"required": false
|
|
2742
|
+
},
|
|
2067
2743
|
"items": {
|
|
2068
2744
|
"type": "ChartLegendItem[]",
|
|
2069
2745
|
"required": false
|
|
@@ -2146,6 +2822,7 @@
|
|
|
2146
2822
|
],
|
|
2147
2823
|
"commonlyComposedWith": [
|
|
2148
2824
|
"component:ds-chart-legend",
|
|
2825
|
+
"component:ds-card-data-viz-line",
|
|
2149
2826
|
"component:ds-card-shell-data-viz",
|
|
2150
2827
|
"component:ds-tooltip-data-viz"
|
|
2151
2828
|
],
|
|
@@ -2156,11 +2833,12 @@
|
|
|
2156
2833
|
],
|
|
2157
2834
|
"states": [
|
|
2158
2835
|
"The chart is currently static and does not own hover, selection, loading, or empty-state policy.",
|
|
2836
|
+
"Its standard horizontal legend is a static key with local hover highlighting disabled.",
|
|
2159
2837
|
"Point markers may be shown or hidden without changing the underlying series meaning.",
|
|
2160
2838
|
"Authored series colors override the shared categorical palette."
|
|
2161
2839
|
],
|
|
2162
2840
|
"responsiveBehavior": [
|
|
2163
|
-
"The owner supplies dimensions
|
|
2841
|
+
"The owner supplies intrinsic dimensions; the SVG preserves its aspect ratio while shrinking to fit a narrower parent.",
|
|
2164
2842
|
"Category positions are always equally spaced, even when labels represent time.",
|
|
2165
2843
|
"Reduce or pre-format dense labels before passing them; the chart renders authored labels without a continuous time scale."
|
|
2166
2844
|
],
|
|
@@ -2581,7 +3259,7 @@
|
|
|
2581
3259
|
{
|
|
2582
3260
|
"name": "conversation-list",
|
|
2583
3261
|
"title": "ConversationList",
|
|
2584
|
-
"description": "Scrollable conversation-list region with dedicated empty and
|
|
3262
|
+
"description": "Scrollable conversation-list region with dedicated empty and persistent action placement.",
|
|
2585
3263
|
"type": "registry:ui",
|
|
2586
3264
|
"meta": {
|
|
2587
3265
|
"library": "@ds-mo/ui",
|
|
@@ -2592,7 +3270,7 @@
|
|
|
2592
3270
|
"intent": {
|
|
2593
3271
|
"audience": "general",
|
|
2594
3272
|
"status": "experimental",
|
|
2595
|
-
"summary": "Scrollable conversation-list region with dedicated empty and
|
|
3273
|
+
"summary": "Scrollable conversation-list region with dedicated empty and persistent action placement.",
|
|
2596
3274
|
"useWhen": [
|
|
2597
3275
|
"A messaging-like surface needs a reusable history list with empty and action regions."
|
|
2598
3276
|
],
|
|
@@ -2602,17 +3280,24 @@
|
|
|
2602
3280
|
"commonlyComposedWith": [
|
|
2603
3281
|
"component:ds-conversation-list-section",
|
|
2604
3282
|
"component:ds-conversation-list-item",
|
|
2605
|
-
"component:ds-empty-state"
|
|
3283
|
+
"component:ds-empty-state",
|
|
3284
|
+
"component:ds-scroll-overlay"
|
|
2606
3285
|
],
|
|
2607
3286
|
"patterns": [
|
|
2608
3287
|
"pattern:conversation"
|
|
2609
3288
|
],
|
|
2610
3289
|
"accessibility": [
|
|
2611
3290
|
"Provide an accessible list label through the surrounding heading or region.",
|
|
2612
|
-
"Keep the empty message descriptive and
|
|
3291
|
+
"Keep the empty message descriptive and every persistent action explicitly named."
|
|
3292
|
+
],
|
|
3293
|
+
"states": [
|
|
3294
|
+
"The default floating action stays at the lower end corner.",
|
|
3295
|
+
"actionLayout footer stretches a long action between 8px side and bottom insets.",
|
|
3296
|
+
"Both action layouts share the always-active scroll-overlay fade controller, reserve measured end clearance, and begin fading 8px before the visible action.",
|
|
3297
|
+
"ConversationList paints its measured fade on a separate surface-aware layer so contextual row actions retain a real backdrop for blur; hovered, focused, and menu-open rows rise above that decorative fade."
|
|
2613
3298
|
],
|
|
2614
3299
|
"responsiveBehavior": [
|
|
2615
|
-
"The list fills its owner, scrolls independently, and keeps its action
|
|
3300
|
+
"The list fills its owner, scrolls independently, and keeps its persistent action above scrolling rows."
|
|
2616
3301
|
],
|
|
2617
3302
|
"references": [
|
|
2618
3303
|
{
|
|
@@ -2621,7 +3306,12 @@
|
|
|
2621
3306
|
}
|
|
2622
3307
|
]
|
|
2623
3308
|
},
|
|
2624
|
-
"props": {
|
|
3309
|
+
"props": {
|
|
3310
|
+
"actionLayout": {
|
|
3311
|
+
"type": "ConversationListActionLayout",
|
|
3312
|
+
"required": false
|
|
3313
|
+
}
|
|
3314
|
+
},
|
|
2625
3315
|
"events": [],
|
|
2626
3316
|
"slots": [],
|
|
2627
3317
|
"exports": {
|
|
@@ -2673,7 +3363,7 @@
|
|
|
2673
3363
|
],
|
|
2674
3364
|
"states": [
|
|
2675
3365
|
"Rows reuse the md choice-item label/subtext recipe used by Menu, including 6px row padding, 2px text inset, and the shared content gap. The enclosing conversation-list scroll region supplies the larger 8px outer container padding.",
|
|
2676
|
-
"Busy and error are generic channel-neutral states; the owning product supplies suitable status wording. A busy row pairs its body-small status with the sm 16px Loader at
|
|
3366
|
+
"Busy and error are generic channel-neutral states; the owning product supplies suitable status wording. A busy row pairs its body-small status with the sm 16px Loader at a 4px gap.",
|
|
2677
3367
|
"Any positive unreadCount renders one dot on the title row rather than a visible counter; the accessible row name may still announce the exact unread quantity.",
|
|
2678
3368
|
"Hover and press use the shared interaction hover and pressed overlays. Only the selected conversation uses the persistent active fill.",
|
|
2679
3369
|
"The title uses body-medium, not title-small, and the body-small preview truncates after one line. Unread titles use emphasis with primary foreground; read titles use regular weight with secondary foreground.",
|
|
@@ -2782,7 +3472,7 @@
|
|
|
2782
3472
|
"The visible heading labels the section and must describe the relationship shared by its rows."
|
|
2783
3473
|
],
|
|
2784
3474
|
"responsiveBehavior": [
|
|
2785
|
-
"Rows remain full width while the heading stays visible in document order."
|
|
3475
|
+
"Rows remain full width with a 4px gap between adjacent items while the heading stays visible in document order."
|
|
2786
3476
|
],
|
|
2787
3477
|
"references": [
|
|
2788
3478
|
{
|
|
@@ -3618,7 +4308,7 @@
|
|
|
3618
4308
|
{
|
|
3619
4309
|
"name": "markdown",
|
|
3620
4310
|
"title": "Markdown",
|
|
3621
|
-
"description": "
|
|
4311
|
+
"description": "Optional safe CommonMark and GFM renderer that emits semantic nodes without raw HTML injection and consumes the shared prose CSS contract.",
|
|
3622
4312
|
"type": "registry:ui",
|
|
3623
4313
|
"meta": {
|
|
3624
4314
|
"library": "@ds-mo/ui",
|
|
@@ -3629,19 +4319,19 @@
|
|
|
3629
4319
|
"intent": {
|
|
3630
4320
|
"audience": "specialized",
|
|
3631
4321
|
"status": "experimental",
|
|
3632
|
-
"summary": "
|
|
4322
|
+
"summary": "Optional safe CommonMark and GFM renderer that emits semantic nodes without raw HTML injection and consumes the shared prose CSS contract.",
|
|
3633
4323
|
"useWhen": [
|
|
3634
|
-
"
|
|
4324
|
+
"A serializable Markdown string needs the design system's safe, opinionated renderer for headings, lists, links, tables, tasks, quotes, and code."
|
|
3635
4325
|
],
|
|
3636
4326
|
"avoidWhen": [
|
|
4327
|
+
"The application already owns a safe semantic-DOM renderer and only needs @ds-mo/ui/prose.css.",
|
|
3637
4328
|
"The application needs arbitrary HTML, custom plugins, or a full document CMS renderer."
|
|
3638
4329
|
],
|
|
3639
4330
|
"commonlyComposedWith": [
|
|
3640
|
-
"component:ds-
|
|
3641
|
-
"component:ds-
|
|
4331
|
+
"component:ds-agent-response",
|
|
4332
|
+
"component:ds-code-block"
|
|
3642
4333
|
],
|
|
3643
4334
|
"patterns": [
|
|
3644
|
-
"pattern:conversation",
|
|
3645
4335
|
"pattern:agent-chat"
|
|
3646
4336
|
],
|
|
3647
4337
|
"accessibility": [
|
|
@@ -3650,7 +4340,8 @@
|
|
|
3650
4340
|
"Link text must remain descriptive in authored content."
|
|
3651
4341
|
],
|
|
3652
4342
|
"states": [
|
|
3653
|
-
"Streaming updates are coalesced to one parse and render per animation frame."
|
|
4343
|
+
"Streaming updates are coalesced to one parse and render per animation frame.",
|
|
4344
|
+
"Typography, rhythm, opt-out, and overflow styling come from the renderer-neutral .ds-prose source rather than a Markdown-only recipe."
|
|
3654
4345
|
],
|
|
3655
4346
|
"responsiveBehavior": [
|
|
3656
4347
|
"Tables and code scroll horizontally instead of forcing the transcript wider."
|
|
@@ -3658,7 +4349,11 @@
|
|
|
3658
4349
|
"references": [
|
|
3659
4350
|
{
|
|
3660
4351
|
"label": "Storybook examples",
|
|
3661
|
-
"path": "src/wc/components/
|
|
4352
|
+
"path": "src/wc/components/AgentResponse/AgentResponse.stories.ts"
|
|
4353
|
+
},
|
|
4354
|
+
{
|
|
4355
|
+
"label": "Prose distribution decision",
|
|
4356
|
+
"path": "docs/prose-foundation.md"
|
|
3662
4357
|
}
|
|
3663
4358
|
]
|
|
3664
4359
|
},
|
|
@@ -3750,14 +4445,14 @@
|
|
|
3750
4445
|
"states": [
|
|
3751
4446
|
"The host owns open state and responds to selection and close events.",
|
|
3752
4447
|
"Use either flat items or sections, not both.",
|
|
3753
|
-
"After dsSelect from a switch row,
|
|
3754
|
-
"For selectionMode single, keep exactly one item isSelected and
|
|
4448
|
+
"After dsSelect from a switch row, replace the items or sections array with updated switchValue data so the controlled indicator reflects the new state.",
|
|
4449
|
+
"For selectionMode single, keep exactly one item isSelected and replace the items or sections array after dsSelect; Menu never mutates consumer-owned selection data.",
|
|
3755
4450
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
3756
4451
|
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup; the legacy gradient-picker section and dsGradientSelect remain compatibility-only."
|
|
3757
4452
|
],
|
|
3758
4453
|
"responsiveBehavior": [
|
|
3759
4454
|
"Keep the default choice-cell anchor alignment so the first or last interactive row edge aligns with its trigger, matching Select; use popup-frame only for deliberate custom frame geometry.",
|
|
3760
|
-
"
|
|
4455
|
+
"Treat side as the preferred placement. When the popup cannot fit there and the opposite side offers more room, Menu flips on that main axis before clamping the final position to the viewport.",
|
|
3761
4456
|
"Avoid fixed widths that exceed narrow viewports."
|
|
3762
4457
|
],
|
|
3763
4458
|
"frameworkCaveats": {
|
|
@@ -3914,10 +4609,11 @@
|
|
|
3914
4609
|
],
|
|
3915
4610
|
"accessibility": [
|
|
3916
4611
|
"Author and time metadata remain textual when they are necessary to interpret the transcript.",
|
|
3917
|
-
"Delivery failure uses negative Failed to send text in the footer while the message bubble keeps its normal outgoing treatment."
|
|
4612
|
+
"Delivery failure uses negative Failed to send text in the footer while the message bubble keeps its normal outgoing treatment; when time is also visible, a tertiary middle dot separates the failure label and timestamp."
|
|
3918
4613
|
],
|
|
3919
4614
|
"states": [
|
|
3920
4615
|
"Pass an ISO timestamp. Message keeps the full value in dateTime and formats the visible value as a localized time; applications must not render a raw ISO string as visible transcript metadata.",
|
|
4616
|
+
"A visible incoming author uses body-small emphasis with primary foreground; timestamp and delivery metadata remain caption text.",
|
|
3921
4617
|
"Visible author, bubble content, and timestamp or delivery footer use consistent 4px vertical gaps.",
|
|
3922
4618
|
"Grouping joins adjacent bubble corners, shows the incoming author only at the start, and shows delivery/time metadata only at the end. Outgoing author remains in the accessible message label without repeating a visible You label.",
|
|
3923
4619
|
"Set showAuthor false only when the product makes participant and assistant roles visually self-evident; continue passing author so the accessible message label remains specific."
|
|
@@ -4203,10 +4899,12 @@
|
|
|
4203
4899
|
"Selection and transcript interaction release automatic following.",
|
|
4204
4900
|
"Opening saved history, message jumps, and prepended history preserve deliberate position.",
|
|
4205
4901
|
"The scroll-to-latest action is absent at the live edge, appears only after the reader moves away, and disappears again after returning to the newest message.",
|
|
4206
|
-
"Place a composer container with 8px padding on every side in the overlay slot so messages scroll behind it; the
|
|
4902
|
+
"Place a composer container with 8px padding on every side in the overlay slot so messages scroll behind it; the shared scroll-overlay controller tracks every composer growth step, reserves matching transcript clearance, begins the fade 8px before the visible composer, and keeps scroll-to-latest above it."
|
|
4207
4903
|
],
|
|
4208
4904
|
"responsiveBehavior": [
|
|
4209
|
-
"Transcript width is readable while the scroll region fills available height."
|
|
4905
|
+
"Transcript width is readable while the scroll region fills available height.",
|
|
4906
|
+
"For a narrower fullscreen conversation lane, set --ds-message-scroller-content-max-width on the host instead of constraining the host; the full-width viewport then keeps its scrollbar at the outer edge while the transcript remains centered.",
|
|
4907
|
+
"The custom property sizes the padded transcript box. If the target is the usable conversation width, add the transcript's two 16px inline paddings and size the centered overlay container to the same target plus its two 8px paddings so messages and the visible composer align."
|
|
4210
4908
|
],
|
|
4211
4909
|
"references": [
|
|
4212
4910
|
{
|
|
@@ -4927,7 +5625,7 @@
|
|
|
4927
5625
|
],
|
|
4928
5626
|
"accessibility": [
|
|
4929
5627
|
"Provide an aria-label that names the searched domain, such as Search agent chats or Search messages.",
|
|
4930
|
-
"The standard search clear action restores focus,
|
|
5628
|
+
"The standard search clear action restores focus, uses the concise localized clearLabel by itself for both its tooltip and accessible name, and emits both the empty query and dsClear.",
|
|
4931
5629
|
"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."
|
|
4932
5630
|
],
|
|
4933
5631
|
"states": [
|
|
@@ -5407,6 +6105,88 @@
|
|
|
5407
6105
|
"text"
|
|
5408
6106
|
]
|
|
5409
6107
|
},
|
|
6108
|
+
{
|
|
6109
|
+
"name": "scroll-overlay",
|
|
6110
|
+
"title": "ScrollOverlay",
|
|
6111
|
+
"description": "Generic scroll owner for content that moves behind a persistent footer action or composer with an always-active alpha fade.",
|
|
6112
|
+
"type": "registry:ui",
|
|
6113
|
+
"meta": {
|
|
6114
|
+
"library": "@ds-mo/ui",
|
|
6115
|
+
"distribution": "npm",
|
|
6116
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/scroll-overlay",
|
|
6117
|
+
"source": "src/wc/components/ScrollOverlay/ScrollOverlay.tsx",
|
|
6118
|
+
"intentStatus": "complete",
|
|
6119
|
+
"intent": {
|
|
6120
|
+
"audience": "general",
|
|
6121
|
+
"status": "experimental",
|
|
6122
|
+
"summary": "Generic scroll owner for content that moves behind a persistent footer action or composer with an always-active alpha fade.",
|
|
6123
|
+
"useWhen": [
|
|
6124
|
+
"A bounded region owns scrolling while footer actions remain overlaid and continuously visible.",
|
|
6125
|
+
"The final content must clear a live-height footer while earlier content can move behind it."
|
|
6126
|
+
],
|
|
6127
|
+
"avoidWhen": [
|
|
6128
|
+
"The footer belongs in normal document flow rather than overlaying content.",
|
|
6129
|
+
"Another component already owns scrolling and cannot delegate its scrollport to this component."
|
|
6130
|
+
],
|
|
6131
|
+
"commonlyComposedWith": [
|
|
6132
|
+
"component:ds-button-filled",
|
|
6133
|
+
"component:ds-message-composer"
|
|
6134
|
+
],
|
|
6135
|
+
"accessibility": [
|
|
6136
|
+
"Provide scrollLabel when the scrollport needs its own named, keyboard-focusable region.",
|
|
6137
|
+
"Keep footer actions keyboard accessible and explicitly named; the fade is decorative and never intercepts pointer input."
|
|
6138
|
+
],
|
|
6139
|
+
"states": [
|
|
6140
|
+
"The alpha mask remains active at every scroll position and moves in content coordinates so it stays pinned behind the footer without masking native scrollbars.",
|
|
6141
|
+
"The component measures the complete overlay for end clearance, measures its visible child for fade depth, and begins the fade 8px before that visible content.",
|
|
6142
|
+
"An md 32px footer action with 8px bottom inset therefore produces a 48px fade; variable-height composers produce a correspondingly taller measured fade."
|
|
6143
|
+
],
|
|
6144
|
+
"responsiveBehavior": [
|
|
6145
|
+
"The scrollport and overlay fill the available width and height; the owner supplies responsive sizing and overlay insets."
|
|
6146
|
+
],
|
|
6147
|
+
"frameworkCaveats": {
|
|
6148
|
+
"customElements": [
|
|
6149
|
+
"Place scrollable content in the default slot and one footer wrapper in the overlay slot; use dsScroll only when the application needs position data."
|
|
6150
|
+
],
|
|
6151
|
+
"react": [
|
|
6152
|
+
"Use DsScrollOverlay with ordinary children plus an element carrying slot=\"overlay\"."
|
|
6153
|
+
],
|
|
6154
|
+
"angular": [
|
|
6155
|
+
"Import DsScrollOverlay and project the persistent footer wrapper with slot=\"overlay\"."
|
|
6156
|
+
]
|
|
6157
|
+
},
|
|
6158
|
+
"references": [
|
|
6159
|
+
{
|
|
6160
|
+
"label": "Storybook examples",
|
|
6161
|
+
"path": "src/wc/components/ScrollOverlay/ScrollOverlay.stories.ts"
|
|
6162
|
+
}
|
|
6163
|
+
]
|
|
6164
|
+
},
|
|
6165
|
+
"props": {
|
|
6166
|
+
"scrollLabel": {
|
|
6167
|
+
"type": "string | undefined",
|
|
6168
|
+
"required": false
|
|
6169
|
+
}
|
|
6170
|
+
},
|
|
6171
|
+
"events": [
|
|
6172
|
+
{
|
|
6173
|
+
"name": "dsScroll",
|
|
6174
|
+
"detail": "ScrollOverlayScrollDetail"
|
|
6175
|
+
}
|
|
6176
|
+
],
|
|
6177
|
+
"slots": [],
|
|
6178
|
+
"exports": {
|
|
6179
|
+
"customElement": "ds-scroll-overlay",
|
|
6180
|
+
"react": "DsScrollOverlay",
|
|
6181
|
+
"angular": "DsScrollOverlay"
|
|
6182
|
+
}
|
|
6183
|
+
},
|
|
6184
|
+
"dependencies": [
|
|
6185
|
+
"@ds-mo/ui",
|
|
6186
|
+
"@ds-mo/tokens"
|
|
6187
|
+
],
|
|
6188
|
+
"registryDependencies": []
|
|
6189
|
+
},
|
|
5410
6190
|
{
|
|
5411
6191
|
"name": "select",
|
|
5412
6192
|
"title": "Select",
|
|
@@ -6279,7 +7059,7 @@
|
|
|
6279
7059
|
{
|
|
6280
7060
|
"name": "shell-page",
|
|
6281
7061
|
"title": "ShellPage",
|
|
6282
|
-
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement,
|
|
7062
|
+
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6283
7063
|
"type": "registry:ui",
|
|
6284
7064
|
"meta": {
|
|
6285
7065
|
"library": "@ds-mo/ui",
|
|
@@ -6290,10 +7070,11 @@
|
|
|
6290
7070
|
"intent": {
|
|
6291
7071
|
"audience": "general",
|
|
6292
7072
|
"status": "stable",
|
|
6293
|
-
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement,
|
|
7073
|
+
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6294
7074
|
"useWhen": [
|
|
6295
7075
|
"Rendering a standard routed page inside ShellApp's default content region.",
|
|
6296
|
-
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the
|
|
7076
|
+
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the application shell reports reduced capacity.",
|
|
7077
|
+
"BarWorkflow needs sticky page-level placement while remaining compact.",
|
|
6297
7078
|
"Pages need consistent content gutters with an explicit full-bleed option."
|
|
6298
7079
|
],
|
|
6299
7080
|
"avoidWhen": [
|
|
@@ -6316,6 +7097,7 @@
|
|
|
6316
7097
|
"commonlyComposedWith": [
|
|
6317
7098
|
"component:ds-shell-app",
|
|
6318
7099
|
"component:ds-bar-title",
|
|
7100
|
+
"component:ds-bar-workflow",
|
|
6319
7101
|
"component:ds-tab-group"
|
|
6320
7102
|
],
|
|
6321
7103
|
"patterns": [
|
|
@@ -6323,35 +7105,38 @@
|
|
|
6323
7105
|
],
|
|
6324
7106
|
"accessibility": [
|
|
6325
7107
|
"ShellPage exposes the routed page as the main landmark; render exactly one active ShellPage inside ShellApp.",
|
|
6326
|
-
"Provide exactly one BarTitle through the header slot so the page has one h1.",
|
|
7108
|
+
"Provide exactly one BarTitle or BarWorkflow through the header slot so the page has one h1.",
|
|
6327
7109
|
"Keep loading, empty, validation, error, progress, success, and failure communication in the default product-content slot.",
|
|
6328
7110
|
"Responsive variant changes preserve the same heading, controls, accessible names, and keyboard focus targets."
|
|
6329
7111
|
],
|
|
6330
7112
|
"states": [
|
|
6331
|
-
"
|
|
7113
|
+
"headerCapacity=roomy, compact, or constrained is supplied before paint by the owning application shell and describes the page-header space available after viewport and shell-chrome policy are applied.",
|
|
7114
|
+
"headerPresentation=auto selects the matching header variant from headerCapacity and scroll position.",
|
|
6332
7115
|
"expanded, compact, and constrained are explicit overrides for exceptional layouts and deterministic examples.",
|
|
6333
7116
|
"contentInset=default supplies standard page gutters; none permits maps, canvases, and other full-bleed content.",
|
|
6334
|
-
"The required header slot accepts one BarTitle. The default slot owns router output and all page product content."
|
|
7117
|
+
"The required header slot accepts one BarTitle or BarWorkflow. The default slot owns router output and all page product content."
|
|
6335
7118
|
],
|
|
6336
7119
|
"responsiveBehavior": [
|
|
6337
|
-
"
|
|
6338
|
-
"Roomy
|
|
6339
|
-
"A
|
|
6340
|
-
"
|
|
7120
|
+
"The owning application shell resolves viewport and persistent-chrome state into the explicit headerCapacity prop; ShellPage never guesses the cause of reduced width from its own rendered size.",
|
|
7121
|
+
"Roomy capacity expands at the top and compacts after scroll; compact capacity stays compact; constrained capacity uses the constrained action layout.",
|
|
7122
|
+
"A ShellPage-managed BarTitle remains concealed until headerCapacity is available and its rendered variant matches the resolved presentation, preventing a default-variant flash during route activation.",
|
|
7123
|
+
"Update headerCapacity synchronously with shell layout state so opening tools or crossing application breakpoints cannot briefly render the wrong presentation.",
|
|
7124
|
+
"On roomy pages, the expanded header scrolls upward until its title and action row reaches the compact row position, then snaps variants without moving that shared visual anchor.",
|
|
6341
7125
|
"Scroll compaction preserves the expanded page flow offset so content never jumps beneath the sticky header.",
|
|
6342
|
-
"ShellPage relies on ShellApp's content scroller and never introduces nested scrolling."
|
|
7126
|
+
"ShellPage relies on ShellApp's content scroller and never introduces nested scrolling.",
|
|
7127
|
+
"BarWorkflow remains compact and is not assigned BarTitle's capacity or scroll variants."
|
|
6343
7128
|
],
|
|
6344
7129
|
"frameworkCaveats": {
|
|
6345
7130
|
"customElements": [
|
|
6346
|
-
"Import ShellPage
|
|
7131
|
+
"Import ShellPage with BarTitle or BarWorkflow, place one header in slot=header, and render route content as default children.",
|
|
6347
7132
|
"Do not set BarTitle.variant while ShellPage owns headerPresentation."
|
|
6348
7133
|
],
|
|
6349
7134
|
"react": [
|
|
6350
|
-
"Render DsBarTitle with slot=header inside DsShellPage and keep routed content as the remaining children.",
|
|
7135
|
+
"Render DsBarTitle or DsBarWorkflow with slot=header inside DsShellPage and keep routed content as the remaining children.",
|
|
6351
7136
|
"Use contentInset none only for deliberately full-bleed page products."
|
|
6352
7137
|
],
|
|
6353
7138
|
"angular": [
|
|
6354
|
-
"Import the generated standalone DsShellPage
|
|
7139
|
+
"Import the generated standalone DsShellPage adapter with DsBarTitle or DsBarWorkflow, preserve slot=header, and place router-outlet in the ShellPage default slot.",
|
|
6355
7140
|
"Do not add another overflow auto wrapper around the routed page."
|
|
6356
7141
|
]
|
|
6357
7142
|
},
|
|
@@ -6375,6 +7160,10 @@
|
|
|
6375
7160
|
"type": "ShellPageContentInset",
|
|
6376
7161
|
"required": false
|
|
6377
7162
|
},
|
|
7163
|
+
"headerCapacity": {
|
|
7164
|
+
"type": "ShellPageCapacity",
|
|
7165
|
+
"required": false
|
|
7166
|
+
},
|
|
6378
7167
|
"headerPresentation": {
|
|
6379
7168
|
"type": "ShellPageHeaderPresentation",
|
|
6380
7169
|
"required": false
|
|
@@ -7945,12 +8734,12 @@
|
|
|
7945
8734
|
"pattern:conversation"
|
|
7946
8735
|
],
|
|
7947
8736
|
"accessibility": [
|
|
7948
|
-
"Provide concise localized status text
|
|
8737
|
+
"Provide concise localized status text; the standard label is Typing followed by a three-dot ellipsis.",
|
|
7949
8738
|
"The polite atomic status announces typing without representing it as a message bubble."
|
|
7950
8739
|
],
|
|
7951
8740
|
"states": [
|
|
7952
8741
|
"TypingIndicator is transient conversation status, never persisted message content.",
|
|
7953
|
-
"Its body-
|
|
8742
|
+
"Its body-medium secondary text may shimmer, while reduced-motion preferences retain a static readable status."
|
|
7954
8743
|
],
|
|
7955
8744
|
"responsiveBehavior": [
|
|
7956
8745
|
"The indicator fills the message content width and wraps only when localized status text requires it."
|