@ds-mo/ui 12.9.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 +249 -1108
- 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-CgEYdMee.js → p-6qXDqCj_.js} +2 -2
- package/dist/components/{p-Cr3tEx7o.js → p-Ay1AX7Ql.js} +2 -2
- 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-BOCfICln.js → p-B1cbQ0SG.js} +2 -2
- package/dist/components/{p-BKOlvCGS.js → p-BUZXuod2.js} +2 -2
- package/dist/components/{p-DCvA3Dc9.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-BDKtu6Wb.js → p-BroVnDzE.js} +2 -2
- package/dist/components/{p-CIiBpjCn.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-C8HU4W8q.js → p-CBazaRlE.js} +2 -2
- package/dist/components/{p-BhV5e6vF.js → p-CHuh71-U.js} +2 -2
- package/dist/components/{p-CChcuL04.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-CCzG5xDD.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-DRnIuCiT.js → p-DeQwkbT1.js} +2 -2
- package/dist/components/{p-Cuih680v.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-YR1XeuZf.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 +929 -2371
- 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 +38 -10
- 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 +294 -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/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 +17 -0
- package/dist/types/components/CardOverview/card-overview-controller.d.ts +16 -0
- 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 -4
- 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 +210 -889
- package/dist/types/shell/index.d.ts +5 -13
- package/dist/types/shell/shell-responsive.d.ts +2 -1
- 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-8GK7B7K4.js +0 -2
- package/dist/components/p-8GK7B7K4.js.map +0 -1
- package/dist/components/p-B5tMlca-.js +0 -2
- package/dist/components/p-B5tMlca-.js.map +0 -1
- package/dist/components/p-B88n0pO3.js +0 -2
- package/dist/components/p-B88n0pO3.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-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-C61yJkfr.js +0 -2
- package/dist/components/p-C61yJkfr.js.map +0 -1
- package/dist/components/p-CCzG5xDD.js.map +0 -1
- package/dist/components/p-CGVXbXv9.js +0 -2
- package/dist/components/p-CGVXbXv9.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-Cuqxh-Tq.js +0 -2
- package/dist/components/p-Cuqxh-Tq.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-D2x17ei-.js +0 -2
- package/dist/components/p-D2x17ei-.js.map +0 -1
- package/dist/components/p-DLZm_-sU.js +0 -2
- package/dist/components/p-DLZm_-sU.js.map +0 -1
- package/dist/components/p-DjKkSqrG.js +0 -2
- package/dist/components/p-DjKkSqrG.js.map +0 -1
- package/dist/components/p-DjbTFy2B.js.map +0 -1
- package/dist/components/p-DlscFn2m.js +0 -2
- package/dist/components/p-DlscFn2m.js.map +0 -1
- package/dist/components/p-DxkEC0hR.js +0 -2
- package/dist/components/p-DxkEC0hR.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-XMZCaXs7.js +0 -2
- package/dist/components/p-XMZCaXs7.js.map +0 -1
- package/dist/components/p-dyUp3Adm.js +0 -2
- package/dist/components/p-dyUp3Adm.js.map +0 -1
- package/dist/components/p-nkYN0Bub.js +0 -2
- package/dist/components/p-nkYN0Bub.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-CgEYdMee.js.map → p-6qXDqCj_.js.map} +0 -0
- /package/dist/components/{p-Cr3tEx7o.js.map → p-Ay1AX7Ql.js.map} +0 -0
- /package/dist/components/{p-BOCfICln.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-DCvA3Dc9.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-BDKtu6Wb.js.map → p-BroVnDzE.js.map} +0 -0
- /package/dist/components/{p-CIiBpjCn.js.map → p-BsoqsbBh.js.map} +0 -0
- /package/dist/components/{p-C8HU4W8q.js.map → p-CBazaRlE.js.map} +0 -0
- /package/dist/components/{p-BhV5e6vF.js.map → p-CHuh71-U.js.map} +0 -0
- /package/dist/components/{p-CChcuL04.js.map → p-CMWata9g.js.map} +0 -0
- /package/dist/components/{p-DRnIuCiT.js.map → p-DeQwkbT1.js.map} +0 -0
- /package/dist/components/{p-Cuih680v.js.map → p-Df17mJqI.js.map} +0 -0
- /package/dist/components/{p-YR1XeuZf.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 card pairing one headline score with a reporting period, an application-owned period control, and a responsive grid of comparable measures, with an optional compact 48px presentation.",
|
|
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 card pairing one headline score with a reporting period, an application-owned period control, and a responsive grid of comparable measures, with an optional compact 48px presentation.",
|
|
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.",
|
|
@@ -2133,6 +1896,7 @@
|
|
|
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.",
|
|
2135
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.",
|
|
2136
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."
|
|
2137
1901
|
],
|
|
2138
1902
|
"responsiveBehavior": [
|
|
@@ -2144,20 +1908,24 @@
|
|
|
2144
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.",
|
|
2145
1909
|
"Every measure occupies a full-width row in the stacked state.",
|
|
2146
1910
|
"Set layout to stacked when the owning page shell enters a responsive mode before the card's own container reaches its narrow threshold.",
|
|
2147
|
-
"CardOverview does not observe scroll or
|
|
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."
|
|
2148
1913
|
],
|
|
2149
1914
|
"frameworkCaveats": {
|
|
2150
1915
|
"customElements": [
|
|
2151
1916
|
"Assign score and metrics as JavaScript properties; both are objects and cannot be expressed as HTML attributes.",
|
|
2152
|
-
"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."
|
|
2153
1919
|
],
|
|
2154
1920
|
"react": [
|
|
2155
1921
|
"Pass score and metrics as props and read the selected measure from the onDsMetricSelect event detail.",
|
|
2156
|
-
"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."
|
|
2157
1924
|
],
|
|
2158
1925
|
"angular": [
|
|
2159
1926
|
"Bind [score] and [metrics] as properties and read the selected measure from $event.detail on (dsMetricSelect).",
|
|
2160
|
-
"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."
|
|
2161
1929
|
]
|
|
2162
1930
|
},
|
|
2163
1931
|
"references": [
|
|
@@ -2208,6 +1976,10 @@
|
|
|
2208
1976
|
"type": "string | undefined",
|
|
2209
1977
|
"required": false
|
|
2210
1978
|
},
|
|
1979
|
+
"scrollCollapseProgress": {
|
|
1980
|
+
"type": "number",
|
|
1981
|
+
"required": false
|
|
1982
|
+
},
|
|
2211
1983
|
"variant": {
|
|
2212
1984
|
"type": "CardOverviewVariant",
|
|
2213
1985
|
"required": false
|
|
@@ -2268,8 +2040,8 @@
|
|
|
2268
2040
|
"alternatives": [
|
|
2269
2041
|
{
|
|
2270
2042
|
"when": "The surface contains a chart or specialized data-visualization composition.",
|
|
2271
|
-
"component": "component:ds-card-
|
|
2272
|
-
"reason": "
|
|
2043
|
+
"component": "component:ds-card-data-viz",
|
|
2044
|
+
"reason": "CardDataViz owns the independently evolving data-visualization card contract."
|
|
2273
2045
|
},
|
|
2274
2046
|
{
|
|
2275
2047
|
"when": "The task must block the interface for one focused decision or short workflow.",
|
|
@@ -2385,120 +2157,10 @@
|
|
|
2385
2157
|
"text"
|
|
2386
2158
|
]
|
|
2387
2159
|
},
|
|
2388
|
-
{
|
|
2389
|
-
"name": "card-shell-data-viz",
|
|
2390
|
-
"title": "CardShellDataViz",
|
|
2391
|
-
"description": "Dedicated header, action, sizing, and body chrome for data-visualization cards whose layouts evolve independently from settings sections.",
|
|
2392
|
-
"type": "registry:ui",
|
|
2393
|
-
"meta": {
|
|
2394
|
-
"library": "@ds-mo/ui",
|
|
2395
|
-
"distribution": "npm",
|
|
2396
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-shell-data-viz",
|
|
2397
|
-
"source": "src/wc/components/CardShellDataViz/CardShellDataViz.tsx",
|
|
2398
|
-
"intentStatus": "complete",
|
|
2399
|
-
"intent": {
|
|
2400
|
-
"audience": "specialized",
|
|
2401
|
-
"status": "experimental",
|
|
2402
|
-
"summary": "Dedicated header, action, sizing, and body chrome for data-visualization cards whose layouts evolve independently from settings sections.",
|
|
2403
|
-
"useWhen": [
|
|
2404
|
-
"A card contains a chart, data-visualization legend, metric visualization, or a specialized data-viz composition.",
|
|
2405
|
-
"A data-visualization card needs a heading and optional header actions while retaining a flexible body for its composing component.",
|
|
2406
|
-
"Several chart-specific cards need one shell boundary that can evolve without changing settings sections."
|
|
2407
|
-
],
|
|
2408
|
-
"avoidWhen": [
|
|
2409
|
-
"The card contains settings or editable form content; use the settings card composition.",
|
|
2410
|
-
"The surface is ordinary content without data visualization; use a product-owned layout rather than data-viz card chrome.",
|
|
2411
|
-
"The shell would own chart-specific layout, hover synchronization, legends, or empty-state policy; keep those in the composing data-viz card."
|
|
2412
|
-
],
|
|
2413
|
-
"alternatives": [
|
|
2414
|
-
{
|
|
2415
|
-
"when": "The surface contains editable settings rather than data visualization.",
|
|
2416
|
-
"component": "component:ds-card-setting",
|
|
2417
|
-
"reason": "CardSetting owns the persistent controlled settings-section workflow."
|
|
2418
|
-
},
|
|
2419
|
-
{
|
|
2420
|
-
"when": "The composition is the standard donut chart plus synchronized legend.",
|
|
2421
|
-
"component": "component:ds-card-data-viz-donut",
|
|
2422
|
-
"reason": "CardDataVizDonut composes this shell with donut-specific regions and hover synchronization."
|
|
2423
|
-
},
|
|
2424
|
-
{
|
|
2425
|
-
"when": "The composition is the standard line chart plus static horizontal legend.",
|
|
2426
|
-
"component": "component:ds-card-data-viz-line",
|
|
2427
|
-
"reason": "CardDataVizLine composes this shell with line-specific regions and disables decorative legend hover."
|
|
2428
|
-
}
|
|
2429
|
-
],
|
|
2430
|
-
"commonlyComposedWith": [
|
|
2431
|
-
"component:ds-chart-bar",
|
|
2432
|
-
"component:ds-chart-bar-stacked",
|
|
2433
|
-
"component:ds-chart-donut",
|
|
2434
|
-
"component:ds-chart-line",
|
|
2435
|
-
"component:ds-chart-legend",
|
|
2436
|
-
"component:ds-card-data-viz-line",
|
|
2437
|
-
"component:ds-button-unfilled"
|
|
2438
|
-
],
|
|
2439
|
-
"accessibility": [
|
|
2440
|
-
"Provide a concise visible heading that identifies the visualization; the shell renders it as a section heading.",
|
|
2441
|
-
"Header actions must provide their own accessible names and communicate any controlled state or popup relationship.",
|
|
2442
|
-
"The shell does not add landmark or chart semantics; composing charts retain their own accessible names and descriptions.",
|
|
2443
|
-
"Do not duplicate chart data in the heading. Provide an accessible summary through the chart or adjacent composition when visual encoding alone is insufficient."
|
|
2444
|
-
],
|
|
2445
|
-
"states": [
|
|
2446
|
-
"The shell owns default data-visualization surface chrome only; loading, empty, error, selected, and interactive states belong to the composing card or chart.",
|
|
2447
|
-
"The actions slot collapses when empty so headings retain the available header width."
|
|
2448
|
-
],
|
|
2449
|
-
"responsiveBehavior": [
|
|
2450
|
-
"The selected sm, md, or lg width sets the matching token-based minimum height while max-width prevents overflow from a narrower parent.",
|
|
2451
|
-
"The parent layout chooses card width, wrapping, stacking, and breakpoint changes; the shell does not switch sizes automatically.",
|
|
2452
|
-
"The body is a flexible column so specialized data-viz cards can allocate remaining height between charts, legends, and supporting content."
|
|
2453
|
-
],
|
|
2454
|
-
"frameworkCaveats": {
|
|
2455
|
-
"customElements": [
|
|
2456
|
-
"Place header controls in the actions slot and data-visualization composition in the default slot."
|
|
2457
|
-
],
|
|
2458
|
-
"react": [
|
|
2459
|
-
"Pass header controls with slot=\"actions\" and keep chart state in the composing React component."
|
|
2460
|
-
],
|
|
2461
|
-
"angular": [
|
|
2462
|
-
"Project header controls with slot=\"actions\" and keep chart state in the composing Angular component."
|
|
2463
|
-
]
|
|
2464
|
-
},
|
|
2465
|
-
"references": [
|
|
2466
|
-
{
|
|
2467
|
-
"label": "Storybook examples",
|
|
2468
|
-
"path": "src/wc/components/CardShellDataViz/CardShellDataViz.stories.ts"
|
|
2469
|
-
}
|
|
2470
|
-
]
|
|
2471
|
-
},
|
|
2472
|
-
"props": {
|
|
2473
|
-
"cardWidth": {
|
|
2474
|
-
"type": "CardShellDataVizWidth",
|
|
2475
|
-
"required": false
|
|
2476
|
-
},
|
|
2477
|
-
"heading": {
|
|
2478
|
-
"type": "string",
|
|
2479
|
-
"required": true
|
|
2480
|
-
}
|
|
2481
|
-
},
|
|
2482
|
-
"events": [],
|
|
2483
|
-
"slots": [],
|
|
2484
|
-
"exports": {
|
|
2485
|
-
"customElement": "ds-card-shell-data-viz",
|
|
2486
|
-
"react": "DsCardShellDataViz",
|
|
2487
|
-
"angular": "DsCardShellDataViz"
|
|
2488
|
-
}
|
|
2489
|
-
},
|
|
2490
|
-
"dependencies": [
|
|
2491
|
-
"@ds-mo/ui",
|
|
2492
|
-
"@ds-mo/tokens"
|
|
2493
|
-
],
|
|
2494
|
-
"registryDependencies": [
|
|
2495
|
-
"text"
|
|
2496
|
-
]
|
|
2497
|
-
},
|
|
2498
2160
|
{
|
|
2499
2161
|
"name": "chart-bar",
|
|
2500
2162
|
"title": "ChartBar",
|
|
2501
|
-
"description": "
|
|
2163
|
+
"description": "Bar chart for single-series magnitude, additive stacked totals, or normalized 0–100% composition across categories.",
|
|
2502
2164
|
"type": "registry:ui",
|
|
2503
2165
|
"meta": {
|
|
2504
2166
|
"library": "@ds-mo/ui",
|
|
@@ -2509,24 +2171,20 @@
|
|
|
2509
2171
|
"intent": {
|
|
2510
2172
|
"audience": "specialized",
|
|
2511
2173
|
"status": "experimental",
|
|
2512
|
-
"summary": "
|
|
2174
|
+
"summary": "Bar chart for single-series magnitude, additive stacked totals, or normalized 0–100% composition across categories.",
|
|
2513
2175
|
"useWhen": [
|
|
2514
2176
|
"Users need to compare one numeric measure across a small set of categories.",
|
|
2515
2177
|
"Values are grouped into ordered time buckets such as hours, days, weeks, or months and equal visual spacing is appropriate.",
|
|
2516
|
-
"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."
|
|
2517
2180
|
],
|
|
2518
2181
|
"avoidWhen": [
|
|
2519
2182
|
"Timestamp positions must reflect irregular elapsed time; pre-bucket the data or use a future continuous time-scale chart.",
|
|
2520
|
-
"The visualization needs
|
|
2183
|
+
"The visualization needs grouped bars or precise comparison of each individual series across categories.",
|
|
2521
2184
|
"The interaction requires selection, drill-down, brushing, or zoom.",
|
|
2522
2185
|
"The data communicates a part-to-whole relationship."
|
|
2523
2186
|
],
|
|
2524
2187
|
"alternatives": [
|
|
2525
|
-
{
|
|
2526
|
-
"when": "Each category contains several additive series or needs normalized composition.",
|
|
2527
|
-
"component": "component:ds-chart-bar-stacked",
|
|
2528
|
-
"reason": "ChartBarStacked compares raw stacked totals or normalized 0–100% composition."
|
|
2529
|
-
},
|
|
2530
2188
|
{
|
|
2531
2189
|
"when": "Users need to follow one or more trends across ordered categories.",
|
|
2532
2190
|
"component": "component:ds-chart-line",
|
|
@@ -2539,8 +2197,8 @@
|
|
|
2539
2197
|
}
|
|
2540
2198
|
],
|
|
2541
2199
|
"commonlyComposedWith": [
|
|
2542
|
-
"component:ds-chart-
|
|
2543
|
-
"component:ds-card-
|
|
2200
|
+
"component:ds-chart-legend",
|
|
2201
|
+
"component:ds-card-data-viz",
|
|
2544
2202
|
"component:ds-tooltip-data-viz"
|
|
2545
2203
|
],
|
|
2546
2204
|
"accessibility": [
|
|
@@ -2549,7 +2207,9 @@
|
|
|
2549
2207
|
"A future interactive tooltip must supplement rather than replace the chart's accessible value representation."
|
|
2550
2208
|
],
|
|
2551
2209
|
"states": [
|
|
2552
|
-
"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%.",
|
|
2553
2213
|
"An empty dataset renders no bars; the owning card or product supplies meaningful empty-state messaging.",
|
|
2554
2214
|
"Bars use 2px top corner radii while the lower corners touching the zero axis remain square.",
|
|
2555
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.",
|
|
@@ -2563,13 +2223,13 @@
|
|
|
2563
2223
|
],
|
|
2564
2224
|
"frameworkCaveats": {
|
|
2565
2225
|
"customElements": [
|
|
2566
|
-
"Assign data as
|
|
2226
|
+
"Assign data, series, and categories as JavaScript properties; arrays are not supported as HTML attributes."
|
|
2567
2227
|
],
|
|
2568
2228
|
"react": [
|
|
2569
|
-
"Pass
|
|
2229
|
+
"Pass stable data or series/category arrays; width and height provide standalone intrinsic dimensions while constrained containers reflow automatically."
|
|
2570
2230
|
],
|
|
2571
2231
|
"angular": [
|
|
2572
|
-
"Bind data as
|
|
2232
|
+
"Bind data or series/categories as properties; width and height provide standalone intrinsic dimensions while constrained containers reflow automatically."
|
|
2573
2233
|
]
|
|
2574
2234
|
},
|
|
2575
2235
|
"references": [
|
|
@@ -2580,6 +2240,10 @@
|
|
|
2580
2240
|
]
|
|
2581
2241
|
},
|
|
2582
2242
|
"props": {
|
|
2243
|
+
"categories": {
|
|
2244
|
+
"type": "string[]",
|
|
2245
|
+
"required": false
|
|
2246
|
+
},
|
|
2583
2247
|
"data": {
|
|
2584
2248
|
"type": "ChartDatum[]",
|
|
2585
2249
|
"required": false
|
|
@@ -2588,125 +2252,12 @@
|
|
|
2588
2252
|
"type": "number",
|
|
2589
2253
|
"required": false
|
|
2590
2254
|
},
|
|
2591
|
-
"
|
|
2592
|
-
"type": "
|
|
2593
|
-
"required": false
|
|
2594
|
-
}
|
|
2595
|
-
},
|
|
2596
|
-
"events": [],
|
|
2597
|
-
"slots": [],
|
|
2598
|
-
"exports": {
|
|
2599
|
-
"customElement": "ds-chart-bar",
|
|
2600
|
-
"react": "DsChartBar",
|
|
2601
|
-
"angular": "DsChartBar"
|
|
2602
|
-
}
|
|
2603
|
-
},
|
|
2604
|
-
"dependencies": [
|
|
2605
|
-
"@ds-mo/ui",
|
|
2606
|
-
"@ds-mo/tokens"
|
|
2607
|
-
],
|
|
2608
|
-
"registryDependencies": []
|
|
2609
|
-
},
|
|
2610
|
-
{
|
|
2611
|
-
"name": "chart-bar-stacked",
|
|
2612
|
-
"title": "ChartBarStacked",
|
|
2613
|
-
"description": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2614
|
-
"type": "registry:ui",
|
|
2615
|
-
"meta": {
|
|
2616
|
-
"library": "@ds-mo/ui",
|
|
2617
|
-
"distribution": "npm",
|
|
2618
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/chart-bar-stacked",
|
|
2619
|
-
"source": "src/wc/components/ChartBarStacked/ChartBarStacked.tsx",
|
|
2620
|
-
"intentStatus": "complete",
|
|
2621
|
-
"intent": {
|
|
2622
|
-
"audience": "specialized",
|
|
2623
|
-
"status": "experimental",
|
|
2624
|
-
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2625
|
-
"useWhen": [
|
|
2626
|
-
"Users need to compare both a category total and the contribution of several consistent series.",
|
|
2627
|
-
"A time series needs to show how its composition changes across equal time buckets.",
|
|
2628
|
-
"Every category should normalize to 100% so proportional composition can be compared independently of total magnitude."
|
|
2629
|
-
],
|
|
2630
|
-
"avoidWhen": [
|
|
2631
|
-
"Users need to compare individual series values precisely across categories; use grouped bars or separate charts.",
|
|
2632
|
-
"The visualization has only one measure per category; use ChartBar.",
|
|
2633
|
-
"The primary task is following continuous trends; use ChartLine.",
|
|
2634
|
-
"Series contain negative values or do not align with the shared category list."
|
|
2635
|
-
],
|
|
2636
|
-
"alternatives": [
|
|
2637
|
-
{
|
|
2638
|
-
"when": "Each category contains one independent value.",
|
|
2639
|
-
"component": "component:ds-chart-bar",
|
|
2640
|
-
"reason": "ChartBar provides the simpler single-series magnitude comparison."
|
|
2641
|
-
},
|
|
2642
|
-
{
|
|
2643
|
-
"when": "Users need to follow one or more trends rather than compare stack composition.",
|
|
2644
|
-
"component": "component:ds-chart-line",
|
|
2645
|
-
"reason": "ChartLine preserves each series as a continuous path across the ordered axis."
|
|
2646
|
-
},
|
|
2647
|
-
{
|
|
2648
|
-
"when": "One category's parts-to-whole composition is the focus.",
|
|
2649
|
-
"component": "component:ds-chart-donut",
|
|
2650
|
-
"reason": "ChartDonut provides the dedicated single-total composition treatment."
|
|
2651
|
-
}
|
|
2652
|
-
],
|
|
2653
|
-
"commonlyComposedWith": [
|
|
2654
|
-
"component:ds-chart-legend",
|
|
2655
|
-
"component:ds-card-shell-data-viz",
|
|
2656
|
-
"component:ds-tooltip-data-viz"
|
|
2657
|
-
],
|
|
2658
|
-
"accessibility": [
|
|
2659
|
-
"Provide a visible legend or adjacent textual summary that names every series; do not rely on segment color alone.",
|
|
2660
|
-
"The chart image name includes each category and series value, using normalized percentages in percentage mode.",
|
|
2661
|
-
"Use an adjacent data table when exact cross-category comparisons are necessary to complete the task."
|
|
2662
|
-
],
|
|
2663
|
-
"states": [
|
|
2664
|
-
"Stacked mode preserves raw magnitudes and scales the y-axis to the largest category total.",
|
|
2665
|
-
"Percentage mode normalizes each non-empty category independently and renders a fixed 0%, 25%, 50%, 75%, and 100% axis.",
|
|
2666
|
-
"Series render bottom-to-top in authored order; keep that order and color mapping stable across categories.",
|
|
2667
|
-
"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.",
|
|
2668
|
-
"Adjacent segments are separated by a non-scaling 1px gap; the stack's outer edges do not receive that separator.",
|
|
2669
|
-
"Negative values are unsupported and render as zero; the owning product supplies loading, empty, and error states."
|
|
2670
|
-
],
|
|
2671
|
-
"responsiveBehavior": [
|
|
2672
|
-
"Width and height provide the standalone intrinsic viewport; constrained card regions are measured and reflow both axes to their rendered pixel dimensions.",
|
|
2673
|
-
"Responsive layout changes stack positions and plot extents without scaling SVG text, strokes, separators, corner radii, or margins.",
|
|
2674
|
-
"The parent chooses how many time buckets remain legible at each width.",
|
|
2675
|
-
"Pre-format category labels and reduce bucket count before rendering when horizontal space becomes constrained."
|
|
2676
|
-
],
|
|
2677
|
-
"frameworkCaveats": {
|
|
2678
|
-
"customElements": [
|
|
2679
|
-
"Assign series and categories as JavaScript properties and keep every series aligned to the category count."
|
|
2680
|
-
],
|
|
2681
|
-
"react": [
|
|
2682
|
-
"Pass stable series and category arrays; choose percentage variant only when each category represents a meaningful whole."
|
|
2683
|
-
],
|
|
2684
|
-
"angular": [
|
|
2685
|
-
"Bind series and categories as properties; choose percentage variant only when each category represents a meaningful whole."
|
|
2686
|
-
]
|
|
2687
|
-
},
|
|
2688
|
-
"references": [
|
|
2689
|
-
{
|
|
2690
|
-
"label": "Storybook examples",
|
|
2691
|
-
"path": "src/wc/components/ChartBarStacked/ChartBarStacked.stories.ts"
|
|
2692
|
-
}
|
|
2693
|
-
]
|
|
2694
|
-
},
|
|
2695
|
-
"props": {
|
|
2696
|
-
"categories": {
|
|
2697
|
-
"type": "string[]",
|
|
2698
|
-
"required": false
|
|
2699
|
-
},
|
|
2700
|
-
"height": {
|
|
2701
|
-
"type": "number",
|
|
2702
|
-
"required": false
|
|
2703
|
-
},
|
|
2704
|
-
"series": {
|
|
2705
|
-
"type": "ChartSeries[]",
|
|
2255
|
+
"series": {
|
|
2256
|
+
"type": "ChartSeries[]",
|
|
2706
2257
|
"required": false
|
|
2707
2258
|
},
|
|
2708
2259
|
"variant": {
|
|
2709
|
-
"type": "
|
|
2260
|
+
"type": "ChartBarVariant",
|
|
2710
2261
|
"required": false
|
|
2711
2262
|
},
|
|
2712
2263
|
"width": {
|
|
@@ -2717,9 +2268,9 @@
|
|
|
2717
2268
|
"events": [],
|
|
2718
2269
|
"slots": [],
|
|
2719
2270
|
"exports": {
|
|
2720
|
-
"customElement": "ds-chart-bar
|
|
2721
|
-
"react": "
|
|
2722
|
-
"angular": "
|
|
2271
|
+
"customElement": "ds-chart-bar",
|
|
2272
|
+
"react": "DsChartBar",
|
|
2273
|
+
"angular": "DsChartBar"
|
|
2723
2274
|
}
|
|
2724
2275
|
},
|
|
2725
2276
|
"dependencies": [
|
|
@@ -2756,8 +2307,8 @@
|
|
|
2756
2307
|
"alternatives": [
|
|
2757
2308
|
{
|
|
2758
2309
|
"when": "The product needs the canonical card, filter action, visible legend, and built-in hover synchronization.",
|
|
2759
|
-
"component": "component:ds-card-data-viz
|
|
2760
|
-
"reason": "The
|
|
2310
|
+
"component": "component:ds-card-data-viz",
|
|
2311
|
+
"reason": "The donut card variant owns that complete composition and suppresses redundant slice tooltips."
|
|
2761
2312
|
},
|
|
2762
2313
|
{
|
|
2763
2314
|
"when": "Users need to compare independent category magnitudes.",
|
|
@@ -2768,7 +2319,7 @@
|
|
|
2768
2319
|
"commonlyComposedWith": [
|
|
2769
2320
|
"component:ds-chart-legend",
|
|
2770
2321
|
"component:ds-tooltip-data-viz",
|
|
2771
|
-
"component:ds-card-data-viz
|
|
2322
|
+
"component:ds-card-data-viz"
|
|
2772
2323
|
],
|
|
2773
2324
|
"accessibility": [
|
|
2774
2325
|
"Every non-empty slice remains keyboard focusable and exposes its label and value without depending on the visual tooltip.",
|
|
@@ -2778,7 +2329,7 @@
|
|
|
2778
2329
|
],
|
|
2779
2330
|
"states": [
|
|
2780
2331
|
"Genuine local pointer or keyboard focus may show a chart-owned tooltip; externally synchronized highlight never opens it.",
|
|
2781
|
-
"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.",
|
|
2782
2333
|
"Local hover and external highlight remain separate while both may dim non-matching slices.",
|
|
2783
2334
|
"Zero or negative totals render a neutral empty ring without interactive slices.",
|
|
2784
2335
|
"Center value and caption truncate when they exceed the safe inner-circle measure."
|
|
@@ -2791,7 +2342,7 @@
|
|
|
2791
2342
|
],
|
|
2792
2343
|
"frameworkCaveats": {
|
|
2793
2344
|
"customElements": [
|
|
2794
|
-
"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."
|
|
2795
2346
|
],
|
|
2796
2347
|
"react": [
|
|
2797
2348
|
"Keep synchronized highlight controlled by the composition and disable slice tooltips when a sibling legend continuously shows the same details."
|
|
@@ -2907,22 +2458,20 @@
|
|
|
2907
2458
|
},
|
|
2908
2459
|
{
|
|
2909
2460
|
"when": "The donut belongs in the canonical dashboard card.",
|
|
2910
|
-
"component": "component:ds-card-data-viz
|
|
2911
|
-
"reason": "The
|
|
2461
|
+
"component": "component:ds-card-data-viz",
|
|
2462
|
+
"reason": "The donut variant places the legend and handles bidirectional highlight synchronization."
|
|
2912
2463
|
},
|
|
2913
2464
|
{
|
|
2914
2465
|
"when": "A static line chart and series key belong in the canonical dashboard card.",
|
|
2915
|
-
"component": "component:ds-card-data-viz
|
|
2916
|
-
"reason": "The
|
|
2466
|
+
"component": "component:ds-card-data-viz",
|
|
2467
|
+
"reason": "The line variant places the horizontal legend and disables decorative local hover highlighting."
|
|
2917
2468
|
}
|
|
2918
2469
|
],
|
|
2919
2470
|
"commonlyComposedWith": [
|
|
2920
2471
|
"component:ds-chart-donut",
|
|
2921
|
-
"component:ds-chart-bar
|
|
2472
|
+
"component:ds-chart-bar",
|
|
2922
2473
|
"component:ds-chart-line",
|
|
2923
|
-
"component:ds-card-data-viz
|
|
2924
|
-
"component:ds-card-data-viz-line",
|
|
2925
|
-
"component:ds-card-shell-data-viz"
|
|
2474
|
+
"component:ds-card-data-viz"
|
|
2926
2475
|
],
|
|
2927
2476
|
"accessibility": [
|
|
2928
2477
|
"Rows remain non-interactive unless the item supplies an actual link destination.",
|
|
@@ -3059,8 +2608,7 @@
|
|
|
3059
2608
|
],
|
|
3060
2609
|
"commonlyComposedWith": [
|
|
3061
2610
|
"component:ds-chart-legend",
|
|
3062
|
-
"component:ds-card-data-viz
|
|
3063
|
-
"component:ds-card-shell-data-viz",
|
|
2611
|
+
"component:ds-card-data-viz",
|
|
3064
2612
|
"component:ds-tooltip-data-viz"
|
|
3065
2613
|
],
|
|
3066
2614
|
"accessibility": [
|
|
@@ -3178,7 +2726,7 @@
|
|
|
3178
2726
|
],
|
|
3179
2727
|
"commonlyComposedWith": [
|
|
3180
2728
|
"component:ds-field",
|
|
3181
|
-
"component:ds-select
|
|
2729
|
+
"component:ds-select",
|
|
3182
2730
|
"component:ds-text"
|
|
3183
2731
|
],
|
|
3184
2732
|
"accessibility": [
|
|
@@ -3995,7 +3543,7 @@
|
|
|
3995
3543
|
"status": "stable",
|
|
3996
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.",
|
|
3997
3545
|
"useWhen": [
|
|
3998
|
-
"An Input
|
|
3546
|
+
"An Input or Select needs a persistent visible label in a form.",
|
|
3999
3547
|
"Help text or an error message must be programmatically associated with one control.",
|
|
4000
3548
|
"A form layout needs one consistent label-control-message rhythm."
|
|
4001
3549
|
],
|
|
@@ -4014,7 +3562,6 @@
|
|
|
4014
3562
|
"commonlyComposedWith": [
|
|
4015
3563
|
"component:ds-input",
|
|
4016
3564
|
"component:ds-select",
|
|
4017
|
-
"component:ds-select-multi",
|
|
4018
3565
|
"component:ds-text"
|
|
4019
3566
|
],
|
|
4020
3567
|
"accessibility": [
|
|
@@ -4041,7 +3588,7 @@
|
|
|
4041
3588
|
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
4042
3589
|
],
|
|
4043
3590
|
"react": [
|
|
4044
|
-
"Compose one DsInput
|
|
3591
|
+
"Compose one DsInput or DsSelect child and control validation timing in the form owner."
|
|
4045
3592
|
],
|
|
4046
3593
|
"angular": [
|
|
4047
3594
|
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
@@ -4661,8 +4208,8 @@
|
|
|
4661
4208
|
},
|
|
4662
4209
|
{
|
|
4663
4210
|
"when": "Several form values may be selected.",
|
|
4664
|
-
"component": "component:ds-select
|
|
4665
|
-
"reason": "
|
|
4211
|
+
"component": "component:ds-select",
|
|
4212
|
+
"reason": "Select multiple provides multi-select listbox semantics, array value ownership, and count presentation."
|
|
4666
4213
|
},
|
|
4667
4214
|
{
|
|
4668
4215
|
"when": "The interaction needs substantial content, confirmation, or a form.",
|
|
@@ -4694,7 +4241,7 @@
|
|
|
4694
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.",
|
|
4695
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.",
|
|
4696
4243
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
4697
|
-
"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.",
|
|
4698
4245
|
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics."
|
|
4699
4246
|
],
|
|
4700
4247
|
"responsiveBehavior": [
|
|
@@ -4799,10 +4346,6 @@
|
|
|
4799
4346
|
"name": "dsClose",
|
|
4800
4347
|
"detail": "void"
|
|
4801
4348
|
},
|
|
4802
|
-
{
|
|
4803
|
-
"name": "dsGradientSelect",
|
|
4804
|
-
"detail": "ShellGradientPreset"
|
|
4805
|
-
},
|
|
4806
4349
|
{
|
|
4807
4350
|
"name": "dsSelect",
|
|
4808
4351
|
"detail": "MenuItemData"
|
|
@@ -5400,10 +4943,6 @@
|
|
|
5400
4943
|
"type": "string",
|
|
5401
4944
|
"required": false
|
|
5402
4945
|
},
|
|
5403
|
-
"sectionsJson": {
|
|
5404
|
-
"type": "string",
|
|
5405
|
-
"required": false
|
|
5406
|
-
},
|
|
5407
4946
|
"subsections": {
|
|
5408
4947
|
"type": "TabItem[]",
|
|
5409
4948
|
"required": false
|
|
@@ -5412,10 +4951,6 @@
|
|
|
5412
4951
|
"type": "string",
|
|
5413
4952
|
"required": false
|
|
5414
4953
|
},
|
|
5415
|
-
"subsectionsJson": {
|
|
5416
|
-
"type": "string",
|
|
5417
|
-
"required": false
|
|
5418
|
-
},
|
|
5419
4954
|
"subvalue": {
|
|
5420
4955
|
"type": "string",
|
|
5421
4956
|
"required": false
|
|
@@ -5513,10 +5048,6 @@
|
|
|
5513
5048
|
"type": "TabItem[]",
|
|
5514
5049
|
"required": false
|
|
5515
5050
|
},
|
|
5516
|
-
"sectionsJson": {
|
|
5517
|
-
"type": "string",
|
|
5518
|
-
"required": false
|
|
5519
|
-
},
|
|
5520
5051
|
"value": {
|
|
5521
5052
|
"type": "string",
|
|
5522
5053
|
"required": false
|
|
@@ -5901,7 +5432,7 @@
|
|
|
5901
5432
|
"At 1200px and wider, default to expanded, allow the user to expand or collapse, and restore the locally persisted desktop preference when available.",
|
|
5902
5433
|
"From 768px through 1199px, present PanelNav permanently collapsed and do not allow user expansion.",
|
|
5903
5434
|
"Below 768px, the consuming application replaces PanelNav with a dedicated mobile navigation component; PanelNav does not own mobile navigation.",
|
|
5904
|
-
"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.",
|
|
5905
5436
|
"When the viewport is below breakpoint, PanelNav locks collapsed, disables its header toggle affordance, and preserves the persisted desktop collapse preference.",
|
|
5906
5437
|
"Collapsed presentation must preserve destination ordering, active state, notification status, and accessible names."
|
|
5907
5438
|
],
|
|
@@ -6333,7 +5864,7 @@
|
|
|
6333
5864
|
"The product needs a compact filter menu next to search while keeping its filter choices and matching policy application-owned."
|
|
6334
5865
|
],
|
|
6335
5866
|
"avoidWhen": [
|
|
6336
|
-
"The search belongs inside a Select
|
|
5867
|
+
"The search belongs inside a Select popup; use that component's searchable behavior in either cardinality mode.",
|
|
6337
5868
|
"A form needs a labelled standalone field; compose ds-input inside ds-field instead."
|
|
6338
5869
|
],
|
|
6339
5870
|
"commonlyComposedWith": [
|
|
@@ -6460,7 +5991,7 @@
|
|
|
6460
5991
|
{
|
|
6461
5992
|
"name": "panel-tools",
|
|
6462
5993
|
"title": "PanelTools",
|
|
6463
|
-
"description": "
|
|
5994
|
+
"description": "Desktop and tablet utility rail-and-drawer primitive for explicitly defined application-wide tools, normally assembled by managed ShellApp through ShellTools.",
|
|
6464
5995
|
"type": "registry:ui",
|
|
6465
5996
|
"meta": {
|
|
6466
5997
|
"library": "@ds-mo/ui",
|
|
@@ -6471,17 +6002,17 @@
|
|
|
6471
6002
|
"intent": {
|
|
6472
6003
|
"audience": "specialized",
|
|
6473
6004
|
"status": "stable",
|
|
6474
|
-
"summary": "
|
|
6005
|
+
"summary": "Desktop and tablet utility rail-and-drawer primitive for explicitly defined application-wide tools, normally assembled by managed ShellApp through ShellTools.",
|
|
6475
6006
|
"useWhen": [
|
|
6476
|
-
"
|
|
6007
|
+
"An advanced slotted ShellApp needs the desktop and tablet global-tools primitive directly.",
|
|
6477
6008
|
"Users need to move between application-wide utilities without losing each tool's in-progress state.",
|
|
6478
6009
|
"Search, AI conversations, user messages, review stacks, notifications, or help content must remain available alongside route content."
|
|
6479
6010
|
],
|
|
6480
6011
|
"avoidWhen": [
|
|
6481
6012
|
"The action is specific to the current page or selected content rather than globally available across the application.",
|
|
6482
6013
|
"The item navigates to a primary or secondary route; use PanelNav or BarNav instead.",
|
|
6483
|
-
"
|
|
6484
|
-
"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.",
|
|
6485
6016
|
"PanelTools would be mounted outside the application's single ShellApp."
|
|
6486
6017
|
],
|
|
6487
6018
|
"alternatives": [
|
|
@@ -6511,16 +6042,16 @@
|
|
|
6511
6042
|
],
|
|
6512
6043
|
"accessibility": [
|
|
6513
6044
|
"Provide localized accessible labels for the rail, shortcut group, and every rendered tool.",
|
|
6514
|
-
"
|
|
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.",
|
|
6515
6046
|
"Keep focus on the selected rail action when opening a drawer and allow normal Tab navigation into its content.",
|
|
6516
6047
|
"Do not trigger global shortcuts while focus is in an editable control.",
|
|
6517
6048
|
"Use notification dots only as supplemental unread or new-content status and never as the sole status indication.",
|
|
6518
6049
|
"Explain temporarily inactive tools through an accessible label or adjacent product guidance; omit unauthorized tools entirely."
|
|
6519
6050
|
],
|
|
6520
6051
|
"states": [
|
|
6521
|
-
"
|
|
6522
|
-
"
|
|
6523
|
-
"
|
|
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.",
|
|
6524
6055
|
"Only one drawer is open at a time; selecting another tool switches directly and selecting the active tool closes to rail-only mode.",
|
|
6525
6056
|
"The drawer starts closed, remains open across ordinary route changes, and retains every mounted tool's independent conversation, query, scroll, and work state.",
|
|
6526
6057
|
"When storageKey is set, persist only the last active tool in this browser and still restore the drawer closed after reload.",
|
|
@@ -6543,19 +6074,19 @@
|
|
|
6543
6074
|
"responsiveBehavior": [
|
|
6544
6075
|
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
6545
6076
|
"ShellApp owns the fixed drawer-width variable; consumers must not hardcode alternate drawer widths.",
|
|
6546
|
-
"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.",
|
|
6547
6078
|
"Keep named-slot content mounted while tools switch or the drawer closes so users can return to in-progress global work.",
|
|
6548
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.",
|
|
6549
6080
|
"Use fixed drawer widths for now; do not add user resizing or width persistence."
|
|
6550
6081
|
],
|
|
6551
6082
|
"frameworkCaveats": {
|
|
6552
6083
|
"customElements": [
|
|
6553
|
-
"Assign items as
|
|
6084
|
+
"Assign items and headers as JavaScript properties and replace their references when collections change.",
|
|
6554
6085
|
"Assign headers as a JavaScript property and replace its object identity whenever an active tool changes title, depth, or actions.",
|
|
6555
6086
|
"Keep PanelTools mounted at ShellApp scope across route changes and provide each product through its matching named slot."
|
|
6556
6087
|
],
|
|
6557
6088
|
"react": [
|
|
6558
|
-
"Pass
|
|
6089
|
+
"Pass a stable explicitly ordered item collection through the generated React wrapper and keep named-slot product content mounted at ShellApp scope.",
|
|
6559
6090
|
"Use storageKey only for same-browser last-tool continuity; do not persist the open drawer."
|
|
6560
6091
|
],
|
|
6561
6092
|
"angular": [
|
|
@@ -6592,18 +6123,10 @@
|
|
|
6592
6123
|
"type": "PanelToolsHeaders",
|
|
6593
6124
|
"required": false
|
|
6594
6125
|
},
|
|
6595
|
-
"headersJson": {
|
|
6596
|
-
"type": "string",
|
|
6597
|
-
"required": false
|
|
6598
|
-
},
|
|
6599
6126
|
"items": {
|
|
6600
6127
|
"type": "PanelToolsItem[]",
|
|
6601
6128
|
"required": false
|
|
6602
6129
|
},
|
|
6603
|
-
"itemsJson": {
|
|
6604
|
-
"type": "string",
|
|
6605
|
-
"required": false
|
|
6606
|
-
},
|
|
6607
6130
|
"open": {
|
|
6608
6131
|
"type": "boolean",
|
|
6609
6132
|
"required": false
|
|
@@ -6909,7 +6432,7 @@
|
|
|
6909
6432
|
{
|
|
6910
6433
|
"name": "select",
|
|
6911
6434
|
"title": "Select",
|
|
6912
|
-
"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.",
|
|
6913
6436
|
"type": "registry:ui",
|
|
6914
6437
|
"meta": {
|
|
6915
6438
|
"library": "@ds-mo/ui",
|
|
@@ -6920,24 +6443,19 @@
|
|
|
6920
6443
|
"intent": {
|
|
6921
6444
|
"audience": "general",
|
|
6922
6445
|
"status": "stable",
|
|
6923
|
-
"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.",
|
|
6924
6447
|
"useWhen": [
|
|
6925
6448
|
"The user must choose one value from a finite set.",
|
|
6449
|
+
"The user may choose several independent values when multiple is enabled.",
|
|
6926
6450
|
"The option set benefits from local search, subtext, prefix icons, grouping, or disabled choices.",
|
|
6927
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.",
|
|
6928
6452
|
"The selected value must participate in native, Angular, or React form state."
|
|
6929
6453
|
],
|
|
6930
6454
|
"avoidWhen": [
|
|
6931
|
-
"Several values may be selected at once.",
|
|
6932
6455
|
"The rows perform commands rather than choosing a form value.",
|
|
6933
6456
|
"The choices form a hierarchy with expandable parents."
|
|
6934
6457
|
],
|
|
6935
6458
|
"alternatives": [
|
|
6936
|
-
{
|
|
6937
|
-
"when": "Several independent values may be selected.",
|
|
6938
|
-
"component": "component:ds-select-multi",
|
|
6939
|
-
"reason": "SelectMulti owns array values, multi-selection semantics, and count presentation."
|
|
6940
|
-
},
|
|
6941
6459
|
{
|
|
6942
6460
|
"when": "The popup contains commands or state-changing actions.",
|
|
6943
6461
|
"component": "component:ds-menu",
|
|
@@ -6958,6 +6476,7 @@
|
|
|
6958
6476
|
"accessibility": [
|
|
6959
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.",
|
|
6960
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.",
|
|
6961
6480
|
"Disabled options remain visible, expose aria-disabled, and are skipped by keyboard navigation and typeahead.",
|
|
6962
6481
|
"Keyboard navigation keeps the aria-activedescendant option scrolled into the visible listbox viewport.",
|
|
6963
6482
|
"Selected options rely on active fill and foreground treatment without a redundant trailing check icon.",
|
|
@@ -6965,13 +6484,14 @@
|
|
|
6965
6484
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6966
6485
|
],
|
|
6967
6486
|
"states": [
|
|
6968
|
-
"
|
|
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.",
|
|
6969
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.",
|
|
6970
|
-
"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.",
|
|
6971
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.",
|
|
6972
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.",
|
|
6973
|
-
"Clearing emits dsChange with an empty string
|
|
6974
|
-
"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.",
|
|
6975
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.",
|
|
6976
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.",
|
|
6977
6497
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
@@ -6996,10 +6516,10 @@
|
|
|
6996
6516
|
],
|
|
6997
6517
|
"frameworkCaveats": {
|
|
6998
6518
|
"customElements": [
|
|
6999
|
-
"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."
|
|
7000
6520
|
],
|
|
7001
6521
|
"react": [
|
|
7002
|
-
"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."
|
|
7003
6523
|
],
|
|
7004
6524
|
"angular": [
|
|
7005
6525
|
"Import DsSelect and SelectValueAccessor when integrating with Angular Forms; bind options and sections as properties."
|
|
@@ -7081,6 +6601,10 @@
|
|
|
7081
6601
|
"type": "string",
|
|
7082
6602
|
"required": false
|
|
7083
6603
|
},
|
|
6604
|
+
"multiple": {
|
|
6605
|
+
"type": "boolean",
|
|
6606
|
+
"required": false
|
|
6607
|
+
},
|
|
7084
6608
|
"name": {
|
|
7085
6609
|
"type": "string | undefined",
|
|
7086
6610
|
"required": false
|
|
@@ -7121,12 +6645,16 @@
|
|
|
7121
6645
|
"type": "SelectSection[]",
|
|
7122
6646
|
"required": false
|
|
7123
6647
|
},
|
|
6648
|
+
"selectedLabel": {
|
|
6649
|
+
"type": "string",
|
|
6650
|
+
"required": false
|
|
6651
|
+
},
|
|
7124
6652
|
"size": {
|
|
7125
6653
|
"type": "SelectSize",
|
|
7126
6654
|
"required": false
|
|
7127
6655
|
},
|
|
7128
6656
|
"value": {
|
|
7129
|
-
"type": "
|
|
6657
|
+
"type": "SelectValue",
|
|
7130
6658
|
"required": false
|
|
7131
6659
|
},
|
|
7132
6660
|
"width": {
|
|
@@ -7137,7 +6665,7 @@
|
|
|
7137
6665
|
"events": [
|
|
7138
6666
|
{
|
|
7139
6667
|
"name": "dsChange",
|
|
7140
|
-
"detail": "
|
|
6668
|
+
"detail": "SelectValue"
|
|
7141
6669
|
},
|
|
7142
6670
|
{
|
|
7143
6671
|
"name": "dsClear",
|
|
@@ -7162,6 +6690,7 @@
|
|
|
7162
6690
|
],
|
|
7163
6691
|
"registryDependencies": [
|
|
7164
6692
|
"button-unfilled",
|
|
6693
|
+
"checkbox",
|
|
7165
6694
|
"empty-state",
|
|
7166
6695
|
"icon",
|
|
7167
6696
|
"loader",
|
|
@@ -7170,403 +6699,207 @@
|
|
|
7170
6699
|
]
|
|
7171
6700
|
},
|
|
7172
6701
|
{
|
|
7173
|
-
"name": "
|
|
7174
|
-
"title": "
|
|
7175
|
-
"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.",
|
|
7176
6705
|
"type": "registry:ui",
|
|
7177
6706
|
"meta": {
|
|
7178
6707
|
"library": "@ds-mo/ui",
|
|
7179
6708
|
"distribution": "npm",
|
|
7180
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/
|
|
7181
|
-
"source": "src/wc/components/
|
|
6709
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-app",
|
|
6710
|
+
"source": "src/wc/components/ShellApp/ShellApp.tsx",
|
|
7182
6711
|
"intentStatus": "complete",
|
|
7183
6712
|
"intent": {
|
|
7184
|
-
"audience": "
|
|
6713
|
+
"audience": "specialized",
|
|
7185
6714
|
"status": "stable",
|
|
7186
|
-
"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.",
|
|
7187
6716
|
"useWhen": [
|
|
7188
|
-
"
|
|
7189
|
-
"
|
|
7190
|
-
"
|
|
7191
|
-
"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."
|
|
7192
6720
|
],
|
|
7193
6721
|
"avoidWhen": [
|
|
7194
|
-
"
|
|
7195
|
-
"
|
|
7196
|
-
"
|
|
7197
|
-
"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."
|
|
7198
|
-
],
|
|
7199
|
-
"alternatives": [
|
|
7200
|
-
{
|
|
7201
|
-
"when": "Exactly one value may be selected.",
|
|
7202
|
-
"component": "component:ds-select",
|
|
7203
|
-
"reason": "Select owns scalar form value and single-select listbox behavior."
|
|
7204
|
-
},
|
|
7205
|
-
{
|
|
7206
|
-
"when": "The popup contains actions rather than values.",
|
|
7207
|
-
"component": "component:ds-menu",
|
|
7208
|
-
"reason": "Menu uses command semantics and closes according to action-menu expectations."
|
|
7209
|
-
}
|
|
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."
|
|
7210
6725
|
],
|
|
7211
6726
|
"commonlyComposedWith": [
|
|
7212
|
-
"component:ds-
|
|
7213
|
-
"component:ds-
|
|
7214
|
-
"component:ds-
|
|
7215
|
-
"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"
|
|
7216
6740
|
],
|
|
7217
6741
|
"accessibility": [
|
|
7218
|
-
"
|
|
7219
|
-
"
|
|
7220
|
-
"
|
|
7221
|
-
"
|
|
7222
|
-
"
|
|
7223
|
-
"
|
|
7224
|
-
"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."
|
|
7225
6748
|
],
|
|
7226
6749
|
"states": [
|
|
7227
|
-
"
|
|
7228
|
-
"
|
|
7229
|
-
"
|
|
7230
|
-
"
|
|
7231
|
-
"
|
|
7232
|
-
"The
|
|
7233
|
-
"
|
|
7234
|
-
"
|
|
7235
|
-
"
|
|
7236
|
-
"
|
|
7237
|
-
"
|
|
7238
|
-
"
|
|
7239
|
-
"
|
|
7240
|
-
"The
|
|
7241
|
-
"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.",
|
|
7242
|
-
"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.",
|
|
7243
|
-
"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.",
|
|
7244
|
-
"Clear-all emits an empty dsChange and dsClear while preserving useful popup or search focus.",
|
|
7245
|
-
"Loading keeps the trigger visible, marks the control busy, and makes selection interaction temporarily unavailable without presenting the control as inactive.",
|
|
7246
|
-
"SelectMulti has no maximum-selection behavior; every available non-inactive option may be selected.",
|
|
7247
|
-
"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.",
|
|
7248
|
-
"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.",
|
|
7249
|
-
"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.",
|
|
7250
|
-
"Native form submission emits one entry per selected value under the component name.",
|
|
7251
|
-
"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."
|
|
7252
6764
|
],
|
|
7253
6765
|
"responsiveBehavior": [
|
|
7254
|
-
"
|
|
7255
|
-
"
|
|
7256
|
-
"
|
|
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."
|
|
7257
6774
|
],
|
|
7258
6775
|
"frameworkCaveats": {
|
|
7259
6776
|
"customElements": [
|
|
7260
|
-
"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."
|
|
7261
6779
|
],
|
|
7262
6780
|
"react": [
|
|
7263
|
-
"
|
|
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."
|
|
7264
6783
|
],
|
|
7265
6784
|
"angular": [
|
|
7266
|
-
"
|
|
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."
|
|
7267
6788
|
]
|
|
7268
6789
|
},
|
|
7269
6790
|
"references": [
|
|
7270
6791
|
{
|
|
7271
|
-
"label": "
|
|
7272
|
-
"path": "src/wc/components/
|
|
6792
|
+
"label": "Component guide",
|
|
6793
|
+
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
7273
6794
|
},
|
|
7274
6795
|
{
|
|
7275
|
-
"label": "
|
|
7276
|
-
"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"
|
|
7277
6806
|
}
|
|
7278
6807
|
]
|
|
7279
6808
|
},
|
|
7280
6809
|
"props": {
|
|
7281
|
-
"
|
|
7282
|
-
"type": "
|
|
7283
|
-
"required": false
|
|
7284
|
-
},
|
|
7285
|
-
"allowClear": {
|
|
7286
|
-
"type": "boolean",
|
|
6810
|
+
"composition": {
|
|
6811
|
+
"type": "ShellAppComposition",
|
|
7287
6812
|
"required": false
|
|
7288
6813
|
},
|
|
7289
|
-
"
|
|
7290
|
-
"type": "
|
|
6814
|
+
"gradientPreset": {
|
|
6815
|
+
"type": "ShellGradientPreset",
|
|
7291
6816
|
"required": false
|
|
7292
6817
|
},
|
|
7293
|
-
"
|
|
7294
|
-
"type": "
|
|
6818
|
+
"mobileDestination": {
|
|
6819
|
+
"type": "MobileDestination",
|
|
7295
6820
|
"required": false
|
|
7296
6821
|
},
|
|
7297
|
-
"
|
|
7298
|
-
"type": "
|
|
6822
|
+
"mobileSheetNavOpen": {
|
|
6823
|
+
"type": "boolean",
|
|
7299
6824
|
"required": false
|
|
7300
6825
|
},
|
|
7301
|
-
"
|
|
7302
|
-
"type": "
|
|
6826
|
+
"navStyle": {
|
|
6827
|
+
"type": "NavChromeStyle",
|
|
7303
6828
|
"required": false
|
|
7304
6829
|
},
|
|
7305
|
-
"
|
|
7306
|
-
"type": "
|
|
6830
|
+
"navigation": {
|
|
6831
|
+
"type": "ShellNavigationConfig",
|
|
7307
6832
|
"required": false
|
|
7308
6833
|
},
|
|
7309
|
-
"
|
|
7310
|
-
"type": "
|
|
6834
|
+
"pageChrome": {
|
|
6835
|
+
"type": "ShellPageChromeConfig",
|
|
7311
6836
|
"required": false
|
|
7312
6837
|
},
|
|
7313
|
-
"
|
|
6838
|
+
"shortcutsEnabled": {
|
|
7314
6839
|
"type": "boolean",
|
|
7315
6840
|
"required": false
|
|
7316
6841
|
},
|
|
7317
|
-
"
|
|
7318
|
-
"type": "
|
|
6842
|
+
"tools": {
|
|
6843
|
+
"type": "ShellToolsConfig",
|
|
7319
6844
|
"required": false
|
|
6845
|
+
}
|
|
6846
|
+
},
|
|
6847
|
+
"events": [
|
|
6848
|
+
{
|
|
6849
|
+
"name": "dsBreadcrumbSelect",
|
|
6850
|
+
"detail": "BreadcrumbSelectDetail"
|
|
7320
6851
|
},
|
|
7321
|
-
|
|
7322
|
-
"
|
|
7323
|
-
"
|
|
6852
|
+
{
|
|
6853
|
+
"name": "dsBrowseContextChange",
|
|
6854
|
+
"detail": "NavChromeStyle"
|
|
7324
6855
|
},
|
|
7325
|
-
|
|
7326
|
-
"
|
|
7327
|
-
"
|
|
6856
|
+
{
|
|
6857
|
+
"name": "dsHeaderAction",
|
|
6858
|
+
"detail": "{ tool: PanelToolsToolId; id: string }"
|
|
7328
6859
|
},
|
|
7329
|
-
|
|
7330
|
-
"
|
|
7331
|
-
"
|
|
6860
|
+
{
|
|
6861
|
+
"name": "dsHeaderBack",
|
|
6862
|
+
"detail": "{ tool: PanelToolsToolId }"
|
|
7332
6863
|
},
|
|
7333
|
-
|
|
7334
|
-
"
|
|
7335
|
-
"
|
|
6864
|
+
{
|
|
6865
|
+
"name": "dsNavFooterAction",
|
|
6866
|
+
"detail": "void"
|
|
7336
6867
|
},
|
|
7337
|
-
|
|
7338
|
-
"
|
|
7339
|
-
"
|
|
6868
|
+
{
|
|
6869
|
+
"name": "dsNavSelect",
|
|
6870
|
+
"detail": "string"
|
|
7340
6871
|
},
|
|
7341
|
-
"loadingLabel": {
|
|
7342
|
-
"type": "string",
|
|
7343
|
-
"required": false
|
|
7344
|
-
},
|
|
7345
|
-
"name": {
|
|
7346
|
-
"type": "string | undefined",
|
|
7347
|
-
"required": false
|
|
7348
|
-
},
|
|
7349
|
-
"noResultsText": {
|
|
7350
|
-
"type": "string",
|
|
7351
|
-
"required": false
|
|
7352
|
-
},
|
|
7353
|
-
"open": {
|
|
7354
|
-
"type": "boolean",
|
|
7355
|
-
"required": false
|
|
7356
|
-
},
|
|
7357
|
-
"options": {
|
|
7358
|
-
"type": "SelectMultiOption[]",
|
|
7359
|
-
"required": false
|
|
7360
|
-
},
|
|
7361
|
-
"placeholder": {
|
|
7362
|
-
"type": "string",
|
|
7363
|
-
"required": false
|
|
7364
|
-
},
|
|
7365
|
-
"required": {
|
|
7366
|
-
"type": "boolean",
|
|
7367
|
-
"required": false
|
|
7368
|
-
},
|
|
7369
|
-
"requiredMessage": {
|
|
7370
|
-
"type": "string",
|
|
7371
|
-
"required": false
|
|
7372
|
-
},
|
|
7373
|
-
"searchPlaceholder": {
|
|
7374
|
-
"type": "string",
|
|
7375
|
-
"required": false
|
|
7376
|
-
},
|
|
7377
|
-
"searchable": {
|
|
7378
|
-
"type": "boolean",
|
|
7379
|
-
"required": false
|
|
7380
|
-
},
|
|
7381
|
-
"sections": {
|
|
7382
|
-
"type": "SelectMultiSection[]",
|
|
7383
|
-
"required": false
|
|
7384
|
-
},
|
|
7385
|
-
"selectedLabel": {
|
|
7386
|
-
"type": "string",
|
|
7387
|
-
"required": false
|
|
7388
|
-
},
|
|
7389
|
-
"size": {
|
|
7390
|
-
"type": "SelectMultiSize",
|
|
7391
|
-
"required": false
|
|
7392
|
-
},
|
|
7393
|
-
"values": {
|
|
7394
|
-
"type": "string[]",
|
|
7395
|
-
"required": false
|
|
7396
|
-
},
|
|
7397
|
-
"width": {
|
|
7398
|
-
"type": "SelectMultiWidth",
|
|
7399
|
-
"required": false
|
|
7400
|
-
}
|
|
7401
|
-
},
|
|
7402
|
-
"events": [
|
|
7403
6872
|
{
|
|
7404
|
-
"name": "
|
|
7405
|
-
"detail": "
|
|
6873
|
+
"name": "dsNavUserAction",
|
|
6874
|
+
"detail": "PanelNavUserActionDetail"
|
|
7406
6875
|
},
|
|
7407
6876
|
{
|
|
7408
|
-
"name": "
|
|
7409
|
-
"detail": "
|
|
6877
|
+
"name": "dsPageAction",
|
|
6878
|
+
"detail": "string"
|
|
7410
6879
|
},
|
|
7411
6880
|
{
|
|
7412
|
-
"name": "
|
|
7413
|
-
"detail": "
|
|
7414
|
-
}
|
|
7415
|
-
],
|
|
7416
|
-
"slots": [],
|
|
7417
|
-
"exports": {
|
|
7418
|
-
"customElement": "ds-select-multi",
|
|
7419
|
-
"react": "DsSelectMulti",
|
|
7420
|
-
"angular": "DsSelectMulti"
|
|
7421
|
-
}
|
|
7422
|
-
},
|
|
7423
|
-
"dependencies": [
|
|
7424
|
-
"@ds-mo/ui",
|
|
7425
|
-
"@ds-mo/tokens",
|
|
7426
|
-
"@ds-mo/icons"
|
|
7427
|
-
],
|
|
7428
|
-
"registryDependencies": [
|
|
7429
|
-
"button-unfilled",
|
|
7430
|
-
"checkbox",
|
|
7431
|
-
"empty-state",
|
|
7432
|
-
"icon",
|
|
7433
|
-
"loader",
|
|
7434
|
-
"text",
|
|
7435
|
-
"tooltip"
|
|
7436
|
-
]
|
|
7437
|
-
},
|
|
7438
|
-
{
|
|
7439
|
-
"name": "shell-app",
|
|
7440
|
-
"title": "ShellApp",
|
|
7441
|
-
"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.",
|
|
7442
|
-
"type": "registry:ui",
|
|
7443
|
-
"meta": {
|
|
7444
|
-
"library": "@ds-mo/ui",
|
|
7445
|
-
"distribution": "npm",
|
|
7446
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-app",
|
|
7447
|
-
"source": "src/wc/components/ShellApp/ShellApp.tsx",
|
|
7448
|
-
"intentStatus": "complete",
|
|
7449
|
-
"intent": {
|
|
7450
|
-
"audience": "specialized",
|
|
7451
|
-
"status": "stable",
|
|
7452
|
-
"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.",
|
|
7453
|
-
"useWhen": [
|
|
7454
|
-
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
7455
|
-
"PanelNav, BarNav, ShellTools, mobile navigation, page content, shared chrome, responsive behavior, and shell shortcuts must be composed as one application frame.",
|
|
7456
|
-
"Future application templates need the supported base-page composition boundary."
|
|
7457
|
-
],
|
|
7458
|
-
"avoidWhen": [
|
|
7459
|
-
"Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences that require a different layout.",
|
|
7460
|
-
"Another ShellApp already exists in the page; applications must render exactly one and must never nest ShellApps.",
|
|
7461
|
-
"Building content inside an existing ShellApp; render the page content rather than another shell."
|
|
7462
|
-
],
|
|
7463
|
-
"commonlyComposedWith": [
|
|
7464
|
-
"component:ds-panel-nav",
|
|
7465
|
-
"component:ds-bar-nav",
|
|
7466
|
-
"component:ds-panel-tools",
|
|
7467
|
-
"component:ds-shell-tools",
|
|
7468
|
-
"component:ds-mobile-sheet-nav",
|
|
7469
|
-
"component:ds-mobile-header",
|
|
7470
|
-
"component:ds-mobile-bar-nav",
|
|
7471
|
-
"component:ds-shell-page",
|
|
7472
|
-
"component:ds-swatch-picker"
|
|
7473
|
-
],
|
|
7474
|
-
"patterns": [
|
|
7475
|
-
"pattern:application-shell",
|
|
7476
|
-
"pattern:shell-page"
|
|
7477
|
-
],
|
|
7478
|
-
"accessibility": [
|
|
7479
|
-
"Keep primary destinations in PanelNav and secondary route sections in BarNav.",
|
|
7480
|
-
"Ensure the default content region contains the page's single main landmark.",
|
|
7481
|
-
"Keep PanelNav, BarNav, and PanelTools-compatible chrome available in desktop and tablet compositions and the persistent mobile bar available below 768px.",
|
|
7482
|
-
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
7483
|
-
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
7484
|
-
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
7485
|
-
],
|
|
7486
|
-
"states": [
|
|
7487
|
-
"Render exactly one ShellApp as the workspace root and never nest it.",
|
|
7488
|
-
"PanelNav, BarNav, and ShellTools are the responsive shell regions; ShellTools contains at least Search and Help even when no additional product tools apply.",
|
|
7489
|
-
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
7490
|
-
"ShellApp propagates navStyle and resolved responsive mode and coordinates layout, gradient alignment, transitions, metrics, shortcuts, and mobile-stage visibility.",
|
|
7491
|
-
"The application controls mobileDestination and mobileSheetNavOpen and keeps router state independent from global tool-surface changes.",
|
|
7492
|
-
"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.",
|
|
7493
|
-
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; ShellApp owns rendering the resolved preset across authenticated routes.",
|
|
7494
|
-
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
7495
|
-
"Update PanelNav groups, BarNav tabs and heading, navStyle, basePath, and currentUrl atomically from one resolved route state.",
|
|
7496
|
-
"BarNav remains present: it shows route-section tabs when available and the active PanelNav destination label as heading otherwise.",
|
|
7497
|
-
"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.",
|
|
7498
|
-
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
7499
|
-
],
|
|
7500
|
-
"responsiveBehavior": [
|
|
7501
|
-
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
7502
|
-
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
7503
|
-
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
7504
|
-
"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.",
|
|
7505
|
-
"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.",
|
|
7506
|
-
"Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
|
|
7507
|
-
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
7508
|
-
"The bottom bar remains visible at all route and tool depths in the foundation release."
|
|
7509
|
-
],
|
|
7510
|
-
"frameworkCaveats": {
|
|
7511
|
-
"customElements": [
|
|
7512
|
-
"Assign complex navigation and tool collections as JavaScript properties on the slotted components.",
|
|
7513
|
-
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
7514
|
-
],
|
|
7515
|
-
"react": [
|
|
7516
|
-
"Use generated wrappers and preserve native slot names for desktop navigation, responsive tools, mobile navigation, and main content.",
|
|
7517
|
-
"Resolve all shell inputs from one router state before rendering the composition."
|
|
7518
|
-
],
|
|
7519
|
-
"angular": [
|
|
7520
|
-
"Use generated standalone adapters and preserve slot attributes in templates.",
|
|
7521
|
-
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
7522
|
-
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
7523
|
-
]
|
|
6881
|
+
"name": "dsPageBack",
|
|
6882
|
+
"detail": "MouseEvent"
|
|
7524
6883
|
},
|
|
7525
|
-
|
|
7526
|
-
|
|
7527
|
-
|
|
7528
|
-
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
7529
|
-
},
|
|
7530
|
-
{
|
|
7531
|
-
"label": "Executable Storybook composition",
|
|
7532
|
-
"path": "src/wc/components/ShellApp/ShellApp.stories.ts"
|
|
7533
|
-
},
|
|
7534
|
-
{
|
|
7535
|
-
"label": "Framework integration",
|
|
7536
|
-
"path": "docs/framework-integration.md"
|
|
7537
|
-
},
|
|
7538
|
-
{
|
|
7539
|
-
"label": "Application shell contract",
|
|
7540
|
-
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
7541
|
-
}
|
|
7542
|
-
]
|
|
7543
|
-
},
|
|
7544
|
-
"props": {
|
|
7545
|
-
"gradientPreset": {
|
|
7546
|
-
"type": "ShellGradientPreset",
|
|
7547
|
-
"required": false
|
|
6884
|
+
{
|
|
6885
|
+
"name": "dsPresentationChange",
|
|
6886
|
+
"detail": "{ presentation: 'drawer' | 'fullscreen' }"
|
|
7548
6887
|
},
|
|
7549
|
-
|
|
7550
|
-
"
|
|
7551
|
-
"
|
|
6888
|
+
{
|
|
6889
|
+
"name": "dsResponsiveModeChange",
|
|
6890
|
+
"detail": "{ mode: ShellResponsiveMode }"
|
|
7552
6891
|
},
|
|
7553
|
-
|
|
7554
|
-
"
|
|
7555
|
-
"
|
|
6892
|
+
{
|
|
6893
|
+
"name": "dsSubsectionChange",
|
|
6894
|
+
"detail": "string"
|
|
7556
6895
|
},
|
|
7557
|
-
|
|
7558
|
-
"
|
|
7559
|
-
"
|
|
6896
|
+
{
|
|
6897
|
+
"name": "dsTabChange",
|
|
6898
|
+
"detail": "string"
|
|
7560
6899
|
},
|
|
7561
|
-
"shortcutsEnabled": {
|
|
7562
|
-
"type": "boolean",
|
|
7563
|
-
"required": false
|
|
7564
|
-
}
|
|
7565
|
-
},
|
|
7566
|
-
"events": [
|
|
7567
6900
|
{
|
|
7568
|
-
"name": "
|
|
7569
|
-
"detail": "{
|
|
6901
|
+
"name": "dsToolChange",
|
|
6902
|
+
"detail": "{ id: PanelToolsToolId; selected: boolean }"
|
|
7570
6903
|
}
|
|
7571
6904
|
],
|
|
7572
6905
|
"slots": [],
|
|
@@ -7580,225 +6913,19 @@
|
|
|
7580
6913
|
"@ds-mo/ui",
|
|
7581
6914
|
"@ds-mo/tokens"
|
|
7582
6915
|
],
|
|
7583
|
-
"registryDependencies": []
|
|
7584
|
-
},
|
|
7585
|
-
{
|
|
7586
|
-
"name": "shell-gradient-picker",
|
|
7587
|
-
"title": "ShellGradientPicker",
|
|
7588
|
-
"description": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
7589
|
-
"type": "registry:ui",
|
|
7590
|
-
"meta": {
|
|
7591
|
-
"library": "@ds-mo/ui",
|
|
7592
|
-
"distribution": "npm",
|
|
7593
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-gradient-picker",
|
|
7594
|
-
"source": "src/wc/components/ShellGradientPicker/ShellGradientPicker.tsx",
|
|
7595
|
-
"intentStatus": "complete",
|
|
7596
|
-
"intent": {
|
|
7597
|
-
"audience": "specialized",
|
|
7598
|
-
"status": "deprecated",
|
|
7599
|
-
"replacedBy": "component:ds-swatch-picker",
|
|
7600
|
-
"replacementReason": "SwatchPicker now owns the same accessible interaction with a generic option model that supports both flat colors and gradients.",
|
|
7601
|
-
"summary": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
7602
|
-
"useWhen": [
|
|
7603
|
-
"Adding the Appearance or Theme section to the application's user or account menu.",
|
|
7604
|
-
"Users must choose the global ShellApp chrome treatment from none, cool, neutral, warm, or fresh."
|
|
7605
|
-
],
|
|
7606
|
-
"avoidWhen": [
|
|
7607
|
-
"Choosing semantic intent, page background, chart, content, or brand colors.",
|
|
7608
|
-
"Building an arbitrary gradient editor or allowing custom gradient values.",
|
|
7609
|
-
"A picker already exists for the application; provide exactly one canonical preference location.",
|
|
7610
|
-
"Rendering an individual swatch outside the complete picker."
|
|
7611
|
-
],
|
|
7612
|
-
"alternatives": [
|
|
7613
|
-
{
|
|
7614
|
-
"when": "The user is selecting the application light, dark, or system color mode.",
|
|
7615
|
-
"component": "component:ds-menu",
|
|
7616
|
-
"reason": "Color mode is a separate appearance preference and should use ordinary menu selection rows."
|
|
7617
|
-
}
|
|
7618
|
-
],
|
|
7619
|
-
"commonlyComposedWith": [
|
|
7620
|
-
"component:ds-shell-app",
|
|
7621
|
-
"component:ds-menu"
|
|
7622
|
-
],
|
|
7623
|
-
"patterns": [
|
|
7624
|
-
"pattern:application-shell"
|
|
7625
|
-
],
|
|
7626
|
-
"accessibility": [
|
|
7627
|
-
"Provide a localized groupLabel that describes the shell appearance choice.",
|
|
7628
|
-
"Treat the presets as one radio group with one Tab stop; Arrow keys, Home, and End move and select within the group.",
|
|
7629
|
-
"Keep the visible compact swatches and their accessible preset names; do not rely on color alone for assistive technology."
|
|
7630
|
-
],
|
|
7631
|
-
"states": [
|
|
7632
|
-
"Neutral is the default preset; none renders solid shell chrome without a wash.",
|
|
7633
|
-
"Cool, neutral, warm, and fresh use design tokens and automatically adapt to the active light or dark color theme.",
|
|
7634
|
-
"Apply dsChange immediately to ShellApp.gradientPreset and keep the containing account menu open.",
|
|
7635
|
-
"The application owns local persistence, cross-tab synchronization, and server or account preference precedence; the picker owns only selection UI and events.",
|
|
7636
|
-
"Treat the fixed preset union as the only supported values and do not construct custom gradients."
|
|
7637
|
-
],
|
|
7638
|
-
"responsiveBehavior": [
|
|
7639
|
-
"Keep the compact picker in the user or account appearance menu on supported desktop and tablet shell compositions.",
|
|
7640
|
-
"The future mobile account surface may present the same preference differently."
|
|
7641
|
-
],
|
|
7642
|
-
"frameworkCaveats": {
|
|
7643
|
-
"customElements": [
|
|
7644
|
-
"Listen for dsChange, resolve application preference precedence, and assign the result to the single ShellApp gradientPreset property."
|
|
7645
|
-
],
|
|
7646
|
-
"react": [
|
|
7647
|
-
"Use the generated wrapper and handle onDsChange without closing the containing account menu."
|
|
7648
|
-
],
|
|
7649
|
-
"angular": [
|
|
7650
|
-
"Bind value to the resolved preference and handle dsChange to update application state."
|
|
7651
|
-
]
|
|
7652
|
-
},
|
|
7653
|
-
"references": [
|
|
7654
|
-
{
|
|
7655
|
-
"label": "Replacement stories",
|
|
7656
|
-
"path": "src/wc/components/SwatchPicker/SwatchPicker.stories.ts"
|
|
7657
|
-
},
|
|
7658
|
-
{
|
|
7659
|
-
"label": "ShellApp gradient contract",
|
|
7660
|
-
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
7661
|
-
},
|
|
7662
|
-
{
|
|
7663
|
-
"label": "Application shell composition",
|
|
7664
|
-
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
7665
|
-
}
|
|
7666
|
-
]
|
|
7667
|
-
},
|
|
7668
|
-
"props": {
|
|
7669
|
-
"groupLabel": {
|
|
7670
|
-
"type": "string",
|
|
7671
|
-
"required": false
|
|
7672
|
-
},
|
|
7673
|
-
"value": {
|
|
7674
|
-
"type": "ShellGradientPreset",
|
|
7675
|
-
"required": false
|
|
7676
|
-
}
|
|
7677
|
-
},
|
|
7678
|
-
"events": [
|
|
7679
|
-
{
|
|
7680
|
-
"name": "dsChange",
|
|
7681
|
-
"detail": "ShellGradientPreset"
|
|
7682
|
-
}
|
|
7683
|
-
],
|
|
7684
|
-
"slots": [],
|
|
7685
|
-
"exports": {
|
|
7686
|
-
"customElement": "ds-shell-gradient-picker",
|
|
7687
|
-
"react": "DsShellGradientPicker",
|
|
7688
|
-
"angular": "DsShellGradientPicker"
|
|
7689
|
-
}
|
|
7690
|
-
},
|
|
7691
|
-
"dependencies": [
|
|
7692
|
-
"@ds-mo/ui",
|
|
7693
|
-
"@ds-mo/tokens"
|
|
7694
|
-
],
|
|
7695
6916
|
"registryDependencies": [
|
|
7696
|
-
"
|
|
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"
|
|
7697
6927
|
]
|
|
7698
6928
|
},
|
|
7699
|
-
{
|
|
7700
|
-
"name": "shell-gradient-swatch",
|
|
7701
|
-
"title": "ShellGradientSwatch",
|
|
7702
|
-
"description": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
7703
|
-
"type": "registry:ui",
|
|
7704
|
-
"meta": {
|
|
7705
|
-
"library": "@ds-mo/ui",
|
|
7706
|
-
"distribution": "npm",
|
|
7707
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-gradient-swatch",
|
|
7708
|
-
"source": "src/wc/components/ShellGradientSwatch/ShellGradientSwatch.tsx",
|
|
7709
|
-
"intentStatus": "complete",
|
|
7710
|
-
"intent": {
|
|
7711
|
-
"audience": "internal",
|
|
7712
|
-
"status": "deprecated",
|
|
7713
|
-
"replacedBy": "component:ds-swatch-picker",
|
|
7714
|
-
"replacementReason": "SwatchPicker renders its option buttons internally so an individually published radio swatch is no longer needed.",
|
|
7715
|
-
"summary": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
7716
|
-
"useWhen": [
|
|
7717
|
-
"Maintaining or extending ShellGradientPicker inside CompoMo."
|
|
7718
|
-
],
|
|
7719
|
-
"avoidWhen": [
|
|
7720
|
-
"Building application UI directly; use ShellGradientPicker instead.",
|
|
7721
|
-
"Selecting semantic, brand, chart, page, or arbitrary gradient colors.",
|
|
7722
|
-
"Creating a partial or custom set of shell gradient choices."
|
|
7723
|
-
],
|
|
7724
|
-
"alternatives": [
|
|
7725
|
-
{
|
|
7726
|
-
"when": "An application needs the supported global shell appearance control.",
|
|
7727
|
-
"component": "component:ds-swatch-picker",
|
|
7728
|
-
"reason": "SwatchPicker provides the complete radio-group semantics, keyboard behavior, generic previews, and selection event."
|
|
7729
|
-
}
|
|
7730
|
-
],
|
|
7731
|
-
"commonlyComposedWith": [
|
|
7732
|
-
"component:ds-swatch-picker"
|
|
7733
|
-
],
|
|
7734
|
-
"accessibility": [
|
|
7735
|
-
"Keep radio semantics, aria-checked state, and a preset-specific accessible name on the internal button.",
|
|
7736
|
-
"Let ShellGradientPicker manage the roving tab stop and group keyboard navigation.",
|
|
7737
|
-
"Do not expose an unlabeled color-only choice."
|
|
7738
|
-
],
|
|
7739
|
-
"states": [
|
|
7740
|
-
"Preset determines the token-based preview; selected determines radio state and selected visuals.",
|
|
7741
|
-
"The selected swatch owns the radio group's single tab stop while ShellGradientPicker coordinates selection and focus movement.",
|
|
7742
|
-
"isInactive disables interaction but does not remove the accessible name."
|
|
7743
|
-
],
|
|
7744
|
-
"responsiveBehavior": [
|
|
7745
|
-
"Preserve the fixed compact swatch geometry and let ShellGradientPicker own layout."
|
|
7746
|
-
],
|
|
7747
|
-
"frameworkCaveats": {
|
|
7748
|
-
"customElements": [
|
|
7749
|
-
"Do not instantiate this internal primitive in consuming applications."
|
|
7750
|
-
],
|
|
7751
|
-
"react": [
|
|
7752
|
-
"Use DsShellGradientPicker rather than the generated swatch wrapper."
|
|
7753
|
-
],
|
|
7754
|
-
"angular": [
|
|
7755
|
-
"Use DsShellGradientPicker rather than importing DsShellGradientSwatch."
|
|
7756
|
-
]
|
|
7757
|
-
},
|
|
7758
|
-
"references": [
|
|
7759
|
-
{
|
|
7760
|
-
"label": "Parent picker",
|
|
7761
|
-
"path": "src/wc/components/ShellGradientPicker/ShellGradientPicker.tsx"
|
|
7762
|
-
}
|
|
7763
|
-
]
|
|
7764
|
-
},
|
|
7765
|
-
"props": {
|
|
7766
|
-
"ariaLabel": {
|
|
7767
|
-
"type": "string | null",
|
|
7768
|
-
"required": false
|
|
7769
|
-
},
|
|
7770
|
-
"isInactive": {
|
|
7771
|
-
"type": "boolean",
|
|
7772
|
-
"required": false
|
|
7773
|
-
},
|
|
7774
|
-
"preset": {
|
|
7775
|
-
"type": "ShellGradientPreset",
|
|
7776
|
-
"required": false
|
|
7777
|
-
},
|
|
7778
|
-
"selected": {
|
|
7779
|
-
"type": "boolean",
|
|
7780
|
-
"required": false
|
|
7781
|
-
}
|
|
7782
|
-
},
|
|
7783
|
-
"events": [
|
|
7784
|
-
{
|
|
7785
|
-
"name": "dsSelect",
|
|
7786
|
-
"detail": "ShellGradientPreset"
|
|
7787
|
-
}
|
|
7788
|
-
],
|
|
7789
|
-
"slots": [],
|
|
7790
|
-
"exports": {
|
|
7791
|
-
"customElement": "ds-shell-gradient-swatch",
|
|
7792
|
-
"react": "DsShellGradientSwatch",
|
|
7793
|
-
"angular": "DsShellGradientSwatch"
|
|
7794
|
-
}
|
|
7795
|
-
},
|
|
7796
|
-
"dependencies": [
|
|
7797
|
-
"@ds-mo/ui",
|
|
7798
|
-
"@ds-mo/tokens"
|
|
7799
|
-
],
|
|
7800
|
-
"registryDependencies": []
|
|
7801
|
-
},
|
|
7802
6929
|
{
|
|
7803
6930
|
"name": "shell-page",
|
|
7804
6931
|
"title": "ShellPage",
|
|
@@ -7935,7 +7062,7 @@
|
|
|
7935
7062
|
{
|
|
7936
7063
|
"name": "shell-tools",
|
|
7937
7064
|
"title": "ShellTools",
|
|
7938
|
-
"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.",
|
|
7939
7066
|
"type": "registry:ui",
|
|
7940
7067
|
"meta": {
|
|
7941
7068
|
"library": "@ds-mo/ui",
|
|
@@ -7945,10 +7072,10 @@
|
|
|
7945
7072
|
"intentStatus": "complete",
|
|
7946
7073
|
"intent": {
|
|
7947
7074
|
"audience": "specialized",
|
|
7948
|
-
"status": "
|
|
7949
|
-
"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.",
|
|
7950
7077
|
"useWhen": [
|
|
7951
|
-
"A ShellApp must preserve the same
|
|
7078
|
+
"A ShellApp must preserve the same product-owned global tool views across desktop, tablet, and mobile."
|
|
7952
7079
|
],
|
|
7953
7080
|
"avoidWhen": [
|
|
7954
7081
|
"The tools exist only in desktop and tablet chrome; PanelTools remains supported for that case.",
|
|
@@ -7958,7 +7085,7 @@
|
|
|
7958
7085
|
{
|
|
7959
7086
|
"when": "Only legacy rail and drawer behavior is required.",
|
|
7960
7087
|
"component": "component:ds-panel-tools",
|
|
7961
|
-
"reason": "PanelTools
|
|
7088
|
+
"reason": "PanelTools is the direct desktop and tablet rail-and-drawer primitive."
|
|
7962
7089
|
}
|
|
7963
7090
|
],
|
|
7964
7091
|
"commonlyComposedWith": [
|
|
@@ -7978,7 +7105,8 @@
|
|
|
7978
7105
|
],
|
|
7979
7106
|
"states": [
|
|
7980
7107
|
"The application owns open and activeTool and replaces headers when tool depth changes.",
|
|
7981
|
-
"
|
|
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.",
|
|
7982
7110
|
"Switching responsive mode must not recreate application-owned slotted product elements."
|
|
7983
7111
|
],
|
|
7984
7112
|
"responsiveBehavior": [
|
|
@@ -8020,10 +7148,6 @@
|
|
|
8020
7148
|
"type": "PanelToolsHeaders",
|
|
8021
7149
|
"required": false
|
|
8022
7150
|
},
|
|
8023
|
-
"headersJson": {
|
|
8024
|
-
"type": "string",
|
|
8025
|
-
"required": false
|
|
8026
|
-
},
|
|
8027
7151
|
"inboxLabel": {
|
|
8028
7152
|
"type": "string",
|
|
8029
7153
|
"required": false
|
|
@@ -8036,10 +7160,6 @@
|
|
|
8036
7160
|
"type": "PanelToolsItem[]",
|
|
8037
7161
|
"required": false
|
|
8038
7162
|
},
|
|
8039
|
-
"itemsJson": {
|
|
8040
|
-
"type": "string",
|
|
8041
|
-
"required": false
|
|
8042
|
-
},
|
|
8043
7163
|
"open": {
|
|
8044
7164
|
"type": "boolean",
|
|
8045
7165
|
"required": false
|