@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
package/dist/.package-ready.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":1,"package":"@ds-mo/ui","version":"14.
|
|
1
|
+
{"schemaVersion":1,"package":"@ds-mo/ui","version":"14.17.0","components":75,"digest":"164c8b7610af73d99625b60558788633e533c03a5a440431ef40724142b3e164","completedAt":"2026-08-25T15:33:04.025Z"}
|
package/dist/agent-patterns.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "14.
|
|
4
|
+
"packageVersion": "14.17.0",
|
|
5
5
|
"kind": "patterns",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -476,7 +476,7 @@
|
|
|
476
476
|
"accessibility": [
|
|
477
477
|
"A button either has a menu or is a menu, and the trigger's variant selects between the two shapes.",
|
|
478
478
|
"Has a menu: a label or icon-label action that opens a menu. Set hasMenu, which implies aria-haspopup of menu and renders the trailing chevron that communicates the popup. Both button primitives support this shape.",
|
|
479
|
-
"Is a menu: an icon-only control. Set hasMenu, which adds no chevron, so the glyph must convey the menu alone. Use Ellipses for generic more-options or overflow. Use a specific icon when the menu has a named purpose, such as
|
|
479
|
+
"Is a menu: an icon-only control. Set hasMenu, which adds no chevron, so the glyph must convey the menu alone. Use Ellipses for generic more-options or overflow. Use a specific icon when the menu has a named purpose, such as Table for Customize table. Only ButtonUnfilled carries this shape, because the role is chrome rather than a primary action.",
|
|
480
480
|
"Set controls to the Menu id and expanded from the same open state passed to Menu.",
|
|
481
481
|
"Give an icon-only trigger an accessible name that states the role, such as More options or Customize table, because no visible label or chevron carries it.",
|
|
482
482
|
"Use haspopup directly instead of hasMenu for a non-menu popup such as a listbox or dialog; those cases get no chevron.",
|
|
@@ -502,7 +502,7 @@
|
|
|
502
502
|
{
|
|
503
503
|
"path": "view-menu.html",
|
|
504
504
|
"language": "html",
|
|
505
|
-
"content": "<ds-button-unfilled\n id=\"view-menu-trigger\"\n label=\"View · Overview\"\n has-menu\n controls=\"view-menu\"\n></ds-button-unfilled>\n<ds-menu\n id=\"view-menu\"\n anchor-id=\"view-menu-trigger\"\n menu-label=\"Choose view\"\n></ds-menu>\n\n<!-- Overflow shape: Ellipses means more options, so no chevron is added. -->\n<ds-button-unfilled\n id=\"row-menu-trigger\"\n variant=\"icon\"\n icon=\"Ellipses\"\n aria-label=\"More options\"\n has-menu\n controls=\"row-menu\"\n></ds-button-unfilled>\n<ds-menu\n id=\"row-menu\"\n anchor-id=\"row-menu-trigger\"\n menu-label=\"More options\"\n align=\"end\"\n></ds-menu>\n\n<!-- Named menu:
|
|
505
|
+
"content": "<ds-button-unfilled\n id=\"view-menu-trigger\"\n label=\"View · Overview\"\n has-menu\n controls=\"view-menu\"\n></ds-button-unfilled>\n<ds-menu\n id=\"view-menu\"\n anchor-id=\"view-menu-trigger\"\n menu-label=\"Choose view\"\n></ds-menu>\n\n<!-- Overflow shape: Ellipses means more options, so no chevron is added. -->\n<ds-button-unfilled\n id=\"row-menu-trigger\"\n variant=\"icon\"\n icon=\"Ellipses\"\n aria-label=\"More options\"\n has-menu\n controls=\"row-menu\"\n></ds-button-unfilled>\n<ds-menu\n id=\"row-menu\"\n anchor-id=\"row-menu-trigger\"\n menu-label=\"More options\"\n align=\"end\"\n></ds-menu>\n\n<!-- Named menu: icon-label carries the visible name. -->\n<ds-button-unfilled\n id=\"customize-menu-trigger\"\n variant=\"icon-label\"\n icon=\"Table\"\n label=\"Customize\"\n aria-label=\"Customize table\"\n has-menu\n controls=\"customize-menu\"\n></ds-button-unfilled>\n<ds-menu\n id=\"customize-menu\"\n anchor-id=\"customize-menu-trigger\"\n menu-label=\"Customize table\"\n align=\"end\"\n></ds-menu>"
|
|
506
506
|
},
|
|
507
507
|
{
|
|
508
508
|
"path": "view-menu.ts",
|
package/dist/agent.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "14.
|
|
4
|
+
"packageVersion": "14.17.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -1978,7 +1978,7 @@
|
|
|
1978
1978
|
"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.",
|
|
1979
1979
|
"A true pressed toggle and owner-controlled isActive emphasis share the selected visual treatment, but only pressed supplies toggle semantics and dsChange.",
|
|
1980
1980
|
"General content UI keeps the selected interaction fill and border for pressed or active emphasis.",
|
|
1981
|
-
"Shell, navigation, and tool-rail composites use isActive with foreground
|
|
1981
|
+
"Shell, navigation, and tool-rail composites use isActive with primary foreground across the complete control and no selected fill or border.",
|
|
1982
1982
|
"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.",
|
|
1983
1983
|
"Surface context must match the actual parent surface; translucent, inverted, media, and always-dark treatments are reserved for those surfaces.",
|
|
1984
1984
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
@@ -1986,11 +1986,12 @@
|
|
|
1986
1986
|
"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.",
|
|
1987
1987
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
1988
1988
|
"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.",
|
|
1989
|
-
"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
|
|
1989
|
+
"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.",
|
|
1990
1990
|
"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."
|
|
1991
1991
|
],
|
|
1992
1992
|
"responsiveBehavior": [
|
|
1993
|
-
"The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants.",
|
|
1993
|
+
"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.",
|
|
1994
|
+
"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.",
|
|
1994
1995
|
"Use fill width only when the parent layout requires a full-width secondary action."
|
|
1995
1996
|
],
|
|
1996
1997
|
"frameworkCaveats": {
|
|
@@ -2026,6 +2027,10 @@
|
|
|
2026
2027
|
"type": "ButtonUnfilledBackground | undefined",
|
|
2027
2028
|
"required": false
|
|
2028
2029
|
},
|
|
2030
|
+
"collapseLabel": {
|
|
2031
|
+
"type": "boolean",
|
|
2032
|
+
"required": false
|
|
2033
|
+
},
|
|
2029
2034
|
"controls": {
|
|
2030
2035
|
"type": "string | undefined",
|
|
2031
2036
|
"required": false
|
|
@@ -3831,6 +3836,7 @@
|
|
|
3831
3836
|
],
|
|
3832
3837
|
"responsiveBehavior": [
|
|
3833
3838
|
"The popup defaults to the large menu-width token and clamps to the viewport.",
|
|
3839
|
+
"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.",
|
|
3834
3840
|
"Both panes remain visible at narrow widths, with a smaller category minimum and reduced option-pane padding.",
|
|
3835
3841
|
"Treat side as preferred placement; the popup flips and clamps when viewport collision requires it."
|
|
3836
3842
|
],
|
|
@@ -3890,6 +3896,10 @@
|
|
|
3890
3896
|
"type": "string",
|
|
3891
3897
|
"required": false
|
|
3892
3898
|
},
|
|
3899
|
+
"collapseLabel": {
|
|
3900
|
+
"type": "boolean",
|
|
3901
|
+
"required": false
|
|
3902
|
+
},
|
|
3893
3903
|
"filters": {
|
|
3894
3904
|
"type": "FilterMenuFilter[]",
|
|
3895
3905
|
"required": false
|
|
@@ -4403,6 +4413,7 @@
|
|
|
4403
4413
|
],
|
|
4404
4414
|
"states": [
|
|
4405
4415
|
"Loader communicates indeterminate progress only and does not emit completion or failure events.",
|
|
4416
|
+
"The segmented glyph rotates clockwise, with its opacity ramp trailing the leading arc.",
|
|
4406
4417
|
"Omitted color inherits currentColor. Explicit semantic aliases and CSS-variable references match Icon when an independent progress color is required.",
|
|
4407
4418
|
"Nested Loader inherits a readable color from its owning busy control or region rather than selecting tertiary or quaternary directly.",
|
|
4408
4419
|
"The owner decides whether to delay Loader visibility for short operations and removes it when the operation settles.",
|
|
@@ -7210,7 +7221,7 @@
|
|
|
7210
7221
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
7211
7222
|
"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.",
|
|
7212
7223
|
"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.",
|
|
7213
|
-
"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.",
|
|
7224
|
+
"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.",
|
|
7214
7225
|
"While the popup is open, the trigger holds the pressed interaction wash without changing its resting foreground or selected-value treatment.",
|
|
7215
7226
|
"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.",
|
|
7216
7227
|
"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.",
|
|
@@ -7226,6 +7237,7 @@
|
|
|
7226
7237
|
],
|
|
7227
7238
|
"responsiveBehavior": [
|
|
7228
7239
|
"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.",
|
|
7240
|
+
"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.",
|
|
7229
7241
|
"The popup matches the trigger minimum width, may grow for content, and clamps to the viewport.",
|
|
7230
7242
|
"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.",
|
|
7231
7243
|
"Long option collections scroll inside the popup; virtualization and remote search are not part of this component."
|
|
@@ -7285,6 +7297,10 @@
|
|
|
7285
7297
|
"type": "string",
|
|
7286
7298
|
"required": false
|
|
7287
7299
|
},
|
|
7300
|
+
"collapseLabel": {
|
|
7301
|
+
"type": "boolean",
|
|
7302
|
+
"required": false
|
|
7303
|
+
},
|
|
7288
7304
|
"disabled": {
|
|
7289
7305
|
"type": "boolean",
|
|
7290
7306
|
"required": false
|
|
@@ -8838,6 +8854,8 @@
|
|
|
8838
8854
|
"component:ds-pagination",
|
|
8839
8855
|
"component:ds-table-toolbar",
|
|
8840
8856
|
"component:ds-table-saved-views",
|
|
8857
|
+
"component:ds-table-filter",
|
|
8858
|
+
"component:ds-table-sort",
|
|
8841
8859
|
"component:ds-bar-action",
|
|
8842
8860
|
"component:ds-button-unfilled",
|
|
8843
8861
|
"component:ds-menu",
|
|
@@ -8849,10 +8867,10 @@
|
|
|
8849
8867
|
"pattern:menu-trigger"
|
|
8850
8868
|
],
|
|
8851
8869
|
"accessibility": [
|
|
8852
|
-
"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
|
|
8853
|
-
"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.",
|
|
8870
|
+
"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.",
|
|
8871
|
+
"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.",
|
|
8854
8872
|
"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.",
|
|
8855
|
-
"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.",
|
|
8873
|
+
"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.",
|
|
8856
8874
|
"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.",
|
|
8857
8875
|
"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.",
|
|
8858
8876
|
"Scrollable table regions become keyboard focusable and named only when overflow exists.",
|
|
@@ -8860,7 +8878,7 @@
|
|
|
8860
8878
|
"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."
|
|
8861
8879
|
],
|
|
8862
8880
|
"states": [
|
|
8863
|
-
"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
|
|
8881
|
+
"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.",
|
|
8864
8882
|
"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.",
|
|
8865
8883
|
"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.",
|
|
8866
8884
|
"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.",
|
|
@@ -8875,6 +8893,7 @@
|
|
|
8875
8893
|
],
|
|
8876
8894
|
"responsiveBehavior": [
|
|
8877
8895
|
"The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
|
|
8896
|
+
"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.",
|
|
8878
8897
|
"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.",
|
|
8879
8898
|
"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.",
|
|
8880
8899
|
"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.",
|
|
@@ -8888,7 +8907,7 @@
|
|
|
8888
8907
|
"Assign columns, rows, groups, grouping, sort, selectedRowIds, collapsedGroupIds, hiddenColumnIds, columnOrder, pagination, displayedCount, and totalCount through JavaScript properties rather than HTML attribute strings.",
|
|
8889
8908
|
"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.",
|
|
8890
8909
|
"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.",
|
|
8891
|
-
"When columnCustomizer is enabled, the
|
|
8910
|
+
"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.",
|
|
8892
8911
|
"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.",
|
|
8893
8912
|
"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."
|
|
8894
8913
|
],
|
|
@@ -9221,6 +9240,160 @@
|
|
|
9221
9240
|
"tooltip"
|
|
9222
9241
|
]
|
|
9223
9242
|
},
|
|
9243
|
+
{
|
|
9244
|
+
"id": "component:ds-table-filter",
|
|
9245
|
+
"tag": "ds-table-filter",
|
|
9246
|
+
"name": "table-filter",
|
|
9247
|
+
"title": "TableFilter",
|
|
9248
|
+
"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.",
|
|
9249
|
+
"intentStatus": "complete",
|
|
9250
|
+
"intent": {
|
|
9251
|
+
"audience": "general",
|
|
9252
|
+
"status": "stable",
|
|
9253
|
+
"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.",
|
|
9254
|
+
"useWhen": [
|
|
9255
|
+
"A table toolbar should expose the standard singular Filter control and shared filter-menu interaction.",
|
|
9256
|
+
"A product supplies filter definitions and controlled values but should not recreate the toolbar trigger, selected count, category navigation, or responsive treatment."
|
|
9257
|
+
],
|
|
9258
|
+
"avoidWhen": [
|
|
9259
|
+
"Filtering is unrelated to a table or structured result set; use ds-filter-menu directly.",
|
|
9260
|
+
"The application expects the component to filter, fetch, persist, or otherwise transform rows.",
|
|
9261
|
+
"A filter requires a product-specific editor that the shared filter category kinds cannot represent."
|
|
9262
|
+
],
|
|
9263
|
+
"alternatives": [
|
|
9264
|
+
{
|
|
9265
|
+
"when": "A non-table surface needs the generic filter interaction or custom trigger recipe.",
|
|
9266
|
+
"component": "component:ds-filter-menu",
|
|
9267
|
+
"reason": "FilterMenu exposes generic trigger geometry and popup positioning rather than the fixed table-toolbar recipe."
|
|
9268
|
+
}
|
|
9269
|
+
],
|
|
9270
|
+
"commonlyComposedWith": [
|
|
9271
|
+
"component:ds-table",
|
|
9272
|
+
"component:ds-table-toolbar",
|
|
9273
|
+
"component:ds-table-saved-views",
|
|
9274
|
+
"component:ds-table-sort",
|
|
9275
|
+
"component:ds-filter-menu"
|
|
9276
|
+
],
|
|
9277
|
+
"patterns": [
|
|
9278
|
+
"pattern:menu-trigger"
|
|
9279
|
+
],
|
|
9280
|
+
"accessibility": [
|
|
9281
|
+
"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.",
|
|
9282
|
+
"The popup retains ds-filter-menu category navigation, option semantics, focus entry, dismissal, and focus return.",
|
|
9283
|
+
"Localize label, menuLabel, categoriesLabel, and clearLabel together so visible and accessible wording remains consistent."
|
|
9284
|
+
],
|
|
9285
|
+
"states": [
|
|
9286
|
+
"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.",
|
|
9287
|
+
"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.",
|
|
9288
|
+
"Popup visibility follows the same mutable open and dsOpenChange contract as ds-filter-menu."
|
|
9289
|
+
],
|
|
9290
|
+
"responsiveBehavior": [
|
|
9291
|
+
"Place the control in the trailing region of ds-table-toolbar.",
|
|
9292
|
+
"Inside a named ds-table container narrower than 900px, the trigger becomes icon-only and active criteria promote the Filters icon to primary."
|
|
9293
|
+
],
|
|
9294
|
+
"frameworkCaveats": {
|
|
9295
|
+
"customElements": [
|
|
9296
|
+
"Assign filters, values, and activeFilterId as JavaScript properties. Replace controlled values in response to dsChange and dsClear."
|
|
9297
|
+
],
|
|
9298
|
+
"react": [
|
|
9299
|
+
"Keep filters and values in application state and replace values from the typed dsChange and dsClear events."
|
|
9300
|
+
],
|
|
9301
|
+
"angular": [
|
|
9302
|
+
"Import the generated DsTableFilter adapter, bind filters and values, and handle dsChange, dsClear, and dsActiveFilterChange."
|
|
9303
|
+
]
|
|
9304
|
+
},
|
|
9305
|
+
"references": [
|
|
9306
|
+
{
|
|
9307
|
+
"label": "Storybook review states",
|
|
9308
|
+
"path": "src/wc/components/TableFilter/TableFilter.stories.ts"
|
|
9309
|
+
},
|
|
9310
|
+
{
|
|
9311
|
+
"label": "Toolbar composition owner",
|
|
9312
|
+
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
9313
|
+
}
|
|
9314
|
+
]
|
|
9315
|
+
},
|
|
9316
|
+
"api": {
|
|
9317
|
+
"props": {
|
|
9318
|
+
"activeFilterId": {
|
|
9319
|
+
"type": "string | undefined",
|
|
9320
|
+
"required": false
|
|
9321
|
+
},
|
|
9322
|
+
"ariaLabel": {
|
|
9323
|
+
"type": "string | null",
|
|
9324
|
+
"required": false
|
|
9325
|
+
},
|
|
9326
|
+
"categoriesLabel": {
|
|
9327
|
+
"type": "string",
|
|
9328
|
+
"required": false
|
|
9329
|
+
},
|
|
9330
|
+
"clearLabel": {
|
|
9331
|
+
"type": "string",
|
|
9332
|
+
"required": false
|
|
9333
|
+
},
|
|
9334
|
+
"filters": {
|
|
9335
|
+
"type": "FilterMenuFilter[]",
|
|
9336
|
+
"required": false
|
|
9337
|
+
},
|
|
9338
|
+
"label": {
|
|
9339
|
+
"type": "string",
|
|
9340
|
+
"required": false
|
|
9341
|
+
},
|
|
9342
|
+
"menuLabel": {
|
|
9343
|
+
"type": "string | null",
|
|
9344
|
+
"required": false
|
|
9345
|
+
},
|
|
9346
|
+
"open": {
|
|
9347
|
+
"type": "boolean",
|
|
9348
|
+
"required": false
|
|
9349
|
+
},
|
|
9350
|
+
"values": {
|
|
9351
|
+
"type": "FilterMenuValues",
|
|
9352
|
+
"required": false
|
|
9353
|
+
}
|
|
9354
|
+
},
|
|
9355
|
+
"events": [
|
|
9356
|
+
{
|
|
9357
|
+
"name": "dsActiveFilterChange",
|
|
9358
|
+
"detail": "string"
|
|
9359
|
+
},
|
|
9360
|
+
{
|
|
9361
|
+
"name": "dsAfterClose",
|
|
9362
|
+
"detail": "void"
|
|
9363
|
+
},
|
|
9364
|
+
{
|
|
9365
|
+
"name": "dsChange",
|
|
9366
|
+
"detail": "FilterMenuChangeDetail"
|
|
9367
|
+
},
|
|
9368
|
+
{
|
|
9369
|
+
"name": "dsClear",
|
|
9370
|
+
"detail": "void"
|
|
9371
|
+
},
|
|
9372
|
+
{
|
|
9373
|
+
"name": "dsClose",
|
|
9374
|
+
"detail": "void"
|
|
9375
|
+
},
|
|
9376
|
+
{
|
|
9377
|
+
"name": "dsOpenChange",
|
|
9378
|
+
"detail": "boolean"
|
|
9379
|
+
}
|
|
9380
|
+
],
|
|
9381
|
+
"slots": []
|
|
9382
|
+
},
|
|
9383
|
+
"exports": {
|
|
9384
|
+
"customElement": "ds-table-filter",
|
|
9385
|
+
"react": "DsTableFilter",
|
|
9386
|
+
"vue": "DsTableFilter",
|
|
9387
|
+
"angular": "DsTableFilter"
|
|
9388
|
+
},
|
|
9389
|
+
"dependencies": [
|
|
9390
|
+
"@ds-mo/ui",
|
|
9391
|
+
"@ds-mo/tokens"
|
|
9392
|
+
],
|
|
9393
|
+
"componentDependencies": [
|
|
9394
|
+
"filter-menu"
|
|
9395
|
+
]
|
|
9396
|
+
},
|
|
9224
9397
|
{
|
|
9225
9398
|
"id": "component:ds-table-saved-views",
|
|
9226
9399
|
"tag": "ds-table-saved-views",
|
|
@@ -9261,8 +9434,8 @@
|
|
|
9261
9434
|
"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."
|
|
9262
9435
|
],
|
|
9263
9436
|
"responsiveBehavior": [
|
|
9264
|
-
"The control remains a single toolbar item and relies on Select, Menu, and Modal collision and viewport behavior. Its choice popup keeps
|
|
9265
|
-
"Place it in the
|
|
9437
|
+
"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.",
|
|
9438
|
+
"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."
|
|
9266
9439
|
],
|
|
9267
9440
|
"frameworkCaveats": {
|
|
9268
9441
|
"customElements": [
|
|
@@ -9369,19 +9542,132 @@
|
|
|
9369
9542
|
"select"
|
|
9370
9543
|
]
|
|
9371
9544
|
},
|
|
9545
|
+
{
|
|
9546
|
+
"id": "component:ds-table-sort",
|
|
9547
|
+
"tag": "ds-table-sort",
|
|
9548
|
+
"name": "table-sort",
|
|
9549
|
+
"title": "TableSort",
|
|
9550
|
+
"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.",
|
|
9551
|
+
"intentStatus": "complete",
|
|
9552
|
+
"intent": {
|
|
9553
|
+
"audience": "general",
|
|
9554
|
+
"status": "stable",
|
|
9555
|
+
"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.",
|
|
9556
|
+
"useWhen": [
|
|
9557
|
+
"A table toolbar needs an explicit Sort control alongside Filter and Group.",
|
|
9558
|
+
"Sortable columns or compound header segments should be choosable without relying only on column-header clicks."
|
|
9559
|
+
],
|
|
9560
|
+
"avoidWhen": [
|
|
9561
|
+
"The table has no sortable columns; the control hides itself.",
|
|
9562
|
+
"The application expects the control to sort rows internally or persist preferences.",
|
|
9563
|
+
"The popup should submit a form value; use Select."
|
|
9564
|
+
],
|
|
9565
|
+
"alternatives": [
|
|
9566
|
+
{
|
|
9567
|
+
"when": "The choice is one submitted form value.",
|
|
9568
|
+
"component": "component:ds-select",
|
|
9569
|
+
"reason": "Select owns form-value and listbox semantics, not table sort state."
|
|
9570
|
+
}
|
|
9571
|
+
],
|
|
9572
|
+
"commonlyComposedWith": [
|
|
9573
|
+
"component:ds-table",
|
|
9574
|
+
"component:ds-table-toolbar",
|
|
9575
|
+
"component:ds-table-filter",
|
|
9576
|
+
"component:ds-select",
|
|
9577
|
+
"component:ds-button-unfilled",
|
|
9578
|
+
"component:ds-menu"
|
|
9579
|
+
],
|
|
9580
|
+
"patterns": [
|
|
9581
|
+
"pattern:menu-trigger"
|
|
9582
|
+
],
|
|
9583
|
+
"accessibility": [
|
|
9584
|
+
"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.",
|
|
9585
|
+
"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.",
|
|
9586
|
+
"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."
|
|
9587
|
+
],
|
|
9588
|
+
"states": [
|
|
9589
|
+
"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.",
|
|
9590
|
+
"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.",
|
|
9591
|
+
"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.",
|
|
9592
|
+
"Compound sortable headers contribute one Data row per segment. Action columns never appear."
|
|
9593
|
+
],
|
|
9594
|
+
"responsiveBehavior": [
|
|
9595
|
+
"Place the control in the trailing region of ds-table-toolbar with Filter and Group.",
|
|
9596
|
+
"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."
|
|
9597
|
+
],
|
|
9598
|
+
"frameworkCaveats": {
|
|
9599
|
+
"customElements": [
|
|
9600
|
+
"Assign columns and sort as JavaScript properties. Replace sort from both dsSortChange on this control and dsSortChange on the table."
|
|
9601
|
+
],
|
|
9602
|
+
"react": [
|
|
9603
|
+
"Keep one sort state and pass it to both ds-table and ds-table-sort; update it from either event."
|
|
9604
|
+
],
|
|
9605
|
+
"angular": [
|
|
9606
|
+
"Import the generated DsTableSort adapter, bind columns and sort, and handle dsSortChange with the same owner that handles table header sorting."
|
|
9607
|
+
]
|
|
9608
|
+
},
|
|
9609
|
+
"references": [
|
|
9610
|
+
{
|
|
9611
|
+
"label": "Storybook review states",
|
|
9612
|
+
"path": "src/wc/components/TableSort/TableSort.stories.ts"
|
|
9613
|
+
},
|
|
9614
|
+
{
|
|
9615
|
+
"label": "Toolbar composition owner",
|
|
9616
|
+
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
9617
|
+
}
|
|
9618
|
+
]
|
|
9619
|
+
},
|
|
9620
|
+
"api": {
|
|
9621
|
+
"props": {
|
|
9622
|
+
"ariaLabel": {
|
|
9623
|
+
"type": "string | null",
|
|
9624
|
+
"required": false
|
|
9625
|
+
},
|
|
9626
|
+
"columns": {
|
|
9627
|
+
"type": "TableColumn[]",
|
|
9628
|
+
"required": false
|
|
9629
|
+
},
|
|
9630
|
+
"sort": {
|
|
9631
|
+
"type": "TableSortState | null",
|
|
9632
|
+
"required": false
|
|
9633
|
+
}
|
|
9634
|
+
},
|
|
9635
|
+
"events": [
|
|
9636
|
+
{
|
|
9637
|
+
"name": "dsSortChange",
|
|
9638
|
+
"detail": "TableSortChangeDetail"
|
|
9639
|
+
}
|
|
9640
|
+
],
|
|
9641
|
+
"slots": []
|
|
9642
|
+
},
|
|
9643
|
+
"exports": {
|
|
9644
|
+
"customElement": "ds-table-sort",
|
|
9645
|
+
"react": "DsTableSort",
|
|
9646
|
+
"vue": "DsTableSort",
|
|
9647
|
+
"angular": "DsTableSort"
|
|
9648
|
+
},
|
|
9649
|
+
"dependencies": [
|
|
9650
|
+
"@ds-mo/ui",
|
|
9651
|
+
"@ds-mo/tokens"
|
|
9652
|
+
],
|
|
9653
|
+
"componentDependencies": [
|
|
9654
|
+
"button-unfilled",
|
|
9655
|
+
"menu"
|
|
9656
|
+
]
|
|
9657
|
+
},
|
|
9372
9658
|
{
|
|
9373
9659
|
"id": "component:ds-table-toolbar",
|
|
9374
9660
|
"tag": "ds-table-toolbar",
|
|
9375
9661
|
"name": "table-toolbar",
|
|
9376
9662
|
"title": "TableToolbar",
|
|
9377
|
-
"summary": "Data-agnostic companion layout for application-owned controls
|
|
9663
|
+
"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.",
|
|
9378
9664
|
"intentStatus": "complete",
|
|
9379
9665
|
"intent": {
|
|
9380
9666
|
"audience": "general",
|
|
9381
9667
|
"status": "stable",
|
|
9382
|
-
"summary": "Data-agnostic companion layout for application-owned controls
|
|
9668
|
+
"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.",
|
|
9383
9669
|
"useWhen": [
|
|
9384
|
-
"Several table pages repeat the same
|
|
9670
|
+
"Several table pages repeat the same saved-view cluster, middle discovery and result-shaping controls, and table-owned caption actions.",
|
|
9385
9671
|
"A ds-table header slot needs consistent control spacing, alignment, grouping, and narrow-width overflow without moving product behavior into the table."
|
|
9386
9672
|
],
|
|
9387
9673
|
"avoidWhen": [
|
|
@@ -9392,34 +9678,39 @@
|
|
|
9392
9678
|
"commonlyComposedWith": [
|
|
9393
9679
|
"component:ds-table",
|
|
9394
9680
|
"component:ds-table-saved-views",
|
|
9681
|
+
"component:ds-divider",
|
|
9395
9682
|
"component:ds-input",
|
|
9396
|
-
"component:ds-filter
|
|
9683
|
+
"component:ds-table-filter",
|
|
9684
|
+
"component:ds-select",
|
|
9685
|
+
"component:ds-table-sort",
|
|
9397
9686
|
"component:ds-button-unfilled"
|
|
9398
9687
|
],
|
|
9399
9688
|
"patterns": [],
|
|
9400
9689
|
"accessibility": [
|
|
9401
9690
|
"The component exposes a named toolbar while each slotted control retains its own accessible name and native keyboard behavior.",
|
|
9402
|
-
"Use the
|
|
9691
|
+
"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.",
|
|
9403
9692
|
"Tab order follows authored DOM order. The toolbar does not add roving focus because it may contain heterogeneous form and popup controls."
|
|
9404
9693
|
],
|
|
9405
9694
|
"states": [
|
|
9406
|
-
"The component owns layout only.
|
|
9407
|
-
"
|
|
9695
|
+
"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.",
|
|
9696
|
+
"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.",
|
|
9697
|
+
"Column customizer and data-mode switching stay table-owned caption actions. Do not recreate those menus in the toolbar."
|
|
9408
9698
|
],
|
|
9409
9699
|
"responsiveBehavior": [
|
|
9410
|
-
"The
|
|
9700
|
+
"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.",
|
|
9701
|
+
"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.",
|
|
9411
9702
|
"The scrollbar is visually suppressed without removing touch, trackpad, mouse-wheel, or keyboard scrolling from the overflow container.",
|
|
9412
9703
|
"Trailing controls remain grouped after leading controls; the toolbar does not collapse controls into an application-specific overflow menu."
|
|
9413
9704
|
],
|
|
9414
9705
|
"frameworkCaveats": {
|
|
9415
9706
|
"customElements": [
|
|
9416
|
-
"Project controls through slot=leading
|
|
9707
|
+
"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."
|
|
9417
9708
|
],
|
|
9418
9709
|
"react": [
|
|
9419
|
-
"Set slot=leading or slot=trailing on each child control
|
|
9710
|
+
"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."
|
|
9420
9711
|
],
|
|
9421
9712
|
"angular": [
|
|
9422
|
-
"Set slot=leading or slot=trailing on each child control
|
|
9713
|
+
"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."
|
|
9423
9714
|
]
|
|
9424
9715
|
},
|
|
9425
9716
|
"references": [
|
|
@@ -9453,7 +9744,9 @@
|
|
|
9453
9744
|
"@ds-mo/ui",
|
|
9454
9745
|
"@ds-mo/tokens"
|
|
9455
9746
|
],
|
|
9456
|
-
"componentDependencies": [
|
|
9747
|
+
"componentDependencies": [
|
|
9748
|
+
"divider"
|
|
9749
|
+
]
|
|
9457
9750
|
},
|
|
9458
9751
|
{
|
|
9459
9752
|
"id": "component:ds-tag",
|
|
@@ -9,7 +9,7 @@ export declare class DsButtonUnfilled {
|
|
|
9
9
|
dsChange: EventEmitter<DsButtonUnfilledCustomEvent<boolean>>;
|
|
10
10
|
constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<DsButtonUnfilled, never>;
|
|
12
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DsButtonUnfilled, "ds-button-unfilled", never, { "activeFill": { "alias": "activeFill"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "background": { "alias": "background"; "required": false; }; "controls": { "alias": "controls"; "required": false; }; "dot": { "alias": "dot"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "focusTabIndex": { "alias": "focusTabIndex"; "required": false; }; "hasBorder": { "alias": "hasBorder"; "required": false; }; "hasMenu": { "alias": "hasMenu"; "required": false; }; "haspopup": { "alias": "haspopup"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "insetDepth": { "alias": "insetDepth"; "required": false; }; "isActive": { "alias": "isActive"; "required": false; }; "isInactive": { "alias": "isInactive"; "required": false; }; "isInset": { "alias": "isInset"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "label": { "alias": "label"; "required": false; }; "pressScale": { "alias": "pressScale"; "required": false; }; "pressed": { "alias": "pressed"; "required": false; }; "rounded": { "alias": "rounded"; "required": false; }; "size": { "alias": "size"; "required": false; }; "type": { "alias": "type"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, { "dsClick": "dsClick"; "dsChange": "dsChange"; }, never, ["*"], true, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DsButtonUnfilled, "ds-button-unfilled", never, { "activeFill": { "alias": "activeFill"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "background": { "alias": "background"; "required": false; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; }; "controls": { "alias": "controls"; "required": false; }; "dot": { "alias": "dot"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "focusTabIndex": { "alias": "focusTabIndex"; "required": false; }; "hasBorder": { "alias": "hasBorder"; "required": false; }; "hasMenu": { "alias": "hasMenu"; "required": false; }; "haspopup": { "alias": "haspopup"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "insetDepth": { "alias": "insetDepth"; "required": false; }; "isActive": { "alias": "isActive"; "required": false; }; "isInactive": { "alias": "isInactive"; "required": false; }; "isInset": { "alias": "isInset"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "label": { "alias": "label"; "required": false; }; "pressScale": { "alias": "pressScale"; "required": false; }; "pressed": { "alias": "pressed"; "required": false; }; "rounded": { "alias": "rounded"; "required": false; }; "size": { "alias": "size"; "required": false; }; "type": { "alias": "type"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, { "dsClick": "dsClick"; "dsChange": "dsChange"; }, never, ["*"], true, never>;
|
|
13
13
|
}
|
|
14
14
|
export declare interface DsButtonUnfilled extends Components.DsButtonUnfilled {
|
|
15
15
|
dsClick: EventEmitter<DsButtonUnfilledCustomEvent<MouseEvent>>;
|