@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
|
@@ -728,7 +728,7 @@
|
|
|
728
728
|
],
|
|
729
729
|
"frameworkCaveats": {
|
|
730
730
|
"customElements": [
|
|
731
|
-
"Assign tabs as a JavaScript property
|
|
731
|
+
"Assign tabs as a JavaScript property and replace the array reference when the collection changes.",
|
|
732
732
|
"Update tabs, heading, basePath, currentUrl, and navStyle from the same resolved route state."
|
|
733
733
|
],
|
|
734
734
|
"react": [
|
|
@@ -779,10 +779,6 @@
|
|
|
779
779
|
"type": "BarNavTab[]",
|
|
780
780
|
"required": false
|
|
781
781
|
},
|
|
782
|
-
"tabsJson": {
|
|
783
|
-
"type": "string",
|
|
784
|
-
"required": false
|
|
785
|
-
},
|
|
786
782
|
"value": {
|
|
787
783
|
"type": "string",
|
|
788
784
|
"required": false
|
|
@@ -1374,7 +1370,7 @@
|
|
|
1374
1370
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
1375
1371
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
1376
1372
|
"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.",
|
|
1377
|
-
"ButtonFilled has no active or selected state; a filled action is a command, not a toggle or a persistent selection.",
|
|
1373
|
+
"ButtonFilled has no active, pressed, or selected state; a filled action is a command, not a toggle or a persistent selection.",
|
|
1378
1374
|
"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.",
|
|
1379
1375
|
"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."
|
|
1380
1376
|
],
|
|
@@ -1456,10 +1452,6 @@
|
|
|
1456
1452
|
"type": "boolean",
|
|
1457
1453
|
"required": false
|
|
1458
1454
|
},
|
|
1459
|
-
"pressed": {
|
|
1460
|
-
"type": "boolean | undefined",
|
|
1461
|
-
"required": false
|
|
1462
|
-
},
|
|
1463
1455
|
"rounded": {
|
|
1464
1456
|
"type": "boolean",
|
|
1465
1457
|
"required": false
|
|
@@ -1500,6 +1492,7 @@
|
|
|
1500
1492
|
"@ds-mo/icons"
|
|
1501
1493
|
],
|
|
1502
1494
|
"registryDependencies": [
|
|
1495
|
+
"badge",
|
|
1503
1496
|
"icon",
|
|
1504
1497
|
"loader",
|
|
1505
1498
|
"text"
|
|
@@ -1562,7 +1555,7 @@
|
|
|
1562
1555
|
"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.",
|
|
1563
1556
|
"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.",
|
|
1564
1557
|
"Use haspopup directly for a non-menu popup such as a listbox or dialog; those cases get no chevron.",
|
|
1565
|
-
"Use
|
|
1558
|
+
"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.",
|
|
1566
1559
|
"Treat notification dots as supplemental unread or status information; never use a dot as the sole state, meaning, or accessible name.",
|
|
1567
1560
|
"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.",
|
|
1568
1561
|
"Use inactive state only when an unavailable action must remain visible.",
|
|
@@ -1570,8 +1563,9 @@
|
|
|
1570
1563
|
],
|
|
1571
1564
|
"states": [
|
|
1572
1565
|
"Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
|
|
1573
|
-
"
|
|
1574
|
-
"
|
|
1566
|
+
"A true pressed toggle and owner-controlled isActive emphasis share the selected visual treatment, but only pressed supplies toggle semantics and dsChange.",
|
|
1567
|
+
"General content UI keeps the selected interaction fill and border for pressed or active emphasis.",
|
|
1568
|
+
"Shell, navigation, and tool-rail composites use isActive with foreground-only emphasis and no selected fill or border.",
|
|
1575
1569
|
"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.",
|
|
1576
1570
|
"Surface context must match the actual parent surface; translucent, inverted, media, and always-dark treatments are reserved for those surfaces.",
|
|
1577
1571
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
@@ -1592,10 +1586,10 @@
|
|
|
1592
1586
|
"Roving-focus composites own the button's tab-stop placement and selection semantics."
|
|
1593
1587
|
],
|
|
1594
1588
|
"react": [
|
|
1595
|
-
"
|
|
1589
|
+
"Use pressed for controlled toggles and isActive for composite-owned emphasis; keep async state synchronized from the owner."
|
|
1596
1590
|
],
|
|
1597
1591
|
"angular": [
|
|
1598
|
-
"
|
|
1592
|
+
"Use pressed for controlled toggles and isActive for composite-owned emphasis; keep async state synchronized from the owner."
|
|
1599
1593
|
]
|
|
1600
1594
|
},
|
|
1601
1595
|
"references": [
|
|
@@ -1725,209 +1719,82 @@
|
|
|
1725
1719
|
]
|
|
1726
1720
|
},
|
|
1727
1721
|
{
|
|
1728
|
-
"name": "card-data-viz
|
|
1729
|
-
"title": "
|
|
1730
|
-
"description": "
|
|
1722
|
+
"name": "card-data-viz",
|
|
1723
|
+
"title": "CardDataViz",
|
|
1724
|
+
"description": "Standard data-visualization card chrome with variant-owned chart and legend composition.",
|
|
1731
1725
|
"type": "registry:ui",
|
|
1732
1726
|
"meta": {
|
|
1733
1727
|
"library": "@ds-mo/ui",
|
|
1734
1728
|
"distribution": "npm",
|
|
1735
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz
|
|
1736
|
-
"source": "src/wc/components/
|
|
1729
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz",
|
|
1730
|
+
"source": "src/wc/components/CardDataViz/CardDataViz.tsx",
|
|
1737
1731
|
"intentStatus": "complete",
|
|
1738
1732
|
"intent": {
|
|
1739
1733
|
"audience": "specialized",
|
|
1740
1734
|
"status": "experimental",
|
|
1741
|
-
"summary": "
|
|
1735
|
+
"summary": "Standard data-visualization card chrome with variant-owned chart and legend composition.",
|
|
1742
1736
|
"useWhen": [
|
|
1743
|
-
"A
|
|
1744
|
-
"
|
|
1737
|
+
"A chart, legend, metric visualization, or custom data-viz composition needs standard card chrome.",
|
|
1738
|
+
"Bar and line legends should remain static, or a donut and legend should cross-highlight without redundant donut tooltips.",
|
|
1739
|
+
"A data-viz card needs a visible heading, optional filter action, and application-owned chart data."
|
|
1745
1740
|
],
|
|
1746
1741
|
"avoidWhen": [
|
|
1747
|
-
"The
|
|
1748
|
-
"The
|
|
1742
|
+
"The card contains editable settings; use CardSetting.",
|
|
1743
|
+
"The surface contains ordinary non-visualization content.",
|
|
1744
|
+
"The application needs to replace the card chrome rather than compose its chart and actions."
|
|
1749
1745
|
],
|
|
1750
1746
|
"alternatives": [
|
|
1751
1747
|
{
|
|
1752
|
-
"when": "The
|
|
1753
|
-
"component": "component:ds-
|
|
1754
|
-
"reason": "
|
|
1755
|
-
},
|
|
1756
|
-
{
|
|
1757
|
-
"when": "The visualization communicates change as continuous lines.",
|
|
1758
|
-
"component": "component:ds-card-data-viz-line",
|
|
1759
|
-
"reason": "CardDataVizLine owns the canonical line-chart card layout."
|
|
1760
|
-
},
|
|
1761
|
-
{
|
|
1762
|
-
"when": "The visualization communicates parts of one total with synchronized slice emphasis.",
|
|
1763
|
-
"component": "component:ds-card-data-viz-donut",
|
|
1764
|
-
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1748
|
+
"when": "The surface contains editable settings.",
|
|
1749
|
+
"component": "component:ds-card-setting",
|
|
1750
|
+
"reason": "CardSetting owns the controlled settings-section workflow."
|
|
1765
1751
|
}
|
|
1766
1752
|
],
|
|
1767
1753
|
"commonlyComposedWith": [
|
|
1768
|
-
"component:ds-card-shell-data-viz",
|
|
1769
1754
|
"component:ds-chart-bar",
|
|
1770
|
-
"component:ds-chart-bar-stacked",
|
|
1771
|
-
"component:ds-chart-legend",
|
|
1772
|
-
"component:ds-button-unfilled"
|
|
1773
|
-
],
|
|
1774
|
-
"accessibility": [
|
|
1775
|
-
"Provide a concise heading that identifies the measure and meaningful visible labels for every legend entry.",
|
|
1776
|
-
"Keep essential series and value context available textually rather than relying on bar color alone.",
|
|
1777
|
-
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1778
|
-
],
|
|
1779
|
-
"states": [
|
|
1780
|
-
"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.",
|
|
1781
|
-
"The chart region fills the remaining card body while an optional legend remains content-sized.",
|
|
1782
|
-
"The card disables local hover highlighting on a slotted ChartLegend because bar legends are static keys.",
|
|
1783
|
-
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1784
|
-
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1785
|
-
],
|
|
1786
|
-
"responsiveBehavior": [
|
|
1787
|
-
"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.",
|
|
1788
|
-
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1789
|
-
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1790
|
-
],
|
|
1791
|
-
"frameworkCaveats": {
|
|
1792
|
-
"customElements": [
|
|
1793
|
-
"Assign data or series and categories as JavaScript properties, then place the bar chart and optional legend in their named slots."
|
|
1794
|
-
],
|
|
1795
|
-
"react": [
|
|
1796
|
-
"Keep filter and dataset state in the owner; pass the chart and optional legend with chart and legend slot attributes."
|
|
1797
|
-
],
|
|
1798
|
-
"angular": [
|
|
1799
|
-
"Keep filter and dataset state in the owner; project the chart and optional legend into the chart and legend slots."
|
|
1800
|
-
]
|
|
1801
|
-
},
|
|
1802
|
-
"references": [
|
|
1803
|
-
{
|
|
1804
|
-
"label": "Storybook examples",
|
|
1805
|
-
"path": "src/wc/components/CardDataVizBar/CardDataVizBar.stories.ts"
|
|
1806
|
-
}
|
|
1807
|
-
]
|
|
1808
|
-
},
|
|
1809
|
-
"props": {
|
|
1810
|
-
"cardWidth": {
|
|
1811
|
-
"type": "CardDataVizBarWidth",
|
|
1812
|
-
"required": false
|
|
1813
|
-
},
|
|
1814
|
-
"filterLabel": {
|
|
1815
|
-
"type": "string",
|
|
1816
|
-
"required": false
|
|
1817
|
-
},
|
|
1818
|
-
"heading": {
|
|
1819
|
-
"type": "string",
|
|
1820
|
-
"required": true
|
|
1821
|
-
}
|
|
1822
|
-
},
|
|
1823
|
-
"events": [
|
|
1824
|
-
{
|
|
1825
|
-
"name": "dsFilterClick",
|
|
1826
|
-
"detail": "void"
|
|
1827
|
-
}
|
|
1828
|
-
],
|
|
1829
|
-
"slots": [],
|
|
1830
|
-
"exports": {
|
|
1831
|
-
"customElement": "ds-card-data-viz-bar",
|
|
1832
|
-
"react": "DsCardDataVizBar",
|
|
1833
|
-
"angular": "DsCardDataVizBar"
|
|
1834
|
-
}
|
|
1835
|
-
},
|
|
1836
|
-
"dependencies": [
|
|
1837
|
-
"@ds-mo/ui",
|
|
1838
|
-
"@ds-mo/tokens"
|
|
1839
|
-
],
|
|
1840
|
-
"registryDependencies": [
|
|
1841
|
-
"button-unfilled",
|
|
1842
|
-
"card-shell-data-viz"
|
|
1843
|
-
]
|
|
1844
|
-
},
|
|
1845
|
-
{
|
|
1846
|
-
"name": "card-data-viz-donut",
|
|
1847
|
-
"title": "CardDataVizDonut",
|
|
1848
|
-
"description": "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.",
|
|
1849
|
-
"type": "registry:ui",
|
|
1850
|
-
"meta": {
|
|
1851
|
-
"library": "@ds-mo/ui",
|
|
1852
|
-
"distribution": "npm",
|
|
1853
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz-donut",
|
|
1854
|
-
"source": "src/wc/components/CardDataVizDonut/CardDataVizDonut.tsx",
|
|
1855
|
-
"intentStatus": "complete",
|
|
1856
|
-
"intent": {
|
|
1857
|
-
"audience": "specialized",
|
|
1858
|
-
"status": "experimental",
|
|
1859
|
-
"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.",
|
|
1860
|
-
"useWhen": [
|
|
1861
|
-
"A dashboard widget needs the standard donut and visible legend composition in one data-viz card.",
|
|
1862
|
-
"Chart slices and legend rows should cross-highlight without application hover wiring.",
|
|
1863
|
-
"The card needs the shared header filter action while the application owns filter state and menu content."
|
|
1864
|
-
],
|
|
1865
|
-
"avoidWhen": [
|
|
1866
|
-
"The visualization is a bar, line, metric, or custom chart; compose CardShellDataViz directly.",
|
|
1867
|
-
"The product needs a custom legend treatment such as chips, external stat callouts, or selectable filters.",
|
|
1868
|
-
"The surface is a settings section or generic content card."
|
|
1869
|
-
],
|
|
1870
|
-
"alternatives": [
|
|
1871
|
-
{
|
|
1872
|
-
"when": "The visualization needs shared data-viz chrome without the canonical donut layout.",
|
|
1873
|
-
"component": "component:ds-card-shell-data-viz",
|
|
1874
|
-
"reason": "CardShellDataViz owns only the header, actions, width, and body boundary."
|
|
1875
|
-
},
|
|
1876
|
-
{
|
|
1877
|
-
"when": "A donut and legend need a custom layout without card chrome.",
|
|
1878
|
-
"component": "component:ds-chart-donut",
|
|
1879
|
-
"reason": "Compose the chart and ChartLegend directly and own their layout and hover synchronization."
|
|
1880
|
-
}
|
|
1881
|
-
],
|
|
1882
|
-
"commonlyComposedWith": [
|
|
1883
|
-
"component:ds-card-shell-data-viz",
|
|
1884
1755
|
"component:ds-chart-donut",
|
|
1756
|
+
"component:ds-chart-line",
|
|
1885
1757
|
"component:ds-chart-legend",
|
|
1886
|
-
"component:ds-
|
|
1887
|
-
"component:ds-skeleton"
|
|
1758
|
+
"component:ds-button-unfilled"
|
|
1888
1759
|
],
|
|
1889
1760
|
"accessibility": [
|
|
1890
|
-
"Provide a concise
|
|
1891
|
-
"
|
|
1892
|
-
"
|
|
1761
|
+
"Provide a concise visible heading; the component renders it as a section heading.",
|
|
1762
|
+
"Slotted actions must provide accessible names and controlled-state semantics.",
|
|
1763
|
+
"Charts retain their own image names and data summaries.",
|
|
1764
|
+
"A visible donut legend owns persistent labels and values, so donut mode suppresses the redundant slice tooltip."
|
|
1893
1765
|
],
|
|
1894
1766
|
"states": [
|
|
1895
|
-
"
|
|
1896
|
-
"
|
|
1897
|
-
"
|
|
1898
|
-
"
|
|
1899
|
-
"The filter action emits intent while the parent owns popup content, applied constraints, and data updates."
|
|
1767
|
+
"Custom mode provides flexible body chrome and does not mutate chart or legend interaction.",
|
|
1768
|
+
"Bar and line modes keep a slotted legend static by disabling hover emphasis.",
|
|
1769
|
+
"Donut mode synchronizes active labels between chart and legend and shows chart tooltips only when no legend is present.",
|
|
1770
|
+
"showFilter adds the standard filter action and emits dsFilterClick without owning filter state."
|
|
1900
1771
|
],
|
|
1901
1772
|
"responsiveBehavior": [
|
|
1902
|
-
"
|
|
1903
|
-
"The
|
|
1904
|
-
"
|
|
1773
|
+
"The sm, md, or lg width sets a matching token-based minimum height and remains constrained by its parent.",
|
|
1774
|
+
"The body allocates remaining height to the chart while legends retain content height.",
|
|
1775
|
+
"Parent layouts own wrapping, stacking, and breakpoint-dependent card width."
|
|
1905
1776
|
],
|
|
1906
1777
|
"frameworkCaveats": {
|
|
1907
1778
|
"customElements": [
|
|
1908
|
-
"
|
|
1779
|
+
"Set variant to bar, line, or donut when the component should manage legend interaction; slot chart, legend, actions, and supporting content by name."
|
|
1909
1780
|
],
|
|
1910
1781
|
"react": [
|
|
1911
|
-
"Keep
|
|
1782
|
+
"Keep chart data in React and pass chart, legend, and action elements through named slots."
|
|
1912
1783
|
],
|
|
1913
1784
|
"angular": [
|
|
1914
|
-
"Keep
|
|
1785
|
+
"Keep chart data in Angular and project chart, legend, and action elements through named slots."
|
|
1915
1786
|
]
|
|
1916
1787
|
},
|
|
1917
1788
|
"references": [
|
|
1918
1789
|
{
|
|
1919
1790
|
"label": "Storybook examples",
|
|
1920
|
-
"path": "src/wc/components/
|
|
1921
|
-
},
|
|
1922
|
-
{
|
|
1923
|
-
"label": "Dashboard review examples",
|
|
1924
|
-
"path": "src/wc/stories/DataViz/OverviewReview.stories.ts"
|
|
1791
|
+
"path": "src/wc/components/CardDataViz/CardDataViz.stories.ts"
|
|
1925
1792
|
}
|
|
1926
1793
|
]
|
|
1927
1794
|
},
|
|
1928
1795
|
"props": {
|
|
1929
1796
|
"cardWidth": {
|
|
1930
|
-
"type": "
|
|
1797
|
+
"type": "CardDataVizWidth",
|
|
1931
1798
|
"required": false
|
|
1932
1799
|
},
|
|
1933
1800
|
"filterLabel": {
|
|
@@ -1937,118 +1804,14 @@
|
|
|
1937
1804
|
"heading": {
|
|
1938
1805
|
"type": "string",
|
|
1939
1806
|
"required": true
|
|
1940
|
-
}
|
|
1941
|
-
},
|
|
1942
|
-
"events": [
|
|
1943
|
-
{
|
|
1944
|
-
"name": "dsFilterClick",
|
|
1945
|
-
"detail": "void"
|
|
1946
|
-
}
|
|
1947
|
-
],
|
|
1948
|
-
"slots": [],
|
|
1949
|
-
"exports": {
|
|
1950
|
-
"customElement": "ds-card-data-viz-donut",
|
|
1951
|
-
"react": "DsCardDataVizDonut",
|
|
1952
|
-
"angular": "DsCardDataVizDonut"
|
|
1953
|
-
}
|
|
1954
|
-
},
|
|
1955
|
-
"dependencies": [
|
|
1956
|
-
"@ds-mo/ui",
|
|
1957
|
-
"@ds-mo/tokens"
|
|
1958
|
-
],
|
|
1959
|
-
"registryDependencies": [
|
|
1960
|
-
"button-unfilled",
|
|
1961
|
-
"card-shell-data-viz"
|
|
1962
|
-
]
|
|
1963
|
-
},
|
|
1964
|
-
{
|
|
1965
|
-
"name": "card-data-viz-line",
|
|
1966
|
-
"title": "CardDataVizLine",
|
|
1967
|
-
"description": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1968
|
-
"type": "registry:ui",
|
|
1969
|
-
"meta": {
|
|
1970
|
-
"library": "@ds-mo/ui",
|
|
1971
|
-
"distribution": "npm",
|
|
1972
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz-line",
|
|
1973
|
-
"source": "src/wc/components/CardDataVizLine/CardDataVizLine.tsx",
|
|
1974
|
-
"intentStatus": "complete",
|
|
1975
|
-
"intent": {
|
|
1976
|
-
"audience": "specialized",
|
|
1977
|
-
"status": "experimental",
|
|
1978
|
-
"summary": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1979
|
-
"useWhen": [
|
|
1980
|
-
"A dashboard widget needs the standard line chart and visible series key in one data-viz card.",
|
|
1981
|
-
"The legend identifies static line series and should not highlight or dim rows on hover."
|
|
1982
|
-
],
|
|
1983
|
-
"avoidWhen": [
|
|
1984
|
-
"The visualization needs chart-to-legend hover synchronization or selectable series controls.",
|
|
1985
|
-
"The product needs a custom legend treatment, supporting metrics, or an alternate chart layout."
|
|
1986
|
-
],
|
|
1987
|
-
"alternatives": [
|
|
1988
|
-
{
|
|
1989
|
-
"when": "The line chart and legend need a custom layout without card chrome.",
|
|
1990
|
-
"component": "component:ds-chart-line",
|
|
1991
|
-
"reason": "Compose ChartLine and a static ChartLegend directly in the product-owned layout."
|
|
1992
|
-
},
|
|
1993
|
-
{
|
|
1994
|
-
"when": "The visualization communicates parts of a total with synchronized slice emphasis.",
|
|
1995
|
-
"component": "component:ds-card-data-viz-donut",
|
|
1996
|
-
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1997
|
-
}
|
|
1998
|
-
],
|
|
1999
|
-
"commonlyComposedWith": [
|
|
2000
|
-
"component:ds-card-shell-data-viz",
|
|
2001
|
-
"component:ds-chart-line",
|
|
2002
|
-
"component:ds-chart-legend",
|
|
2003
|
-
"component:ds-button-unfilled"
|
|
2004
|
-
],
|
|
2005
|
-
"accessibility": [
|
|
2006
|
-
"Provide a concise heading that identifies the trend and meaningful visible labels for every legend entry.",
|
|
2007
|
-
"Keep essential series and value context available textually rather than relying on line color alone.",
|
|
2008
|
-
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
2009
|
-
],
|
|
2010
|
-
"states": [
|
|
2011
|
-
"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.",
|
|
2012
|
-
"The chart region fills the remaining card body while the legend remains content-sized.",
|
|
2013
|
-
"The card disables local hover highlighting on a slotted ChartLegend because the line chart is static.",
|
|
2014
|
-
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
2015
|
-
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
2016
|
-
],
|
|
2017
|
-
"responsiveBehavior": [
|
|
2018
|
-
"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.",
|
|
2019
|
-
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
2020
|
-
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
2021
|
-
],
|
|
2022
|
-
"frameworkCaveats": {
|
|
2023
|
-
"customElements": [
|
|
2024
|
-
"Assign series, categories, and legend items as JavaScript properties, then place the chart and legend in their named slots."
|
|
2025
|
-
],
|
|
2026
|
-
"react": [
|
|
2027
|
-
"Keep filter and dataset state in the owner; pass the chart and legend with chart and legend slot attributes."
|
|
2028
|
-
],
|
|
2029
|
-
"angular": [
|
|
2030
|
-
"Keep filter and dataset state in the owner; project the chart and legend into the chart and legend slots."
|
|
2031
|
-
]
|
|
2032
1807
|
},
|
|
2033
|
-
"
|
|
2034
|
-
|
|
2035
|
-
"label": "Storybook examples",
|
|
2036
|
-
"path": "src/wc/components/CardDataVizLine/CardDataVizLine.stories.ts"
|
|
2037
|
-
}
|
|
2038
|
-
]
|
|
2039
|
-
},
|
|
2040
|
-
"props": {
|
|
2041
|
-
"cardWidth": {
|
|
2042
|
-
"type": "CardDataVizLineWidth",
|
|
1808
|
+
"showFilter": {
|
|
1809
|
+
"type": "boolean",
|
|
2043
1810
|
"required": false
|
|
2044
1811
|
},
|
|
2045
|
-
"
|
|
2046
|
-
"type": "
|
|
1812
|
+
"variant": {
|
|
1813
|
+
"type": "CardDataVizVariant",
|
|
2047
1814
|
"required": false
|
|
2048
|
-
},
|
|
2049
|
-
"heading": {
|
|
2050
|
-
"type": "string",
|
|
2051
|
-
"required": true
|
|
2052
1815
|
}
|
|
2053
1816
|
},
|
|
2054
1817
|
"events": [
|
|
@@ -2059,9 +1822,9 @@
|
|
|
2059
1822
|
],
|
|
2060
1823
|
"slots": [],
|
|
2061
1824
|
"exports": {
|
|
2062
|
-
"customElement": "ds-card-data-viz
|
|
2063
|
-
"react": "
|
|
2064
|
-
"angular": "
|
|
1825
|
+
"customElement": "ds-card-data-viz",
|
|
1826
|
+
"react": "DsCardDataViz",
|
|
1827
|
+
"angular": "DsCardDataViz"
|
|
2065
1828
|
}
|
|
2066
1829
|
},
|
|
2067
1830
|
"dependencies": [
|
|
@@ -2070,13 +1833,13 @@
|
|
|
2070
1833
|
],
|
|
2071
1834
|
"registryDependencies": [
|
|
2072
1835
|
"button-unfilled",
|
|
2073
|
-
"
|
|
1836
|
+
"text"
|
|
2074
1837
|
]
|
|
2075
1838
|
},
|
|
2076
1839
|
{
|
|
2077
1840
|
"name": "card-overview",
|
|
2078
1841
|
"title": "CardOverview",
|
|
2079
|
-
"description": "Page-level summary
|
|
1842
|
+
"description": "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.",
|
|
2080
1843
|
"type": "registry:ui",
|
|
2081
1844
|
"meta": {
|
|
2082
1845
|
"library": "@ds-mo/ui",
|
|
@@ -2087,7 +1850,7 @@
|
|
|
2087
1850
|
"intent": {
|
|
2088
1851
|
"audience": "general",
|
|
2089
1852
|
"status": "experimental",
|
|
2090
|
-
"summary": "Page-level summary
|
|
1853
|
+
"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.",
|
|
2091
1854
|
"useWhen": [
|
|
2092
1855
|
"A page opens with one headline figure that the surrounding measures explain.",
|
|
2093
1856
|
"Every measure is compared against the same period, so one caption describes the comparison for all of them.",
|
|
@@ -2102,8 +1865,8 @@
|
|
|
2102
1865
|
"alternatives": [
|
|
2103
1866
|
{
|
|
2104
1867
|
"when": "A measure needs a chart or other data visualization.",
|
|
2105
|
-
"component": "component:ds-card-
|
|
2106
|
-
"reason": "
|
|
1868
|
+
"component": "component:ds-card-data-viz",
|
|
1869
|
+
"reason": "CardDataViz owns the data-visualization card contract; the overview grid presents values and change only."
|
|
2107
1870
|
},
|
|
2108
1871
|
{
|
|
2109
1872
|
"when": "The surface is a settings section with an edit workflow.",
|
|
@@ -2131,26 +1894,38 @@
|
|
|
2131
1894
|
"Omit a trend when there is nothing to report; resolveMetricTrend returns null in that case so no zero change is rendered.",
|
|
2132
1895
|
"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.",
|
|
2133
1896
|
"Loading replaces the score and the measures with skeletons and does not alter the slotted period control.",
|
|
2134
|
-
"
|
|
1897
|
+
"At most six measures are shown. Keep larger collections outside the summary bar rather than turning it into a dense dashboard.",
|
|
1898
|
+
"The period control is slotted rather than owned, because the choice of stepper, select, or date range varies by product surface.",
|
|
1899
|
+
"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.",
|
|
1900
|
+
"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."
|
|
2135
1901
|
],
|
|
2136
1902
|
"responsiveBehavior": [
|
|
2137
1903
|
"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.",
|
|
1904
|
+
"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.",
|
|
2138
1905
|
"Set metricMinWidth to change the width a measure may shrink to before the grid drops a column.",
|
|
2139
1906
|
"The score block hugs its content and never shrinks, so the headline figure holds its size while the grid absorbs the remaining width.",
|
|
2140
|
-
"
|
|
1907
|
+
"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.",
|
|
1908
|
+
"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.",
|
|
1909
|
+
"Every measure occupies a full-width row in the stacked state.",
|
|
1910
|
+
"Set layout to stacked when the owning page shell enters a responsive mode before the card's own container reaches its narrow threshold.",
|
|
1911
|
+
"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.",
|
|
1912
|
+
"Leave scroll collapse inactive on page modes that do not support sticky compact summary chrome."
|
|
2141
1913
|
],
|
|
2142
1914
|
"frameworkCaveats": {
|
|
2143
1915
|
"customElements": [
|
|
2144
1916
|
"Assign score and metrics as JavaScript properties; both are objects and cannot be expressed as HTML attributes.",
|
|
2145
|
-
"Place the period control in the filter slot; the component reserves space for it but never renders one."
|
|
1917
|
+
"Place the period control in the filter slot; the component reserves space for it but never renders one.",
|
|
1918
|
+
"When driving scroll collapse, update scrollCollapseProgress from page-owned geometry and swap to a separate compact presentation at the endpoint."
|
|
2146
1919
|
],
|
|
2147
1920
|
"react": [
|
|
2148
1921
|
"Pass score and metrics as props and read the selected measure from the onDsMetricSelect event detail.",
|
|
2149
|
-
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision."
|
|
1922
|
+
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision.",
|
|
1923
|
+
"Keep sticky geometry and scrollCollapseProgress in the page owner; CardOverview only renders the visual collapse."
|
|
2150
1924
|
],
|
|
2151
1925
|
"angular": [
|
|
2152
1926
|
"Bind [score] and [metrics] as properties and read the selected measure from $event.detail on (dsMetricSelect).",
|
|
2153
|
-
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision."
|
|
1927
|
+
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision.",
|
|
1928
|
+
"Keep sticky geometry and [scrollCollapseProgress] in the page owner; CardOverview only renders the visual collapse."
|
|
2154
1929
|
]
|
|
2155
1930
|
},
|
|
2156
1931
|
"references": [
|
|
@@ -2173,6 +1948,10 @@
|
|
|
2173
1948
|
"type": "boolean",
|
|
2174
1949
|
"required": false
|
|
2175
1950
|
},
|
|
1951
|
+
"layout": {
|
|
1952
|
+
"type": "CardOverviewLayout",
|
|
1953
|
+
"required": false
|
|
1954
|
+
},
|
|
2176
1955
|
"metricMinWidth": {
|
|
2177
1956
|
"type": "string",
|
|
2178
1957
|
"required": false
|
|
@@ -2196,6 +1975,14 @@
|
|
|
2196
1975
|
"scoreErrorMessage": {
|
|
2197
1976
|
"type": "string | undefined",
|
|
2198
1977
|
"required": false
|
|
1978
|
+
},
|
|
1979
|
+
"scrollCollapseProgress": {
|
|
1980
|
+
"type": "number",
|
|
1981
|
+
"required": false
|
|
1982
|
+
},
|
|
1983
|
+
"variant": {
|
|
1984
|
+
"type": "CardOverviewVariant",
|
|
1985
|
+
"required": false
|
|
2199
1986
|
}
|
|
2200
1987
|
},
|
|
2201
1988
|
"events": [
|
|
@@ -2253,8 +2040,8 @@
|
|
|
2253
2040
|
"alternatives": [
|
|
2254
2041
|
{
|
|
2255
2042
|
"when": "The surface contains a chart or specialized data-visualization composition.",
|
|
2256
|
-
"component": "component:ds-card-
|
|
2257
|
-
"reason": "
|
|
2043
|
+
"component": "component:ds-card-data-viz",
|
|
2044
|
+
"reason": "CardDataViz owns the independently evolving data-visualization card contract."
|
|
2258
2045
|
},
|
|
2259
2046
|
{
|
|
2260
2047
|
"when": "The task must block the interface for one focused decision or short workflow.",
|
|
@@ -2370,120 +2157,10 @@
|
|
|
2370
2157
|
"text"
|
|
2371
2158
|
]
|
|
2372
2159
|
},
|
|
2373
|
-
{
|
|
2374
|
-
"name": "card-shell-data-viz",
|
|
2375
|
-
"title": "CardShellDataViz",
|
|
2376
|
-
"description": "Dedicated header, action, sizing, and body chrome for data-visualization cards whose layouts evolve independently from settings sections.",
|
|
2377
|
-
"type": "registry:ui",
|
|
2378
|
-
"meta": {
|
|
2379
|
-
"library": "@ds-mo/ui",
|
|
2380
|
-
"distribution": "npm",
|
|
2381
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-shell-data-viz",
|
|
2382
|
-
"source": "src/wc/components/CardShellDataViz/CardShellDataViz.tsx",
|
|
2383
|
-
"intentStatus": "complete",
|
|
2384
|
-
"intent": {
|
|
2385
|
-
"audience": "specialized",
|
|
2386
|
-
"status": "experimental",
|
|
2387
|
-
"summary": "Dedicated header, action, sizing, and body chrome for data-visualization cards whose layouts evolve independently from settings sections.",
|
|
2388
|
-
"useWhen": [
|
|
2389
|
-
"A card contains a chart, data-visualization legend, metric visualization, or a specialized data-viz composition.",
|
|
2390
|
-
"A data-visualization card needs a heading and optional header actions while retaining a flexible body for its composing component.",
|
|
2391
|
-
"Several chart-specific cards need one shell boundary that can evolve without changing settings sections."
|
|
2392
|
-
],
|
|
2393
|
-
"avoidWhen": [
|
|
2394
|
-
"The card contains settings or editable form content; use the settings card composition.",
|
|
2395
|
-
"The surface is ordinary content without data visualization; use a product-owned layout rather than data-viz card chrome.",
|
|
2396
|
-
"The shell would own chart-specific layout, hover synchronization, legends, or empty-state policy; keep those in the composing data-viz card."
|
|
2397
|
-
],
|
|
2398
|
-
"alternatives": [
|
|
2399
|
-
{
|
|
2400
|
-
"when": "The surface contains editable settings rather than data visualization.",
|
|
2401
|
-
"component": "component:ds-card-setting",
|
|
2402
|
-
"reason": "CardSetting owns the persistent controlled settings-section workflow."
|
|
2403
|
-
},
|
|
2404
|
-
{
|
|
2405
|
-
"when": "The composition is the standard donut chart plus synchronized legend.",
|
|
2406
|
-
"component": "component:ds-card-data-viz-donut",
|
|
2407
|
-
"reason": "CardDataVizDonut composes this shell with donut-specific regions and hover synchronization."
|
|
2408
|
-
},
|
|
2409
|
-
{
|
|
2410
|
-
"when": "The composition is the standard line chart plus static horizontal legend.",
|
|
2411
|
-
"component": "component:ds-card-data-viz-line",
|
|
2412
|
-
"reason": "CardDataVizLine composes this shell with line-specific regions and disables decorative legend hover."
|
|
2413
|
-
}
|
|
2414
|
-
],
|
|
2415
|
-
"commonlyComposedWith": [
|
|
2416
|
-
"component:ds-chart-bar",
|
|
2417
|
-
"component:ds-chart-bar-stacked",
|
|
2418
|
-
"component:ds-chart-donut",
|
|
2419
|
-
"component:ds-chart-line",
|
|
2420
|
-
"component:ds-chart-legend",
|
|
2421
|
-
"component:ds-card-data-viz-line",
|
|
2422
|
-
"component:ds-button-unfilled"
|
|
2423
|
-
],
|
|
2424
|
-
"accessibility": [
|
|
2425
|
-
"Provide a concise visible heading that identifies the visualization; the shell renders it as a section heading.",
|
|
2426
|
-
"Header actions must provide their own accessible names and communicate any controlled state or popup relationship.",
|
|
2427
|
-
"The shell does not add landmark or chart semantics; composing charts retain their own accessible names and descriptions.",
|
|
2428
|
-
"Do not duplicate chart data in the heading. Provide an accessible summary through the chart or adjacent composition when visual encoding alone is insufficient."
|
|
2429
|
-
],
|
|
2430
|
-
"states": [
|
|
2431
|
-
"The shell owns default data-visualization surface chrome only; loading, empty, error, selected, and interactive states belong to the composing card or chart.",
|
|
2432
|
-
"The actions slot collapses when empty so headings retain the available header width."
|
|
2433
|
-
],
|
|
2434
|
-
"responsiveBehavior": [
|
|
2435
|
-
"The selected sm, md, or lg width sets the matching token-based minimum height while max-width prevents overflow from a narrower parent.",
|
|
2436
|
-
"The parent layout chooses card width, wrapping, stacking, and breakpoint changes; the shell does not switch sizes automatically.",
|
|
2437
|
-
"The body is a flexible column so specialized data-viz cards can allocate remaining height between charts, legends, and supporting content."
|
|
2438
|
-
],
|
|
2439
|
-
"frameworkCaveats": {
|
|
2440
|
-
"customElements": [
|
|
2441
|
-
"Place header controls in the actions slot and data-visualization composition in the default slot."
|
|
2442
|
-
],
|
|
2443
|
-
"react": [
|
|
2444
|
-
"Pass header controls with slot=\"actions\" and keep chart state in the composing React component."
|
|
2445
|
-
],
|
|
2446
|
-
"angular": [
|
|
2447
|
-
"Project header controls with slot=\"actions\" and keep chart state in the composing Angular component."
|
|
2448
|
-
]
|
|
2449
|
-
},
|
|
2450
|
-
"references": [
|
|
2451
|
-
{
|
|
2452
|
-
"label": "Storybook examples",
|
|
2453
|
-
"path": "src/wc/components/CardShellDataViz/CardShellDataViz.stories.ts"
|
|
2454
|
-
}
|
|
2455
|
-
]
|
|
2456
|
-
},
|
|
2457
|
-
"props": {
|
|
2458
|
-
"cardWidth": {
|
|
2459
|
-
"type": "CardShellDataVizWidth",
|
|
2460
|
-
"required": false
|
|
2461
|
-
},
|
|
2462
|
-
"heading": {
|
|
2463
|
-
"type": "string",
|
|
2464
|
-
"required": true
|
|
2465
|
-
}
|
|
2466
|
-
},
|
|
2467
|
-
"events": [],
|
|
2468
|
-
"slots": [],
|
|
2469
|
-
"exports": {
|
|
2470
|
-
"customElement": "ds-card-shell-data-viz",
|
|
2471
|
-
"react": "DsCardShellDataViz",
|
|
2472
|
-
"angular": "DsCardShellDataViz"
|
|
2473
|
-
}
|
|
2474
|
-
},
|
|
2475
|
-
"dependencies": [
|
|
2476
|
-
"@ds-mo/ui",
|
|
2477
|
-
"@ds-mo/tokens"
|
|
2478
|
-
],
|
|
2479
|
-
"registryDependencies": [
|
|
2480
|
-
"text"
|
|
2481
|
-
]
|
|
2482
|
-
},
|
|
2483
2160
|
{
|
|
2484
2161
|
"name": "chart-bar",
|
|
2485
2162
|
"title": "ChartBar",
|
|
2486
|
-
"description": "
|
|
2163
|
+
"description": "Bar chart for single-series magnitude, additive stacked totals, or normalized 0–100% composition across categories.",
|
|
2487
2164
|
"type": "registry:ui",
|
|
2488
2165
|
"meta": {
|
|
2489
2166
|
"library": "@ds-mo/ui",
|
|
@@ -2494,24 +2171,20 @@
|
|
|
2494
2171
|
"intent": {
|
|
2495
2172
|
"audience": "specialized",
|
|
2496
2173
|
"status": "experimental",
|
|
2497
|
-
"summary": "
|
|
2174
|
+
"summary": "Bar chart for single-series magnitude, additive stacked totals, or normalized 0–100% composition across categories.",
|
|
2498
2175
|
"useWhen": [
|
|
2499
2176
|
"Users need to compare one numeric measure across a small set of categories.",
|
|
2500
2177
|
"Values are grouped into ordered time buckets such as hours, days, weeks, or months and equal visual spacing is appropriate.",
|
|
2501
|
-
"A data-viz card needs a compact magnitude comparison rather than a continuous trend."
|
|
2178
|
+
"A data-viz card needs a compact magnitude comparison rather than a continuous trend.",
|
|
2179
|
+
"Several consistent series contribute to each category total or its normalized composition."
|
|
2502
2180
|
],
|
|
2503
2181
|
"avoidWhen": [
|
|
2504
2182
|
"Timestamp positions must reflect irregular elapsed time; pre-bucket the data or use a future continuous time-scale chart.",
|
|
2505
|
-
"The visualization needs
|
|
2183
|
+
"The visualization needs grouped bars or precise comparison of each individual series across categories.",
|
|
2506
2184
|
"The interaction requires selection, drill-down, brushing, or zoom.",
|
|
2507
2185
|
"The data communicates a part-to-whole relationship."
|
|
2508
2186
|
],
|
|
2509
2187
|
"alternatives": [
|
|
2510
|
-
{
|
|
2511
|
-
"when": "Each category contains several additive series or needs normalized composition.",
|
|
2512
|
-
"component": "component:ds-chart-bar-stacked",
|
|
2513
|
-
"reason": "ChartBarStacked compares raw stacked totals or normalized 0–100% composition."
|
|
2514
|
-
},
|
|
2515
2188
|
{
|
|
2516
2189
|
"when": "Users need to follow one or more trends across ordered categories.",
|
|
2517
2190
|
"component": "component:ds-chart-line",
|
|
@@ -2524,8 +2197,8 @@
|
|
|
2524
2197
|
}
|
|
2525
2198
|
],
|
|
2526
2199
|
"commonlyComposedWith": [
|
|
2527
|
-
"component:ds-chart-
|
|
2528
|
-
"component:ds-card-
|
|
2200
|
+
"component:ds-chart-legend",
|
|
2201
|
+
"component:ds-card-data-viz",
|
|
2529
2202
|
"component:ds-tooltip-data-viz"
|
|
2530
2203
|
],
|
|
2531
2204
|
"accessibility": [
|
|
@@ -2534,7 +2207,9 @@
|
|
|
2534
2207
|
"A future interactive tooltip must supplement rather than replace the chart's accessible value representation."
|
|
2535
2208
|
],
|
|
2536
2209
|
"states": [
|
|
2537
|
-
"The chart is
|
|
2210
|
+
"The chart is static without hover, selection, loading, or empty-state policy.",
|
|
2211
|
+
"Single mode reads data. Stacked and percentage modes read aligned series and categories.",
|
|
2212
|
+
"Stacked mode preserves raw totals; percentage mode normalizes every non-empty category to 100%.",
|
|
2538
2213
|
"An empty dataset renders no bars; the owning card or product supplies meaningful empty-state messaging.",
|
|
2539
2214
|
"Bars use 2px top corner radii while the lower corners touching the zero axis remain square.",
|
|
2540
2215
|
"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.",
|
|
@@ -2548,13 +2223,13 @@
|
|
|
2548
2223
|
],
|
|
2549
2224
|
"frameworkCaveats": {
|
|
2550
2225
|
"customElements": [
|
|
2551
|
-
"Assign data as
|
|
2226
|
+
"Assign data, series, and categories as JavaScript properties; arrays are not supported as HTML attributes."
|
|
2552
2227
|
],
|
|
2553
2228
|
"react": [
|
|
2554
|
-
"Pass
|
|
2229
|
+
"Pass stable data or series/category arrays; width and height provide standalone intrinsic dimensions while constrained containers reflow automatically."
|
|
2555
2230
|
],
|
|
2556
2231
|
"angular": [
|
|
2557
|
-
"Bind data as
|
|
2232
|
+
"Bind data or series/categories as properties; width and height provide standalone intrinsic dimensions while constrained containers reflow automatically."
|
|
2558
2233
|
]
|
|
2559
2234
|
},
|
|
2560
2235
|
"references": [
|
|
@@ -2565,6 +2240,10 @@
|
|
|
2565
2240
|
]
|
|
2566
2241
|
},
|
|
2567
2242
|
"props": {
|
|
2243
|
+
"categories": {
|
|
2244
|
+
"type": "string[]",
|
|
2245
|
+
"required": false
|
|
2246
|
+
},
|
|
2568
2247
|
"data": {
|
|
2569
2248
|
"type": "ChartDatum[]",
|
|
2570
2249
|
"required": false
|
|
@@ -2573,125 +2252,12 @@
|
|
|
2573
2252
|
"type": "number",
|
|
2574
2253
|
"required": false
|
|
2575
2254
|
},
|
|
2576
|
-
"width": {
|
|
2577
|
-
"type": "number",
|
|
2578
|
-
"required": false
|
|
2579
|
-
}
|
|
2580
|
-
},
|
|
2581
|
-
"events": [],
|
|
2582
|
-
"slots": [],
|
|
2583
|
-
"exports": {
|
|
2584
|
-
"customElement": "ds-chart-bar",
|
|
2585
|
-
"react": "DsChartBar",
|
|
2586
|
-
"angular": "DsChartBar"
|
|
2587
|
-
}
|
|
2588
|
-
},
|
|
2589
|
-
"dependencies": [
|
|
2590
|
-
"@ds-mo/ui",
|
|
2591
|
-
"@ds-mo/tokens"
|
|
2592
|
-
],
|
|
2593
|
-
"registryDependencies": []
|
|
2594
|
-
},
|
|
2595
|
-
{
|
|
2596
|
-
"name": "chart-bar-stacked",
|
|
2597
|
-
"title": "ChartBarStacked",
|
|
2598
|
-
"description": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2599
|
-
"type": "registry:ui",
|
|
2600
|
-
"meta": {
|
|
2601
|
-
"library": "@ds-mo/ui",
|
|
2602
|
-
"distribution": "npm",
|
|
2603
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/chart-bar-stacked",
|
|
2604
|
-
"source": "src/wc/components/ChartBarStacked/ChartBarStacked.tsx",
|
|
2605
|
-
"intentStatus": "complete",
|
|
2606
|
-
"intent": {
|
|
2607
|
-
"audience": "specialized",
|
|
2608
|
-
"status": "experimental",
|
|
2609
|
-
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2610
|
-
"useWhen": [
|
|
2611
|
-
"Users need to compare both a category total and the contribution of several consistent series.",
|
|
2612
|
-
"A time series needs to show how its composition changes across equal time buckets.",
|
|
2613
|
-
"Every category should normalize to 100% so proportional composition can be compared independently of total magnitude."
|
|
2614
|
-
],
|
|
2615
|
-
"avoidWhen": [
|
|
2616
|
-
"Users need to compare individual series values precisely across categories; use grouped bars or separate charts.",
|
|
2617
|
-
"The visualization has only one measure per category; use ChartBar.",
|
|
2618
|
-
"The primary task is following continuous trends; use ChartLine.",
|
|
2619
|
-
"Series contain negative values or do not align with the shared category list."
|
|
2620
|
-
],
|
|
2621
|
-
"alternatives": [
|
|
2622
|
-
{
|
|
2623
|
-
"when": "Each category contains one independent value.",
|
|
2624
|
-
"component": "component:ds-chart-bar",
|
|
2625
|
-
"reason": "ChartBar provides the simpler single-series magnitude comparison."
|
|
2626
|
-
},
|
|
2627
|
-
{
|
|
2628
|
-
"when": "Users need to follow one or more trends rather than compare stack composition.",
|
|
2629
|
-
"component": "component:ds-chart-line",
|
|
2630
|
-
"reason": "ChartLine preserves each series as a continuous path across the ordered axis."
|
|
2631
|
-
},
|
|
2632
|
-
{
|
|
2633
|
-
"when": "One category's parts-to-whole composition is the focus.",
|
|
2634
|
-
"component": "component:ds-chart-donut",
|
|
2635
|
-
"reason": "ChartDonut provides the dedicated single-total composition treatment."
|
|
2636
|
-
}
|
|
2637
|
-
],
|
|
2638
|
-
"commonlyComposedWith": [
|
|
2639
|
-
"component:ds-chart-legend",
|
|
2640
|
-
"component:ds-card-shell-data-viz",
|
|
2641
|
-
"component:ds-tooltip-data-viz"
|
|
2642
|
-
],
|
|
2643
|
-
"accessibility": [
|
|
2644
|
-
"Provide a visible legend or adjacent textual summary that names every series; do not rely on segment color alone.",
|
|
2645
|
-
"The chart image name includes each category and series value, using normalized percentages in percentage mode.",
|
|
2646
|
-
"Use an adjacent data table when exact cross-category comparisons are necessary to complete the task."
|
|
2647
|
-
],
|
|
2648
|
-
"states": [
|
|
2649
|
-
"Stacked mode preserves raw magnitudes and scales the y-axis to the largest category total.",
|
|
2650
|
-
"Percentage mode normalizes each non-empty category independently and renders a fixed 0%, 25%, 50%, 75%, and 100% axis.",
|
|
2651
|
-
"Series render bottom-to-top in authored order; keep that order and color mapping stable across categories.",
|
|
2652
|
-
"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.",
|
|
2653
|
-
"Adjacent segments are separated by a non-scaling 1px gap; the stack's outer edges do not receive that separator.",
|
|
2654
|
-
"Negative values are unsupported and render as zero; the owning product supplies loading, empty, and error states."
|
|
2655
|
-
],
|
|
2656
|
-
"responsiveBehavior": [
|
|
2657
|
-
"Width and height provide the standalone intrinsic viewport; constrained card regions are measured and reflow both axes to their rendered pixel dimensions.",
|
|
2658
|
-
"Responsive layout changes stack positions and plot extents without scaling SVG text, strokes, separators, corner radii, or margins.",
|
|
2659
|
-
"The parent chooses how many time buckets remain legible at each width.",
|
|
2660
|
-
"Pre-format category labels and reduce bucket count before rendering when horizontal space becomes constrained."
|
|
2661
|
-
],
|
|
2662
|
-
"frameworkCaveats": {
|
|
2663
|
-
"customElements": [
|
|
2664
|
-
"Assign series and categories as JavaScript properties and keep every series aligned to the category count."
|
|
2665
|
-
],
|
|
2666
|
-
"react": [
|
|
2667
|
-
"Pass stable series and category arrays; choose percentage variant only when each category represents a meaningful whole."
|
|
2668
|
-
],
|
|
2669
|
-
"angular": [
|
|
2670
|
-
"Bind series and categories as properties; choose percentage variant only when each category represents a meaningful whole."
|
|
2671
|
-
]
|
|
2672
|
-
},
|
|
2673
|
-
"references": [
|
|
2674
|
-
{
|
|
2675
|
-
"label": "Storybook examples",
|
|
2676
|
-
"path": "src/wc/components/ChartBarStacked/ChartBarStacked.stories.ts"
|
|
2677
|
-
}
|
|
2678
|
-
]
|
|
2679
|
-
},
|
|
2680
|
-
"props": {
|
|
2681
|
-
"categories": {
|
|
2682
|
-
"type": "string[]",
|
|
2683
|
-
"required": false
|
|
2684
|
-
},
|
|
2685
|
-
"height": {
|
|
2686
|
-
"type": "number",
|
|
2687
|
-
"required": false
|
|
2688
|
-
},
|
|
2689
2255
|
"series": {
|
|
2690
2256
|
"type": "ChartSeries[]",
|
|
2691
2257
|
"required": false
|
|
2692
2258
|
},
|
|
2693
2259
|
"variant": {
|
|
2694
|
-
"type": "
|
|
2260
|
+
"type": "ChartBarVariant",
|
|
2695
2261
|
"required": false
|
|
2696
2262
|
},
|
|
2697
2263
|
"width": {
|
|
@@ -2702,9 +2268,9 @@
|
|
|
2702
2268
|
"events": [],
|
|
2703
2269
|
"slots": [],
|
|
2704
2270
|
"exports": {
|
|
2705
|
-
"customElement": "ds-chart-bar
|
|
2706
|
-
"react": "
|
|
2707
|
-
"angular": "
|
|
2271
|
+
"customElement": "ds-chart-bar",
|
|
2272
|
+
"react": "DsChartBar",
|
|
2273
|
+
"angular": "DsChartBar"
|
|
2708
2274
|
}
|
|
2709
2275
|
},
|
|
2710
2276
|
"dependencies": [
|
|
@@ -2741,8 +2307,8 @@
|
|
|
2741
2307
|
"alternatives": [
|
|
2742
2308
|
{
|
|
2743
2309
|
"when": "The product needs the canonical card, filter action, visible legend, and built-in hover synchronization.",
|
|
2744
|
-
"component": "component:ds-card-data-viz
|
|
2745
|
-
"reason": "The
|
|
2310
|
+
"component": "component:ds-card-data-viz",
|
|
2311
|
+
"reason": "The donut card variant owns that complete composition and suppresses redundant slice tooltips."
|
|
2746
2312
|
},
|
|
2747
2313
|
{
|
|
2748
2314
|
"when": "Users need to compare independent category magnitudes.",
|
|
@@ -2753,7 +2319,7 @@
|
|
|
2753
2319
|
"commonlyComposedWith": [
|
|
2754
2320
|
"component:ds-chart-legend",
|
|
2755
2321
|
"component:ds-tooltip-data-viz",
|
|
2756
|
-
"component:ds-card-data-viz
|
|
2322
|
+
"component:ds-card-data-viz"
|
|
2757
2323
|
],
|
|
2758
2324
|
"accessibility": [
|
|
2759
2325
|
"Every non-empty slice remains keyboard focusable and exposes its label and value without depending on the visual tooltip.",
|
|
@@ -2763,7 +2329,7 @@
|
|
|
2763
2329
|
],
|
|
2764
2330
|
"states": [
|
|
2765
2331
|
"Genuine local pointer or keyboard focus may show a chart-owned tooltip; externally synchronized highlight never opens it.",
|
|
2766
|
-
"When a visible legend already owns label and value detail, suppress the redundant donut tooltip.
|
|
2332
|
+
"When a visible legend already owns label and value detail, suppress the redundant donut tooltip. CardDataViz donut mode does this automatically.",
|
|
2767
2333
|
"Local hover and external highlight remain separate while both may dim non-matching slices.",
|
|
2768
2334
|
"Zero or negative totals render a neutral empty ring without interactive slices.",
|
|
2769
2335
|
"Center value and caption truncate when they exceed the safe inner-circle measure."
|
|
@@ -2776,7 +2342,7 @@
|
|
|
2776
2342
|
],
|
|
2777
2343
|
"frameworkCaveats": {
|
|
2778
2344
|
"customElements": [
|
|
2779
|
-
"Assign data as a JavaScript property and wire slice-hover detail to a sibling legend only when not using
|
|
2345
|
+
"Assign data as a JavaScript property and wire slice-hover detail to a sibling legend only when not using CardDataViz donut mode."
|
|
2780
2346
|
],
|
|
2781
2347
|
"react": [
|
|
2782
2348
|
"Keep synchronized highlight controlled by the composition and disable slice tooltips when a sibling legend continuously shows the same details."
|
|
@@ -2892,22 +2458,20 @@
|
|
|
2892
2458
|
},
|
|
2893
2459
|
{
|
|
2894
2460
|
"when": "The donut belongs in the canonical dashboard card.",
|
|
2895
|
-
"component": "component:ds-card-data-viz
|
|
2896
|
-
"reason": "The
|
|
2461
|
+
"component": "component:ds-card-data-viz",
|
|
2462
|
+
"reason": "The donut variant places the legend and handles bidirectional highlight synchronization."
|
|
2897
2463
|
},
|
|
2898
2464
|
{
|
|
2899
2465
|
"when": "A static line chart and series key belong in the canonical dashboard card.",
|
|
2900
|
-
"component": "component:ds-card-data-viz
|
|
2901
|
-
"reason": "The
|
|
2466
|
+
"component": "component:ds-card-data-viz",
|
|
2467
|
+
"reason": "The line variant places the horizontal legend and disables decorative local hover highlighting."
|
|
2902
2468
|
}
|
|
2903
2469
|
],
|
|
2904
2470
|
"commonlyComposedWith": [
|
|
2905
2471
|
"component:ds-chart-donut",
|
|
2906
|
-
"component:ds-chart-bar
|
|
2472
|
+
"component:ds-chart-bar",
|
|
2907
2473
|
"component:ds-chart-line",
|
|
2908
|
-
"component:ds-card-data-viz
|
|
2909
|
-
"component:ds-card-data-viz-line",
|
|
2910
|
-
"component:ds-card-shell-data-viz"
|
|
2474
|
+
"component:ds-card-data-viz"
|
|
2911
2475
|
],
|
|
2912
2476
|
"accessibility": [
|
|
2913
2477
|
"Rows remain non-interactive unless the item supplies an actual link destination.",
|
|
@@ -3044,8 +2608,7 @@
|
|
|
3044
2608
|
],
|
|
3045
2609
|
"commonlyComposedWith": [
|
|
3046
2610
|
"component:ds-chart-legend",
|
|
3047
|
-
"component:ds-card-data-viz
|
|
3048
|
-
"component:ds-card-shell-data-viz",
|
|
2611
|
+
"component:ds-card-data-viz",
|
|
3049
2612
|
"component:ds-tooltip-data-viz"
|
|
3050
2613
|
],
|
|
3051
2614
|
"accessibility": [
|
|
@@ -3163,7 +2726,7 @@
|
|
|
3163
2726
|
],
|
|
3164
2727
|
"commonlyComposedWith": [
|
|
3165
2728
|
"component:ds-field",
|
|
3166
|
-
"component:ds-select
|
|
2729
|
+
"component:ds-select",
|
|
3167
2730
|
"component:ds-text"
|
|
3168
2731
|
],
|
|
3169
2732
|
"accessibility": [
|
|
@@ -3980,7 +3543,7 @@
|
|
|
3980
3543
|
"status": "stable",
|
|
3981
3544
|
"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.",
|
|
3982
3545
|
"useWhen": [
|
|
3983
|
-
"An Input
|
|
3546
|
+
"An Input or Select needs a persistent visible label in a form.",
|
|
3984
3547
|
"Help text or an error message must be programmatically associated with one control.",
|
|
3985
3548
|
"A form layout needs one consistent label-control-message rhythm."
|
|
3986
3549
|
],
|
|
@@ -3999,7 +3562,6 @@
|
|
|
3999
3562
|
"commonlyComposedWith": [
|
|
4000
3563
|
"component:ds-input",
|
|
4001
3564
|
"component:ds-select",
|
|
4002
|
-
"component:ds-select-multi",
|
|
4003
3565
|
"component:ds-text"
|
|
4004
3566
|
],
|
|
4005
3567
|
"accessibility": [
|
|
@@ -4026,7 +3588,7 @@
|
|
|
4026
3588
|
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
4027
3589
|
],
|
|
4028
3590
|
"react": [
|
|
4029
|
-
"Compose one DsInput
|
|
3591
|
+
"Compose one DsInput or DsSelect child and control validation timing in the form owner."
|
|
4030
3592
|
],
|
|
4031
3593
|
"angular": [
|
|
4032
3594
|
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
@@ -4646,8 +4208,8 @@
|
|
|
4646
4208
|
},
|
|
4647
4209
|
{
|
|
4648
4210
|
"when": "Several form values may be selected.",
|
|
4649
|
-
"component": "component:ds-select
|
|
4650
|
-
"reason": "
|
|
4211
|
+
"component": "component:ds-select",
|
|
4212
|
+
"reason": "Select multiple provides multi-select listbox semantics, array value ownership, and count presentation."
|
|
4651
4213
|
},
|
|
4652
4214
|
{
|
|
4653
4215
|
"when": "The interaction needs substantial content, confirmation, or a form.",
|
|
@@ -4679,7 +4241,7 @@
|
|
|
4679
4241
|
"After dsSelect from a switch row, replace the items or sections array with updated switchValue data so the controlled indicator reflects the new state.",
|
|
4680
4242
|
"For selectionMode single, keep exactly one item isSelected and replace the items or sections array after dsSelect; Menu never mutates consumer-owned selection data.",
|
|
4681
4243
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
4682
|
-
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup
|
|
4244
|
+
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup.",
|
|
4683
4245
|
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics."
|
|
4684
4246
|
],
|
|
4685
4247
|
"responsiveBehavior": [
|
|
@@ -4784,10 +4346,6 @@
|
|
|
4784
4346
|
"name": "dsClose",
|
|
4785
4347
|
"detail": "void"
|
|
4786
4348
|
},
|
|
4787
|
-
{
|
|
4788
|
-
"name": "dsGradientSelect",
|
|
4789
|
-
"detail": "ShellGradientPreset"
|
|
4790
|
-
},
|
|
4791
4349
|
{
|
|
4792
4350
|
"name": "dsSelect",
|
|
4793
4351
|
"detail": "MenuItemData"
|
|
@@ -5385,10 +4943,6 @@
|
|
|
5385
4943
|
"type": "string",
|
|
5386
4944
|
"required": false
|
|
5387
4945
|
},
|
|
5388
|
-
"sectionsJson": {
|
|
5389
|
-
"type": "string",
|
|
5390
|
-
"required": false
|
|
5391
|
-
},
|
|
5392
4946
|
"subsections": {
|
|
5393
4947
|
"type": "TabItem[]",
|
|
5394
4948
|
"required": false
|
|
@@ -5397,10 +4951,6 @@
|
|
|
5397
4951
|
"type": "string",
|
|
5398
4952
|
"required": false
|
|
5399
4953
|
},
|
|
5400
|
-
"subsectionsJson": {
|
|
5401
|
-
"type": "string",
|
|
5402
|
-
"required": false
|
|
5403
|
-
},
|
|
5404
4954
|
"subvalue": {
|
|
5405
4955
|
"type": "string",
|
|
5406
4956
|
"required": false
|
|
@@ -5498,10 +5048,6 @@
|
|
|
5498
5048
|
"type": "TabItem[]",
|
|
5499
5049
|
"required": false
|
|
5500
5050
|
},
|
|
5501
|
-
"sectionsJson": {
|
|
5502
|
-
"type": "string",
|
|
5503
|
-
"required": false
|
|
5504
|
-
},
|
|
5505
5051
|
"value": {
|
|
5506
5052
|
"type": "string",
|
|
5507
5053
|
"required": false
|
|
@@ -5886,7 +5432,7 @@
|
|
|
5886
5432
|
"At 1200px and wider, default to expanded, allow the user to expand or collapse, and restore the locally persisted desktop preference when available.",
|
|
5887
5433
|
"From 768px through 1199px, present PanelNav permanently collapsed and do not allow user expansion.",
|
|
5888
5434
|
"Below 768px, the consuming application replaces PanelNav with a dedicated mobile navigation component; PanelNav does not own mobile navigation.",
|
|
5889
|
-
"ShellApp permanently owns responsive composition: it determines shell mode, enforces tablet collapse, and
|
|
5435
|
+
"Managed ShellApp permanently owns responsive composition: it determines shell mode, enforces tablet collapse, and presents MobileSheetNav below 768px.",
|
|
5890
5436
|
"When the viewport is below breakpoint, PanelNav locks collapsed, disables its header toggle affordance, and preserves the persisted desktop collapse preference.",
|
|
5891
5437
|
"Collapsed presentation must preserve destination ordering, active state, notification status, and accessible names."
|
|
5892
5438
|
],
|
|
@@ -6318,7 +5864,7 @@
|
|
|
6318
5864
|
"The product needs a compact filter menu next to search while keeping its filter choices and matching policy application-owned."
|
|
6319
5865
|
],
|
|
6320
5866
|
"avoidWhen": [
|
|
6321
|
-
"The search belongs inside a Select
|
|
5867
|
+
"The search belongs inside a Select popup; use that component's searchable behavior in either cardinality mode.",
|
|
6322
5868
|
"A form needs a labelled standalone field; compose ds-input inside ds-field instead."
|
|
6323
5869
|
],
|
|
6324
5870
|
"commonlyComposedWith": [
|
|
@@ -6445,7 +5991,7 @@
|
|
|
6445
5991
|
{
|
|
6446
5992
|
"name": "panel-tools",
|
|
6447
5993
|
"title": "PanelTools",
|
|
6448
|
-
"description": "
|
|
5994
|
+
"description": "Desktop and tablet utility rail-and-drawer primitive for explicitly defined application-wide tools, normally assembled by managed ShellApp through ShellTools.",
|
|
6449
5995
|
"type": "registry:ui",
|
|
6450
5996
|
"meta": {
|
|
6451
5997
|
"library": "@ds-mo/ui",
|
|
@@ -6456,17 +6002,17 @@
|
|
|
6456
6002
|
"intent": {
|
|
6457
6003
|
"audience": "specialized",
|
|
6458
6004
|
"status": "stable",
|
|
6459
|
-
"summary": "
|
|
6005
|
+
"summary": "Desktop and tablet utility rail-and-drawer primitive for explicitly defined application-wide tools, normally assembled by managed ShellApp through ShellTools.",
|
|
6460
6006
|
"useWhen": [
|
|
6461
|
-
"
|
|
6007
|
+
"An advanced slotted ShellApp needs the desktop and tablet global-tools primitive directly.",
|
|
6462
6008
|
"Users need to move between application-wide utilities without losing each tool's in-progress state.",
|
|
6463
6009
|
"Search, AI conversations, user messages, review stacks, notifications, or help content must remain available alongside route content."
|
|
6464
6010
|
],
|
|
6465
6011
|
"avoidWhen": [
|
|
6466
6012
|
"The action is specific to the current page or selected content rather than globally available across the application.",
|
|
6467
6013
|
"The item navigates to a primary or secondary route; use PanelNav or BarNav instead.",
|
|
6468
|
-
"
|
|
6469
|
-
"Building the mobile tools experience;
|
|
6014
|
+
"Tool definitions lack stable ids, visible labels, explicit rail placement, or application-owned view content.",
|
|
6015
|
+
"Building the mobile tools experience; use ShellTools or managed ShellApp.",
|
|
6470
6016
|
"PanelTools would be mounted outside the application's single ShellApp."
|
|
6471
6017
|
],
|
|
6472
6018
|
"alternatives": [
|
|
@@ -6496,16 +6042,16 @@
|
|
|
6496
6042
|
],
|
|
6497
6043
|
"accessibility": [
|
|
6498
6044
|
"Provide localized accessible labels for the rail, shortcut group, and every rendered tool.",
|
|
6499
|
-
"
|
|
6045
|
+
"Use the canonical default recipe when the product needs Search first and Help last; custom recipes must preserve a deliberate keyboard and visual order.",
|
|
6500
6046
|
"Keep focus on the selected rail action when opening a drawer and allow normal Tab navigation into its content.",
|
|
6501
6047
|
"Do not trigger global shortcuts while focus is in an editable control.",
|
|
6502
6048
|
"Use notification dots only as supplemental unread or new-content status and never as the sole status indication.",
|
|
6503
6049
|
"Explain temporarily inactive tools through an accessible label or adjacent product guidance; omit unauthorized tools entirely."
|
|
6504
6050
|
],
|
|
6505
6051
|
"states": [
|
|
6506
|
-
"
|
|
6507
|
-
"
|
|
6508
|
-
"
|
|
6052
|
+
"Every tool has a stable explicit id and accessible label. The application filters definitions for authorization and entitlement.",
|
|
6053
|
+
"Tool order, header or footer rail placement, shortcut, and mobile grouping come from explicit item metadata rather than id-based layout assumptions.",
|
|
6054
|
+
"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.",
|
|
6509
6055
|
"Only one drawer is open at a time; selecting another tool switches directly and selecting the active tool closes to rail-only mode.",
|
|
6510
6056
|
"The drawer starts closed, remains open across ordinary route changes, and retains every mounted tool's independent conversation, query, scroll, and work state.",
|
|
6511
6057
|
"When storageKey is set, persist only the last active tool in this browser and still restore the drawer closed after reload.",
|
|
@@ -6528,19 +6074,19 @@
|
|
|
6528
6074
|
"responsiveBehavior": [
|
|
6529
6075
|
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
6530
6076
|
"ShellApp owns the fixed drawer-width variable; consumers must not hardcode alternate drawer widths.",
|
|
6531
|
-
"Below 768px, do not reuse
|
|
6077
|
+
"Below 768px, do not reuse PanelTools directly; ShellTools and managed ShellApp present the same persistent tool owners through mobile chrome.",
|
|
6532
6078
|
"Keep named-slot content mounted while tools switch or the drawer closes so users can return to in-progress global work.",
|
|
6533
6079
|
"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.",
|
|
6534
6080
|
"Use fixed drawer widths for now; do not add user resizing or width persistence."
|
|
6535
6081
|
],
|
|
6536
6082
|
"frameworkCaveats": {
|
|
6537
6083
|
"customElements": [
|
|
6538
|
-
"Assign items as
|
|
6084
|
+
"Assign items and headers as JavaScript properties and replace their references when collections change.",
|
|
6539
6085
|
"Assign headers as a JavaScript property and replace its object identity whenever an active tool changes title, depth, or actions.",
|
|
6540
6086
|
"Keep PanelTools mounted at ShellApp scope across route changes and provide each product through its matching named slot."
|
|
6541
6087
|
],
|
|
6542
6088
|
"react": [
|
|
6543
|
-
"Pass
|
|
6089
|
+
"Pass a stable explicitly ordered item collection through the generated React wrapper and keep named-slot product content mounted at ShellApp scope.",
|
|
6544
6090
|
"Use storageKey only for same-browser last-tool continuity; do not persist the open drawer."
|
|
6545
6091
|
],
|
|
6546
6092
|
"angular": [
|
|
@@ -6577,18 +6123,10 @@
|
|
|
6577
6123
|
"type": "PanelToolsHeaders",
|
|
6578
6124
|
"required": false
|
|
6579
6125
|
},
|
|
6580
|
-
"headersJson": {
|
|
6581
|
-
"type": "string",
|
|
6582
|
-
"required": false
|
|
6583
|
-
},
|
|
6584
6126
|
"items": {
|
|
6585
6127
|
"type": "PanelToolsItem[]",
|
|
6586
6128
|
"required": false
|
|
6587
6129
|
},
|
|
6588
|
-
"itemsJson": {
|
|
6589
|
-
"type": "string",
|
|
6590
|
-
"required": false
|
|
6591
|
-
},
|
|
6592
6130
|
"open": {
|
|
6593
6131
|
"type": "boolean",
|
|
6594
6132
|
"required": false
|
|
@@ -6894,7 +6432,7 @@
|
|
|
6894
6432
|
{
|
|
6895
6433
|
"name": "select",
|
|
6896
6434
|
"title": "Select",
|
|
6897
|
-
"description": "Form-associated
|
|
6435
|
+
"description": "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.",
|
|
6898
6436
|
"type": "registry:ui",
|
|
6899
6437
|
"meta": {
|
|
6900
6438
|
"library": "@ds-mo/ui",
|
|
@@ -6905,24 +6443,19 @@
|
|
|
6905
6443
|
"intent": {
|
|
6906
6444
|
"audience": "general",
|
|
6907
6445
|
"status": "stable",
|
|
6908
|
-
"summary": "Form-associated
|
|
6446
|
+
"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.",
|
|
6909
6447
|
"useWhen": [
|
|
6910
6448
|
"The user must choose one value from a finite set.",
|
|
6449
|
+
"The user may choose several independent values when multiple is enabled.",
|
|
6911
6450
|
"The option set benefits from local search, subtext, prefix icons, grouping, or disabled choices.",
|
|
6912
6451
|
"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.",
|
|
6913
6452
|
"The selected value must participate in native, Angular, or React form state."
|
|
6914
6453
|
],
|
|
6915
6454
|
"avoidWhen": [
|
|
6916
|
-
"Several values may be selected at once.",
|
|
6917
6455
|
"The rows perform commands rather than choosing a form value.",
|
|
6918
6456
|
"The choices form a hierarchy with expandable parents."
|
|
6919
6457
|
],
|
|
6920
6458
|
"alternatives": [
|
|
6921
|
-
{
|
|
6922
|
-
"when": "Several independent values may be selected.",
|
|
6923
|
-
"component": "component:ds-select-multi",
|
|
6924
|
-
"reason": "SelectMulti owns array values, multi-selection semantics, and count presentation."
|
|
6925
|
-
},
|
|
6926
6459
|
{
|
|
6927
6460
|
"when": "The popup contains commands or state-changing actions.",
|
|
6928
6461
|
"component": "component:ds-menu",
|
|
@@ -6943,6 +6476,7 @@
|
|
|
6943
6476
|
"accessibility": [
|
|
6944
6477
|
"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.",
|
|
6945
6478
|
"The trigger uses combobox semantics and the popup uses listbox and option semantics; do not replace them with menu roles.",
|
|
6479
|
+
"Multiple mode adds aria-multiselectable, exposes independent aria-selected state, and uses presentation-only checkbox indicators while each option remains the sole interaction target.",
|
|
6946
6480
|
"Disabled options remain visible, expose aria-disabled, and are skipped by keyboard navigation and typeahead.",
|
|
6947
6481
|
"Keyboard navigation keeps the aria-activedescendant option scrolled into the visible listbox viewport.",
|
|
6948
6482
|
"Selected options rely on active fill and foreground treatment without a redundant trailing check icon.",
|
|
@@ -6950,13 +6484,14 @@
|
|
|
6950
6484
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6951
6485
|
],
|
|
6952
6486
|
"states": [
|
|
6953
|
-
"
|
|
6487
|
+
"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.",
|
|
6954
6488
|
"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.",
|
|
6955
|
-
"Value is controlled through the mutable value property; dsChange reports
|
|
6489
|
+
"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.",
|
|
6490
|
+
"Multiple mode keeps the persistent placeholder label visible, appends the selected count, and submits one repeated form entry per selected value.",
|
|
6956
6491
|
"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.",
|
|
6957
6492
|
"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.",
|
|
6958
|
-
"Clearing emits dsChange with an empty string
|
|
6959
|
-
"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.",
|
|
6493
|
+
"Clearing emits dsChange with an empty string or empty array according to mode plus dsClear, keeps the popup open, and restores useful focus.",
|
|
6494
|
+
"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.",
|
|
6960
6495
|
"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.",
|
|
6961
6496
|
"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.",
|
|
6962
6497
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
@@ -6981,10 +6516,10 @@
|
|
|
6981
6516
|
],
|
|
6982
6517
|
"frameworkCaveats": {
|
|
6983
6518
|
"customElements": [
|
|
6984
|
-
"Assign options and
|
|
6519
|
+
"Assign options, sections, and multiple-mode array values through JavaScript properties because arrays and objects cannot be represented safely as attributes."
|
|
6985
6520
|
],
|
|
6986
6521
|
"react": [
|
|
6987
|
-
"Pass options or sections as wrapper props and handle onDsChange, onDsClear, and onDsOpenChange."
|
|
6522
|
+
"Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, and onDsOpenChange."
|
|
6988
6523
|
],
|
|
6989
6524
|
"angular": [
|
|
6990
6525
|
"Import DsSelect and SelectValueAccessor when integrating with Angular Forms; bind options and sections as properties."
|
|
@@ -7066,6 +6601,10 @@
|
|
|
7066
6601
|
"type": "string",
|
|
7067
6602
|
"required": false
|
|
7068
6603
|
},
|
|
6604
|
+
"multiple": {
|
|
6605
|
+
"type": "boolean",
|
|
6606
|
+
"required": false
|
|
6607
|
+
},
|
|
7069
6608
|
"name": {
|
|
7070
6609
|
"type": "string | undefined",
|
|
7071
6610
|
"required": false
|
|
@@ -7106,12 +6645,16 @@
|
|
|
7106
6645
|
"type": "SelectSection[]",
|
|
7107
6646
|
"required": false
|
|
7108
6647
|
},
|
|
6648
|
+
"selectedLabel": {
|
|
6649
|
+
"type": "string",
|
|
6650
|
+
"required": false
|
|
6651
|
+
},
|
|
7109
6652
|
"size": {
|
|
7110
6653
|
"type": "SelectSize",
|
|
7111
6654
|
"required": false
|
|
7112
6655
|
},
|
|
7113
6656
|
"value": {
|
|
7114
|
-
"type": "
|
|
6657
|
+
"type": "SelectValue",
|
|
7115
6658
|
"required": false
|
|
7116
6659
|
},
|
|
7117
6660
|
"width": {
|
|
@@ -7122,7 +6665,7 @@
|
|
|
7122
6665
|
"events": [
|
|
7123
6666
|
{
|
|
7124
6667
|
"name": "dsChange",
|
|
7125
|
-
"detail": "
|
|
6668
|
+
"detail": "SelectValue"
|
|
7126
6669
|
},
|
|
7127
6670
|
{
|
|
7128
6671
|
"name": "dsClear",
|
|
@@ -7147,6 +6690,7 @@
|
|
|
7147
6690
|
],
|
|
7148
6691
|
"registryDependencies": [
|
|
7149
6692
|
"button-unfilled",
|
|
6693
|
+
"checkbox",
|
|
7150
6694
|
"empty-state",
|
|
7151
6695
|
"icon",
|
|
7152
6696
|
"loader",
|
|
@@ -7155,403 +6699,207 @@
|
|
|
7155
6699
|
]
|
|
7156
6700
|
},
|
|
7157
6701
|
{
|
|
7158
|
-
"name": "
|
|
7159
|
-
"title": "
|
|
7160
|
-
"description": "
|
|
6702
|
+
"name": "shell-app",
|
|
6703
|
+
"title": "ShellApp",
|
|
6704
|
+
"description": "The standard managed workspace root for authenticated applications, assembling responsive navigation, page chrome, global tools, and stable application-owned content from typed data.",
|
|
7161
6705
|
"type": "registry:ui",
|
|
7162
6706
|
"meta": {
|
|
7163
6707
|
"library": "@ds-mo/ui",
|
|
7164
6708
|
"distribution": "npm",
|
|
7165
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/
|
|
7166
|
-
"source": "src/wc/components/
|
|
6709
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-app",
|
|
6710
|
+
"source": "src/wc/components/ShellApp/ShellApp.tsx",
|
|
7167
6711
|
"intentStatus": "complete",
|
|
7168
6712
|
"intent": {
|
|
7169
|
-
"audience": "
|
|
6713
|
+
"audience": "specialized",
|
|
7170
6714
|
"status": "stable",
|
|
7171
|
-
"summary": "
|
|
6715
|
+
"summary": "The standard managed workspace root for authenticated applications, assembling responsive navigation, page chrome, global tools, and stable application-owned content from typed data.",
|
|
7172
6716
|
"useWhen": [
|
|
7173
|
-
"
|
|
7174
|
-
"
|
|
7175
|
-
"
|
|
7176
|
-
"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."
|
|
6717
|
+
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
6718
|
+
"Navigation, page chrome, global tools, responsive behavior, and shell shortcuts must be composed as one application frame without parallel desktop and mobile owners.",
|
|
6719
|
+
"Future application templates need the supported base-page composition boundary."
|
|
7177
6720
|
],
|
|
7178
6721
|
"avoidWhen": [
|
|
7179
|
-
"
|
|
7180
|
-
"
|
|
7181
|
-
"
|
|
7182
|
-
"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."
|
|
7183
|
-
],
|
|
7184
|
-
"alternatives": [
|
|
7185
|
-
{
|
|
7186
|
-
"when": "Exactly one value may be selected.",
|
|
7187
|
-
"component": "component:ds-select",
|
|
7188
|
-
"reason": "Select owns scalar form value and single-select listbox behavior."
|
|
7189
|
-
},
|
|
7190
|
-
{
|
|
7191
|
-
"when": "The popup contains actions rather than values.",
|
|
7192
|
-
"component": "component:ds-menu",
|
|
7193
|
-
"reason": "Menu uses command semantics and closes according to action-menu expectations."
|
|
7194
|
-
}
|
|
6722
|
+
"Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences that require a different layout.",
|
|
6723
|
+
"Another ShellApp already exists in the page; applications must render exactly one and must never nest ShellApps.",
|
|
6724
|
+
"Building content inside an existing ShellApp; render the page content rather than another shell."
|
|
7195
6725
|
],
|
|
7196
6726
|
"commonlyComposedWith": [
|
|
7197
|
-
"component:ds-
|
|
7198
|
-
"component:ds-
|
|
7199
|
-
"component:ds-
|
|
7200
|
-
"component:ds-
|
|
6727
|
+
"component:ds-panel-nav",
|
|
6728
|
+
"component:ds-bar-nav",
|
|
6729
|
+
"component:ds-panel-tools",
|
|
6730
|
+
"component:ds-shell-tools",
|
|
6731
|
+
"component:ds-mobile-sheet-nav",
|
|
6732
|
+
"component:ds-mobile-header",
|
|
6733
|
+
"component:ds-mobile-bar-nav",
|
|
6734
|
+
"component:ds-shell-page",
|
|
6735
|
+
"component:ds-swatch-picker"
|
|
6736
|
+
],
|
|
6737
|
+
"patterns": [
|
|
6738
|
+
"pattern:application-shell",
|
|
6739
|
+
"pattern:shell-page"
|
|
7201
6740
|
],
|
|
7202
6741
|
"accessibility": [
|
|
7203
|
-
"
|
|
7204
|
-
"
|
|
7205
|
-
"
|
|
7206
|
-
"
|
|
7207
|
-
"
|
|
7208
|
-
"
|
|
7209
|
-
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6742
|
+
"Supply primary destinations through navigation and secondary route sections through pageChrome so managed ShellApp preserves their correct semantics.",
|
|
6743
|
+
"Ensure the default content region contains the page's single main landmark.",
|
|
6744
|
+
"Keep the managed desktop/tablet and mobile presentations available without conditionally recreating routed or tool content.",
|
|
6745
|
+
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
6746
|
+
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
6747
|
+
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
7210
6748
|
],
|
|
7211
6749
|
"states": [
|
|
7212
|
-
"
|
|
7213
|
-
"
|
|
7214
|
-
"
|
|
7215
|
-
"
|
|
7216
|
-
"
|
|
7217
|
-
"The
|
|
7218
|
-
"
|
|
7219
|
-
"
|
|
7220
|
-
"
|
|
7221
|
-
"
|
|
7222
|
-
"
|
|
7223
|
-
"
|
|
7224
|
-
"
|
|
7225
|
-
"The
|
|
7226
|
-
"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.",
|
|
7227
|
-
"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.",
|
|
7228
|
-
"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.",
|
|
7229
|
-
"Clear-all emits an empty dsChange and dsClear while preserving useful popup or search focus.",
|
|
7230
|
-
"Loading keeps the trigger visible, marks the control busy, and makes selection interaction temporarily unavailable without presenting the control as inactive.",
|
|
7231
|
-
"SelectMulti has no maximum-selection behavior; every available non-inactive option may be selected.",
|
|
7232
|
-
"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.",
|
|
7233
|
-
"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.",
|
|
7234
|
-
"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.",
|
|
7235
|
-
"Native form submission emits one entry per selected value under the component name.",
|
|
7236
|
-
"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."
|
|
6750
|
+
"Render exactly one ShellApp as the workspace root and never nest it.",
|
|
6751
|
+
"Managed composition is the standard. Supply navigation, pageChrome, and tools objects plus named tool-view and default page-content slots.",
|
|
6752
|
+
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
6753
|
+
"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.",
|
|
6754
|
+
"The application router owns authorization, current URLs, history, and route execution; ShellApp forwards navigation and page intent events without routing.",
|
|
6755
|
+
"The application supplies each routed content owner and tool view once. ShellApp changes visibility, inert state, and presentation without recreating those nodes.",
|
|
6756
|
+
"Use composition=slotted only for advanced application architectures that intentionally own all lower-level chrome wiring.",
|
|
6757
|
+
"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.",
|
|
6758
|
+
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; ShellApp owns rendering the resolved preset across authenticated routes.",
|
|
6759
|
+
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
6760
|
+
"Replace navigation and pageChrome together from one completed route state.",
|
|
6761
|
+
"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.",
|
|
6762
|
+
"Managed ShellApp keeps BarNav and ShellPage presentations present and owns page header stickiness and the content scroller.",
|
|
6763
|
+
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
7237
6764
|
],
|
|
7238
6765
|
"responsiveBehavior": [
|
|
7239
|
-
"
|
|
7240
|
-
"
|
|
7241
|
-
"
|
|
6766
|
+
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
6767
|
+
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
6768
|
+
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
6769
|
+
"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.",
|
|
6770
|
+
"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.",
|
|
6771
|
+
"Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
|
|
6772
|
+
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
6773
|
+
"The bottom bar remains visible at all route and tool depths in the foundation release."
|
|
7242
6774
|
],
|
|
7243
6775
|
"frameworkCaveats": {
|
|
7244
6776
|
"customElements": [
|
|
7245
|
-
"Assign
|
|
6777
|
+
"Assign navigation, pageChrome, and tools as JavaScript properties on the managed ShellApp.",
|
|
6778
|
+
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
7246
6779
|
],
|
|
7247
6780
|
"react": [
|
|
7248
|
-
"
|
|
6781
|
+
"Use the generated ShellApp wrapper, structured object props, named tool-view slots, and stable routed children.",
|
|
6782
|
+
"Resolve all shell inputs from one router state before rendering the composition."
|
|
7249
6783
|
],
|
|
7250
6784
|
"angular": [
|
|
7251
|
-
"
|
|
6785
|
+
"Use the generated standalone ShellApp adapter, bind structured object props, and preserve named tool-view slots.",
|
|
6786
|
+
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
6787
|
+
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
7252
6788
|
]
|
|
7253
6789
|
},
|
|
7254
6790
|
"references": [
|
|
7255
6791
|
{
|
|
7256
|
-
"label": "
|
|
7257
|
-
"path": "src/wc/components/
|
|
6792
|
+
"label": "Component guide",
|
|
6793
|
+
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
7258
6794
|
},
|
|
7259
6795
|
{
|
|
7260
|
-
"label": "
|
|
7261
|
-
"path": "src/
|
|
6796
|
+
"label": "Executable Storybook composition",
|
|
6797
|
+
"path": "src/wc/components/ShellApp/ShellApp.stories.ts"
|
|
6798
|
+
},
|
|
6799
|
+
{
|
|
6800
|
+
"label": "Framework integration",
|
|
6801
|
+
"path": "docs/framework-integration.md"
|
|
6802
|
+
},
|
|
6803
|
+
{
|
|
6804
|
+
"label": "Application shell contract",
|
|
6805
|
+
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
7262
6806
|
}
|
|
7263
6807
|
]
|
|
7264
6808
|
},
|
|
7265
6809
|
"props": {
|
|
7266
|
-
"
|
|
7267
|
-
"type": "
|
|
7268
|
-
"required": false
|
|
7269
|
-
},
|
|
7270
|
-
"allowClear": {
|
|
7271
|
-
"type": "boolean",
|
|
6810
|
+
"composition": {
|
|
6811
|
+
"type": "ShellAppComposition",
|
|
7272
6812
|
"required": false
|
|
7273
6813
|
},
|
|
7274
|
-
"
|
|
7275
|
-
"type": "
|
|
6814
|
+
"gradientPreset": {
|
|
6815
|
+
"type": "ShellGradientPreset",
|
|
7276
6816
|
"required": false
|
|
7277
6817
|
},
|
|
7278
|
-
"
|
|
7279
|
-
"type": "
|
|
6818
|
+
"mobileDestination": {
|
|
6819
|
+
"type": "MobileDestination",
|
|
7280
6820
|
"required": false
|
|
7281
6821
|
},
|
|
7282
|
-
"
|
|
7283
|
-
"type": "
|
|
6822
|
+
"mobileSheetNavOpen": {
|
|
6823
|
+
"type": "boolean",
|
|
7284
6824
|
"required": false
|
|
7285
6825
|
},
|
|
7286
|
-
"
|
|
7287
|
-
"type": "
|
|
6826
|
+
"navStyle": {
|
|
6827
|
+
"type": "NavChromeStyle",
|
|
7288
6828
|
"required": false
|
|
7289
6829
|
},
|
|
7290
|
-
"
|
|
7291
|
-
"type": "
|
|
6830
|
+
"navigation": {
|
|
6831
|
+
"type": "ShellNavigationConfig",
|
|
7292
6832
|
"required": false
|
|
7293
6833
|
},
|
|
7294
|
-
"
|
|
7295
|
-
"type": "
|
|
6834
|
+
"pageChrome": {
|
|
6835
|
+
"type": "ShellPageChromeConfig",
|
|
7296
6836
|
"required": false
|
|
7297
6837
|
},
|
|
7298
|
-
"
|
|
6838
|
+
"shortcutsEnabled": {
|
|
7299
6839
|
"type": "boolean",
|
|
7300
6840
|
"required": false
|
|
7301
6841
|
},
|
|
7302
|
-
"
|
|
7303
|
-
"type": "
|
|
6842
|
+
"tools": {
|
|
6843
|
+
"type": "ShellToolsConfig",
|
|
7304
6844
|
"required": false
|
|
6845
|
+
}
|
|
6846
|
+
},
|
|
6847
|
+
"events": [
|
|
6848
|
+
{
|
|
6849
|
+
"name": "dsBreadcrumbSelect",
|
|
6850
|
+
"detail": "BreadcrumbSelectDetail"
|
|
7305
6851
|
},
|
|
7306
|
-
|
|
7307
|
-
"
|
|
7308
|
-
"
|
|
6852
|
+
{
|
|
6853
|
+
"name": "dsBrowseContextChange",
|
|
6854
|
+
"detail": "NavChromeStyle"
|
|
7309
6855
|
},
|
|
7310
|
-
|
|
7311
|
-
"
|
|
7312
|
-
"
|
|
6856
|
+
{
|
|
6857
|
+
"name": "dsHeaderAction",
|
|
6858
|
+
"detail": "{ tool: PanelToolsToolId; id: string }"
|
|
7313
6859
|
},
|
|
7314
|
-
|
|
7315
|
-
"
|
|
7316
|
-
"
|
|
6860
|
+
{
|
|
6861
|
+
"name": "dsHeaderBack",
|
|
6862
|
+
"detail": "{ tool: PanelToolsToolId }"
|
|
7317
6863
|
},
|
|
7318
|
-
|
|
7319
|
-
"
|
|
7320
|
-
"
|
|
6864
|
+
{
|
|
6865
|
+
"name": "dsNavFooterAction",
|
|
6866
|
+
"detail": "void"
|
|
7321
6867
|
},
|
|
7322
|
-
|
|
7323
|
-
"
|
|
7324
|
-
"
|
|
6868
|
+
{
|
|
6869
|
+
"name": "dsNavSelect",
|
|
6870
|
+
"detail": "string"
|
|
7325
6871
|
},
|
|
7326
|
-
"loadingLabel": {
|
|
7327
|
-
"type": "string",
|
|
7328
|
-
"required": false
|
|
7329
|
-
},
|
|
7330
|
-
"name": {
|
|
7331
|
-
"type": "string | undefined",
|
|
7332
|
-
"required": false
|
|
7333
|
-
},
|
|
7334
|
-
"noResultsText": {
|
|
7335
|
-
"type": "string",
|
|
7336
|
-
"required": false
|
|
7337
|
-
},
|
|
7338
|
-
"open": {
|
|
7339
|
-
"type": "boolean",
|
|
7340
|
-
"required": false
|
|
7341
|
-
},
|
|
7342
|
-
"options": {
|
|
7343
|
-
"type": "SelectMultiOption[]",
|
|
7344
|
-
"required": false
|
|
7345
|
-
},
|
|
7346
|
-
"placeholder": {
|
|
7347
|
-
"type": "string",
|
|
7348
|
-
"required": false
|
|
7349
|
-
},
|
|
7350
|
-
"required": {
|
|
7351
|
-
"type": "boolean",
|
|
7352
|
-
"required": false
|
|
7353
|
-
},
|
|
7354
|
-
"requiredMessage": {
|
|
7355
|
-
"type": "string",
|
|
7356
|
-
"required": false
|
|
7357
|
-
},
|
|
7358
|
-
"searchPlaceholder": {
|
|
7359
|
-
"type": "string",
|
|
7360
|
-
"required": false
|
|
7361
|
-
},
|
|
7362
|
-
"searchable": {
|
|
7363
|
-
"type": "boolean",
|
|
7364
|
-
"required": false
|
|
7365
|
-
},
|
|
7366
|
-
"sections": {
|
|
7367
|
-
"type": "SelectMultiSection[]",
|
|
7368
|
-
"required": false
|
|
7369
|
-
},
|
|
7370
|
-
"selectedLabel": {
|
|
7371
|
-
"type": "string",
|
|
7372
|
-
"required": false
|
|
7373
|
-
},
|
|
7374
|
-
"size": {
|
|
7375
|
-
"type": "SelectMultiSize",
|
|
7376
|
-
"required": false
|
|
7377
|
-
},
|
|
7378
|
-
"values": {
|
|
7379
|
-
"type": "string[]",
|
|
7380
|
-
"required": false
|
|
7381
|
-
},
|
|
7382
|
-
"width": {
|
|
7383
|
-
"type": "SelectMultiWidth",
|
|
7384
|
-
"required": false
|
|
7385
|
-
}
|
|
7386
|
-
},
|
|
7387
|
-
"events": [
|
|
7388
6872
|
{
|
|
7389
|
-
"name": "
|
|
7390
|
-
"detail": "
|
|
6873
|
+
"name": "dsNavUserAction",
|
|
6874
|
+
"detail": "PanelNavUserActionDetail"
|
|
7391
6875
|
},
|
|
7392
6876
|
{
|
|
7393
|
-
"name": "
|
|
7394
|
-
"detail": "
|
|
6877
|
+
"name": "dsPageAction",
|
|
6878
|
+
"detail": "string"
|
|
7395
6879
|
},
|
|
7396
6880
|
{
|
|
7397
|
-
"name": "
|
|
7398
|
-
"detail": "
|
|
7399
|
-
}
|
|
7400
|
-
],
|
|
7401
|
-
"slots": [],
|
|
7402
|
-
"exports": {
|
|
7403
|
-
"customElement": "ds-select-multi",
|
|
7404
|
-
"react": "DsSelectMulti",
|
|
7405
|
-
"angular": "DsSelectMulti"
|
|
7406
|
-
}
|
|
7407
|
-
},
|
|
7408
|
-
"dependencies": [
|
|
7409
|
-
"@ds-mo/ui",
|
|
7410
|
-
"@ds-mo/tokens",
|
|
7411
|
-
"@ds-mo/icons"
|
|
7412
|
-
],
|
|
7413
|
-
"registryDependencies": [
|
|
7414
|
-
"button-unfilled",
|
|
7415
|
-
"checkbox",
|
|
7416
|
-
"empty-state",
|
|
7417
|
-
"icon",
|
|
7418
|
-
"loader",
|
|
7419
|
-
"text",
|
|
7420
|
-
"tooltip"
|
|
7421
|
-
]
|
|
7422
|
-
},
|
|
7423
|
-
{
|
|
7424
|
-
"name": "shell-app",
|
|
7425
|
-
"title": "ShellApp",
|
|
7426
|
-
"description": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
7427
|
-
"type": "registry:ui",
|
|
7428
|
-
"meta": {
|
|
7429
|
-
"library": "@ds-mo/ui",
|
|
7430
|
-
"distribution": "npm",
|
|
7431
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-app",
|
|
7432
|
-
"source": "src/wc/components/ShellApp/ShellApp.tsx",
|
|
7433
|
-
"intentStatus": "complete",
|
|
7434
|
-
"intent": {
|
|
7435
|
-
"audience": "specialized",
|
|
7436
|
-
"status": "stable",
|
|
7437
|
-
"summary": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
7438
|
-
"useWhen": [
|
|
7439
|
-
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
7440
|
-
"PanelNav, BarNav, ShellTools, mobile navigation, page content, shared chrome, responsive behavior, and shell shortcuts must be composed as one application frame.",
|
|
7441
|
-
"Future application templates need the supported base-page composition boundary."
|
|
7442
|
-
],
|
|
7443
|
-
"avoidWhen": [
|
|
7444
|
-
"Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences that require a different layout.",
|
|
7445
|
-
"Another ShellApp already exists in the page; applications must render exactly one and must never nest ShellApps.",
|
|
7446
|
-
"Building content inside an existing ShellApp; render the page content rather than another shell."
|
|
7447
|
-
],
|
|
7448
|
-
"commonlyComposedWith": [
|
|
7449
|
-
"component:ds-panel-nav",
|
|
7450
|
-
"component:ds-bar-nav",
|
|
7451
|
-
"component:ds-panel-tools",
|
|
7452
|
-
"component:ds-shell-tools",
|
|
7453
|
-
"component:ds-mobile-sheet-nav",
|
|
7454
|
-
"component:ds-mobile-header",
|
|
7455
|
-
"component:ds-mobile-bar-nav",
|
|
7456
|
-
"component:ds-shell-page",
|
|
7457
|
-
"component:ds-swatch-picker"
|
|
7458
|
-
],
|
|
7459
|
-
"patterns": [
|
|
7460
|
-
"pattern:application-shell",
|
|
7461
|
-
"pattern:shell-page"
|
|
7462
|
-
],
|
|
7463
|
-
"accessibility": [
|
|
7464
|
-
"Keep primary destinations in PanelNav and secondary route sections in BarNav.",
|
|
7465
|
-
"Ensure the default content region contains the page's single main landmark.",
|
|
7466
|
-
"Keep PanelNav, BarNav, and PanelTools-compatible chrome available in desktop and tablet compositions and the persistent mobile bar available below 768px.",
|
|
7467
|
-
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
7468
|
-
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
7469
|
-
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
7470
|
-
],
|
|
7471
|
-
"states": [
|
|
7472
|
-
"Render exactly one ShellApp as the workspace root and never nest it.",
|
|
7473
|
-
"PanelNav, BarNav, and ShellTools are the responsive shell regions; ShellTools contains at least Search and Help even when no additional product tools apply.",
|
|
7474
|
-
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
7475
|
-
"ShellApp propagates navStyle and resolved responsive mode and coordinates layout, gradient alignment, transitions, metrics, shortcuts, and mobile-stage visibility.",
|
|
7476
|
-
"The application controls mobileDestination and mobileSheetNavOpen and keeps router state independent from global tool-surface changes.",
|
|
7477
|
-
"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.",
|
|
7478
|
-
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; ShellApp owns rendering the resolved preset across authenticated routes.",
|
|
7479
|
-
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
7480
|
-
"Update PanelNav groups, BarNav tabs and heading, navStyle, basePath, and currentUrl atomically from one resolved route state.",
|
|
7481
|
-
"BarNav remains present: it shows route-section tabs when available and the active PanelNav destination label as heading otherwise.",
|
|
7482
|
-
"Render one ShellPage as the default-slot child for each standard routed page; ShellApp owns the content scroller while ShellPage owns page header stickiness and content inset.",
|
|
7483
|
-
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
7484
|
-
],
|
|
7485
|
-
"responsiveBehavior": [
|
|
7486
|
-
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
7487
|
-
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
7488
|
-
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
7489
|
-
"On mobile, ShellApp hides and inerts PanelNav and BarNav, uses a solid primary stage, and composes routed ShellPage MobileHeader presentations, MobileSheetNav, ShellTools, and the persistent five-item MobileBarNav.",
|
|
7490
|
-
"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.",
|
|
7491
|
-
"Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
|
|
7492
|
-
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
7493
|
-
"The bottom bar remains visible at all route and tool depths in the foundation release."
|
|
7494
|
-
],
|
|
7495
|
-
"frameworkCaveats": {
|
|
7496
|
-
"customElements": [
|
|
7497
|
-
"Assign complex navigation and tool collections as JavaScript properties on the slotted components.",
|
|
7498
|
-
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
7499
|
-
],
|
|
7500
|
-
"react": [
|
|
7501
|
-
"Use generated wrappers and preserve native slot names for desktop navigation, responsive tools, mobile navigation, and main content.",
|
|
7502
|
-
"Resolve all shell inputs from one router state before rendering the composition."
|
|
7503
|
-
],
|
|
7504
|
-
"angular": [
|
|
7505
|
-
"Use generated standalone adapters and preserve slot attributes in templates.",
|
|
7506
|
-
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
7507
|
-
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
7508
|
-
]
|
|
6881
|
+
"name": "dsPageBack",
|
|
6882
|
+
"detail": "MouseEvent"
|
|
7509
6883
|
},
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
|
|
7513
|
-
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
7514
|
-
},
|
|
7515
|
-
{
|
|
7516
|
-
"label": "Executable Storybook composition",
|
|
7517
|
-
"path": "src/wc/components/ShellApp/ShellApp.stories.ts"
|
|
7518
|
-
},
|
|
7519
|
-
{
|
|
7520
|
-
"label": "Framework integration",
|
|
7521
|
-
"path": "docs/framework-integration.md"
|
|
7522
|
-
},
|
|
7523
|
-
{
|
|
7524
|
-
"label": "Application shell contract",
|
|
7525
|
-
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
7526
|
-
}
|
|
7527
|
-
]
|
|
7528
|
-
},
|
|
7529
|
-
"props": {
|
|
7530
|
-
"gradientPreset": {
|
|
7531
|
-
"type": "ShellGradientPreset",
|
|
7532
|
-
"required": false
|
|
6884
|
+
{
|
|
6885
|
+
"name": "dsPresentationChange",
|
|
6886
|
+
"detail": "{ presentation: 'drawer' | 'fullscreen' }"
|
|
7533
6887
|
},
|
|
7534
|
-
|
|
7535
|
-
"
|
|
7536
|
-
"
|
|
6888
|
+
{
|
|
6889
|
+
"name": "dsResponsiveModeChange",
|
|
6890
|
+
"detail": "{ mode: ShellResponsiveMode }"
|
|
7537
6891
|
},
|
|
7538
|
-
|
|
7539
|
-
"
|
|
7540
|
-
"
|
|
6892
|
+
{
|
|
6893
|
+
"name": "dsSubsectionChange",
|
|
6894
|
+
"detail": "string"
|
|
7541
6895
|
},
|
|
7542
|
-
|
|
7543
|
-
"
|
|
7544
|
-
"
|
|
6896
|
+
{
|
|
6897
|
+
"name": "dsTabChange",
|
|
6898
|
+
"detail": "string"
|
|
7545
6899
|
},
|
|
7546
|
-
"shortcutsEnabled": {
|
|
7547
|
-
"type": "boolean",
|
|
7548
|
-
"required": false
|
|
7549
|
-
}
|
|
7550
|
-
},
|
|
7551
|
-
"events": [
|
|
7552
6900
|
{
|
|
7553
|
-
"name": "
|
|
7554
|
-
"detail": "{
|
|
6901
|
+
"name": "dsToolChange",
|
|
6902
|
+
"detail": "{ id: PanelToolsToolId; selected: boolean }"
|
|
7555
6903
|
}
|
|
7556
6904
|
],
|
|
7557
6905
|
"slots": [],
|
|
@@ -7565,225 +6913,19 @@
|
|
|
7565
6913
|
"@ds-mo/ui",
|
|
7566
6914
|
"@ds-mo/tokens"
|
|
7567
6915
|
],
|
|
7568
|
-
"registryDependencies": []
|
|
7569
|
-
},
|
|
7570
|
-
{
|
|
7571
|
-
"name": "shell-gradient-picker",
|
|
7572
|
-
"title": "ShellGradientPicker",
|
|
7573
|
-
"description": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
7574
|
-
"type": "registry:ui",
|
|
7575
|
-
"meta": {
|
|
7576
|
-
"library": "@ds-mo/ui",
|
|
7577
|
-
"distribution": "npm",
|
|
7578
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-gradient-picker",
|
|
7579
|
-
"source": "src/wc/components/ShellGradientPicker/ShellGradientPicker.tsx",
|
|
7580
|
-
"intentStatus": "complete",
|
|
7581
|
-
"intent": {
|
|
7582
|
-
"audience": "specialized",
|
|
7583
|
-
"status": "deprecated",
|
|
7584
|
-
"replacedBy": "component:ds-swatch-picker",
|
|
7585
|
-
"replacementReason": "SwatchPicker now owns the same accessible interaction with a generic option model that supports both flat colors and gradients.",
|
|
7586
|
-
"summary": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
7587
|
-
"useWhen": [
|
|
7588
|
-
"Adding the Appearance or Theme section to the application's user or account menu.",
|
|
7589
|
-
"Users must choose the global ShellApp chrome treatment from none, cool, neutral, warm, or fresh."
|
|
7590
|
-
],
|
|
7591
|
-
"avoidWhen": [
|
|
7592
|
-
"Choosing semantic intent, page background, chart, content, or brand colors.",
|
|
7593
|
-
"Building an arbitrary gradient editor or allowing custom gradient values.",
|
|
7594
|
-
"A picker already exists for the application; provide exactly one canonical preference location.",
|
|
7595
|
-
"Rendering an individual swatch outside the complete picker."
|
|
7596
|
-
],
|
|
7597
|
-
"alternatives": [
|
|
7598
|
-
{
|
|
7599
|
-
"when": "The user is selecting the application light, dark, or system color mode.",
|
|
7600
|
-
"component": "component:ds-menu",
|
|
7601
|
-
"reason": "Color mode is a separate appearance preference and should use ordinary menu selection rows."
|
|
7602
|
-
}
|
|
7603
|
-
],
|
|
7604
|
-
"commonlyComposedWith": [
|
|
7605
|
-
"component:ds-shell-app",
|
|
7606
|
-
"component:ds-menu"
|
|
7607
|
-
],
|
|
7608
|
-
"patterns": [
|
|
7609
|
-
"pattern:application-shell"
|
|
7610
|
-
],
|
|
7611
|
-
"accessibility": [
|
|
7612
|
-
"Provide a localized groupLabel that describes the shell appearance choice.",
|
|
7613
|
-
"Treat the presets as one radio group with one Tab stop; Arrow keys, Home, and End move and select within the group.",
|
|
7614
|
-
"Keep the visible compact swatches and their accessible preset names; do not rely on color alone for assistive technology."
|
|
7615
|
-
],
|
|
7616
|
-
"states": [
|
|
7617
|
-
"Neutral is the default preset; none renders solid shell chrome without a wash.",
|
|
7618
|
-
"Cool, neutral, warm, and fresh use design tokens and automatically adapt to the active light or dark color theme.",
|
|
7619
|
-
"Apply dsChange immediately to ShellApp.gradientPreset and keep the containing account menu open.",
|
|
7620
|
-
"The application owns local persistence, cross-tab synchronization, and server or account preference precedence; the picker owns only selection UI and events.",
|
|
7621
|
-
"Treat the fixed preset union as the only supported values and do not construct custom gradients."
|
|
7622
|
-
],
|
|
7623
|
-
"responsiveBehavior": [
|
|
7624
|
-
"Keep the compact picker in the user or account appearance menu on supported desktop and tablet shell compositions.",
|
|
7625
|
-
"The future mobile account surface may present the same preference differently."
|
|
7626
|
-
],
|
|
7627
|
-
"frameworkCaveats": {
|
|
7628
|
-
"customElements": [
|
|
7629
|
-
"Listen for dsChange, resolve application preference precedence, and assign the result to the single ShellApp gradientPreset property."
|
|
7630
|
-
],
|
|
7631
|
-
"react": [
|
|
7632
|
-
"Use the generated wrapper and handle onDsChange without closing the containing account menu."
|
|
7633
|
-
],
|
|
7634
|
-
"angular": [
|
|
7635
|
-
"Bind value to the resolved preference and handle dsChange to update application state."
|
|
7636
|
-
]
|
|
7637
|
-
},
|
|
7638
|
-
"references": [
|
|
7639
|
-
{
|
|
7640
|
-
"label": "Replacement stories",
|
|
7641
|
-
"path": "src/wc/components/SwatchPicker/SwatchPicker.stories.ts"
|
|
7642
|
-
},
|
|
7643
|
-
{
|
|
7644
|
-
"label": "ShellApp gradient contract",
|
|
7645
|
-
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
7646
|
-
},
|
|
7647
|
-
{
|
|
7648
|
-
"label": "Application shell composition",
|
|
7649
|
-
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
7650
|
-
}
|
|
7651
|
-
]
|
|
7652
|
-
},
|
|
7653
|
-
"props": {
|
|
7654
|
-
"groupLabel": {
|
|
7655
|
-
"type": "string",
|
|
7656
|
-
"required": false
|
|
7657
|
-
},
|
|
7658
|
-
"value": {
|
|
7659
|
-
"type": "ShellGradientPreset",
|
|
7660
|
-
"required": false
|
|
7661
|
-
}
|
|
7662
|
-
},
|
|
7663
|
-
"events": [
|
|
7664
|
-
{
|
|
7665
|
-
"name": "dsChange",
|
|
7666
|
-
"detail": "ShellGradientPreset"
|
|
7667
|
-
}
|
|
7668
|
-
],
|
|
7669
|
-
"slots": [],
|
|
7670
|
-
"exports": {
|
|
7671
|
-
"customElement": "ds-shell-gradient-picker",
|
|
7672
|
-
"react": "DsShellGradientPicker",
|
|
7673
|
-
"angular": "DsShellGradientPicker"
|
|
7674
|
-
}
|
|
7675
|
-
},
|
|
7676
|
-
"dependencies": [
|
|
7677
|
-
"@ds-mo/ui",
|
|
7678
|
-
"@ds-mo/tokens"
|
|
7679
|
-
],
|
|
7680
6916
|
"registryDependencies": [
|
|
7681
|
-
"
|
|
6917
|
+
"bar-nav",
|
|
6918
|
+
"bar-title",
|
|
6919
|
+
"button-unfilled",
|
|
6920
|
+
"mobile-bar-nav",
|
|
6921
|
+
"mobile-header",
|
|
6922
|
+
"mobile-sheet-nav",
|
|
6923
|
+
"panel-nav",
|
|
6924
|
+
"shell-page",
|
|
6925
|
+
"shell-tools",
|
|
6926
|
+
"tooltip"
|
|
7682
6927
|
]
|
|
7683
6928
|
},
|
|
7684
|
-
{
|
|
7685
|
-
"name": "shell-gradient-swatch",
|
|
7686
|
-
"title": "ShellGradientSwatch",
|
|
7687
|
-
"description": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
7688
|
-
"type": "registry:ui",
|
|
7689
|
-
"meta": {
|
|
7690
|
-
"library": "@ds-mo/ui",
|
|
7691
|
-
"distribution": "npm",
|
|
7692
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-gradient-swatch",
|
|
7693
|
-
"source": "src/wc/components/ShellGradientSwatch/ShellGradientSwatch.tsx",
|
|
7694
|
-
"intentStatus": "complete",
|
|
7695
|
-
"intent": {
|
|
7696
|
-
"audience": "internal",
|
|
7697
|
-
"status": "deprecated",
|
|
7698
|
-
"replacedBy": "component:ds-swatch-picker",
|
|
7699
|
-
"replacementReason": "SwatchPicker renders its option buttons internally so an individually published radio swatch is no longer needed.",
|
|
7700
|
-
"summary": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
7701
|
-
"useWhen": [
|
|
7702
|
-
"Maintaining or extending ShellGradientPicker inside CompoMo."
|
|
7703
|
-
],
|
|
7704
|
-
"avoidWhen": [
|
|
7705
|
-
"Building application UI directly; use ShellGradientPicker instead.",
|
|
7706
|
-
"Selecting semantic, brand, chart, page, or arbitrary gradient colors.",
|
|
7707
|
-
"Creating a partial or custom set of shell gradient choices."
|
|
7708
|
-
],
|
|
7709
|
-
"alternatives": [
|
|
7710
|
-
{
|
|
7711
|
-
"when": "An application needs the supported global shell appearance control.",
|
|
7712
|
-
"component": "component:ds-swatch-picker",
|
|
7713
|
-
"reason": "SwatchPicker provides the complete radio-group semantics, keyboard behavior, generic previews, and selection event."
|
|
7714
|
-
}
|
|
7715
|
-
],
|
|
7716
|
-
"commonlyComposedWith": [
|
|
7717
|
-
"component:ds-swatch-picker"
|
|
7718
|
-
],
|
|
7719
|
-
"accessibility": [
|
|
7720
|
-
"Keep radio semantics, aria-checked state, and a preset-specific accessible name on the internal button.",
|
|
7721
|
-
"Let ShellGradientPicker manage the roving tab stop and group keyboard navigation.",
|
|
7722
|
-
"Do not expose an unlabeled color-only choice."
|
|
7723
|
-
],
|
|
7724
|
-
"states": [
|
|
7725
|
-
"Preset determines the token-based preview; selected determines radio state and selected visuals.",
|
|
7726
|
-
"The selected swatch owns the radio group's single tab stop while ShellGradientPicker coordinates selection and focus movement.",
|
|
7727
|
-
"isInactive disables interaction but does not remove the accessible name."
|
|
7728
|
-
],
|
|
7729
|
-
"responsiveBehavior": [
|
|
7730
|
-
"Preserve the fixed compact swatch geometry and let ShellGradientPicker own layout."
|
|
7731
|
-
],
|
|
7732
|
-
"frameworkCaveats": {
|
|
7733
|
-
"customElements": [
|
|
7734
|
-
"Do not instantiate this internal primitive in consuming applications."
|
|
7735
|
-
],
|
|
7736
|
-
"react": [
|
|
7737
|
-
"Use DsShellGradientPicker rather than the generated swatch wrapper."
|
|
7738
|
-
],
|
|
7739
|
-
"angular": [
|
|
7740
|
-
"Use DsShellGradientPicker rather than importing DsShellGradientSwatch."
|
|
7741
|
-
]
|
|
7742
|
-
},
|
|
7743
|
-
"references": [
|
|
7744
|
-
{
|
|
7745
|
-
"label": "Parent picker",
|
|
7746
|
-
"path": "src/wc/components/ShellGradientPicker/ShellGradientPicker.tsx"
|
|
7747
|
-
}
|
|
7748
|
-
]
|
|
7749
|
-
},
|
|
7750
|
-
"props": {
|
|
7751
|
-
"ariaLabel": {
|
|
7752
|
-
"type": "string | null",
|
|
7753
|
-
"required": false
|
|
7754
|
-
},
|
|
7755
|
-
"isInactive": {
|
|
7756
|
-
"type": "boolean",
|
|
7757
|
-
"required": false
|
|
7758
|
-
},
|
|
7759
|
-
"preset": {
|
|
7760
|
-
"type": "ShellGradientPreset",
|
|
7761
|
-
"required": false
|
|
7762
|
-
},
|
|
7763
|
-
"selected": {
|
|
7764
|
-
"type": "boolean",
|
|
7765
|
-
"required": false
|
|
7766
|
-
}
|
|
7767
|
-
},
|
|
7768
|
-
"events": [
|
|
7769
|
-
{
|
|
7770
|
-
"name": "dsSelect",
|
|
7771
|
-
"detail": "ShellGradientPreset"
|
|
7772
|
-
}
|
|
7773
|
-
],
|
|
7774
|
-
"slots": [],
|
|
7775
|
-
"exports": {
|
|
7776
|
-
"customElement": "ds-shell-gradient-swatch",
|
|
7777
|
-
"react": "DsShellGradientSwatch",
|
|
7778
|
-
"angular": "DsShellGradientSwatch"
|
|
7779
|
-
}
|
|
7780
|
-
},
|
|
7781
|
-
"dependencies": [
|
|
7782
|
-
"@ds-mo/ui",
|
|
7783
|
-
"@ds-mo/tokens"
|
|
7784
|
-
],
|
|
7785
|
-
"registryDependencies": []
|
|
7786
|
-
},
|
|
7787
6929
|
{
|
|
7788
6930
|
"name": "shell-page",
|
|
7789
6931
|
"title": "ShellPage",
|
|
@@ -7920,7 +7062,7 @@
|
|
|
7920
7062
|
{
|
|
7921
7063
|
"name": "shell-tools",
|
|
7922
7064
|
"title": "ShellTools",
|
|
7923
|
-
"description": "Responsive persistent host for
|
|
7065
|
+
"description": "Responsive persistent host for explicitly defined global tools, adapting PanelTools desktop/tablet chrome to configured mobile destinations and groups.",
|
|
7924
7066
|
"type": "registry:ui",
|
|
7925
7067
|
"meta": {
|
|
7926
7068
|
"library": "@ds-mo/ui",
|
|
@@ -7930,10 +7072,10 @@
|
|
|
7930
7072
|
"intentStatus": "complete",
|
|
7931
7073
|
"intent": {
|
|
7932
7074
|
"audience": "specialized",
|
|
7933
|
-
"status": "
|
|
7934
|
-
"summary": "Responsive persistent host for
|
|
7075
|
+
"status": "stable",
|
|
7076
|
+
"summary": "Responsive persistent host for explicitly defined global tools, adapting PanelTools desktop/tablet chrome to configured mobile destinations and groups.",
|
|
7935
7077
|
"useWhen": [
|
|
7936
|
-
"A ShellApp must preserve the same
|
|
7078
|
+
"A ShellApp must preserve the same product-owned global tool views across desktop, tablet, and mobile."
|
|
7937
7079
|
],
|
|
7938
7080
|
"avoidWhen": [
|
|
7939
7081
|
"The tools exist only in desktop and tablet chrome; PanelTools remains supported for that case.",
|
|
@@ -7943,7 +7085,7 @@
|
|
|
7943
7085
|
{
|
|
7944
7086
|
"when": "Only legacy rail and drawer behavior is required.",
|
|
7945
7087
|
"component": "component:ds-panel-tools",
|
|
7946
|
-
"reason": "PanelTools
|
|
7088
|
+
"reason": "PanelTools is the direct desktop and tablet rail-and-drawer primitive."
|
|
7947
7089
|
}
|
|
7948
7090
|
],
|
|
7949
7091
|
"commonlyComposedWith": [
|
|
@@ -7963,7 +7105,8 @@
|
|
|
7963
7105
|
],
|
|
7964
7106
|
"states": [
|
|
7965
7107
|
"The application owns open and activeTool and replaces headers when tool depth changes.",
|
|
7966
|
-
"
|
|
7108
|
+
"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.",
|
|
7109
|
+
"Stable tool ids own named slots; label, order, rail placement, shortcut, and mobile destination are explicit item data.",
|
|
7967
7110
|
"Switching responsive mode must not recreate application-owned slotted product elements."
|
|
7968
7111
|
],
|
|
7969
7112
|
"responsiveBehavior": [
|
|
@@ -8005,10 +7148,6 @@
|
|
|
8005
7148
|
"type": "PanelToolsHeaders",
|
|
8006
7149
|
"required": false
|
|
8007
7150
|
},
|
|
8008
|
-
"headersJson": {
|
|
8009
|
-
"type": "string",
|
|
8010
|
-
"required": false
|
|
8011
|
-
},
|
|
8012
7151
|
"inboxLabel": {
|
|
8013
7152
|
"type": "string",
|
|
8014
7153
|
"required": false
|
|
@@ -8021,10 +7160,6 @@
|
|
|
8021
7160
|
"type": "PanelToolsItem[]",
|
|
8022
7161
|
"required": false
|
|
8023
7162
|
},
|
|
8024
|
-
"itemsJson": {
|
|
8025
|
-
"type": "string",
|
|
8026
|
-
"required": false
|
|
8027
|
-
},
|
|
8028
7163
|
"open": {
|
|
8029
7164
|
"type": "boolean",
|
|
8030
7165
|
"required": false
|
|
@@ -9083,7 +8218,7 @@
|
|
|
9083
8218
|
"states": [
|
|
9084
8219
|
"A variant is atomic: font size, line height, weight, and letter spacing stay together and are not overridden by consumers.",
|
|
9085
8220
|
"Emphasis selects the supported stronger recipe for local hierarchy; it does not independently mean selected or active.",
|
|
9086
|
-
"Omitted color inherits currentColor. Explicit semantic aliases or CSS-variable references are used
|
|
8221
|
+
"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.",
|
|
9087
8222
|
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
9088
8223
|
"Line truncation and wrapping require an owner-supplied width constraint and content-aware composition decision.",
|
|
9089
8224
|
"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.",
|