@ds-mo/ui 12.8.0 → 13.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 -0
- package/dist/.package-ready.json +1 -0
- package/dist/agent-patterns.json +124 -135
- package/dist/agent.json +260 -1104
- package/dist/angular/ds-bar-nav.d.ts +1 -1
- package/dist/angular/ds-bar-nav.js +3 -3
- package/dist/angular/ds-button-filled.d.ts +1 -1
- package/dist/angular/ds-button-filled.js +3 -3
- package/dist/angular/ds-card-data-viz.d.ts +18 -0
- package/dist/angular/{ds-card-data-viz-donut.js → ds-card-data-viz.js} +12 -12
- package/dist/angular/ds-card-overview.d.ts +1 -1
- package/dist/angular/ds-card-overview.js +3 -3
- package/dist/angular/ds-chart-bar.d.ts +1 -1
- package/dist/angular/ds-chart-bar.js +3 -3
- package/dist/angular/ds-menu.d.ts +1 -7
- package/dist/angular/ds-menu.js +2 -5
- package/dist/angular/ds-mobile-header.d.ts +1 -1
- package/dist/angular/ds-mobile-header.js +3 -3
- package/dist/angular/ds-mobile-section-switcher.d.ts +1 -1
- package/dist/angular/ds-mobile-section-switcher.js +3 -3
- package/dist/angular/ds-panel-tools.d.ts +1 -1
- package/dist/angular/ds-panel-tools.js +3 -3
- package/dist/angular/ds-select.d.ts +5 -4
- package/dist/angular/ds-select.js +3 -3
- package/dist/angular/ds-shell-app.d.ts +90 -1
- package/dist/angular/ds-shell-app.js +44 -4
- package/dist/angular/ds-shell-tools.d.ts +1 -1
- package/dist/angular/ds-shell-tools.js +3 -3
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -8
- package/dist/angular/proxies.d.ts +1 -8
- package/dist/angular/proxies.js +1 -8
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-nav.js.map +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-title.js.map +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/{ds-select-multi.d.ts → ds-card-data-viz.d.ts} +4 -4
- package/dist/components/ds-card-data-viz.js +2 -0
- package/dist/components/ds-card-data-viz.js.map +1 -0
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- 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-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-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-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.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js.map +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js.map +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-nav.js.map +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-radio.js.map +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-page.js.map +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-shell-tools.js.map +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-DB9XJm2c.js → p-6qXDqCj_.js} +2 -2
- package/dist/components/{p-CPwpgUWT.js → p-Ay1AX7Ql.js} +2 -2
- package/dist/components/p-Ay1AX7Ql.js.map +1 -0
- package/dist/components/p-B-qDb_Zo.js +2 -0
- package/dist/components/p-B-qDb_Zo.js.map +1 -0
- package/dist/components/{p-DhLmoCe_.js → p-B1cbQ0SG.js} +2 -2
- package/dist/components/p-BBxcMVqk.js +2 -0
- package/dist/components/p-BBxcMVqk.js.map +1 -0
- package/dist/components/{p-BKOlvCGS.js → p-BUZXuod2.js} +2 -2
- package/dist/components/{p-Utr23NC-.js → p-BaUsq_VK.js} +2 -2
- package/dist/components/p-BbMJTilO.js +2 -0
- package/dist/components/p-BbMJTilO.js.map +1 -0
- package/dist/components/{p-BO5aqZcf.js → p-BcTYhmku.js} +2 -2
- package/dist/components/p-Bkv3UjZz.js +2 -0
- package/dist/components/p-Bkv3UjZz.js.map +1 -0
- package/dist/components/p-BnQXAbif.js +2 -0
- package/dist/components/p-BnQXAbif.js.map +1 -0
- package/dist/components/p-BnbbnuVC.js +2 -0
- package/dist/components/p-BnbbnuVC.js.map +1 -0
- package/dist/components/{p-BlHzmszE.js → p-BroVnDzE.js} +2 -2
- package/dist/components/{p-BFRMwl93.js → p-BsoqsbBh.js} +2 -2
- package/dist/components/p-BwT6B5Fi.js +2 -0
- package/dist/components/p-BwT6B5Fi.js.map +1 -0
- package/dist/components/p-BybqPD8K.js +2 -0
- package/dist/components/p-BybqPD8K.js.map +1 -0
- package/dist/components/p-C-vRkDyn.js +2 -0
- package/dist/components/p-C-vRkDyn.js.map +1 -0
- package/dist/components/p-C3ArcO50.js +2 -0
- package/dist/components/p-C3ArcO50.js.map +1 -0
- package/dist/components/p-C4uYvyq6.js +2 -0
- package/dist/components/p-C4uYvyq6.js.map +1 -0
- package/dist/components/{p-ukB-dPOK.js → p-CBazaRlE.js} +2 -2
- package/dist/components/{p-CNgPwd11.js → p-CHuh71-U.js} +2 -2
- package/dist/components/{p-D9u1_OEZ.js → p-CMWata9g.js} +2 -2
- package/dist/components/p-CS6CHlHK.js +2 -0
- package/dist/components/p-CS6CHlHK.js.map +1 -0
- package/dist/components/p-CTTnM7cE.js +2 -0
- package/dist/components/p-CTTnM7cE.js.map +1 -0
- package/dist/components/{p-CsX3ICz7.js → p-CWoXKe_h.js} +2 -2
- package/dist/components/p-CWoXKe_h.js.map +1 -0
- package/dist/components/p-CwwuSGER.js +2 -0
- package/dist/components/p-CwwuSGER.js.map +1 -0
- package/dist/components/p-D09HINr_.js +2 -0
- package/dist/components/p-D09HINr_.js.map +1 -0
- package/dist/components/p-D2xWcVv6.js +2 -0
- package/dist/components/p-D2xWcVv6.js.map +1 -0
- package/dist/components/p-DAW6G8Sl.js +2 -0
- package/dist/components/p-DAW6G8Sl.js.map +1 -0
- package/dist/components/p-DEaszb15.js +2 -0
- package/dist/components/p-DEaszb15.js.map +1 -0
- package/dist/components/{p-BgGP65Nn.js → p-DOUk4KoT.js} +1 -1
- package/dist/components/p-DOUk4KoT.js.map +1 -0
- package/dist/components/p-DbQr7Kwr.js +2 -0
- package/dist/components/p-DbQr7Kwr.js.map +1 -0
- package/dist/components/p-DdvEZyX4.js +2 -0
- package/dist/components/p-DdvEZyX4.js.map +1 -0
- package/dist/components/{p-38PfdMkF.js → p-DeQwkbT1.js} +2 -2
- package/dist/components/{p-Vdufoj7G.js → p-Df17mJqI.js} +2 -2
- package/dist/components/p-Dg1LBXJ2.js +2 -0
- package/dist/components/p-Dg1LBXJ2.js.map +1 -0
- package/dist/components/p-DsiCDzoF.js +2 -0
- package/dist/components/p-DsiCDzoF.js.map +1 -0
- package/dist/components/p-_DzUXA86.js +2 -0
- package/dist/components/p-_DzUXA86.js.map +1 -0
- package/dist/components/p-lyZNvRvO.js +2 -0
- package/dist/components/p-lyZNvRvO.js.map +1 -0
- package/dist/components/{p-69lHhJiX.js → p-ohsLFap_.js} +2 -2
- package/dist/components/{p-DjbTFy2B.js → p-ymtdhOU5.js} +1 -1
- package/dist/components/p-ymtdhOU5.js.map +1 -0
- package/dist/components/p-z5RIrXuX.js +2 -0
- package/dist/components/p-z5RIrXuX.js.map +1 -0
- package/dist/docs/components.json +1006 -2356
- package/dist/framework/angular.d.ts +0 -1
- package/dist/framework/angular.js +0 -1
- package/dist/lib/components/BarTitle/bar-title-types.d.ts +28 -0
- package/dist/lib/components/Breadcrumb/breadcrumb-types.d.ts +16 -0
- package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +83 -0
- package/dist/lib/components/MobileHeader/mobile-header-types.d.ts +4 -0
- package/dist/lib/components/PanelTools/panel-tools-types.d.ts +21 -7
- package/dist/lib/components/ShellApp/shell-app-types.d.ts +91 -0
- package/dist/lib/shell/index.d.ts +5 -13
- package/dist/lib/shell/index.js +87 -358
- package/dist/lib/shell/index.js.map +3 -3
- package/dist/lib/shell/shell-responsive.d.ts +2 -1
- package/dist/lib/utils/button-render.d.ts +17 -0
- package/dist/lib/utils/button-types.d.ts +10 -0
- package/dist/lib/utils/choice-list.d.ts +25 -0
- package/dist/lib/utils/control-press.d.ts +8 -0
- package/dist/lib/utils/form-association.d.ts +22 -0
- package/dist/lib/utils/index.d.ts +4 -0
- package/dist/lib/utils/index.js +63 -0
- package/dist/lib/utils/index.js.map +3 -3
- package/dist/lib/utils/required-validity.d.ts +1 -1
- package/dist/lib/utils/safe-url.d.ts +11 -0
- package/dist/mcp/cli.js +38 -10
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/bar-nav.json +3 -21
- package/dist/mcp-data/registry/breadcrumb.json +1 -1
- package/dist/mcp-data/registry/button-filled.json +4 -19
- package/dist/mcp-data/registry/button-unfilled.json +14 -11
- package/dist/mcp-data/registry/card-data-viz.json +241 -0
- package/dist/mcp-data/registry/card-overview.json +87 -16
- package/dist/mcp-data/registry/card-setting.json +2 -2
- package/dist/mcp-data/registry/chart-bar.json +66 -18
- package/dist/mcp-data/registry/chart-donut.json +5 -5
- package/dist/mcp-data/registry/chart-legend.json +7 -9
- package/dist/mcp-data/registry/chart-line.json +1 -2
- package/dist/mcp-data/registry/checkbox.json +2 -2
- package/dist/mcp-data/registry/conversation-list-item.json +1 -1
- package/dist/mcp-data/registry/field.json +2 -3
- package/dist/mcp-data/registry/input.json +1 -1
- package/dist/mcp-data/registry/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +10 -21
- package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
- package/dist/mcp-data/registry/mobile-header.json +1 -37
- package/dist/mcp-data/registry/mobile-section-switcher.json +1 -19
- package/dist/mcp-data/registry/panel-nav.json +2 -2
- package/dist/mcp-data/registry/panel-tool-search.json +1 -1
- package/dist/mcp-data/registry/panel-tools.json +19 -55
- package/dist/mcp-data/registry/radio.json +1 -1
- package/dist/mcp-data/registry/registry.json +309 -1174
- package/dist/mcp-data/registry/select.json +59 -25
- package/dist/mcp-data/registry/shell-app.json +345 -20
- package/dist/mcp-data/registry/shell-page.json +1 -1
- package/dist/mcp-data/registry/shell-tools.json +12 -43
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/text.json +2 -2
- package/dist/react/components.d.ts +1 -8
- package/dist/react/components.js +1 -8
- package/dist/react/ds-card-data-viz.d.ts +12 -0
- package/dist/react/ds-card-data-viz.js +12 -0
- package/dist/react/ds-menu.d.ts +1 -2
- package/dist/react/ds-menu.js +0 -1
- package/dist/react/ds-select.d.ts +2 -2
- package/dist/react/ds-shell-app.d.ts +24 -1
- package/dist/react/ds-shell-app.js +16 -1
- package/dist/types/components/AgentSourceList/AgentSourceList.d.ts +0 -1
- package/dist/types/components/BarNav/BarNav.d.ts +0 -2
- package/dist/types/components/BarNav/bar-nav-utils.d.ts +2 -4
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +5 -11
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +13 -10
- package/dist/types/components/CardDataViz/CardDataViz.d.ts +32 -0
- package/dist/types/components/CardDataViz/index.d.ts +2 -0
- package/dist/types/components/CardOverview/CardOverview.d.ts +25 -3
- package/dist/types/components/CardOverview/card-overview-controller.d.ts +16 -0
- package/dist/types/components/CardOverview/card-overview-types.d.ts +2 -0
- package/dist/types/components/CardOverview/index.d.ts +1 -1
- package/dist/types/components/ChartBar/ChartBar.d.ts +12 -1
- package/dist/types/components/ChartBar/index.d.ts +2 -1
- package/dist/types/components/Menu/Menu.d.ts +0 -5
- package/dist/types/components/Menu/menu-sections.d.ts +4 -0
- package/dist/types/components/Menu/menu-types.d.ts +2 -11
- package/dist/types/components/MobileHeader/MobileHeader.d.ts +0 -5
- package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +0 -2
- package/dist/types/components/PanelTools/PanelTools.d.ts +0 -4
- package/dist/types/components/PanelTools/index.d.ts +1 -1
- package/dist/types/components/PanelTools/panel-tools-types.d.ts +21 -7
- package/dist/types/components/PanelTools/panel-tools-utils.d.ts +1 -1
- package/dist/types/components/Select/Select.d.ts +12 -4
- package/dist/types/components/Select/index.d.ts +1 -1
- package/dist/types/components/ShellApp/ShellApp.d.ts +98 -0
- package/dist/types/components/ShellApp/shell-app-types.d.ts +92 -0
- package/dist/types/components/ShellPage/ShellPage.d.ts +5 -0
- package/dist/types/components/ShellTools/ShellTools.d.ts +2 -2
- package/dist/types/components.d.ts +238 -895
- package/dist/types/shell/index.d.ts +5 -13
- package/dist/types/shell/shell-responsive.d.ts +2 -1
- package/dist/types/utils/anchored-position-controller.d.ts +9 -0
- package/dist/types/utils/button-render.d.ts +18 -0
- package/dist/types/utils/button-story-foundation.d.ts +9 -0
- package/dist/types/utils/button-types.d.ts +11 -0
- package/dist/types/utils/form-association.d.ts +23 -0
- package/dist/types/utils/index.d.ts +4 -0
- package/dist/types/utils/required-validity.d.ts +1 -1
- package/dist/types/utils/safe-url.d.ts +12 -0
- package/dist/types/utils/select-controller.d.ts +1 -1
- package/package.json +16 -8
- package/dist/.build-stamp +0 -1
- package/dist/angular/ds-card-data-viz-bar.d.ts +0 -18
- package/dist/angular/ds-card-data-viz-bar.js +0 -42
- package/dist/angular/ds-card-data-viz-donut.d.ts +0 -18
- package/dist/angular/ds-card-data-viz-line.d.ts +0 -18
- package/dist/angular/ds-card-data-viz-line.js +0 -42
- package/dist/angular/ds-card-shell-data-viz.d.ts +0 -12
- package/dist/angular/ds-card-shell-data-viz.js +0 -38
- package/dist/angular/ds-chart-bar-stacked.d.ts +0 -12
- package/dist/angular/ds-chart-bar-stacked.js +0 -38
- package/dist/angular/ds-select-multi.d.ts +0 -28
- package/dist/angular/ds-select-multi.js +0 -49
- package/dist/angular/ds-shell-gradient-picker.d.ts +0 -16
- package/dist/angular/ds-shell-gradient-picker.js +0 -42
- package/dist/angular/ds-shell-gradient-swatch.d.ts +0 -16
- package/dist/angular/ds-shell-gradient-swatch.js +0 -42
- package/dist/components/ds-card-data-viz-bar.d.ts +0 -11
- package/dist/components/ds-card-data-viz-bar.js +0 -2
- package/dist/components/ds-card-data-viz-bar.js.map +0 -1
- package/dist/components/ds-card-data-viz-donut.d.ts +0 -11
- package/dist/components/ds-card-data-viz-donut.js +0 -2
- package/dist/components/ds-card-data-viz-donut.js.map +0 -1
- package/dist/components/ds-card-data-viz-line.d.ts +0 -11
- package/dist/components/ds-card-data-viz-line.js +0 -2
- package/dist/components/ds-card-data-viz-line.js.map +0 -1
- package/dist/components/ds-card-shell-data-viz.d.ts +0 -11
- package/dist/components/ds-card-shell-data-viz.js +0 -2
- package/dist/components/ds-card-shell-data-viz.js.map +0 -1
- package/dist/components/ds-chart-bar-stacked.d.ts +0 -11
- package/dist/components/ds-chart-bar-stacked.js +0 -2
- package/dist/components/ds-chart-bar-stacked.js.map +0 -1
- package/dist/components/ds-select-multi.js +0 -2
- package/dist/components/ds-select-multi.js.map +0 -1
- package/dist/components/ds-shell-gradient-picker.d.ts +0 -11
- package/dist/components/ds-shell-gradient-picker.js +0 -2
- package/dist/components/ds-shell-gradient-picker.js.map +0 -1
- package/dist/components/ds-shell-gradient-swatch.d.ts +0 -11
- package/dist/components/ds-shell-gradient-swatch.js +0 -2
- package/dist/components/ds-shell-gradient-swatch.js.map +0 -1
- package/dist/components/p-2foAUsDN.js +0 -2
- package/dist/components/p-2foAUsDN.js.map +0 -1
- package/dist/components/p-B6NvVdeO.js +0 -2
- package/dist/components/p-B6NvVdeO.js.map +0 -1
- package/dist/components/p-B6vE3ujd.js +0 -2
- package/dist/components/p-B6vE3ujd.js.map +0 -1
- package/dist/components/p-BBePKRHC.js +0 -2
- package/dist/components/p-BBePKRHC.js.map +0 -1
- package/dist/components/p-BOQnc-M4.js +0 -2
- package/dist/components/p-BOQnc-M4.js.map +0 -1
- package/dist/components/p-BXaieghV.js +0 -2
- package/dist/components/p-BXaieghV.js.map +0 -1
- package/dist/components/p-BgGP65Nn.js.map +0 -1
- package/dist/components/p-BrusnEYP.js +0 -2
- package/dist/components/p-BrusnEYP.js.map +0 -1
- package/dist/components/p-By_s1wNN.js +0 -2
- package/dist/components/p-By_s1wNN.js.map +0 -1
- package/dist/components/p-C61yJkfr.js +0 -2
- package/dist/components/p-C61yJkfr.js.map +0 -1
- package/dist/components/p-CH3w-P2H.js +0 -2
- package/dist/components/p-CH3w-P2H.js.map +0 -1
- package/dist/components/p-CNjOyUQu.js +0 -2
- package/dist/components/p-CNjOyUQu.js.map +0 -1
- package/dist/components/p-CPwpgUWT.js.map +0 -1
- package/dist/components/p-CU2673IJ.js +0 -2
- package/dist/components/p-CU2673IJ.js.map +0 -1
- package/dist/components/p-CsX3ICz7.js.map +0 -1
- package/dist/components/p-D0e77tkd.js +0 -2
- package/dist/components/p-D0e77tkd.js.map +0 -1
- package/dist/components/p-D1HFMTdC.js +0 -2
- package/dist/components/p-D1HFMTdC.js.map +0 -1
- package/dist/components/p-D1bNvIpb.js +0 -2
- package/dist/components/p-D1bNvIpb.js.map +0 -1
- package/dist/components/p-D2x17ei-.js +0 -2
- package/dist/components/p-D2x17ei-.js.map +0 -1
- package/dist/components/p-DIFUsoM-.js +0 -2
- package/dist/components/p-DIFUsoM-.js.map +0 -1
- package/dist/components/p-DjbTFy2B.js.map +0 -1
- package/dist/components/p-DmAHufd5.js +0 -2
- package/dist/components/p-DmAHufd5.js.map +0 -1
- package/dist/components/p-DzM3SzPz.js +0 -2
- package/dist/components/p-DzM3SzPz.js.map +0 -1
- package/dist/components/p-G3qIxpQj.js +0 -2
- package/dist/components/p-G3qIxpQj.js.map +0 -1
- package/dist/components/p-Re2kPrXm.js +0 -2
- package/dist/components/p-Re2kPrXm.js.map +0 -1
- package/dist/components/p-huw1oRbt.js +0 -2
- package/dist/components/p-huw1oRbt.js.map +0 -1
- package/dist/framework/select-multi-value-accessor.d.ts +0 -9
- package/dist/framework/select-multi-value-accessor.js +0 -40
- package/dist/lib/shell/badge-gradient-ring.d.ts +0 -27
- package/dist/lib/shell/chrome-transition.d.ts +0 -32
- package/dist/lib/shell/shell-chrome-metrics.d.ts +0 -11
- package/dist/lib/shell/shell-gradient.d.ts +0 -41
- package/dist/lib/shell/shell-view-transition.d.ts +0 -23
- package/dist/mcp-data/registry/card-data-viz-bar.json +0 -213
- package/dist/mcp-data/registry/card-data-viz-donut.json +0 -214
- package/dist/mcp-data/registry/card-data-viz-line.json +0 -207
- package/dist/mcp-data/registry/card-shell-data-viz.json +0 -180
- package/dist/mcp-data/registry/chart-bar-stacked.json +0 -230
- package/dist/mcp-data/registry/select-multi.json +0 -758
- package/dist/mcp-data/registry/shell-gradient-picker.json +0 -195
- package/dist/mcp-data/registry/shell-gradient-swatch.json +0 -215
- package/dist/react/ds-card-data-viz-bar.d.ts +0 -12
- package/dist/react/ds-card-data-viz-bar.js +0 -12
- package/dist/react/ds-card-data-viz-donut.d.ts +0 -12
- package/dist/react/ds-card-data-viz-donut.js +0 -12
- package/dist/react/ds-card-data-viz-line.d.ts +0 -12
- package/dist/react/ds-card-data-viz-line.js +0 -12
- package/dist/react/ds-card-shell-data-viz.d.ts +0 -9
- package/dist/react/ds-card-shell-data-viz.js +0 -12
- package/dist/react/ds-chart-bar-stacked.d.ts +0 -9
- package/dist/react/ds-chart-bar-stacked.js +0 -12
- package/dist/react/ds-select-multi.d.ts +0 -14
- package/dist/react/ds-select-multi.js +0 -16
- package/dist/react/ds-shell-gradient-picker.d.ts +0 -12
- package/dist/react/ds-shell-gradient-picker.js +0 -12
- package/dist/react/ds-shell-gradient-swatch.d.ts +0 -12
- package/dist/react/ds-shell-gradient-swatch.js +0 -12
- package/dist/types/components/CardDataVizBar/CardDataVizBar.d.ts +0 -24
- package/dist/types/components/CardDataVizBar/index.d.ts +0 -2
- package/dist/types/components/CardDataVizDonut/CardDataVizDonut.d.ts +0 -28
- package/dist/types/components/CardDataVizDonut/index.d.ts +0 -2
- package/dist/types/components/CardDataVizLine/CardDataVizLine.d.ts +0 -24
- package/dist/types/components/CardDataVizLine/index.d.ts +0 -2
- package/dist/types/components/CardShellDataViz/CardShellDataViz.d.ts +0 -13
- package/dist/types/components/CardShellDataViz/index.d.ts +0 -2
- package/dist/types/components/ChartBarStacked/ChartBarStacked.d.ts +0 -26
- package/dist/types/components/ChartBarStacked/index.d.ts +0 -3
- package/dist/types/components/SelectMulti/SelectMulti.d.ts +0 -121
- package/dist/types/components/SelectMulti/index.d.ts +0 -2
- package/dist/types/components/ShellGradientPicker/ShellGradientPicker.d.ts +0 -12
- package/dist/types/components/ShellGradientSwatch/ShellGradientSwatch.d.ts +0 -15
- package/dist/types/components/ShellGradientSwatch/shell-gradient-swatch-types.d.ts +0 -4
- /package/dist/components/{p-DB9XJm2c.js.map → p-6qXDqCj_.js.map} +0 -0
- /package/dist/components/{p-DhLmoCe_.js.map → p-B1cbQ0SG.js.map} +0 -0
- /package/dist/components/{p-BKOlvCGS.js.map → p-BUZXuod2.js.map} +0 -0
- /package/dist/components/{p-Utr23NC-.js.map → p-BaUsq_VK.js.map} +0 -0
- /package/dist/components/{p-BO5aqZcf.js.map → p-BcTYhmku.js.map} +0 -0
- /package/dist/components/{p-BlHzmszE.js.map → p-BroVnDzE.js.map} +0 -0
- /package/dist/components/{p-BFRMwl93.js.map → p-BsoqsbBh.js.map} +0 -0
- /package/dist/components/{p-ukB-dPOK.js.map → p-CBazaRlE.js.map} +0 -0
- /package/dist/components/{p-CNgPwd11.js.map → p-CHuh71-U.js.map} +0 -0
- /package/dist/components/{p-D9u1_OEZ.js.map → p-CMWata9g.js.map} +0 -0
- /package/dist/components/{p-38PfdMkF.js.map → p-DeQwkbT1.js.map} +0 -0
- /package/dist/components/{p-Vdufoj7G.js.map → p-Df17mJqI.js.map} +0 -0
- /package/dist/components/{p-69lHhJiX.js.map → p-ohsLFap_.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": "13.0.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -687,7 +687,7 @@
|
|
|
687
687
|
],
|
|
688
688
|
"frameworkCaveats": {
|
|
689
689
|
"customElements": [
|
|
690
|
-
"Assign tabs as a JavaScript property
|
|
690
|
+
"Assign tabs as a JavaScript property and replace the array reference when the collection changes.",
|
|
691
691
|
"Update tabs, heading, basePath, currentUrl, and navStyle from the same resolved route state."
|
|
692
692
|
],
|
|
693
693
|
"react": [
|
|
@@ -739,10 +739,6 @@
|
|
|
739
739
|
"type": "BarNavTab[]",
|
|
740
740
|
"required": false
|
|
741
741
|
},
|
|
742
|
-
"tabsJson": {
|
|
743
|
-
"type": "string",
|
|
744
|
-
"required": false
|
|
745
|
-
},
|
|
746
742
|
"value": {
|
|
747
743
|
"type": "string",
|
|
748
744
|
"required": false
|
|
@@ -1321,7 +1317,7 @@
|
|
|
1321
1317
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
1322
1318
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
1323
1319
|
"Physical press scaling is on by default. Disable it only when an owning composite must keep child or background geometry fixed; hover and pressed interaction washes remain available.",
|
|
1324
|
-
"ButtonFilled has no active or selected state; a filled action is a command, not a toggle or a persistent selection.",
|
|
1320
|
+
"ButtonFilled has no active, pressed, or selected state; a filled action is a command, not a toggle or a persistent selection.",
|
|
1325
1321
|
"An open popup is a transient pressed state instead. While expanded is true the pressed wash is held for the popup's complete rendered lifecycle and survives hover, so the trigger reads as held open without introducing a selected treatment.",
|
|
1326
1322
|
"hasMenu supports only the label and icon-label variants. The chevron is what communicates that a menu will open, so an icon-only filled menu button would leave the affordance unstated."
|
|
1327
1323
|
],
|
|
@@ -1404,10 +1400,6 @@
|
|
|
1404
1400
|
"type": "boolean",
|
|
1405
1401
|
"required": false
|
|
1406
1402
|
},
|
|
1407
|
-
"pressed": {
|
|
1408
|
-
"type": "boolean | undefined",
|
|
1409
|
-
"required": false
|
|
1410
|
-
},
|
|
1411
1403
|
"rounded": {
|
|
1412
1404
|
"type": "boolean",
|
|
1413
1405
|
"required": false
|
|
@@ -1448,6 +1440,7 @@
|
|
|
1448
1440
|
"@ds-mo/icons"
|
|
1449
1441
|
],
|
|
1450
1442
|
"componentDependencies": [
|
|
1443
|
+
"badge",
|
|
1451
1444
|
"icon",
|
|
1452
1445
|
"loader",
|
|
1453
1446
|
"text"
|
|
@@ -1506,7 +1499,7 @@
|
|
|
1506
1499
|
"Set hasMenu when the button triggers a Menu; it implies aria-haspopup of menu. Pass controls with the Menu id and expanded from the same open state given to Menu.",
|
|
1507
1500
|
"Give an icon-only menu button an accessible name that states the role, such as More options, because no visible label or chevron carries it.",
|
|
1508
1501
|
"Use haspopup directly for a non-menu popup such as a listbox or dialog; those cases get no chevron.",
|
|
1509
|
-
"Use
|
|
1502
|
+
"Use pressed only for a genuine toggle button; it supplies aria-pressed and dsChange intent. Use isActive only for owner-controlled visual emphasis inside a composite whose selection semantics live on the owner.",
|
|
1510
1503
|
"Treat notification dots as supplemental unread or status information; never use a dot as the sole state, meaning, or accessible name.",
|
|
1511
1504
|
"Loading keeps the action focused and named, exposes busy and disabled state, and blocks activation; announce broader operation progress from the owning workflow when needed.",
|
|
1512
1505
|
"Use inactive state only when an unavailable action must remain visible.",
|
|
@@ -1514,8 +1507,9 @@
|
|
|
1514
1507
|
],
|
|
1515
1508
|
"states": [
|
|
1516
1509
|
"Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
|
|
1517
|
-
"
|
|
1518
|
-
"
|
|
1510
|
+
"A true pressed toggle and owner-controlled isActive emphasis share the selected visual treatment, but only pressed supplies toggle semantics and dsChange.",
|
|
1511
|
+
"General content UI keeps the selected interaction fill and border for pressed or active emphasis.",
|
|
1512
|
+
"Shell, navigation, and tool-rail composites use isActive with foreground-only emphasis and no selected fill or border.",
|
|
1519
1513
|
"The omitted default surface treatment is for primary and secondary parent surfaces and uses the brand-active selected fill; pass faint explicitly on faint surfaces to use the neutral active fill.",
|
|
1520
1514
|
"Surface context must match the actual parent surface; translucent, inverted, media, and always-dark treatments are reserved for those surfaces.",
|
|
1521
1515
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
@@ -1536,10 +1530,10 @@
|
|
|
1536
1530
|
"Roving-focus composites own the button's tab-stop placement and selection semantics."
|
|
1537
1531
|
],
|
|
1538
1532
|
"react": [
|
|
1539
|
-
"
|
|
1533
|
+
"Use pressed for controlled toggles and isActive for composite-owned emphasis; keep async state synchronized from the owner."
|
|
1540
1534
|
],
|
|
1541
1535
|
"angular": [
|
|
1542
|
-
"
|
|
1536
|
+
"Use pressed for controlled toggles and isActive for composite-owned emphasis; keep async state synchronized from the owner."
|
|
1543
1537
|
]
|
|
1544
1538
|
},
|
|
1545
1539
|
"references": [
|
|
@@ -1670,203 +1664,79 @@
|
|
|
1670
1664
|
]
|
|
1671
1665
|
},
|
|
1672
1666
|
{
|
|
1673
|
-
"id": "component:ds-card-data-viz
|
|
1674
|
-
"tag": "ds-card-data-viz
|
|
1675
|
-
"name": "card-data-viz
|
|
1676
|
-
"title": "
|
|
1677
|
-
"summary": "
|
|
1667
|
+
"id": "component:ds-card-data-viz",
|
|
1668
|
+
"tag": "ds-card-data-viz",
|
|
1669
|
+
"name": "card-data-viz",
|
|
1670
|
+
"title": "CardDataViz",
|
|
1671
|
+
"summary": "Standard data-visualization card chrome with variant-owned chart and legend composition.",
|
|
1678
1672
|
"intentStatus": "complete",
|
|
1679
1673
|
"intent": {
|
|
1680
1674
|
"audience": "specialized",
|
|
1681
1675
|
"status": "experimental",
|
|
1682
|
-
"summary": "
|
|
1676
|
+
"summary": "Standard data-visualization card chrome with variant-owned chart and legend composition.",
|
|
1683
1677
|
"useWhen": [
|
|
1684
|
-
"A
|
|
1685
|
-
"
|
|
1678
|
+
"A chart, legend, metric visualization, or custom data-viz composition needs standard card chrome.",
|
|
1679
|
+
"Bar and line legends should remain static, or a donut and legend should cross-highlight without redundant donut tooltips.",
|
|
1680
|
+
"A data-viz card needs a visible heading, optional filter action, and application-owned chart data."
|
|
1686
1681
|
],
|
|
1687
1682
|
"avoidWhen": [
|
|
1688
|
-
"The
|
|
1689
|
-
"The
|
|
1683
|
+
"The card contains editable settings; use CardSetting.",
|
|
1684
|
+
"The surface contains ordinary non-visualization content.",
|
|
1685
|
+
"The application needs to replace the card chrome rather than compose its chart and actions."
|
|
1690
1686
|
],
|
|
1691
1687
|
"alternatives": [
|
|
1692
1688
|
{
|
|
1693
|
-
"when": "The
|
|
1694
|
-
"component": "component:ds-
|
|
1695
|
-
"reason": "
|
|
1696
|
-
},
|
|
1697
|
-
{
|
|
1698
|
-
"when": "The visualization communicates change as continuous lines.",
|
|
1699
|
-
"component": "component:ds-card-data-viz-line",
|
|
1700
|
-
"reason": "CardDataVizLine owns the canonical line-chart card layout."
|
|
1701
|
-
},
|
|
1702
|
-
{
|
|
1703
|
-
"when": "The visualization communicates parts of one total with synchronized slice emphasis.",
|
|
1704
|
-
"component": "component:ds-card-data-viz-donut",
|
|
1705
|
-
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1689
|
+
"when": "The surface contains editable settings.",
|
|
1690
|
+
"component": "component:ds-card-setting",
|
|
1691
|
+
"reason": "CardSetting owns the controlled settings-section workflow."
|
|
1706
1692
|
}
|
|
1707
1693
|
],
|
|
1708
1694
|
"commonlyComposedWith": [
|
|
1709
|
-
"component:ds-card-shell-data-viz",
|
|
1710
1695
|
"component:ds-chart-bar",
|
|
1711
|
-
"component:ds-chart-bar-stacked",
|
|
1712
|
-
"component:ds-chart-legend",
|
|
1713
|
-
"component:ds-button-unfilled"
|
|
1714
|
-
],
|
|
1715
|
-
"accessibility": [
|
|
1716
|
-
"Provide a concise heading that identifies the measure and meaningful visible labels for every legend entry.",
|
|
1717
|
-
"Keep essential series and value context available textually rather than relying on bar color alone.",
|
|
1718
|
-
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1719
|
-
],
|
|
1720
|
-
"states": [
|
|
1721
|
-
"Bar, Line, and Donut cards share the same fill-chart and content-sized-legend body contract so dashboard card geometry remains aligned across chart types.",
|
|
1722
|
-
"The chart region fills the remaining card body while an optional legend remains content-sized.",
|
|
1723
|
-
"The card disables local hover highlighting on a slotted ChartLegend because bar legends are static keys.",
|
|
1724
|
-
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1725
|
-
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1726
|
-
],
|
|
1727
|
-
"responsiveBehavior": [
|
|
1728
|
-
"The selected sm, md, or lg shell size controls the card dimensions while the bar chart reflows to the chart region without visually scaling its primitives.",
|
|
1729
|
-
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1730
|
-
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1731
|
-
],
|
|
1732
|
-
"frameworkCaveats": {
|
|
1733
|
-
"customElements": [
|
|
1734
|
-
"Assign data or series and categories as JavaScript properties, then place the bar chart and optional legend in their named slots."
|
|
1735
|
-
],
|
|
1736
|
-
"react": [
|
|
1737
|
-
"Keep filter and dataset state in the owner; pass the chart and optional legend with chart and legend slot attributes."
|
|
1738
|
-
],
|
|
1739
|
-
"angular": [
|
|
1740
|
-
"Keep filter and dataset state in the owner; project the chart and optional legend into the chart and legend slots."
|
|
1741
|
-
]
|
|
1742
|
-
},
|
|
1743
|
-
"references": [
|
|
1744
|
-
{
|
|
1745
|
-
"label": "Storybook examples",
|
|
1746
|
-
"path": "src/wc/components/CardDataVizBar/CardDataVizBar.stories.ts"
|
|
1747
|
-
}
|
|
1748
|
-
]
|
|
1749
|
-
},
|
|
1750
|
-
"api": {
|
|
1751
|
-
"props": {
|
|
1752
|
-
"cardWidth": {
|
|
1753
|
-
"type": "CardDataVizBarWidth",
|
|
1754
|
-
"required": false
|
|
1755
|
-
},
|
|
1756
|
-
"filterLabel": {
|
|
1757
|
-
"type": "string",
|
|
1758
|
-
"required": false
|
|
1759
|
-
},
|
|
1760
|
-
"heading": {
|
|
1761
|
-
"type": "string",
|
|
1762
|
-
"required": true
|
|
1763
|
-
}
|
|
1764
|
-
},
|
|
1765
|
-
"events": [
|
|
1766
|
-
{
|
|
1767
|
-
"name": "dsFilterClick",
|
|
1768
|
-
"detail": "void"
|
|
1769
|
-
}
|
|
1770
|
-
],
|
|
1771
|
-
"slots": []
|
|
1772
|
-
},
|
|
1773
|
-
"exports": {
|
|
1774
|
-
"customElement": "ds-card-data-viz-bar",
|
|
1775
|
-
"react": "DsCardDataVizBar",
|
|
1776
|
-
"angular": "DsCardDataVizBar"
|
|
1777
|
-
},
|
|
1778
|
-
"dependencies": [
|
|
1779
|
-
"@ds-mo/ui",
|
|
1780
|
-
"@ds-mo/tokens"
|
|
1781
|
-
],
|
|
1782
|
-
"componentDependencies": [
|
|
1783
|
-
"button-unfilled",
|
|
1784
|
-
"card-shell-data-viz"
|
|
1785
|
-
]
|
|
1786
|
-
},
|
|
1787
|
-
{
|
|
1788
|
-
"id": "component:ds-card-data-viz-donut",
|
|
1789
|
-
"tag": "ds-card-data-viz-donut",
|
|
1790
|
-
"name": "card-data-viz-donut",
|
|
1791
|
-
"title": "CardDataVizDonut",
|
|
1792
|
-
"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.",
|
|
1793
|
-
"intentStatus": "complete",
|
|
1794
|
-
"intent": {
|
|
1795
|
-
"audience": "specialized",
|
|
1796
|
-
"status": "experimental",
|
|
1797
|
-
"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.",
|
|
1798
|
-
"useWhen": [
|
|
1799
|
-
"A dashboard widget needs the standard donut and visible legend composition in one data-viz card.",
|
|
1800
|
-
"Chart slices and legend rows should cross-highlight without application hover wiring.",
|
|
1801
|
-
"The card needs the shared header filter action while the application owns filter state and menu content."
|
|
1802
|
-
],
|
|
1803
|
-
"avoidWhen": [
|
|
1804
|
-
"The visualization is a bar, line, metric, or custom chart; compose CardShellDataViz directly.",
|
|
1805
|
-
"The product needs a custom legend treatment such as chips, external stat callouts, or selectable filters.",
|
|
1806
|
-
"The surface is a settings section or generic content card."
|
|
1807
|
-
],
|
|
1808
|
-
"alternatives": [
|
|
1809
|
-
{
|
|
1810
|
-
"when": "The visualization needs shared data-viz chrome without the canonical donut layout.",
|
|
1811
|
-
"component": "component:ds-card-shell-data-viz",
|
|
1812
|
-
"reason": "CardShellDataViz owns only the header, actions, width, and body boundary."
|
|
1813
|
-
},
|
|
1814
|
-
{
|
|
1815
|
-
"when": "A donut and legend need a custom layout without card chrome.",
|
|
1816
|
-
"component": "component:ds-chart-donut",
|
|
1817
|
-
"reason": "Compose the chart and ChartLegend directly and own their layout and hover synchronization."
|
|
1818
|
-
}
|
|
1819
|
-
],
|
|
1820
|
-
"commonlyComposedWith": [
|
|
1821
|
-
"component:ds-card-shell-data-viz",
|
|
1822
1696
|
"component:ds-chart-donut",
|
|
1697
|
+
"component:ds-chart-line",
|
|
1823
1698
|
"component:ds-chart-legend",
|
|
1824
|
-
"component:ds-
|
|
1825
|
-
"component:ds-skeleton"
|
|
1699
|
+
"component:ds-button-unfilled"
|
|
1826
1700
|
],
|
|
1827
1701
|
"accessibility": [
|
|
1828
|
-
"Provide a concise
|
|
1829
|
-
"
|
|
1830
|
-
"
|
|
1702
|
+
"Provide a concise visible heading; the component renders it as a section heading.",
|
|
1703
|
+
"Slotted actions must provide accessible names and controlled-state semantics.",
|
|
1704
|
+
"Charts retain their own image names and data summaries.",
|
|
1705
|
+
"A visible donut legend owns persistent labels and values, so donut mode suppresses the redundant slice tooltip."
|
|
1831
1706
|
],
|
|
1832
1707
|
"states": [
|
|
1833
|
-
"
|
|
1834
|
-
"
|
|
1835
|
-
"
|
|
1836
|
-
"
|
|
1837
|
-
"The filter action emits intent while the parent owns popup content, applied constraints, and data updates."
|
|
1708
|
+
"Custom mode provides flexible body chrome and does not mutate chart or legend interaction.",
|
|
1709
|
+
"Bar and line modes keep a slotted legend static by disabling hover emphasis.",
|
|
1710
|
+
"Donut mode synchronizes active labels between chart and legend and shows chart tooltips only when no legend is present.",
|
|
1711
|
+
"showFilter adds the standard filter action and emits dsFilterClick without owning filter state."
|
|
1838
1712
|
],
|
|
1839
1713
|
"responsiveBehavior": [
|
|
1840
|
-
"
|
|
1841
|
-
"The
|
|
1842
|
-
"
|
|
1714
|
+
"The sm, md, or lg width sets a matching token-based minimum height and remains constrained by its parent.",
|
|
1715
|
+
"The body allocates remaining height to the chart while legends retain content height.",
|
|
1716
|
+
"Parent layouts own wrapping, stacking, and breakpoint-dependent card width."
|
|
1843
1717
|
],
|
|
1844
1718
|
"frameworkCaveats": {
|
|
1845
1719
|
"customElements": [
|
|
1846
|
-
"
|
|
1720
|
+
"Set variant to bar, line, or donut when the component should manage legend interaction; slot chart, legend, actions, and supporting content by name."
|
|
1847
1721
|
],
|
|
1848
1722
|
"react": [
|
|
1849
|
-
"Keep
|
|
1723
|
+
"Keep chart data in React and pass chart, legend, and action elements through named slots."
|
|
1850
1724
|
],
|
|
1851
1725
|
"angular": [
|
|
1852
|
-
"Keep
|
|
1726
|
+
"Keep chart data in Angular and project chart, legend, and action elements through named slots."
|
|
1853
1727
|
]
|
|
1854
1728
|
},
|
|
1855
1729
|
"references": [
|
|
1856
1730
|
{
|
|
1857
1731
|
"label": "Storybook examples",
|
|
1858
|
-
"path": "src/wc/components/
|
|
1859
|
-
},
|
|
1860
|
-
{
|
|
1861
|
-
"label": "Dashboard review examples",
|
|
1862
|
-
"path": "src/wc/stories/DataViz/OverviewReview.stories.ts"
|
|
1732
|
+
"path": "src/wc/components/CardDataViz/CardDataViz.stories.ts"
|
|
1863
1733
|
}
|
|
1864
1734
|
]
|
|
1865
1735
|
},
|
|
1866
1736
|
"api": {
|
|
1867
1737
|
"props": {
|
|
1868
1738
|
"cardWidth": {
|
|
1869
|
-
"type": "
|
|
1739
|
+
"type": "CardDataVizWidth",
|
|
1870
1740
|
"required": false
|
|
1871
1741
|
},
|
|
1872
1742
|
"filterLabel": {
|
|
@@ -1876,115 +1746,14 @@
|
|
|
1876
1746
|
"heading": {
|
|
1877
1747
|
"type": "string",
|
|
1878
1748
|
"required": true
|
|
1879
|
-
}
|
|
1880
|
-
},
|
|
1881
|
-
"events": [
|
|
1882
|
-
{
|
|
1883
|
-
"name": "dsFilterClick",
|
|
1884
|
-
"detail": "void"
|
|
1885
|
-
}
|
|
1886
|
-
],
|
|
1887
|
-
"slots": []
|
|
1888
|
-
},
|
|
1889
|
-
"exports": {
|
|
1890
|
-
"customElement": "ds-card-data-viz-donut",
|
|
1891
|
-
"react": "DsCardDataVizDonut",
|
|
1892
|
-
"angular": "DsCardDataVizDonut"
|
|
1893
|
-
},
|
|
1894
|
-
"dependencies": [
|
|
1895
|
-
"@ds-mo/ui",
|
|
1896
|
-
"@ds-mo/tokens"
|
|
1897
|
-
],
|
|
1898
|
-
"componentDependencies": [
|
|
1899
|
-
"button-unfilled",
|
|
1900
|
-
"card-shell-data-viz"
|
|
1901
|
-
]
|
|
1902
|
-
},
|
|
1903
|
-
{
|
|
1904
|
-
"id": "component:ds-card-data-viz-line",
|
|
1905
|
-
"tag": "ds-card-data-viz-line",
|
|
1906
|
-
"name": "card-data-viz-line",
|
|
1907
|
-
"title": "CardDataVizLine",
|
|
1908
|
-
"summary": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1909
|
-
"intentStatus": "complete",
|
|
1910
|
-
"intent": {
|
|
1911
|
-
"audience": "specialized",
|
|
1912
|
-
"status": "experimental",
|
|
1913
|
-
"summary": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1914
|
-
"useWhen": [
|
|
1915
|
-
"A dashboard widget needs the standard line chart and visible series key in one data-viz card.",
|
|
1916
|
-
"The legend identifies static line series and should not highlight or dim rows on hover."
|
|
1917
|
-
],
|
|
1918
|
-
"avoidWhen": [
|
|
1919
|
-
"The visualization needs chart-to-legend hover synchronization or selectable series controls.",
|
|
1920
|
-
"The product needs a custom legend treatment, supporting metrics, or an alternate chart layout."
|
|
1921
|
-
],
|
|
1922
|
-
"alternatives": [
|
|
1923
|
-
{
|
|
1924
|
-
"when": "The line chart and legend need a custom layout without card chrome.",
|
|
1925
|
-
"component": "component:ds-chart-line",
|
|
1926
|
-
"reason": "Compose ChartLine and a static ChartLegend directly in the product-owned layout."
|
|
1927
1749
|
},
|
|
1928
|
-
{
|
|
1929
|
-
"
|
|
1930
|
-
"component": "component:ds-card-data-viz-donut",
|
|
1931
|
-
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1932
|
-
}
|
|
1933
|
-
],
|
|
1934
|
-
"commonlyComposedWith": [
|
|
1935
|
-
"component:ds-card-shell-data-viz",
|
|
1936
|
-
"component:ds-chart-line",
|
|
1937
|
-
"component:ds-chart-legend",
|
|
1938
|
-
"component:ds-button-unfilled"
|
|
1939
|
-
],
|
|
1940
|
-
"accessibility": [
|
|
1941
|
-
"Provide a concise heading that identifies the trend and meaningful visible labels for every legend entry.",
|
|
1942
|
-
"Keep essential series and value context available textually rather than relying on line color alone.",
|
|
1943
|
-
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1944
|
-
],
|
|
1945
|
-
"states": [
|
|
1946
|
-
"Bar, Line, and Donut cards share the same fill-chart and content-sized-legend body contract so dashboard card geometry remains aligned across chart types.",
|
|
1947
|
-
"The chart region fills the remaining card body while the legend remains content-sized.",
|
|
1948
|
-
"The card disables local hover highlighting on a slotted ChartLegend because the line chart is static.",
|
|
1949
|
-
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1950
|
-
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1951
|
-
],
|
|
1952
|
-
"responsiveBehavior": [
|
|
1953
|
-
"The selected sm, md, or lg shell size controls the card dimensions while the line chart reflows to the chart region without visually scaling its primitives.",
|
|
1954
|
-
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1955
|
-
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1956
|
-
],
|
|
1957
|
-
"frameworkCaveats": {
|
|
1958
|
-
"customElements": [
|
|
1959
|
-
"Assign series, categories, and legend items as JavaScript properties, then place the chart and legend in their named slots."
|
|
1960
|
-
],
|
|
1961
|
-
"react": [
|
|
1962
|
-
"Keep filter and dataset state in the owner; pass the chart and legend with chart and legend slot attributes."
|
|
1963
|
-
],
|
|
1964
|
-
"angular": [
|
|
1965
|
-
"Keep filter and dataset state in the owner; project the chart and legend into the chart and legend slots."
|
|
1966
|
-
]
|
|
1967
|
-
},
|
|
1968
|
-
"references": [
|
|
1969
|
-
{
|
|
1970
|
-
"label": "Storybook examples",
|
|
1971
|
-
"path": "src/wc/components/CardDataVizLine/CardDataVizLine.stories.ts"
|
|
1972
|
-
}
|
|
1973
|
-
]
|
|
1974
|
-
},
|
|
1975
|
-
"api": {
|
|
1976
|
-
"props": {
|
|
1977
|
-
"cardWidth": {
|
|
1978
|
-
"type": "CardDataVizLineWidth",
|
|
1750
|
+
"showFilter": {
|
|
1751
|
+
"type": "boolean",
|
|
1979
1752
|
"required": false
|
|
1980
1753
|
},
|
|
1981
|
-
"
|
|
1982
|
-
"type": "
|
|
1754
|
+
"variant": {
|
|
1755
|
+
"type": "CardDataVizVariant",
|
|
1983
1756
|
"required": false
|
|
1984
|
-
},
|
|
1985
|
-
"heading": {
|
|
1986
|
-
"type": "string",
|
|
1987
|
-
"required": true
|
|
1988
1757
|
}
|
|
1989
1758
|
},
|
|
1990
1759
|
"events": [
|
|
@@ -1996,9 +1765,9 @@
|
|
|
1996
1765
|
"slots": []
|
|
1997
1766
|
},
|
|
1998
1767
|
"exports": {
|
|
1999
|
-
"customElement": "ds-card-data-viz
|
|
2000
|
-
"react": "
|
|
2001
|
-
"angular": "
|
|
1768
|
+
"customElement": "ds-card-data-viz",
|
|
1769
|
+
"react": "DsCardDataViz",
|
|
1770
|
+
"angular": "DsCardDataViz"
|
|
2002
1771
|
},
|
|
2003
1772
|
"dependencies": [
|
|
2004
1773
|
"@ds-mo/ui",
|
|
@@ -2006,7 +1775,7 @@
|
|
|
2006
1775
|
],
|
|
2007
1776
|
"componentDependencies": [
|
|
2008
1777
|
"button-unfilled",
|
|
2009
|
-
"
|
|
1778
|
+
"text"
|
|
2010
1779
|
]
|
|
2011
1780
|
},
|
|
2012
1781
|
{
|
|
@@ -2014,12 +1783,12 @@
|
|
|
2014
1783
|
"tag": "ds-card-overview",
|
|
2015
1784
|
"name": "card-overview",
|
|
2016
1785
|
"title": "CardOverview",
|
|
2017
|
-
"summary": "Page-level summary
|
|
1786
|
+
"summary": "Page-level summary card pairing one headline score with a reporting period, an application-owned period control, and a responsive grid of comparable measures, with an optional elevated scroll-collapse surface and compact 48px presentation.",
|
|
2018
1787
|
"intentStatus": "complete",
|
|
2019
1788
|
"intent": {
|
|
2020
1789
|
"audience": "general",
|
|
2021
1790
|
"status": "experimental",
|
|
2022
|
-
"summary": "Page-level summary
|
|
1791
|
+
"summary": "Page-level summary card pairing one headline score with a reporting period, an application-owned period control, and a responsive grid of comparable measures, with an optional elevated scroll-collapse surface and compact 48px presentation.",
|
|
2023
1792
|
"useWhen": [
|
|
2024
1793
|
"A page opens with one headline figure that the surrounding measures explain.",
|
|
2025
1794
|
"Every measure is compared against the same period, so one caption describes the comparison for all of them.",
|
|
@@ -2034,8 +1803,8 @@
|
|
|
2034
1803
|
"alternatives": [
|
|
2035
1804
|
{
|
|
2036
1805
|
"when": "A measure needs a chart or other data visualization.",
|
|
2037
|
-
"component": "component:ds-card-
|
|
2038
|
-
"reason": "
|
|
1806
|
+
"component": "component:ds-card-data-viz",
|
|
1807
|
+
"reason": "CardDataViz owns the data-visualization card contract; the overview grid presents values and change only."
|
|
2039
1808
|
},
|
|
2040
1809
|
{
|
|
2041
1810
|
"when": "The surface is a settings section with an edit workflow.",
|
|
@@ -2063,26 +1832,38 @@
|
|
|
2063
1832
|
"Omit a trend when there is nothing to report; resolveMetricTrend returns null in that case so no zero change is rendered.",
|
|
2064
1833
|
"Omit score to render the bar without a headline figure. Set scoreErrorMessage to report that the figure could not be resolved while the measures remain readable.",
|
|
2065
1834
|
"Loading replaces the score and the measures with skeletons and does not alter the slotted period control.",
|
|
2066
|
-
"
|
|
1835
|
+
"At most six measures are shown. Keep larger collections outside the summary bar rather than turning it into a dense dashboard.",
|
|
1836
|
+
"The period control is slotted rather than owned, because the choice of stepper, select, or date range varies by product surface.",
|
|
1837
|
+
"During a page-controlled scroll collapse, the component preserves its expanded flow height while the elevated visual surface shrinks toward 48px and the full content translates upward inside an internal clip. The elevation remains fitted to the visible surface instead of being clipped with the content.",
|
|
1838
|
+
"compact is exactly 48px high and keeps only the score label, score value, trend, reporting copy, and slotted period control. It omits the score band, measures, and footer."
|
|
2067
1839
|
],
|
|
2068
1840
|
"responsiveBehavior": [
|
|
2069
1841
|
"The measure grid reflows to fewer columns and finally stacks, driven by the minimum measure width alone. There is no measurement and no horizontal scrolling.",
|
|
1842
|
+
"Every occupied grid track has the same width. When a final row is incomplete, its measures keep the same width as the row above and the unused tracks remain empty.",
|
|
2070
1843
|
"Set metricMinWidth to change the width a measure may shrink to before the grid drops a column.",
|
|
2071
1844
|
"The score block hugs its content and never shrinks, so the headline figure holds its size while the grid absorbs the remaining width.",
|
|
2072
|
-
"
|
|
1845
|
+
"Once the card reaches its narrow stacked state, one summary block holds the score label, score, trend, score band, reporting period, and the application-owned period control above the single-column measures.",
|
|
1846
|
+
"In that stacked summary, the score and trend share one line at the start, while the score band is hidden to preserve space. The period control stays at the upper end, while the current period and comparison sit on separate right-aligned lines beside the score.",
|
|
1847
|
+
"Every measure occupies a full-width row in the stacked state.",
|
|
1848
|
+
"Set layout to stacked when the owning page shell enters a responsive mode before the card's own container reaches its narrow threshold.",
|
|
1849
|
+
"CardOverview does not observe scroll, choose sticky offsets, or switch its own presentation. The page owner supplies collapse progress, keeps the card sticky at the appropriate shell inset, and swaps to compact at the 48px endpoint.",
|
|
1850
|
+
"Leave scroll collapse inactive on page modes that do not support sticky compact summary chrome."
|
|
2073
1851
|
],
|
|
2074
1852
|
"frameworkCaveats": {
|
|
2075
1853
|
"customElements": [
|
|
2076
1854
|
"Assign score and metrics as JavaScript properties; both are objects and cannot be expressed as HTML attributes.",
|
|
2077
|
-
"Place the period control in the filter slot; the component reserves space for it but never renders one."
|
|
1855
|
+
"Place the period control in the filter slot; the component reserves space for it but never renders one.",
|
|
1856
|
+
"When driving scroll collapse, update scrollCollapseProgress from page-owned geometry and swap to a separate compact presentation at the endpoint."
|
|
2078
1857
|
],
|
|
2079
1858
|
"react": [
|
|
2080
1859
|
"Pass score and metrics as props and read the selected measure from the onDsMetricSelect event detail.",
|
|
2081
|
-
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision."
|
|
1860
|
+
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision.",
|
|
1861
|
+
"Keep sticky geometry and scrollCollapseProgress in the page owner; CardOverview only renders the visual collapse."
|
|
2082
1862
|
],
|
|
2083
1863
|
"angular": [
|
|
2084
1864
|
"Bind [score] and [metrics] as properties and read the selected measure from $event.detail on (dsMetricSelect).",
|
|
2085
|
-
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision."
|
|
1865
|
+
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision.",
|
|
1866
|
+
"Keep sticky geometry and [scrollCollapseProgress] in the page owner; CardOverview only renders the visual collapse."
|
|
2086
1867
|
]
|
|
2087
1868
|
},
|
|
2088
1869
|
"references": [
|
|
@@ -2106,6 +1887,10 @@
|
|
|
2106
1887
|
"type": "boolean",
|
|
2107
1888
|
"required": false
|
|
2108
1889
|
},
|
|
1890
|
+
"layout": {
|
|
1891
|
+
"type": "CardOverviewLayout",
|
|
1892
|
+
"required": false
|
|
1893
|
+
},
|
|
2109
1894
|
"metricMinWidth": {
|
|
2110
1895
|
"type": "string",
|
|
2111
1896
|
"required": false
|
|
@@ -2129,6 +1914,14 @@
|
|
|
2129
1914
|
"scoreErrorMessage": {
|
|
2130
1915
|
"type": "string | undefined",
|
|
2131
1916
|
"required": false
|
|
1917
|
+
},
|
|
1918
|
+
"scrollCollapseProgress": {
|
|
1919
|
+
"type": "number",
|
|
1920
|
+
"required": false
|
|
1921
|
+
},
|
|
1922
|
+
"variant": {
|
|
1923
|
+
"type": "CardOverviewVariant",
|
|
1924
|
+
"required": false
|
|
2132
1925
|
}
|
|
2133
1926
|
},
|
|
2134
1927
|
"events": [
|
|
@@ -2182,8 +1975,8 @@
|
|
|
2182
1975
|
"alternatives": [
|
|
2183
1976
|
{
|
|
2184
1977
|
"when": "The surface contains a chart or specialized data-visualization composition.",
|
|
2185
|
-
"component": "component:ds-card-
|
|
2186
|
-
"reason": "
|
|
1978
|
+
"component": "component:ds-card-data-viz",
|
|
1979
|
+
"reason": "CardDataViz owns the independently evolving data-visualization card contract."
|
|
2187
1980
|
},
|
|
2188
1981
|
{
|
|
2189
1982
|
"when": "The task must block the interface for one focused decision or short workflow.",
|
|
@@ -2300,141 +2093,30 @@
|
|
|
2300
2093
|
"text"
|
|
2301
2094
|
]
|
|
2302
2095
|
},
|
|
2303
|
-
{
|
|
2304
|
-
"id": "component:ds-card-shell-data-viz",
|
|
2305
|
-
"tag": "ds-card-shell-data-viz",
|
|
2306
|
-
"name": "card-shell-data-viz",
|
|
2307
|
-
"title": "CardShellDataViz",
|
|
2308
|
-
"summary": "Dedicated header, action, sizing, and body chrome for data-visualization cards whose layouts evolve independently from settings sections.",
|
|
2309
|
-
"intentStatus": "complete",
|
|
2310
|
-
"intent": {
|
|
2311
|
-
"audience": "specialized",
|
|
2312
|
-
"status": "experimental",
|
|
2313
|
-
"summary": "Dedicated header, action, sizing, and body chrome for data-visualization cards whose layouts evolve independently from settings sections.",
|
|
2314
|
-
"useWhen": [
|
|
2315
|
-
"A card contains a chart, data-visualization legend, metric visualization, or a specialized data-viz composition.",
|
|
2316
|
-
"A data-visualization card needs a heading and optional header actions while retaining a flexible body for its composing component.",
|
|
2317
|
-
"Several chart-specific cards need one shell boundary that can evolve without changing settings sections."
|
|
2318
|
-
],
|
|
2319
|
-
"avoidWhen": [
|
|
2320
|
-
"The card contains settings or editable form content; use the settings card composition.",
|
|
2321
|
-
"The surface is ordinary content without data visualization; use a product-owned layout rather than data-viz card chrome.",
|
|
2322
|
-
"The shell would own chart-specific layout, hover synchronization, legends, or empty-state policy; keep those in the composing data-viz card."
|
|
2323
|
-
],
|
|
2324
|
-
"alternatives": [
|
|
2325
|
-
{
|
|
2326
|
-
"when": "The surface contains editable settings rather than data visualization.",
|
|
2327
|
-
"component": "component:ds-card-setting",
|
|
2328
|
-
"reason": "CardSetting owns the persistent controlled settings-section workflow."
|
|
2329
|
-
},
|
|
2330
|
-
{
|
|
2331
|
-
"when": "The composition is the standard donut chart plus synchronized legend.",
|
|
2332
|
-
"component": "component:ds-card-data-viz-donut",
|
|
2333
|
-
"reason": "CardDataVizDonut composes this shell with donut-specific regions and hover synchronization."
|
|
2334
|
-
},
|
|
2335
|
-
{
|
|
2336
|
-
"when": "The composition is the standard line chart plus static horizontal legend.",
|
|
2337
|
-
"component": "component:ds-card-data-viz-line",
|
|
2338
|
-
"reason": "CardDataVizLine composes this shell with line-specific regions and disables decorative legend hover."
|
|
2339
|
-
}
|
|
2340
|
-
],
|
|
2341
|
-
"commonlyComposedWith": [
|
|
2342
|
-
"component:ds-chart-bar",
|
|
2343
|
-
"component:ds-chart-bar-stacked",
|
|
2344
|
-
"component:ds-chart-donut",
|
|
2345
|
-
"component:ds-chart-line",
|
|
2346
|
-
"component:ds-chart-legend",
|
|
2347
|
-
"component:ds-card-data-viz-line",
|
|
2348
|
-
"component:ds-button-unfilled"
|
|
2349
|
-
],
|
|
2350
|
-
"accessibility": [
|
|
2351
|
-
"Provide a concise visible heading that identifies the visualization; the shell renders it as a section heading.",
|
|
2352
|
-
"Header actions must provide their own accessible names and communicate any controlled state or popup relationship.",
|
|
2353
|
-
"The shell does not add landmark or chart semantics; composing charts retain their own accessible names and descriptions.",
|
|
2354
|
-
"Do not duplicate chart data in the heading. Provide an accessible summary through the chart or adjacent composition when visual encoding alone is insufficient."
|
|
2355
|
-
],
|
|
2356
|
-
"states": [
|
|
2357
|
-
"The shell owns default data-visualization surface chrome only; loading, empty, error, selected, and interactive states belong to the composing card or chart.",
|
|
2358
|
-
"The actions slot collapses when empty so headings retain the available header width."
|
|
2359
|
-
],
|
|
2360
|
-
"responsiveBehavior": [
|
|
2361
|
-
"The selected sm, md, or lg width sets the matching token-based minimum height while max-width prevents overflow from a narrower parent.",
|
|
2362
|
-
"The parent layout chooses card width, wrapping, stacking, and breakpoint changes; the shell does not switch sizes automatically.",
|
|
2363
|
-
"The body is a flexible column so specialized data-viz cards can allocate remaining height between charts, legends, and supporting content."
|
|
2364
|
-
],
|
|
2365
|
-
"frameworkCaveats": {
|
|
2366
|
-
"customElements": [
|
|
2367
|
-
"Place header controls in the actions slot and data-visualization composition in the default slot."
|
|
2368
|
-
],
|
|
2369
|
-
"react": [
|
|
2370
|
-
"Pass header controls with slot=\"actions\" and keep chart state in the composing React component."
|
|
2371
|
-
],
|
|
2372
|
-
"angular": [
|
|
2373
|
-
"Project header controls with slot=\"actions\" and keep chart state in the composing Angular component."
|
|
2374
|
-
]
|
|
2375
|
-
},
|
|
2376
|
-
"references": [
|
|
2377
|
-
{
|
|
2378
|
-
"label": "Storybook examples",
|
|
2379
|
-
"path": "src/wc/components/CardShellDataViz/CardShellDataViz.stories.ts"
|
|
2380
|
-
}
|
|
2381
|
-
]
|
|
2382
|
-
},
|
|
2383
|
-
"api": {
|
|
2384
|
-
"props": {
|
|
2385
|
-
"cardWidth": {
|
|
2386
|
-
"type": "CardShellDataVizWidth",
|
|
2387
|
-
"required": false
|
|
2388
|
-
},
|
|
2389
|
-
"heading": {
|
|
2390
|
-
"type": "string",
|
|
2391
|
-
"required": true
|
|
2392
|
-
}
|
|
2393
|
-
},
|
|
2394
|
-
"events": [],
|
|
2395
|
-
"slots": []
|
|
2396
|
-
},
|
|
2397
|
-
"exports": {
|
|
2398
|
-
"customElement": "ds-card-shell-data-viz",
|
|
2399
|
-
"react": "DsCardShellDataViz",
|
|
2400
|
-
"angular": "DsCardShellDataViz"
|
|
2401
|
-
},
|
|
2402
|
-
"dependencies": [
|
|
2403
|
-
"@ds-mo/ui",
|
|
2404
|
-
"@ds-mo/tokens"
|
|
2405
|
-
],
|
|
2406
|
-
"componentDependencies": [
|
|
2407
|
-
"text"
|
|
2408
|
-
]
|
|
2409
|
-
},
|
|
2410
2096
|
{
|
|
2411
2097
|
"id": "component:ds-chart-bar",
|
|
2412
2098
|
"tag": "ds-chart-bar",
|
|
2413
2099
|
"name": "chart-bar",
|
|
2414
2100
|
"title": "ChartBar",
|
|
2415
|
-
"summary": "
|
|
2101
|
+
"summary": "Bar chart for single-series magnitude, additive stacked totals, or normalized 0–100% composition across categories.",
|
|
2416
2102
|
"intentStatus": "complete",
|
|
2417
2103
|
"intent": {
|
|
2418
2104
|
"audience": "specialized",
|
|
2419
2105
|
"status": "experimental",
|
|
2420
|
-
"summary": "
|
|
2106
|
+
"summary": "Bar chart for single-series magnitude, additive stacked totals, or normalized 0–100% composition across categories.",
|
|
2421
2107
|
"useWhen": [
|
|
2422
2108
|
"Users need to compare one numeric measure across a small set of categories.",
|
|
2423
2109
|
"Values are grouped into ordered time buckets such as hours, days, weeks, or months and equal visual spacing is appropriate.",
|
|
2424
|
-
"A data-viz card needs a compact magnitude comparison rather than a continuous trend."
|
|
2110
|
+
"A data-viz card needs a compact magnitude comparison rather than a continuous trend.",
|
|
2111
|
+
"Several consistent series contribute to each category total or its normalized composition."
|
|
2425
2112
|
],
|
|
2426
2113
|
"avoidWhen": [
|
|
2427
2114
|
"Timestamp positions must reflect irregular elapsed time; pre-bucket the data or use a future continuous time-scale chart.",
|
|
2428
|
-
"The visualization needs
|
|
2115
|
+
"The visualization needs grouped bars or precise comparison of each individual series across categories.",
|
|
2429
2116
|
"The interaction requires selection, drill-down, brushing, or zoom.",
|
|
2430
2117
|
"The data communicates a part-to-whole relationship."
|
|
2431
2118
|
],
|
|
2432
2119
|
"alternatives": [
|
|
2433
|
-
{
|
|
2434
|
-
"when": "Each category contains several additive series or needs normalized composition.",
|
|
2435
|
-
"component": "component:ds-chart-bar-stacked",
|
|
2436
|
-
"reason": "ChartBarStacked compares raw stacked totals or normalized 0–100% composition."
|
|
2437
|
-
},
|
|
2438
2120
|
{
|
|
2439
2121
|
"when": "Users need to follow one or more trends across ordered categories.",
|
|
2440
2122
|
"component": "component:ds-chart-line",
|
|
@@ -2447,8 +2129,8 @@
|
|
|
2447
2129
|
}
|
|
2448
2130
|
],
|
|
2449
2131
|
"commonlyComposedWith": [
|
|
2450
|
-
"component:ds-chart-
|
|
2451
|
-
"component:ds-card-
|
|
2132
|
+
"component:ds-chart-legend",
|
|
2133
|
+
"component:ds-card-data-viz",
|
|
2452
2134
|
"component:ds-tooltip-data-viz"
|
|
2453
2135
|
],
|
|
2454
2136
|
"accessibility": [
|
|
@@ -2457,7 +2139,9 @@
|
|
|
2457
2139
|
"A future interactive tooltip must supplement rather than replace the chart's accessible value representation."
|
|
2458
2140
|
],
|
|
2459
2141
|
"states": [
|
|
2460
|
-
"The chart is
|
|
2142
|
+
"The chart is static without hover, selection, loading, or empty-state policy.",
|
|
2143
|
+
"Single mode reads data. Stacked and percentage modes read aligned series and categories.",
|
|
2144
|
+
"Stacked mode preserves raw totals; percentage mode normalizes every non-empty category to 100%.",
|
|
2461
2145
|
"An empty dataset renders no bars; the owning card or product supplies meaningful empty-state messaging.",
|
|
2462
2146
|
"Bars use 2px top corner radii while the lower corners touching the zero axis remain square.",
|
|
2463
2147
|
"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.",
|
|
@@ -2471,13 +2155,13 @@
|
|
|
2471
2155
|
],
|
|
2472
2156
|
"frameworkCaveats": {
|
|
2473
2157
|
"customElements": [
|
|
2474
|
-
"Assign data as
|
|
2158
|
+
"Assign data, series, and categories as JavaScript properties; arrays are not supported as HTML attributes."
|
|
2475
2159
|
],
|
|
2476
2160
|
"react": [
|
|
2477
|
-
"Pass
|
|
2161
|
+
"Pass stable data or series/category arrays; width and height provide standalone intrinsic dimensions while constrained containers reflow automatically."
|
|
2478
2162
|
],
|
|
2479
2163
|
"angular": [
|
|
2480
|
-
"Bind data as
|
|
2164
|
+
"Bind data or series/categories as properties; width and height provide standalone intrinsic dimensions while constrained containers reflow automatically."
|
|
2481
2165
|
]
|
|
2482
2166
|
},
|
|
2483
2167
|
"references": [
|
|
@@ -2489,6 +2173,10 @@
|
|
|
2489
2173
|
},
|
|
2490
2174
|
"api": {
|
|
2491
2175
|
"props": {
|
|
2176
|
+
"categories": {
|
|
2177
|
+
"type": "string[]",
|
|
2178
|
+
"required": false
|
|
2179
|
+
},
|
|
2492
2180
|
"data": {
|
|
2493
2181
|
"type": "ChartDatum[]",
|
|
2494
2182
|
"required": false
|
|
@@ -2497,6 +2185,14 @@
|
|
|
2497
2185
|
"type": "number",
|
|
2498
2186
|
"required": false
|
|
2499
2187
|
},
|
|
2188
|
+
"series": {
|
|
2189
|
+
"type": "ChartSeries[]",
|
|
2190
|
+
"required": false
|
|
2191
|
+
},
|
|
2192
|
+
"variant": {
|
|
2193
|
+
"type": "ChartBarVariant",
|
|
2194
|
+
"required": false
|
|
2195
|
+
},
|
|
2500
2196
|
"width": {
|
|
2501
2197
|
"type": "number",
|
|
2502
2198
|
"required": false
|
|
@@ -2516,124 +2212,6 @@
|
|
|
2516
2212
|
],
|
|
2517
2213
|
"componentDependencies": []
|
|
2518
2214
|
},
|
|
2519
|
-
{
|
|
2520
|
-
"id": "component:ds-chart-bar-stacked",
|
|
2521
|
-
"tag": "ds-chart-bar-stacked",
|
|
2522
|
-
"name": "chart-bar-stacked",
|
|
2523
|
-
"title": "ChartBarStacked",
|
|
2524
|
-
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2525
|
-
"intentStatus": "complete",
|
|
2526
|
-
"intent": {
|
|
2527
|
-
"audience": "specialized",
|
|
2528
|
-
"status": "experimental",
|
|
2529
|
-
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2530
|
-
"useWhen": [
|
|
2531
|
-
"Users need to compare both a category total and the contribution of several consistent series.",
|
|
2532
|
-
"A time series needs to show how its composition changes across equal time buckets.",
|
|
2533
|
-
"Every category should normalize to 100% so proportional composition can be compared independently of total magnitude."
|
|
2534
|
-
],
|
|
2535
|
-
"avoidWhen": [
|
|
2536
|
-
"Users need to compare individual series values precisely across categories; use grouped bars or separate charts.",
|
|
2537
|
-
"The visualization has only one measure per category; use ChartBar.",
|
|
2538
|
-
"The primary task is following continuous trends; use ChartLine.",
|
|
2539
|
-
"Series contain negative values or do not align with the shared category list."
|
|
2540
|
-
],
|
|
2541
|
-
"alternatives": [
|
|
2542
|
-
{
|
|
2543
|
-
"when": "Each category contains one independent value.",
|
|
2544
|
-
"component": "component:ds-chart-bar",
|
|
2545
|
-
"reason": "ChartBar provides the simpler single-series magnitude comparison."
|
|
2546
|
-
},
|
|
2547
|
-
{
|
|
2548
|
-
"when": "Users need to follow one or more trends rather than compare stack composition.",
|
|
2549
|
-
"component": "component:ds-chart-line",
|
|
2550
|
-
"reason": "ChartLine preserves each series as a continuous path across the ordered axis."
|
|
2551
|
-
},
|
|
2552
|
-
{
|
|
2553
|
-
"when": "One category's parts-to-whole composition is the focus.",
|
|
2554
|
-
"component": "component:ds-chart-donut",
|
|
2555
|
-
"reason": "ChartDonut provides the dedicated single-total composition treatment."
|
|
2556
|
-
}
|
|
2557
|
-
],
|
|
2558
|
-
"commonlyComposedWith": [
|
|
2559
|
-
"component:ds-chart-legend",
|
|
2560
|
-
"component:ds-card-shell-data-viz",
|
|
2561
|
-
"component:ds-tooltip-data-viz"
|
|
2562
|
-
],
|
|
2563
|
-
"accessibility": [
|
|
2564
|
-
"Provide a visible legend or adjacent textual summary that names every series; do not rely on segment color alone.",
|
|
2565
|
-
"The chart image name includes each category and series value, using normalized percentages in percentage mode.",
|
|
2566
|
-
"Use an adjacent data table when exact cross-category comparisons are necessary to complete the task."
|
|
2567
|
-
],
|
|
2568
|
-
"states": [
|
|
2569
|
-
"Stacked mode preserves raw magnitudes and scales the y-axis to the largest category total.",
|
|
2570
|
-
"Percentage mode normalizes each non-empty category independently and renders a fixed 0%, 25%, 50%, 75%, and 100% axis.",
|
|
2571
|
-
"Series render bottom-to-top in authored order; keep that order and color mapping stable across categories.",
|
|
2572
|
-
"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.",
|
|
2573
|
-
"Adjacent segments are separated by a non-scaling 1px gap; the stack's outer edges do not receive that separator.",
|
|
2574
|
-
"Negative values are unsupported and render as zero; the owning product supplies loading, empty, and error states."
|
|
2575
|
-
],
|
|
2576
|
-
"responsiveBehavior": [
|
|
2577
|
-
"Width and height provide the standalone intrinsic viewport; constrained card regions are measured and reflow both axes to their rendered pixel dimensions.",
|
|
2578
|
-
"Responsive layout changes stack positions and plot extents without scaling SVG text, strokes, separators, corner radii, or margins.",
|
|
2579
|
-
"The parent chooses how many time buckets remain legible at each width.",
|
|
2580
|
-
"Pre-format category labels and reduce bucket count before rendering when horizontal space becomes constrained."
|
|
2581
|
-
],
|
|
2582
|
-
"frameworkCaveats": {
|
|
2583
|
-
"customElements": [
|
|
2584
|
-
"Assign series and categories as JavaScript properties and keep every series aligned to the category count."
|
|
2585
|
-
],
|
|
2586
|
-
"react": [
|
|
2587
|
-
"Pass stable series and category arrays; choose percentage variant only when each category represents a meaningful whole."
|
|
2588
|
-
],
|
|
2589
|
-
"angular": [
|
|
2590
|
-
"Bind series and categories as properties; choose percentage variant only when each category represents a meaningful whole."
|
|
2591
|
-
]
|
|
2592
|
-
},
|
|
2593
|
-
"references": [
|
|
2594
|
-
{
|
|
2595
|
-
"label": "Storybook examples",
|
|
2596
|
-
"path": "src/wc/components/ChartBarStacked/ChartBarStacked.stories.ts"
|
|
2597
|
-
}
|
|
2598
|
-
]
|
|
2599
|
-
},
|
|
2600
|
-
"api": {
|
|
2601
|
-
"props": {
|
|
2602
|
-
"categories": {
|
|
2603
|
-
"type": "string[]",
|
|
2604
|
-
"required": false
|
|
2605
|
-
},
|
|
2606
|
-
"height": {
|
|
2607
|
-
"type": "number",
|
|
2608
|
-
"required": false
|
|
2609
|
-
},
|
|
2610
|
-
"series": {
|
|
2611
|
-
"type": "ChartSeries[]",
|
|
2612
|
-
"required": false
|
|
2613
|
-
},
|
|
2614
|
-
"variant": {
|
|
2615
|
-
"type": "ChartBarStackedVariant",
|
|
2616
|
-
"required": false
|
|
2617
|
-
},
|
|
2618
|
-
"width": {
|
|
2619
|
-
"type": "number",
|
|
2620
|
-
"required": false
|
|
2621
|
-
}
|
|
2622
|
-
},
|
|
2623
|
-
"events": [],
|
|
2624
|
-
"slots": []
|
|
2625
|
-
},
|
|
2626
|
-
"exports": {
|
|
2627
|
-
"customElement": "ds-chart-bar-stacked",
|
|
2628
|
-
"react": "DsChartBarStacked",
|
|
2629
|
-
"angular": "DsChartBarStacked"
|
|
2630
|
-
},
|
|
2631
|
-
"dependencies": [
|
|
2632
|
-
"@ds-mo/ui",
|
|
2633
|
-
"@ds-mo/tokens"
|
|
2634
|
-
],
|
|
2635
|
-
"componentDependencies": []
|
|
2636
|
-
},
|
|
2637
2215
|
{
|
|
2638
2216
|
"id": "component:ds-chart-donut",
|
|
2639
2217
|
"tag": "ds-chart-donut",
|
|
@@ -2658,8 +2236,8 @@
|
|
|
2658
2236
|
"alternatives": [
|
|
2659
2237
|
{
|
|
2660
2238
|
"when": "The product needs the canonical card, filter action, visible legend, and built-in hover synchronization.",
|
|
2661
|
-
"component": "component:ds-card-data-viz
|
|
2662
|
-
"reason": "The
|
|
2239
|
+
"component": "component:ds-card-data-viz",
|
|
2240
|
+
"reason": "The donut card variant owns that complete composition and suppresses redundant slice tooltips."
|
|
2663
2241
|
},
|
|
2664
2242
|
{
|
|
2665
2243
|
"when": "Users need to compare independent category magnitudes.",
|
|
@@ -2670,7 +2248,7 @@
|
|
|
2670
2248
|
"commonlyComposedWith": [
|
|
2671
2249
|
"component:ds-chart-legend",
|
|
2672
2250
|
"component:ds-tooltip-data-viz",
|
|
2673
|
-
"component:ds-card-data-viz
|
|
2251
|
+
"component:ds-card-data-viz"
|
|
2674
2252
|
],
|
|
2675
2253
|
"accessibility": [
|
|
2676
2254
|
"Every non-empty slice remains keyboard focusable and exposes its label and value without depending on the visual tooltip.",
|
|
@@ -2680,7 +2258,7 @@
|
|
|
2680
2258
|
],
|
|
2681
2259
|
"states": [
|
|
2682
2260
|
"Genuine local pointer or keyboard focus may show a chart-owned tooltip; externally synchronized highlight never opens it.",
|
|
2683
|
-
"When a visible legend already owns label and value detail, suppress the redundant donut tooltip.
|
|
2261
|
+
"When a visible legend already owns label and value detail, suppress the redundant donut tooltip. CardDataViz donut mode does this automatically.",
|
|
2684
2262
|
"Local hover and external highlight remain separate while both may dim non-matching slices.",
|
|
2685
2263
|
"Zero or negative totals render a neutral empty ring without interactive slices.",
|
|
2686
2264
|
"Center value and caption truncate when they exceed the safe inner-circle measure."
|
|
@@ -2693,7 +2271,7 @@
|
|
|
2693
2271
|
],
|
|
2694
2272
|
"frameworkCaveats": {
|
|
2695
2273
|
"customElements": [
|
|
2696
|
-
"Assign data as a JavaScript property and wire slice-hover detail to a sibling legend only when not using
|
|
2274
|
+
"Assign data as a JavaScript property and wire slice-hover detail to a sibling legend only when not using CardDataViz donut mode."
|
|
2697
2275
|
],
|
|
2698
2276
|
"react": [
|
|
2699
2277
|
"Keep synchronized highlight controlled by the composition and disable slice tooltips when a sibling legend continuously shows the same details."
|
|
@@ -2806,22 +2384,20 @@
|
|
|
2806
2384
|
},
|
|
2807
2385
|
{
|
|
2808
2386
|
"when": "The donut belongs in the canonical dashboard card.",
|
|
2809
|
-
"component": "component:ds-card-data-viz
|
|
2810
|
-
"reason": "The
|
|
2387
|
+
"component": "component:ds-card-data-viz",
|
|
2388
|
+
"reason": "The donut variant places the legend and handles bidirectional highlight synchronization."
|
|
2811
2389
|
},
|
|
2812
2390
|
{
|
|
2813
2391
|
"when": "A static line chart and series key belong in the canonical dashboard card.",
|
|
2814
|
-
"component": "component:ds-card-data-viz
|
|
2815
|
-
"reason": "The
|
|
2392
|
+
"component": "component:ds-card-data-viz",
|
|
2393
|
+
"reason": "The line variant places the horizontal legend and disables decorative local hover highlighting."
|
|
2816
2394
|
}
|
|
2817
2395
|
],
|
|
2818
2396
|
"commonlyComposedWith": [
|
|
2819
2397
|
"component:ds-chart-donut",
|
|
2820
|
-
"component:ds-chart-bar
|
|
2398
|
+
"component:ds-chart-bar",
|
|
2821
2399
|
"component:ds-chart-line",
|
|
2822
|
-
"component:ds-card-data-viz
|
|
2823
|
-
"component:ds-card-data-viz-line",
|
|
2824
|
-
"component:ds-card-shell-data-viz"
|
|
2400
|
+
"component:ds-card-data-viz"
|
|
2825
2401
|
],
|
|
2826
2402
|
"accessibility": [
|
|
2827
2403
|
"Rows remain non-interactive unless the item supplies an actual link destination.",
|
|
@@ -2955,8 +2531,7 @@
|
|
|
2955
2531
|
],
|
|
2956
2532
|
"commonlyComposedWith": [
|
|
2957
2533
|
"component:ds-chart-legend",
|
|
2958
|
-
"component:ds-card-data-viz
|
|
2959
|
-
"component:ds-card-shell-data-viz",
|
|
2534
|
+
"component:ds-card-data-viz",
|
|
2960
2535
|
"component:ds-tooltip-data-viz"
|
|
2961
2536
|
],
|
|
2962
2537
|
"accessibility": [
|
|
@@ -3071,7 +2646,7 @@
|
|
|
3071
2646
|
],
|
|
3072
2647
|
"commonlyComposedWith": [
|
|
3073
2648
|
"component:ds-field",
|
|
3074
|
-
"component:ds-select
|
|
2649
|
+
"component:ds-select",
|
|
3075
2650
|
"component:ds-text"
|
|
3076
2651
|
],
|
|
3077
2652
|
"accessibility": [
|
|
@@ -3864,7 +3439,7 @@
|
|
|
3864
3439
|
"status": "stable",
|
|
3865
3440
|
"summary": "Accessible form-field composition that gives one Input or Select a persistent label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
3866
3441
|
"useWhen": [
|
|
3867
|
-
"An Input
|
|
3442
|
+
"An Input or Select needs a persistent visible label in a form.",
|
|
3868
3443
|
"Help text or an error message must be programmatically associated with one control.",
|
|
3869
3444
|
"A form layout needs one consistent label-control-message rhythm."
|
|
3870
3445
|
],
|
|
@@ -3883,7 +3458,6 @@
|
|
|
3883
3458
|
"commonlyComposedWith": [
|
|
3884
3459
|
"component:ds-input",
|
|
3885
3460
|
"component:ds-select",
|
|
3886
|
-
"component:ds-select-multi",
|
|
3887
3461
|
"component:ds-text"
|
|
3888
3462
|
],
|
|
3889
3463
|
"accessibility": [
|
|
@@ -3910,7 +3484,7 @@
|
|
|
3910
3484
|
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
3911
3485
|
],
|
|
3912
3486
|
"react": [
|
|
3913
|
-
"Compose one DsInput
|
|
3487
|
+
"Compose one DsInput or DsSelect child and control validation timing in the form owner."
|
|
3914
3488
|
],
|
|
3915
3489
|
"angular": [
|
|
3916
3490
|
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
@@ -4515,8 +4089,8 @@
|
|
|
4515
4089
|
},
|
|
4516
4090
|
{
|
|
4517
4091
|
"when": "Several form values may be selected.",
|
|
4518
|
-
"component": "component:ds-select
|
|
4519
|
-
"reason": "
|
|
4092
|
+
"component": "component:ds-select",
|
|
4093
|
+
"reason": "Select multiple provides multi-select listbox semantics, array value ownership, and count presentation."
|
|
4520
4094
|
},
|
|
4521
4095
|
{
|
|
4522
4096
|
"when": "The interaction needs substantial content, confirmation, or a form.",
|
|
@@ -4548,7 +4122,7 @@
|
|
|
4548
4122
|
"After dsSelect from a switch row, replace the items or sections array with updated switchValue data so the controlled indicator reflects the new state.",
|
|
4549
4123
|
"For selectionMode single, keep exactly one item isSelected and replace the items or sections array after dsSelect; Menu never mutates consumer-owned selection data.",
|
|
4550
4124
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
4551
|
-
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup
|
|
4125
|
+
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup.",
|
|
4552
4126
|
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics."
|
|
4553
4127
|
],
|
|
4554
4128
|
"responsiveBehavior": [
|
|
@@ -4654,10 +4228,6 @@
|
|
|
4654
4228
|
"name": "dsClose",
|
|
4655
4229
|
"detail": "void"
|
|
4656
4230
|
},
|
|
4657
|
-
{
|
|
4658
|
-
"name": "dsGradientSelect",
|
|
4659
|
-
"detail": "ShellGradientPreset"
|
|
4660
|
-
},
|
|
4661
4231
|
{
|
|
4662
4232
|
"name": "dsSelect",
|
|
4663
4233
|
"detail": "MenuItemData"
|
|
@@ -5237,10 +4807,6 @@
|
|
|
5237
4807
|
"type": "string",
|
|
5238
4808
|
"required": false
|
|
5239
4809
|
},
|
|
5240
|
-
"sectionsJson": {
|
|
5241
|
-
"type": "string",
|
|
5242
|
-
"required": false
|
|
5243
|
-
},
|
|
5244
4810
|
"subsections": {
|
|
5245
4811
|
"type": "TabItem[]",
|
|
5246
4812
|
"required": false
|
|
@@ -5249,10 +4815,6 @@
|
|
|
5249
4815
|
"type": "string",
|
|
5250
4816
|
"required": false
|
|
5251
4817
|
},
|
|
5252
|
-
"subsectionsJson": {
|
|
5253
|
-
"type": "string",
|
|
5254
|
-
"required": false
|
|
5255
|
-
},
|
|
5256
4818
|
"subvalue": {
|
|
5257
4819
|
"type": "string",
|
|
5258
4820
|
"required": false
|
|
@@ -5347,10 +4909,6 @@
|
|
|
5347
4909
|
"type": "TabItem[]",
|
|
5348
4910
|
"required": false
|
|
5349
4911
|
},
|
|
5350
|
-
"sectionsJson": {
|
|
5351
|
-
"type": "string",
|
|
5352
|
-
"required": false
|
|
5353
|
-
},
|
|
5354
4912
|
"value": {
|
|
5355
4913
|
"type": "string",
|
|
5356
4914
|
"required": false
|
|
@@ -5725,7 +5283,7 @@
|
|
|
5725
5283
|
"At 1200px and wider, default to expanded, allow the user to expand or collapse, and restore the locally persisted desktop preference when available.",
|
|
5726
5284
|
"From 768px through 1199px, present PanelNav permanently collapsed and do not allow user expansion.",
|
|
5727
5285
|
"Below 768px, the consuming application replaces PanelNav with a dedicated mobile navigation component; PanelNav does not own mobile navigation.",
|
|
5728
|
-
"ShellApp permanently owns responsive composition: it determines shell mode, enforces tablet collapse, and
|
|
5286
|
+
"Managed ShellApp permanently owns responsive composition: it determines shell mode, enforces tablet collapse, and presents MobileSheetNav below 768px.",
|
|
5729
5287
|
"When the viewport is below breakpoint, PanelNav locks collapsed, disables its header toggle affordance, and preserves the persisted desktop collapse preference.",
|
|
5730
5288
|
"Collapsed presentation must preserve destination ordering, active state, notification status, and accessible names."
|
|
5731
5289
|
],
|
|
@@ -6148,7 +5706,7 @@
|
|
|
6148
5706
|
"The product needs a compact filter menu next to search while keeping its filter choices and matching policy application-owned."
|
|
6149
5707
|
],
|
|
6150
5708
|
"avoidWhen": [
|
|
6151
|
-
"The search belongs inside a Select
|
|
5709
|
+
"The search belongs inside a Select popup; use that component's searchable behavior in either cardinality mode.",
|
|
6152
5710
|
"A form needs a labelled standalone field; compose ds-input inside ds-field instead."
|
|
6153
5711
|
],
|
|
6154
5712
|
"commonlyComposedWith": [
|
|
@@ -6278,22 +5836,22 @@
|
|
|
6278
5836
|
"tag": "ds-panel-tools",
|
|
6279
5837
|
"name": "panel-tools",
|
|
6280
5838
|
"title": "PanelTools",
|
|
6281
|
-
"summary": "
|
|
5839
|
+
"summary": "Desktop and tablet utility rail-and-drawer primitive for explicitly defined application-wide tools, normally assembled by managed ShellApp through ShellTools.",
|
|
6282
5840
|
"intentStatus": "complete",
|
|
6283
5841
|
"intent": {
|
|
6284
5842
|
"audience": "specialized",
|
|
6285
5843
|
"status": "stable",
|
|
6286
|
-
"summary": "
|
|
5844
|
+
"summary": "Desktop and tablet utility rail-and-drawer primitive for explicitly defined application-wide tools, normally assembled by managed ShellApp through ShellTools.",
|
|
6287
5845
|
"useWhen": [
|
|
6288
|
-
"
|
|
5846
|
+
"An advanced slotted ShellApp needs the desktop and tablet global-tools primitive directly.",
|
|
6289
5847
|
"Users need to move between application-wide utilities without losing each tool's in-progress state.",
|
|
6290
5848
|
"Search, AI conversations, user messages, review stacks, notifications, or help content must remain available alongside route content."
|
|
6291
5849
|
],
|
|
6292
5850
|
"avoidWhen": [
|
|
6293
5851
|
"The action is specific to the current page or selected content rather than globally available across the application.",
|
|
6294
5852
|
"The item navigates to a primary or secondary route; use PanelNav or BarNav instead.",
|
|
6295
|
-
"
|
|
6296
|
-
"Building the mobile tools experience;
|
|
5853
|
+
"Tool definitions lack stable ids, visible labels, explicit rail placement, or application-owned view content.",
|
|
5854
|
+
"Building the mobile tools experience; use ShellTools or managed ShellApp.",
|
|
6297
5855
|
"PanelTools would be mounted outside the application's single ShellApp."
|
|
6298
5856
|
],
|
|
6299
5857
|
"alternatives": [
|
|
@@ -6323,16 +5881,16 @@
|
|
|
6323
5881
|
],
|
|
6324
5882
|
"accessibility": [
|
|
6325
5883
|
"Provide localized accessible labels for the rail, shortcut group, and every rendered tool.",
|
|
6326
|
-
"
|
|
5884
|
+
"Use the canonical default recipe when the product needs Search first and Help last; custom recipes must preserve a deliberate keyboard and visual order.",
|
|
6327
5885
|
"Keep focus on the selected rail action when opening a drawer and allow normal Tab navigation into its content.",
|
|
6328
5886
|
"Do not trigger global shortcuts while focus is in an editable control.",
|
|
6329
5887
|
"Use notification dots only as supplemental unread or new-content status and never as the sole status indication.",
|
|
6330
5888
|
"Explain temporarily inactive tools through an accessible label or adjacent product guidance; omit unauthorized tools entirely."
|
|
6331
5889
|
],
|
|
6332
5890
|
"states": [
|
|
6333
|
-
"
|
|
6334
|
-
"
|
|
6335
|
-
"
|
|
5891
|
+
"Every tool has a stable explicit id and accessible label. The application filters definitions for authorization and entitlement.",
|
|
5892
|
+
"Tool order, header or footer rail placement, shortcut, and mobile grouping come from explicit item metadata rather than id-based layout assumptions.",
|
|
5893
|
+
"PANEL_TOOLS_DEFAULT_ITEMS is the canonical Lab recipe: Search pinned first, Help pinned last, current shortcuts, and Messages, Stacks, and Activity grouped under mobile Inbox.",
|
|
6336
5894
|
"Only one drawer is open at a time; selecting another tool switches directly and selecting the active tool closes to rail-only mode.",
|
|
6337
5895
|
"The drawer starts closed, remains open across ordinary route changes, and retains every mounted tool's independent conversation, query, scroll, and work state.",
|
|
6338
5896
|
"When storageKey is set, persist only the last active tool in this browser and still restore the drawer closed after reload.",
|
|
@@ -6355,19 +5913,19 @@
|
|
|
6355
5913
|
"responsiveBehavior": [
|
|
6356
5914
|
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
6357
5915
|
"ShellApp owns the fixed drawer-width variable; consumers must not hardcode alternate drawer widths.",
|
|
6358
|
-
"Below 768px, do not reuse
|
|
5916
|
+
"Below 768px, do not reuse PanelTools directly; ShellTools and managed ShellApp present the same persistent tool owners through mobile chrome.",
|
|
6359
5917
|
"Keep named-slot content mounted while tools switch or the drawer closes so users can return to in-progress global work.",
|
|
6360
5918
|
"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.",
|
|
6361
5919
|
"Use fixed drawer widths for now; do not add user resizing or width persistence."
|
|
6362
5920
|
],
|
|
6363
5921
|
"frameworkCaveats": {
|
|
6364
5922
|
"customElements": [
|
|
6365
|
-
"Assign items as
|
|
5923
|
+
"Assign items and headers as JavaScript properties and replace their references when collections change.",
|
|
6366
5924
|
"Assign headers as a JavaScript property and replace its object identity whenever an active tool changes title, depth, or actions.",
|
|
6367
5925
|
"Keep PanelTools mounted at ShellApp scope across route changes and provide each product through its matching named slot."
|
|
6368
5926
|
],
|
|
6369
5927
|
"react": [
|
|
6370
|
-
"Pass
|
|
5928
|
+
"Pass a stable explicitly ordered item collection through the generated React wrapper and keep named-slot product content mounted at ShellApp scope.",
|
|
6371
5929
|
"Use storageKey only for same-browser last-tool continuity; do not persist the open drawer."
|
|
6372
5930
|
],
|
|
6373
5931
|
"angular": [
|
|
@@ -6405,18 +5963,10 @@
|
|
|
6405
5963
|
"type": "PanelToolsHeaders",
|
|
6406
5964
|
"required": false
|
|
6407
5965
|
},
|
|
6408
|
-
"headersJson": {
|
|
6409
|
-
"type": "string",
|
|
6410
|
-
"required": false
|
|
6411
|
-
},
|
|
6412
5966
|
"items": {
|
|
6413
5967
|
"type": "PanelToolsItem[]",
|
|
6414
5968
|
"required": false
|
|
6415
5969
|
},
|
|
6416
|
-
"itemsJson": {
|
|
6417
|
-
"type": "string",
|
|
6418
|
-
"required": false
|
|
6419
|
-
},
|
|
6420
5970
|
"open": {
|
|
6421
5971
|
"type": "boolean",
|
|
6422
5972
|
"required": false
|
|
@@ -6718,29 +6268,24 @@
|
|
|
6718
6268
|
"tag": "ds-select",
|
|
6719
6269
|
"name": "select",
|
|
6720
6270
|
"title": "Select",
|
|
6721
|
-
"summary": "Form-associated
|
|
6271
|
+
"summary": "Form-associated select for one value or several independent values through the multiple mode, with listbox semantics, local search, grouped sections, loading, clearing, and surface-aware trigger chrome.",
|
|
6722
6272
|
"intentStatus": "complete",
|
|
6723
6273
|
"intent": {
|
|
6724
6274
|
"audience": "general",
|
|
6725
6275
|
"status": "stable",
|
|
6726
|
-
"summary": "Form-associated
|
|
6276
|
+
"summary": "Form-associated select for one value or several independent values through the multiple mode, with listbox semantics, local search, grouped sections, loading, clearing, and surface-aware trigger chrome.",
|
|
6727
6277
|
"useWhen": [
|
|
6728
6278
|
"The user must choose one value from a finite set.",
|
|
6279
|
+
"The user may choose several independent values when multiple is enabled.",
|
|
6729
6280
|
"The option set benefits from local search, subtext, prefix icons, grouping, or disabled choices.",
|
|
6730
6281
|
"The choice set has more than roughly 20 options, comes from a user-managed listing, or represents a large domain such as addresses where search materially improves retrieval.",
|
|
6731
6282
|
"The selected value must participate in native, Angular, or React form state."
|
|
6732
6283
|
],
|
|
6733
6284
|
"avoidWhen": [
|
|
6734
|
-
"Several values may be selected at once.",
|
|
6735
6285
|
"The rows perform commands rather than choosing a form value.",
|
|
6736
6286
|
"The choices form a hierarchy with expandable parents."
|
|
6737
6287
|
],
|
|
6738
6288
|
"alternatives": [
|
|
6739
|
-
{
|
|
6740
|
-
"when": "Several independent values may be selected.",
|
|
6741
|
-
"component": "component:ds-select-multi",
|
|
6742
|
-
"reason": "SelectMulti owns array values, multi-selection semantics, and count presentation."
|
|
6743
|
-
},
|
|
6744
6289
|
{
|
|
6745
6290
|
"when": "The popup contains commands or state-changing actions.",
|
|
6746
6291
|
"component": "component:ds-menu",
|
|
@@ -6761,6 +6306,7 @@
|
|
|
6761
6306
|
"accessibility": [
|
|
6762
6307
|
"In forms, provide a persistent visible external field label; placeholder text is guidance and must not be the field's only label. In a compact filter bar, the trigger's visible text may supply the accessible name.",
|
|
6763
6308
|
"The trigger uses combobox semantics and the popup uses listbox and option semantics; do not replace them with menu roles.",
|
|
6309
|
+
"Multiple mode adds aria-multiselectable, exposes independent aria-selected state, and uses presentation-only checkbox indicators while each option remains the sole interaction target.",
|
|
6764
6310
|
"Disabled options remain visible, expose aria-disabled, and are skipped by keyboard navigation and typeahead.",
|
|
6765
6311
|
"Keyboard navigation keeps the aria-activedescendant option scrolled into the visible listbox viewport.",
|
|
6766
6312
|
"Selected options rely on active fill and foreground treatment without a redundant trailing check icon.",
|
|
@@ -6768,13 +6314,14 @@
|
|
|
6768
6314
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6769
6315
|
],
|
|
6770
6316
|
"states": [
|
|
6771
|
-
"
|
|
6317
|
+
"The multiple property changes cardinality without changing the component family: scalar mode selects and closes, while multiple mode toggles array values and keeps the popup open.",
|
|
6772
6318
|
"Every size applies one complete control-density recipe across trigger height, inline padding, icon zones, text-container inset, gap, and radius; error content follows the shared 4px field flow.",
|
|
6773
|
-
"Value is controlled through the mutable value property; dsChange reports
|
|
6319
|
+
"Value is controlled through the mutable value property as a string in scalar mode or a string array in multiple mode; dsChange reports the matching shape.",
|
|
6320
|
+
"Multiple mode keeps the persistent placeholder label visible, appends the selected count, and submits one repeated form entry per selected value.",
|
|
6774
6321
|
"Required Selects begin without an automatic selection and require the user to make an explicit choice; do not preselect the first option merely to satisfy validity.",
|
|
6775
6322
|
"When allowClear is enabled, the clear affordance appears only after a value exists. Clearing is valid for optional and required fields; a required field becomes invalid until the user selects again.",
|
|
6776
|
-
"Clearing emits dsChange with an empty string
|
|
6777
|
-
"Loading keeps the trigger visible, replaces its prefix icon, marks the control busy, and makes selection interaction temporarily unavailable without presenting the control as inactive.",
|
|
6323
|
+
"Clearing emits dsChange with an empty string or empty array according to mode plus dsClear, keeps the popup open, and restores useful focus.",
|
|
6324
|
+
"Loading keeps the trigger visible, replaces its prefix icon, marks the control busy, and makes selection interaction temporarily unavailable without presenting the control as inactive. When the popup is open, its single loader is centered vertically and horizontally within the loading region.",
|
|
6778
6325
|
"The trigger label stays left-aligned at every width. The default size is md in both forms and filter bars; smaller sizes require an explicit density need.",
|
|
6779
6326
|
"Use option icons only when they help users differentiate choices. Icons render only when every option in the complete list provides one; mixed icon data falls back to the text-only row layout.",
|
|
6780
6327
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
@@ -6799,10 +6346,10 @@
|
|
|
6799
6346
|
],
|
|
6800
6347
|
"frameworkCaveats": {
|
|
6801
6348
|
"customElements": [
|
|
6802
|
-
"Assign options and
|
|
6349
|
+
"Assign options, sections, and multiple-mode array values through JavaScript properties because arrays and objects cannot be represented safely as attributes."
|
|
6803
6350
|
],
|
|
6804
6351
|
"react": [
|
|
6805
|
-
"Pass options or sections as wrapper props and handle onDsChange, onDsClear, and onDsOpenChange."
|
|
6352
|
+
"Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, and onDsOpenChange."
|
|
6806
6353
|
],
|
|
6807
6354
|
"angular": [
|
|
6808
6355
|
"Import DsSelect and SelectValueAccessor when integrating with Angular Forms; bind options and sections as properties."
|
|
@@ -6885,6 +6432,10 @@
|
|
|
6885
6432
|
"type": "string",
|
|
6886
6433
|
"required": false
|
|
6887
6434
|
},
|
|
6435
|
+
"multiple": {
|
|
6436
|
+
"type": "boolean",
|
|
6437
|
+
"required": false
|
|
6438
|
+
},
|
|
6888
6439
|
"name": {
|
|
6889
6440
|
"type": "string | undefined",
|
|
6890
6441
|
"required": false
|
|
@@ -6925,12 +6476,16 @@
|
|
|
6925
6476
|
"type": "SelectSection[]",
|
|
6926
6477
|
"required": false
|
|
6927
6478
|
},
|
|
6479
|
+
"selectedLabel": {
|
|
6480
|
+
"type": "string",
|
|
6481
|
+
"required": false
|
|
6482
|
+
},
|
|
6928
6483
|
"size": {
|
|
6929
6484
|
"type": "SelectSize",
|
|
6930
6485
|
"required": false
|
|
6931
6486
|
},
|
|
6932
6487
|
"value": {
|
|
6933
|
-
"type": "
|
|
6488
|
+
"type": "SelectValue",
|
|
6934
6489
|
"required": false
|
|
6935
6490
|
},
|
|
6936
6491
|
"width": {
|
|
@@ -6941,7 +6496,7 @@
|
|
|
6941
6496
|
"events": [
|
|
6942
6497
|
{
|
|
6943
6498
|
"name": "dsChange",
|
|
6944
|
-
"detail": "
|
|
6499
|
+
"detail": "SelectValue"
|
|
6945
6500
|
},
|
|
6946
6501
|
{
|
|
6947
6502
|
"name": "dsClear",
|
|
@@ -6964,268 +6519,6 @@
|
|
|
6964
6519
|
"@ds-mo/tokens",
|
|
6965
6520
|
"@ds-mo/icons"
|
|
6966
6521
|
],
|
|
6967
|
-
"componentDependencies": [
|
|
6968
|
-
"button-unfilled",
|
|
6969
|
-
"empty-state",
|
|
6970
|
-
"icon",
|
|
6971
|
-
"loader",
|
|
6972
|
-
"text",
|
|
6973
|
-
"tooltip"
|
|
6974
|
-
]
|
|
6975
|
-
},
|
|
6976
|
-
{
|
|
6977
|
-
"id": "component:ds-select-multi",
|
|
6978
|
-
"tag": "ds-select-multi",
|
|
6979
|
-
"name": "select-multi",
|
|
6980
|
-
"title": "SelectMulti",
|
|
6981
|
-
"summary": "Form-associated multi-value select with a persistent trigger label, inline selected count, local search, rich flat options, grouped sections, loading, and clear-all behavior.",
|
|
6982
|
-
"intentStatus": "complete",
|
|
6983
|
-
"intent": {
|
|
6984
|
-
"audience": "general",
|
|
6985
|
-
"status": "stable",
|
|
6986
|
-
"summary": "Form-associated multi-value select with a persistent trigger label, inline selected count, local search, rich flat options, grouped sections, loading, and clear-all behavior.",
|
|
6987
|
-
"useWhen": [
|
|
6988
|
-
"The user may choose several independent values from one finite set.",
|
|
6989
|
-
"A compact trigger should summarize selection with the field label and a count.",
|
|
6990
|
-
"The option set benefits from local search, subtext, grouping, or disabled choices.",
|
|
6991
|
-
"The choice set has more than roughly 20 options, comes from a user-managed listing, or represents a large domain where search materially improves retrieval."
|
|
6992
|
-
],
|
|
6993
|
-
"avoidWhen": [
|
|
6994
|
-
"Exactly one value may be selected.",
|
|
6995
|
-
"Selected values must remain individually removable as persistent tags outside the popup.",
|
|
6996
|
-
"The choices form a hierarchy with cascading parent selection.",
|
|
6997
|
-
"The customer task benefits more from keeping every choice and checkbox directly visible; choose between SelectMulti and a visible checkbox list from the use-case context rather than a fixed option-count threshold."
|
|
6998
|
-
],
|
|
6999
|
-
"alternatives": [
|
|
7000
|
-
{
|
|
7001
|
-
"when": "Exactly one value may be selected.",
|
|
7002
|
-
"component": "component:ds-select",
|
|
7003
|
-
"reason": "Select owns scalar form value and single-select listbox behavior."
|
|
7004
|
-
},
|
|
7005
|
-
{
|
|
7006
|
-
"when": "The popup contains actions rather than values.",
|
|
7007
|
-
"component": "component:ds-menu",
|
|
7008
|
-
"reason": "Menu uses command semantics and closes according to action-menu expectations."
|
|
7009
|
-
}
|
|
7010
|
-
],
|
|
7011
|
-
"commonlyComposedWith": [
|
|
7012
|
-
"component:ds-text",
|
|
7013
|
-
"component:ds-checkbox",
|
|
7014
|
-
"component:ds-empty-state",
|
|
7015
|
-
"component:ds-loader"
|
|
7016
|
-
],
|
|
7017
|
-
"accessibility": [
|
|
7018
|
-
"In forms, provide a persistent visible external field label. In a compact filter bar, the trigger's visible persistent label and count may supply the accessible name.",
|
|
7019
|
-
"The popup is a listbox with aria-multiselectable and every option exposes its independent aria-selected state.",
|
|
7020
|
-
"Disabled options expose aria-disabled and are skipped by keyboard navigation and typeahead.",
|
|
7021
|
-
"Keyboard navigation keeps the aria-activedescendant option scrolled into the visible listbox viewport.",
|
|
7022
|
-
"Each row uses a presentation-only ds-checkbox indicator at the same density as the row; multi-select option rows never add a prefix icon alongside it, and the option remains the sole selection semantic and interaction target.",
|
|
7023
|
-
"The trigger keeps its field label visible and appends the current selected count; an explicit aria-label or aria-labelledby remains the authoritative accessible name when supplied.",
|
|
7024
|
-
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
7025
|
-
],
|
|
7026
|
-
"states": [
|
|
7027
|
-
"Select and SelectMulti share popup positioning, dismissal, focus, typeahead, and listbox traversal while retaining their distinct scalar and array selection contracts.",
|
|
7028
|
-
"Every size applies one complete control-density recipe across trigger height, inline padding, icon zones, text-container inset, gap, and radius; error content follows the shared 4px field flow.",
|
|
7029
|
-
"Values is a controlled JavaScript array; dsChange emits a new array after each user toggle.",
|
|
7030
|
-
"Required SelectMulti controls begin without an automatic selection and require the user to make an explicit choice.",
|
|
7031
|
-
"Selecting an option keeps the popup open so additional values can be toggled.",
|
|
7032
|
-
"The trigger label stays left-aligned at every width; every option row uses the same leading Checkbox indicator at its density. The default control size is md in both forms and filter bars.",
|
|
7033
|
-
"The selected count always follows the persistent label as plain text separated by a centered dot, including for one selection, and counts every selected value even when search or grouping hides it. Never replace the count with selected option names.",
|
|
7034
|
-
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
7035
|
-
"When any option supplies subtext, every row uses the same subtext structure and missing values render an em dash. Subtext should disambiguate or add decision-helpful information.",
|
|
7036
|
-
"Option labels stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
7037
|
-
"The optional prefix icon and chevron always use the parent surface's secondary foreground color, including when selection promotes the label and count to primary.",
|
|
7038
|
-
"The shared popup search control follows the SelectMulti density, using the same text, icon, and internal spacing as a borderless trigger. Its container uses menu-item padding on every side and owns a 1px bottom divider that becomes a 1.5px bold-brand stroke while search has focus. Search placeholder text is secondary at rest and quaternary while focused because it becomes decorative once the editable field is active.",
|
|
7039
|
-
"When search contains text, the shared control shows a rounded sm icon-only ButtonUnfilled with the Cross icon and no border. It clears the local term, stays hidden for an empty term, and returns focus to search.",
|
|
7040
|
-
"The shared summary-and-clear footer mirrors the owning density: menu-item padding surrounds a borderless density row, and both texts use the same row and label insets as option text. The outer footer owns a 1px top divider.",
|
|
7041
|
-
"An empty filtered list composes the message-only body variant of EmptyState. Keep the default neutral no-results message unless localized product guidance makes the outcome clearer.",
|
|
7042
|
-
"Enable searchable for more than roughly 20 options, user-managed listings, large domains such as addresses, or sets users cannot efficiently scan. Local matching includes option labels, subtext, and section headings; the owner resolves remote data before assigning options.",
|
|
7043
|
-
"When allowClear is enabled, clear-all appears only after at least one value exists. Clearing is valid for optional and required fields; a required field becomes invalid until the user selects again.",
|
|
7044
|
-
"Clear-all emits an empty dsChange and dsClear while preserving useful popup or search focus.",
|
|
7045
|
-
"Loading keeps the trigger visible, marks the control busy, and makes selection interaction temporarily unavailable without presenting the control as inactive.",
|
|
7046
|
-
"SelectMulti has no maximum-selection behavior; every available non-inactive option may be selected.",
|
|
7047
|
-
"Validation timing belongs to the form owner and may be immediate or deferred until blur or submit; the component exposes validity and error presentation without imposing that policy.",
|
|
7048
|
-
"The error trigger uses a 1.5px bold-negative inset stroke so invalid state remains distinguishable from the normal 1px border without changing control geometry.",
|
|
7049
|
-
"An initially empty option set is not an expected SelectMulti use case. The no-results state describes a search with no matches, not a source with no choices.",
|
|
7050
|
-
"Native form submission emits one entry per selected value under the component name.",
|
|
7051
|
-
"Use options for a flat list or sections for grouped choices. Multi-select option contracts intentionally exclude icons because the leading checkbox owns that row zone; hierarchical parent selection is deferred."
|
|
7052
|
-
],
|
|
7053
|
-
"responsiveBehavior": [
|
|
7054
|
-
"Use width fill for form fields and width hug for compact filter bars; the persistent trigger label avoids variable-width selected labels.",
|
|
7055
|
-
"The popup matches the trigger minimum width, may grow for content, and clamps to the viewport.",
|
|
7056
|
-
"Long option collections scroll inside the popup; virtualization and remote search are not part of this version."
|
|
7057
|
-
],
|
|
7058
|
-
"frameworkCaveats": {
|
|
7059
|
-
"customElements": [
|
|
7060
|
-
"Assign values, options, and sections through JavaScript properties; array values cannot be represented safely as attributes."
|
|
7061
|
-
],
|
|
7062
|
-
"react": [
|
|
7063
|
-
"Pass values, options, and sections as wrapper props and handle onDsChange, onDsClear, and onDsOpenChange."
|
|
7064
|
-
],
|
|
7065
|
-
"angular": [
|
|
7066
|
-
"Import DsSelectMulti and SelectMultiValueAccessor when integrating with Angular Forms."
|
|
7067
|
-
]
|
|
7068
|
-
},
|
|
7069
|
-
"references": [
|
|
7070
|
-
{
|
|
7071
|
-
"label": "Storybook examples",
|
|
7072
|
-
"path": "src/wc/components/SelectMulti/SelectMulti.stories.ts"
|
|
7073
|
-
},
|
|
7074
|
-
{
|
|
7075
|
-
"label": "Selection patterns",
|
|
7076
|
-
"path": "src/docs/SelectionPatterns.mdx"
|
|
7077
|
-
}
|
|
7078
|
-
]
|
|
7079
|
-
},
|
|
7080
|
-
"api": {
|
|
7081
|
-
"props": {
|
|
7082
|
-
"activeFill": {
|
|
7083
|
-
"type": "boolean",
|
|
7084
|
-
"required": false
|
|
7085
|
-
},
|
|
7086
|
-
"allowClear": {
|
|
7087
|
-
"type": "boolean",
|
|
7088
|
-
"required": false
|
|
7089
|
-
},
|
|
7090
|
-
"ariaDescribedby": {
|
|
7091
|
-
"type": "string | undefined",
|
|
7092
|
-
"required": false
|
|
7093
|
-
},
|
|
7094
|
-
"ariaLabel": {
|
|
7095
|
-
"type": "string | null",
|
|
7096
|
-
"required": false
|
|
7097
|
-
},
|
|
7098
|
-
"ariaLabelledby": {
|
|
7099
|
-
"type": "string | undefined",
|
|
7100
|
-
"required": false
|
|
7101
|
-
},
|
|
7102
|
-
"background": {
|
|
7103
|
-
"type": "SelectMultiBackground | undefined",
|
|
7104
|
-
"required": false
|
|
7105
|
-
},
|
|
7106
|
-
"clearLabel": {
|
|
7107
|
-
"type": "string",
|
|
7108
|
-
"required": false
|
|
7109
|
-
},
|
|
7110
|
-
"disabled": {
|
|
7111
|
-
"type": "boolean",
|
|
7112
|
-
"required": false
|
|
7113
|
-
},
|
|
7114
|
-
"error": {
|
|
7115
|
-
"type": "boolean",
|
|
7116
|
-
"required": false
|
|
7117
|
-
},
|
|
7118
|
-
"errorMessage": {
|
|
7119
|
-
"type": "string | undefined",
|
|
7120
|
-
"required": false
|
|
7121
|
-
},
|
|
7122
|
-
"hasBorder": {
|
|
7123
|
-
"type": "boolean",
|
|
7124
|
-
"required": false
|
|
7125
|
-
},
|
|
7126
|
-
"icon": {
|
|
7127
|
-
"type": "string | undefined",
|
|
7128
|
-
"required": false
|
|
7129
|
-
},
|
|
7130
|
-
"inputId": {
|
|
7131
|
-
"type": "string | undefined",
|
|
7132
|
-
"required": false
|
|
7133
|
-
},
|
|
7134
|
-
"isInactive": {
|
|
7135
|
-
"type": "boolean",
|
|
7136
|
-
"required": false
|
|
7137
|
-
},
|
|
7138
|
-
"isLoading": {
|
|
7139
|
-
"type": "boolean",
|
|
7140
|
-
"required": false
|
|
7141
|
-
},
|
|
7142
|
-
"loadingLabel": {
|
|
7143
|
-
"type": "string",
|
|
7144
|
-
"required": false
|
|
7145
|
-
},
|
|
7146
|
-
"name": {
|
|
7147
|
-
"type": "string | undefined",
|
|
7148
|
-
"required": false
|
|
7149
|
-
},
|
|
7150
|
-
"noResultsText": {
|
|
7151
|
-
"type": "string",
|
|
7152
|
-
"required": false
|
|
7153
|
-
},
|
|
7154
|
-
"open": {
|
|
7155
|
-
"type": "boolean",
|
|
7156
|
-
"required": false
|
|
7157
|
-
},
|
|
7158
|
-
"options": {
|
|
7159
|
-
"type": "SelectMultiOption[]",
|
|
7160
|
-
"required": false
|
|
7161
|
-
},
|
|
7162
|
-
"placeholder": {
|
|
7163
|
-
"type": "string",
|
|
7164
|
-
"required": false
|
|
7165
|
-
},
|
|
7166
|
-
"required": {
|
|
7167
|
-
"type": "boolean",
|
|
7168
|
-
"required": false
|
|
7169
|
-
},
|
|
7170
|
-
"requiredMessage": {
|
|
7171
|
-
"type": "string",
|
|
7172
|
-
"required": false
|
|
7173
|
-
},
|
|
7174
|
-
"searchPlaceholder": {
|
|
7175
|
-
"type": "string",
|
|
7176
|
-
"required": false
|
|
7177
|
-
},
|
|
7178
|
-
"searchable": {
|
|
7179
|
-
"type": "boolean",
|
|
7180
|
-
"required": false
|
|
7181
|
-
},
|
|
7182
|
-
"sections": {
|
|
7183
|
-
"type": "SelectMultiSection[]",
|
|
7184
|
-
"required": false
|
|
7185
|
-
},
|
|
7186
|
-
"selectedLabel": {
|
|
7187
|
-
"type": "string",
|
|
7188
|
-
"required": false
|
|
7189
|
-
},
|
|
7190
|
-
"size": {
|
|
7191
|
-
"type": "SelectMultiSize",
|
|
7192
|
-
"required": false
|
|
7193
|
-
},
|
|
7194
|
-
"values": {
|
|
7195
|
-
"type": "string[]",
|
|
7196
|
-
"required": false
|
|
7197
|
-
},
|
|
7198
|
-
"width": {
|
|
7199
|
-
"type": "SelectMultiWidth",
|
|
7200
|
-
"required": false
|
|
7201
|
-
}
|
|
7202
|
-
},
|
|
7203
|
-
"events": [
|
|
7204
|
-
{
|
|
7205
|
-
"name": "dsChange",
|
|
7206
|
-
"detail": "string[]"
|
|
7207
|
-
},
|
|
7208
|
-
{
|
|
7209
|
-
"name": "dsClear",
|
|
7210
|
-
"detail": "void"
|
|
7211
|
-
},
|
|
7212
|
-
{
|
|
7213
|
-
"name": "dsOpenChange",
|
|
7214
|
-
"detail": "boolean"
|
|
7215
|
-
}
|
|
7216
|
-
],
|
|
7217
|
-
"slots": []
|
|
7218
|
-
},
|
|
7219
|
-
"exports": {
|
|
7220
|
-
"customElement": "ds-select-multi",
|
|
7221
|
-
"react": "DsSelectMulti",
|
|
7222
|
-
"angular": "DsSelectMulti"
|
|
7223
|
-
},
|
|
7224
|
-
"dependencies": [
|
|
7225
|
-
"@ds-mo/ui",
|
|
7226
|
-
"@ds-mo/tokens",
|
|
7227
|
-
"@ds-mo/icons"
|
|
7228
|
-
],
|
|
7229
6522
|
"componentDependencies": [
|
|
7230
6523
|
"button-unfilled",
|
|
7231
6524
|
"checkbox",
|
|
@@ -7241,15 +6534,15 @@
|
|
|
7241
6534
|
"tag": "ds-shell-app",
|
|
7242
6535
|
"name": "shell-app",
|
|
7243
6536
|
"title": "ShellApp",
|
|
7244
|
-
"summary": "The
|
|
6537
|
+
"summary": "The standard managed workspace root for authenticated applications, assembling responsive navigation, page chrome, global tools, and stable application-owned content from typed data.",
|
|
7245
6538
|
"intentStatus": "complete",
|
|
7246
6539
|
"intent": {
|
|
7247
6540
|
"audience": "specialized",
|
|
7248
6541
|
"status": "stable",
|
|
7249
|
-
"summary": "The
|
|
6542
|
+
"summary": "The standard managed workspace root for authenticated applications, assembling responsive navigation, page chrome, global tools, and stable application-owned content from typed data.",
|
|
7250
6543
|
"useWhen": [
|
|
7251
6544
|
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
7252
|
-
"
|
|
6545
|
+
"Navigation, page chrome, global tools, responsive behavior, and shell shortcuts must be composed as one application frame without parallel desktop and mobile owners.",
|
|
7253
6546
|
"Future application templates need the supported base-page composition boundary."
|
|
7254
6547
|
],
|
|
7255
6548
|
"avoidWhen": [
|
|
@@ -7273,32 +6566,34 @@
|
|
|
7273
6566
|
"pattern:shell-page"
|
|
7274
6567
|
],
|
|
7275
6568
|
"accessibility": [
|
|
7276
|
-
"
|
|
6569
|
+
"Supply primary destinations through navigation and secondary route sections through pageChrome so managed ShellApp preserves their correct semantics.",
|
|
7277
6570
|
"Ensure the default content region contains the page's single main landmark.",
|
|
7278
|
-
"Keep
|
|
6571
|
+
"Keep the managed desktop/tablet and mobile presentations available without conditionally recreating routed or tool content.",
|
|
7279
6572
|
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
7280
6573
|
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
7281
6574
|
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
7282
6575
|
],
|
|
7283
6576
|
"states": [
|
|
7284
6577
|
"Render exactly one ShellApp as the workspace root and never nest it.",
|
|
7285
|
-
"
|
|
6578
|
+
"Managed composition is the standard. Supply navigation, pageChrome, and tools objects plus named tool-view and default page-content slots.",
|
|
7286
6579
|
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
7287
|
-
"ShellApp
|
|
7288
|
-
"The application
|
|
6580
|
+
"ShellApp renders the lower-level desktop, tablet, and mobile chrome, coordinates layout, gradient alignment, transitions, shortcuts, global surfaces, Inbox state, focus restoration, and mobile-stage visibility.",
|
|
6581
|
+
"The application router owns authorization, current URLs, history, and route execution; ShellApp forwards navigation and page intent events without routing.",
|
|
6582
|
+
"The application supplies each routed content owner and tool view once. ShellApp changes visibility, inert state, and presentation without recreating those nodes.",
|
|
6583
|
+
"Use composition=slotted only for advanced application architectures that intentionally own all lower-level chrome wiring.",
|
|
7289
6584
|
"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.",
|
|
7290
6585
|
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; ShellApp owns rendering the resolved preset across authenticated routes.",
|
|
7291
6586
|
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
7292
|
-
"
|
|
7293
|
-
"
|
|
7294
|
-
"
|
|
6587
|
+
"Replace navigation and pageChrome together from one completed route state.",
|
|
6588
|
+
"When pageChrome.showBack marks a detail depth, mobile chrome keeps the page heading as its identity and presents only local subsections; peer route tabs remain in desktop BarNav rather than replacing the detail heading.",
|
|
6589
|
+
"Managed ShellApp keeps BarNav and ShellPage presentations present and owns page header stickiness and the content scroller.",
|
|
7295
6590
|
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
7296
6591
|
],
|
|
7297
6592
|
"responsiveBehavior": [
|
|
7298
6593
|
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
7299
6594
|
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
7300
6595
|
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
7301
|
-
"On mobile, ShellApp hides and inerts
|
|
6596
|
+
"On mobile, ShellApp hides and inerts desktop chrome, uses a solid primary stage, and composes MobileHeader, MobileSheetNav, ShellTools, and the persistent MobileBarNav around the same application-owned content.",
|
|
7302
6597
|
"When the application enables viewport-fit=cover, ShellApp reserves the shared top safe-area inset once for the complete mobile stage; nested routed, sheet, and tool headers must not add a second top inset.",
|
|
7303
6598
|
"Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
|
|
7304
6599
|
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
@@ -7306,15 +6601,15 @@
|
|
|
7306
6601
|
],
|
|
7307
6602
|
"frameworkCaveats": {
|
|
7308
6603
|
"customElements": [
|
|
7309
|
-
"Assign
|
|
6604
|
+
"Assign navigation, pageChrome, and tools as JavaScript properties on the managed ShellApp.",
|
|
7310
6605
|
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
7311
6606
|
],
|
|
7312
6607
|
"react": [
|
|
7313
|
-
"Use generated
|
|
6608
|
+
"Use the generated ShellApp wrapper, structured object props, named tool-view slots, and stable routed children.",
|
|
7314
6609
|
"Resolve all shell inputs from one router state before rendering the composition."
|
|
7315
6610
|
],
|
|
7316
6611
|
"angular": [
|
|
7317
|
-
"Use generated standalone
|
|
6612
|
+
"Use the generated standalone ShellApp adapter, bind structured object props, and preserve named tool-view slots.",
|
|
7318
6613
|
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
7319
6614
|
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
7320
6615
|
]
|
|
@@ -7340,6 +6635,10 @@
|
|
|
7340
6635
|
},
|
|
7341
6636
|
"api": {
|
|
7342
6637
|
"props": {
|
|
6638
|
+
"composition": {
|
|
6639
|
+
"type": "ShellAppComposition",
|
|
6640
|
+
"required": false
|
|
6641
|
+
},
|
|
7343
6642
|
"gradientPreset": {
|
|
7344
6643
|
"type": "ShellGradientPreset",
|
|
7345
6644
|
"required": false
|
|
@@ -7356,240 +6655,104 @@
|
|
|
7356
6655
|
"type": "NavChromeStyle",
|
|
7357
6656
|
"required": false
|
|
7358
6657
|
},
|
|
6658
|
+
"navigation": {
|
|
6659
|
+
"type": "ShellNavigationConfig",
|
|
6660
|
+
"required": false
|
|
6661
|
+
},
|
|
6662
|
+
"pageChrome": {
|
|
6663
|
+
"type": "ShellPageChromeConfig",
|
|
6664
|
+
"required": false
|
|
6665
|
+
},
|
|
7359
6666
|
"shortcutsEnabled": {
|
|
7360
6667
|
"type": "boolean",
|
|
7361
6668
|
"required": false
|
|
6669
|
+
},
|
|
6670
|
+
"tools": {
|
|
6671
|
+
"type": "ShellToolsConfig",
|
|
6672
|
+
"required": false
|
|
7362
6673
|
}
|
|
7363
6674
|
},
|
|
7364
6675
|
"events": [
|
|
7365
6676
|
{
|
|
7366
|
-
"name": "
|
|
7367
|
-
"detail": "
|
|
7368
|
-
}
|
|
7369
|
-
],
|
|
7370
|
-
"slots": []
|
|
7371
|
-
},
|
|
7372
|
-
"exports": {
|
|
7373
|
-
"customElement": "ds-shell-app",
|
|
7374
|
-
"react": "DsShellApp",
|
|
7375
|
-
"angular": "DsShellApp"
|
|
7376
|
-
},
|
|
7377
|
-
"dependencies": [
|
|
7378
|
-
"@ds-mo/ui",
|
|
7379
|
-
"@ds-mo/tokens"
|
|
7380
|
-
],
|
|
7381
|
-
"componentDependencies": []
|
|
7382
|
-
},
|
|
7383
|
-
{
|
|
7384
|
-
"id": "component:ds-shell-gradient-picker",
|
|
7385
|
-
"tag": "ds-shell-gradient-picker",
|
|
7386
|
-
"name": "shell-gradient-picker",
|
|
7387
|
-
"title": "ShellGradientPicker",
|
|
7388
|
-
"summary": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
7389
|
-
"intentStatus": "complete",
|
|
7390
|
-
"intent": {
|
|
7391
|
-
"audience": "specialized",
|
|
7392
|
-
"status": "deprecated",
|
|
7393
|
-
"replacedBy": "component:ds-swatch-picker",
|
|
7394
|
-
"replacementReason": "SwatchPicker now owns the same accessible interaction with a generic option model that supports both flat colors and gradients.",
|
|
7395
|
-
"summary": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
7396
|
-
"useWhen": [
|
|
7397
|
-
"Adding the Appearance or Theme section to the application's user or account menu.",
|
|
7398
|
-
"Users must choose the global ShellApp chrome treatment from none, cool, neutral, warm, or fresh."
|
|
7399
|
-
],
|
|
7400
|
-
"avoidWhen": [
|
|
7401
|
-
"Choosing semantic intent, page background, chart, content, or brand colors.",
|
|
7402
|
-
"Building an arbitrary gradient editor or allowing custom gradient values.",
|
|
7403
|
-
"A picker already exists for the application; provide exactly one canonical preference location.",
|
|
7404
|
-
"Rendering an individual swatch outside the complete picker."
|
|
7405
|
-
],
|
|
7406
|
-
"alternatives": [
|
|
6677
|
+
"name": "dsBreadcrumbSelect",
|
|
6678
|
+
"detail": "BreadcrumbSelectDetail"
|
|
6679
|
+
},
|
|
7407
6680
|
{
|
|
7408
|
-
"
|
|
7409
|
-
"
|
|
7410
|
-
|
|
7411
|
-
}
|
|
7412
|
-
],
|
|
7413
|
-
"commonlyComposedWith": [
|
|
7414
|
-
"component:ds-shell-app",
|
|
7415
|
-
"component:ds-menu"
|
|
7416
|
-
],
|
|
7417
|
-
"patterns": [
|
|
7418
|
-
"pattern:application-shell"
|
|
7419
|
-
],
|
|
7420
|
-
"accessibility": [
|
|
7421
|
-
"Provide a localized groupLabel that describes the shell appearance choice.",
|
|
7422
|
-
"Treat the presets as one radio group with one Tab stop; Arrow keys, Home, and End move and select within the group.",
|
|
7423
|
-
"Keep the visible compact swatches and their accessible preset names; do not rely on color alone for assistive technology."
|
|
7424
|
-
],
|
|
7425
|
-
"states": [
|
|
7426
|
-
"Neutral is the default preset; none renders solid shell chrome without a wash.",
|
|
7427
|
-
"Cool, neutral, warm, and fresh use design tokens and automatically adapt to the active light or dark color theme.",
|
|
7428
|
-
"Apply dsChange immediately to ShellApp.gradientPreset and keep the containing account menu open.",
|
|
7429
|
-
"The application owns local persistence, cross-tab synchronization, and server or account preference precedence; the picker owns only selection UI and events.",
|
|
7430
|
-
"Treat the fixed preset union as the only supported values and do not construct custom gradients."
|
|
7431
|
-
],
|
|
7432
|
-
"responsiveBehavior": [
|
|
7433
|
-
"Keep the compact picker in the user or account appearance menu on supported desktop and tablet shell compositions.",
|
|
7434
|
-
"The future mobile account surface may present the same preference differently."
|
|
7435
|
-
],
|
|
7436
|
-
"frameworkCaveats": {
|
|
7437
|
-
"customElements": [
|
|
7438
|
-
"Listen for dsChange, resolve application preference precedence, and assign the result to the single ShellApp gradientPreset property."
|
|
7439
|
-
],
|
|
7440
|
-
"react": [
|
|
7441
|
-
"Use the generated wrapper and handle onDsChange without closing the containing account menu."
|
|
7442
|
-
],
|
|
7443
|
-
"angular": [
|
|
7444
|
-
"Bind value to the resolved preference and handle dsChange to update application state."
|
|
7445
|
-
]
|
|
7446
|
-
},
|
|
7447
|
-
"references": [
|
|
6681
|
+
"name": "dsBrowseContextChange",
|
|
6682
|
+
"detail": "NavChromeStyle"
|
|
6683
|
+
},
|
|
7448
6684
|
{
|
|
7449
|
-
"
|
|
7450
|
-
"
|
|
6685
|
+
"name": "dsHeaderAction",
|
|
6686
|
+
"detail": "{ tool: PanelToolsToolId; id: string }"
|
|
7451
6687
|
},
|
|
7452
6688
|
{
|
|
7453
|
-
"
|
|
7454
|
-
"
|
|
6689
|
+
"name": "dsHeaderBack",
|
|
6690
|
+
"detail": "{ tool: PanelToolsToolId }"
|
|
7455
6691
|
},
|
|
7456
6692
|
{
|
|
7457
|
-
"
|
|
7458
|
-
"
|
|
7459
|
-
}
|
|
7460
|
-
]
|
|
7461
|
-
},
|
|
7462
|
-
"api": {
|
|
7463
|
-
"props": {
|
|
7464
|
-
"groupLabel": {
|
|
7465
|
-
"type": "string",
|
|
7466
|
-
"required": false
|
|
6693
|
+
"name": "dsNavFooterAction",
|
|
6694
|
+
"detail": "void"
|
|
7467
6695
|
},
|
|
7468
|
-
"value": {
|
|
7469
|
-
"type": "ShellGradientPreset",
|
|
7470
|
-
"required": false
|
|
7471
|
-
}
|
|
7472
|
-
},
|
|
7473
|
-
"events": [
|
|
7474
6696
|
{
|
|
7475
|
-
"name": "
|
|
7476
|
-
"detail": "
|
|
7477
|
-
}
|
|
7478
|
-
],
|
|
7479
|
-
"slots": []
|
|
7480
|
-
},
|
|
7481
|
-
"exports": {
|
|
7482
|
-
"customElement": "ds-shell-gradient-picker",
|
|
7483
|
-
"react": "DsShellGradientPicker",
|
|
7484
|
-
"angular": "DsShellGradientPicker"
|
|
7485
|
-
},
|
|
7486
|
-
"dependencies": [
|
|
7487
|
-
"@ds-mo/ui",
|
|
7488
|
-
"@ds-mo/tokens"
|
|
7489
|
-
],
|
|
7490
|
-
"componentDependencies": [
|
|
7491
|
-
"swatch-picker"
|
|
7492
|
-
]
|
|
7493
|
-
},
|
|
7494
|
-
{
|
|
7495
|
-
"id": "component:ds-shell-gradient-swatch",
|
|
7496
|
-
"tag": "ds-shell-gradient-swatch",
|
|
7497
|
-
"name": "shell-gradient-swatch",
|
|
7498
|
-
"title": "ShellGradientSwatch",
|
|
7499
|
-
"summary": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
7500
|
-
"intentStatus": "complete",
|
|
7501
|
-
"intent": {
|
|
7502
|
-
"audience": "internal",
|
|
7503
|
-
"status": "deprecated",
|
|
7504
|
-
"replacedBy": "component:ds-swatch-picker",
|
|
7505
|
-
"replacementReason": "SwatchPicker renders its option buttons internally so an individually published radio swatch is no longer needed.",
|
|
7506
|
-
"summary": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
7507
|
-
"useWhen": [
|
|
7508
|
-
"Maintaining or extending ShellGradientPicker inside CompoMo."
|
|
7509
|
-
],
|
|
7510
|
-
"avoidWhen": [
|
|
7511
|
-
"Building application UI directly; use ShellGradientPicker instead.",
|
|
7512
|
-
"Selecting semantic, brand, chart, page, or arbitrary gradient colors.",
|
|
7513
|
-
"Creating a partial or custom set of shell gradient choices."
|
|
7514
|
-
],
|
|
7515
|
-
"alternatives": [
|
|
6697
|
+
"name": "dsNavSelect",
|
|
6698
|
+
"detail": "string"
|
|
6699
|
+
},
|
|
7516
6700
|
{
|
|
7517
|
-
"
|
|
7518
|
-
"
|
|
7519
|
-
|
|
7520
|
-
}
|
|
7521
|
-
],
|
|
7522
|
-
"commonlyComposedWith": [
|
|
7523
|
-
"component:ds-swatch-picker"
|
|
7524
|
-
],
|
|
7525
|
-
"accessibility": [
|
|
7526
|
-
"Keep radio semantics, aria-checked state, and a preset-specific accessible name on the internal button.",
|
|
7527
|
-
"Let ShellGradientPicker manage the roving tab stop and group keyboard navigation.",
|
|
7528
|
-
"Do not expose an unlabeled color-only choice."
|
|
7529
|
-
],
|
|
7530
|
-
"states": [
|
|
7531
|
-
"Preset determines the token-based preview; selected determines radio state and selected visuals.",
|
|
7532
|
-
"The selected swatch owns the radio group's single tab stop while ShellGradientPicker coordinates selection and focus movement.",
|
|
7533
|
-
"isInactive disables interaction but does not remove the accessible name."
|
|
7534
|
-
],
|
|
7535
|
-
"responsiveBehavior": [
|
|
7536
|
-
"Preserve the fixed compact swatch geometry and let ShellGradientPicker own layout."
|
|
7537
|
-
],
|
|
7538
|
-
"frameworkCaveats": {
|
|
7539
|
-
"customElements": [
|
|
7540
|
-
"Do not instantiate this internal primitive in consuming applications."
|
|
7541
|
-
],
|
|
7542
|
-
"react": [
|
|
7543
|
-
"Use DsShellGradientPicker rather than the generated swatch wrapper."
|
|
7544
|
-
],
|
|
7545
|
-
"angular": [
|
|
7546
|
-
"Use DsShellGradientPicker rather than importing DsShellGradientSwatch."
|
|
7547
|
-
]
|
|
7548
|
-
},
|
|
7549
|
-
"references": [
|
|
6701
|
+
"name": "dsNavUserAction",
|
|
6702
|
+
"detail": "PanelNavUserActionDetail"
|
|
6703
|
+
},
|
|
7550
6704
|
{
|
|
7551
|
-
"
|
|
7552
|
-
"
|
|
7553
|
-
}
|
|
7554
|
-
]
|
|
7555
|
-
},
|
|
7556
|
-
"api": {
|
|
7557
|
-
"props": {
|
|
7558
|
-
"ariaLabel": {
|
|
7559
|
-
"type": "string | null",
|
|
7560
|
-
"required": false
|
|
6705
|
+
"name": "dsPageAction",
|
|
6706
|
+
"detail": "string"
|
|
7561
6707
|
},
|
|
7562
|
-
|
|
7563
|
-
"
|
|
7564
|
-
"
|
|
6708
|
+
{
|
|
6709
|
+
"name": "dsPageBack",
|
|
6710
|
+
"detail": "MouseEvent"
|
|
7565
6711
|
},
|
|
7566
|
-
|
|
7567
|
-
"
|
|
7568
|
-
"
|
|
6712
|
+
{
|
|
6713
|
+
"name": "dsPresentationChange",
|
|
6714
|
+
"detail": "{ presentation: 'drawer' | 'fullscreen' }"
|
|
7569
6715
|
},
|
|
7570
|
-
"selected": {
|
|
7571
|
-
"type": "boolean",
|
|
7572
|
-
"required": false
|
|
7573
|
-
}
|
|
7574
|
-
},
|
|
7575
|
-
"events": [
|
|
7576
6716
|
{
|
|
7577
|
-
"name": "
|
|
7578
|
-
"detail": "
|
|
6717
|
+
"name": "dsResponsiveModeChange",
|
|
6718
|
+
"detail": "{ mode: ShellResponsiveMode }"
|
|
6719
|
+
},
|
|
6720
|
+
{
|
|
6721
|
+
"name": "dsSubsectionChange",
|
|
6722
|
+
"detail": "string"
|
|
6723
|
+
},
|
|
6724
|
+
{
|
|
6725
|
+
"name": "dsTabChange",
|
|
6726
|
+
"detail": "string"
|
|
6727
|
+
},
|
|
6728
|
+
{
|
|
6729
|
+
"name": "dsToolChange",
|
|
6730
|
+
"detail": "{ id: PanelToolsToolId; selected: boolean }"
|
|
7579
6731
|
}
|
|
7580
6732
|
],
|
|
7581
6733
|
"slots": []
|
|
7582
6734
|
},
|
|
7583
6735
|
"exports": {
|
|
7584
|
-
"customElement": "ds-shell-
|
|
7585
|
-
"react": "
|
|
7586
|
-
"angular": "
|
|
6736
|
+
"customElement": "ds-shell-app",
|
|
6737
|
+
"react": "DsShellApp",
|
|
6738
|
+
"angular": "DsShellApp"
|
|
7587
6739
|
},
|
|
7588
6740
|
"dependencies": [
|
|
7589
6741
|
"@ds-mo/ui",
|
|
7590
6742
|
"@ds-mo/tokens"
|
|
7591
6743
|
],
|
|
7592
|
-
"componentDependencies": [
|
|
6744
|
+
"componentDependencies": [
|
|
6745
|
+
"bar-nav",
|
|
6746
|
+
"bar-title",
|
|
6747
|
+
"button-unfilled",
|
|
6748
|
+
"mobile-bar-nav",
|
|
6749
|
+
"mobile-header",
|
|
6750
|
+
"mobile-sheet-nav",
|
|
6751
|
+
"panel-nav",
|
|
6752
|
+
"shell-page",
|
|
6753
|
+
"shell-tools",
|
|
6754
|
+
"tooltip"
|
|
6755
|
+
]
|
|
7593
6756
|
},
|
|
7594
6757
|
{
|
|
7595
6758
|
"id": "component:ds-shell-page",
|
|
@@ -7726,14 +6889,14 @@
|
|
|
7726
6889
|
"tag": "ds-shell-tools",
|
|
7727
6890
|
"name": "shell-tools",
|
|
7728
6891
|
"title": "ShellTools",
|
|
7729
|
-
"summary": "Responsive persistent host for
|
|
6892
|
+
"summary": "Responsive persistent host for explicitly defined global tools, adapting PanelTools desktop/tablet chrome to configured mobile destinations and groups.",
|
|
7730
6893
|
"intentStatus": "complete",
|
|
7731
6894
|
"intent": {
|
|
7732
6895
|
"audience": "specialized",
|
|
7733
|
-
"status": "
|
|
7734
|
-
"summary": "Responsive persistent host for
|
|
6896
|
+
"status": "stable",
|
|
6897
|
+
"summary": "Responsive persistent host for explicitly defined global tools, adapting PanelTools desktop/tablet chrome to configured mobile destinations and groups.",
|
|
7735
6898
|
"useWhen": [
|
|
7736
|
-
"A ShellApp must preserve the same
|
|
6899
|
+
"A ShellApp must preserve the same product-owned global tool views across desktop, tablet, and mobile."
|
|
7737
6900
|
],
|
|
7738
6901
|
"avoidWhen": [
|
|
7739
6902
|
"The tools exist only in desktop and tablet chrome; PanelTools remains supported for that case.",
|
|
@@ -7743,7 +6906,7 @@
|
|
|
7743
6906
|
{
|
|
7744
6907
|
"when": "Only legacy rail and drawer behavior is required.",
|
|
7745
6908
|
"component": "component:ds-panel-tools",
|
|
7746
|
-
"reason": "PanelTools
|
|
6909
|
+
"reason": "PanelTools is the direct desktop and tablet rail-and-drawer primitive."
|
|
7747
6910
|
}
|
|
7748
6911
|
],
|
|
7749
6912
|
"commonlyComposedWith": [
|
|
@@ -7763,7 +6926,8 @@
|
|
|
7763
6926
|
],
|
|
7764
6927
|
"states": [
|
|
7765
6928
|
"The application owns open and activeTool and replaces headers when tool depth changes.",
|
|
7766
|
-
"
|
|
6929
|
+
"Items with mobileDestination inbox map to one mobile Inbox destination while retaining the actual active tool id; the canonical recipe groups Messages, Stacks, and Activity.",
|
|
6930
|
+
"Stable tool ids own named slots; label, order, rail placement, shortcut, and mobile destination are explicit item data.",
|
|
7767
6931
|
"Switching responsive mode must not recreate application-owned slotted product elements."
|
|
7768
6932
|
],
|
|
7769
6933
|
"responsiveBehavior": [
|
|
@@ -7806,10 +6970,6 @@
|
|
|
7806
6970
|
"type": "PanelToolsHeaders",
|
|
7807
6971
|
"required": false
|
|
7808
6972
|
},
|
|
7809
|
-
"headersJson": {
|
|
7810
|
-
"type": "string",
|
|
7811
|
-
"required": false
|
|
7812
|
-
},
|
|
7813
6973
|
"inboxLabel": {
|
|
7814
6974
|
"type": "string",
|
|
7815
6975
|
"required": false
|
|
@@ -7822,10 +6982,6 @@
|
|
|
7822
6982
|
"type": "PanelToolsItem[]",
|
|
7823
6983
|
"required": false
|
|
7824
6984
|
},
|
|
7825
|
-
"itemsJson": {
|
|
7826
|
-
"type": "string",
|
|
7827
|
-
"required": false
|
|
7828
|
-
},
|
|
7829
6985
|
"open": {
|
|
7830
6986
|
"type": "boolean",
|
|
7831
6987
|
"required": false
|
|
@@ -8862,7 +8018,7 @@
|
|
|
8862
8018
|
"states": [
|
|
8863
8019
|
"A variant is atomic: font size, line height, weight, and letter spacing stay together and are not overridden by consumers.",
|
|
8864
8020
|
"Emphasis selects the supported stronger recipe for local hierarchy; it does not independently mean selected or active.",
|
|
8865
|
-
"Omitted color inherits currentColor. Explicit semantic aliases or CSS-variable references are used
|
|
8021
|
+
"Omitted color inherits currentColor without imposing a host color declaration, so an owning component may apply its semantic foreground directly without depending on stylesheet order. Explicit semantic aliases or CSS-variable references are used when Text has an independent color role.",
|
|
8866
8022
|
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
8867
8023
|
"Line truncation and wrapping require an owner-supplied width constraint and content-aware composition decision.",
|
|
8868
8024
|
"Solid underline is the default link affordance; brand-blue links may omit it at rest. Dotted underline communicates hidden or supplemental interaction such as a tooltip. Decoration does not make Text interactive by itself.",
|