@ds-mo/ui 14.27.1 → 14.29.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/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +28 -18
- package/dist/agent.json +436 -33
- package/dist/angular/ds-button-filled.d.ts +1 -1
- package/dist/angular/ds-button-filled.js +3 -3
- package/dist/angular/ds-button-unfilled.d.ts +1 -1
- package/dist/angular/ds-button-unfilled.js +3 -3
- package/dist/angular/ds-card-navigation.d.ts +20 -0
- package/dist/angular/ds-card-navigation.js +42 -0
- package/dist/angular/ds-card-settings-scope.d.ts +19 -0
- package/dist/angular/ds-card-settings-scope.js +42 -0
- package/dist/angular/ds-menu.d.ts +1 -1
- package/dist/angular/ds-menu.js +3 -3
- package/dist/angular/ds-mobile-bar-nav.d.ts +1 -1
- package/dist/angular/ds-mobile-bar-nav.js +3 -3
- 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-mobile-sheet-nav.d.ts +7 -1
- package/dist/angular/ds-mobile-sheet-nav.js +7 -4
- package/dist/angular/ds-panel-nav.d.ts +1 -1
- package/dist/angular/ds-panel-nav.js +3 -3
- package/dist/angular/ds-panel-tool-header.d.ts +1 -1
- package/dist/angular/ds-panel-tool-header.js +3 -3
- package/dist/angular/ds-panel-tool-search.d.ts +1 -1
- package/dist/angular/ds-panel-tool-search.js +3 -3
- package/dist/angular/ds-table.d.ts +1 -1
- package/dist/angular/ds-table.js +3 -3
- package/dist/angular/ds-tag.d.ts +1 -1
- package/dist/angular/ds-tag.js +3 -3
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +2 -0
- package/dist/angular/proxies.d.ts +2 -0
- package/dist/angular/proxies.js +2 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.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-banner.js +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +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-card-chart.js +1 -1
- package/dist/components/ds-card-navigation.d.ts +11 -0
- package/dist/components/ds-card-navigation.js +2 -0
- package/dist/components/ds-card-navigation.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-card-settings-scope.d.ts +11 -0
- package/dist/components/ds-card-settings-scope.js +2 -0
- package/dist/components/ds-card-settings-scope.js.map +1 -0
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-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-filter-menu.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.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-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-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-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-score.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select.js +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-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +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-table-filter.js +1 -1
- package/dist/components/ds-table-group.js +1 -1
- package/dist/components/ds-table-group.js.map +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-saved-views.js.map +1 -1
- package/dist/components/ds-table-search.js +1 -1
- package/dist/components/ds-table-search.js.map +1 -1
- package/dist/components/ds-table-sort.js +1 -1
- package/dist/components/ds-table-sort.js.map +1 -1
- package/dist/components/ds-table-toolbar.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-textarea.js.map +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/p--yvQzZoO.js +2 -0
- package/dist/components/p--yvQzZoO.js.map +1 -0
- package/dist/components/{p-Is1lFmwp.js → p-1gt8QlyW.js} +2 -2
- package/dist/components/p-B5AZd41L.js +2 -0
- package/dist/components/p-B5AZd41L.js.map +1 -0
- package/dist/components/p-B5eMVBlz.js +2 -0
- package/dist/components/p-B5eMVBlz.js.map +1 -0
- package/dist/components/{p-Q7AOgrg5.js → p-BCFpqnAg.js} +2 -2
- package/dist/components/p-BFHWoNH3.js +2 -0
- package/dist/components/{p-BVz-r3g0.js.map → p-BFHWoNH3.js.map} +1 -1
- package/dist/components/p-BGnRFtBa.js +2 -0
- package/dist/components/p-BGnRFtBa.js.map +1 -0
- package/dist/components/p-BIDGQ4tc.js +2 -0
- package/dist/components/p-BIDGQ4tc.js.map +1 -0
- package/dist/components/{p-Ctnm9NJP.js → p-BLTHIBsE.js} +2 -2
- package/dist/components/{p-C68oSTb1.js → p-BXT2opmZ.js} +2 -2
- package/dist/components/p-BZDQLjE0.js +2 -0
- package/dist/components/p-BZDQLjE0.js.map +1 -0
- package/dist/components/{p-Q0dkeoJ6.js → p-BdC7wxhu.js} +2 -2
- package/dist/components/{p-Q0dkeoJ6.js.map → p-BdC7wxhu.js.map} +1 -1
- package/dist/components/p-BfVlFinS.js +2 -0
- package/dist/components/{p-CQjUOHiN.js.map → p-BfVlFinS.js.map} +1 -1
- package/dist/components/{p-DGkn8FwV.js → p-Bl5wd3v3.js} +2 -2
- package/dist/components/p-BmRHJ_jo.js +2 -0
- package/dist/components/p-BmRHJ_jo.js.map +1 -0
- package/dist/components/{p-Bb9dA7sl.js → p-BpB2EF9g.js} +2 -2
- package/dist/components/{p-2wIPUcSL.js → p-BwAWZAHk.js} +2 -2
- package/dist/components/{p-B3sRZBZk.js → p-By5TDnbF.js} +2 -2
- package/dist/components/{p-BVpn_e-r.js → p-CDXcINTO.js} +2 -2
- package/dist/components/p-CDXcINTO.js.map +1 -0
- package/dist/components/{p-B3Z5sQin.js → p-CE8gsv7V.js} +2 -2
- package/dist/components/p-CLcwh1kq.js +2 -0
- package/dist/components/p-CLcwh1kq.js.map +1 -0
- package/dist/components/{p-DW8ssbfI.js → p-CN8PQLZu.js} +2 -2
- package/dist/components/p-CcK3UiTu.js +2 -0
- package/dist/components/{p-1604KY3B.js.map → p-CcK3UiTu.js.map} +1 -1
- package/dist/components/{p-CaF5WCci.js → p-Cocq-utR.js} +2 -2
- package/dist/components/p-Cr5vn5JO.js +2 -0
- package/dist/components/{p-to8BxxgT.js.map → p-Cr5vn5JO.js.map} +1 -1
- package/dist/components/{p-Cf5Ai4xx.js → p-Crd3PEUx.js} +2 -2
- package/dist/components/{p-Cf5Ai4xx.js.map → p-Crd3PEUx.js.map} +1 -1
- package/dist/components/{p-BZiGtBBk.js → p-Ct90k-nz.js} +2 -2
- package/dist/components/p-Cx2dWjaW.js +2 -0
- package/dist/components/p-Cx2dWjaW.js.map +1 -0
- package/dist/components/p-CyoLh8su.js +2 -0
- package/dist/components/p-CyoLh8su.js.map +1 -0
- package/dist/components/{p-BXDLR072.js → p-CysCSinT.js} +2 -2
- package/dist/components/{p-BXDLR072.js.map → p-CysCSinT.js.map} +1 -1
- package/dist/components/p-CzbsTZt7.js.map +1 -1
- package/dist/components/p-D1pPq-y0.js +2 -0
- package/dist/components/p-D1pPq-y0.js.map +1 -0
- package/dist/components/{p-VT-5XDkB.js → p-DDOuPq-N.js} +2 -2
- package/dist/components/{p-DkxOEFHN.js → p-DF8W85Tz.js} +2 -2
- package/dist/components/{p-DDqRCDXh.js → p-DSJSnQ1U.js} +2 -2
- package/dist/components/{p-Cr6pDY-e.js → p-DYK0slTb.js} +2 -2
- package/dist/components/{p-D9wZlB_N.js → p-D_QtZZR8.js} +2 -2
- package/dist/components/{p-Bv6FSDPR.js → p-DbDYEEWq.js} +2 -2
- package/dist/components/{p-BEXkJ9lg.js → p-DnQN0pLp.js} +2 -2
- package/dist/components/{p-DIqAdmui.js → p-FiM3rF7B.js} +2 -2
- package/dist/components/p-GbtafFds.js +2 -0
- package/dist/components/p-GbtafFds.js.map +1 -0
- package/dist/components/{p-WFo1x6dN.js → p-Hzz2j1Je.js} +2 -2
- package/dist/components/{p-B9esvbYk.js → p-K39w53Bw.js} +2 -2
- package/dist/components/p-K39w53Bw.js.map +1 -0
- package/dist/components/{p-DQQsS9Rx.js → p-aMyflqva.js} +2 -2
- package/dist/components/{p-DZcIt_JJ.js → p-dgep63_i.js} +2 -2
- package/dist/components/p-frKsmPQn.js +2 -0
- package/dist/components/p-frKsmPQn.js.map +1 -0
- package/dist/components/{p-BMzn2Cmw.js → p-rSC7ZUpy.js} +2 -2
- package/dist/docs/components.json +1025 -44
- package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +11 -3
- package/dist/lib/components/PanelTools/panel-tools-types.d.ts +2 -0
- package/dist/lib/components/ShellApp/shell-app-types.d.ts +2 -0
- package/dist/lib/shell/index.js.map +1 -1
- package/dist/lib/utils/choice-list.d.ts +2 -0
- package/dist/mcp-data/registry/bar-nav.json +7 -2
- package/dist/mcp-data/registry/bar-title.json +8 -3
- package/dist/mcp-data/registry/button-filled.json +26 -5
- package/dist/mcp-data/registry/button-unfilled.json +27 -6
- package/dist/mcp-data/registry/card-navigation.json +255 -0
- package/dist/mcp-data/registry/card-settings-scope.json +314 -0
- package/dist/mcp-data/registry/filter-menu.json +7 -2
- package/dist/mcp-data/registry/menu.json +21 -2
- package/dist/mcp-data/registry/mobile-bar-nav.json +20 -1
- package/dist/mcp-data/registry/mobile-header.json +23 -3
- package/dist/mcp-data/registry/mobile-section-switcher.json +50 -6
- package/dist/mcp-data/registry/mobile-sheet-nav.json +40 -3
- package/dist/mcp-data/registry/panel-nav.json +27 -6
- package/dist/mcp-data/registry/panel-tool-header.json +23 -2
- package/dist/mcp-data/registry/panel-tool-search.json +23 -2
- package/dist/mcp-data/registry/panel-tools.json +7 -2
- package/dist/mcp-data/registry/registry.json +441 -32
- package/dist/mcp-data/registry/select.json +8 -3
- package/dist/mcp-data/registry/shell-app.json +14 -8
- package/dist/mcp-data/registry/shell-tools.json +7 -2
- package/dist/mcp-data/registry/table-group.json +7 -2
- package/dist/mcp-data/registry/table-saved-views.json +7 -2
- package/dist/mcp-data/registry/table-search.json +7 -2
- package/dist/mcp-data/registry/table-sort.json +7 -2
- package/dist/mcp-data/registry/table.json +24 -3
- package/dist/mcp-data/registry/tag.json +24 -3
- package/dist/react/components.d.ts +2 -0
- package/dist/react/components.js +2 -0
- package/dist/react/ds-card-navigation.d.ts +12 -0
- package/dist/react/ds-card-navigation.js +12 -0
- package/dist/react/ds-card-settings-scope.d.ts +12 -0
- package/dist/react/ds-card-settings-scope.js +12 -0
- package/dist/react/ds-mobile-sheet-nav.d.ts +2 -1
- package/dist/react/ds-mobile-sheet-nav.js +1 -0
- package/dist/styles/table.css +1 -0
- package/dist/types/components/BarTitle/BarTitle.d.ts +3 -0
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +11 -3
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +11 -5
- package/dist/types/components/CardNavigation/CardNavigation.d.ts +31 -0
- package/dist/types/components/CardNavigation/index.d.ts +2 -0
- package/dist/types/components/CardSettingsScope/CardSettingsScope.d.ts +33 -0
- package/dist/types/components/CardSettingsScope/index.d.ts +2 -0
- package/dist/types/components/Menu/Menu.d.ts +4 -0
- package/dist/types/components/MobileBarNav/MobileBarNav.d.ts +2 -0
- package/dist/types/components/MobileHeader/MobileHeader.d.ts +3 -0
- package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +19 -0
- package/dist/types/components/MobileSheetNav/MobileSheetNav.d.ts +15 -2
- package/dist/types/components/PanelNav/PanelNav.d.ts +4 -1
- package/dist/types/components/PanelToolHeader/PanelToolHeader.d.ts +2 -0
- package/dist/types/components/PanelToolSearch/PanelToolSearch.d.ts +2 -0
- package/dist/types/components/PanelTools/panel-tools-types.d.ts +2 -0
- package/dist/types/components/ShellApp/ShellApp.d.ts +5 -2
- package/dist/types/components/ShellApp/shell-app-types.d.ts +2 -0
- package/dist/types/components/Table/Table.d.ts +10 -0
- package/dist/types/components/Table/table-row-view.d.ts +6 -1
- package/dist/types/components/TableSort/TableSort.d.ts +1 -0
- package/dist/types/components/Tag/Tag.d.ts +3 -0
- package/dist/types/components.d.ts +369 -8
- package/dist/types/utils/choice-list.d.ts +2 -0
- package/dist/vue/components.d.ts +2 -0
- package/dist/vue/components.js +2 -0
- package/dist/vue/ds-button-filled.js +1 -0
- package/dist/vue/ds-button-unfilled.js +1 -0
- package/dist/vue/ds-card-navigation.d.ts +3 -0
- package/dist/vue/ds-card-navigation.js +15 -0
- package/dist/vue/ds-card-settings-scope.d.ts +3 -0
- package/dist/vue/ds-card-settings-scope.js +20 -0
- package/dist/vue/ds-menu.js +1 -0
- package/dist/vue/ds-mobile-bar-nav.js +1 -0
- package/dist/vue/ds-mobile-header.js +1 -0
- package/dist/vue/ds-mobile-section-switcher.js +2 -0
- package/dist/vue/ds-mobile-sheet-nav.js +3 -0
- package/dist/vue/ds-panel-nav.js +1 -0
- package/dist/vue/ds-panel-tool-header.js +1 -0
- package/dist/vue/ds-panel-tool-search.js +1 -0
- package/dist/vue/ds-table.js +1 -0
- package/dist/vue/ds-tag.js +1 -0
- package/package.json +1 -1
- package/dist/components/p-1604KY3B.js +0 -2
- package/dist/components/p-537t6oRD.js +0 -2
- package/dist/components/p-537t6oRD.js.map +0 -1
- package/dist/components/p-6_CNVbqa.js +0 -2
- package/dist/components/p-6_CNVbqa.js.map +0 -1
- package/dist/components/p-B9esvbYk.js.map +0 -1
- package/dist/components/p-BIGpc__9.js +0 -2
- package/dist/components/p-BIGpc__9.js.map +0 -1
- package/dist/components/p-BRLDf-NK.js +0 -2
- package/dist/components/p-BRLDf-NK.js.map +0 -1
- package/dist/components/p-BUh2GkPJ.js +0 -2
- package/dist/components/p-BUh2GkPJ.js.map +0 -1
- package/dist/components/p-BVpn_e-r.js.map +0 -1
- package/dist/components/p-BVz-r3g0.js +0 -2
- package/dist/components/p-Bjt_8sLe.js +0 -2
- package/dist/components/p-Bjt_8sLe.js.map +0 -1
- package/dist/components/p-BssZ4SbT.js +0 -2
- package/dist/components/p-BssZ4SbT.js.map +0 -1
- package/dist/components/p-CGQnHNuW.js +0 -2
- package/dist/components/p-CGQnHNuW.js.map +0 -1
- package/dist/components/p-CQjUOHiN.js +0 -2
- package/dist/components/p-Cy1oWIaV.js +0 -2
- package/dist/components/p-Cy1oWIaV.js.map +0 -1
- package/dist/components/p-DQsFmleZ.js +0 -2
- package/dist/components/p-DQsFmleZ.js.map +0 -1
- package/dist/components/p-DlbhmXjH.js +0 -2
- package/dist/components/p-DlbhmXjH.js.map +0 -1
- package/dist/components/p-GEi3hDJQ.js +0 -2
- package/dist/components/p-GEi3hDJQ.js.map +0 -1
- package/dist/components/p-LMmrjmI_.js +0 -2
- package/dist/components/p-LMmrjmI_.js.map +0 -1
- package/dist/components/p-to8BxxgT.js +0 -2
- /package/dist/components/{p-Is1lFmwp.js.map → p-1gt8QlyW.js.map} +0 -0
- /package/dist/components/{p-Q7AOgrg5.js.map → p-BCFpqnAg.js.map} +0 -0
- /package/dist/components/{p-Ctnm9NJP.js.map → p-BLTHIBsE.js.map} +0 -0
- /package/dist/components/{p-C68oSTb1.js.map → p-BXT2opmZ.js.map} +0 -0
- /package/dist/components/{p-DGkn8FwV.js.map → p-Bl5wd3v3.js.map} +0 -0
- /package/dist/components/{p-Bb9dA7sl.js.map → p-BpB2EF9g.js.map} +0 -0
- /package/dist/components/{p-2wIPUcSL.js.map → p-BwAWZAHk.js.map} +0 -0
- /package/dist/components/{p-B3sRZBZk.js.map → p-By5TDnbF.js.map} +0 -0
- /package/dist/components/{p-B3Z5sQin.js.map → p-CE8gsv7V.js.map} +0 -0
- /package/dist/components/{p-DW8ssbfI.js.map → p-CN8PQLZu.js.map} +0 -0
- /package/dist/components/{p-CaF5WCci.js.map → p-Cocq-utR.js.map} +0 -0
- /package/dist/components/{p-BZiGtBBk.js.map → p-Ct90k-nz.js.map} +0 -0
- /package/dist/components/{p-VT-5XDkB.js.map → p-DDOuPq-N.js.map} +0 -0
- /package/dist/components/{p-DkxOEFHN.js.map → p-DF8W85Tz.js.map} +0 -0
- /package/dist/components/{p-DDqRCDXh.js.map → p-DSJSnQ1U.js.map} +0 -0
- /package/dist/components/{p-Cr6pDY-e.js.map → p-DYK0slTb.js.map} +0 -0
- /package/dist/components/{p-D9wZlB_N.js.map → p-D_QtZZR8.js.map} +0 -0
- /package/dist/components/{p-Bv6FSDPR.js.map → p-DbDYEEWq.js.map} +0 -0
- /package/dist/components/{p-BEXkJ9lg.js.map → p-DnQN0pLp.js.map} +0 -0
- /package/dist/components/{p-DIqAdmui.js.map → p-FiM3rF7B.js.map} +0 -0
- /package/dist/components/{p-WFo1x6dN.js.map → p-Hzz2j1Je.js.map} +0 -0
- /package/dist/components/{p-DQQsS9Rx.js.map → p-aMyflqva.js.map} +0 -0
- /package/dist/components/{p-DZcIt_JJ.js.map → p-dgep63_i.js.map} +0 -0
- /package/dist/components/{p-BMzn2Cmw.js.map → p-rSC7ZUpy.js.map} +0 -0
|
@@ -1171,7 +1171,8 @@
|
|
|
1171
1171
|
"On non-tab detail routes, show the parent PanelNav destination label in BarNav while the detail-page title remains in page content.",
|
|
1172
1172
|
"Dividers and groups visually organize peer route sections only and do not create hierarchy.",
|
|
1173
1173
|
"The application filters unauthorized sections before passing tabs to BarNav.",
|
|
1174
|
-
"Dashboard and Settings route state updates PanelNav groups, BarNav tabs, heading, basePath, currentUrl, and navStyle as one coordinated change."
|
|
1174
|
+
"Dashboard and Settings route state updates PanelNav groups, BarNav tabs, heading, basePath, currentUrl, and navStyle as one coordinated change.",
|
|
1175
|
+
"The overflow trigger automatically retains the shared surface-open wash through menu exit, separately from the selected route."
|
|
1175
1176
|
],
|
|
1176
1177
|
"responsiveBehavior": [
|
|
1177
1178
|
"Keep the BarNav region present so shell height and main-content origin remain stable across routes.",
|
|
@@ -1204,6 +1205,10 @@
|
|
|
1204
1205
|
{
|
|
1205
1206
|
"label": "Application shell composition",
|
|
1206
1207
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
1208
|
+
},
|
|
1209
|
+
{
|
|
1210
|
+
"label": "Surface ownership and trigger state",
|
|
1211
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
1207
1212
|
}
|
|
1208
1213
|
]
|
|
1209
1214
|
},
|
|
@@ -1337,7 +1342,8 @@
|
|
|
1337
1342
|
"expanded renders the larger heading, optional description, inset divider, and a full-width caption breadcrumb row above the title. The breadcrumb begins after 32px top padding; the following title and right-side actions share one top alignment. Compact renders 48px chrome with the existing icon Back action; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
|
|
1338
1343
|
"The one visible ordered action collapses by default in constrained presentation. Use never for an exceptional action whose hierarchy must remain visible; explicit overflow actions never leave the shared menu.",
|
|
1339
1344
|
"showDivider=false removes the bottom divider when the surrounding page composition supplies the boundary; showCompactDivider can independently restore or remove that boundary in compact and constrained variants.",
|
|
1340
|
-
"placement=shell-bar is reserved for ShellApp panel section navigation. It remains compact, omits description and breadcrumb presentation, and preserves applicable Back, section, primary, and overflow controls."
|
|
1345
|
+
"placement=shell-bar is reserved for ShellApp panel section navigation. It remains compact, omits description and breadcrumb presentation, and preserves applicable Back, section, primary, and overflow controls.",
|
|
1346
|
+
"Section, action, split-menu, and overflow triggers automatically retain the shared surface-open wash through exit. The expanded header presentation is layout, not surface ownership, and does not itself acquire a pressed wash."
|
|
1341
1347
|
],
|
|
1342
1348
|
"responsiveBehavior": [
|
|
1343
1349
|
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
@@ -1374,6 +1380,10 @@
|
|
|
1374
1380
|
{
|
|
1375
1381
|
"label": "Cross-browser shell-page and header coverage",
|
|
1376
1382
|
"path": "tests/e2e/bar-title.spec.ts"
|
|
1383
|
+
},
|
|
1384
|
+
{
|
|
1385
|
+
"label": "Surface ownership and trigger state",
|
|
1386
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
1377
1387
|
}
|
|
1378
1388
|
]
|
|
1379
1389
|
},
|
|
@@ -1857,10 +1867,11 @@
|
|
|
1857
1867
|
"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.",
|
|
1858
1868
|
"Visible labels are emphasized by default. Set labelEmphasis to false when a composed surface deliberately needs the button label to match adjacent regular-weight control labels; this does not change the action hierarchy, foreground, icon, or interaction states.",
|
|
1859
1869
|
"ButtonFilled has no active, pressed, or selected state; a filled action is a command, not a toggle or a persistent selection.",
|
|
1860
|
-
"An open popup is a transient pressed state instead. While
|
|
1870
|
+
"An open popup is a transient pressed state instead. While surfaceOpen 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.",
|
|
1861
1871
|
"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.",
|
|
1862
1872
|
"Split mode supports label, icon, and icon-label primary segments. The primary segment emits dsClick and the appended menu segment emits dsMenuClick.",
|
|
1863
|
-
"Split mode keeps both segments flush and uses a tertiary on-background separator. Rounded changes the shared outer radius without separating the segments."
|
|
1873
|
+
"Split mode keeps both segments flush and uses a tertiary on-background separator. Rounded changes the shared outer radius without separating the segments.",
|
|
1874
|
+
"Use surfaceOpen to identify this command as the owner of a visible menu, picker, or panel, even when that surface is distant. Keep the pressed wash through exit motion without adding selected styling or sustained physical scaling. Inline expansion and completed commands do not acquire this treatment."
|
|
1864
1875
|
],
|
|
1865
1876
|
"responsiveBehavior": [
|
|
1866
1877
|
"Use fill width only when the parent layout calls for a full-width action, commonly on narrow form layouts."
|
|
@@ -1880,6 +1891,10 @@
|
|
|
1880
1891
|
{
|
|
1881
1892
|
"label": "Storybook examples",
|
|
1882
1893
|
"path": "src/wc/components/ButtonFilled/ButtonFilled.stories.ts"
|
|
1894
|
+
},
|
|
1895
|
+
{
|
|
1896
|
+
"label": "Surface ownership and trigger state",
|
|
1897
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
1883
1898
|
}
|
|
1884
1899
|
]
|
|
1885
1900
|
},
|
|
@@ -1968,6 +1983,10 @@
|
|
|
1968
1983
|
"type": "boolean",
|
|
1969
1984
|
"required": false
|
|
1970
1985
|
},
|
|
1986
|
+
"surfaceOpen": {
|
|
1987
|
+
"type": "boolean | undefined",
|
|
1988
|
+
"required": false
|
|
1989
|
+
},
|
|
1971
1990
|
"type": {
|
|
1972
1991
|
"type": "'button' | 'submit' | 'reset'",
|
|
1973
1992
|
"required": false
|
|
@@ -2067,7 +2086,7 @@
|
|
|
2067
2086
|
"accessibility": [
|
|
2068
2087
|
"Provide an explicit accessible name for every icon-only action.",
|
|
2069
2088
|
"In split mode, provide menuAriaLabel for the appended ChevronDown segment, pass controls with the Menu id, and synchronize expanded with the Menu open state.",
|
|
2070
|
-
"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.
|
|
2089
|
+
"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. Surface-open popup triggers hold only the pressed wash while rendered, without changing their resting foreground; expanded disclosure controls without popup semantics retain the normal resting appearance.",
|
|
2071
2090
|
"Give an icon-only menu button an accessible name that states the role, such as More options or Customize table, because no visible label or chevron carries it.",
|
|
2072
2091
|
"Use haspopup directly for a non-menu popup such as a listbox or dialog; those cases get no chevron.",
|
|
2073
2092
|
"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.",
|
|
@@ -2092,9 +2111,10 @@
|
|
|
2092
2111
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
2093
2112
|
"hasMenu covers two distinct menu-button shapes and the variant selects between them. With label or icon-label the action has a menu, and a trailing chevron carries the affordance. With icon the button is a menu and no chevron is added.",
|
|
2094
2113
|
"Because the icon-only shape has no chevron, its glyph must convey the menu on its own. Use Ellipses for a generic more-options or overflow control. Use a specific icon when the menu has a named purpose, such as Table for Customize table.",
|
|
2095
|
-
"An open popup is a transient pressed state rather than a selected one. While
|
|
2114
|
+
"An open popup is a transient pressed state rather than a selected one. While surfaceOpen is true, the pressed wash is held for the popup's complete rendered lifecycle and survives hover without promoting foreground or selected fill, including when chrome opts out of selected fills with activeFill set to false. Expanded disclosure buttons without popup semantics remain visually neutral.",
|
|
2096
2115
|
"Split mode supports label, icon, and icon-label primary segments. The primary segment emits dsClick and the appended menu segment emits dsMenuClick.",
|
|
2097
|
-
"Split mode keeps both segments flush and uses a tertiary surface-aware separator. Bordered mode also preserves the shared outer border; borderless mode limits the separator to the content line height."
|
|
2116
|
+
"Split mode keeps both segments flush and uses a tertiary surface-aware separator. Bordered mode also preserves the shared outer border; borderless mode limits the separator to the content line height.",
|
|
2117
|
+
"Use surfaceOpen to identify the owner of a visible menu, picker, or panel, even when it is distant. Preserve it through exit motion independently of expanded semantics, pressed toggles, and isActive selection. It preserves resting foreground and does not hold physical scaling. Inline expansion and last-click history do not acquire this treatment."
|
|
2098
2118
|
],
|
|
2099
2119
|
"responsiveBehavior": [
|
|
2100
2120
|
"The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants. Table caption Customize is one such layout: below 900px it uses the icon shape while keeping the same neutral resting foreground regardless of the controlled column configuration.",
|
|
@@ -2117,6 +2137,10 @@
|
|
|
2117
2137
|
{
|
|
2118
2138
|
"label": "Storybook examples",
|
|
2119
2139
|
"path": "src/wc/components/ButtonUnfilled/ButtonUnfilled.stories.ts"
|
|
2140
|
+
},
|
|
2141
|
+
{
|
|
2142
|
+
"label": "Surface ownership and trigger state",
|
|
2143
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
2120
2144
|
}
|
|
2121
2145
|
]
|
|
2122
2146
|
},
|
|
@@ -2221,6 +2245,10 @@
|
|
|
2221
2245
|
"type": "boolean",
|
|
2222
2246
|
"required": false
|
|
2223
2247
|
},
|
|
2248
|
+
"surfaceOpen": {
|
|
2249
|
+
"type": "boolean | undefined",
|
|
2250
|
+
"required": false
|
|
2251
|
+
},
|
|
2224
2252
|
"type": {
|
|
2225
2253
|
"type": "'button' | 'submit' | 'reset'",
|
|
2226
2254
|
"required": false
|
|
@@ -2385,6 +2413,136 @@
|
|
|
2385
2413
|
"text"
|
|
2386
2414
|
]
|
|
2387
2415
|
},
|
|
2416
|
+
{
|
|
2417
|
+
"name": "card-navigation",
|
|
2418
|
+
"title": "CardNavigation",
|
|
2419
|
+
"description": "Settings-style navigation surface with a native destination link, optional supporting copy, a fixed ChevronRight affordance, and an optional application-owned body.",
|
|
2420
|
+
"type": "registry:ui",
|
|
2421
|
+
"meta": {
|
|
2422
|
+
"library": "@ds-mo/ui",
|
|
2423
|
+
"distribution": "npm",
|
|
2424
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-navigation",
|
|
2425
|
+
"source": "src/wc/components/CardNavigation/CardNavigation.tsx",
|
|
2426
|
+
"intentStatus": "complete",
|
|
2427
|
+
"intent": {
|
|
2428
|
+
"audience": "general",
|
|
2429
|
+
"status": "stable",
|
|
2430
|
+
"summary": "Settings-style navigation surface with a native destination link, optional supporting copy, a fixed ChevronRight affordance, and an optional application-owned body.",
|
|
2431
|
+
"useWhen": [
|
|
2432
|
+
"A settings page needs a card that leads to a deeper settings destination.",
|
|
2433
|
+
"A compact destination card needs the complete surface to act as one link.",
|
|
2434
|
+
"A settings summary must remain visible in a body while only the card header navigates."
|
|
2435
|
+
],
|
|
2436
|
+
"avoidWhen": [
|
|
2437
|
+
"The card edits its contents in place; use CardSetting for the edit-save-cancel workflow.",
|
|
2438
|
+
"The destination is an action without a navigable URL.",
|
|
2439
|
+
"The surface contains a chart, legend, metric visualization, or other data-visualization composition."
|
|
2440
|
+
],
|
|
2441
|
+
"alternatives": [
|
|
2442
|
+
{
|
|
2443
|
+
"when": "The section switches between read-only and editable content in place.",
|
|
2444
|
+
"component": "component:ds-card-setting",
|
|
2445
|
+
"reason": "CardSetting owns the controlled edit-save-cancel workflow."
|
|
2446
|
+
},
|
|
2447
|
+
{
|
|
2448
|
+
"when": "The surface contains a chart or specialized data-visualization composition.",
|
|
2449
|
+
"component": "component:ds-card-chart",
|
|
2450
|
+
"reason": "CardChart owns the independently evolving chart-card contract."
|
|
2451
|
+
}
|
|
2452
|
+
],
|
|
2453
|
+
"commonlyComposedWith": [
|
|
2454
|
+
"component:ds-text",
|
|
2455
|
+
"component:ds-card-setting"
|
|
2456
|
+
],
|
|
2457
|
+
"accessibility": [
|
|
2458
|
+
"CardNavigation renders a native link whenever href resolves to an allowed URL, so Enter activation, link context menus, and modified-click behavior remain available.",
|
|
2459
|
+
"The heading is rendered as an h2 and the optional description contributes to the link's accessible name.",
|
|
2460
|
+
"The ChevronRight icon is decorative because the link text already names the destination.",
|
|
2461
|
+
"Use the content variant only when interactive body content must remain outside the header link; never place interactive descendants inside the navigation-only card.",
|
|
2462
|
+
"dsNavigate is cancelable so client-side routers can prevent native navigation after accepting an unmodified activation."
|
|
2463
|
+
],
|
|
2464
|
+
"states": [
|
|
2465
|
+
"The native link owns hover, pressed, and focus-visible states across the complete card in navigation-only mode.",
|
|
2466
|
+
"In content mode, the native link owns those interaction states only across the header while the body remains application-owned.",
|
|
2467
|
+
"An empty or unsafe href renders non-interactive card chrome without a false keyboard target.",
|
|
2468
|
+
"The application owns destination loading, authorization, not-found, and recovery states after navigation."
|
|
2469
|
+
],
|
|
2470
|
+
"responsiveBehavior": [
|
|
2471
|
+
"Choose sm, md, or lg from the parent layout; the surface never exceeds its parent width.",
|
|
2472
|
+
"Supporting copy wraps while the chevron remains visible at the trailing edge.",
|
|
2473
|
+
"The parent owns wrapping, columns, stacking, and breakpoint changes between cards."
|
|
2474
|
+
],
|
|
2475
|
+
"frameworkCaveats": {
|
|
2476
|
+
"customElements": [
|
|
2477
|
+
"Set href to a valid relative or HTTP(S) URL.",
|
|
2478
|
+
"Prevent dsNavigate only when an application router takes ownership of the same activation."
|
|
2479
|
+
],
|
|
2480
|
+
"react": [
|
|
2481
|
+
"Pass href for native link semantics and use onDsNavigate only when coordinating with a client-side router.",
|
|
2482
|
+
"Use variant content when projecting interactive body content so those controls stay outside the link."
|
|
2483
|
+
],
|
|
2484
|
+
"angular": [
|
|
2485
|
+
"Bind href and prevent dsNavigate before calling Router.navigateByUrl for unmodified primary activations.",
|
|
2486
|
+
"Use variant content when projecting interactive body content so those controls stay outside the link."
|
|
2487
|
+
]
|
|
2488
|
+
},
|
|
2489
|
+
"references": [
|
|
2490
|
+
{
|
|
2491
|
+
"label": "Storybook navigation-only and content examples",
|
|
2492
|
+
"path": "src/wc/components/CardNavigation/CardNavigation.stories.ts"
|
|
2493
|
+
},
|
|
2494
|
+
{
|
|
2495
|
+
"label": "Rendered navigation and interaction coverage",
|
|
2496
|
+
"path": "tests/e2e/card-navigation.spec.ts"
|
|
2497
|
+
}
|
|
2498
|
+
]
|
|
2499
|
+
},
|
|
2500
|
+
"props": {
|
|
2501
|
+
"cardWidth": {
|
|
2502
|
+
"type": "CardNavigationWidth",
|
|
2503
|
+
"required": false
|
|
2504
|
+
},
|
|
2505
|
+
"description": {
|
|
2506
|
+
"type": "string | undefined",
|
|
2507
|
+
"required": false
|
|
2508
|
+
},
|
|
2509
|
+
"heading": {
|
|
2510
|
+
"type": "string",
|
|
2511
|
+
"required": true
|
|
2512
|
+
},
|
|
2513
|
+
"href": {
|
|
2514
|
+
"type": "string",
|
|
2515
|
+
"required": true
|
|
2516
|
+
},
|
|
2517
|
+
"variant": {
|
|
2518
|
+
"type": "CardNavigationVariant",
|
|
2519
|
+
"required": false
|
|
2520
|
+
}
|
|
2521
|
+
},
|
|
2522
|
+
"events": [
|
|
2523
|
+
{
|
|
2524
|
+
"name": "dsNavigate",
|
|
2525
|
+
"detail": "CardNavigationDetail"
|
|
2526
|
+
}
|
|
2527
|
+
],
|
|
2528
|
+
"slots": [],
|
|
2529
|
+
"exports": {
|
|
2530
|
+
"customElement": "ds-card-navigation",
|
|
2531
|
+
"react": "DsCardNavigation",
|
|
2532
|
+
"vue": "DsCardNavigation",
|
|
2533
|
+
"angular": "DsCardNavigation"
|
|
2534
|
+
}
|
|
2535
|
+
},
|
|
2536
|
+
"dependencies": [
|
|
2537
|
+
"@ds-mo/ui",
|
|
2538
|
+
"@ds-mo/tokens",
|
|
2539
|
+
"@ds-mo/icons"
|
|
2540
|
+
],
|
|
2541
|
+
"registryDependencies": [
|
|
2542
|
+
"icon",
|
|
2543
|
+
"text"
|
|
2544
|
+
]
|
|
2545
|
+
},
|
|
2388
2546
|
{
|
|
2389
2547
|
"name": "card-overview",
|
|
2390
2548
|
"title": "CardOverview",
|
|
@@ -2708,6 +2866,123 @@
|
|
|
2708
2866
|
"text"
|
|
2709
2867
|
]
|
|
2710
2868
|
},
|
|
2869
|
+
{
|
|
2870
|
+
"name": "card-settings-scope",
|
|
2871
|
+
"title": "CardSettingsScope",
|
|
2872
|
+
"description": "Compact, theme-aware settings context card with inline product-area and profile menu triggers.",
|
|
2873
|
+
"type": "registry:ui",
|
|
2874
|
+
"meta": {
|
|
2875
|
+
"library": "@ds-mo/ui",
|
|
2876
|
+
"distribution": "npm",
|
|
2877
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-settings-scope",
|
|
2878
|
+
"source": "src/wc/components/CardSettingsScope/CardSettingsScope.tsx",
|
|
2879
|
+
"intentStatus": "complete",
|
|
2880
|
+
"intent": {
|
|
2881
|
+
"audience": "general",
|
|
2882
|
+
"status": "stable",
|
|
2883
|
+
"summary": "Compact, theme-aware settings context card with inline product-area and profile menu triggers.",
|
|
2884
|
+
"useWhen": [
|
|
2885
|
+
"A settings workspace needs to show and change both its product area and the organization or profile being managed."
|
|
2886
|
+
],
|
|
2887
|
+
"avoidWhen": [
|
|
2888
|
+
"The content is a reporting period and metrics summary; use CardOverview.",
|
|
2889
|
+
"The card edits settings in place; use CardSetting."
|
|
2890
|
+
],
|
|
2891
|
+
"commonlyComposedWith": [
|
|
2892
|
+
"component:ds-menu",
|
|
2893
|
+
"component:ds-card-setting"
|
|
2894
|
+
],
|
|
2895
|
+
"accessibility": [
|
|
2896
|
+
"Both scope values are native buttons with popup relationships and controlled expanded state.",
|
|
2897
|
+
"Use the emitted native anchor for menu placement and focus return.",
|
|
2898
|
+
"An empty informational profiles popup uses dialog semantics.",
|
|
2899
|
+
"The shared text-action recipe supplies brand foreground, hover underline, and keyboard focus indication."
|
|
2900
|
+
],
|
|
2901
|
+
"states": [
|
|
2902
|
+
"The application owns the selected area, profile, available choices, permissions, and empty-state copy.",
|
|
2903
|
+
"The card reports popup requests without changing selection or expanded state.",
|
|
2904
|
+
"The surface follows the active theme rather than imposing always-dark colors."
|
|
2905
|
+
],
|
|
2906
|
+
"responsiveBehavior": [
|
|
2907
|
+
"The parent owns sticky positioning and shell offsets.",
|
|
2908
|
+
"The compact sentence wraps when space is constrained so both controls remain available."
|
|
2909
|
+
],
|
|
2910
|
+
"frameworkCaveats": {
|
|
2911
|
+
"angular": [
|
|
2912
|
+
"Import the generated standalone adapter; bind controlled labels and expanded states and handle dsScopeRequest."
|
|
2913
|
+
]
|
|
2914
|
+
},
|
|
2915
|
+
"references": [
|
|
2916
|
+
{
|
|
2917
|
+
"label": "Storybook examples",
|
|
2918
|
+
"path": "src/wc/components/CardSettingsScope/CardSettingsScope.stories.ts"
|
|
2919
|
+
}
|
|
2920
|
+
]
|
|
2921
|
+
},
|
|
2922
|
+
"props": {
|
|
2923
|
+
"areaControls": {
|
|
2924
|
+
"type": "string | undefined",
|
|
2925
|
+
"required": false
|
|
2926
|
+
},
|
|
2927
|
+
"areaExpanded": {
|
|
2928
|
+
"type": "boolean",
|
|
2929
|
+
"required": false
|
|
2930
|
+
},
|
|
2931
|
+
"areaLabel": {
|
|
2932
|
+
"type": "string",
|
|
2933
|
+
"required": false
|
|
2934
|
+
},
|
|
2935
|
+
"forLabel": {
|
|
2936
|
+
"type": "string",
|
|
2937
|
+
"required": false
|
|
2938
|
+
},
|
|
2939
|
+
"managingLabel": {
|
|
2940
|
+
"type": "string",
|
|
2941
|
+
"required": false
|
|
2942
|
+
},
|
|
2943
|
+
"profileControls": {
|
|
2944
|
+
"type": "string | undefined",
|
|
2945
|
+
"required": false
|
|
2946
|
+
},
|
|
2947
|
+
"profileExpanded": {
|
|
2948
|
+
"type": "boolean",
|
|
2949
|
+
"required": false
|
|
2950
|
+
},
|
|
2951
|
+
"profileLabel": {
|
|
2952
|
+
"type": "string",
|
|
2953
|
+
"required": false
|
|
2954
|
+
},
|
|
2955
|
+
"profilePopup": {
|
|
2956
|
+
"type": "'menu' | 'dialog'",
|
|
2957
|
+
"required": false
|
|
2958
|
+
},
|
|
2959
|
+
"scopeLabel": {
|
|
2960
|
+
"type": "string",
|
|
2961
|
+
"required": false
|
|
2962
|
+
}
|
|
2963
|
+
},
|
|
2964
|
+
"events": [
|
|
2965
|
+
{
|
|
2966
|
+
"name": "dsScopeRequest",
|
|
2967
|
+
"detail": "SettingsScopeRequest"
|
|
2968
|
+
}
|
|
2969
|
+
],
|
|
2970
|
+
"slots": [],
|
|
2971
|
+
"exports": {
|
|
2972
|
+
"customElement": "ds-card-settings-scope",
|
|
2973
|
+
"react": "DsCardSettingsScope",
|
|
2974
|
+
"vue": "DsCardSettingsScope",
|
|
2975
|
+
"angular": "DsCardSettingsScope"
|
|
2976
|
+
}
|
|
2977
|
+
},
|
|
2978
|
+
"dependencies": [
|
|
2979
|
+
"@ds-mo/ui",
|
|
2980
|
+
"@ds-mo/tokens"
|
|
2981
|
+
],
|
|
2982
|
+
"registryDependencies": [
|
|
2983
|
+
"text"
|
|
2984
|
+
]
|
|
2985
|
+
},
|
|
2711
2986
|
{
|
|
2712
2987
|
"name": "chart",
|
|
2713
2988
|
"title": "Chart",
|
|
@@ -4021,7 +4296,8 @@
|
|
|
4021
4296
|
"Range selection applies the first date immediately as a one-day range; while an end is pending, that selected start retains its bold treatment and hovering or focusing another day paints the rest of the provisional inclusive span faint without emitting a value. A second activation completes an ordered inclusive range and gives both edges the bold treatment. A new activation after completion starts a replacement range.",
|
|
4022
4297
|
"Selection applies immediately and does not close the popup.",
|
|
4023
4298
|
"Changing category replaces the option-pane subtree so checkbox and other option visuals mount in their new state instead of transitioning from the previous category's row state.",
|
|
4024
|
-
"The trigger reports how many filter categories have selections. footerLayout=summary adds a full-width selected-count footer only while values are selected; footerLayout=categories-clear always reserves the category-pane footer height while keeping its inactive divider hidden, then reveals the divider and only its left-aligned Clear action while values are selected."
|
|
4299
|
+
"The trigger reports how many filter categories have selections. footerLayout=summary adds a full-width selected-count footer only while values are selected; footerLayout=categories-clear always reserves the category-pane footer height while keeping its inactive divider hidden, then reveals the divider and only its left-aligned Clear action while values are selected.",
|
|
4300
|
+
"The built-in trigger derives the shared surface-open wash from the rendered popup lifecycle, including closing. For an external trigger, the application owns that relationship and retains the wash until dsAfterClose; selected filter values remain independent."
|
|
4025
4301
|
],
|
|
4026
4302
|
"responsiveBehavior": [
|
|
4027
4303
|
"The popup defaults to the large menu-width token and clamps to the nearest data-ds-overlay-boundary rectangle or the viewport fallback.",
|
|
@@ -4044,6 +4320,10 @@
|
|
|
4044
4320
|
{
|
|
4045
4321
|
"label": "Storybook example",
|
|
4046
4322
|
"path": "src/wc/components/FilterMenu/FilterMenu.stories.ts"
|
|
4323
|
+
},
|
|
4324
|
+
{
|
|
4325
|
+
"label": "Surface ownership and trigger state",
|
|
4326
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
4047
4327
|
}
|
|
4048
4328
|
]
|
|
4049
4329
|
},
|
|
@@ -4850,6 +5130,7 @@
|
|
|
4850
5130
|
"pattern:menu-trigger"
|
|
4851
5131
|
],
|
|
4852
5132
|
"accessibility": [
|
|
5133
|
+
"An empty choice collection can show informational copy in a focusable non-modal dialog instead of rendering a fake disabled action. Escape and Tab retain the normal popup dismissal and anchor-focus behavior.",
|
|
4853
5134
|
"Anchor the menu to the control that opens it and return focus to that control when the menu closes.",
|
|
4854
5135
|
"Open with visible initial focus only when the trigger was activated from the keyboard.",
|
|
4855
5136
|
"Keep disabled items discoverable only when their unavailable state is meaningful.",
|
|
@@ -4931,6 +5212,10 @@
|
|
|
4931
5212
|
"type": "HTMLElement | undefined",
|
|
4932
5213
|
"required": false
|
|
4933
5214
|
},
|
|
5215
|
+
"emptyMessage": {
|
|
5216
|
+
"type": "string",
|
|
5217
|
+
"required": false
|
|
5218
|
+
},
|
|
4934
5219
|
"initialFocusVisible": {
|
|
4935
5220
|
"type": "boolean",
|
|
4936
5221
|
"required": false
|
|
@@ -5546,6 +5831,7 @@
|
|
|
5546
5831
|
],
|
|
5547
5832
|
"states": [
|
|
5548
5833
|
"The fixed groups are Menu plus current area, followed by Search, Activity, Messages, and Agents.",
|
|
5834
|
+
"The shell may retain Help in the context position while another global tool is selected; context identity and active selection are independent.",
|
|
5549
5835
|
"Consumers that intentionally group multiple review tools can replace the Activity destination with Inbox.",
|
|
5550
5836
|
"Selection promotes foreground to primary without painting a selected fill; unselected destinations use tertiary foreground.",
|
|
5551
5837
|
"Opening Mobile Sheet Nav replaces the Menu glyph with Cross while preserving its accessible name.",
|
|
@@ -5617,6 +5903,10 @@
|
|
|
5617
5903
|
"type": "string",
|
|
5618
5904
|
"required": false
|
|
5619
5905
|
},
|
|
5906
|
+
"primaryDestination": {
|
|
5907
|
+
"type": "'area' | 'help'",
|
|
5908
|
+
"required": false
|
|
5909
|
+
},
|
|
5620
5910
|
"searchDot": {
|
|
5621
5911
|
"type": "boolean",
|
|
5622
5912
|
"required": false
|
|
@@ -5698,8 +5988,10 @@
|
|
|
5698
5988
|
"states": [
|
|
5699
5989
|
"Without multiple sections the center renders heading.",
|
|
5700
5990
|
"With multiple sections the center renders the controlled MobileSectionSwitcher by default or an explicitly requested segmented TabGroup.",
|
|
5991
|
+
"Primary section switching without subordinate navigation uses the viewport-edge sheet. Headers exposing both peer sections and subordinate views retain their two-level navigation.",
|
|
5701
5992
|
"The segmented presentation uses the shared fill-width TabGroup contract and divides its centered two-thirds top-bar lane equally between options.",
|
|
5702
|
-
"Optional subsections
|
|
5993
|
+
"Optional subsections use a second row by default. When navigation already exposes peer sections, local views can sit beside a stable page title in one row; they never replace that title or its semantic heading.",
|
|
5994
|
+
"The combined local-view presentation joins the page identity and selected subsection in one outlined sheet trigger. The semantic heading remains the page identity, while Back and page actions stay outside the trigger.",
|
|
5703
5995
|
"Sections represent peer destinations at the current navigation level; subsections represent local views beneath the selected page or detail identity.",
|
|
5704
5996
|
"Brand tone changes surface and foreground without changing geometry or interaction ownership."
|
|
5705
5997
|
],
|
|
@@ -5747,6 +6039,10 @@
|
|
|
5747
6039
|
"type": "string",
|
|
5748
6040
|
"required": false
|
|
5749
6041
|
},
|
|
6042
|
+
"subsectionsPlacement": {
|
|
6043
|
+
"type": "'below' | 'inline' | 'combined'",
|
|
6044
|
+
"required": false
|
|
6045
|
+
},
|
|
5750
6046
|
"subvalue": {
|
|
5751
6047
|
"type": "string",
|
|
5752
6048
|
"required": false
|
|
@@ -5791,7 +6087,7 @@
|
|
|
5791
6087
|
{
|
|
5792
6088
|
"name": "mobile-section-switcher",
|
|
5793
6089
|
"title": "MobileSectionSwitcher",
|
|
5794
|
-
"description": "Controlled mobile section chooser
|
|
6090
|
+
"description": "Controlled mobile section chooser with a viewport-edge sheet for primary pages and an anchored menu for local views.",
|
|
5795
6091
|
"type": "registry:ui",
|
|
5796
6092
|
"meta": {
|
|
5797
6093
|
"library": "@ds-mo/ui",
|
|
@@ -5802,7 +6098,7 @@
|
|
|
5802
6098
|
"intent": {
|
|
5803
6099
|
"audience": "specialized",
|
|
5804
6100
|
"status": "experimental",
|
|
5805
|
-
"summary": "Controlled mobile section chooser
|
|
6101
|
+
"summary": "Controlled mobile section chooser with a viewport-edge sheet for primary pages and an anchored menu for local views.",
|
|
5806
6102
|
"useWhen": [
|
|
5807
6103
|
"A mobile page or tool header must combine current-page identity with ordered peer-section navigation."
|
|
5808
6104
|
],
|
|
@@ -5819,13 +6115,17 @@
|
|
|
5819
6115
|
"accessibility": [
|
|
5820
6116
|
"The trigger exposes the current section, popup relationship, and expanded state.",
|
|
5821
6117
|
"Decorative previous and next position hints are hidden from assistive technology.",
|
|
5822
|
-
"The
|
|
6118
|
+
"The sheet is a native modal top-layer dialog: background content is inert, Escape and backdrop dismiss it, and focus returns to the trigger after exit motion. Arrow keys, Home, End, and initial-letter navigation move among enabled destinations.",
|
|
6119
|
+
"The sheet initially focuses the current enabled destination, uses emphasis for selection, and never adds decorative icons to its rows.",
|
|
5823
6120
|
"Peer destinations use menuitem semantics with aria-current on the active page; they do not present a radio-control affordance."
|
|
5824
6121
|
],
|
|
5825
6122
|
"states": [
|
|
5826
6123
|
"Selection is controlled and dsChange reports intent without mutating value.",
|
|
5827
6124
|
"Dividers group menu items but never participate in previous or next resolution.",
|
|
5828
|
-
"The
|
|
6125
|
+
"The anchored local-view menu retains its neighboring-direction hints; the primary-page sheet uses an unfilled perimeter trigger without hints.",
|
|
6126
|
+
"A sheet trigger can combine stable page identity and the current local view, separated by a decorative middle dot. The whole control opens only the supplied local destinations; long page names truncate before crowding out the active view.",
|
|
6127
|
+
"Sheet selection emits navigation intent immediately while exit motion runs independently, so the controlled title can update without waiting for dismissal. Removing the owner or hiding its header closes the top layer without leaving the application blocked.",
|
|
6128
|
+
"The trigger automatically retains the shared surface-open pressed wash through menu or sheet exit. Selecting a destination remains separate from owning the open surface."
|
|
5829
6129
|
],
|
|
5830
6130
|
"responsiveBehavior": [
|
|
5831
6131
|
"Use only in the dedicated mobile header presentation."
|
|
@@ -5834,6 +6134,10 @@
|
|
|
5834
6134
|
{
|
|
5835
6135
|
"label": "Storybook",
|
|
5836
6136
|
"path": "src/wc/components/MobileSectionSwitcher/MobileSectionSwitcher.stories.ts"
|
|
6137
|
+
},
|
|
6138
|
+
{
|
|
6139
|
+
"label": "Surface ownership and trigger state",
|
|
6140
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
5837
6141
|
}
|
|
5838
6142
|
]
|
|
5839
6143
|
},
|
|
@@ -5842,6 +6146,14 @@
|
|
|
5842
6146
|
"type": "string",
|
|
5843
6147
|
"required": false
|
|
5844
6148
|
},
|
|
6149
|
+
"pageLabel": {
|
|
6150
|
+
"type": "string",
|
|
6151
|
+
"required": false
|
|
6152
|
+
},
|
|
6153
|
+
"presentation": {
|
|
6154
|
+
"type": "'menu' | 'sheet'",
|
|
6155
|
+
"required": false
|
|
6156
|
+
},
|
|
5845
6157
|
"sections": {
|
|
5846
6158
|
"type": "TabItem[]",
|
|
5847
6159
|
"required": false
|
|
@@ -5909,7 +6221,10 @@
|
|
|
5909
6221
|
"Escape requests dismissal and opening moves focus to the selected or first available area."
|
|
5910
6222
|
],
|
|
5911
6223
|
"states": [
|
|
5912
|
-
"Dashboard and Settings change only the
|
|
6224
|
+
"Dashboard and Settings change only the destination collection being browsed.",
|
|
6225
|
+
"In nested mode, parents with child routes disclose inline without navigating. Only selecting a child emits route intent; parents without children retain direct navigation.",
|
|
6226
|
+
"Nested branches use the same positional divider and staggered child motion as expanded desktop navigation, without adding disclosure chevrons. Dividers separate an expanded branch from its siblings, not from the outside edge of its group.",
|
|
6227
|
+
"Opening the sheet reveals the current route's branch. Collapsed child groups are inert and hidden from assistive technology while the shared navigation motion runs; child targets keep the mobile row density.",
|
|
5913
6228
|
"Area, Help, and Account events express intent while the application owns navigation and product behavior.",
|
|
5914
6229
|
"Set routeSelectionActive to false while a global tool owns the mobile stage so the underlying router URL remains available without marking its area current.",
|
|
5915
6230
|
"Set showAccount to false when account and user preferences already live in the supplied Settings navigation."
|
|
@@ -5960,6 +6275,10 @@
|
|
|
5960
6275
|
"type": "boolean",
|
|
5961
6276
|
"required": false
|
|
5962
6277
|
},
|
|
6278
|
+
"presentation": {
|
|
6279
|
+
"type": "PanelNavPresentation",
|
|
6280
|
+
"required": false
|
|
6281
|
+
},
|
|
5963
6282
|
"routeSelectionActive": {
|
|
5964
6283
|
"type": "boolean",
|
|
5965
6284
|
"required": false
|
|
@@ -5989,6 +6308,10 @@
|
|
|
5989
6308
|
{
|
|
5990
6309
|
"name": "dsClose",
|
|
5991
6310
|
"detail": "void"
|
|
6311
|
+
},
|
|
6312
|
+
{
|
|
6313
|
+
"name": "dsNavChildSelect",
|
|
6314
|
+
"detail": "PanelNavChildSelectDetail"
|
|
5992
6315
|
}
|
|
5993
6316
|
],
|
|
5994
6317
|
"slots": [],
|
|
@@ -6408,9 +6731,10 @@
|
|
|
6408
6731
|
"Dashboard presents day-to-day operational destinations; Settings presents administrative and configuration destinations.",
|
|
6409
6732
|
"The standard footer switches the entire destination collection and navStyle between Dashboard and Settings and exposes the user/account entry.",
|
|
6410
6733
|
"The host owns the external user menu opened from dsNavUserAction.",
|
|
6411
|
-
"While the external user menu is open or closing,
|
|
6734
|
+
"While the external user menu is open or closing, accountMenuSurfaceOpen keeps its trigger visibly pressed without applying selected-destination foreground treatment in either expanded or collapsed presentation.",
|
|
6412
6735
|
"Item and header controls inherit the shared md control radius while local shell geometry continues to own collapsed layout and footer animation positioning.",
|
|
6413
|
-
"On desktop, allow user-controlled expand and collapse and persist the preference with storageKey when cross-session persistence is appropriate."
|
|
6736
|
+
"On desktop, allow user-controlled expand and collapse and persist the preference with storageKey when cross-session persistence is appropriate.",
|
|
6737
|
+
"Flyout triggers automatically hold the shared surface-open wash through exit; expanded inline branches do not. For the external account surface, the application supplies accountMenuSurfaceOpen for its rendered lifetime and keeps accountMenuExpanded tied to disclosure semantics."
|
|
6414
6738
|
],
|
|
6415
6739
|
"responsiveBehavior": [
|
|
6416
6740
|
"At 1200px and wider, default to expanded, allow the user to expand or collapse, and restore the locally persisted desktop preference when available.",
|
|
@@ -6448,6 +6772,10 @@
|
|
|
6448
6772
|
{
|
|
6449
6773
|
"label": "Application shell composition",
|
|
6450
6774
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
6775
|
+
},
|
|
6776
|
+
{
|
|
6777
|
+
"label": "Surface ownership and trigger state",
|
|
6778
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
6451
6779
|
}
|
|
6452
6780
|
]
|
|
6453
6781
|
},
|
|
@@ -6460,6 +6788,10 @@
|
|
|
6460
6788
|
"type": "boolean",
|
|
6461
6789
|
"required": false
|
|
6462
6790
|
},
|
|
6791
|
+
"accountMenuSurfaceOpen": {
|
|
6792
|
+
"type": "boolean | undefined",
|
|
6793
|
+
"required": false
|
|
6794
|
+
},
|
|
6463
6795
|
"activeChildId": {
|
|
6464
6796
|
"type": "string",
|
|
6465
6797
|
"required": false
|
|
@@ -6758,7 +7090,8 @@
|
|
|
6758
7090
|
"Header chrome text is not selectable; actions remain keyboard focusable and interactive.",
|
|
6759
7091
|
"Adjacent trailing actions keep the shared 4px control gap in drawer and fullscreen presentations.",
|
|
6760
7092
|
"When fullscreen and overflow actions appear together, author fullscreen before overflow so Ellipses remains the rightmost action.",
|
|
6761
|
-
"PanelTools supplies application-owned actions and relays their ids through its shared dsHeaderAction event."
|
|
7093
|
+
"PanelTools supplies application-owned actions and relays their ids through its shared dsHeaderAction event.",
|
|
7094
|
+
"Application-owned action surfaces carry surfaceOpen independently from expanded disclosure and pressed toggle state. Retain surfaceOpen until the associated surface completes closing; the header forwards this relationship without owning the menu or panel."
|
|
6762
7095
|
],
|
|
6763
7096
|
"responsiveBehavior": [
|
|
6764
7097
|
"The title truncates between optional leading navigation and trailing action zones."
|
|
@@ -6767,6 +7100,10 @@
|
|
|
6767
7100
|
{
|
|
6768
7101
|
"label": "Standalone examples",
|
|
6769
7102
|
"path": "src/wc/components/PanelToolHeader/PanelToolHeader.stories.ts"
|
|
7103
|
+
},
|
|
7104
|
+
{
|
|
7105
|
+
"label": "Surface ownership and trigger state",
|
|
7106
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
6770
7107
|
}
|
|
6771
7108
|
]
|
|
6772
7109
|
},
|
|
@@ -6799,6 +7136,10 @@
|
|
|
6799
7136
|
"type": "boolean",
|
|
6800
7137
|
"required": false
|
|
6801
7138
|
},
|
|
7139
|
+
"menuSurfaceOpen": {
|
|
7140
|
+
"type": "boolean | undefined",
|
|
7141
|
+
"required": false
|
|
7142
|
+
},
|
|
6802
7143
|
"menuTriggerId": {
|
|
6803
7144
|
"type": "string",
|
|
6804
7145
|
"required": false
|
|
@@ -6883,7 +7224,8 @@
|
|
|
6883
7224
|
"The search icon stays foreground-secondary at rest, hover, focus, active, and while the query is filled.",
|
|
6884
7225
|
"The row and control surface remain transparent so the ShellApp chrome wash is visible behind them.",
|
|
6885
7226
|
"The row divider remains the same tertiary 1px boundary while the input is focused because it belongs to the 48px container rather than the input control.",
|
|
6886
|
-
"With filtering enabled, the md search control, decorative vertical divider, and borderless md Filter action are separated by 8px; filterActive promotes only the trigger foreground without adding a selected fill."
|
|
7227
|
+
"With filtering enabled, the md search control, decorative vertical divider, and borderless md Filter action are separated by 8px; filterActive promotes only the trigger foreground without adding a selected fill.",
|
|
7228
|
+
"Applied filters and an open filter surface are independent states. Use filterSurfaceOpen through the external surface exit while filterExpanded describes disclosure and filterActive describes applied values."
|
|
6887
7229
|
],
|
|
6888
7230
|
"responsiveBehavior": [
|
|
6889
7231
|
"The row fills the available drawer or fullscreen width, allows its search region to shrink inside a 300px drawer without pushing the filter trigger under the tool rail, and does not reduce its control below md density."
|
|
@@ -6906,6 +7248,10 @@
|
|
|
6906
7248
|
{
|
|
6907
7249
|
"label": "Storybook examples",
|
|
6908
7250
|
"path": "src/wc/components/PanelToolSearch/PanelToolSearch.stories.ts"
|
|
7251
|
+
},
|
|
7252
|
+
{
|
|
7253
|
+
"label": "Surface ownership and trigger state",
|
|
7254
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
6909
7255
|
}
|
|
6910
7256
|
]
|
|
6911
7257
|
},
|
|
@@ -6934,6 +7280,10 @@
|
|
|
6934
7280
|
"type": "boolean",
|
|
6935
7281
|
"required": false
|
|
6936
7282
|
},
|
|
7283
|
+
"filterSurfaceOpen": {
|
|
7284
|
+
"type": "boolean | undefined",
|
|
7285
|
+
"required": false
|
|
7286
|
+
},
|
|
6937
7287
|
"filterTriggerId": {
|
|
6938
7288
|
"type": "string",
|
|
6939
7289
|
"required": false
|
|
@@ -7081,7 +7431,8 @@
|
|
|
7081
7431
|
"The application owns slotted tool products and data while PanelTools owns rail ordering, drawer selection, open state, motion, and shell events.",
|
|
7082
7432
|
"Opening and closing clip an already-rendered fixed-width surface. Header and tool content remain fully opaque and retained during width motion; transition completion is accepted only at the measured terminal clip width, after which the closed surface becomes inert and paint-skipped.",
|
|
7083
7433
|
"Entering and exiting fullscreen snaps without borrowing the drawer open or close animation.",
|
|
7084
|
-
"When fullscreenHeaderMode is split, PanelTools suppresses only its fullscreen shared header. The application renders exactly two canonical ds-panel-tool-header instances: a tool-title/list-actions header over the 300px history pane and a chat-title/Exit-fullscreen/chat-actions header over the detail pane. The detail header omits Back because the list remains visible."
|
|
7434
|
+
"When fullscreenHeaderMode is split, PanelTools suppresses only its fullscreen shared header. The application renders exactly two canonical ds-panel-tool-header instances: a tool-title/list-actions header over the 300px history pane and a chat-title/Exit-fullscreen/chat-actions header over the detail pane. The detail header omits Back because the list remains visible.",
|
|
7435
|
+
"Header action surfaceOpen identifies the owner of an external menu or panel without turning that action into a selected tool or toggle. The application owns this surface lifecycle."
|
|
7085
7436
|
],
|
|
7086
7437
|
"responsiveBehavior": [
|
|
7087
7438
|
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
@@ -7120,6 +7471,10 @@
|
|
|
7120
7471
|
{
|
|
7121
7472
|
"label": "Application shell composition",
|
|
7122
7473
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
7474
|
+
},
|
|
7475
|
+
{
|
|
7476
|
+
"label": "Surface ownership and trigger state",
|
|
7477
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
7123
7478
|
}
|
|
7124
7479
|
]
|
|
7125
7480
|
},
|
|
@@ -7727,7 +8082,7 @@
|
|
|
7727
8082
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
7728
8083
|
"When any option supplies subtext, every row uses the same subtext structure and missing values render an em dash. Subtext should disambiguate or add decision-helpful information.",
|
|
7729
8084
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
7730
|
-
"Use an option action only for a contextual menu about that user-managed option. The fixed ellipsis action appears on hover, keyboard activity, focus, and touch;
|
|
8085
|
+
"Use an option action only for a contextual menu about that user-managed option. The fixed ellipsis action appears on hover, keyboard activity, focus, and touch; surfaceOpen keeps it visible while its controlled menu is rendered. Activating it emits dsOptionAction without selecting the option or closing the Select popup.",
|
|
7731
8086
|
"Use option subtextActions for a compact set of immediate actions that belong to one option. They render beneath only that option's label using the standard supporting-text inset and rhythm, use action or negative semantic color, and emit dsOptionSubtextAction without selecting the option or closing the popup. Unlike descriptive subtext, they do not reserve a blank supporting line on neighboring options.",
|
|
7732
8087
|
"The optional prefix icon and trailing indicator always use the parent surface's secondary foreground color, including when a selected value promotes the label to primary. When collapseLabel compact icon-only chrome is active, a selected value promotes the prefix icon to primary instead. The default down indicator communicates disclosure; up-down is reserved for compact value steppers such as pagination page size.",
|
|
7733
8088
|
"While the popup is open, the trigger holds the pressed interaction wash without changing its resting foreground or selected-value treatment.",
|
|
@@ -7741,7 +8096,8 @@
|
|
|
7741
8096
|
"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. Set hasBorder to false for chrome where the trigger must remain borderless at rest, when selected or focused, and when invalid; error semantics and supporting copy remain available.",
|
|
7742
8097
|
"An initially empty option set is not an expected Select use case. The no-results state describes a search with no matches, not a source with no choices.",
|
|
7743
8098
|
"Use options for a flat list or sections for grouped choices; when sections are present they take precedence.",
|
|
7744
|
-
"The background prop describes the actual parent surface and uses the same surface set as ButtonUnfilled."
|
|
8099
|
+
"The background prop describes the actual parent surface and uses the same surface set as ButtonUnfilled.",
|
|
8100
|
+
"Select owns its associated popup and automatically retains the shared surface-open pressed wash. Consumers do not synchronize a second flag for the built-in picker. Contextual option actions are externally owned: their surfaceOpen state keeps the action visible through the associated menu exit, independently of the selected option."
|
|
7745
8101
|
],
|
|
7746
8102
|
"responsiveBehavior": [
|
|
7747
8103
|
"Use width fill for form fields and width hug for compact filter bars. Override those defaults only when the owning layout has a clear constraint.",
|
|
@@ -7772,6 +8128,10 @@
|
|
|
7772
8128
|
{
|
|
7773
8129
|
"label": "Selection patterns",
|
|
7774
8130
|
"path": "src/docs/SelectionPatterns.mdx"
|
|
8131
|
+
},
|
|
8132
|
+
{
|
|
8133
|
+
"label": "Surface ownership and trigger state",
|
|
8134
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
7775
8135
|
}
|
|
7776
8136
|
]
|
|
7777
8137
|
},
|
|
@@ -8057,11 +8417,13 @@
|
|
|
8057
8417
|
"The optional paperTexture property adds a decorative Paper Design texture layer above the gradient or solid chrome frame; its color values are literal shader inputs rather than design tokens.",
|
|
8058
8418
|
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
8059
8419
|
"Replace navigation and pageChrome together from one completed route state.",
|
|
8060
|
-
"When pageChrome.showBack marks a detail depth, mobile chrome
|
|
8420
|
+
"When pageChrome.showBack marks a detail depth, mobile chrome combines the page heading and active local subsection in one sheet trigger; peer route tabs remain in desktop BarNav rather than replacing the detail identity.",
|
|
8061
8421
|
"Route-owned ordered page actions drive both BarTitle and MobileHeader. ShellApp forwards one flat page-action id and owns the derived mobile overflow menu so routes do not duplicate menu state or choices.",
|
|
8422
|
+
"Managed mobile Back and page-action controls use the same large touch density as the mobile navigation header without increasing the shared header height.",
|
|
8062
8423
|
"Managed ShellApp keeps the selected desktop section-navigation presentation and ShellPage present and owns page header stickiness and the content scroller.",
|
|
8063
8424
|
"Route-owned pageChrome independently selects ShellPage contentInset, page-header seams, scroll compaction, expanded and compact header-divider visibility, and contentSurface. ShellApp forwards them while resolving whether desktop title geometry is page-local or shell-bar-owned.",
|
|
8064
|
-
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
8425
|
+
"The application filters unauthorized destinations, sections, and tools before passing them into shell components.",
|
|
8426
|
+
"Application-owned header actions and the account trigger retain surface ownership across shell presentations. Supply surfaceOpen on header actions and accountMenuSurfaceOpen on navigation for rendered surface lifetimes; keep disclosure and selected-route state separate."
|
|
8065
8427
|
],
|
|
8066
8428
|
"responsiveBehavior": [
|
|
8067
8429
|
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
@@ -8070,9 +8432,9 @@
|
|
|
8070
8432
|
"On desktop and tablet, panel section navigation replaces BarNav with compact BarTitle; collapsed PanelNav exposes child sections through its anchored flyout.",
|
|
8071
8433
|
"When panel section navigation moves BarTitle into the shell bar, routed content starts at the standard 32px desktop or 16px tablet gutter and ShellPage reports no page-local sticky-header height.",
|
|
8072
8434
|
"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.",
|
|
8073
|
-
"
|
|
8435
|
+
"The section-navigation preference also selects mobile navigation: bar preserves flat area selection and the header section picker; panel expands child routes inline in MobileSheetNav and combines the page title with any local subsection in one sheet trigger.",
|
|
8074
8436
|
"Opening MobileSheetNav temporarily overlays the active routed page or global tool; closing it without selecting an area restores that same destination and its nested state. The sheet exposes the router-derived current area only while the routed area owns the mobile stage, so a global tool never leaves an underlying route highlighted.",
|
|
8075
|
-
"Selecting Help from the managed mobile sheet activates the configured Help tool and
|
|
8437
|
+
"Selecting Help from the managed mobile sheet activates the configured Help tool and retains Help as the primary mobile destination across other tool selections until a routed area is selected or navigation changes. This mobile context does not alter desktop or tablet routing.",
|
|
8076
8438
|
"Set navigation.showMobileAccount to false when the Settings destination collection already includes account and user preferences.",
|
|
8077
8439
|
"When a suspended mobile document returns to the foreground, ShellApp refreshes the complete stage paint layer without remounting routed content or tool owners.",
|
|
8078
8440
|
"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.",
|
|
@@ -8120,6 +8482,10 @@
|
|
|
8120
8482
|
{
|
|
8121
8483
|
"label": "Application shell contract",
|
|
8122
8484
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
8485
|
+
},
|
|
8486
|
+
{
|
|
8487
|
+
"label": "Surface ownership and trigger state",
|
|
8488
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
8123
8489
|
}
|
|
8124
8490
|
]
|
|
8125
8491
|
},
|
|
@@ -8484,7 +8850,8 @@
|
|
|
8484
8850
|
"Items with mobileDestination inbox map to one mobile Inbox destination while retaining the actual active tool id; the canonical recipe exposes Activity directly and keeps Inbox grouping opt-in.",
|
|
8485
8851
|
"Stable tool ids own named slots; label, order, rail placement, shortcut, and mobile destination are explicit item data.",
|
|
8486
8852
|
"Application-owned rail accessories are forwarded unchanged to PanelTools on desktop and tablet and remain independent from activeTool and open.",
|
|
8487
|
-
"Switching responsive mode must not recreate application-owned slotted product elements."
|
|
8853
|
+
"Switching responsive mode must not recreate application-owned slotted product elements.",
|
|
8854
|
+
"Header actions forward application-owned surfaceOpen through each presentation, independently of expanded semantics and pressed toggles."
|
|
8488
8855
|
],
|
|
8489
8856
|
"responsiveBehavior": [
|
|
8490
8857
|
"Desktop and tablet compose PanelTools-compatible rail and drawer chrome.",
|
|
@@ -8510,6 +8877,10 @@
|
|
|
8510
8877
|
{
|
|
8511
8878
|
"label": "PanelTools contract",
|
|
8512
8879
|
"path": "src/wc/components/PanelTools/PanelTools.agent.json"
|
|
8880
|
+
},
|
|
8881
|
+
{
|
|
8882
|
+
"label": "Surface ownership and trigger state",
|
|
8883
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
8513
8884
|
}
|
|
8514
8885
|
]
|
|
8515
8886
|
},
|
|
@@ -9483,7 +9854,8 @@
|
|
|
9483
9854
|
"Row selection owns the single sticky start lane. One explicitly sized application column can own the sticky end lane, or the start lane when selection is absent. Each sticky boundary owns one fixed divider and a row-clipped directional shadow that paints into the adjacent scrolling columns only while more inline content remains beyond that edge.",
|
|
9484
9855
|
"Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, wrapping multiple-Tag content, icon-only, icon-and-text, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Text objects may declare an optional href (and target) on the primary track only; the table renders a native anchor with the shared brand text-action treatment when the URL is safe, and leaves scalars unlinked. Standard secondary copy defaults to the secondary foreground and may declare a semantic Text color when the application data carries intent; an optional tertiary track uses the same subdued body-small recipe as secondary. Secondary and tertiary may also be a short list of colorable runs, rendered on one line with the table's middle-dot separator. A run may supply help to add the shared dotted underline and a bottom-start Tooltip when compact visible copy summarizes supplementary details; explicit line breaks create a compact unbulleted list without obscuring the current cell's earlier tracks. Dual-primary copy keeps both tracks primary unless explicitly colored and does not gain a tertiary track. Body data cells share 8px outer padding; header and group rows keep their own geometry. Text tracks, including Empty, keep 4px inline padding so copy lines up with column-header labels; Tag and icon-only tracks stay on the 8px cell chrome alone. Icon-and-text cells (`kind: 'icon-text'`) place one md prefix icon beside the same copy stack as a text cell. The icon slot takes 2px padding on every side, then a 2px flex gap before the copy; text-track padding stays on the copy. Omit iconLabel when the glyph is decorative. 20px content (body-medium text, md icon, and the row checkbox) sits in a 24px track so it stays optically aligned with 24px Tag and Action content. Single-track text, selection, tag-only, icon-only, icon-and-text, Action, Empty, Blank, and 1-track Image cells resolve a 40px base contract while two-track cells grow to 64px and three-track cells grow to 88px. Every later track adds 24px, so four tracks resolve to 112px, five to 136px, and the sequence may continue. Tracks stack with no gap. Wrapping primary on a 1-track cell uses that same rhythm: two wrapped lines share the 64px row and three wrapped lines share the 88px row. Wrapping secondary keeps primary on the first track and consumes later tracks: two secondary lines share the 88px row and three secondary lines share a 112px fourth track. Keep the same track count in every row of a table or group when those rows should share one height. Tag cells use the inset Tag recipe: md double-inset is a 24px control for tag-only and tag-with-text, while text-with-tag uses sm single-inset at 20px so the second-track pill sits in the same 24px lane. Multiple-Tag cells use `kind: 'tags'`, a positive `tracks` count, and small single-inset Tags that wrap naturally at the column edge. Each wrap line is a 24px track with no stack gap, matching text. The tallest cell establishes the native row height, so all sibling cells match even at four, five, or more tracks; virtual tables use the declared count as the initial estimate and measure responsive wrapping after paint. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled, default to unbordered, and emit row, column, and action identities through dsCellAction. When an action cell declares items, that Ellipses trigger opens the shared ds-menu for commands, dividers, inactive rows, and destructive rows instead of emitting on click; choosing a command emits dsCellAction with that item's actionId. Omit items to keep a single-shot control. Image cells declare tracks 1, 2, or 3 so the 16:9 bordered preview fills that body-row content box (cell height minus 8px padding) and the column hugs the resulting width; omit tracks for the 1-track recipe, and keep image tracks aligned with the other cells in the table or group. Image cells fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type, variant, and track-count hooks keep every cell family independently styleable.",
|
|
9485
9856
|
"Score-and-text cells (`kind: score-text`) place the small 24px safety score at the top-right of the cell while the same one-, two-, or three-track copy stack as a standard text cell fills from the start edge. The score is top-aligned with the first text track, adds no inner padding, and defaults its accessible name prefix to Safety score. Score-and-text loading geometry uses the matching small score skeleton and declared copy tracks.",
|
|
9486
|
-
"The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling."
|
|
9857
|
+
"The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling.",
|
|
9858
|
+
"Use surfaceOpenRowId to identify the interactive row associated with a visible detail panel or other contextual surface. The application owns opening, same-row toggling, switching records, and closing; retain the identity through exit motion, then clear it. Move it when panel navigation changes the displayed record. This pressed wash spans sticky and scrolling cells, follows stable row identity through virtualization, and never checks a checkbox or changes selectedRowIds. Group expansion remains an inline disclosure."
|
|
9487
9859
|
],
|
|
9488
9860
|
"responsiveBehavior": [
|
|
9489
9861
|
"The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
|
|
@@ -9526,6 +9898,10 @@
|
|
|
9526
9898
|
{
|
|
9527
9899
|
"label": "Menu trigger composition",
|
|
9528
9900
|
"path": "agent/patterns/menu-trigger/pattern.agent.json"
|
|
9901
|
+
},
|
|
9902
|
+
{
|
|
9903
|
+
"label": "Surface ownership and trigger state",
|
|
9904
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
9529
9905
|
}
|
|
9530
9906
|
]
|
|
9531
9907
|
},
|
|
@@ -9754,6 +10130,10 @@
|
|
|
9754
10130
|
"type": "boolean",
|
|
9755
10131
|
"required": false
|
|
9756
10132
|
},
|
|
10133
|
+
"surfaceOpenRowId": {
|
|
10134
|
+
"type": "string | undefined",
|
|
10135
|
+
"required": false
|
|
10136
|
+
},
|
|
9757
10137
|
"totalCount": {
|
|
9758
10138
|
"type": "number | undefined",
|
|
9759
10139
|
"required": false
|
|
@@ -10066,7 +10446,8 @@
|
|
|
10066
10446
|
"states": [
|
|
10067
10447
|
"options and grouping are controlled. A data option may supply product-owned orderOptions; otherwise Order defaults to Ascending and Descending. dsGroupChange reports a complete TableGroupingState and dsClear requests null grouping without mutating either input.",
|
|
10068
10448
|
"Selecting a new data point starts at its first custom order option, or ascending when it has no custom order options. Re-selecting the active data point preserves its complete order state.",
|
|
10069
|
-
"Selecting a data point or direction applies immediately and leaves the dialog open so the other pane can be changed."
|
|
10449
|
+
"Selecting a data point or direction applies immediately and leaves the dialog open so the other pane can be changed.",
|
|
10450
|
+
"The grouping picker automatically holds the shared surface-open wash through exit. Opening this picker is separate from expanding an inline table group."
|
|
10070
10451
|
],
|
|
10071
10452
|
"responsiveBehavior": [
|
|
10072
10453
|
"Use in the trailing region of ds-table-toolbar.",
|
|
@@ -10092,6 +10473,10 @@
|
|
|
10092
10473
|
{
|
|
10093
10474
|
"label": "Toolbar composition owner",
|
|
10094
10475
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10476
|
+
},
|
|
10477
|
+
{
|
|
10478
|
+
"label": "Surface ownership and trigger state",
|
|
10479
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10095
10480
|
}
|
|
10096
10481
|
]
|
|
10097
10482
|
},
|
|
@@ -10195,7 +10580,8 @@
|
|
|
10195
10580
|
"states": [
|
|
10196
10581
|
"views, value, and dirty are controlled. Dirty state is presented only for a selected custom view; the default template never shows the trigger dot or save/discard actions even if dirty is supplied. Selection, create, save, discard, rename, and remove events communicate intent and never mutate application records.",
|
|
10197
10582
|
"The component owns only transient interaction state: the contextual menu, naming dialog, draft name, duplicate-name validation, and focus restoration.",
|
|
10198
|
-
"The default view is a non-editable template. Application-owned custom views appear in a separate section with Rename and Remove actions. New view opens the naming dialog. When an editable selected view is dirty, that view row shows Save and negative Discard supporting actions while the footer remains dedicated to New view. The application decides which table state to capture, restore, and persist."
|
|
10583
|
+
"The default view is a non-editable template. Application-owned custom views appear in a separate section with Rename and Remove actions. New view opens the naming dialog. When an editable selected view is dirty, that view row shows Save and negative Discard supporting actions while the footer remains dedicated to New view. The application decides which table state to capture, restore, and persist.",
|
|
10584
|
+
"The built-in picker and contextual option menu each retain their own surface-open treatment. Opening a view menu does not select that view."
|
|
10199
10585
|
],
|
|
10200
10586
|
"responsiveBehavior": [
|
|
10201
10587
|
"The control remains a single toolbar item and relies on Select, Menu, and Modal collision and viewport behavior. Its trigger hugs short view names and is capped at the compact menu-width token so long names truncate while the dirty dot stays visible. Its choice popup keeps that same token as the minimum width.",
|
|
@@ -10220,6 +10606,10 @@
|
|
|
10220
10606
|
{
|
|
10221
10607
|
"label": "Toolbar composition owner",
|
|
10222
10608
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10609
|
+
},
|
|
10610
|
+
{
|
|
10611
|
+
"label": "Surface ownership and trigger state",
|
|
10612
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10223
10613
|
}
|
|
10224
10614
|
]
|
|
10225
10615
|
},
|
|
@@ -10350,7 +10740,8 @@
|
|
|
10350
10740
|
"Selected scopes render as neutral md Chips using the double-inset recipe so they remain 24px high inside the 32px md search control and each can be removed directly.",
|
|
10351
10741
|
"Backspace edits a non-empty field-picker query, then closes the open slash listbox when that query is empty. When the table query is empty and the listbox is already closed, the next Backspace removes the last selected field. Ordinary Backspace edits table query text when the listbox is closed.",
|
|
10352
10742
|
"Duplicate, blank, and unknown field identities are ignored for presentation. Selected fields preserve the consumer's order.",
|
|
10353
|
-
"Inactive search leaves the tab order, closes the field listbox, and does not emit query or field changes."
|
|
10743
|
+
"Inactive search leaves the tab order, closes the field listbox, and does not emit query or field changes.",
|
|
10744
|
+
"The field-picker action holds the shared surface-open wash while its listbox is visible; chosen search fields remain independent."
|
|
10354
10745
|
],
|
|
10355
10746
|
"responsiveBehavior": [
|
|
10356
10747
|
"The control fills the available inline size supplied by the table toolbar search slot. Selected Chips and the editable query share one horizontal editor lane so the md control does not grow vertically.",
|
|
@@ -10377,6 +10768,10 @@
|
|
|
10377
10768
|
{
|
|
10378
10769
|
"label": "Toolbar composition owner",
|
|
10379
10770
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10771
|
+
},
|
|
10772
|
+
{
|
|
10773
|
+
"label": "Surface ownership and trigger state",
|
|
10774
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10380
10775
|
}
|
|
10381
10776
|
]
|
|
10382
10777
|
},
|
|
@@ -10501,7 +10896,8 @@
|
|
|
10501
10896
|
"columns and sort are controlled. dsSortChange reports the next TableSortState and never mutates those inputs. The same sort object is what column headers emit through the table.",
|
|
10502
10897
|
"Selecting a different data field keeps the current direction, or starts ascending when no sort exists. Selecting a direction applies it to the current field, or to the first sortable field when no sort exists. Selecting the already-active field or direction is a no-op and does not toggle the way a header click does.",
|
|
10503
10898
|
"The trigger stays Sort in regular-weight resting secondary chrome. Field and direction selection live in the menu and on column headers, so the trigger never uses active primary emphasis. It keeps pressed interaction paint without physically scaling inside the stable table caption row.",
|
|
10504
|
-
"Compound sortable headers contribute one Data row per segment. Action columns never appear."
|
|
10899
|
+
"Compound sortable headers contribute one Data row per segment. Action columns never appear.",
|
|
10900
|
+
"The trigger automatically holds the shared surface-open wash through menu exit while the selected sort remains independently controlled."
|
|
10505
10901
|
],
|
|
10506
10902
|
"responsiveBehavior": [
|
|
10507
10903
|
"Place the control in the trailing region of ds-table-toolbar with Filter and Group.",
|
|
@@ -10527,6 +10923,10 @@
|
|
|
10527
10923
|
{
|
|
10528
10924
|
"label": "Toolbar composition owner",
|
|
10529
10925
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10926
|
+
},
|
|
10927
|
+
{
|
|
10928
|
+
"label": "Surface ownership and trigger state",
|
|
10929
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10530
10930
|
}
|
|
10531
10931
|
]
|
|
10532
10932
|
},
|
|
@@ -10732,7 +11132,8 @@
|
|
|
10732
11132
|
"isInset opts into reduced outer geometry only when Tag is nested inside a control of the same density. The default single inset removes 4px overall; insetDepth double removes 8px overall and falls back to single at xs to protect minimum icon geometry. Semantic styling, typography, icons, gaps, radius, and interaction remain unchanged.",
|
|
10733
11133
|
"Labels stay on one line and truncate only when the owner supplies a maximum width.",
|
|
10734
11134
|
"Omitted interactive renders static metadata with no focus, event, or suffix. Interactive adds the fixed ChevronUpDown suffix and emits dsClick without toggling expanded internally.",
|
|
10735
|
-
"isInactive disables only the interactive button and applies the shared inactive treatment."
|
|
11135
|
+
"isInactive disables only the interactive button and applies the shared inactive treatment.",
|
|
11136
|
+
"Interactive tags use surfaceOpen for the associated menu lifecycle, including exit motion. This holds the shared pressed wash without changing the intent that describes the metadata value. Static tags never acquire surface ownership."
|
|
10736
11137
|
],
|
|
10737
11138
|
"responsiveBehavior": [
|
|
10738
11139
|
"The owner selects md, sm, or xs density to match its local layout and owns collection wrapping, overflow, and condensation. Use isInset only for same-density control nesting.",
|
|
@@ -10753,6 +11154,10 @@
|
|
|
10753
11154
|
{
|
|
10754
11155
|
"label": "Storybook examples",
|
|
10755
11156
|
"path": "src/wc/components/Tag/Tag.stories.ts"
|
|
11157
|
+
},
|
|
11158
|
+
{
|
|
11159
|
+
"label": "Surface ownership and trigger state",
|
|
11160
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10756
11161
|
}
|
|
10757
11162
|
]
|
|
10758
11163
|
},
|
|
@@ -10808,6 +11213,10 @@
|
|
|
10808
11213
|
"size": {
|
|
10809
11214
|
"type": "TagSize",
|
|
10810
11215
|
"required": false
|
|
11216
|
+
},
|
|
11217
|
+
"surfaceOpen": {
|
|
11218
|
+
"type": "boolean | undefined",
|
|
11219
|
+
"required": false
|
|
10811
11220
|
}
|
|
10812
11221
|
},
|
|
10813
11222
|
"events": [
|