@ds-mo/ui 13.17.0 → 13.18.1
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 +2 -2
- package/dist/agent.json +274 -25
- package/dist/angular/ds-filter-menu.d.ts +44 -0
- package/dist/angular/ds-filter-menu.js +57 -0
- package/dist/angular/ds-select.d.ts +12 -1
- package/dist/angular/ds-select.js +10 -4
- package/dist/angular/ds-table.d.ts +1 -4
- package/dist/angular/ds-table.js +2 -5
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -0
- package/dist/angular/proxies.d.ts +1 -0
- package/dist/angular/proxies.js +1 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-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-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-filter-menu.d.ts +11 -0
- package/dist/components/ds-filter-menu.js +2 -0
- package/dist/components/ds-filter-menu.js.map +1 -0
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-input.js.map +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-modal.js.map +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-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table.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-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/p-B-CVaYE6.js +2 -0
- package/dist/components/{p-D9FdOR_m.js.map → p-B-CVaYE6.js.map} +1 -1
- package/dist/components/p-BAgjMUt3.js +2 -0
- package/dist/components/p-BAgjMUt3.js.map +1 -0
- package/dist/components/{p-CdKz-QT2.js → p-BCfgU8Fh.js} +2 -2
- package/dist/components/{p-CsXC1cHI.js → p-BDsAON4I.js} +2 -2
- package/dist/components/{p-GWUTrIlk.js → p-BOCrvs-v.js} +2 -2
- package/dist/components/{p-B69Re7HW.js → p-BOjGzd5N.js} +2 -2
- package/dist/components/{p-BAAjiAIF.js → p-BQkZ8FIl.js} +2 -2
- package/dist/components/p-BUAJ5TD7.js +2 -0
- package/dist/components/p-BUAJ5TD7.js.map +1 -0
- package/dist/components/p-BaiGt_o6.js +2 -0
- package/dist/components/{p-D4jQy3Ps.js.map → p-BaiGt_o6.js.map} +1 -1
- package/dist/components/p-BhOjnMLG.js +2 -0
- package/dist/components/p-BhOjnMLG.js.map +1 -0
- package/dist/components/p-BqFKxWVl.js +2 -0
- package/dist/components/p-BqFKxWVl.js.map +1 -0
- package/dist/components/p-ByNAXs5X.js +2 -0
- package/dist/components/p-ByNAXs5X.js.map +1 -0
- package/dist/components/p-C25Nmifd.js +2 -0
- package/dist/components/{p-m5CSrx_s.js.map → p-C25Nmifd.js.map} +1 -1
- package/dist/components/{p-00or0yGw.js → p-C7ywYAzN.js} +2 -2
- package/dist/components/p-CBTGKnIy.js +2 -0
- package/dist/components/{p-B94M62Tx.js.map → p-CBTGKnIy.js.map} +1 -1
- package/dist/components/{p-Dbobj7DI.js → p-CXYjqJwC.js} +2 -2
- package/dist/components/{p-D4j0deyd.js → p-C_tqXl5P.js} +2 -2
- package/dist/components/{p-CnIvWEVm.js → p-Ca0npbVt.js} +2 -2
- package/dist/components/p-ChGkNsWu.js +2 -0
- package/dist/components/p-ChGkNsWu.js.map +1 -0
- package/dist/components/p-CswBI711.js +2 -0
- package/dist/components/{p-CnUq7E8S.js.map → p-CswBI711.js.map} +1 -1
- package/dist/components/p-CtSxm6PI.js +2 -0
- package/dist/components/{p-DyqLVdJp.js.map → p-CtSxm6PI.js.map} +1 -1
- package/dist/components/p-D0-VdNjl.js +2 -0
- package/dist/components/{p-BMAZWEDa.js.map → p-D0-VdNjl.js.map} +1 -1
- package/dist/components/{p-dEouiXJ8.js → p-D8nnhQNJ.js} +2 -2
- package/dist/components/{p-D4AfoIu6.js → p-DGhSz9Fo.js} +2 -2
- package/dist/components/{p-DStd98dM.js → p-DGvAZk-D.js} +2 -2
- package/dist/components/p-DGvAZk-D.js.map +1 -0
- package/dist/components/p-DQK2ZH60.js +2 -0
- package/dist/components/{p-D5sIwLjA.js.map → p-DQK2ZH60.js.map} +1 -1
- package/dist/components/p-DTMxwYQj.js +2 -0
- package/dist/components/{p-B2SoinWf.js.map → p-DTMxwYQj.js.map} +1 -1
- package/dist/components/{p-C891ueIx.js → p-DYoCb_sj.js} +2 -2
- package/dist/components/{p-Dhx_3_tf.js → p-DZFilC--.js} +2 -2
- package/dist/components/p-DZFilC--.js.map +1 -0
- package/dist/components/{p-GbTasczF.js → p-Dcnd5ZX5.js} +2 -2
- package/dist/components/{p-BRze4tRe.js → p-DeBto13S.js} +2 -2
- package/dist/components/p-NdahPypA.js +2 -0
- package/dist/components/p-NdahPypA.js.map +1 -0
- package/dist/components/{p-CqDJRVT8.js → p-NzOcZg8r.js} +2 -2
- package/dist/components/p-PzI11fs8.js +2 -0
- package/dist/components/p-PzI11fs8.js.map +1 -0
- package/dist/components/{p-Cohb8T7G.js → p-QdI17bl-.js} +2 -2
- package/dist/components/{p-chA2WA5x.js → p-Qzh-wyTg.js} +2 -2
- package/dist/components/{p-DrvEhJhO.js → p-eu5AZEuT.js} +2 -2
- package/dist/components/{p-Qf-os3lG.js → p-oyZjjoYV.js} +2 -2
- package/dist/components/p-tR8INOIN.js +2 -0
- package/dist/components/p-tR8INOIN.js.map +1 -0
- package/dist/docs/components.json +1294 -114
- package/dist/lib/utils/choice-list.d.ts +10 -0
- package/dist/lib/utils/index.js +4 -1
- package/dist/lib/utils/index.js.map +2 -2
- package/dist/lib/utils/token-defaults.d.ts +2 -0
- package/dist/mcp-data/registry/agent-source-list.json +2 -2
- package/dist/mcp-data/registry/bar-nav.json +2 -2
- package/dist/mcp-data/registry/breadcrumb.json +2 -2
- package/dist/mcp-data/registry/button-unfilled.json +6 -6
- package/dist/mcp-data/registry/filter-menu.json +644 -0
- package/dist/mcp-data/registry/menu.json +11 -8
- package/dist/mcp-data/registry/modal.json +3 -3
- package/dist/mcp-data/registry/panel-tool-header.json +1 -1
- package/dist/mcp-data/registry/registry.json +276 -24
- package/dist/mcp-data/registry/select.json +132 -7
- package/dist/mcp-data/registry/shell-app.json +1 -1
- package/dist/mcp-data/registry/shell-tools.json +1 -1
- package/dist/mcp-data/registry/table.json +12 -26
- package/dist/mcp-data/registry/text.json +2 -2
- package/dist/react/components.d.ts +1 -0
- package/dist/react/components.js +1 -0
- package/dist/react/ds-filter-menu.d.ts +17 -0
- package/dist/react/ds-filter-menu.js +19 -0
- package/dist/react/ds-select.d.ts +3 -1
- package/dist/react/ds-select.js +3 -1
- package/dist/react/ds-table.d.ts +1 -2
- package/dist/react/ds-table.js +0 -1
- package/dist/styles/prose.css +19 -3
- package/dist/styles/table.css +7 -5
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -2
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +137 -0
- package/dist/types/components/Menu/Menu.d.ts +1 -1
- package/dist/types/components/Menu/menu-types.d.ts +9 -0
- package/dist/types/components/Modal/Modal.d.ts +1 -0
- package/dist/types/components/Select/Select.d.ts +34 -0
- package/dist/types/components/Table/Table.d.ts +2 -3
- package/dist/types/components/Table/index.d.ts +1 -1
- package/dist/types/components/Table/table-model.d.ts +1 -2
- package/dist/types/components/Table/table-types.d.ts +1 -4
- package/dist/types/components.d.ts +374 -10
- package/dist/types/utils/choice-list-parts.d.ts +17 -0
- package/dist/types/utils/choice-list.d.ts +10 -0
- package/dist/types/utils/select-controller.d.ts +2 -0
- package/dist/types/utils/token-defaults.d.ts +2 -0
- package/package.json +2 -1
- package/dist/components/p-B2SoinWf.js +0 -2
- package/dist/components/p-B53Vpuqq.js +0 -2
- package/dist/components/p-B53Vpuqq.js.map +0 -1
- package/dist/components/p-B94M62Tx.js +0 -2
- package/dist/components/p-BMAZWEDa.js +0 -2
- package/dist/components/p-BtUgncSJ.js +0 -2
- package/dist/components/p-BtUgncSJ.js.map +0 -1
- package/dist/components/p-CMbcRN92.js +0 -2
- package/dist/components/p-CMbcRN92.js.map +0 -1
- package/dist/components/p-CXduurfd.js +0 -2
- package/dist/components/p-CXduurfd.js.map +0 -1
- package/dist/components/p-CnUq7E8S.js +0 -2
- package/dist/components/p-D4jQy3Ps.js +0 -2
- package/dist/components/p-D5sIwLjA.js +0 -2
- package/dist/components/p-D9CDoQBx.js +0 -2
- package/dist/components/p-D9CDoQBx.js.map +0 -1
- package/dist/components/p-D9FdOR_m.js +0 -2
- package/dist/components/p-DO5-fplZ.js +0 -2
- package/dist/components/p-DO5-fplZ.js.map +0 -1
- package/dist/components/p-DStd98dM.js.map +0 -1
- package/dist/components/p-Dhx_3_tf.js.map +0 -1
- package/dist/components/p-DyqLVdJp.js +0 -2
- package/dist/components/p-NQOI5gN1.js +0 -2
- package/dist/components/p-NQOI5gN1.js.map +0 -1
- package/dist/components/p-m5CSrx_s.js +0 -2
- package/dist/components/p-ymtdhOU5.js +0 -2
- package/dist/components/p-ymtdhOU5.js.map +0 -1
- /package/dist/components/{p-CdKz-QT2.js.map → p-BCfgU8Fh.js.map} +0 -0
- /package/dist/components/{p-CsXC1cHI.js.map → p-BDsAON4I.js.map} +0 -0
- /package/dist/components/{p-GWUTrIlk.js.map → p-BOCrvs-v.js.map} +0 -0
- /package/dist/components/{p-B69Re7HW.js.map → p-BOjGzd5N.js.map} +0 -0
- /package/dist/components/{p-BAAjiAIF.js.map → p-BQkZ8FIl.js.map} +0 -0
- /package/dist/components/{p-00or0yGw.js.map → p-C7ywYAzN.js.map} +0 -0
- /package/dist/components/{p-Dbobj7DI.js.map → p-CXYjqJwC.js.map} +0 -0
- /package/dist/components/{p-D4j0deyd.js.map → p-C_tqXl5P.js.map} +0 -0
- /package/dist/components/{p-CnIvWEVm.js.map → p-Ca0npbVt.js.map} +0 -0
- /package/dist/components/{p-dEouiXJ8.js.map → p-D8nnhQNJ.js.map} +0 -0
- /package/dist/components/{p-D4AfoIu6.js.map → p-DGhSz9Fo.js.map} +0 -0
- /package/dist/components/{p-C891ueIx.js.map → p-DYoCb_sj.js.map} +0 -0
- /package/dist/components/{p-GbTasczF.js.map → p-Dcnd5ZX5.js.map} +0 -0
- /package/dist/components/{p-BRze4tRe.js.map → p-DeBto13S.js.map} +0 -0
- /package/dist/components/{p-CqDJRVT8.js.map → p-NzOcZg8r.js.map} +0 -0
- /package/dist/components/{p-Cohb8T7G.js.map → p-QdI17bl-.js.map} +0 -0
- /package/dist/components/{p-chA2WA5x.js.map → p-Qzh-wyTg.js.map} +0 -0
- /package/dist/components/{p-DrvEhJhO.js.map → p-eu5AZEuT.js.map} +0 -0
- /package/dist/components/{p-Qf-os3lG.js.map → p-oyZjjoYV.js.map} +0 -0
|
@@ -1890,7 +1890,7 @@
|
|
|
1890
1890
|
],
|
|
1891
1891
|
"accessibility": [
|
|
1892
1892
|
"Provide an explicit accessible name for every icon-only action.",
|
|
1893
|
-
"Set hasMenu when the button triggers a Menu; it implies aria-haspopup of menu. Pass controls with the Menu id and expanded from the same open state given to Menu. Expanded popup triggers hold the pressed
|
|
1893
|
+
"Set hasMenu when the button triggers a Menu; it implies aria-haspopup of menu. Pass controls with the Menu id and expanded from the same open state given to Menu. Expanded popup triggers hold only the pressed wash while open, without changing their resting foreground; expanded disclosure controls without popup semantics retain the normal resting appearance.",
|
|
1894
1894
|
"Give an icon-only menu button an accessible name that states the role, such as More options, because no visible label or chevron carries it.",
|
|
1895
1895
|
"Use haspopup directly for a non-menu popup such as a listbox or dialog; those cases get no chevron.",
|
|
1896
1896
|
"Use pressed only for a genuine toggle button; it supplies aria-pressed and dsChange intent. Use isActive only for owner-controlled visual emphasis inside a composite whose selection semantics live on the owner.",
|
|
@@ -1913,7 +1913,7 @@
|
|
|
1913
1913
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
1914
1914
|
"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, meaning the overflow or more-options control, and no chevron is added.",
|
|
1915
1915
|
"Because the icon-only shape has no chevron, its glyph must convey the menu on its own; use Ellipses. Never pair hasMenu with an icon-only glyph that does not read as a menu.",
|
|
1916
|
-
"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, including when chrome opts out of selected fills with activeFill set to false. Expanded disclosure buttons without popup semantics remain visually neutral."
|
|
1916
|
+
"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."
|
|
1917
1917
|
],
|
|
1918
1918
|
"responsiveBehavior": [
|
|
1919
1919
|
"The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants.",
|
|
@@ -3727,6 +3727,224 @@
|
|
|
3727
3727
|
"text"
|
|
3728
3728
|
]
|
|
3729
3729
|
},
|
|
3730
|
+
{
|
|
3731
|
+
"name": "filter-menu",
|
|
3732
|
+
"title": "FilterMenu",
|
|
3733
|
+
"description": "Controlled two-pane filter select with menu-recipe category navigation, single- and multiple-choice, boolean, and date filters, selected counts, and a clear action.",
|
|
3734
|
+
"type": "registry:ui",
|
|
3735
|
+
"meta": {
|
|
3736
|
+
"library": "@ds-mo/ui",
|
|
3737
|
+
"distribution": "npm",
|
|
3738
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/filter-menu",
|
|
3739
|
+
"source": "src/wc/components/FilterMenu/FilterMenu.tsx",
|
|
3740
|
+
"intentStatus": "complete",
|
|
3741
|
+
"intent": {
|
|
3742
|
+
"audience": "general",
|
|
3743
|
+
"status": "stable",
|
|
3744
|
+
"summary": "Controlled two-pane filter select with menu-recipe category navigation, single- and multiple-choice, boolean, and date filters, selected counts, and a clear action.",
|
|
3745
|
+
"useWhen": [
|
|
3746
|
+
"A compact trigger must expose several filter families without turning the toolbar into many separate controls.",
|
|
3747
|
+
"Users need to move between persistent filter categories while editing the selected category in a second pane."
|
|
3748
|
+
],
|
|
3749
|
+
"avoidWhen": [
|
|
3750
|
+
"The user is selecting one form value; use Select.",
|
|
3751
|
+
"The popup contains contextual commands rather than filtering controls; use Menu.",
|
|
3752
|
+
"The workflow requires confirmation or several ordered steps; use Modal."
|
|
3753
|
+
],
|
|
3754
|
+
"alternatives": [
|
|
3755
|
+
{
|
|
3756
|
+
"when": "One known value is selected for a form field.",
|
|
3757
|
+
"component": "component:ds-select",
|
|
3758
|
+
"reason": "Select owns compact form-value and listbox semantics."
|
|
3759
|
+
},
|
|
3760
|
+
{
|
|
3761
|
+
"when": "A trigger reveals commands or row actions.",
|
|
3762
|
+
"component": "component:ds-menu",
|
|
3763
|
+
"reason": "Menu provides the appropriate action-menu semantics and keyboard model."
|
|
3764
|
+
}
|
|
3765
|
+
],
|
|
3766
|
+
"commonlyComposedWith": [
|
|
3767
|
+
"component:ds-select",
|
|
3768
|
+
"component:ds-table",
|
|
3769
|
+
"component:ds-checkbox"
|
|
3770
|
+
],
|
|
3771
|
+
"accessibility": [
|
|
3772
|
+
"The built-in select trigger exposes combobox semantics with a dialog popup, synchronizes expanded state, holds the pressed interaction wash without changing resting foreground while open, and restores focus after dismissal.",
|
|
3773
|
+
"The category pane is a vertical tab list. Arrow Up and Arrow Down wrap, Home and End jump, Arrow Right enters the option pane, and Arrow Left returns to the active category.",
|
|
3774
|
+
"Escape and outside activation close the popup and restore trigger focus. Tab moves through option controls and closes only when it leaves the popup boundary.",
|
|
3775
|
+
"The trigger count reports active filter categories. Category counts and the footer report individual selected criteria; none replace visible selected-state indication."
|
|
3776
|
+
],
|
|
3777
|
+
"states": [
|
|
3778
|
+
"The application owns filters, values, activeFilterId, and open. Replace controlled objects and arrays after dsChange, dsActiveFilterChange, dsClear, or dsClose.",
|
|
3779
|
+
"Single filters return a string, multiple filters return ordered string arrays, boolean filters return a boolean, and date filters return a YYYY-MM-DD string.",
|
|
3780
|
+
"Selection applies immediately and does not close the popup.",
|
|
3781
|
+
"Changing category replaces the option-pane subtree so checkbox and other option visuals mount in their new state instead of transitioning from the previous category's row state.",
|
|
3782
|
+
"The trigger reports how many filter categories have selections, while the footer appears when values are selected and reports the total selected criteria."
|
|
3783
|
+
],
|
|
3784
|
+
"responsiveBehavior": [
|
|
3785
|
+
"The popup defaults to the large menu-width token and clamps to the viewport.",
|
|
3786
|
+
"Both panes remain visible at narrow widths, with a smaller category minimum and reduced option-pane padding.",
|
|
3787
|
+
"Treat side as preferred placement; the popup flips and clamps when viewport collision requires it."
|
|
3788
|
+
],
|
|
3789
|
+
"frameworkCaveats": {
|
|
3790
|
+
"customElements": [
|
|
3791
|
+
"Assign filters and values as JavaScript properties after the element is defined."
|
|
3792
|
+
],
|
|
3793
|
+
"react": [
|
|
3794
|
+
"Pass filters and values as controlled props and handle onDsChange, onDsActiveFilterChange, onDsClear, and onDsClose."
|
|
3795
|
+
],
|
|
3796
|
+
"angular": [
|
|
3797
|
+
"Use property bindings for filters and values and event bindings for dsChange, dsActiveFilterChange, dsClear, and dsClose."
|
|
3798
|
+
]
|
|
3799
|
+
},
|
|
3800
|
+
"references": [
|
|
3801
|
+
{
|
|
3802
|
+
"label": "Storybook example",
|
|
3803
|
+
"path": "src/wc/components/FilterMenu/FilterMenu.stories.ts"
|
|
3804
|
+
}
|
|
3805
|
+
]
|
|
3806
|
+
},
|
|
3807
|
+
"props": {
|
|
3808
|
+
"activeFill": {
|
|
3809
|
+
"type": "boolean",
|
|
3810
|
+
"required": false
|
|
3811
|
+
},
|
|
3812
|
+
"activeFilterId": {
|
|
3813
|
+
"type": "string | undefined",
|
|
3814
|
+
"required": false
|
|
3815
|
+
},
|
|
3816
|
+
"align": {
|
|
3817
|
+
"type": "AnchoredAlign",
|
|
3818
|
+
"required": false
|
|
3819
|
+
},
|
|
3820
|
+
"alignOffset": {
|
|
3821
|
+
"type": "number | string",
|
|
3822
|
+
"required": false
|
|
3823
|
+
},
|
|
3824
|
+
"anchor": {
|
|
3825
|
+
"type": "HTMLElement | undefined",
|
|
3826
|
+
"required": false
|
|
3827
|
+
},
|
|
3828
|
+
"anchorId": {
|
|
3829
|
+
"type": "string | undefined",
|
|
3830
|
+
"required": false
|
|
3831
|
+
},
|
|
3832
|
+
"ariaLabel": {
|
|
3833
|
+
"type": "string | null",
|
|
3834
|
+
"required": false
|
|
3835
|
+
},
|
|
3836
|
+
"categoriesLabel": {
|
|
3837
|
+
"type": "string",
|
|
3838
|
+
"required": false
|
|
3839
|
+
},
|
|
3840
|
+
"clearLabel": {
|
|
3841
|
+
"type": "string",
|
|
3842
|
+
"required": false
|
|
3843
|
+
},
|
|
3844
|
+
"filters": {
|
|
3845
|
+
"type": "FilterMenuFilter[]",
|
|
3846
|
+
"required": false
|
|
3847
|
+
},
|
|
3848
|
+
"hasBorder": {
|
|
3849
|
+
"type": "boolean",
|
|
3850
|
+
"required": false
|
|
3851
|
+
},
|
|
3852
|
+
"icon": {
|
|
3853
|
+
"type": "string | undefined",
|
|
3854
|
+
"required": false
|
|
3855
|
+
},
|
|
3856
|
+
"initialFocusVisible": {
|
|
3857
|
+
"type": "boolean",
|
|
3858
|
+
"required": false
|
|
3859
|
+
},
|
|
3860
|
+
"inputId": {
|
|
3861
|
+
"type": "string | undefined",
|
|
3862
|
+
"required": false
|
|
3863
|
+
},
|
|
3864
|
+
"menuLabel": {
|
|
3865
|
+
"type": "string",
|
|
3866
|
+
"required": false
|
|
3867
|
+
},
|
|
3868
|
+
"menuWidth": {
|
|
3869
|
+
"type": "string",
|
|
3870
|
+
"required": false
|
|
3871
|
+
},
|
|
3872
|
+
"open": {
|
|
3873
|
+
"type": "boolean",
|
|
3874
|
+
"required": false
|
|
3875
|
+
},
|
|
3876
|
+
"side": {
|
|
3877
|
+
"type": "AnchoredSide",
|
|
3878
|
+
"required": false
|
|
3879
|
+
},
|
|
3880
|
+
"sideOffset": {
|
|
3881
|
+
"type": "number | string",
|
|
3882
|
+
"required": false
|
|
3883
|
+
},
|
|
3884
|
+
"size": {
|
|
3885
|
+
"type": "FilterMenuSize",
|
|
3886
|
+
"required": false
|
|
3887
|
+
},
|
|
3888
|
+
"triggerLabel": {
|
|
3889
|
+
"type": "string",
|
|
3890
|
+
"required": false
|
|
3891
|
+
},
|
|
3892
|
+
"values": {
|
|
3893
|
+
"type": "FilterMenuValues",
|
|
3894
|
+
"required": false
|
|
3895
|
+
},
|
|
3896
|
+
"width": {
|
|
3897
|
+
"type": "FilterMenuWidth",
|
|
3898
|
+
"required": false
|
|
3899
|
+
}
|
|
3900
|
+
},
|
|
3901
|
+
"events": [
|
|
3902
|
+
{
|
|
3903
|
+
"name": "dsActiveFilterChange",
|
|
3904
|
+
"detail": "string"
|
|
3905
|
+
},
|
|
3906
|
+
{
|
|
3907
|
+
"name": "dsAfterClose",
|
|
3908
|
+
"detail": "void"
|
|
3909
|
+
},
|
|
3910
|
+
{
|
|
3911
|
+
"name": "dsChange",
|
|
3912
|
+
"detail": "FilterMenuChangeDetail"
|
|
3913
|
+
},
|
|
3914
|
+
{
|
|
3915
|
+
"name": "dsClear",
|
|
3916
|
+
"detail": "void"
|
|
3917
|
+
},
|
|
3918
|
+
{
|
|
3919
|
+
"name": "dsClose",
|
|
3920
|
+
"detail": "void"
|
|
3921
|
+
},
|
|
3922
|
+
{
|
|
3923
|
+
"name": "dsOpenChange",
|
|
3924
|
+
"detail": "boolean"
|
|
3925
|
+
}
|
|
3926
|
+
],
|
|
3927
|
+
"slots": [],
|
|
3928
|
+
"exports": {
|
|
3929
|
+
"customElement": "ds-filter-menu",
|
|
3930
|
+
"react": "DsFilterMenu",
|
|
3931
|
+
"angular": "DsFilterMenu"
|
|
3932
|
+
}
|
|
3933
|
+
},
|
|
3934
|
+
"dependencies": [
|
|
3935
|
+
"@ds-mo/ui",
|
|
3936
|
+
"@ds-mo/tokens",
|
|
3937
|
+
"@ds-mo/icons"
|
|
3938
|
+
],
|
|
3939
|
+
"registryDependencies": [
|
|
3940
|
+
"button-unfilled",
|
|
3941
|
+
"checkbox",
|
|
3942
|
+
"icon",
|
|
3943
|
+
"tag",
|
|
3944
|
+
"text",
|
|
3945
|
+
"tooltip"
|
|
3946
|
+
]
|
|
3947
|
+
},
|
|
3730
3948
|
{
|
|
3731
3949
|
"name": "icon",
|
|
3732
3950
|
"title": "Icon",
|
|
@@ -4263,7 +4481,7 @@
|
|
|
4263
4481
|
{
|
|
4264
4482
|
"name": "menu",
|
|
4265
4483
|
"title": "Menu",
|
|
4266
|
-
"description": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots, switches, and destructive actions.",
|
|
4484
|
+
"description": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, switches, and destructive actions.",
|
|
4267
4485
|
"type": "registry:ui",
|
|
4268
4486
|
"meta": {
|
|
4269
4487
|
"library": "@ds-mo/ui",
|
|
@@ -4274,10 +4492,10 @@
|
|
|
4274
4492
|
"intent": {
|
|
4275
4493
|
"audience": "general",
|
|
4276
4494
|
"status": "stable",
|
|
4277
|
-
"summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots, switches, and destructive actions.",
|
|
4495
|
+
"summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, switches, and destructive actions.",
|
|
4278
4496
|
"useWhen": [
|
|
4279
4497
|
"A trigger reveals a short contextual list of commands or state-changing actions.",
|
|
4280
|
-
"Actions need grouping, mutually exclusive selected state, supplemental notification dots, switch rows, or destructive treatment."
|
|
4498
|
+
"Actions need grouping, mutually exclusive selected state, supplemental notification dots or trailing tags, switch rows, or destructive treatment."
|
|
4281
4499
|
],
|
|
4282
4500
|
"avoidWhen": [
|
|
4283
4501
|
"The user is selecting a value for a form field.",
|
|
@@ -4317,7 +4535,8 @@
|
|
|
4317
4535
|
"Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden presentation indicator at the same density as the menu.",
|
|
4318
4536
|
"Single-selection menus use menuitemradio semantics and aria-checked on each row, but render no nested radio control; selected interaction fill and primary foreground provide the visual state.",
|
|
4319
4537
|
"A swatch-picker section changes the popup to a non-modal dialog so its radio group and ordinary preference buttons keep valid nested semantics; Tab moves between its controls, then leaves and closes at the popup boundary.",
|
|
4320
|
-
"Use notification dots only as supplemental status and not as the sole indication of important information."
|
|
4538
|
+
"Use notification dots only as supplemental status and not as the sole indication of important information.",
|
|
4539
|
+
"Trailing tags are non-interactive supplemental content; their visible label remains part of the menu item's accessible name."
|
|
4321
4540
|
],
|
|
4322
4541
|
"states": [
|
|
4323
4542
|
"The host owns open state and responds to selection and close events.",
|
|
@@ -4326,7 +4545,8 @@
|
|
|
4326
4545
|
"For selectionMode single, keep exactly one item isSelected and replace the items or sections array after dsSelect; Menu never mutates consumer-owned selection data.",
|
|
4327
4546
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
4328
4547
|
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup.",
|
|
4329
|
-
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics."
|
|
4548
|
+
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics.",
|
|
4549
|
+
"A trailing tag resolves one density smaller than its menu row so it nests without changing row height. Do not combine tag, dot, and switch suffixes on one item."
|
|
4330
4550
|
],
|
|
4331
4551
|
"responsiveBehavior": [
|
|
4332
4552
|
"Keep the default choice-cell anchor alignment so the first or last interactive row edge aligns with its trigger, matching Select; use popup-frame only for deliberate custom frame geometry.",
|
|
@@ -4454,6 +4674,7 @@
|
|
|
4454
4674
|
"badge",
|
|
4455
4675
|
"swatch-picker",
|
|
4456
4676
|
"switch",
|
|
4677
|
+
"tag",
|
|
4457
4678
|
"text"
|
|
4458
4679
|
]
|
|
4459
4680
|
},
|
|
@@ -5477,7 +5698,7 @@
|
|
|
5477
5698
|
],
|
|
5478
5699
|
"states": [
|
|
5479
5700
|
"The owner opens the modal through the open property and responds to the typed dsClose detail for application state synchronization or dismissal analytics.",
|
|
5480
|
-
"The component mutates open to false for Close, Escape, and backdrop dismissal while retaining its rendered surface through exit motion.",
|
|
5701
|
+
"The component mutates open to false for Close, Escape, and backdrop dismissal while retaining its rendered surface through exit motion. The close timer begins only after the closing class has rendered, so the dialog surface and backdrop enter together and exit together before the native top layer closes across browsers.",
|
|
5481
5702
|
"The default slot owns task content; the named footer slot is optional and is hidden when no actions are assigned.",
|
|
5482
5703
|
"The optional header description remains stacked beneath the title with the shared compact-header rhythm; longer task content belongs in the default slot.",
|
|
5483
5704
|
"Primary actions use a bold filled button with semantic intent. Secondary and cancel actions use bordered label-only unfilled buttons.",
|
|
@@ -6652,7 +6873,7 @@
|
|
|
6652
6873
|
{
|
|
6653
6874
|
"name": "select",
|
|
6654
6875
|
"title": "Select",
|
|
6655
|
-
"description": "Form-associated select for one value or several independent values through the multiple mode, with listbox semantics, local search, grouped sections, loading, clearing, and surface-aware trigger chrome.",
|
|
6876
|
+
"description": "Form-associated select for one value or several independent values through the multiple mode, with listbox semantics for ordinary choices, grid semantics for choices with contextual actions, local search, grouped sections, loading, clearing, and surface-aware trigger chrome.",
|
|
6656
6877
|
"type": "registry:ui",
|
|
6657
6878
|
"meta": {
|
|
6658
6879
|
"library": "@ds-mo/ui",
|
|
@@ -6663,7 +6884,7 @@
|
|
|
6663
6884
|
"intent": {
|
|
6664
6885
|
"audience": "general",
|
|
6665
6886
|
"status": "stable",
|
|
6666
|
-
"summary": "Form-associated select for one value or several independent values through the multiple mode, with listbox semantics, local search, grouped sections, loading, clearing, and surface-aware trigger chrome.",
|
|
6887
|
+
"summary": "Form-associated select for one value or several independent values through the multiple mode, with listbox semantics for ordinary choices, grid semantics for choices with contextual actions, local search, grouped sections, loading, clearing, and surface-aware trigger chrome.",
|
|
6667
6888
|
"useWhen": [
|
|
6668
6889
|
"The user must choose one value from a finite set.",
|
|
6669
6890
|
"The user may choose several independent values when multiple is enabled.",
|
|
@@ -6695,11 +6916,12 @@
|
|
|
6695
6916
|
],
|
|
6696
6917
|
"accessibility": [
|
|
6697
6918
|
"In forms, provide a persistent visible external field label; placeholder text is guidance and must not be the field's only label. In a compact filter bar, the trigger's visible text may supply the accessible name.",
|
|
6698
|
-
"The trigger uses combobox semantics
|
|
6919
|
+
"The trigger uses combobox semantics. Ordinary choices use a listbox with options; when any choice has a contextual action, the popup promotes to a grid with selectable rows, a choice cell, and an action cell. Do not replace either popup with menu roles.",
|
|
6699
6920
|
"Multiple mode adds aria-multiselectable, exposes independent aria-selected state, and uses presentation-only checkbox indicators while each option remains the sole interaction target.",
|
|
6700
6921
|
"Disabled options remain visible, expose aria-disabled, and are skipped by keyboard navigation and typeahead.",
|
|
6701
6922
|
"Keyboard navigation keeps the aria-activedescendant option scrolled into the visible listbox viewport.",
|
|
6702
6923
|
"Selected options rely on active fill and foreground treatment without a redundant trailing check icon.",
|
|
6924
|
+
"A contextual option action is a sibling gridcell rather than an interactive descendant of the selectable choice cell. Pointer hover, focus, ArrowRight, and Shift+F10 make the ellipsis action reachable without changing the selected value.",
|
|
6703
6925
|
"Local search moves focus into the search field while preserving the active option through aria-activedescendant.",
|
|
6704
6926
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6705
6927
|
],
|
|
@@ -6713,14 +6935,18 @@
|
|
|
6713
6935
|
"Clearing emits dsChange with an empty string or empty array according to mode plus dsClear, keeps the popup open, and restores useful focus.",
|
|
6714
6936
|
"Loading keeps the trigger visible, replaces its prefix icon, marks the control busy, and makes selection interaction temporarily unavailable without presenting the control as inactive. When the popup is open, its single loader is centered vertically and horizontally within the loading region.",
|
|
6715
6937
|
"The trigger label stays left-aligned at every width. The default size is md in both forms and filter bars; smaller sizes require an explicit density need.",
|
|
6938
|
+
"In scalar mode, triggerLabel may provide compact trigger-only copy while the popup continues to show the selected option's full label. Set triggerLabelPlaceholder when that copy represents the default or browse state and should retain secondary placeholder emphasis despite a real selected value. Use dot for a supplemental changed or attention state without appending status prose to the label.",
|
|
6716
6939
|
"Use option icons only when they help users differentiate choices. Icons render only when every option in the complete list provides one; mixed icon data falls back to the text-only row layout.",
|
|
6717
6940
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
6718
6941
|
"When any option supplies subtext, every row uses the same subtext structure and missing values render an em dash. Subtext should disambiguate or add decision-helpful information.",
|
|
6719
6942
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
6943
|
+
"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.",
|
|
6720
6944
|
"The optional prefix icon and chevron always use the parent surface's secondary foreground color, including when a selected value promotes the label to primary.",
|
|
6945
|
+
"While the popup is open, the trigger holds the pressed interaction wash without changing its resting foreground or selected-value treatment.",
|
|
6721
6946
|
"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.",
|
|
6722
6947
|
"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.",
|
|
6723
|
-
"The shared clear footer mirrors the owning density: menu-item padding surrounds a borderless density row, and the Clear label uses the same row and label insets as option text. The outer footer owns a 1px top divider.",
|
|
6948
|
+
"The shared clear footer mirrors the owning density: menu-item padding surrounds a borderless density row, and the Clear label uses the same row and label insets as option text. The clear action never wraps. In multiple mode, the selected summary stays on one line and collapses to its numeric count when the full localized phrase would compete with the clear action. The outer footer owns a 1px top divider.",
|
|
6949
|
+
"Use footerActionLabel for one product-owned text action beneath the option list. It replaces the clear affordance, stays aligned with option labels, uses the shared brand text-action treatment with a matching brand underline on hover, emits dsFooterAction, and closes the popup when activated.",
|
|
6724
6950
|
"An empty filtered list composes the message-only body variant of EmptyState. Keep the default neutral no-results message unless localized product guidance makes the outcome clearer.",
|
|
6725
6951
|
"Enable searchable for more than roughly 20 options, user-managed listings, large domains such as addresses, or sets users cannot efficiently scan. Local matching includes option labels, subtext, and section headings; the owner resolves remote data before assigning options.",
|
|
6726
6952
|
"Validation timing belongs to the form owner and may be immediate or deferred until blur or submit; the Select exposes validity and error presentation without imposing that policy.",
|
|
@@ -6732,6 +6958,7 @@
|
|
|
6732
6958
|
"responsiveBehavior": [
|
|
6733
6959
|
"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.",
|
|
6734
6960
|
"The popup matches the trigger minimum width, may grow for content, and clamps to the viewport.",
|
|
6961
|
+
"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.",
|
|
6735
6962
|
"Long option collections scroll inside the popup; virtualization and remote search are not part of this component."
|
|
6736
6963
|
],
|
|
6737
6964
|
"frameworkCaveats": {
|
|
@@ -6739,7 +6966,7 @@
|
|
|
6739
6966
|
"Assign options, sections, and multiple-mode array values through JavaScript properties because arrays and objects cannot be represented safely as attributes."
|
|
6740
6967
|
],
|
|
6741
6968
|
"react": [
|
|
6742
|
-
"Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, and
|
|
6969
|
+
"Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, onDsOpenChange, onDsFooterAction, and onDsOptionAction."
|
|
6743
6970
|
],
|
|
6744
6971
|
"angular": [
|
|
6745
6972
|
"Import DsSelect and SelectValueAccessor when integrating with Angular Forms; bind options and sections as properties."
|
|
@@ -6789,6 +7016,10 @@
|
|
|
6789
7016
|
"type": "boolean",
|
|
6790
7017
|
"required": false
|
|
6791
7018
|
},
|
|
7019
|
+
"dot": {
|
|
7020
|
+
"type": "boolean",
|
|
7021
|
+
"required": false
|
|
7022
|
+
},
|
|
6792
7023
|
"error": {
|
|
6793
7024
|
"type": "boolean",
|
|
6794
7025
|
"required": false
|
|
@@ -6797,6 +7028,10 @@
|
|
|
6797
7028
|
"type": "string | undefined",
|
|
6798
7029
|
"required": false
|
|
6799
7030
|
},
|
|
7031
|
+
"footerActionLabel": {
|
|
7032
|
+
"type": "string | undefined",
|
|
7033
|
+
"required": false
|
|
7034
|
+
},
|
|
6800
7035
|
"hasBorder": {
|
|
6801
7036
|
"type": "boolean",
|
|
6802
7037
|
"required": false
|
|
@@ -6845,6 +7080,10 @@
|
|
|
6845
7080
|
"type": "string",
|
|
6846
7081
|
"required": false
|
|
6847
7082
|
},
|
|
7083
|
+
"popupAlign": {
|
|
7084
|
+
"type": "SelectPopupAlign",
|
|
7085
|
+
"required": false
|
|
7086
|
+
},
|
|
6848
7087
|
"required": {
|
|
6849
7088
|
"type": "boolean",
|
|
6850
7089
|
"required": false
|
|
@@ -6873,6 +7112,14 @@
|
|
|
6873
7112
|
"type": "SelectSize",
|
|
6874
7113
|
"required": false
|
|
6875
7114
|
},
|
|
7115
|
+
"triggerLabel": {
|
|
7116
|
+
"type": "string | undefined",
|
|
7117
|
+
"required": false
|
|
7118
|
+
},
|
|
7119
|
+
"triggerLabelPlaceholder": {
|
|
7120
|
+
"type": "boolean",
|
|
7121
|
+
"required": false
|
|
7122
|
+
},
|
|
6876
7123
|
"value": {
|
|
6877
7124
|
"type": "SelectValue",
|
|
6878
7125
|
"required": false
|
|
@@ -6891,9 +7138,17 @@
|
|
|
6891
7138
|
"name": "dsClear",
|
|
6892
7139
|
"detail": "void"
|
|
6893
7140
|
},
|
|
7141
|
+
{
|
|
7142
|
+
"name": "dsFooterAction",
|
|
7143
|
+
"detail": "void"
|
|
7144
|
+
},
|
|
6894
7145
|
{
|
|
6895
7146
|
"name": "dsOpenChange",
|
|
6896
7147
|
"detail": "boolean"
|
|
7148
|
+
},
|
|
7149
|
+
{
|
|
7150
|
+
"name": "dsOptionAction",
|
|
7151
|
+
"detail": "SelectOptionActionDetail"
|
|
6897
7152
|
}
|
|
6898
7153
|
],
|
|
6899
7154
|
"slots": [],
|
|
@@ -6909,6 +7164,7 @@
|
|
|
6909
7164
|
"@ds-mo/icons"
|
|
6910
7165
|
],
|
|
6911
7166
|
"registryDependencies": [
|
|
7167
|
+
"badge",
|
|
6912
7168
|
"button-unfilled",
|
|
6913
7169
|
"checkbox",
|
|
6914
7170
|
"empty-state",
|
|
@@ -8302,7 +8558,7 @@
|
|
|
8302
8558
|
],
|
|
8303
8559
|
"accessibility": [
|
|
8304
8560
|
"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 receive the complete content width inside the component-owned 8px inset, so the application can compose its own control groups and alignment without table-defined leading or trailing zones.",
|
|
8305
|
-
"Sorting controls remain buttons inside column headers
|
|
8561
|
+
"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.",
|
|
8306
8562
|
"Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window. 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.",
|
|
8307
8563
|
"Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection or action controls.",
|
|
8308
8564
|
"Scrollable table regions become keyboard focusable and named only when overflow exists.",
|
|
@@ -8310,9 +8566,9 @@
|
|
|
8310
8566
|
"An optional result summary footer appears below the table frame when both displayedCount and totalCount are finite, formatting Displaying {displayed} of {total} in text-body-medium secondary. The footer slot can replace that copy, while footer-leading and footer-trailing compose actions into the same compact-bar anatomy. Authored footer content can also opt into the 48px footer without controlled counts."
|
|
8311
8567
|
],
|
|
8312
8568
|
"states": [
|
|
8313
|
-
"Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, displayedCount, totalCount, and lazy-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one full-width composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns all internal layout, controls, labels, filtering behavior, and action handling. The footer retains its compact-bar
|
|
8314
|
-
"Grouping supports one level. The application supplies
|
|
8315
|
-
"An active member sort toggles only between ascending and descending; activating a different sortable label moves sorting to that key. Applications may still clear the controlled sort state explicitly.
|
|
8569
|
+
"Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, displayedCount, totalCount, and lazy-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one full-width composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns all internal layout, controls, labels, filtering behavior, and action handling. The footer retains its compact-bar composition: application-owned leading status sits left while the controlled result summary 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.",
|
|
8570
|
+
"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 rounded sm Tag containing only the numeric count. The Tag uses the group's faint intent surface (neutral when intent is absent) and a small-elevation, button-hugging wrapper; a localized countLabel remains available to assistive technology. 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; the final collapsed section does not duplicate the terminal table edge. 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 remains 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.",
|
|
8571
|
+
"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.",
|
|
8316
8572
|
"Compound headers can expose multiple related labels with independent sort keys. Each label owns only its content-width interaction target while the active direction remains in the column's alignment-aware sort lane.",
|
|
8317
8573
|
"Initial loading uses row-shaped skeletons that preserve the standard single-line cell padding, row dividers, column dividers, selection lane, and sticky-lane boundaries. Empty, initial error, load-more, retry, loading-more, and terminal bands remain fixed to the visible table width while data columns scroll horizontally beneath them. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states.",
|
|
8318
8574
|
"Lazy loading replaces pagination. The application owns requests, cancellation, cursors, deduplication, appended records, and query identity; loadIdentity resets the component request guard.",
|
|
@@ -8334,11 +8590,11 @@
|
|
|
8334
8590
|
"frameworkCaveats": {
|
|
8335
8591
|
"customElements": [
|
|
8336
8592
|
"Assign columns, rows, groups, grouping, sort, selectedRowIds, collapsedGroupIds, displayedCount, and totalCount through JavaScript properties rather than HTML attribute strings.",
|
|
8337
|
-
"Replace controlled property values in response to dsSortChange,
|
|
8593
|
+
"Replace controlled property values in response to dsSortChange, dsGroupCollapseChange, dsSelectionChange, and dsLoadMore; route dsRowActivate in the application owner."
|
|
8338
8594
|
],
|
|
8339
8595
|
"react": [
|
|
8340
8596
|
"Pass new array and state-object references when the controlled data or query state changes.",
|
|
8341
|
-
"Apply emitted sort,
|
|
8597
|
+
"Apply emitted sort, collapse, selection, action, or loading detail to application state and perform data transformations in the owning layer."
|
|
8342
8598
|
],
|
|
8343
8599
|
"angular": [
|
|
8344
8600
|
"Bind complex table inputs as properties and update the controlled values from the corresponding output events.",
|
|
@@ -8527,10 +8783,6 @@
|
|
|
8527
8783
|
"name": "dsGroupCollapseChange",
|
|
8528
8784
|
"detail": "TableGroupCollapseChangeDetail"
|
|
8529
8785
|
},
|
|
8530
|
-
{
|
|
8531
|
-
"name": "dsGroupingChange",
|
|
8532
|
-
"detail": "TableGroupingChangeDetail"
|
|
8533
|
-
},
|
|
8534
8786
|
{
|
|
8535
8787
|
"name": "dsLoadMore",
|
|
8536
8788
|
"detail": "TableLoadMoreDetail"
|
|
@@ -8800,7 +9052,7 @@
|
|
|
8800
9052
|
"Omitted color inherits currentColor without imposing a host color declaration, so an owning component may apply its semantic foreground directly without depending on stylesheet order. Explicit semantic aliases or CSS-variable references are used when Text has an independent color role.",
|
|
8801
9053
|
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
8802
9054
|
"Line truncation and wrapping require an owner-supplied width constraint and content-aware composition decision.",
|
|
8803
|
-
"Solid underline is the default link affordance; brand-blue links may omit it at rest. Dotted underline communicates hidden or supplemental interaction such as a tooltip. Decoration does not make Text interactive by itself.",
|
|
9055
|
+
"Solid underline is the default link affordance; brand-blue links may omit it at rest. Solid and dotted underlines share the tokenized decoration thickness and offset. Dotted underline communicates hidden or supplemental interaction such as a tooltip. Decoration does not make Text interactive by itself.",
|
|
8804
9056
|
"Tabular numbers are for changing numeric values or aligned numeric columns where stable glyph width matters.",
|
|
8805
9057
|
"Shimmer is reserved for visible generating/loading status text whose owner provides status semantics; reduced motion keeps static readable text."
|
|
8806
9058
|
],
|