@ds-mo/ui 14.15.1 → 14.17.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 +3 -3
- package/dist/agent.json +317 -24
- package/dist/angular/ds-button-unfilled.d.ts +1 -1
- package/dist/angular/ds-button-unfilled.js +3 -3
- package/dist/angular/ds-filter-menu.d.ts +1 -1
- package/dist/angular/ds-filter-menu.js +3 -3
- package/dist/angular/ds-select.d.ts +1 -1
- package/dist/angular/ds-select.js +3 -3
- package/dist/angular/ds-table-filter.d.ts +44 -0
- package/dist/angular/ds-table-filter.js +57 -0
- package/dist/angular/ds-table-sort.d.ts +16 -0
- package/dist/angular/ds-table-sort.js +43 -0
- 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-banner.js.map +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-action.js.map +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-bar-workflow.js.map +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-chart.js.map +1 -1
- 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-setting.js.map +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.js +1 -1
- package/dist/components/ds-chart.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-chip.js.map +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-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-filter-menu.js.map +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-loader.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-actions.js.map +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-scroller.js.map +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-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +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-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-table-filter.d.ts +11 -0
- package/dist/components/ds-table-filter.js +2 -0
- package/dist/components/ds-table-filter.js.map +1 -0
- 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-sort.d.ts +11 -0
- package/dist/components/ds-table-sort.js +2 -0
- package/dist/components/ds-table-sort.js.map +1 -0
- package/dist/components/ds-table-toolbar.js +1 -1
- package/dist/components/ds-table-toolbar.js.map +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-toast.js +1 -1
- package/dist/components/ds-toast.js.map +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/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/p-23u3lIr1.js +2 -0
- package/dist/components/{p-DLkNcCY0.js.map → p-23u3lIr1.js.map} +1 -1
- package/dist/components/{p-C1q-tq3U.js → p-7tZx4ukz.js} +2 -2
- package/dist/components/{p-DfyfrfHL.js → p-Asi9h3pa.js} +2 -2
- package/dist/components/{p-DfyfrfHL.js.map → p-Asi9h3pa.js.map} +1 -1
- package/dist/components/{p-C5TrNd31.js → p-B0PEg5RF.js} +2 -2
- package/dist/components/{p-C5TrNd31.js.map → p-B0PEg5RF.js.map} +1 -1
- package/dist/components/p-BFSLT0yc.js +2 -0
- package/dist/components/p-BFSLT0yc.js.map +1 -0
- package/dist/components/{p-DZFilC--.js → p-BGXqFq2C.js} +2 -2
- package/dist/components/{p-Rfpd5mWO.js → p-BHDkJmrC.js} +2 -2
- package/dist/components/{p-Rfpd5mWO.js.map → p-BHDkJmrC.js.map} +1 -1
- package/dist/components/{p-Cyw9odJX.js → p-BHz78C8h.js} +2 -2
- package/dist/components/{p-Cyw9odJX.js.map → p-BHz78C8h.js.map} +1 -1
- package/dist/components/{p-Dcnd5ZX5.js → p-BKp__CQX.js} +2 -2
- package/dist/components/{p-V2ywPfsR.js → p-BVlfQ8xZ.js} +2 -2
- package/dist/components/{p-V2ywPfsR.js.map → p-BVlfQ8xZ.js.map} +1 -1
- package/dist/components/p-BdnQv7Zl.js +2 -0
- package/dist/components/p-BdnQv7Zl.js.map +1 -0
- package/dist/components/{p-Dsn1RCS5.js → p-Be1sY58w.js} +2 -2
- package/dist/components/{p-Dsn1RCS5.js.map → p-Be1sY58w.js.map} +1 -1
- package/dist/components/p-Bh67XbfB.js +2 -0
- package/dist/components/{p-BzLnSwG9.js.map → p-Bh67XbfB.js.map} +1 -1
- package/dist/components/{p-Btxwp4lJ.js → p-BhYWdbEp.js} +2 -2
- package/dist/components/{p-Btxwp4lJ.js.map → p-BhYWdbEp.js.map} +1 -1
- package/dist/components/{p-D1Nqlrrl.js → p-Bn8NryHK.js} +2 -2
- package/dist/components/{p-D1Nqlrrl.js.map → p-Bn8NryHK.js.map} +1 -1
- package/dist/components/{p-B80NfEqc.js → p-C0X2zKbB.js} +2 -2
- package/dist/components/{p-Ct-m0I6U.js → p-C4TgWJi9.js} +2 -2
- package/dist/components/p-CKmfuK7k.js +2 -0
- package/dist/components/p-CKmfuK7k.js.map +1 -0
- package/dist/components/{p-DTMxwYQj.js → p-CMFvaY05.js} +2 -2
- package/dist/components/{p-PzI11fs8.js → p-CzcWZiH-.js} +2 -2
- package/dist/components/{p-PzI11fs8.js.map → p-CzcWZiH-.js.map} +1 -1
- package/dist/components/{p-BagXfn1G.js → p-D1YhYulL.js} +2 -2
- package/dist/components/{p-BzObtSlo.js → p-D2z2DgtX.js} +2 -2
- package/dist/components/{p-BzObtSlo.js.map → p-D2z2DgtX.js.map} +1 -1
- package/dist/components/{p-BXPQmp7q.js → p-D4K9CE8a.js} +2 -2
- package/dist/components/{p-DcPVSNDr.js → p-D8Qd6gkf.js} +2 -2
- package/dist/components/{p-DcPVSNDr.js.map → p-D8Qd6gkf.js.map} +1 -1
- package/dist/components/{p-BHjw0x3L.js → p-DAqSoyd4.js} +2 -2
- package/dist/components/{p-BHjw0x3L.js.map → p-DAqSoyd4.js.map} +1 -1
- package/dist/components/p-DEjh3klB.js +2 -0
- package/dist/components/{p-CKJzHclc.js.map → p-DEjh3klB.js.map} +1 -1
- package/dist/components/{p-NdahPypA.js → p-DFQ9mcbK.js} +2 -2
- package/dist/components/{p-Ck_VRQYi.js → p-DHuyj-9J.js} +2 -2
- package/dist/components/{p-Ck_VRQYi.js.map → p-DHuyj-9J.js.map} +1 -1
- package/dist/components/p-DIEK54fV.js +2 -0
- package/dist/components/{p-URdgCwEs.js.map → p-DIEK54fV.js.map} +1 -1
- package/dist/components/{p-Bf_D3crn.js → p-DNJTN_s0.js} +2 -2
- package/dist/components/p-DOqnJVos.js +2 -0
- package/dist/components/{p-CWDmHPJC.js.map → p-DOqnJVos.js.map} +1 -1
- package/dist/components/{p-DL_5VENG.js → p-DQqOzDEq.js} +2 -2
- package/dist/components/{p-D-kWb8cF.js → p-DSIOINBK.js} +2 -2
- package/dist/components/{p-C5eosu67.js → p-DZ55e3j9.js} +2 -2
- package/dist/components/{p-C5eosu67.js.map → p-DZ55e3j9.js.map} +1 -1
- package/dist/components/{p-QdI17bl-.js → p-Dg9qiMDa.js} +2 -2
- package/dist/components/p-DsJW5W3W.js +2 -0
- package/dist/components/{p-C2n8A8NA.js.map → p-DsJW5W3W.js.map} +1 -1
- package/dist/components/p-JPTkZ3Ji.js +2 -0
- package/dist/components/p-JPTkZ3Ji.js.map +1 -0
- package/dist/components/p-NzGRAPcF.js +2 -0
- package/dist/components/p-NzGRAPcF.js.map +1 -0
- package/dist/components/{p-B7Hf86NF.js → p-PD1Vfg0t.js} +2 -2
- package/dist/components/{p-B7Hf86NF.js.map → p-PD1Vfg0t.js.map} +1 -1
- package/dist/components/{p-BxqBiVbH.js → p-U8JIZzI2.js} +2 -2
- package/dist/components/{p-BxqBiVbH.js.map → p-U8JIZzI2.js.map} +1 -1
- package/dist/components/{p-CKY989vF.js → p-ZZzC52Ea.js} +2 -2
- package/dist/components/{p-CKY989vF.js.map → p-ZZzC52Ea.js.map} +1 -1
- package/dist/components/p-__lNIImO.js +2 -0
- package/dist/components/{p-CnWC0QvG.js.map → p-__lNIImO.js.map} +1 -1
- package/dist/components/{p-vWK5faWZ.js → p-a6qP60zb.js} +2 -2
- package/dist/components/{p-CjgnFGd6.js → p-rrFMAZkj.js} +2 -2
- package/dist/components/{p-CjgnFGd6.js.map → p-rrFMAZkj.js.map} +1 -1
- package/dist/components/p-ruPTIV6t.js +2 -0
- package/dist/components/{p-M9DPfXbP.js.map → p-ruPTIV6t.js.map} +1 -1
- package/dist/components/{p-jMCRaxQW.js → p-y4jhIkRc.js} +2 -2
- package/dist/components/{p-jMCRaxQW.js.map → p-y4jhIkRc.js.map} +1 -1
- package/dist/docs/components.json +813 -76
- package/dist/mcp-data/registry/button-unfilled.json +26 -7
- package/dist/mcp-data/registry/filter-menu.json +21 -2
- package/dist/mcp-data/registry/loader.json +2 -1
- package/dist/mcp-data/registry/registry.json +322 -23
- package/dist/mcp-data/registry/select.json +22 -3
- package/dist/mcp-data/registry/table-filter.json +399 -0
- package/dist/mcp-data/registry/table-saved-views.json +4 -4
- package/dist/mcp-data/registry/table-sort.json +229 -0
- package/dist/mcp-data/registry/table-toolbar.json +21 -14
- package/dist/mcp-data/registry/table.json +11 -8
- package/dist/react/components.d.ts +2 -0
- package/dist/react/components.js +2 -0
- package/dist/react/ds-table-filter.d.ts +17 -0
- package/dist/react/ds-table-filter.js +19 -0
- package/dist/react/ds-table-sort.d.ts +12 -0
- package/dist/react/ds-table-sort.js +12 -0
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +18 -1
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +13 -0
- package/dist/types/components/Select/Select.d.ts +13 -0
- package/dist/types/components/Table/Table.d.ts +4 -0
- package/dist/types/components/Table/table-column-customizer.d.ts +2 -0
- package/dist/types/components/TableFilter/TableFilter.d.ts +37 -0
- package/dist/types/components/TableSort/TableSort.d.ts +24 -0
- package/dist/types/components/TableSort/table-sort-menu.d.ts +15 -0
- package/dist/types/components.d.ts +254 -2
- package/dist/types/utils/table-caption-compact.d.ts +6 -0
- package/dist/vue/components.d.ts +2 -0
- package/dist/vue/components.js +2 -0
- package/dist/vue/ds-button-unfilled.js +1 -0
- package/dist/vue/ds-filter-menu.js +1 -0
- package/dist/vue/ds-select.js +1 -0
- package/dist/vue/ds-table-filter.d.ts +3 -0
- package/dist/vue/ds-table-filter.js +29 -0
- package/dist/vue/ds-table-sort.d.ts +3 -0
- package/dist/vue/ds-table-sort.js +13 -0
- package/package.json +1 -1
- package/dist/components/p-BzLnSwG9.js +0 -2
- package/dist/components/p-C2n8A8NA.js +0 -2
- package/dist/components/p-C7rzVotG.js +0 -2
- package/dist/components/p-C7rzVotG.js.map +0 -1
- package/dist/components/p-CKJzHclc.js +0 -2
- package/dist/components/p-CWDmHPJC.js +0 -2
- package/dist/components/p-Ca-I2UnB.js +0 -2
- package/dist/components/p-Ca-I2UnB.js.map +0 -1
- package/dist/components/p-CnWC0QvG.js +0 -2
- package/dist/components/p-CooNucm0.js +0 -2
- package/dist/components/p-CooNucm0.js.map +0 -1
- package/dist/components/p-DLkNcCY0.js +0 -2
- package/dist/components/p-M9DPfXbP.js +0 -2
- package/dist/components/p-URdgCwEs.js +0 -2
- /package/dist/components/{p-C1q-tq3U.js.map → p-7tZx4ukz.js.map} +0 -0
- /package/dist/components/{p-DZFilC--.js.map → p-BGXqFq2C.js.map} +0 -0
- /package/dist/components/{p-Dcnd5ZX5.js.map → p-BKp__CQX.js.map} +0 -0
- /package/dist/components/{p-B80NfEqc.js.map → p-C0X2zKbB.js.map} +0 -0
- /package/dist/components/{p-Ct-m0I6U.js.map → p-C4TgWJi9.js.map} +0 -0
- /package/dist/components/{p-DTMxwYQj.js.map → p-CMFvaY05.js.map} +0 -0
- /package/dist/components/{p-BagXfn1G.js.map → p-D1YhYulL.js.map} +0 -0
- /package/dist/components/{p-BXPQmp7q.js.map → p-D4K9CE8a.js.map} +0 -0
- /package/dist/components/{p-NdahPypA.js.map → p-DFQ9mcbK.js.map} +0 -0
- /package/dist/components/{p-Bf_D3crn.js.map → p-DNJTN_s0.js.map} +0 -0
- /package/dist/components/{p-DL_5VENG.js.map → p-DQqOzDEq.js.map} +0 -0
- /package/dist/components/{p-D-kWb8cF.js.map → p-DSIOINBK.js.map} +0 -0
- /package/dist/components/{p-QdI17bl-.js.map → p-Dg9qiMDa.js.map} +0 -0
- /package/dist/components/{p-vWK5faWZ.js.map → p-a6qP60zb.js.map} +0 -0
|
@@ -2043,7 +2043,7 @@
|
|
|
2043
2043
|
"Set isInset only when the button is nested inside a same-size control. The default single inset removes 4px overall; insetDepth double removes 8px overall so the parent can add 4px per edge while preserving its outer alignment box. Double inset falls back to single at xs to protect minimum icon geometry.",
|
|
2044
2044
|
"A true pressed toggle and owner-controlled isActive emphasis share the selected visual treatment, but only pressed supplies toggle semantics and dsChange.",
|
|
2045
2045
|
"General content UI keeps the selected interaction fill and border for pressed or active emphasis.",
|
|
2046
|
-
"Shell, navigation, and tool-rail composites use isActive with foreground
|
|
2046
|
+
"Shell, navigation, and tool-rail composites use isActive with primary foreground across the complete control and no selected fill or border.",
|
|
2047
2047
|
"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.",
|
|
2048
2048
|
"Surface context must match the actual parent surface; translucent, inverted, media, and always-dark treatments are reserved for those surfaces.",
|
|
2049
2049
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
@@ -2051,11 +2051,12 @@
|
|
|
2051
2051
|
"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.",
|
|
2052
2052
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
2053
2053
|
"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.",
|
|
2054
|
-
"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
|
|
2054
|
+
"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.",
|
|
2055
2055
|
"An open popup is a transient pressed state rather than a selected one. While expanded is true and haspopup or hasMenu identifies a popup, 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."
|
|
2056
2056
|
],
|
|
2057
2057
|
"responsiveBehavior": [
|
|
2058
|
-
"The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants.",
|
|
2058
|
+
"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, and a customized catalog promotes the Table icon to primary.",
|
|
2059
|
+
"When collapseLabel is set inside a named ds-table container narrower than 900px, an icon-label caption action omits its label and chevron and becomes icon-only while keeping its accessible name. An active control then promotes the icon to primary.",
|
|
2059
2060
|
"Use fill width only when the parent layout requires a full-width secondary action."
|
|
2060
2061
|
],
|
|
2061
2062
|
"frameworkCaveats": {
|
|
@@ -2090,6 +2091,10 @@
|
|
|
2090
2091
|
"type": "ButtonUnfilledBackground | undefined",
|
|
2091
2092
|
"required": false
|
|
2092
2093
|
},
|
|
2094
|
+
"collapseLabel": {
|
|
2095
|
+
"type": "boolean",
|
|
2096
|
+
"required": false
|
|
2097
|
+
},
|
|
2093
2098
|
"controls": {
|
|
2094
2099
|
"type": "string | undefined",
|
|
2095
2100
|
"required": false
|
|
@@ -3941,6 +3946,7 @@
|
|
|
3941
3946
|
],
|
|
3942
3947
|
"responsiveBehavior": [
|
|
3943
3948
|
"The popup defaults to the large menu-width token and clamps to the viewport.",
|
|
3949
|
+
"When collapseLabel is set inside a named ds-table container narrower than 900px, the trigger omits its label and chevron and becomes icon-only. Active criteria promote the prefix icon to primary.",
|
|
3944
3950
|
"Both panes remain visible at narrow widths, with a smaller category minimum and reduced option-pane padding.",
|
|
3945
3951
|
"Treat side as preferred placement; the popup flips and clamps when viewport collision requires it."
|
|
3946
3952
|
],
|
|
@@ -3999,6 +4005,10 @@
|
|
|
3999
4005
|
"type": "string",
|
|
4000
4006
|
"required": false
|
|
4001
4007
|
},
|
|
4008
|
+
"collapseLabel": {
|
|
4009
|
+
"type": "boolean",
|
|
4010
|
+
"required": false
|
|
4011
|
+
},
|
|
4002
4012
|
"filters": {
|
|
4003
4013
|
"type": "FilterMenuFilter[]",
|
|
4004
4014
|
"required": false
|
|
@@ -4522,6 +4532,7 @@
|
|
|
4522
4532
|
],
|
|
4523
4533
|
"states": [
|
|
4524
4534
|
"Loader communicates indeterminate progress only and does not emit completion or failure events.",
|
|
4535
|
+
"The segmented glyph rotates clockwise, with its opacity ramp trailing the leading arc.",
|
|
4525
4536
|
"Omitted color inherits currentColor. Explicit semantic aliases and CSS-variable references match Icon when an independent progress color is required.",
|
|
4526
4537
|
"Nested Loader inherits a readable color from its owning busy control or region rather than selecting tertiary or quaternary directly.",
|
|
4527
4538
|
"The owner decides whether to delay Loader visibility for short operations and removes it when the operation settles.",
|
|
@@ -7395,7 +7406,7 @@
|
|
|
7395
7406
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
7396
7407
|
"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; expanded keeps it visible while its controlled menu is open. Activating it emits dsOptionAction without selecting the option or closing the Select popup.",
|
|
7397
7408
|
"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.",
|
|
7398
|
-
"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. The default down indicator communicates disclosure; up-down is reserved for compact value steppers such as pagination page size.",
|
|
7409
|
+
"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.",
|
|
7399
7410
|
"While the popup is open, the trigger holds the pressed interaction wash without changing its resting foreground or selected-value treatment.",
|
|
7400
7411
|
"The shared popup search control follows the Select density, using the same text, icon, and internal spacing as a borderless trigger. Its container uses menu-item padding on every side and owns a 1px bottom divider that becomes a 1.5px bold-brand stroke while search has focus. Search placeholder text is secondary at rest and quaternary while focused because it becomes decorative once the editable field is active.",
|
|
7401
7412
|
"When search contains text, the shared control shows a rounded icon-only ButtonUnfilled with the CrossCircle icon and no border, sized to remain inset within the current row density. It clears the local term, stays hidden for an empty term, and returns focus to search.",
|
|
@@ -7411,6 +7422,7 @@
|
|
|
7411
7422
|
],
|
|
7412
7423
|
"responsiveBehavior": [
|
|
7413
7424
|
"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.",
|
|
7425
|
+
"When collapseLabel is set inside a named ds-table container narrower than 900px, the trigger omits its label and chevron and becomes icon-only. A selected value promotes the prefix icon to primary.",
|
|
7414
7426
|
"The popup matches the trigger minimum width, may grow for content, and clamps to the viewport.",
|
|
7415
7427
|
"Keep popupAlign at start for ordinary fields and filters. Use end when a control sits against a right layout edge and the popup should grow inward.",
|
|
7416
7428
|
"Long option collections scroll inside the popup; virtualization and remote search are not part of this component."
|
|
@@ -7469,6 +7481,10 @@
|
|
|
7469
7481
|
"type": "string",
|
|
7470
7482
|
"required": false
|
|
7471
7483
|
},
|
|
7484
|
+
"collapseLabel": {
|
|
7485
|
+
"type": "boolean",
|
|
7486
|
+
"required": false
|
|
7487
|
+
},
|
|
7472
7488
|
"disabled": {
|
|
7473
7489
|
"type": "boolean",
|
|
7474
7490
|
"required": false
|
|
@@ -9050,6 +9066,8 @@
|
|
|
9050
9066
|
"component:ds-pagination",
|
|
9051
9067
|
"component:ds-table-toolbar",
|
|
9052
9068
|
"component:ds-table-saved-views",
|
|
9069
|
+
"component:ds-table-filter",
|
|
9070
|
+
"component:ds-table-sort",
|
|
9053
9071
|
"component:ds-bar-action",
|
|
9054
9072
|
"component:ds-button-unfilled",
|
|
9055
9073
|
"component:ds-menu",
|
|
@@ -9061,10 +9079,10 @@
|
|
|
9061
9079
|
"pattern:menu-trigger"
|
|
9062
9080
|
],
|
|
9063
9081
|
"accessibility": [
|
|
9064
|
-
"The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a 48px header bar renders as component chrome outside the horizontal scrollport. It defaults to a presentational caption title that does not duplicate the accessible name. Application-owned labeled controls supplied through the single named header slot replace that fallback and occupy the leading content width inside the component-owned 8px inset. When columnCustomizer is enabled, the table adds a trailing
|
|
9065
|
-
"The data-mode switcher is the shared Menu of the table's supported infinite, pagination, and virtual modes. The switcher is the final caption-bar action; when the column customizer is also present, a decorative vertical divider separates the two controls. dataMode remains controlled, and the application responds to change intent by supplying the matching records, pagination state, loading behavior, and query consequences. Escape, dismissal, and selection return focus to the trigger.",
|
|
9082
|
+
"The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a 48px header bar renders as component chrome outside the horizontal scrollport. It defaults to a presentational caption title that does not duplicate the accessible name. Application-owned labeled controls supplied through the single named header slot replace that fallback and occupy the leading content width inside the component-owned 8px inset. When columnCustomizer is enabled, the table adds a trailing Customize control named Customize table; the label becomes Customized table when hidden or reordered columns differ from the catalog default. The control is icon-label at typical widths and the icon-only Table menu button below 900px. Otherwise the header slot receives the complete content width.",
|
|
9083
|
+
"The data-mode switcher is the shared Menu of the table's supported infinite, pagination, and virtual modes. It uses an Ellipses trigger. The switcher is the final caption-bar action; when the column customizer is also present, a decorative vertical divider separates the two controls. dataMode remains controlled, and the application responds to change intent by supplying the matching records, pagination state, loading behavior, and query consequences. Escape, dismissal, and selection return focus to the trigger.",
|
|
9066
9084
|
"The column customizer is the shared Menu of switch rows, not a table-owned dialog. Data columns can be shown, hidden, and reordered. Action columns and the selection checkbox never appear in the menu. The last remaining visible data column cannot be hidden, but it stays focusable so it can still be reordered. Escape and outside click restore focus to the trigger. Persistence stays in the application.",
|
|
9067
|
-
"Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. Grouping never adds a second sort indicator or header control; the application supplies groups in its fixed product order. Optional column help underlines the header label with the shared dotted decoration and shows ds-tooltip from that label; it does not add a second header control or replace the column name.",
|
|
9085
|
+
"Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. ds-table-sort in the toolbar trailing cluster is the matching menu of Data and Direction sections; it emits the same dsSortChange shape so header clicks and menu choices stay in sync. Grouping never adds a second sort indicator or header control; the application supplies groups in its fixed product order. Optional column help underlines the header label with the shared dotted decoration and shows ds-tooltip from that label; it does not add a second header control or replace the column name.",
|
|
9068
9086
|
"Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window. In virtual mode the supplied in-memory rows are that loaded set, including rows whose DOM is recycled. When grouping is active with multi-selection, each group section header also exposes a checkbox that selects or clears that group's selectable loaded rows.",
|
|
9069
9087
|
"Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection, action, overflow-menu, or primary-text link controls.",
|
|
9070
9088
|
"Scrollable table regions become keyboard focusable and named only when overflow exists.",
|
|
@@ -9072,7 +9090,7 @@
|
|
|
9072
9090
|
"Static and infinite tables may show an optional result summary footer when displayedCount and totalCount are finite. Virtual mode shows a total-only summary and ignores displayedCount. Pagination mode instead renders a named Pagination control with a compact selected-size total, vertical divider, and page position; range changes are announced independently with complete phrasing. Unmodified Left and Right Arrow request the adjacent page while focus is inside a paginated table or on a containing page scroller that owns it; editable fields, choice controls, sliders, open menus, and modified key combinations retain their own keyboard behavior. A table-owned footer slot can replace summary copy, while footer-leading and footer-trailing remain available in the same compact-bar anatomy. Nested dialog footers are ignored."
|
|
9073
9091
|
],
|
|
9074
9092
|
"states": [
|
|
9075
|
-
"Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, hiddenColumnIds, columnOrder, dataMode, pagination, displayedCount, totalCount, and incremental-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns the leading slot's internal layout, controls, labels, filtering behavior, and action handling. Opting into dataModeSwitcher and columnCustomizer adds their trailing Menu triggers and requires caption visibility. When both are present, Customize
|
|
9093
|
+
"Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, hiddenColumnIds, columnOrder, dataMode, pagination, displayedCount, totalCount, and incremental-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns the leading slot's internal layout, controls, labels, filtering behavior, and action handling. Opting into dataModeSwitcher and columnCustomizer adds their trailing Menu triggers and requires caption visibility. When both are present, Customize precedes a decorative divider and the data-mode trigger remains the final action. The Customize label becomes Customized when hidden or reordered columns differ from the catalog default. That state is foreground-only: the label goes primary on the icon-label shape, and the Table icon goes primary on the compact icon shape. The table closes one trailing Menu before opening the other. The footer retains its compact-bar composition: application-owned leading status sits left while a controlled result summary or Pagination aligns right, before any trailing action. Content-sized tables remain natural for sparse or fixed-count results. height bounds the complete header, frame, and footer composition. fitViewport reserves the compact-state composition height in the nearest vertical scrollport while growing the visible table into that reservation as surrounding page chrome collapses.",
|
|
9076
9094
|
"Grouping supports one level. The application supplies groups in a fixed product-defined order and supplies ordered member rows independently. Group section headers show an emphasized text-body-medium label followed by a middle dot and plain secondary loaded progress, for example Critical · 50 of 166. The loaded value comes from the supplied member rows and the total comes from totalCount. A localized countLabel total phrase remains available for the complete assistive progress announcement. Virtual mode shows totals only, for example Critical · 166, because there is no loaded window. Groups may declare an optional intent (brand, neutral, negative, warning, caution, positive) that paints an LTR gradient from the faint intent surface at the label edge into faint neutral at the trailing edge, plus a bold intent title color. Neutral groups remain solid faint neutral. Section separators are painted inside that viewport-width surface so translucent border tokens composite with each intent background. Internal sections keep their separators; a collapsed or empty section header yields its separator only when it is the table's final rendered item. A trailing visually neutral icon-only ButtonUnfilled uses the 24px md double-inset action recipe and toggles controlled collapsedGroupIds, showing ChevronUp while expanded and ChevronDown while collapsed. While any group is expanded, a ChevronDownUp action uses the xs sort-control recipe widened to a table-owned 24px lane and collapses every group. It appears at the inline-end edge of the trailing column declared with kind action when one exists; otherwise a button-hugging 24px by 16px medium-elevation surface floats at the visible scrollport's header edge so the action remains reachable while member columns scroll beneath it. With stickyHeader enabled, each contained section uses its one real section row as a native sticky header inside its real row-group boundary. The browser therefore owns pinning, push-off, scrolling, and resize layout in one pass without a duplicated lane, active-section state, transforms, or scroll-time geometry. Shared grid tracks retain exact header and member-cell alignment. The section surface also stays pinned to the visible horizontal scrollport and spans the smaller of the visible viewport or table width. Virtual grouped tables flatten headers and members into that same scrollport; expanding a section never introduces an inner scroller.",
|
|
9077
9095
|
"When columnCustomizer is false, columns render in catalog order. When it is true, columns remains the catalog: hiddenColumnIds and columnOrder control visibility and data-column sequence, action columns stay last, cannot be hidden, and remain absent from the customizer Menu, and dsColumnsConfigChange reports the next hidden ids and data-column order without mutating those inputs. The customizer Menu live-applies show/hide and data-column reorder. The table does not persist preferences.",
|
|
9078
9096
|
"An active member sort toggles only between ascending and descending; activating a different sortable label moves the one sorting state to that key. Applications may still clear the controlled sort state explicitly. Grouping does not introduce another interactive direction.",
|
|
@@ -9087,6 +9105,7 @@
|
|
|
9087
9105
|
],
|
|
9088
9106
|
"responsiveBehavior": [
|
|
9089
9107
|
"The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
|
|
9108
|
+
"Inside the named ds-table container, caption Filter, Group, and Sort controls that opt into collapseLabel become icon-only below 900px by omitting their labels and chevrons. Active filtering or grouping promotes the visible icon to primary. Sort keeps resting secondary chrome because its selection lives in the menu and headers. Customize switches to the icon-only Table menu button below 900px; a customized catalog then promotes that icon to primary.",
|
|
9090
9109
|
"stickyHeader follows the active vertical scroll owner: a maxHeight, height, or fitViewport table keeps its native header and group sections inside one bounded table scrollport, while a document-flow table retains a semantic native header and renders a sticky control header whose columns follow the body's native inline scroll timeline. Consumers set --ds-table-sticky-header-offset when page chrome occupies an unbounded document scrollport edge. When the 48px table header bar is visible, it sticks at that external offset and the column header stacks immediately below it.",
|
|
9091
9110
|
"fitViewport uses viewportInsetBlockStart and viewportInsetBlockEnd to describe compact surrounding chrome and page gutters relative to the nearest vertical scroll owner. Before the table reaches that compact position, its host reserves the eventual height while the visible composition grows and vertical input remains owned by the outer page. Once settled, the internal table viewport becomes the vertical scroll owner. Bounded grouped tables use browser-native sticky section rows inside real block row-group boundaries, so scroll and resize do not run component JavaScript or trigger reactive section swaps. Document-flow tables retain the synchronized visual lane required by their separate horizontal scrollport.",
|
|
9092
9111
|
"Without maxHeight the table grows the document and automatic lazy loading observes the browser viewport. Horizontal scrolling chains vertical wheel and trackpad movement to the page instead of trapping it.",
|
|
@@ -9100,7 +9119,7 @@
|
|
|
9100
9119
|
"Assign columns, rows, groups, grouping, sort, selectedRowIds, collapsedGroupIds, hiddenColumnIds, columnOrder, pagination, displayedCount, and totalCount through JavaScript properties rather than HTML attribute strings.",
|
|
9101
9120
|
"dataMode=virtual recycles row DOM over the supplied in-memory rows or groups and requires height, maxHeight, or fitViewport. It does not fetch or paginate.",
|
|
9102
9121
|
"When an action cell supplies items, the table opens one shared ds-menu from the Ellipses trigger; dsCellAction fires for the selected command, not for opening or closing the menu.",
|
|
9103
|
-
"When columnCustomizer is enabled, the
|
|
9122
|
+
"When columnCustomizer is enabled, the Table trigger opens the same shared ds-menu of reorderable switch rows; toggling a switch or reordering a row emits dsColumnsConfigChange and does not close the menu.",
|
|
9104
9123
|
"Overflowing text tracks present one shared ds-tooltip with the omitted value. Unlimited wrapping tracks and disabled rows never show it. The tooltip is not linked with aria-describedby because the full string remains in the cell.",
|
|
9105
9124
|
"Replace controlled property values in response to dsSortChange, dsGroupCollapseChange, dsSelectionChange, dsLoadMore, dsGroupLoadMore, dsPaginationChange, and dsColumnsConfigChange; route dsRowActivate in the application owner. When columnCustomizer is enabled, keep columns as the full catalog and replace hiddenColumnIds and columnOrder from that event."
|
|
9106
9125
|
],
|
|
@@ -9432,6 +9451,163 @@
|
|
|
9432
9451
|
"tooltip"
|
|
9433
9452
|
]
|
|
9434
9453
|
},
|
|
9454
|
+
{
|
|
9455
|
+
"name": "table-filter",
|
|
9456
|
+
"title": "TableFilter",
|
|
9457
|
+
"description": "Standard table-toolbar Filter control that owns the shared trigger, filter menu UI, accessible defaults, and compact-caption behavior while the application controls data and values.",
|
|
9458
|
+
"type": "registry:ui",
|
|
9459
|
+
"meta": {
|
|
9460
|
+
"library": "@ds-mo/ui",
|
|
9461
|
+
"distribution": "npm",
|
|
9462
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/table-filter",
|
|
9463
|
+
"source": "src/wc/components/TableFilter/TableFilter.tsx",
|
|
9464
|
+
"intentStatus": "complete",
|
|
9465
|
+
"intent": {
|
|
9466
|
+
"audience": "general",
|
|
9467
|
+
"status": "stable",
|
|
9468
|
+
"summary": "Standard table-toolbar Filter control that owns the shared trigger, filter menu UI, accessible defaults, and compact-caption behavior while the application controls data and values.",
|
|
9469
|
+
"useWhen": [
|
|
9470
|
+
"A table toolbar should expose the standard singular Filter control and shared filter-menu interaction.",
|
|
9471
|
+
"A product supplies filter definitions and controlled values but should not recreate the toolbar trigger, selected count, category navigation, or responsive treatment."
|
|
9472
|
+
],
|
|
9473
|
+
"avoidWhen": [
|
|
9474
|
+
"Filtering is unrelated to a table or structured result set; use ds-filter-menu directly.",
|
|
9475
|
+
"The application expects the component to filter, fetch, persist, or otherwise transform rows.",
|
|
9476
|
+
"A filter requires a product-specific editor that the shared filter category kinds cannot represent."
|
|
9477
|
+
],
|
|
9478
|
+
"alternatives": [
|
|
9479
|
+
{
|
|
9480
|
+
"when": "A non-table surface needs the generic filter interaction or custom trigger recipe.",
|
|
9481
|
+
"component": "component:ds-filter-menu",
|
|
9482
|
+
"reason": "FilterMenu exposes generic trigger geometry and popup positioning rather than the fixed table-toolbar recipe."
|
|
9483
|
+
}
|
|
9484
|
+
],
|
|
9485
|
+
"commonlyComposedWith": [
|
|
9486
|
+
"component:ds-table",
|
|
9487
|
+
"component:ds-table-toolbar",
|
|
9488
|
+
"component:ds-table-saved-views",
|
|
9489
|
+
"component:ds-table-sort",
|
|
9490
|
+
"component:ds-filter-menu"
|
|
9491
|
+
],
|
|
9492
|
+
"patterns": [
|
|
9493
|
+
"pattern:menu-trigger"
|
|
9494
|
+
],
|
|
9495
|
+
"accessibility": [
|
|
9496
|
+
"The trigger is an icon-label combobox named Filter table unless a product aria-label supplies the table context. Compact caption widths preserve that accessible name after the visible label and chevron are omitted.",
|
|
9497
|
+
"The popup retains ds-filter-menu category navigation, option semantics, focus entry, dismissal, and focus return.",
|
|
9498
|
+
"Localize label, menuLabel, categoriesLabel, and clearLabel together so visible and accessible wording remains consistent."
|
|
9499
|
+
],
|
|
9500
|
+
"states": [
|
|
9501
|
+
"filters, values, and activeFilterId are controlled. dsChange, dsClear, and dsActiveFilterChange report intent without changing those inputs; the application applies query consequences and returns replacement values.",
|
|
9502
|
+
"The visible trigger label defaults to singular Filter and appends the selected criterion count. The trigger uses resting secondary chrome at typical widths; active criteria promote only the visible label, without redefining generic button active semantics.",
|
|
9503
|
+
"Popup visibility follows the same mutable open and dsOpenChange contract as ds-filter-menu."
|
|
9504
|
+
],
|
|
9505
|
+
"responsiveBehavior": [
|
|
9506
|
+
"Place the control in the trailing region of ds-table-toolbar.",
|
|
9507
|
+
"Inside a named ds-table container narrower than 900px, the trigger becomes icon-only and active criteria promote the Filters icon to primary."
|
|
9508
|
+
],
|
|
9509
|
+
"frameworkCaveats": {
|
|
9510
|
+
"customElements": [
|
|
9511
|
+
"Assign filters, values, and activeFilterId as JavaScript properties. Replace controlled values in response to dsChange and dsClear."
|
|
9512
|
+
],
|
|
9513
|
+
"react": [
|
|
9514
|
+
"Keep filters and values in application state and replace values from the typed dsChange and dsClear events."
|
|
9515
|
+
],
|
|
9516
|
+
"angular": [
|
|
9517
|
+
"Import the generated DsTableFilter adapter, bind filters and values, and handle dsChange, dsClear, and dsActiveFilterChange."
|
|
9518
|
+
]
|
|
9519
|
+
},
|
|
9520
|
+
"references": [
|
|
9521
|
+
{
|
|
9522
|
+
"label": "Storybook review states",
|
|
9523
|
+
"path": "src/wc/components/TableFilter/TableFilter.stories.ts"
|
|
9524
|
+
},
|
|
9525
|
+
{
|
|
9526
|
+
"label": "Toolbar composition owner",
|
|
9527
|
+
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
9528
|
+
}
|
|
9529
|
+
]
|
|
9530
|
+
},
|
|
9531
|
+
"props": {
|
|
9532
|
+
"activeFilterId": {
|
|
9533
|
+
"type": "string | undefined",
|
|
9534
|
+
"required": false
|
|
9535
|
+
},
|
|
9536
|
+
"ariaLabel": {
|
|
9537
|
+
"type": "string | null",
|
|
9538
|
+
"required": false
|
|
9539
|
+
},
|
|
9540
|
+
"categoriesLabel": {
|
|
9541
|
+
"type": "string",
|
|
9542
|
+
"required": false
|
|
9543
|
+
},
|
|
9544
|
+
"clearLabel": {
|
|
9545
|
+
"type": "string",
|
|
9546
|
+
"required": false
|
|
9547
|
+
},
|
|
9548
|
+
"filters": {
|
|
9549
|
+
"type": "FilterMenuFilter[]",
|
|
9550
|
+
"required": false
|
|
9551
|
+
},
|
|
9552
|
+
"label": {
|
|
9553
|
+
"type": "string",
|
|
9554
|
+
"required": false
|
|
9555
|
+
},
|
|
9556
|
+
"menuLabel": {
|
|
9557
|
+
"type": "string | null",
|
|
9558
|
+
"required": false
|
|
9559
|
+
},
|
|
9560
|
+
"open": {
|
|
9561
|
+
"type": "boolean",
|
|
9562
|
+
"required": false
|
|
9563
|
+
},
|
|
9564
|
+
"values": {
|
|
9565
|
+
"type": "FilterMenuValues",
|
|
9566
|
+
"required": false
|
|
9567
|
+
}
|
|
9568
|
+
},
|
|
9569
|
+
"events": [
|
|
9570
|
+
{
|
|
9571
|
+
"name": "dsActiveFilterChange",
|
|
9572
|
+
"detail": "string"
|
|
9573
|
+
},
|
|
9574
|
+
{
|
|
9575
|
+
"name": "dsAfterClose",
|
|
9576
|
+
"detail": "void"
|
|
9577
|
+
},
|
|
9578
|
+
{
|
|
9579
|
+
"name": "dsChange",
|
|
9580
|
+
"detail": "FilterMenuChangeDetail"
|
|
9581
|
+
},
|
|
9582
|
+
{
|
|
9583
|
+
"name": "dsClear",
|
|
9584
|
+
"detail": "void"
|
|
9585
|
+
},
|
|
9586
|
+
{
|
|
9587
|
+
"name": "dsClose",
|
|
9588
|
+
"detail": "void"
|
|
9589
|
+
},
|
|
9590
|
+
{
|
|
9591
|
+
"name": "dsOpenChange",
|
|
9592
|
+
"detail": "boolean"
|
|
9593
|
+
}
|
|
9594
|
+
],
|
|
9595
|
+
"slots": [],
|
|
9596
|
+
"exports": {
|
|
9597
|
+
"customElement": "ds-table-filter",
|
|
9598
|
+
"react": "DsTableFilter",
|
|
9599
|
+
"vue": "DsTableFilter",
|
|
9600
|
+
"angular": "DsTableFilter"
|
|
9601
|
+
}
|
|
9602
|
+
},
|
|
9603
|
+
"dependencies": [
|
|
9604
|
+
"@ds-mo/ui",
|
|
9605
|
+
"@ds-mo/tokens"
|
|
9606
|
+
],
|
|
9607
|
+
"registryDependencies": [
|
|
9608
|
+
"filter-menu"
|
|
9609
|
+
]
|
|
9610
|
+
},
|
|
9435
9611
|
{
|
|
9436
9612
|
"name": "table-saved-views",
|
|
9437
9613
|
"title": "TableSavedViews",
|
|
@@ -9476,8 +9652,8 @@
|
|
|
9476
9652
|
"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."
|
|
9477
9653
|
],
|
|
9478
9654
|
"responsiveBehavior": [
|
|
9479
|
-
"The control remains a single toolbar item and relies on Select, Menu, and Modal collision and viewport behavior. Its choice popup keeps
|
|
9480
|
-
"Place it in the
|
|
9655
|
+
"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.",
|
|
9656
|
+
"Place it in the start region of ds-table-toolbar so the middle region can keep left-side and right-side controls on one spanning cluster."
|
|
9481
9657
|
],
|
|
9482
9658
|
"frameworkCaveats": {
|
|
9483
9659
|
"customElements": [
|
|
@@ -9583,10 +9759,126 @@
|
|
|
9583
9759
|
"select"
|
|
9584
9760
|
]
|
|
9585
9761
|
},
|
|
9762
|
+
{
|
|
9763
|
+
"name": "table-sort",
|
|
9764
|
+
"title": "TableSort",
|
|
9765
|
+
"description": "Toolbar companion for the table's one controlled member-row sort, with a two-section menu for the sort field and direction that mirrors header sorting.",
|
|
9766
|
+
"type": "registry:ui",
|
|
9767
|
+
"meta": {
|
|
9768
|
+
"library": "@ds-mo/ui",
|
|
9769
|
+
"distribution": "npm",
|
|
9770
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/table-sort",
|
|
9771
|
+
"source": "src/wc/components/TableSort/TableSort.tsx",
|
|
9772
|
+
"intentStatus": "complete",
|
|
9773
|
+
"intent": {
|
|
9774
|
+
"audience": "general",
|
|
9775
|
+
"status": "stable",
|
|
9776
|
+
"summary": "Toolbar companion for the table's one controlled member-row sort, with a two-section menu for the sort field and direction that mirrors header sorting.",
|
|
9777
|
+
"useWhen": [
|
|
9778
|
+
"A table toolbar needs an explicit Sort control alongside Filter and Group.",
|
|
9779
|
+
"Sortable columns or compound header segments should be choosable without relying only on column-header clicks."
|
|
9780
|
+
],
|
|
9781
|
+
"avoidWhen": [
|
|
9782
|
+
"The table has no sortable columns; the control hides itself.",
|
|
9783
|
+
"The application expects the control to sort rows internally or persist preferences.",
|
|
9784
|
+
"The popup should submit a form value; use Select."
|
|
9785
|
+
],
|
|
9786
|
+
"alternatives": [
|
|
9787
|
+
{
|
|
9788
|
+
"when": "The choice is one submitted form value.",
|
|
9789
|
+
"component": "component:ds-select",
|
|
9790
|
+
"reason": "Select owns form-value and listbox semantics, not table sort state."
|
|
9791
|
+
}
|
|
9792
|
+
],
|
|
9793
|
+
"commonlyComposedWith": [
|
|
9794
|
+
"component:ds-table",
|
|
9795
|
+
"component:ds-table-toolbar",
|
|
9796
|
+
"component:ds-table-filter",
|
|
9797
|
+
"component:ds-select",
|
|
9798
|
+
"component:ds-button-unfilled",
|
|
9799
|
+
"component:ds-menu"
|
|
9800
|
+
],
|
|
9801
|
+
"patterns": [
|
|
9802
|
+
"pattern:menu-trigger"
|
|
9803
|
+
],
|
|
9804
|
+
"accessibility": [
|
|
9805
|
+
"The trigger is an icon-label menu button named Sort table unless a product aria-label is supplied. Compact caption widths keep that accessible name after the visible label is omitted.",
|
|
9806
|
+
"The menu has two sections, Data and Direction. Each section presents one selected row through isSelected; the menu is not a single radio group because field and direction are independent.",
|
|
9807
|
+
"Choosing a row applies immediately and keeps the menu open so the other section can be changed. Escape and outside activation close the menu and restore trigger focus."
|
|
9808
|
+
],
|
|
9809
|
+
"states": [
|
|
9810
|
+
"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.",
|
|
9811
|
+
"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.",
|
|
9812
|
+
"The trigger stays Sort in resting secondary chrome. Field and direction selection live in the menu and on column headers, so the trigger never uses active primary emphasis.",
|
|
9813
|
+
"Compound sortable headers contribute one Data row per segment. Action columns never appear."
|
|
9814
|
+
],
|
|
9815
|
+
"responsiveBehavior": [
|
|
9816
|
+
"Place the control in the trailing region of ds-table-toolbar with Filter and Group.",
|
|
9817
|
+
"Inside a named ds-table container narrower than 900px, the trigger omits its label and chevron and becomes icon-only. The icon keeps the resting secondary foreground."
|
|
9818
|
+
],
|
|
9819
|
+
"frameworkCaveats": {
|
|
9820
|
+
"customElements": [
|
|
9821
|
+
"Assign columns and sort as JavaScript properties. Replace sort from both dsSortChange on this control and dsSortChange on the table."
|
|
9822
|
+
],
|
|
9823
|
+
"react": [
|
|
9824
|
+
"Keep one sort state and pass it to both ds-table and ds-table-sort; update it from either event."
|
|
9825
|
+
],
|
|
9826
|
+
"angular": [
|
|
9827
|
+
"Import the generated DsTableSort adapter, bind columns and sort, and handle dsSortChange with the same owner that handles table header sorting."
|
|
9828
|
+
]
|
|
9829
|
+
},
|
|
9830
|
+
"references": [
|
|
9831
|
+
{
|
|
9832
|
+
"label": "Storybook review states",
|
|
9833
|
+
"path": "src/wc/components/TableSort/TableSort.stories.ts"
|
|
9834
|
+
},
|
|
9835
|
+
{
|
|
9836
|
+
"label": "Toolbar composition owner",
|
|
9837
|
+
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
9838
|
+
}
|
|
9839
|
+
]
|
|
9840
|
+
},
|
|
9841
|
+
"props": {
|
|
9842
|
+
"ariaLabel": {
|
|
9843
|
+
"type": "string | null",
|
|
9844
|
+
"required": false
|
|
9845
|
+
},
|
|
9846
|
+
"columns": {
|
|
9847
|
+
"type": "TableColumn[]",
|
|
9848
|
+
"required": false
|
|
9849
|
+
},
|
|
9850
|
+
"sort": {
|
|
9851
|
+
"type": "TableSortState | null",
|
|
9852
|
+
"required": false
|
|
9853
|
+
}
|
|
9854
|
+
},
|
|
9855
|
+
"events": [
|
|
9856
|
+
{
|
|
9857
|
+
"name": "dsSortChange",
|
|
9858
|
+
"detail": "TableSortChangeDetail"
|
|
9859
|
+
}
|
|
9860
|
+
],
|
|
9861
|
+
"slots": [],
|
|
9862
|
+
"exports": {
|
|
9863
|
+
"customElement": "ds-table-sort",
|
|
9864
|
+
"react": "DsTableSort",
|
|
9865
|
+
"vue": "DsTableSort",
|
|
9866
|
+
"angular": "DsTableSort"
|
|
9867
|
+
}
|
|
9868
|
+
},
|
|
9869
|
+
"dependencies": [
|
|
9870
|
+
"@ds-mo/ui",
|
|
9871
|
+
"@ds-mo/tokens"
|
|
9872
|
+
],
|
|
9873
|
+
"registryDependencies": [
|
|
9874
|
+
"button-unfilled",
|
|
9875
|
+
"menu"
|
|
9876
|
+
]
|
|
9877
|
+
},
|
|
9586
9878
|
{
|
|
9587
9879
|
"name": "table-toolbar",
|
|
9588
9880
|
"title": "TableToolbar",
|
|
9589
|
-
"description": "Data-agnostic companion layout for application-owned controls
|
|
9881
|
+
"description": "Data-agnostic companion layout for application-owned table caption controls, with a start cluster, optional search, trailing Filter/Group/Sort, and narrow-width horizontal overflow.",
|
|
9590
9882
|
"type": "registry:ui",
|
|
9591
9883
|
"meta": {
|
|
9592
9884
|
"library": "@ds-mo/ui",
|
|
@@ -9597,9 +9889,9 @@
|
|
|
9597
9889
|
"intent": {
|
|
9598
9890
|
"audience": "general",
|
|
9599
9891
|
"status": "stable",
|
|
9600
|
-
"summary": "Data-agnostic companion layout for application-owned controls
|
|
9892
|
+
"summary": "Data-agnostic companion layout for application-owned table caption controls, with a start cluster, optional search, trailing Filter/Group/Sort, and narrow-width horizontal overflow.",
|
|
9601
9893
|
"useWhen": [
|
|
9602
|
-
"Several table pages repeat the same
|
|
9894
|
+
"Several table pages repeat the same saved-view cluster, middle discovery and result-shaping controls, and table-owned caption actions.",
|
|
9603
9895
|
"A ds-table header slot needs consistent control spacing, alignment, grouping, and narrow-width overflow without moving product behavior into the table."
|
|
9604
9896
|
],
|
|
9605
9897
|
"avoidWhen": [
|
|
@@ -9610,34 +9902,39 @@
|
|
|
9610
9902
|
"commonlyComposedWith": [
|
|
9611
9903
|
"component:ds-table",
|
|
9612
9904
|
"component:ds-table-saved-views",
|
|
9905
|
+
"component:ds-divider",
|
|
9613
9906
|
"component:ds-input",
|
|
9614
|
-
"component:ds-filter
|
|
9907
|
+
"component:ds-table-filter",
|
|
9908
|
+
"component:ds-select",
|
|
9909
|
+
"component:ds-table-sort",
|
|
9615
9910
|
"component:ds-button-unfilled"
|
|
9616
9911
|
],
|
|
9617
9912
|
"patterns": [],
|
|
9618
9913
|
"accessibility": [
|
|
9619
9914
|
"The component exposes a named toolbar while each slotted control retains its own accessible name and native keyboard behavior.",
|
|
9620
|
-
"Use the
|
|
9915
|
+
"Use the start slot for saved views. Use search for the optional discovery field, leading for any additional left-side middle controls, and trailing for Filter, Group, and Sort. Table-owned column customizer and data-mode actions remain in the table caption trailing cluster.",
|
|
9621
9916
|
"Tab order follows authored DOM order. The toolbar does not add roving focus because it may contain heterogeneous form and popup controls."
|
|
9622
9917
|
],
|
|
9623
9918
|
"states": [
|
|
9624
|
-
"The component owns layout only.
|
|
9625
|
-
"
|
|
9919
|
+
"The component owns layout only. It never mutates slotted control props, values, menus, loading, persistence, or consequences. Use ds-table-saved-views and ds-table-filter when those interactions need the shared CompoMo behavior while application data and persistence remain external.",
|
|
9920
|
+
"The start cluster is followed by a decorative vertical divider, then the spanning middle region. The start cluster and divider hide when nothing is projected. Search is a dedicated slot that hides when nothing is projected. Empty leading or trailing clusters add no placeholder chrome. The middle region occupies remaining width so trailing controls stay at its inline end.",
|
|
9921
|
+
"Column customizer and data-mode switching stay table-owned caption actions. Do not recreate those menus in the toolbar."
|
|
9626
9922
|
],
|
|
9627
9923
|
"responsiveBehavior": [
|
|
9628
|
-
"The
|
|
9924
|
+
"The start cluster, search, trailing Filter/Group/Sort, and table caption trailing actions stay on one line. Saved views hug their current trigger content up to the compact menu-width token rather than reserving that full width; long names truncate while the dirty dot stays visible. Filter, Group, and Sort triggers cap at the same token, and Group and Sort popups keep that compact menu-width floor. The toolbar horizontally scrolls when its complete controls no longer fit.",
|
|
9925
|
+
"Inside a named ds-table container narrower than 900px, ds-table-filter and ds-table-sort omit their labels and chevrons and become icon-only. Group controls explicitly opt into the same treatment with collapseLabel. Active filtering or grouping promotes the prefix icon to primary. Sort keeps resting secondary chrome. Table-owned Customize also becomes the icon-only Table menu button at that width.",
|
|
9629
9926
|
"The scrollbar is visually suppressed without removing touch, trackpad, mouse-wheel, or keyboard scrolling from the overflow container.",
|
|
9630
9927
|
"Trailing controls remain grouped after leading controls; the toolbar does not collapse controls into an application-specific overflow menu."
|
|
9631
9928
|
],
|
|
9632
9929
|
"frameworkCaveats": {
|
|
9633
9930
|
"customElements": [
|
|
9634
|
-
"Project controls through slot=leading
|
|
9931
|
+
"Project saved views through slot=start, search through slot=search, additional left-side middle controls through slot=leading, and ds-table-filter, Group, and ds-table-sort through slot=trailing. Set collapseLabel on the Group control and provide contextual accessible names when Table controls is insufficient."
|
|
9635
9932
|
],
|
|
9636
9933
|
"react": [
|
|
9637
|
-
"Set slot=leading or slot=trailing on each child control
|
|
9934
|
+
"Set slot=start, slot=search, slot=leading, or slot=trailing on each child control. Use ds-table-filter for the standard Filter recipe, opt Group into collapseLabel, and keep values and event handlers in the application."
|
|
9638
9935
|
],
|
|
9639
9936
|
"angular": [
|
|
9640
|
-
"Set slot=leading or slot=trailing on each child control
|
|
9937
|
+
"Set slot=start, slot=search, slot=leading, or slot=trailing on each child control, use DsTableFilter for the standard Filter recipe, opt Group into collapseLabel, and import the generated adapters."
|
|
9641
9938
|
]
|
|
9642
9939
|
},
|
|
9643
9940
|
"references": [
|
|
@@ -9670,7 +9967,9 @@
|
|
|
9670
9967
|
"@ds-mo/ui",
|
|
9671
9968
|
"@ds-mo/tokens"
|
|
9672
9969
|
],
|
|
9673
|
-
"registryDependencies": [
|
|
9970
|
+
"registryDependencies": [
|
|
9971
|
+
"divider"
|
|
9972
|
+
]
|
|
9674
9973
|
},
|
|
9675
9974
|
{
|
|
9676
9975
|
"name": "tag",
|