@ds-mo/ui 8.1.0 → 8.2.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/README.md +1 -1
- package/dist/.build-stamp +1 -1
- package/dist/agent.json +501 -47
- package/dist/angular/ds-field.d.ts +1 -1
- package/dist/angular/ds-field.js +3 -3
- package/dist/angular/ds-input.d.ts +1 -1
- package/dist/angular/ds-input.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-radio.d.ts +18 -0
- package/dist/angular/{ds-radio-group.js → ds-radio.js} +12 -12
- package/dist/angular/ds-slider.d.ts +12 -3
- package/dist/angular/ds-slider.js +8 -4
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -1
- package/dist/angular/proxies.d.ts +1 -1
- package/dist/angular/proxies.js +1 -1
- package/dist/angular/radio-value-accessor.d.ts +1 -1
- package/dist/angular/radio-value-accessor.js +2 -2
- package/dist/components/ds-app-shell.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-nav.js.map +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-data-viz-donut.js +1 -1
- package/dist/components/ds-card-data-viz-donut.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card.js +1 -1
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-bar.js.map +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-donut.js.map +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-chart-line.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-field.js.map +1 -1
- package/dist/components/ds-icon.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-input.js.map +1 -1
- package/dist/components/ds-loader.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-modal.js.map +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-nav.js.map +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-tools.js +1 -1
- package/dist/components/{ds-radio-group.d.ts → ds-radio.d.ts} +4 -4
- package/dist/components/ds-radio.js +2 -0
- package/dist/components/ds-radio.js.map +1 -0
- package/dist/components/ds-select-multi.js +1 -1
- package/dist/components/ds-select-multi.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tab-group.js.map +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/{p-CTmsQjsE.js → p-BU_gxTiw.js} +2 -2
- package/dist/components/p-BU_gxTiw.js.map +1 -0
- package/dist/components/{p-Ckiwpsgw.js → p-BjhTeU17.js} +2 -2
- package/dist/components/{p-Du9UUSJ5.js → p-C91iXoXj.js} +2 -2
- package/dist/components/{p-WdtWRvVr.js → p-CDu_LfhF.js} +2 -2
- package/dist/components/{p-_zP4v-Al.js → p-CSyIAX11.js} +2 -2
- package/dist/components/p-CSyIAX11.js.map +1 -0
- package/dist/components/{p-BMbadvZo.js → p-Cj4vIqqx.js} +2 -2
- package/dist/components/{p-BMbadvZo.js.map → p-Cj4vIqqx.js.map} +1 -1
- package/dist/components/{p-wxw8arTd.js → p-Cpr3K41-.js} +1 -1
- package/dist/components/{p-wxw8arTd.js.map → p-Cpr3K41-.js.map} +1 -1
- package/dist/components/{p-CwaC4wLu.js → p-CqsgiNwB.js} +2 -2
- package/dist/components/p-CqsgiNwB.js.map +1 -0
- package/dist/components/{p-JsVSx7ZR.js → p-DHJZDpNk.js} +2 -2
- package/dist/components/{p-DDBLO7bY.js → p-DKVDYHxb.js} +2 -2
- package/dist/components/p-DRqbwDzo.js +2 -0
- package/dist/components/p-DRqbwDzo.js.map +1 -0
- package/dist/components/{p-B2FhhQba.js → p-KeMecQN9.js} +2 -2
- package/dist/components/p-NwPqPArp.js +2 -0
- package/dist/components/p-NwPqPArp.js.map +1 -0
- package/dist/components/{p-COzps7J4.js → p-PP5602IN.js} +2 -2
- package/dist/components/p-PP5602IN.js.map +1 -0
- package/dist/components/p-VKIsOVza.js +2 -0
- package/dist/components/p-VKIsOVza.js.map +1 -0
- package/dist/components/p-kGSowBA8.js +2 -0
- package/dist/components/{p-auwU64d8.js.map → p-kGSowBA8.js.map} +1 -1
- package/dist/docs/components.json +1391 -166
- package/dist/lib/components/Text/text-types.d.ts +1 -1
- package/dist/react/components.d.ts +1 -1
- package/dist/react/components.js +1 -1
- package/dist/react/ds-radio.d.ts +12 -0
- package/dist/react/ds-radio.js +12 -0
- package/dist/react/ds-slider.d.ts +4 -3
- package/dist/react/ds-slider.js +4 -1
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -1
- package/dist/types/components/Field/Field.d.ts +37 -2
- package/dist/types/components/Icon/Icon.d.ts +6 -1
- package/dist/types/components/Input/Input.d.ts +26 -0
- package/dist/types/components/Loader/Loader.d.ts +6 -1
- package/dist/types/components/Menu/Menu.d.ts +6 -0
- package/dist/types/components/Modal/Modal.d.ts +5 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +9 -0
- package/dist/types/components/{RadioGroup/RadioGroup.d.ts → Radio/Radio.d.ts} +18 -2
- package/dist/types/components/Radio/index.d.ts +2 -0
- package/dist/types/components/Slider/Slider.d.ts +101 -7
- package/dist/types/components/Switch/Switch.d.ts +4 -0
- package/dist/types/components/TabGroup/TabGroup.d.ts +1 -0
- package/dist/types/components/Text/Text.d.ts +6 -0
- package/dist/types/components/Text/text-types.d.ts +1 -1
- package/dist/types/components.d.ts +431 -46
- package/package.json +9 -4
- package/dist/angular/ds-radio-group.d.ts +0 -15
- package/dist/components/ds-radio-group.js +0 -2
- package/dist/components/ds-radio-group.js.map +0 -1
- package/dist/components/p-BEmVLLnN.js +0 -2
- package/dist/components/p-BEmVLLnN.js.map +0 -1
- package/dist/components/p-BcB-zkOx.js +0 -2
- package/dist/components/p-BcB-zkOx.js.map +0 -1
- package/dist/components/p-COzps7J4.js.map +0 -1
- package/dist/components/p-CTmsQjsE.js.map +0 -1
- package/dist/components/p-CwaC4wLu.js.map +0 -1
- package/dist/components/p-_zP4v-Al.js.map +0 -1
- package/dist/components/p-auwU64d8.js +0 -2
- package/dist/components/p-f0a1l4Uc.js +0 -2
- package/dist/components/p-f0a1l4Uc.js.map +0 -1
- package/dist/react/ds-radio-group.d.ts +0 -12
- package/dist/react/ds-radio-group.js +0 -12
- package/dist/types/components/RadioGroup/index.d.ts +0 -2
- /package/dist/components/{p-Ckiwpsgw.js.map → p-BjhTeU17.js.map} +0 -0
- /package/dist/components/{p-Du9UUSJ5.js.map → p-C91iXoXj.js.map} +0 -0
- /package/dist/components/{p-WdtWRvVr.js.map → p-CDu_LfhF.js.map} +0 -0
- /package/dist/components/{p-JsVSx7ZR.js.map → p-DHJZDpNk.js.map} +0 -0
- /package/dist/components/{p-DDBLO7bY.js.map → p-DKVDYHxb.js.map} +0 -0
- /package/dist/components/{p-B2FhhQba.js.map → p-KeMecQN9.js.map} +0 -0
package/dist/agent.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "8.
|
|
4
|
+
"packageVersion": "8.2.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -521,7 +521,7 @@
|
|
|
521
521
|
"Provide an explicit accessible name for icon-only buttons.",
|
|
522
522
|
"Use inactive state only when the action must remain visible but unavailable.",
|
|
523
523
|
"Do not encode the action meaning through color alone.",
|
|
524
|
-
"Loading keeps the action
|
|
524
|
+
"Loading keeps the action focused and named, exposes busy and disabled state, and blocks activation; announce broader operation progress from the owning workflow when users need confirmation.",
|
|
525
525
|
"Use native submit behavior for form submission and handle the form submit event rather than submitting from the button click event."
|
|
526
526
|
],
|
|
527
527
|
"states": [
|
|
@@ -529,7 +529,7 @@
|
|
|
529
529
|
"Choose brand or neutral for general commands. Reserve positive, negative, warning, and caution for matching action consequences, and AI, guide, or walkthrough for actions that enter those feature experiences.",
|
|
530
530
|
"Contrast serves both surface adaptation and hierarchy, but never permits a second filled action in the same decision area.",
|
|
531
531
|
"Rounded changes only the control radius to the half-radius treatment; it does not change hierarchy, size, variant, intent, or interaction semantics.",
|
|
532
|
-
"Loading prevents duplicate activation without applying inactive opacity.",
|
|
532
|
+
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
533
533
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width."
|
|
534
534
|
],
|
|
535
535
|
"responsiveBehavior": [
|
|
@@ -676,7 +676,7 @@
|
|
|
676
676
|
"Provide an explicit accessible name for every icon-only action.",
|
|
677
677
|
"Use active state only for a persistent toggle or mode, and synchronize pressed semantics unless an owning composite exposes the selection state.",
|
|
678
678
|
"Treat notification dots as supplemental unread or status information; never use a dot as the sole state, meaning, or accessible name.",
|
|
679
|
-
"Loading keeps the action
|
|
679
|
+
"Loading keeps the action focused and named, exposes busy and disabled state, and blocks activation; announce broader operation progress from the owning workflow when needed.",
|
|
680
680
|
"Use inactive state only when an unavailable action must remain visible.",
|
|
681
681
|
"For form submission, use native submit behavior and handle the form submit event rather than submitting from the button click event."
|
|
682
682
|
],
|
|
@@ -685,7 +685,7 @@
|
|
|
685
685
|
"Shell, navigation, and tool-rail chrome uses foreground-only active state with no selected fill or border.",
|
|
686
686
|
"The omitted default surface treatment is for primary and secondary parent surfaces and uses the brand-active selected fill; pass faint explicitly on faint surfaces to use the neutral active fill.",
|
|
687
687
|
"Surface context must match the actual parent surface; translucent, inverted, media, and always-dark treatments are reserved for those surfaces.",
|
|
688
|
-
"Loading prevents duplicate activation without applying inactive opacity.",
|
|
688
|
+
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
689
689
|
"Rounded changes only the control radius to the half-radius treatment; it does not change hierarchy, size, variant, or interaction semantics.",
|
|
690
690
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width."
|
|
691
691
|
],
|
|
@@ -747,7 +747,7 @@
|
|
|
747
747
|
"required": false
|
|
748
748
|
},
|
|
749
749
|
"haspopup": {
|
|
750
|
-
"type": "
|
|
750
|
+
"type": "ButtonUnfilledPopup | undefined",
|
|
751
751
|
"required": false
|
|
752
752
|
},
|
|
753
753
|
"icon": {
|
|
@@ -1198,8 +1198,8 @@
|
|
|
1198
1198
|
"alternatives": [
|
|
1199
1199
|
{
|
|
1200
1200
|
"when": "Exactly one option must be chosen from a mutually exclusive set.",
|
|
1201
|
-
"component": "component:ds-radio
|
|
1202
|
-
"reason": "
|
|
1201
|
+
"component": "component:ds-radio",
|
|
1202
|
+
"reason": "Radio communicates one-of-many selection."
|
|
1203
1203
|
},
|
|
1204
1204
|
{
|
|
1205
1205
|
"when": "A binary setting takes effect immediately.",
|
|
@@ -1224,7 +1224,7 @@
|
|
|
1224
1224
|
"Use presentation mode only inside a composite option that owns selection semantics, focus, and interaction."
|
|
1225
1225
|
],
|
|
1226
1226
|
"states": [
|
|
1227
|
-
"
|
|
1227
|
+
"Unchecked boxes use a tertiary-foreground inset stroke: 1.25px at md, 1px at sm, and 0.75px at xs. Selected and mixed boxes remove the border, use a brand fill, and draw a component-owned check or subtract mark at the same density-specific stroke width.",
|
|
1228
1228
|
"Activating an indeterminate checkbox clears the mixed state, toggles checked, and emits dsChange with the resulting boolean.",
|
|
1229
1229
|
"The initial checked and indeterminate values are restored by native form reset; checked values submit under name and unchecked values submit nothing.",
|
|
1230
1230
|
"Sizes are md with a 16px box in a 20px placement, sm with a 12px box in a 16px placement, and xs with an 8px box in a 12px placement.",
|
|
@@ -1319,11 +1319,9 @@
|
|
|
1319
1319
|
},
|
|
1320
1320
|
"dependencies": [
|
|
1321
1321
|
"@ds-mo/ui",
|
|
1322
|
-
"@ds-mo/tokens"
|
|
1323
|
-
"@ds-mo/icons"
|
|
1322
|
+
"@ds-mo/tokens"
|
|
1324
1323
|
],
|
|
1325
1324
|
"componentDependencies": [
|
|
1326
|
-
"icon",
|
|
1327
1325
|
"text"
|
|
1328
1326
|
]
|
|
1329
1327
|
},
|
|
@@ -1686,11 +1684,89 @@
|
|
|
1686
1684
|
"tag": "ds-field",
|
|
1687
1685
|
"name": "field",
|
|
1688
1686
|
"title": "Field",
|
|
1689
|
-
"summary": "
|
|
1690
|
-
"intentStatus": "
|
|
1691
|
-
"intent":
|
|
1687
|
+
"summary": "Accessible form-field composition that gives one Input or Select a persistent label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
1688
|
+
"intentStatus": "complete",
|
|
1689
|
+
"intent": {
|
|
1690
|
+
"audience": "general",
|
|
1691
|
+
"status": "stable",
|
|
1692
|
+
"summary": "Accessible form-field composition that gives one Input or Select a persistent label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
1693
|
+
"useWhen": [
|
|
1694
|
+
"An Input, Select, or SelectMulti needs a persistent visible label in a form.",
|
|
1695
|
+
"Help text or an error message must be programmatically associated with one control.",
|
|
1696
|
+
"A form layout needs one consistent label-control-message rhythm."
|
|
1697
|
+
],
|
|
1698
|
+
"avoidWhen": [
|
|
1699
|
+
"The component already owns its visible label and complete selection semantics, such as Checkbox, Radio, or Switch.",
|
|
1700
|
+
"Several controls belong to one question; use a semantic fieldset and legend instead.",
|
|
1701
|
+
"Text describes a region or group rather than one form control."
|
|
1702
|
+
],
|
|
1703
|
+
"alternatives": [
|
|
1704
|
+
{
|
|
1705
|
+
"when": "Several related controls answer one question.",
|
|
1706
|
+
"component": "component:ds-text",
|
|
1707
|
+
"reason": "Use native fieldset and legend semantics, then compose Text only for supporting content."
|
|
1708
|
+
}
|
|
1709
|
+
],
|
|
1710
|
+
"commonlyComposedWith": [
|
|
1711
|
+
"component:ds-input",
|
|
1712
|
+
"component:ds-select",
|
|
1713
|
+
"component:ds-select-multi",
|
|
1714
|
+
"component:ds-text"
|
|
1715
|
+
],
|
|
1716
|
+
"accessibility": [
|
|
1717
|
+
"Slot exactly one form control. Field assigns its stable control ID and connects the visible label automatically.",
|
|
1718
|
+
"Description and rendered error IDs are merged with any authored aria-describedby references rather than replacing them.",
|
|
1719
|
+
"The error prop forwards aria-invalid and supported design-system control error styling; put visible error text on Field, not again on the child control.",
|
|
1720
|
+
"Clicking the label focuses the slotted design-system control without opening a Select popup.",
|
|
1721
|
+
"Do not use placeholder text as the only label. Keep label text concise and put format or consequence guidance in description."
|
|
1722
|
+
],
|
|
1723
|
+
"states": [
|
|
1724
|
+
"Field exposes data-focused, data-filled, data-dirty, data-touched, data-invalid, data-disabled, and data-required hooks while the slotted control remains the source of value and interaction behavior.",
|
|
1725
|
+
"Description remains visible during error so guidance and validation do not replace each other.",
|
|
1726
|
+
"Field owns validation presentation but not validation timing; the form decides when to set error and errorMessage.",
|
|
1727
|
+
"The label uses primary body-small emphasis, description uses secondary body-small text, and error uses negative body-small text."
|
|
1728
|
+
],
|
|
1729
|
+
"responsiveBehavior": [
|
|
1730
|
+
"Field fills the width supplied by its parent and makes the slotted control fill that field width.",
|
|
1731
|
+
"The form layout owns column count, wrapping, and responsive placement; Field keeps the vertical label-control-message composition intact."
|
|
1732
|
+
],
|
|
1733
|
+
"frameworkCaveats": {
|
|
1734
|
+
"customElements": [
|
|
1735
|
+
"Set fieldId only when another element must reference a predictable control ID; otherwise use the generated association.",
|
|
1736
|
+
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
1737
|
+
],
|
|
1738
|
+
"react": [
|
|
1739
|
+
"Compose one DsInput, DsSelect, or DsSelectMulti child and control validation timing in the form owner."
|
|
1740
|
+
],
|
|
1741
|
+
"angular": [
|
|
1742
|
+
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
1743
|
+
]
|
|
1744
|
+
},
|
|
1745
|
+
"references": [
|
|
1746
|
+
{
|
|
1747
|
+
"label": "Storybook examples",
|
|
1748
|
+
"path": "src/wc/components/Field/Field.stories.ts"
|
|
1749
|
+
},
|
|
1750
|
+
{
|
|
1751
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
1752
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
1753
|
+
}
|
|
1754
|
+
]
|
|
1755
|
+
},
|
|
1692
1756
|
"api": {
|
|
1693
1757
|
"props": {
|
|
1758
|
+
"description": {
|
|
1759
|
+
"type": "string | undefined",
|
|
1760
|
+
"required": false
|
|
1761
|
+
},
|
|
1762
|
+
"error": {
|
|
1763
|
+
"type": "boolean",
|
|
1764
|
+
"required": false
|
|
1765
|
+
},
|
|
1766
|
+
"errorMessage": {
|
|
1767
|
+
"type": "string | undefined",
|
|
1768
|
+
"required": false
|
|
1769
|
+
},
|
|
1694
1770
|
"fieldId": {
|
|
1695
1771
|
"type": "string | undefined",
|
|
1696
1772
|
"required": false
|
|
@@ -1765,11 +1841,13 @@
|
|
|
1765
1841
|
"Icons are decorative by default and remain hidden from assistive technology when visible text or an owning control already communicates the meaning.",
|
|
1766
1842
|
"The owning button, link, or composite control provides the accessible name; do not repeat that name on its nested Icon.",
|
|
1767
1843
|
"Provide an explicit label only when the non-interactive icon itself communicates otherwise unavailable meaning.",
|
|
1844
|
+
"Tertiary and quaternary foregrounds are restricted to icons inside genuinely inactive or disabled UI, or to purely decorative icons; quaternary is the fainter tier, and informative icons and meaningful status graphics retain sufficient rendered contrast even when aria-hidden.",
|
|
1768
1845
|
"Informative flags require an explicit localized country or region label; never derive accessible text from the export name.",
|
|
1769
1846
|
"Icon never receives focus or owns interaction."
|
|
1770
1847
|
],
|
|
1771
1848
|
"states": [
|
|
1772
1849
|
"Omitted color inherits currentColor from the owning context. Explicit semantic aliases and CSS-variable references are available when the icon has an independent color role.",
|
|
1850
|
+
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
1773
1851
|
"Built-in glyph lookup accepts exact canonical IcoMo export names only. Names beginning with Flag select the flag catalog automatically.",
|
|
1774
1852
|
"A cache miss lazy-loads into a fixed-size box without layout shift. Unknown names, failed loads, and rejected markup leave that box empty.",
|
|
1775
1853
|
"Critical first-paint glyphs may be pre-registered before rendering; all resolved glyphs share a global cache.",
|
|
@@ -1840,9 +1918,89 @@
|
|
|
1840
1918
|
"tag": "ds-input",
|
|
1841
1919
|
"name": "input",
|
|
1842
1920
|
"title": "Input",
|
|
1843
|
-
"summary": "
|
|
1844
|
-
"intentStatus": "
|
|
1845
|
-
"intent":
|
|
1921
|
+
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior, three control densities, optional leading and trailing content, search clearing, and validation.",
|
|
1922
|
+
"intentStatus": "complete",
|
|
1923
|
+
"intent": {
|
|
1924
|
+
"audience": "general",
|
|
1925
|
+
"status": "stable",
|
|
1926
|
+
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior, three control densities, optional leading and trailing content, search clearing, and validation.",
|
|
1927
|
+
"useWhen": [
|
|
1928
|
+
"A user must enter or edit one line of text, an email address, telephone number, URL, search query, or password.",
|
|
1929
|
+
"The value must participate in native, Angular, or React form state.",
|
|
1930
|
+
"A compact filter or toolbar needs a single-line search field that follows the shared control-density recipe."
|
|
1931
|
+
],
|
|
1932
|
+
"avoidWhen": [
|
|
1933
|
+
"The user chooses from a finite set of known values.",
|
|
1934
|
+
"The user must enter multiple paragraphs or formatted content.",
|
|
1935
|
+
"The value is adjusted primarily by dragging within a numeric range."
|
|
1936
|
+
],
|
|
1937
|
+
"alternatives": [
|
|
1938
|
+
{
|
|
1939
|
+
"when": "The value comes from a finite set of known choices.",
|
|
1940
|
+
"component": "component:ds-select",
|
|
1941
|
+
"reason": "Select exposes the available values and owns listbox selection behavior."
|
|
1942
|
+
},
|
|
1943
|
+
{
|
|
1944
|
+
"when": "The value is an immediate on/off setting.",
|
|
1945
|
+
"component": "component:ds-switch",
|
|
1946
|
+
"reason": "Switch communicates a binary setting instead of free text entry."
|
|
1947
|
+
},
|
|
1948
|
+
{
|
|
1949
|
+
"when": "The value is chosen from a bounded numeric range.",
|
|
1950
|
+
"component": "component:ds-slider",
|
|
1951
|
+
"reason": "Slider supports direct range adjustment and communicates the current position."
|
|
1952
|
+
}
|
|
1953
|
+
],
|
|
1954
|
+
"commonlyComposedWith": [
|
|
1955
|
+
"component:ds-field",
|
|
1956
|
+
"component:ds-icon",
|
|
1957
|
+
"component:ds-text"
|
|
1958
|
+
],
|
|
1959
|
+
"accessibility": [
|
|
1960
|
+
"Provide a persistent visible label through the owning field or an external native label; placeholder text is guidance and must not be the field's only label.",
|
|
1961
|
+
"Choose the native input type that matches the value so browsers and assistive technology can provide appropriate semantics and keyboards.",
|
|
1962
|
+
"Error text is associated with the native input and announced as an alert when the invalid state is rendered.",
|
|
1963
|
+
"Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission.",
|
|
1964
|
+
"Suffix content must not carry information that is otherwise absent from the field's visible label, value, or description."
|
|
1965
|
+
],
|
|
1966
|
+
"states": [
|
|
1967
|
+
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry.",
|
|
1968
|
+
"Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins.",
|
|
1969
|
+
"Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
|
|
1970
|
+
"Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
|
|
1971
|
+
"The suffix slot is for compact units or decorations. The optional leading icon is decorative and does not replace the field label.",
|
|
1972
|
+
"Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
|
|
1973
|
+
"The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
|
|
1974
|
+
"Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts."
|
|
1975
|
+
],
|
|
1976
|
+
"responsiveBehavior": [
|
|
1977
|
+
"Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
|
|
1978
|
+
"Choose density from the containing layout: md for ordinary forms, sm or xs only where the surrounding controls use the same compact recipe.",
|
|
1979
|
+
"The owner supplies layout constraints and decides when a compact field moves to its own row."
|
|
1980
|
+
],
|
|
1981
|
+
"frameworkCaveats": {
|
|
1982
|
+
"customElements": [
|
|
1983
|
+
"Listen for dsChange for user edits and dsClear for the search clear action.",
|
|
1984
|
+
"Use the form attribute on the host when associating an input rendered outside its owning form."
|
|
1985
|
+
],
|
|
1986
|
+
"react": [
|
|
1987
|
+
"Use DsInput, bind value for controlled application state, and handle onDsChange and onDsClear."
|
|
1988
|
+
],
|
|
1989
|
+
"angular": [
|
|
1990
|
+
"Import DsInput with TextValueAccessor when integrating with Angular Forms."
|
|
1991
|
+
]
|
|
1992
|
+
},
|
|
1993
|
+
"references": [
|
|
1994
|
+
{
|
|
1995
|
+
"label": "Storybook examples",
|
|
1996
|
+
"path": "src/wc/components/Input/Input.stories.ts"
|
|
1997
|
+
},
|
|
1998
|
+
{
|
|
1999
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
2000
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
2001
|
+
}
|
|
2002
|
+
]
|
|
2003
|
+
},
|
|
1846
2004
|
"api": {
|
|
1847
2005
|
"props": {
|
|
1848
2006
|
"ariaDescribedby": {
|
|
@@ -1857,6 +2015,10 @@
|
|
|
1857
2015
|
"type": "string | undefined",
|
|
1858
2016
|
"required": false
|
|
1859
2017
|
},
|
|
2018
|
+
"autoComplete": {
|
|
2019
|
+
"type": "string | undefined",
|
|
2020
|
+
"required": false
|
|
2021
|
+
},
|
|
1860
2022
|
"autoFocus": {
|
|
1861
2023
|
"type": "boolean",
|
|
1862
2024
|
"required": false
|
|
@@ -1869,6 +2031,10 @@
|
|
|
1869
2031
|
"type": "boolean",
|
|
1870
2032
|
"required": false
|
|
1871
2033
|
},
|
|
2034
|
+
"enterKeyHint": {
|
|
2035
|
+
"type": "string",
|
|
2036
|
+
"required": false
|
|
2037
|
+
},
|
|
1872
2038
|
"error": {
|
|
1873
2039
|
"type": "boolean",
|
|
1874
2040
|
"required": false
|
|
@@ -1877,10 +2043,26 @@
|
|
|
1877
2043
|
"type": "string | undefined",
|
|
1878
2044
|
"required": false
|
|
1879
2045
|
},
|
|
2046
|
+
"form": {
|
|
2047
|
+
"type": "string | undefined",
|
|
2048
|
+
"required": false
|
|
2049
|
+
},
|
|
2050
|
+
"hasBorder": {
|
|
2051
|
+
"type": "boolean",
|
|
2052
|
+
"required": false
|
|
2053
|
+
},
|
|
2054
|
+
"icon": {
|
|
2055
|
+
"type": "string | undefined",
|
|
2056
|
+
"required": false
|
|
2057
|
+
},
|
|
1880
2058
|
"inputId": {
|
|
1881
2059
|
"type": "string | undefined",
|
|
1882
2060
|
"required": false
|
|
1883
2061
|
},
|
|
2062
|
+
"inputMode": {
|
|
2063
|
+
"type": "string",
|
|
2064
|
+
"required": false
|
|
2065
|
+
},
|
|
1884
2066
|
"isInactive": {
|
|
1885
2067
|
"type": "boolean",
|
|
1886
2068
|
"required": false
|
|
@@ -1893,6 +2075,10 @@
|
|
|
1893
2075
|
"type": "string | undefined",
|
|
1894
2076
|
"required": false
|
|
1895
2077
|
},
|
|
2078
|
+
"readOnly": {
|
|
2079
|
+
"type": "boolean",
|
|
2080
|
+
"required": false
|
|
2081
|
+
},
|
|
1896
2082
|
"required": {
|
|
1897
2083
|
"type": "boolean",
|
|
1898
2084
|
"required": false
|
|
@@ -1901,6 +2087,10 @@
|
|
|
1901
2087
|
"type": "string",
|
|
1902
2088
|
"required": false
|
|
1903
2089
|
},
|
|
2090
|
+
"size": {
|
|
2091
|
+
"type": "InputSize",
|
|
2092
|
+
"required": false
|
|
2093
|
+
},
|
|
1904
2094
|
"type": {
|
|
1905
2095
|
"type": "InputType",
|
|
1906
2096
|
"required": false
|
|
@@ -1908,6 +2098,10 @@
|
|
|
1908
2098
|
"value": {
|
|
1909
2099
|
"type": "string",
|
|
1910
2100
|
"required": false
|
|
2101
|
+
},
|
|
2102
|
+
"width": {
|
|
2103
|
+
"type": "InputWidth",
|
|
2104
|
+
"required": false
|
|
1911
2105
|
}
|
|
1912
2106
|
},
|
|
1913
2107
|
"events": [
|
|
@@ -1929,9 +2123,12 @@
|
|
|
1929
2123
|
},
|
|
1930
2124
|
"dependencies": [
|
|
1931
2125
|
"@ds-mo/ui",
|
|
1932
|
-
"@ds-mo/tokens"
|
|
2126
|
+
"@ds-mo/tokens",
|
|
2127
|
+
"@ds-mo/icons"
|
|
1933
2128
|
],
|
|
1934
2129
|
"componentDependencies": [
|
|
2130
|
+
"button-unfilled",
|
|
2131
|
+
"icon",
|
|
1935
2132
|
"text"
|
|
1936
2133
|
]
|
|
1937
2134
|
},
|
|
@@ -1978,12 +2175,14 @@
|
|
|
1978
2175
|
"accessibility": [
|
|
1979
2176
|
"When Loader is nested in a busy button, field, or region, keep it unnamed and expose busy state from the owner.",
|
|
1980
2177
|
"Standalone Loader requires contextual status text that explains what is loading; do not rely on a generic visual spinner alone.",
|
|
2178
|
+
"Loader is an informative progress graphic and must retain sufficient rendered contrast; tertiary and quaternary are not supported standalone or informative Loader treatments.",
|
|
1981
2179
|
"Avoid duplicate announcements from both Loader and its owning busy region.",
|
|
1982
2180
|
"Reduced motion stops rotation while keeping the glyph and status semantics visible."
|
|
1983
2181
|
],
|
|
1984
2182
|
"states": [
|
|
1985
2183
|
"Loader communicates indeterminate progress only and does not emit completion or failure events.",
|
|
1986
2184
|
"Omitted color inherits currentColor. Explicit semantic aliases and CSS-variable references match Icon when an independent progress color is required.",
|
|
2185
|
+
"Nested Loader inherits a readable color from its owning busy control or region rather than selecting tertiary or quaternary directly.",
|
|
1987
2186
|
"The owner decides whether to delay Loader visibility for short operations and removes it when the operation settles.",
|
|
1988
2187
|
"The owner reserves space and supplies centering or overlay layout so Loader never causes unexpected layout movement."
|
|
1989
2188
|
],
|
|
@@ -2085,7 +2284,8 @@
|
|
|
2085
2284
|
"Anchor the menu to the control that opens it and return focus to that control when the menu closes.",
|
|
2086
2285
|
"Open with visible initial focus only when the trigger was activated from the keyboard.",
|
|
2087
2286
|
"Keep disabled items discoverable only when their unavailable state is meaningful.",
|
|
2088
|
-
"Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden presentation indicator.",
|
|
2287
|
+
"Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden md presentation indicator.",
|
|
2288
|
+
"A gradient-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.",
|
|
2089
2289
|
"Use notification dots only as supplemental status and not as the sole indication of important information."
|
|
2090
2290
|
],
|
|
2091
2291
|
"states": [
|
|
@@ -2093,7 +2293,7 @@
|
|
|
2093
2293
|
"Use either flat items or sections, not both.",
|
|
2094
2294
|
"After dsSelect from a switch row, update switchValue in the items property so the controlled indicator reflects the new state.",
|
|
2095
2295
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
2096
|
-
"Use one gradient-picker section in the user or account Appearance or Theme
|
|
2296
|
+
"Use one gradient-picker section in the user or account Appearance or Theme popup for the global AppShell wash preference; apply dsGradientSelect immediately without closing the popup."
|
|
2097
2297
|
],
|
|
2098
2298
|
"responsiveBehavior": [
|
|
2099
2299
|
"Choose placement relative to the trigger and allow the component to clamp the popup to the viewport.",
|
|
@@ -2370,6 +2570,7 @@
|
|
|
2370
2570
|
"Provide localized dashboard, settings, account, navigation, collapse, and expand labels.",
|
|
2371
2571
|
"Preserve accessible destination names when the panel is collapsed to icon-only presentation.",
|
|
2372
2572
|
"Use notification dots as supplemental status and never as the only indication of important information.",
|
|
2573
|
+
"When the destination body overflows, it becomes a localized keyboard-focusable scroll region in addition to the roving destination controls.",
|
|
2373
2574
|
"Keep the standard dashboard/settings switch and user/account entry available in the footer."
|
|
2374
2575
|
],
|
|
2375
2576
|
"states": [
|
|
@@ -2470,6 +2671,10 @@
|
|
|
2470
2671
|
"type": "NavChromeStyle",
|
|
2471
2672
|
"required": false
|
|
2472
2673
|
},
|
|
2674
|
+
"navigationItemsLabel": {
|
|
2675
|
+
"type": "string",
|
|
2676
|
+
"required": false
|
|
2677
|
+
},
|
|
2473
2678
|
"routerMode": {
|
|
2474
2679
|
"type": "PanelNavRouterMode",
|
|
2475
2680
|
"required": false
|
|
@@ -2834,13 +3039,86 @@
|
|
|
2834
3039
|
]
|
|
2835
3040
|
},
|
|
2836
3041
|
{
|
|
2837
|
-
"id": "component:ds-radio
|
|
2838
|
-
"tag": "ds-radio
|
|
2839
|
-
"name": "radio
|
|
2840
|
-
"title": "
|
|
2841
|
-
"summary": "
|
|
2842
|
-
"intentStatus": "
|
|
2843
|
-
"intent":
|
|
3042
|
+
"id": "component:ds-radio",
|
|
3043
|
+
"tag": "ds-radio",
|
|
3044
|
+
"name": "radio",
|
|
3045
|
+
"title": "Radio",
|
|
3046
|
+
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, three densities, per-option inactive state, and roving keyboard focus.",
|
|
3047
|
+
"intentStatus": "complete",
|
|
3048
|
+
"intent": {
|
|
3049
|
+
"audience": "general",
|
|
3050
|
+
"status": "stable",
|
|
3051
|
+
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, three densities, per-option inactive state, and roving keyboard focus.",
|
|
3052
|
+
"useWhen": [
|
|
3053
|
+
"A user must select exactly one visible option from a small set.",
|
|
3054
|
+
"All available choices should remain visible for comparison.",
|
|
3055
|
+
"A form needs one selected string value with native validation, reset, or external form association."
|
|
3056
|
+
],
|
|
3057
|
+
"avoidWhen": [
|
|
3058
|
+
"A user may select zero or multiple independent choices.",
|
|
3059
|
+
"A binary setting applies immediately rather than selecting from a set.",
|
|
3060
|
+
"The option list is too long or space-constrained to remain visible."
|
|
3061
|
+
],
|
|
3062
|
+
"alternatives": [
|
|
3063
|
+
{
|
|
3064
|
+
"when": "A user may select zero or multiple independent choices.",
|
|
3065
|
+
"component": "component:ds-checkbox",
|
|
3066
|
+
"reason": "Checkbox communicates independent selection rather than one-of-many choice."
|
|
3067
|
+
},
|
|
3068
|
+
{
|
|
3069
|
+
"when": "A binary setting applies immediately.",
|
|
3070
|
+
"component": "component:ds-switch",
|
|
3071
|
+
"reason": "Switch communicates an immediately applied on/off setting."
|
|
3072
|
+
},
|
|
3073
|
+
{
|
|
3074
|
+
"when": "The option list is long or the available space is constrained.",
|
|
3075
|
+
"component": "component:ds-select",
|
|
3076
|
+
"reason": "Select keeps a larger one-of-many choice set compact."
|
|
3077
|
+
}
|
|
3078
|
+
],
|
|
3079
|
+
"commonlyComposedWith": [
|
|
3080
|
+
"component:ds-field",
|
|
3081
|
+
"component:ds-text"
|
|
3082
|
+
],
|
|
3083
|
+
"accessibility": [
|
|
3084
|
+
"The host exposes radiogroup semantics and requires an accessible group name from aria-label or aria-labelledby.",
|
|
3085
|
+
"Each visible option exposes radio semantics, its checked state, its label text, and any inactive state.",
|
|
3086
|
+
"Arrow keys move and select through active options; Home and End select the first and last active options; Space and Enter select the focused option.",
|
|
3087
|
+
"Roving tabindex keeps one active option in the tab order, preferring the selected option."
|
|
3088
|
+
],
|
|
3089
|
+
"states": [
|
|
3090
|
+
"Unchecked circles use a tertiary-foreground inset stroke: 1.25px at md, 1px at sm, and 0.75px at xs.",
|
|
3091
|
+
"Selected circles remove the border, use a brand fill, and draw a centered on-bold foreground dot sized 8px at md, 6px at sm, and 4px at xs.",
|
|
3092
|
+
"Sizes are md with a 16px circle in a 20px placement, sm with a 12px circle in a 16px placement, and xs with an 8px circle in a 12px placement.",
|
|
3093
|
+
"The initial value is restored by native form reset; the selected value submits under name and a required set is invalid until one active option is selected."
|
|
3094
|
+
],
|
|
3095
|
+
"responsiveBehavior": [
|
|
3096
|
+
"Choose size from the density of the containing form or settings row.",
|
|
3097
|
+
"Prefer vertical layout when labels may wrap or horizontal space is constrained; horizontal layout is appropriate for short labels in a small set."
|
|
3098
|
+
],
|
|
3099
|
+
"frameworkCaveats": {
|
|
3100
|
+
"customElements": [
|
|
3101
|
+
"Assign options as a JavaScript property, set value as a property for application state updates, and listen for dsChange.",
|
|
3102
|
+
"Use the form attribute on the host when associating a radio set rendered outside its owning form."
|
|
3103
|
+
],
|
|
3104
|
+
"react": [
|
|
3105
|
+
"Use DsRadio, pass options as an array, and handle onDsChange; value is mutable and updates after user selection."
|
|
3106
|
+
],
|
|
3107
|
+
"angular": [
|
|
3108
|
+
"Use DsRadio with options and value bindings plus dsChange, or import the generated radio value accessor with the component adapter."
|
|
3109
|
+
]
|
|
3110
|
+
},
|
|
3111
|
+
"references": [
|
|
3112
|
+
{
|
|
3113
|
+
"label": "Storybook examples",
|
|
3114
|
+
"path": "src/wc/components/Radio/Radio.stories.ts"
|
|
3115
|
+
},
|
|
3116
|
+
{
|
|
3117
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
3118
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
3119
|
+
}
|
|
3120
|
+
]
|
|
3121
|
+
},
|
|
2844
3122
|
"api": {
|
|
2845
3123
|
"props": {
|
|
2846
3124
|
"ariaLabel": {
|
|
@@ -2859,6 +3137,10 @@
|
|
|
2859
3137
|
"type": "boolean",
|
|
2860
3138
|
"required": false
|
|
2861
3139
|
},
|
|
3140
|
+
"form": {
|
|
3141
|
+
"type": "string | undefined",
|
|
3142
|
+
"required": false
|
|
3143
|
+
},
|
|
2862
3144
|
"isInactive": {
|
|
2863
3145
|
"type": "boolean",
|
|
2864
3146
|
"required": false
|
|
@@ -2879,6 +3161,10 @@
|
|
|
2879
3161
|
"type": "string",
|
|
2880
3162
|
"required": false
|
|
2881
3163
|
},
|
|
3164
|
+
"size": {
|
|
3165
|
+
"type": "RadioSize",
|
|
3166
|
+
"required": false
|
|
3167
|
+
},
|
|
2882
3168
|
"value": {
|
|
2883
3169
|
"type": "string",
|
|
2884
3170
|
"required": false
|
|
@@ -2893,9 +3179,9 @@
|
|
|
2893
3179
|
"slots": []
|
|
2894
3180
|
},
|
|
2895
3181
|
"exports": {
|
|
2896
|
-
"customElement": "ds-radio
|
|
2897
|
-
"react": "
|
|
2898
|
-
"angular": "
|
|
3182
|
+
"customElement": "ds-radio",
|
|
3183
|
+
"react": "DsRadio",
|
|
3184
|
+
"angular": "DsRadio"
|
|
2899
3185
|
},
|
|
2900
3186
|
"dependencies": [
|
|
2901
3187
|
"@ds-mo/ui",
|
|
@@ -2940,8 +3226,8 @@
|
|
|
2940
3226
|
},
|
|
2941
3227
|
{
|
|
2942
3228
|
"when": "A small set of choices should remain visible.",
|
|
2943
|
-
"component": "component:ds-radio
|
|
2944
|
-
"reason": "Prefer
|
|
3229
|
+
"component": "component:ds-radio",
|
|
3230
|
+
"reason": "Prefer Radio for roughly two to five mutually exclusive choices when the available space allows all choices to remain visible."
|
|
2945
3231
|
}
|
|
2946
3232
|
],
|
|
2947
3233
|
"commonlyComposedWith": [
|
|
@@ -2971,8 +3257,8 @@
|
|
|
2971
3257
|
"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.",
|
|
2972
3258
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
2973
3259
|
"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.",
|
|
2974
|
-
"The shared popup search control stays md at every trigger size, using body-medium text, a 20px icon, and the same internal spacing as a borderless Select 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.",
|
|
2975
|
-
"When search contains text, the shared control shows a rounded sm icon-only ButtonUnfilled with the
|
|
3260
|
+
"The shared popup search control stays md at every trigger size, using body-medium text, a 20px icon, and the same internal spacing as a borderless Select 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.",
|
|
3261
|
+
"When search contains text, the shared control shows a rounded sm icon-only ButtonUnfilled with the CrossCircle icon and no border. It clears the local term, stays hidden for an empty term, and returns focus to search.",
|
|
2976
3262
|
"The shared clear footer mirrors the search region's sizing: menu-item padding surrounds an md-height borderless row, and the Clear label uses the same row and label insets as option text. The outer footer owns a 1px top divider.",
|
|
2977
3263
|
"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.",
|
|
2978
3264
|
"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.",
|
|
@@ -3222,7 +3508,7 @@
|
|
|
3222
3508
|
"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.",
|
|
3223
3509
|
"Option labels stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
3224
3510
|
"The optional prefix icon and chevron always use the parent surface's secondary foreground color, including when selection promotes the label and count to primary.",
|
|
3225
|
-
"The shared popup search control stays md at every trigger size, using body-medium text, a 20px icon, and the same internal spacing as a borderless Select 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.",
|
|
3511
|
+
"The shared popup search control stays md at every trigger size, using body-medium text, a 20px icon, and the same internal spacing as a borderless Select 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.",
|
|
3226
3512
|
"When search contains text, the shared control shows a rounded sm icon-only ButtonUnfilled with the Cross icon and no border. It clears the local term, stays hidden for an empty term, and returns focus to search.",
|
|
3227
3513
|
"The shared summary-and-clear footer mirrors the search region's sizing: menu-item padding surrounds an md-height borderless row, and both texts use the same row and label insets as option text. The outer footer owns a 1px top divider.",
|
|
3228
3514
|
"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.",
|
|
@@ -3764,11 +4050,118 @@
|
|
|
3764
4050
|
"tag": "ds-slider",
|
|
3765
4051
|
"name": "slider",
|
|
3766
4052
|
"title": "Slider",
|
|
3767
|
-
"summary": "
|
|
3768
|
-
"intentStatus": "
|
|
3769
|
-
"intent":
|
|
4053
|
+
"summary": "Form-associated single or two-thumb range input with native slider semantics, pointer dragging, keyboard operation, formatting, density, and orientation controls.",
|
|
4054
|
+
"intentStatus": "complete",
|
|
4055
|
+
"intent": {
|
|
4056
|
+
"audience": "general",
|
|
4057
|
+
"status": "stable",
|
|
4058
|
+
"summary": "Form-associated single or two-thumb range input with native slider semantics, pointer dragging, keyboard operation, formatting, density, and orientation controls.",
|
|
4059
|
+
"useWhen": [
|
|
4060
|
+
"A person should choose or tune an approximate numeric value within known bounds.",
|
|
4061
|
+
"A bounded minimum and maximum range needs two independently focusable thumbs.",
|
|
4062
|
+
"A value benefits from direct manipulation, immediate preview, and native form submission."
|
|
4063
|
+
],
|
|
4064
|
+
"avoidWhen": [
|
|
4065
|
+
"The exact numeric value is more important than direct spatial adjustment.",
|
|
4066
|
+
"The choices are categorical rather than ordered numeric values.",
|
|
4067
|
+
"The value is progress, measurement, or read-only status rather than user input."
|
|
4068
|
+
],
|
|
4069
|
+
"alternatives": [
|
|
4070
|
+
{
|
|
4071
|
+
"when": "People must enter or verify a precise numeric value.",
|
|
4072
|
+
"component": "component:ds-input",
|
|
4073
|
+
"reason": "A typed field supports exact entry and review more efficiently than spatial adjustment."
|
|
4074
|
+
},
|
|
4075
|
+
{
|
|
4076
|
+
"when": "The available values are a short finite set with meaningful labels.",
|
|
4077
|
+
"component": "component:ds-radio",
|
|
4078
|
+
"reason": "Visible named choices communicate categorical meaning more clearly."
|
|
4079
|
+
},
|
|
4080
|
+
{
|
|
4081
|
+
"when": "The setting is binary and applies immediately.",
|
|
4082
|
+
"component": "component:ds-switch",
|
|
4083
|
+
"reason": "Switch communicates an immediate on/off state without implying intermediate values."
|
|
4084
|
+
}
|
|
4085
|
+
],
|
|
4086
|
+
"commonlyComposedWith": [
|
|
4087
|
+
"component:ds-text",
|
|
4088
|
+
"component:ds-input"
|
|
4089
|
+
],
|
|
4090
|
+
"accessibility": [
|
|
4091
|
+
"Each thumb contains a native range input and must have an accessible name; a visible label names a single thumb, while startLabel and endLabel distinguish a two-thumb range.",
|
|
4092
|
+
"Arrow keys adjust one step, Home and End reach the allowed bounds, and browser-supported Page Up and Page Down make larger changes.",
|
|
4093
|
+
"Every range thumb remains in a constant tab order and exposes dynamic minimum and maximum values when the other thumb constrains it.",
|
|
4094
|
+
"Use valueText for one authored description or valueTexts for per-thumb range descriptions when numeric values are not understandable on their own, such as named levels, dates, durations, or units.",
|
|
4095
|
+
"Read-only sliders remain focusable and submittable; inactive or disabled sliders leave the tab order and form submission."
|
|
4096
|
+
],
|
|
4097
|
+
"states": [
|
|
4098
|
+
"value is mutable: user pointer, keyboard, or assistive-technology input updates it and emits dsChange continuously.",
|
|
4099
|
+
"dsCommit emits once a pointer interaction completes or the native range input commits a keyboard or assistive-technology change.",
|
|
4100
|
+
"Assign a two-number array through the JavaScript value property to create a range; values are ordered, clamped, stepped, and prevented from crossing.",
|
|
4101
|
+
"minStepsBetweenValues reserves a minimum stepped distance between range thumbs.",
|
|
4102
|
+
"The initial normalized value is the native form-reset baseline and range values submit as repeated entries under the same name.",
|
|
4103
|
+
"Focused, filled, dirty, touched, dragging, valid, disabled, read-only, and orientation data hooks expose interaction state without changing the value contract."
|
|
4104
|
+
],
|
|
4105
|
+
"responsiveBehavior": [
|
|
4106
|
+
"Horizontal Slider fills the width supplied by its parent; the parent chooses an appropriate readable track length.",
|
|
4107
|
+
"Vertical Slider owns a token-based default length that may be overridden with --ds-slider-vertical-length in layout-specific compositions.",
|
|
4108
|
+
"Use md in ordinary forms and sm or xs only when the surrounding control density uses the same recipe.",
|
|
4109
|
+
"Track thickness scales with density: 8px at md, 6px at sm, and 4px at xs. The unfilled track is transparent with a tertiary-foreground inset outline, the filled range is brand, and the thumb uses a 1.5px brand inset ring.",
|
|
4110
|
+
"Horizontal value direction is left-to-right; the design system does not author RTL-specific component behavior."
|
|
4111
|
+
],
|
|
4112
|
+
"frameworkCaveats": {
|
|
4113
|
+
"customElements": [
|
|
4114
|
+
"Assign range arrays and formatOptions through JavaScript properties, not string attributes.",
|
|
4115
|
+
"Listen for dsChange during adjustment and dsCommit for expensive work that should run after the interaction settles."
|
|
4116
|
+
],
|
|
4117
|
+
"react": [
|
|
4118
|
+
"Use DsSlider with a number or two-number value array and handle onDsChange and onDsCommit custom events."
|
|
4119
|
+
],
|
|
4120
|
+
"angular": [
|
|
4121
|
+
"Use DsSlider with property binding for range arrays; the generated number value accessor is appropriate only for a single numeric value."
|
|
4122
|
+
]
|
|
4123
|
+
},
|
|
4124
|
+
"references": [
|
|
4125
|
+
{
|
|
4126
|
+
"label": "Storybook design review",
|
|
4127
|
+
"path": "src/wc/components/Slider/Slider.stories.ts"
|
|
4128
|
+
},
|
|
4129
|
+
{
|
|
4130
|
+
"label": "Cross-browser form and interaction coverage",
|
|
4131
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
4132
|
+
}
|
|
4133
|
+
]
|
|
4134
|
+
},
|
|
3770
4135
|
"api": {
|
|
3771
4136
|
"props": {
|
|
4137
|
+
"ariaDescribedby": {
|
|
4138
|
+
"type": "string | undefined",
|
|
4139
|
+
"required": false
|
|
4140
|
+
},
|
|
4141
|
+
"ariaLabel": {
|
|
4142
|
+
"type": "string | null",
|
|
4143
|
+
"required": false
|
|
4144
|
+
},
|
|
4145
|
+
"ariaLabelledby": {
|
|
4146
|
+
"type": "string | undefined",
|
|
4147
|
+
"required": false
|
|
4148
|
+
},
|
|
4149
|
+
"disabled": {
|
|
4150
|
+
"type": "boolean",
|
|
4151
|
+
"required": false
|
|
4152
|
+
},
|
|
4153
|
+
"endLabel": {
|
|
4154
|
+
"type": "string",
|
|
4155
|
+
"required": false
|
|
4156
|
+
},
|
|
4157
|
+
"form": {
|
|
4158
|
+
"type": "string | undefined",
|
|
4159
|
+
"required": false
|
|
4160
|
+
},
|
|
4161
|
+
"formatOptions": {
|
|
4162
|
+
"type": "Intl.NumberFormatOptions | undefined",
|
|
4163
|
+
"required": false
|
|
4164
|
+
},
|
|
3772
4165
|
"inputId": {
|
|
3773
4166
|
"type": "string | undefined",
|
|
3774
4167
|
"required": false
|
|
@@ -3778,8 +4171,12 @@
|
|
|
3778
4171
|
"required": false
|
|
3779
4172
|
},
|
|
3780
4173
|
"label": {
|
|
3781
|
-
"type": "string",
|
|
3782
|
-
"required":
|
|
4174
|
+
"type": "string | undefined",
|
|
4175
|
+
"required": false
|
|
4176
|
+
},
|
|
4177
|
+
"locale": {
|
|
4178
|
+
"type": "string | undefined",
|
|
4179
|
+
"required": false
|
|
3783
4180
|
},
|
|
3784
4181
|
"max": {
|
|
3785
4182
|
"type": "number",
|
|
@@ -3789,23 +4186,75 @@
|
|
|
3789
4186
|
"type": "number",
|
|
3790
4187
|
"required": false
|
|
3791
4188
|
},
|
|
4189
|
+
"minStepsBetweenValues": {
|
|
4190
|
+
"type": "number",
|
|
4191
|
+
"required": false
|
|
4192
|
+
},
|
|
4193
|
+
"name": {
|
|
4194
|
+
"type": "string | undefined",
|
|
4195
|
+
"required": false
|
|
4196
|
+
},
|
|
4197
|
+
"orientation": {
|
|
4198
|
+
"type": "SliderOrientation",
|
|
4199
|
+
"required": false
|
|
4200
|
+
},
|
|
4201
|
+
"rangeSeparator": {
|
|
4202
|
+
"type": "string",
|
|
4203
|
+
"required": false
|
|
4204
|
+
},
|
|
4205
|
+
"readOnly": {
|
|
4206
|
+
"type": "boolean",
|
|
4207
|
+
"required": false
|
|
4208
|
+
},
|
|
4209
|
+
"showValue": {
|
|
4210
|
+
"type": "boolean",
|
|
4211
|
+
"required": false
|
|
4212
|
+
},
|
|
4213
|
+
"size": {
|
|
4214
|
+
"type": "SliderSize",
|
|
4215
|
+
"required": false
|
|
4216
|
+
},
|
|
4217
|
+
"startLabel": {
|
|
4218
|
+
"type": "string",
|
|
4219
|
+
"required": false
|
|
4220
|
+
},
|
|
3792
4221
|
"step": {
|
|
3793
4222
|
"type": "number",
|
|
3794
4223
|
"required": false
|
|
3795
4224
|
},
|
|
4225
|
+
"thumbAlignment": {
|
|
4226
|
+
"type": "SliderThumbAlignment",
|
|
4227
|
+
"required": false
|
|
4228
|
+
},
|
|
3796
4229
|
"value": {
|
|
3797
|
-
"type": "
|
|
4230
|
+
"type": "SliderValue",
|
|
4231
|
+
"required": false
|
|
4232
|
+
},
|
|
4233
|
+
"valuePrefix": {
|
|
4234
|
+
"type": "string",
|
|
4235
|
+
"required": false
|
|
4236
|
+
},
|
|
4237
|
+
"valueSuffix": {
|
|
4238
|
+
"type": "string",
|
|
3798
4239
|
"required": false
|
|
3799
4240
|
},
|
|
3800
4241
|
"valueText": {
|
|
3801
4242
|
"type": "string | undefined",
|
|
3802
4243
|
"required": false
|
|
4244
|
+
},
|
|
4245
|
+
"valueTexts": {
|
|
4246
|
+
"type": "string[]",
|
|
4247
|
+
"required": false
|
|
3803
4248
|
}
|
|
3804
4249
|
},
|
|
3805
4250
|
"events": [
|
|
3806
4251
|
{
|
|
3807
4252
|
"name": "dsChange",
|
|
3808
|
-
"detail": "
|
|
4253
|
+
"detail": "SliderValue"
|
|
4254
|
+
},
|
|
4255
|
+
{
|
|
4256
|
+
"name": "dsCommit",
|
|
4257
|
+
"detail": "SliderValue"
|
|
3809
4258
|
}
|
|
3810
4259
|
],
|
|
3811
4260
|
"slots": []
|
|
@@ -3852,8 +4301,8 @@
|
|
|
3852
4301
|
},
|
|
3853
4302
|
{
|
|
3854
4303
|
"when": "The user must choose one option from a mutually exclusive group.",
|
|
3855
|
-
"component": "component:ds-radio
|
|
3856
|
-
"reason": "
|
|
4304
|
+
"component": "component:ds-radio",
|
|
4305
|
+
"reason": "Radio communicates one-of-many selection."
|
|
3857
4306
|
},
|
|
3858
4307
|
{
|
|
3859
4308
|
"when": "The control triggers a one-time command or submission.",
|
|
@@ -3870,17 +4319,20 @@
|
|
|
3870
4319
|
"Every standalone switch requires an accessible name from a native label, aria-label, or aria-labelledby.",
|
|
3871
4320
|
"Checked state is exposed through switch semantics and thumb position, so state does not rely on color alone.",
|
|
3872
4321
|
"Read-only switches remain focusable and submitted but cannot change; inactive or disabled switches leave the tab order and are omitted from form submission.",
|
|
4322
|
+
"Required and invalid state are exposed explicitly on the switch role; focused, filled, dirty, touched, valid, and invalid data hooks support form diagnostics without imposing visual validation timing.",
|
|
3873
4323
|
"Use presentation mode only when a composite owner such as a menuitemcheckbox provides the interaction and accessible state."
|
|
3874
4324
|
],
|
|
3875
4325
|
"states": [
|
|
3876
4326
|
"Activation updates checked immediately and emits dsChange with the new boolean value.",
|
|
3877
4327
|
"The initial checked value is the form-reset baseline; unchecked switches submit nothing unless uncheckedValue is provided.",
|
|
3878
|
-
"Sizes are md
|
|
4328
|
+
"Sizes are md 32×20 with a 12px thumb and 4px body inset, sm 24×16 with a 10px thumb and 3px inset, and xs 20×12 with an 8px thumb and 2px inset.",
|
|
4329
|
+
"Unchecked track and thumb are transparent and each uses a tertiary-foreground inset stroke: 1.25px at md, 1px at sm, and 0.75px at xs. Checked uses a brand track and primary-background thumb with both strokes removed.",
|
|
3879
4330
|
"Presentation mode removes switch semantics, focus, interaction, and form submission while retaining the checked visual."
|
|
3880
4331
|
],
|
|
3881
4332
|
"responsiveBehavior": [
|
|
3882
4333
|
"Choose size from the density of the containing row; do not enlarge the switch to the full control height.",
|
|
3883
|
-
"Keep the switch from shrinking when adjacent labels wrap."
|
|
4334
|
+
"Keep the switch from shrinking when adjacent labels wrap.",
|
|
4335
|
+
"Thumb movement is left-to-right; the design system does not author RTL-specific component behavior."
|
|
3884
4336
|
],
|
|
3885
4337
|
"frameworkCaveats": {
|
|
3886
4338
|
"customElements": [
|
|
@@ -4408,6 +4860,7 @@
|
|
|
4408
4860
|
"Visible content and the selected native element provide accessible meaning; avoid redundant roles and labels.",
|
|
4409
4861
|
"Use label semantics and its for association only for a real form control.",
|
|
4410
4862
|
"When truncating essential content, the owner provides an accessible way to obtain the omitted text.",
|
|
4863
|
+
"Tertiary and quaternary foregrounds are restricted to text inside genuinely inactive or disabled UI, or to purely decorative content whose removal would not change meaning; quaternary is the fainter tier, and aria-hidden alone does not exempt meaningful visible text from contrast requirements.",
|
|
4411
4864
|
"Underline link text by default. Brand-blue links may omit the resting underline when color already supplies the affordance.",
|
|
4412
4865
|
"Use dotted underline for hidden or supplemental interaction such as a tooltip; the owning trigger must provide focus, keyboard interaction, and accessible tooltip semantics."
|
|
4413
4866
|
],
|
|
@@ -4415,6 +4868,7 @@
|
|
|
4415
4868
|
"A variant is atomic: font size, line height, weight, and letter spacing stay together and are not overridden by consumers.",
|
|
4416
4869
|
"Emphasis selects the supported stronger recipe for local hierarchy; it does not independently mean selected or active.",
|
|
4417
4870
|
"Omitted color inherits currentColor. Explicit semantic aliases or CSS-variable references are used only when Text has an independent color role.",
|
|
4871
|
+
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
4418
4872
|
"Line truncation and wrapping require an owner-supplied width constraint and content-aware composition decision.",
|
|
4419
4873
|
"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.",
|
|
4420
4874
|
"Tabular numbers are for changing numeric values or aligned numeric columns where stable glyph width matters.",
|