@ds-mo/ui 13.16.1 → 13.18.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 +1 -1
- package/dist/agent.json +268 -17
- 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/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-5uI3i2vg.js +2 -0
- package/dist/components/p-5uI3i2vg.js.map +1 -0
- 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-BMq4DJWh.js +2 -0
- package/dist/components/{p-D9FdOR_m.js.map → p-BMq4DJWh.js.map} +1 -1
- 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-BaiGt_o6.js +2 -0
- package/dist/components/{p-D4jQy3Ps.js.map → p-BaiGt_o6.js.map} +1 -1
- package/dist/components/p-BqFKxWVl.js +2 -0
- package/dist/components/p-BqFKxWVl.js.map +1 -0
- package/dist/components/p-BtY2nJW4.js +2 -0
- package/dist/components/{p-m5CSrx_s.js.map → p-BtY2nJW4.js.map} +1 -1
- package/dist/components/{p-DStd98dM.js → p-BxQlH4gl.js} +2 -2
- package/dist/components/{p-DStd98dM.js.map → p-BxQlH4gl.js.map} +1 -1
- package/dist/components/{p-00or0yGw.js → p-C7ywYAzN.js} +2 -2
- package/dist/components/p-C8keZ4k6.js +2 -0
- package/dist/components/{p-BMAZWEDa.js.map → p-C8keZ4k6.js.map} +1 -1
- package/dist/components/p-CB8iBV_M.js +2 -0
- package/dist/components/p-CB8iBV_M.js.map +1 -0
- package/dist/components/p-CP2W8qxB.js +2 -0
- package/dist/components/{p-D5sIwLjA.js.map → p-CP2W8qxB.js.map} +1 -1
- package/dist/components/p-CUQTEeLp.js +2 -0
- package/dist/components/{p-B94M62Tx.js.map → p-CUQTEeLp.js.map} +1 -1
- package/dist/components/{p-D4j0deyd.js → p-C_tqXl5P.js} +2 -2
- package/dist/components/p-Csq6XDgm.js +2 -0
- package/dist/components/{p-D9CDoQBx.js.map → p-Csq6XDgm.js.map} +1 -1
- 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-dEouiXJ8.js → p-D8nnhQNJ.js} +2 -2
- 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-DtvJTPds.js +2 -0
- package/dist/components/{p-B53Vpuqq.js.map → p-DtvJTPds.js.map} +1 -1
- package/dist/components/{p-DrvEhJhO.js → p-N4m0evkj.js} +2 -2
- package/dist/components/p-NdahPypA.js +2 -0
- package/dist/components/p-NdahPypA.js.map +1 -0
- package/dist/components/{p-D4AfoIu6.js → p-NuRg_IoA.js} +2 -2
- 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-CnIvWEVm.js → p-Xr9OO-Ao.js} +2 -2
- package/dist/components/{p-Qf-os3lG.js → p-oyZjjoYV.js} +2 -2
- package/dist/components/{p-Dbobj7DI.js → p-smzwm_EW.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 +1299 -93
- 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/filter-menu.json +643 -0
- package/dist/mcp-data/registry/menu.json +11 -8
- package/dist/mcp-data/registry/modal.json +3 -3
- package/dist/mcp-data/registry/registry.json +270 -16
- package/dist/mcp-data/registry/select.json +131 -7
- package/dist/mcp-data/registry/table.json +8 -8
- 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/styles/prose.css +19 -3
- package/dist/styles/table.css +106 -3
- 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/table-layout-controller.d.ts +0 -3
- package/dist/types/components.d.ts +368 -2
- 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-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-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-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-D4j0deyd.js.map → p-C_tqXl5P.js.map} +0 -0
- /package/dist/components/{p-dEouiXJ8.js.map → p-D8nnhQNJ.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-DrvEhJhO.js.map → p-N4m0evkj.js.map} +0 -0
- /package/dist/components/{p-D4AfoIu6.js.map → p-NuRg_IoA.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-CnIvWEVm.js.map → p-Xr9OO-Ao.js.map} +0 -0
- /package/dist/components/{p-Qf-os3lG.js.map → p-oyZjjoYV.js.map} +0 -0
- /package/dist/components/{p-Dbobj7DI.js.map → p-smzwm_EW.js.map} +0 -0
|
@@ -3727,6 +3727,223 @@
|
|
|
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, 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
|
+
"The trigger reports how many filter categories have selections, while the footer appears when values are selected and reports the total selected criteria."
|
|
3782
|
+
],
|
|
3783
|
+
"responsiveBehavior": [
|
|
3784
|
+
"The popup defaults to the large menu-width token and clamps to the viewport.",
|
|
3785
|
+
"Both panes remain visible at narrow widths, with a smaller category minimum and reduced option-pane padding.",
|
|
3786
|
+
"Treat side as preferred placement; the popup flips and clamps when viewport collision requires it."
|
|
3787
|
+
],
|
|
3788
|
+
"frameworkCaveats": {
|
|
3789
|
+
"customElements": [
|
|
3790
|
+
"Assign filters and values as JavaScript properties after the element is defined."
|
|
3791
|
+
],
|
|
3792
|
+
"react": [
|
|
3793
|
+
"Pass filters and values as controlled props and handle onDsChange, onDsActiveFilterChange, onDsClear, and onDsClose."
|
|
3794
|
+
],
|
|
3795
|
+
"angular": [
|
|
3796
|
+
"Use property bindings for filters and values and event bindings for dsChange, dsActiveFilterChange, dsClear, and dsClose."
|
|
3797
|
+
]
|
|
3798
|
+
},
|
|
3799
|
+
"references": [
|
|
3800
|
+
{
|
|
3801
|
+
"label": "Storybook example",
|
|
3802
|
+
"path": "src/wc/components/FilterMenu/FilterMenu.stories.ts"
|
|
3803
|
+
}
|
|
3804
|
+
]
|
|
3805
|
+
},
|
|
3806
|
+
"props": {
|
|
3807
|
+
"activeFill": {
|
|
3808
|
+
"type": "boolean",
|
|
3809
|
+
"required": false
|
|
3810
|
+
},
|
|
3811
|
+
"activeFilterId": {
|
|
3812
|
+
"type": "string | undefined",
|
|
3813
|
+
"required": false
|
|
3814
|
+
},
|
|
3815
|
+
"align": {
|
|
3816
|
+
"type": "AnchoredAlign",
|
|
3817
|
+
"required": false
|
|
3818
|
+
},
|
|
3819
|
+
"alignOffset": {
|
|
3820
|
+
"type": "number | string",
|
|
3821
|
+
"required": false
|
|
3822
|
+
},
|
|
3823
|
+
"anchor": {
|
|
3824
|
+
"type": "HTMLElement | undefined",
|
|
3825
|
+
"required": false
|
|
3826
|
+
},
|
|
3827
|
+
"anchorId": {
|
|
3828
|
+
"type": "string | undefined",
|
|
3829
|
+
"required": false
|
|
3830
|
+
},
|
|
3831
|
+
"ariaLabel": {
|
|
3832
|
+
"type": "string | null",
|
|
3833
|
+
"required": false
|
|
3834
|
+
},
|
|
3835
|
+
"categoriesLabel": {
|
|
3836
|
+
"type": "string",
|
|
3837
|
+
"required": false
|
|
3838
|
+
},
|
|
3839
|
+
"clearLabel": {
|
|
3840
|
+
"type": "string",
|
|
3841
|
+
"required": false
|
|
3842
|
+
},
|
|
3843
|
+
"filters": {
|
|
3844
|
+
"type": "FilterMenuFilter[]",
|
|
3845
|
+
"required": false
|
|
3846
|
+
},
|
|
3847
|
+
"hasBorder": {
|
|
3848
|
+
"type": "boolean",
|
|
3849
|
+
"required": false
|
|
3850
|
+
},
|
|
3851
|
+
"icon": {
|
|
3852
|
+
"type": "string | undefined",
|
|
3853
|
+
"required": false
|
|
3854
|
+
},
|
|
3855
|
+
"initialFocusVisible": {
|
|
3856
|
+
"type": "boolean",
|
|
3857
|
+
"required": false
|
|
3858
|
+
},
|
|
3859
|
+
"inputId": {
|
|
3860
|
+
"type": "string | undefined",
|
|
3861
|
+
"required": false
|
|
3862
|
+
},
|
|
3863
|
+
"menuLabel": {
|
|
3864
|
+
"type": "string",
|
|
3865
|
+
"required": false
|
|
3866
|
+
},
|
|
3867
|
+
"menuWidth": {
|
|
3868
|
+
"type": "string",
|
|
3869
|
+
"required": false
|
|
3870
|
+
},
|
|
3871
|
+
"open": {
|
|
3872
|
+
"type": "boolean",
|
|
3873
|
+
"required": false
|
|
3874
|
+
},
|
|
3875
|
+
"side": {
|
|
3876
|
+
"type": "AnchoredSide",
|
|
3877
|
+
"required": false
|
|
3878
|
+
},
|
|
3879
|
+
"sideOffset": {
|
|
3880
|
+
"type": "number | string",
|
|
3881
|
+
"required": false
|
|
3882
|
+
},
|
|
3883
|
+
"size": {
|
|
3884
|
+
"type": "FilterMenuSize",
|
|
3885
|
+
"required": false
|
|
3886
|
+
},
|
|
3887
|
+
"triggerLabel": {
|
|
3888
|
+
"type": "string",
|
|
3889
|
+
"required": false
|
|
3890
|
+
},
|
|
3891
|
+
"values": {
|
|
3892
|
+
"type": "FilterMenuValues",
|
|
3893
|
+
"required": false
|
|
3894
|
+
},
|
|
3895
|
+
"width": {
|
|
3896
|
+
"type": "FilterMenuWidth",
|
|
3897
|
+
"required": false
|
|
3898
|
+
}
|
|
3899
|
+
},
|
|
3900
|
+
"events": [
|
|
3901
|
+
{
|
|
3902
|
+
"name": "dsActiveFilterChange",
|
|
3903
|
+
"detail": "string"
|
|
3904
|
+
},
|
|
3905
|
+
{
|
|
3906
|
+
"name": "dsAfterClose",
|
|
3907
|
+
"detail": "void"
|
|
3908
|
+
},
|
|
3909
|
+
{
|
|
3910
|
+
"name": "dsChange",
|
|
3911
|
+
"detail": "FilterMenuChangeDetail"
|
|
3912
|
+
},
|
|
3913
|
+
{
|
|
3914
|
+
"name": "dsClear",
|
|
3915
|
+
"detail": "void"
|
|
3916
|
+
},
|
|
3917
|
+
{
|
|
3918
|
+
"name": "dsClose",
|
|
3919
|
+
"detail": "void"
|
|
3920
|
+
},
|
|
3921
|
+
{
|
|
3922
|
+
"name": "dsOpenChange",
|
|
3923
|
+
"detail": "boolean"
|
|
3924
|
+
}
|
|
3925
|
+
],
|
|
3926
|
+
"slots": [],
|
|
3927
|
+
"exports": {
|
|
3928
|
+
"customElement": "ds-filter-menu",
|
|
3929
|
+
"react": "DsFilterMenu",
|
|
3930
|
+
"angular": "DsFilterMenu"
|
|
3931
|
+
}
|
|
3932
|
+
},
|
|
3933
|
+
"dependencies": [
|
|
3934
|
+
"@ds-mo/ui",
|
|
3935
|
+
"@ds-mo/tokens",
|
|
3936
|
+
"@ds-mo/icons"
|
|
3937
|
+
],
|
|
3938
|
+
"registryDependencies": [
|
|
3939
|
+
"button-unfilled",
|
|
3940
|
+
"checkbox",
|
|
3941
|
+
"icon",
|
|
3942
|
+
"tag",
|
|
3943
|
+
"text",
|
|
3944
|
+
"tooltip"
|
|
3945
|
+
]
|
|
3946
|
+
},
|
|
3730
3947
|
{
|
|
3731
3948
|
"name": "icon",
|
|
3732
3949
|
"title": "Icon",
|
|
@@ -4263,7 +4480,7 @@
|
|
|
4263
4480
|
{
|
|
4264
4481
|
"name": "menu",
|
|
4265
4482
|
"title": "Menu",
|
|
4266
|
-
"description": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots, switches, and destructive actions.",
|
|
4483
|
+
"description": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, switches, and destructive actions.",
|
|
4267
4484
|
"type": "registry:ui",
|
|
4268
4485
|
"meta": {
|
|
4269
4486
|
"library": "@ds-mo/ui",
|
|
@@ -4274,10 +4491,10 @@
|
|
|
4274
4491
|
"intent": {
|
|
4275
4492
|
"audience": "general",
|
|
4276
4493
|
"status": "stable",
|
|
4277
|
-
"summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots, switches, and destructive actions.",
|
|
4494
|
+
"summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, switches, and destructive actions.",
|
|
4278
4495
|
"useWhen": [
|
|
4279
4496
|
"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."
|
|
4497
|
+
"Actions need grouping, mutually exclusive selected state, supplemental notification dots or trailing tags, switch rows, or destructive treatment."
|
|
4281
4498
|
],
|
|
4282
4499
|
"avoidWhen": [
|
|
4283
4500
|
"The user is selecting a value for a form field.",
|
|
@@ -4317,7 +4534,8 @@
|
|
|
4317
4534
|
"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
4535
|
"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
4536
|
"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."
|
|
4537
|
+
"Use notification dots only as supplemental status and not as the sole indication of important information.",
|
|
4538
|
+
"Trailing tags are non-interactive supplemental content; their visible label remains part of the menu item's accessible name."
|
|
4321
4539
|
],
|
|
4322
4540
|
"states": [
|
|
4323
4541
|
"The host owns open state and responds to selection and close events.",
|
|
@@ -4326,7 +4544,8 @@
|
|
|
4326
4544
|
"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
4545
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
4328
4546
|
"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."
|
|
4547
|
+
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics.",
|
|
4548
|
+
"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
4549
|
],
|
|
4331
4550
|
"responsiveBehavior": [
|
|
4332
4551
|
"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 +4673,7 @@
|
|
|
4454
4673
|
"badge",
|
|
4455
4674
|
"swatch-picker",
|
|
4456
4675
|
"switch",
|
|
4676
|
+
"tag",
|
|
4457
4677
|
"text"
|
|
4458
4678
|
]
|
|
4459
4679
|
},
|
|
@@ -5477,7 +5697,7 @@
|
|
|
5477
5697
|
],
|
|
5478
5698
|
"states": [
|
|
5479
5699
|
"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.",
|
|
5700
|
+
"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
5701
|
"The default slot owns task content; the named footer slot is optional and is hidden when no actions are assigned.",
|
|
5482
5702
|
"The optional header description remains stacked beneath the title with the shared compact-header rhythm; longer task content belongs in the default slot.",
|
|
5483
5703
|
"Primary actions use a bold filled button with semantic intent. Secondary and cancel actions use bordered label-only unfilled buttons.",
|
|
@@ -6652,7 +6872,7 @@
|
|
|
6652
6872
|
{
|
|
6653
6873
|
"name": "select",
|
|
6654
6874
|
"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.",
|
|
6875
|
+
"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
6876
|
"type": "registry:ui",
|
|
6657
6877
|
"meta": {
|
|
6658
6878
|
"library": "@ds-mo/ui",
|
|
@@ -6663,7 +6883,7 @@
|
|
|
6663
6883
|
"intent": {
|
|
6664
6884
|
"audience": "general",
|
|
6665
6885
|
"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.",
|
|
6886
|
+
"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
6887
|
"useWhen": [
|
|
6668
6888
|
"The user must choose one value from a finite set.",
|
|
6669
6889
|
"The user may choose several independent values when multiple is enabled.",
|
|
@@ -6695,11 +6915,12 @@
|
|
|
6695
6915
|
],
|
|
6696
6916
|
"accessibility": [
|
|
6697
6917
|
"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
|
|
6918
|
+
"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
6919
|
"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
6920
|
"Disabled options remain visible, expose aria-disabled, and are skipped by keyboard navigation and typeahead.",
|
|
6701
6921
|
"Keyboard navigation keeps the aria-activedescendant option scrolled into the visible listbox viewport.",
|
|
6702
6922
|
"Selected options rely on active fill and foreground treatment without a redundant trailing check icon.",
|
|
6923
|
+
"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
6924
|
"Local search moves focus into the search field while preserving the active option through aria-activedescendant.",
|
|
6704
6925
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
6705
6926
|
],
|
|
@@ -6713,14 +6934,17 @@
|
|
|
6713
6934
|
"Clearing emits dsChange with an empty string or empty array according to mode plus dsClear, keeps the popup open, and restores useful focus.",
|
|
6714
6935
|
"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
6936
|
"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.",
|
|
6937
|
+
"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
6938
|
"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
6939
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
6718
6940
|
"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
6941
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
6942
|
+
"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
6943
|
"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.",
|
|
6721
6944
|
"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
6945
|
"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.",
|
|
6946
|
+
"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.",
|
|
6947
|
+
"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
6948
|
"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
6949
|
"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
6950
|
"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 +6956,7 @@
|
|
|
6732
6956
|
"responsiveBehavior": [
|
|
6733
6957
|
"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
6958
|
"The popup matches the trigger minimum width, may grow for content, and clamps to the viewport.",
|
|
6959
|
+
"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
6960
|
"Long option collections scroll inside the popup; virtualization and remote search are not part of this component."
|
|
6736
6961
|
],
|
|
6737
6962
|
"frameworkCaveats": {
|
|
@@ -6739,7 +6964,7 @@
|
|
|
6739
6964
|
"Assign options, sections, and multiple-mode array values through JavaScript properties because arrays and objects cannot be represented safely as attributes."
|
|
6740
6965
|
],
|
|
6741
6966
|
"react": [
|
|
6742
|
-
"Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, and
|
|
6967
|
+
"Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, onDsOpenChange, onDsFooterAction, and onDsOptionAction."
|
|
6743
6968
|
],
|
|
6744
6969
|
"angular": [
|
|
6745
6970
|
"Import DsSelect and SelectValueAccessor when integrating with Angular Forms; bind options and sections as properties."
|
|
@@ -6789,6 +7014,10 @@
|
|
|
6789
7014
|
"type": "boolean",
|
|
6790
7015
|
"required": false
|
|
6791
7016
|
},
|
|
7017
|
+
"dot": {
|
|
7018
|
+
"type": "boolean",
|
|
7019
|
+
"required": false
|
|
7020
|
+
},
|
|
6792
7021
|
"error": {
|
|
6793
7022
|
"type": "boolean",
|
|
6794
7023
|
"required": false
|
|
@@ -6797,6 +7026,10 @@
|
|
|
6797
7026
|
"type": "string | undefined",
|
|
6798
7027
|
"required": false
|
|
6799
7028
|
},
|
|
7029
|
+
"footerActionLabel": {
|
|
7030
|
+
"type": "string | undefined",
|
|
7031
|
+
"required": false
|
|
7032
|
+
},
|
|
6800
7033
|
"hasBorder": {
|
|
6801
7034
|
"type": "boolean",
|
|
6802
7035
|
"required": false
|
|
@@ -6845,6 +7078,10 @@
|
|
|
6845
7078
|
"type": "string",
|
|
6846
7079
|
"required": false
|
|
6847
7080
|
},
|
|
7081
|
+
"popupAlign": {
|
|
7082
|
+
"type": "SelectPopupAlign",
|
|
7083
|
+
"required": false
|
|
7084
|
+
},
|
|
6848
7085
|
"required": {
|
|
6849
7086
|
"type": "boolean",
|
|
6850
7087
|
"required": false
|
|
@@ -6873,6 +7110,14 @@
|
|
|
6873
7110
|
"type": "SelectSize",
|
|
6874
7111
|
"required": false
|
|
6875
7112
|
},
|
|
7113
|
+
"triggerLabel": {
|
|
7114
|
+
"type": "string | undefined",
|
|
7115
|
+
"required": false
|
|
7116
|
+
},
|
|
7117
|
+
"triggerLabelPlaceholder": {
|
|
7118
|
+
"type": "boolean",
|
|
7119
|
+
"required": false
|
|
7120
|
+
},
|
|
6876
7121
|
"value": {
|
|
6877
7122
|
"type": "SelectValue",
|
|
6878
7123
|
"required": false
|
|
@@ -6891,9 +7136,17 @@
|
|
|
6891
7136
|
"name": "dsClear",
|
|
6892
7137
|
"detail": "void"
|
|
6893
7138
|
},
|
|
7139
|
+
{
|
|
7140
|
+
"name": "dsFooterAction",
|
|
7141
|
+
"detail": "void"
|
|
7142
|
+
},
|
|
6894
7143
|
{
|
|
6895
7144
|
"name": "dsOpenChange",
|
|
6896
7145
|
"detail": "boolean"
|
|
7146
|
+
},
|
|
7147
|
+
{
|
|
7148
|
+
"name": "dsOptionAction",
|
|
7149
|
+
"detail": "SelectOptionActionDetail"
|
|
6897
7150
|
}
|
|
6898
7151
|
],
|
|
6899
7152
|
"slots": [],
|
|
@@ -6909,6 +7162,7 @@
|
|
|
6909
7162
|
"@ds-mo/icons"
|
|
6910
7163
|
],
|
|
6911
7164
|
"registryDependencies": [
|
|
7165
|
+
"badge",
|
|
6912
7166
|
"button-unfilled",
|
|
6913
7167
|
"checkbox",
|
|
6914
7168
|
"empty-state",
|
|
@@ -8301,7 +8555,7 @@
|
|
|
8301
8555
|
"component:ds-icon"
|
|
8302
8556
|
],
|
|
8303
8557
|
"accessibility": [
|
|
8304
|
-
"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
|
|
8558
|
+
"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
8559
|
"Sorting controls remain buttons inside column headers. Member-row sort uses aria-sort, while independent group order is described by the grouped header control.",
|
|
8306
8560
|
"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
8561
|
"Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection or action controls.",
|
|
@@ -8310,8 +8564,8 @@
|
|
|
8310
8564
|
"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
8565
|
],
|
|
8312
8566
|
"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
|
|
8314
|
-
"Grouping supports one level. The application supplies ordered groups and ordered member rows; group order and member-row sort are independent controls. 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 section header
|
|
8567
|
+
"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 copy and action composition. 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.",
|
|
8568
|
+
"Grouping supports one level. The application supplies ordered groups and ordered member rows; group order and member-row sort are independent controls. 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.",
|
|
8315
8569
|
"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. The grouped column toggles ascending and descending group order without clearing member sort.",
|
|
8316
8570
|
"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
8571
|
"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.",
|
|
@@ -8324,7 +8578,7 @@
|
|
|
8324
8578
|
"responsiveBehavior": [
|
|
8325
8579
|
"The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
|
|
8326
8580
|
"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.",
|
|
8327
|
-
"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.
|
|
8581
|
+
"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.",
|
|
8328
8582
|
"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.",
|
|
8329
8583
|
"Explicit column sizes establish the horizontal overflow width; unsized columns share remaining space.",
|
|
8330
8584
|
"Prefer the named xs through xl column sizes, which resolve through TokoMo's table-column width tokens; numeric pixel sizes remain an escape hatch for exceptional application-owned widths.",
|
|
@@ -8800,7 +9054,7 @@
|
|
|
8800
9054
|
"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
9055
|
"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
9056
|
"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.",
|
|
9057
|
+
"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
9058
|
"Tabular numbers are for changing numeric values or aligned numeric columns where stable glyph width matters.",
|
|
8805
9059
|
"Shimmer is reserved for visible generating/loading status text whose owner provides status semantics; reduced motion keeps static readable text."
|
|
8806
9060
|
],
|