@ds-mo/ui 14.28.0 → 14.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +27 -17
- package/dist/agent.json +148 -25
- package/dist/angular/ds-button-filled.d.ts +1 -1
- package/dist/angular/ds-button-filled.js +3 -3
- package/dist/angular/ds-button-unfilled.d.ts +1 -1
- package/dist/angular/ds-button-unfilled.js +3 -3
- package/dist/angular/ds-panel-nav.d.ts +1 -1
- package/dist/angular/ds-panel-nav.js +3 -3
- package/dist/angular/ds-panel-tool-header.d.ts +1 -1
- package/dist/angular/ds-panel-tool-header.js +3 -3
- package/dist/angular/ds-panel-tool-search.d.ts +1 -1
- package/dist/angular/ds-panel-tool-search.js +3 -3
- package/dist/angular/ds-table.d.ts +1 -1
- package/dist/angular/ds-table.js +3 -3
- package/dist/angular/ds-tag.d.ts +1 -1
- package/dist/angular/ds-tag.js +3 -3
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.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-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-navigation.js +1 -1
- package/dist/components/ds-card-navigation.js.map +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +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-filter-menu.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table-filter.js +1 -1
- package/dist/components/ds-table-group.js +1 -1
- package/dist/components/ds-table-group.js.map +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-saved-views.js.map +1 -1
- package/dist/components/ds-table-search.js +1 -1
- package/dist/components/ds-table-search.js.map +1 -1
- package/dist/components/ds-table-sort.js +1 -1
- package/dist/components/ds-table-sort.js.map +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-textarea.js.map +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/p--yvQzZoO.js +2 -0
- package/dist/components/p--yvQzZoO.js.map +1 -0
- package/dist/components/p-B5AZd41L.js +2 -0
- package/dist/components/p-B5AZd41L.js.map +1 -0
- package/dist/components/p-B5eMVBlz.js +2 -0
- package/dist/components/p-B5eMVBlz.js.map +1 -0
- package/dist/components/p-BGnRFtBa.js +2 -0
- package/dist/components/p-BGnRFtBa.js.map +1 -0
- package/dist/components/p-BIDGQ4tc.js +2 -0
- package/dist/components/p-BIDGQ4tc.js.map +1 -0
- package/dist/components/p-BZDQLjE0.js +2 -0
- package/dist/components/p-BZDQLjE0.js.map +1 -0
- package/dist/components/{p-DmYZLH_L.js → p-BdC7wxhu.js} +2 -2
- package/dist/components/{p-DmYZLH_L.js.map → p-BdC7wxhu.js.map} +1 -1
- package/dist/components/p-BfVlFinS.js +2 -0
- package/dist/components/{p-WM1GTEun.js.map → p-BfVlFinS.js.map} +1 -1
- package/dist/components/p-BmRHJ_jo.js +2 -0
- package/dist/components/p-BmRHJ_jo.js.map +1 -0
- package/dist/components/{p-CxbGZJBU.js → p-BwAWZAHk.js} +2 -2
- package/dist/components/{p-8atLxerP.js → p-By5TDnbF.js} +2 -2
- package/dist/components/{p-BdXUd-tK.js → p-CDXcINTO.js} +2 -2
- package/dist/components/{p-BdXUd-tK.js.map → p-CDXcINTO.js.map} +1 -1
- package/dist/components/{p-DGHeKNfG.js → p-CE8gsv7V.js} +2 -2
- package/dist/components/p-CLcwh1kq.js +2 -0
- package/dist/components/p-CLcwh1kq.js.map +1 -0
- package/dist/components/p-CcK3UiTu.js +2 -0
- package/dist/components/{p-NB-SoVpo.js.map → p-CcK3UiTu.js.map} +1 -1
- package/dist/components/p-Cr5vn5JO.js +2 -0
- package/dist/components/{p-CsW_2w-s.js.map → p-Cr5vn5JO.js.map} +1 -1
- package/dist/components/{p-CW7JhWlS.js → p-Crd3PEUx.js} +2 -2
- package/dist/components/{p-CW7JhWlS.js.map → p-Crd3PEUx.js.map} +1 -1
- package/dist/components/{p-Kp8ifB1g.js → p-Ct90k-nz.js} +2 -2
- package/dist/components/{p-C82vesh_.js → p-Cx2dWjaW.js} +2 -2
- package/dist/components/p-CyoLh8su.js +2 -0
- package/dist/components/p-CyoLh8su.js.map +1 -0
- package/dist/components/p-CysCSinT.js +2 -0
- package/dist/components/{p-BdU6FPu4.js.map → p-CysCSinT.js.map} +1 -1
- package/dist/components/p-CzbsTZt7.js.map +1 -1
- package/dist/components/p-D1pPq-y0.js +2 -0
- package/dist/components/{p-BWDbER5T.js.map → p-D1pPq-y0.js.map} +1 -1
- package/dist/components/{p-B3iy9Rl_.js → p-DF8W85Tz.js} +2 -2
- package/dist/components/p-GbtafFds.js +2 -0
- package/dist/components/p-GbtafFds.js.map +1 -0
- package/dist/components/{p-B_NN7k8H.js → p-K39w53Bw.js} +2 -2
- package/dist/components/p-K39w53Bw.js.map +1 -0
- package/dist/components/p-frKsmPQn.js +2 -0
- package/dist/components/{p-CvB76TJn.js.map → p-frKsmPQn.js.map} +1 -1
- package/dist/docs/components.json +188 -6
- package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +11 -3
- package/dist/lib/components/PanelTools/panel-tools-types.d.ts +2 -0
- package/dist/lib/components/ShellApp/shell-app-types.d.ts +2 -0
- package/dist/lib/shell/index.js.map +1 -1
- package/dist/lib/utils/choice-list.d.ts +2 -0
- package/dist/mcp-data/registry/bar-nav.json +7 -2
- package/dist/mcp-data/registry/bar-title.json +8 -3
- package/dist/mcp-data/registry/button-filled.json +26 -5
- package/dist/mcp-data/registry/button-unfilled.json +27 -6
- package/dist/mcp-data/registry/filter-menu.json +7 -2
- package/dist/mcp-data/registry/mobile-section-switcher.json +8 -3
- package/dist/mcp-data/registry/panel-nav.json +27 -6
- package/dist/mcp-data/registry/panel-tool-header.json +23 -2
- package/dist/mcp-data/registry/panel-tool-search.json +23 -2
- package/dist/mcp-data/registry/panel-tools.json +7 -2
- package/dist/mcp-data/registry/registry.json +147 -24
- package/dist/mcp-data/registry/select.json +8 -3
- package/dist/mcp-data/registry/shell-app.json +8 -3
- package/dist/mcp-data/registry/shell-tools.json +7 -2
- package/dist/mcp-data/registry/table-group.json +7 -2
- package/dist/mcp-data/registry/table-saved-views.json +7 -2
- package/dist/mcp-data/registry/table-search.json +7 -2
- package/dist/mcp-data/registry/table-sort.json +7 -2
- package/dist/mcp-data/registry/table.json +24 -3
- package/dist/mcp-data/registry/tag.json +24 -3
- package/dist/styles/table.css +1 -0
- package/dist/types/components/BarTitle/BarTitle.d.ts +3 -0
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +11 -3
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +11 -5
- package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +2 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +4 -1
- package/dist/types/components/PanelToolHeader/PanelToolHeader.d.ts +2 -0
- package/dist/types/components/PanelToolSearch/PanelToolSearch.d.ts +2 -0
- package/dist/types/components/PanelTools/panel-tools-types.d.ts +2 -0
- package/dist/types/components/ShellApp/ShellApp.d.ts +1 -0
- package/dist/types/components/ShellApp/shell-app-types.d.ts +2 -0
- package/dist/types/components/Table/Table.d.ts +10 -0
- package/dist/types/components/Table/table-row-view.d.ts +6 -1
- package/dist/types/components/TableSort/TableSort.d.ts +1 -0
- package/dist/types/components/Tag/Tag.d.ts +3 -0
- package/dist/types/components.d.ts +69 -6
- package/dist/types/utils/choice-list.d.ts +2 -0
- package/dist/vue/ds-button-filled.js +1 -0
- package/dist/vue/ds-button-unfilled.js +1 -0
- package/dist/vue/ds-panel-nav.js +1 -0
- package/dist/vue/ds-panel-tool-header.js +1 -0
- package/dist/vue/ds-panel-tool-search.js +1 -0
- package/dist/vue/ds-table.js +1 -0
- package/dist/vue/ds-tag.js +1 -0
- package/package.json +1 -1
- package/dist/components/p-6iF6gdoc.js +0 -2
- package/dist/components/p-6iF6gdoc.js.map +0 -1
- package/dist/components/p-BWDbER5T.js +0 -2
- package/dist/components/p-B_NN7k8H.js.map +0 -1
- package/dist/components/p-BdU6FPu4.js +0 -2
- package/dist/components/p-Bj018KMC.js +0 -2
- package/dist/components/p-Bj018KMC.js.map +0 -1
- package/dist/components/p-BxLF8b8a.js +0 -2
- package/dist/components/p-BxLF8b8a.js.map +0 -1
- package/dist/components/p-C1BJgnHY.js +0 -2
- package/dist/components/p-C1BJgnHY.js.map +0 -1
- package/dist/components/p-C78uTz-n.js +0 -2
- package/dist/components/p-C78uTz-n.js.map +0 -1
- package/dist/components/p-COn7l__5.js +0 -2
- package/dist/components/p-COn7l__5.js.map +0 -1
- package/dist/components/p-CsW_2w-s.js +0 -2
- package/dist/components/p-CvB76TJn.js +0 -2
- package/dist/components/p-D4-RkuER.js +0 -2
- package/dist/components/p-D4-RkuER.js.map +0 -1
- package/dist/components/p-DB_tlJ2d.js +0 -2
- package/dist/components/p-DB_tlJ2d.js.map +0 -1
- package/dist/components/p-NB-SoVpo.js +0 -2
- package/dist/components/p-P9My22Z1.js +0 -2
- package/dist/components/p-P9My22Z1.js.map +0 -1
- package/dist/components/p-WM1GTEun.js +0 -2
- package/dist/components/p-oAbq-DLk.js +0 -2
- package/dist/components/p-oAbq-DLk.js.map +0 -1
- /package/dist/components/{p-CxbGZJBU.js.map → p-BwAWZAHk.js.map} +0 -0
- /package/dist/components/{p-8atLxerP.js.map → p-By5TDnbF.js.map} +0 -0
- /package/dist/components/{p-DGHeKNfG.js.map → p-CE8gsv7V.js.map} +0 -0
- /package/dist/components/{p-Kp8ifB1g.js.map → p-Ct90k-nz.js.map} +0 -0
- /package/dist/components/{p-C82vesh_.js.map → p-Cx2dWjaW.js.map} +0 -0
- /package/dist/components/{p-B3iy9Rl_.js.map → p-DF8W85Tz.js.map} +0 -0
|
@@ -1171,7 +1171,8 @@
|
|
|
1171
1171
|
"On non-tab detail routes, show the parent PanelNav destination label in BarNav while the detail-page title remains in page content.",
|
|
1172
1172
|
"Dividers and groups visually organize peer route sections only and do not create hierarchy.",
|
|
1173
1173
|
"The application filters unauthorized sections before passing tabs to BarNav.",
|
|
1174
|
-
"Dashboard and Settings route state updates PanelNav groups, BarNav tabs, heading, basePath, currentUrl, and navStyle as one coordinated change."
|
|
1174
|
+
"Dashboard and Settings route state updates PanelNav groups, BarNav tabs, heading, basePath, currentUrl, and navStyle as one coordinated change.",
|
|
1175
|
+
"The overflow trigger automatically retains the shared surface-open wash through menu exit, separately from the selected route."
|
|
1175
1176
|
],
|
|
1176
1177
|
"responsiveBehavior": [
|
|
1177
1178
|
"Keep the BarNav region present so shell height and main-content origin remain stable across routes.",
|
|
@@ -1204,6 +1205,10 @@
|
|
|
1204
1205
|
{
|
|
1205
1206
|
"label": "Application shell composition",
|
|
1206
1207
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
1208
|
+
},
|
|
1209
|
+
{
|
|
1210
|
+
"label": "Surface ownership and trigger state",
|
|
1211
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
1207
1212
|
}
|
|
1208
1213
|
]
|
|
1209
1214
|
},
|
|
@@ -1337,7 +1342,8 @@
|
|
|
1337
1342
|
"expanded renders the larger heading, optional description, inset divider, and a full-width caption breadcrumb row above the title. The breadcrumb begins after 32px top padding; the following title and right-side actions share one top alignment. Compact renders 48px chrome with the existing icon Back action; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
|
|
1338
1343
|
"The one visible ordered action collapses by default in constrained presentation. Use never for an exceptional action whose hierarchy must remain visible; explicit overflow actions never leave the shared menu.",
|
|
1339
1344
|
"showDivider=false removes the bottom divider when the surrounding page composition supplies the boundary; showCompactDivider can independently restore or remove that boundary in compact and constrained variants.",
|
|
1340
|
-
"placement=shell-bar is reserved for ShellApp panel section navigation. It remains compact, omits description and breadcrumb presentation, and preserves applicable Back, section, primary, and overflow controls."
|
|
1345
|
+
"placement=shell-bar is reserved for ShellApp panel section navigation. It remains compact, omits description and breadcrumb presentation, and preserves applicable Back, section, primary, and overflow controls.",
|
|
1346
|
+
"Section, action, split-menu, and overflow triggers automatically retain the shared surface-open wash through exit. The expanded header presentation is layout, not surface ownership, and does not itself acquire a pressed wash."
|
|
1341
1347
|
],
|
|
1342
1348
|
"responsiveBehavior": [
|
|
1343
1349
|
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
@@ -1374,6 +1380,10 @@
|
|
|
1374
1380
|
{
|
|
1375
1381
|
"label": "Cross-browser shell-page and header coverage",
|
|
1376
1382
|
"path": "tests/e2e/bar-title.spec.ts"
|
|
1383
|
+
},
|
|
1384
|
+
{
|
|
1385
|
+
"label": "Surface ownership and trigger state",
|
|
1386
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
1377
1387
|
}
|
|
1378
1388
|
]
|
|
1379
1389
|
},
|
|
@@ -1857,10 +1867,11 @@
|
|
|
1857
1867
|
"Physical press scaling is on by default. Disable it only when an owning composite must keep child or background geometry fixed; hover and pressed interaction washes remain available.",
|
|
1858
1868
|
"Visible labels are emphasized by default. Set labelEmphasis to false when a composed surface deliberately needs the button label to match adjacent regular-weight control labels; this does not change the action hierarchy, foreground, icon, or interaction states.",
|
|
1859
1869
|
"ButtonFilled has no active, pressed, or selected state; a filled action is a command, not a toggle or a persistent selection.",
|
|
1860
|
-
"An open popup is a transient pressed state instead. While
|
|
1870
|
+
"An open popup is a transient pressed state instead. While surfaceOpen is true the pressed wash is held for the popup's complete rendered lifecycle and survives hover, so the trigger reads as held open without introducing a selected treatment.",
|
|
1861
1871
|
"hasMenu supports only the label and icon-label variants. The chevron is what communicates that a menu will open, so an icon-only filled menu button would leave the affordance unstated.",
|
|
1862
1872
|
"Split mode supports label, icon, and icon-label primary segments. The primary segment emits dsClick and the appended menu segment emits dsMenuClick.",
|
|
1863
|
-
"Split mode keeps both segments flush and uses a tertiary on-background separator. Rounded changes the shared outer radius without separating the segments."
|
|
1873
|
+
"Split mode keeps both segments flush and uses a tertiary on-background separator. Rounded changes the shared outer radius without separating the segments.",
|
|
1874
|
+
"Use surfaceOpen to identify this command as the owner of a visible menu, picker, or panel, even when that surface is distant. Keep the pressed wash through exit motion without adding selected styling or sustained physical scaling. Inline expansion and completed commands do not acquire this treatment."
|
|
1864
1875
|
],
|
|
1865
1876
|
"responsiveBehavior": [
|
|
1866
1877
|
"Use fill width only when the parent layout calls for a full-width action, commonly on narrow form layouts."
|
|
@@ -1880,6 +1891,10 @@
|
|
|
1880
1891
|
{
|
|
1881
1892
|
"label": "Storybook examples",
|
|
1882
1893
|
"path": "src/wc/components/ButtonFilled/ButtonFilled.stories.ts"
|
|
1894
|
+
},
|
|
1895
|
+
{
|
|
1896
|
+
"label": "Surface ownership and trigger state",
|
|
1897
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
1883
1898
|
}
|
|
1884
1899
|
]
|
|
1885
1900
|
},
|
|
@@ -1968,6 +1983,10 @@
|
|
|
1968
1983
|
"type": "boolean",
|
|
1969
1984
|
"required": false
|
|
1970
1985
|
},
|
|
1986
|
+
"surfaceOpen": {
|
|
1987
|
+
"type": "boolean | undefined",
|
|
1988
|
+
"required": false
|
|
1989
|
+
},
|
|
1971
1990
|
"type": {
|
|
1972
1991
|
"type": "'button' | 'submit' | 'reset'",
|
|
1973
1992
|
"required": false
|
|
@@ -2067,7 +2086,7 @@
|
|
|
2067
2086
|
"accessibility": [
|
|
2068
2087
|
"Provide an explicit accessible name for every icon-only action.",
|
|
2069
2088
|
"In split mode, provide menuAriaLabel for the appended ChevronDown segment, pass controls with the Menu id, and synchronize expanded with the Menu open state.",
|
|
2070
|
-
"Set hasMenu when the button triggers a Menu; it implies aria-haspopup of menu. Pass controls with the Menu id and expanded from the same open state given to Menu.
|
|
2089
|
+
"Set hasMenu when the button triggers a Menu; it implies aria-haspopup of menu. Pass controls with the Menu id and expanded from the same open state given to Menu. Surface-open popup triggers hold only the pressed wash while rendered, without changing their resting foreground; expanded disclosure controls without popup semantics retain the normal resting appearance.",
|
|
2071
2090
|
"Give an icon-only menu button an accessible name that states the role, such as More options or Customize table, because no visible label or chevron carries it.",
|
|
2072
2091
|
"Use haspopup directly for a non-menu popup such as a listbox or dialog; those cases get no chevron.",
|
|
2073
2092
|
"Use pressed only for a genuine toggle button; it supplies aria-pressed and dsChange intent. Use isActive only for owner-controlled visual emphasis inside a composite whose selection semantics live on the owner.",
|
|
@@ -2092,9 +2111,10 @@
|
|
|
2092
2111
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
2093
2112
|
"hasMenu covers two distinct menu-button shapes and the variant selects between them. With label or icon-label the action has a menu, and a trailing chevron carries the affordance. With icon the button is a menu and no chevron is added.",
|
|
2094
2113
|
"Because the icon-only shape has no chevron, its glyph must convey the menu on its own. Use Ellipses for a generic more-options or overflow control. Use a specific icon when the menu has a named purpose, such as Table for Customize table.",
|
|
2095
|
-
"An open popup is a transient pressed state rather than a selected one. While
|
|
2114
|
+
"An open popup is a transient pressed state rather than a selected one. While surfaceOpen is true, the pressed wash is held for the popup's complete rendered lifecycle and survives hover without promoting foreground or selected fill, including when chrome opts out of selected fills with activeFill set to false. Expanded disclosure buttons without popup semantics remain visually neutral.",
|
|
2096
2115
|
"Split mode supports label, icon, and icon-label primary segments. The primary segment emits dsClick and the appended menu segment emits dsMenuClick.",
|
|
2097
|
-
"Split mode keeps both segments flush and uses a tertiary surface-aware separator. Bordered mode also preserves the shared outer border; borderless mode limits the separator to the content line height."
|
|
2116
|
+
"Split mode keeps both segments flush and uses a tertiary surface-aware separator. Bordered mode also preserves the shared outer border; borderless mode limits the separator to the content line height.",
|
|
2117
|
+
"Use surfaceOpen to identify the owner of a visible menu, picker, or panel, even when it is distant. Preserve it through exit motion independently of expanded semantics, pressed toggles, and isActive selection. It preserves resting foreground and does not hold physical scaling. Inline expansion and last-click history do not acquire this treatment."
|
|
2098
2118
|
],
|
|
2099
2119
|
"responsiveBehavior": [
|
|
2100
2120
|
"The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants. Table caption Customize is one such layout: below 900px it uses the icon shape while keeping the same neutral resting foreground regardless of the controlled column configuration.",
|
|
@@ -2117,6 +2137,10 @@
|
|
|
2117
2137
|
{
|
|
2118
2138
|
"label": "Storybook examples",
|
|
2119
2139
|
"path": "src/wc/components/ButtonUnfilled/ButtonUnfilled.stories.ts"
|
|
2140
|
+
},
|
|
2141
|
+
{
|
|
2142
|
+
"label": "Surface ownership and trigger state",
|
|
2143
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
2120
2144
|
}
|
|
2121
2145
|
]
|
|
2122
2146
|
},
|
|
@@ -2221,6 +2245,10 @@
|
|
|
2221
2245
|
"type": "boolean",
|
|
2222
2246
|
"required": false
|
|
2223
2247
|
},
|
|
2248
|
+
"surfaceOpen": {
|
|
2249
|
+
"type": "boolean | undefined",
|
|
2250
|
+
"required": false
|
|
2251
|
+
},
|
|
2224
2252
|
"type": {
|
|
2225
2253
|
"type": "'button' | 'submit' | 'reset'",
|
|
2226
2254
|
"required": false
|
|
@@ -4268,7 +4296,8 @@
|
|
|
4268
4296
|
"Range selection applies the first date immediately as a one-day range; while an end is pending, that selected start retains its bold treatment and hovering or focusing another day paints the rest of the provisional inclusive span faint without emitting a value. A second activation completes an ordered inclusive range and gives both edges the bold treatment. A new activation after completion starts a replacement range.",
|
|
4269
4297
|
"Selection applies immediately and does not close the popup.",
|
|
4270
4298
|
"Changing category replaces the option-pane subtree so checkbox and other option visuals mount in their new state instead of transitioning from the previous category's row state.",
|
|
4271
|
-
"The trigger reports how many filter categories have selections. footerLayout=summary adds a full-width selected-count footer only while values are selected; footerLayout=categories-clear always reserves the category-pane footer height while keeping its inactive divider hidden, then reveals the divider and only its left-aligned Clear action while values are selected."
|
|
4299
|
+
"The trigger reports how many filter categories have selections. footerLayout=summary adds a full-width selected-count footer only while values are selected; footerLayout=categories-clear always reserves the category-pane footer height while keeping its inactive divider hidden, then reveals the divider and only its left-aligned Clear action while values are selected.",
|
|
4300
|
+
"The built-in trigger derives the shared surface-open wash from the rendered popup lifecycle, including closing. For an external trigger, the application owns that relationship and retains the wash until dsAfterClose; selected filter values remain independent."
|
|
4272
4301
|
],
|
|
4273
4302
|
"responsiveBehavior": [
|
|
4274
4303
|
"The popup defaults to the large menu-width token and clamps to the nearest data-ds-overlay-boundary rectangle or the viewport fallback.",
|
|
@@ -4291,6 +4320,10 @@
|
|
|
4291
4320
|
{
|
|
4292
4321
|
"label": "Storybook example",
|
|
4293
4322
|
"path": "src/wc/components/FilterMenu/FilterMenu.stories.ts"
|
|
4323
|
+
},
|
|
4324
|
+
{
|
|
4325
|
+
"label": "Surface ownership and trigger state",
|
|
4326
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
4294
4327
|
}
|
|
4295
4328
|
]
|
|
4296
4329
|
},
|
|
@@ -6091,7 +6124,8 @@
|
|
|
6091
6124
|
"Dividers group menu items but never participate in previous or next resolution.",
|
|
6092
6125
|
"The anchored local-view menu retains its neighboring-direction hints; the primary-page sheet uses an unfilled perimeter trigger without hints.",
|
|
6093
6126
|
"A sheet trigger can combine stable page identity and the current local view, separated by a decorative middle dot. The whole control opens only the supplied local destinations; long page names truncate before crowding out the active view.",
|
|
6094
|
-
"Sheet selection emits navigation intent immediately while exit motion runs independently, so the controlled title can update without waiting for dismissal. Removing the owner or hiding its header closes the top layer without leaving the application blocked."
|
|
6127
|
+
"Sheet selection emits navigation intent immediately while exit motion runs independently, so the controlled title can update without waiting for dismissal. Removing the owner or hiding its header closes the top layer without leaving the application blocked.",
|
|
6128
|
+
"The trigger automatically retains the shared surface-open pressed wash through menu or sheet exit. Selecting a destination remains separate from owning the open surface."
|
|
6095
6129
|
],
|
|
6096
6130
|
"responsiveBehavior": [
|
|
6097
6131
|
"Use only in the dedicated mobile header presentation."
|
|
@@ -6100,6 +6134,10 @@
|
|
|
6100
6134
|
{
|
|
6101
6135
|
"label": "Storybook",
|
|
6102
6136
|
"path": "src/wc/components/MobileSectionSwitcher/MobileSectionSwitcher.stories.ts"
|
|
6137
|
+
},
|
|
6138
|
+
{
|
|
6139
|
+
"label": "Surface ownership and trigger state",
|
|
6140
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
6103
6141
|
}
|
|
6104
6142
|
]
|
|
6105
6143
|
},
|
|
@@ -6693,9 +6731,10 @@
|
|
|
6693
6731
|
"Dashboard presents day-to-day operational destinations; Settings presents administrative and configuration destinations.",
|
|
6694
6732
|
"The standard footer switches the entire destination collection and navStyle between Dashboard and Settings and exposes the user/account entry.",
|
|
6695
6733
|
"The host owns the external user menu opened from dsNavUserAction.",
|
|
6696
|
-
"While the external user menu is open or closing,
|
|
6734
|
+
"While the external user menu is open or closing, accountMenuSurfaceOpen keeps its trigger visibly pressed without applying selected-destination foreground treatment in either expanded or collapsed presentation.",
|
|
6697
6735
|
"Item and header controls inherit the shared md control radius while local shell geometry continues to own collapsed layout and footer animation positioning.",
|
|
6698
|
-
"On desktop, allow user-controlled expand and collapse and persist the preference with storageKey when cross-session persistence is appropriate."
|
|
6736
|
+
"On desktop, allow user-controlled expand and collapse and persist the preference with storageKey when cross-session persistence is appropriate.",
|
|
6737
|
+
"Flyout triggers automatically hold the shared surface-open wash through exit; expanded inline branches do not. For the external account surface, the application supplies accountMenuSurfaceOpen for its rendered lifetime and keeps accountMenuExpanded tied to disclosure semantics."
|
|
6699
6738
|
],
|
|
6700
6739
|
"responsiveBehavior": [
|
|
6701
6740
|
"At 1200px and wider, default to expanded, allow the user to expand or collapse, and restore the locally persisted desktop preference when available.",
|
|
@@ -6733,6 +6772,10 @@
|
|
|
6733
6772
|
{
|
|
6734
6773
|
"label": "Application shell composition",
|
|
6735
6774
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
6775
|
+
},
|
|
6776
|
+
{
|
|
6777
|
+
"label": "Surface ownership and trigger state",
|
|
6778
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
6736
6779
|
}
|
|
6737
6780
|
]
|
|
6738
6781
|
},
|
|
@@ -6745,6 +6788,10 @@
|
|
|
6745
6788
|
"type": "boolean",
|
|
6746
6789
|
"required": false
|
|
6747
6790
|
},
|
|
6791
|
+
"accountMenuSurfaceOpen": {
|
|
6792
|
+
"type": "boolean | undefined",
|
|
6793
|
+
"required": false
|
|
6794
|
+
},
|
|
6748
6795
|
"activeChildId": {
|
|
6749
6796
|
"type": "string",
|
|
6750
6797
|
"required": false
|
|
@@ -7043,7 +7090,8 @@
|
|
|
7043
7090
|
"Header chrome text is not selectable; actions remain keyboard focusable and interactive.",
|
|
7044
7091
|
"Adjacent trailing actions keep the shared 4px control gap in drawer and fullscreen presentations.",
|
|
7045
7092
|
"When fullscreen and overflow actions appear together, author fullscreen before overflow so Ellipses remains the rightmost action.",
|
|
7046
|
-
"PanelTools supplies application-owned actions and relays their ids through its shared dsHeaderAction event."
|
|
7093
|
+
"PanelTools supplies application-owned actions and relays their ids through its shared dsHeaderAction event.",
|
|
7094
|
+
"Application-owned action surfaces carry surfaceOpen independently from expanded disclosure and pressed toggle state. Retain surfaceOpen until the associated surface completes closing; the header forwards this relationship without owning the menu or panel."
|
|
7047
7095
|
],
|
|
7048
7096
|
"responsiveBehavior": [
|
|
7049
7097
|
"The title truncates between optional leading navigation and trailing action zones."
|
|
@@ -7052,6 +7100,10 @@
|
|
|
7052
7100
|
{
|
|
7053
7101
|
"label": "Standalone examples",
|
|
7054
7102
|
"path": "src/wc/components/PanelToolHeader/PanelToolHeader.stories.ts"
|
|
7103
|
+
},
|
|
7104
|
+
{
|
|
7105
|
+
"label": "Surface ownership and trigger state",
|
|
7106
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
7055
7107
|
}
|
|
7056
7108
|
]
|
|
7057
7109
|
},
|
|
@@ -7084,6 +7136,10 @@
|
|
|
7084
7136
|
"type": "boolean",
|
|
7085
7137
|
"required": false
|
|
7086
7138
|
},
|
|
7139
|
+
"menuSurfaceOpen": {
|
|
7140
|
+
"type": "boolean | undefined",
|
|
7141
|
+
"required": false
|
|
7142
|
+
},
|
|
7087
7143
|
"menuTriggerId": {
|
|
7088
7144
|
"type": "string",
|
|
7089
7145
|
"required": false
|
|
@@ -7168,7 +7224,8 @@
|
|
|
7168
7224
|
"The search icon stays foreground-secondary at rest, hover, focus, active, and while the query is filled.",
|
|
7169
7225
|
"The row and control surface remain transparent so the ShellApp chrome wash is visible behind them.",
|
|
7170
7226
|
"The row divider remains the same tertiary 1px boundary while the input is focused because it belongs to the 48px container rather than the input control.",
|
|
7171
|
-
"With filtering enabled, the md search control, decorative vertical divider, and borderless md Filter action are separated by 8px; filterActive promotes only the trigger foreground without adding a selected fill."
|
|
7227
|
+
"With filtering enabled, the md search control, decorative vertical divider, and borderless md Filter action are separated by 8px; filterActive promotes only the trigger foreground without adding a selected fill.",
|
|
7228
|
+
"Applied filters and an open filter surface are independent states. Use filterSurfaceOpen through the external surface exit while filterExpanded describes disclosure and filterActive describes applied values."
|
|
7172
7229
|
],
|
|
7173
7230
|
"responsiveBehavior": [
|
|
7174
7231
|
"The row fills the available drawer or fullscreen width, allows its search region to shrink inside a 300px drawer without pushing the filter trigger under the tool rail, and does not reduce its control below md density."
|
|
@@ -7191,6 +7248,10 @@
|
|
|
7191
7248
|
{
|
|
7192
7249
|
"label": "Storybook examples",
|
|
7193
7250
|
"path": "src/wc/components/PanelToolSearch/PanelToolSearch.stories.ts"
|
|
7251
|
+
},
|
|
7252
|
+
{
|
|
7253
|
+
"label": "Surface ownership and trigger state",
|
|
7254
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
7194
7255
|
}
|
|
7195
7256
|
]
|
|
7196
7257
|
},
|
|
@@ -7219,6 +7280,10 @@
|
|
|
7219
7280
|
"type": "boolean",
|
|
7220
7281
|
"required": false
|
|
7221
7282
|
},
|
|
7283
|
+
"filterSurfaceOpen": {
|
|
7284
|
+
"type": "boolean | undefined",
|
|
7285
|
+
"required": false
|
|
7286
|
+
},
|
|
7222
7287
|
"filterTriggerId": {
|
|
7223
7288
|
"type": "string",
|
|
7224
7289
|
"required": false
|
|
@@ -7366,7 +7431,8 @@
|
|
|
7366
7431
|
"The application owns slotted tool products and data while PanelTools owns rail ordering, drawer selection, open state, motion, and shell events.",
|
|
7367
7432
|
"Opening and closing clip an already-rendered fixed-width surface. Header and tool content remain fully opaque and retained during width motion; transition completion is accepted only at the measured terminal clip width, after which the closed surface becomes inert and paint-skipped.",
|
|
7368
7433
|
"Entering and exiting fullscreen snaps without borrowing the drawer open or close animation.",
|
|
7369
|
-
"When fullscreenHeaderMode is split, PanelTools suppresses only its fullscreen shared header. The application renders exactly two canonical ds-panel-tool-header instances: a tool-title/list-actions header over the 300px history pane and a chat-title/Exit-fullscreen/chat-actions header over the detail pane. The detail header omits Back because the list remains visible."
|
|
7434
|
+
"When fullscreenHeaderMode is split, PanelTools suppresses only its fullscreen shared header. The application renders exactly two canonical ds-panel-tool-header instances: a tool-title/list-actions header over the 300px history pane and a chat-title/Exit-fullscreen/chat-actions header over the detail pane. The detail header omits Back because the list remains visible.",
|
|
7435
|
+
"Header action surfaceOpen identifies the owner of an external menu or panel without turning that action into a selected tool or toggle. The application owns this surface lifecycle."
|
|
7370
7436
|
],
|
|
7371
7437
|
"responsiveBehavior": [
|
|
7372
7438
|
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
@@ -7405,6 +7471,10 @@
|
|
|
7405
7471
|
{
|
|
7406
7472
|
"label": "Application shell composition",
|
|
7407
7473
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
7474
|
+
},
|
|
7475
|
+
{
|
|
7476
|
+
"label": "Surface ownership and trigger state",
|
|
7477
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
7408
7478
|
}
|
|
7409
7479
|
]
|
|
7410
7480
|
},
|
|
@@ -8012,7 +8082,7 @@
|
|
|
8012
8082
|
"Create sections only for categories that are meaningful to customers, not merely to break a long list into arbitrary chunks.",
|
|
8013
8083
|
"When any option supplies subtext, every row uses the same subtext structure and missing values render an em dash. Subtext should disambiguate or add decision-helpful information.",
|
|
8014
8084
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
8015
|
-
"Use an option action only for a contextual menu about that user-managed option. The fixed ellipsis action appears on hover, keyboard activity, focus, and touch;
|
|
8085
|
+
"Use an option action only for a contextual menu about that user-managed option. The fixed ellipsis action appears on hover, keyboard activity, focus, and touch; surfaceOpen keeps it visible while its controlled menu is rendered. Activating it emits dsOptionAction without selecting the option or closing the Select popup.",
|
|
8016
8086
|
"Use option subtextActions for a compact set of immediate actions that belong to one option. They render beneath only that option's label using the standard supporting-text inset and rhythm, use action or negative semantic color, and emit dsOptionSubtextAction without selecting the option or closing the popup. Unlike descriptive subtext, they do not reserve a blank supporting line on neighboring options.",
|
|
8017
8087
|
"The optional prefix icon and trailing indicator always use the parent surface's secondary foreground color, including when a selected value promotes the label to primary. When collapseLabel compact icon-only chrome is active, a selected value promotes the prefix icon to primary instead. The default down indicator communicates disclosure; up-down is reserved for compact value steppers such as pagination page size.",
|
|
8018
8088
|
"While the popup is open, the trigger holds the pressed interaction wash without changing its resting foreground or selected-value treatment.",
|
|
@@ -8026,7 +8096,8 @@
|
|
|
8026
8096
|
"The error trigger uses a 1.5px bold-negative inset stroke so invalid state remains distinguishable from the normal 1px border without changing control geometry. Set hasBorder to false for chrome where the trigger must remain borderless at rest, when selected or focused, and when invalid; error semantics and supporting copy remain available.",
|
|
8027
8097
|
"An initially empty option set is not an expected Select use case. The no-results state describes a search with no matches, not a source with no choices.",
|
|
8028
8098
|
"Use options for a flat list or sections for grouped choices; when sections are present they take precedence.",
|
|
8029
|
-
"The background prop describes the actual parent surface and uses the same surface set as ButtonUnfilled."
|
|
8099
|
+
"The background prop describes the actual parent surface and uses the same surface set as ButtonUnfilled.",
|
|
8100
|
+
"Select owns its associated popup and automatically retains the shared surface-open pressed wash. Consumers do not synchronize a second flag for the built-in picker. Contextual option actions are externally owned: their surfaceOpen state keeps the action visible through the associated menu exit, independently of the selected option."
|
|
8030
8101
|
],
|
|
8031
8102
|
"responsiveBehavior": [
|
|
8032
8103
|
"Use width fill for form fields and width hug for compact filter bars. Override those defaults only when the owning layout has a clear constraint.",
|
|
@@ -8057,6 +8128,10 @@
|
|
|
8057
8128
|
{
|
|
8058
8129
|
"label": "Selection patterns",
|
|
8059
8130
|
"path": "src/docs/SelectionPatterns.mdx"
|
|
8131
|
+
},
|
|
8132
|
+
{
|
|
8133
|
+
"label": "Surface ownership and trigger state",
|
|
8134
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
8060
8135
|
}
|
|
8061
8136
|
]
|
|
8062
8137
|
},
|
|
@@ -8347,7 +8422,8 @@
|
|
|
8347
8422
|
"Managed mobile Back and page-action controls use the same large touch density as the mobile navigation header without increasing the shared header height.",
|
|
8348
8423
|
"Managed ShellApp keeps the selected desktop section-navigation presentation and ShellPage present and owns page header stickiness and the content scroller.",
|
|
8349
8424
|
"Route-owned pageChrome independently selects ShellPage contentInset, page-header seams, scroll compaction, expanded and compact header-divider visibility, and contentSurface. ShellApp forwards them while resolving whether desktop title geometry is page-local or shell-bar-owned.",
|
|
8350
|
-
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
8425
|
+
"The application filters unauthorized destinations, sections, and tools before passing them into shell components.",
|
|
8426
|
+
"Application-owned header actions and the account trigger retain surface ownership across shell presentations. Supply surfaceOpen on header actions and accountMenuSurfaceOpen on navigation for rendered surface lifetimes; keep disclosure and selected-route state separate."
|
|
8351
8427
|
],
|
|
8352
8428
|
"responsiveBehavior": [
|
|
8353
8429
|
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
@@ -8406,6 +8482,10 @@
|
|
|
8406
8482
|
{
|
|
8407
8483
|
"label": "Application shell contract",
|
|
8408
8484
|
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
8485
|
+
},
|
|
8486
|
+
{
|
|
8487
|
+
"label": "Surface ownership and trigger state",
|
|
8488
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
8409
8489
|
}
|
|
8410
8490
|
]
|
|
8411
8491
|
},
|
|
@@ -8770,7 +8850,8 @@
|
|
|
8770
8850
|
"Items with mobileDestination inbox map to one mobile Inbox destination while retaining the actual active tool id; the canonical recipe exposes Activity directly and keeps Inbox grouping opt-in.",
|
|
8771
8851
|
"Stable tool ids own named slots; label, order, rail placement, shortcut, and mobile destination are explicit item data.",
|
|
8772
8852
|
"Application-owned rail accessories are forwarded unchanged to PanelTools on desktop and tablet and remain independent from activeTool and open.",
|
|
8773
|
-
"Switching responsive mode must not recreate application-owned slotted product elements."
|
|
8853
|
+
"Switching responsive mode must not recreate application-owned slotted product elements.",
|
|
8854
|
+
"Header actions forward application-owned surfaceOpen through each presentation, independently of expanded semantics and pressed toggles."
|
|
8774
8855
|
],
|
|
8775
8856
|
"responsiveBehavior": [
|
|
8776
8857
|
"Desktop and tablet compose PanelTools-compatible rail and drawer chrome.",
|
|
@@ -8796,6 +8877,10 @@
|
|
|
8796
8877
|
{
|
|
8797
8878
|
"label": "PanelTools contract",
|
|
8798
8879
|
"path": "src/wc/components/PanelTools/PanelTools.agent.json"
|
|
8880
|
+
},
|
|
8881
|
+
{
|
|
8882
|
+
"label": "Surface ownership and trigger state",
|
|
8883
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
8799
8884
|
}
|
|
8800
8885
|
]
|
|
8801
8886
|
},
|
|
@@ -9769,7 +9854,8 @@
|
|
|
9769
9854
|
"Row selection owns the single sticky start lane. One explicitly sized application column can own the sticky end lane, or the start lane when selection is absent. Each sticky boundary owns one fixed divider and a row-clipped directional shadow that paints into the adjacent scrolling columns only while more inline content remains beyond that edge.",
|
|
9770
9855
|
"Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, wrapping multiple-Tag content, icon-only, icon-and-text, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Text objects may declare an optional href (and target) on the primary track only; the table renders a native anchor with the shared brand text-action treatment when the URL is safe, and leaves scalars unlinked. Standard secondary copy defaults to the secondary foreground and may declare a semantic Text color when the application data carries intent; an optional tertiary track uses the same subdued body-small recipe as secondary. Secondary and tertiary may also be a short list of colorable runs, rendered on one line with the table's middle-dot separator. A run may supply help to add the shared dotted underline and a bottom-start Tooltip when compact visible copy summarizes supplementary details; explicit line breaks create a compact unbulleted list without obscuring the current cell's earlier tracks. Dual-primary copy keeps both tracks primary unless explicitly colored and does not gain a tertiary track. Body data cells share 8px outer padding; header and group rows keep their own geometry. Text tracks, including Empty, keep 4px inline padding so copy lines up with column-header labels; Tag and icon-only tracks stay on the 8px cell chrome alone. Icon-and-text cells (`kind: 'icon-text'`) place one md prefix icon beside the same copy stack as a text cell. The icon slot takes 2px padding on every side, then a 2px flex gap before the copy; text-track padding stays on the copy. Omit iconLabel when the glyph is decorative. 20px content (body-medium text, md icon, and the row checkbox) sits in a 24px track so it stays optically aligned with 24px Tag and Action content. Single-track text, selection, tag-only, icon-only, icon-and-text, Action, Empty, Blank, and 1-track Image cells resolve a 40px base contract while two-track cells grow to 64px and three-track cells grow to 88px. Every later track adds 24px, so four tracks resolve to 112px, five to 136px, and the sequence may continue. Tracks stack with no gap. Wrapping primary on a 1-track cell uses that same rhythm: two wrapped lines share the 64px row and three wrapped lines share the 88px row. Wrapping secondary keeps primary on the first track and consumes later tracks: two secondary lines share the 88px row and three secondary lines share a 112px fourth track. Keep the same track count in every row of a table or group when those rows should share one height. Tag cells use the inset Tag recipe: md double-inset is a 24px control for tag-only and tag-with-text, while text-with-tag uses sm single-inset at 20px so the second-track pill sits in the same 24px lane. Multiple-Tag cells use `kind: 'tags'`, a positive `tracks` count, and small single-inset Tags that wrap naturally at the column edge. Each wrap line is a 24px track with no stack gap, matching text. The tallest cell establishes the native row height, so all sibling cells match even at four, five, or more tracks; virtual tables use the declared count as the initial estimate and measure responsive wrapping after paint. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled, default to unbordered, and emit row, column, and action identities through dsCellAction. When an action cell declares items, that Ellipses trigger opens the shared ds-menu for commands, dividers, inactive rows, and destructive rows instead of emitting on click; choosing a command emits dsCellAction with that item's actionId. Omit items to keep a single-shot control. Image cells declare tracks 1, 2, or 3 so the 16:9 bordered preview fills that body-row content box (cell height minus 8px padding) and the column hugs the resulting width; omit tracks for the 1-track recipe, and keep image tracks aligned with the other cells in the table or group. Image cells fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type, variant, and track-count hooks keep every cell family independently styleable.",
|
|
9771
9856
|
"Score-and-text cells (`kind: score-text`) place the small 24px safety score at the top-right of the cell while the same one-, two-, or three-track copy stack as a standard text cell fills from the start edge. The score is top-aligned with the first text track, adds no inner padding, and defaults its accessible name prefix to Safety score. Score-and-text loading geometry uses the matching small score skeleton and declared copy tracks.",
|
|
9772
|
-
"The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling."
|
|
9857
|
+
"The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling.",
|
|
9858
|
+
"Use surfaceOpenRowId to identify the interactive row associated with a visible detail panel or other contextual surface. The application owns opening, same-row toggling, switching records, and closing; retain the identity through exit motion, then clear it. Move it when panel navigation changes the displayed record. This pressed wash spans sticky and scrolling cells, follows stable row identity through virtualization, and never checks a checkbox or changes selectedRowIds. Group expansion remains an inline disclosure."
|
|
9773
9859
|
],
|
|
9774
9860
|
"responsiveBehavior": [
|
|
9775
9861
|
"The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
|
|
@@ -9812,6 +9898,10 @@
|
|
|
9812
9898
|
{
|
|
9813
9899
|
"label": "Menu trigger composition",
|
|
9814
9900
|
"path": "agent/patterns/menu-trigger/pattern.agent.json"
|
|
9901
|
+
},
|
|
9902
|
+
{
|
|
9903
|
+
"label": "Surface ownership and trigger state",
|
|
9904
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
9815
9905
|
}
|
|
9816
9906
|
]
|
|
9817
9907
|
},
|
|
@@ -10040,6 +10130,10 @@
|
|
|
10040
10130
|
"type": "boolean",
|
|
10041
10131
|
"required": false
|
|
10042
10132
|
},
|
|
10133
|
+
"surfaceOpenRowId": {
|
|
10134
|
+
"type": "string | undefined",
|
|
10135
|
+
"required": false
|
|
10136
|
+
},
|
|
10043
10137
|
"totalCount": {
|
|
10044
10138
|
"type": "number | undefined",
|
|
10045
10139
|
"required": false
|
|
@@ -10352,7 +10446,8 @@
|
|
|
10352
10446
|
"states": [
|
|
10353
10447
|
"options and grouping are controlled. A data option may supply product-owned orderOptions; otherwise Order defaults to Ascending and Descending. dsGroupChange reports a complete TableGroupingState and dsClear requests null grouping without mutating either input.",
|
|
10354
10448
|
"Selecting a new data point starts at its first custom order option, or ascending when it has no custom order options. Re-selecting the active data point preserves its complete order state.",
|
|
10355
|
-
"Selecting a data point or direction applies immediately and leaves the dialog open so the other pane can be changed."
|
|
10449
|
+
"Selecting a data point or direction applies immediately and leaves the dialog open so the other pane can be changed.",
|
|
10450
|
+
"The grouping picker automatically holds the shared surface-open wash through exit. Opening this picker is separate from expanding an inline table group."
|
|
10356
10451
|
],
|
|
10357
10452
|
"responsiveBehavior": [
|
|
10358
10453
|
"Use in the trailing region of ds-table-toolbar.",
|
|
@@ -10378,6 +10473,10 @@
|
|
|
10378
10473
|
{
|
|
10379
10474
|
"label": "Toolbar composition owner",
|
|
10380
10475
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10476
|
+
},
|
|
10477
|
+
{
|
|
10478
|
+
"label": "Surface ownership and trigger state",
|
|
10479
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10381
10480
|
}
|
|
10382
10481
|
]
|
|
10383
10482
|
},
|
|
@@ -10481,7 +10580,8 @@
|
|
|
10481
10580
|
"states": [
|
|
10482
10581
|
"views, value, and dirty are controlled. Dirty state is presented only for a selected custom view; the default template never shows the trigger dot or save/discard actions even if dirty is supplied. Selection, create, save, discard, rename, and remove events communicate intent and never mutate application records.",
|
|
10483
10582
|
"The component owns only transient interaction state: the contextual menu, naming dialog, draft name, duplicate-name validation, and focus restoration.",
|
|
10484
|
-
"The default view is a non-editable template. Application-owned custom views appear in a separate section with Rename and Remove actions. New view opens the naming dialog. When an editable selected view is dirty, that view row shows Save and negative Discard supporting actions while the footer remains dedicated to New view. The application decides which table state to capture, restore, and persist."
|
|
10583
|
+
"The default view is a non-editable template. Application-owned custom views appear in a separate section with Rename and Remove actions. New view opens the naming dialog. When an editable selected view is dirty, that view row shows Save and negative Discard supporting actions while the footer remains dedicated to New view. The application decides which table state to capture, restore, and persist.",
|
|
10584
|
+
"The built-in picker and contextual option menu each retain their own surface-open treatment. Opening a view menu does not select that view."
|
|
10485
10585
|
],
|
|
10486
10586
|
"responsiveBehavior": [
|
|
10487
10587
|
"The control remains a single toolbar item and relies on Select, Menu, and Modal collision and viewport behavior. Its trigger hugs short view names and is capped at the compact menu-width token so long names truncate while the dirty dot stays visible. Its choice popup keeps that same token as the minimum width.",
|
|
@@ -10506,6 +10606,10 @@
|
|
|
10506
10606
|
{
|
|
10507
10607
|
"label": "Toolbar composition owner",
|
|
10508
10608
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10609
|
+
},
|
|
10610
|
+
{
|
|
10611
|
+
"label": "Surface ownership and trigger state",
|
|
10612
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10509
10613
|
}
|
|
10510
10614
|
]
|
|
10511
10615
|
},
|
|
@@ -10636,7 +10740,8 @@
|
|
|
10636
10740
|
"Selected scopes render as neutral md Chips using the double-inset recipe so they remain 24px high inside the 32px md search control and each can be removed directly.",
|
|
10637
10741
|
"Backspace edits a non-empty field-picker query, then closes the open slash listbox when that query is empty. When the table query is empty and the listbox is already closed, the next Backspace removes the last selected field. Ordinary Backspace edits table query text when the listbox is closed.",
|
|
10638
10742
|
"Duplicate, blank, and unknown field identities are ignored for presentation. Selected fields preserve the consumer's order.",
|
|
10639
|
-
"Inactive search leaves the tab order, closes the field listbox, and does not emit query or field changes."
|
|
10743
|
+
"Inactive search leaves the tab order, closes the field listbox, and does not emit query or field changes.",
|
|
10744
|
+
"The field-picker action holds the shared surface-open wash while its listbox is visible; chosen search fields remain independent."
|
|
10640
10745
|
],
|
|
10641
10746
|
"responsiveBehavior": [
|
|
10642
10747
|
"The control fills the available inline size supplied by the table toolbar search slot. Selected Chips and the editable query share one horizontal editor lane so the md control does not grow vertically.",
|
|
@@ -10663,6 +10768,10 @@
|
|
|
10663
10768
|
{
|
|
10664
10769
|
"label": "Toolbar composition owner",
|
|
10665
10770
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10771
|
+
},
|
|
10772
|
+
{
|
|
10773
|
+
"label": "Surface ownership and trigger state",
|
|
10774
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10666
10775
|
}
|
|
10667
10776
|
]
|
|
10668
10777
|
},
|
|
@@ -10787,7 +10896,8 @@
|
|
|
10787
10896
|
"columns and sort are controlled. dsSortChange reports the next TableSortState and never mutates those inputs. The same sort object is what column headers emit through the table.",
|
|
10788
10897
|
"Selecting a different data field keeps the current direction, or starts ascending when no sort exists. Selecting a direction applies it to the current field, or to the first sortable field when no sort exists. Selecting the already-active field or direction is a no-op and does not toggle the way a header click does.",
|
|
10789
10898
|
"The trigger stays Sort in regular-weight resting secondary chrome. Field and direction selection live in the menu and on column headers, so the trigger never uses active primary emphasis. It keeps pressed interaction paint without physically scaling inside the stable table caption row.",
|
|
10790
|
-
"Compound sortable headers contribute one Data row per segment. Action columns never appear."
|
|
10899
|
+
"Compound sortable headers contribute one Data row per segment. Action columns never appear.",
|
|
10900
|
+
"The trigger automatically holds the shared surface-open wash through menu exit while the selected sort remains independently controlled."
|
|
10791
10901
|
],
|
|
10792
10902
|
"responsiveBehavior": [
|
|
10793
10903
|
"Place the control in the trailing region of ds-table-toolbar with Filter and Group.",
|
|
@@ -10813,6 +10923,10 @@
|
|
|
10813
10923
|
{
|
|
10814
10924
|
"label": "Toolbar composition owner",
|
|
10815
10925
|
"path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
|
|
10926
|
+
},
|
|
10927
|
+
{
|
|
10928
|
+
"label": "Surface ownership and trigger state",
|
|
10929
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
10816
10930
|
}
|
|
10817
10931
|
]
|
|
10818
10932
|
},
|
|
@@ -11018,7 +11132,8 @@
|
|
|
11018
11132
|
"isInset opts into reduced outer geometry only when Tag is nested inside a control of the same density. The default single inset removes 4px overall; insetDepth double removes 8px overall and falls back to single at xs to protect minimum icon geometry. Semantic styling, typography, icons, gaps, radius, and interaction remain unchanged.",
|
|
11019
11133
|
"Labels stay on one line and truncate only when the owner supplies a maximum width.",
|
|
11020
11134
|
"Omitted interactive renders static metadata with no focus, event, or suffix. Interactive adds the fixed ChevronUpDown suffix and emits dsClick without toggling expanded internally.",
|
|
11021
|
-
"isInactive disables only the interactive button and applies the shared inactive treatment."
|
|
11135
|
+
"isInactive disables only the interactive button and applies the shared inactive treatment.",
|
|
11136
|
+
"Interactive tags use surfaceOpen for the associated menu lifecycle, including exit motion. This holds the shared pressed wash without changing the intent that describes the metadata value. Static tags never acquire surface ownership."
|
|
11022
11137
|
],
|
|
11023
11138
|
"responsiveBehavior": [
|
|
11024
11139
|
"The owner selects md, sm, or xs density to match its local layout and owns collection wrapping, overflow, and condensation. Use isInset only for same-density control nesting.",
|
|
@@ -11039,6 +11154,10 @@
|
|
|
11039
11154
|
{
|
|
11040
11155
|
"label": "Storybook examples",
|
|
11041
11156
|
"path": "src/wc/components/Tag/Tag.stories.ts"
|
|
11157
|
+
},
|
|
11158
|
+
{
|
|
11159
|
+
"label": "Surface ownership and trigger state",
|
|
11160
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
11042
11161
|
}
|
|
11043
11162
|
]
|
|
11044
11163
|
},
|
|
@@ -11094,6 +11213,10 @@
|
|
|
11094
11213
|
"size": {
|
|
11095
11214
|
"type": "TagSize",
|
|
11096
11215
|
"required": false
|
|
11216
|
+
},
|
|
11217
|
+
"surfaceOpen": {
|
|
11218
|
+
"type": "boolean | undefined",
|
|
11219
|
+
"required": false
|
|
11097
11220
|
}
|
|
11098
11221
|
},
|
|
11099
11222
|
"events": [
|