@ds-mo/ui 7.0.0 → 8.0.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 +572 -39
- package/dist/angular/ds-divider.d.ts +1 -1
- package/dist/angular/ds-divider.js +3 -3
- package/dist/angular/ds-icon.d.ts +1 -1
- package/dist/angular/ds-icon.js +3 -3
- package/dist/angular/ds-skeleton.d.ts +1 -1
- package/dist/angular/ds-skeleton.js +3 -3
- package/dist/angular/ds-tag.d.ts +8 -2
- package/dist/angular/ds-tag.js +9 -5
- package/dist/components/ds-app-shell.js +1 -1
- package/dist/components/ds-app-shell.js.map +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-donut.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-chip.js.map +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-divider.js.map +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-icon.js +1 -1
- package/dist/components/ds-input.js +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-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-tools.js +1 -1
- package/dist/components/ds-panel-tools.js.map +1 -1
- package/dist/components/ds-radio-group.js +1 -1
- package/dist/components/ds-select.js +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-tab-group.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-tag.js.map +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-AIFkzp4M.js → p-3bRWSqaN.js} +2 -2
- package/dist/components/p-BKhG2xrW.js.map +1 -1
- package/dist/components/{p-Dt1oDMJ6.js → p-CPD_mML6.js} +2 -2
- package/dist/components/p-Ca1H1HPf.js +2 -0
- package/dist/components/p-Ca1H1HPf.js.map +1 -0
- package/dist/components/p-CpX87AQy.js +2 -0
- package/dist/components/{p-DQy_H_hL.js.map → p-CpX87AQy.js.map} +1 -1
- package/dist/components/{p-DYotx2VC.js → p-CyMmsNCF.js} +2 -2
- package/dist/components/p-CyMmsNCF.js.map +1 -0
- package/dist/components/p-D0B9uDTP.js.map +1 -1
- package/dist/components/{p-KRZefifE.js → p-DavEAOUa.js} +2 -2
- package/dist/components/{p-KRZefifE.js.map → p-DavEAOUa.js.map} +1 -1
- package/dist/components/{p-CGovlfKQ.js → p-DoZU8RH0.js} +2 -2
- package/dist/components/p-DoZU8RH0.js.map +1 -0
- package/dist/components/p-DsiueSMI.js +2 -0
- package/dist/components/p-DsiueSMI.js.map +1 -0
- package/dist/components/{p-qawuX6gT.js → p-Dt0XnMxc.js} +2 -2
- package/dist/components/p-Dt0XnMxc.js.map +1 -0
- package/dist/components/{p-Dh4BBuI3.js → p-Mx6VFEQc.js} +2 -2
- package/dist/components/{p-Dh4BBuI3.js.map → p-Mx6VFEQc.js.map} +1 -1
- package/dist/components/{p-CeyijE0j.js → p-clDpFcdU.js} +2 -2
- package/dist/components/p-wxw8arTd.js +2 -0
- package/dist/components/p-wxw8arTd.js.map +1 -0
- package/dist/docs/components.json +406 -232
- package/dist/lib/components/Icon/icon-cache.d.ts +2 -2
- package/dist/lib/components/Text/text-types.d.ts +1 -1
- package/dist/lib/{nav → shell}/index.js +7 -7
- package/dist/lib/{nav → shell}/index.js.map +2 -2
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/index.js.map +2 -2
- package/dist/react/ds-tag.d.ts +5 -2
- package/dist/react/ds-tag.js +1 -1
- package/dist/types/components/AppShell/AppShell.d.ts +2 -2
- package/dist/types/components/Badge/Badge.d.ts +4 -4
- package/dist/types/components/BarNav/BarNav.d.ts +1 -1
- package/dist/types/components/BarNav/index.d.ts +1 -1
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +1 -0
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +1 -0
- package/dist/types/components/Divider/Divider.d.ts +3 -3
- package/dist/types/components/Divider/index.d.ts +1 -1
- package/dist/types/components/Icon/Icon.d.ts +2 -4
- package/dist/types/components/Icon/icon-cache.d.ts +2 -2
- package/dist/types/components/Loader/Loader.d.ts +1 -1
- package/dist/types/components/Menu/Menu.d.ts +1 -1
- package/dist/types/components/Menu/menu-types.d.ts +1 -1
- package/dist/types/components/PanelNav/PanelNav.d.ts +2 -2
- package/dist/types/components/PanelNav/index.d.ts +1 -1
- package/dist/types/components/PanelNav/panel-nav-types.d.ts +1 -2
- package/dist/types/components/PanelNav/panel-nav-utils.d.ts +2 -2
- package/dist/types/components/PanelTools/PanelTools.d.ts +1 -1
- package/dist/types/components/ShellGradientSwatch/shell-gradient-swatch-types.d.ts +2 -2
- package/dist/types/components/Skeleton/Skeleton.d.ts +3 -3
- package/dist/types/components/Skeleton/index.d.ts +1 -1
- package/dist/types/components/Tag/Tag.d.ts +14 -0
- package/dist/types/components/Text/Text.d.ts +1 -1
- package/dist/types/components/Text/text-types.d.ts +1 -1
- package/dist/types/components.d.ts +133 -62
- package/package.json +4 -4
- package/dist/components/p-C7yzdJNM.js +0 -2
- package/dist/components/p-C7yzdJNM.js.map +0 -1
- package/dist/components/p-CGovlfKQ.js.map +0 -1
- package/dist/components/p-DDO5W45N.js +0 -2
- package/dist/components/p-DDO5W45N.js.map +0 -1
- package/dist/components/p-DQy_H_hL.js +0 -2
- package/dist/components/p-DYotx2VC.js.map +0 -1
- package/dist/components/p-Ujv0jqbw.js +0 -2
- package/dist/components/p-Ujv0jqbw.js.map +0 -1
- package/dist/components/p-qawuX6gT.js.map +0 -1
- /package/dist/components/{p-AIFkzp4M.js.map → p-3bRWSqaN.js.map} +0 -0
- /package/dist/components/{p-Dt1oDMJ6.js.map → p-CPD_mML6.js.map} +0 -0
- /package/dist/components/{p-CeyijE0j.js.map → p-clDpFcdU.js.map} +0 -0
- /package/dist/lib/{nav → shell}/badge-gradient-ring.d.ts +0 -0
- /package/dist/lib/{nav → shell}/chrome-transition.d.ts +0 -0
- /package/dist/lib/{nav → shell}/index.d.ts +0 -0
- /package/dist/lib/{nav → shell}/nav-chrome.d.ts +0 -0
- /package/dist/lib/{nav → shell}/shell-chrome-metrics.d.ts +0 -0
- /package/dist/lib/{nav → shell}/shell-gradient-presets.d.ts +0 -0
- /package/dist/lib/{nav → shell}/shell-gradient.d.ts +0 -0
- /package/dist/lib/{nav → shell}/shell-view-transition.d.ts +0 -0
- /package/dist/types/{nav → shell}/badge-gradient-ring.d.ts +0 -0
- /package/dist/types/{nav → shell}/chrome-transition.d.ts +0 -0
- /package/dist/types/{nav → shell}/index.d.ts +0 -0
- /package/dist/types/{nav → shell}/nav-chrome.d.ts +0 -0
- /package/dist/types/{nav → shell}/shell-chrome-metrics.d.ts +0 -0
- /package/dist/types/{nav → shell}/shell-gradient-presets.d.ts +0 -0
- /package/dist/types/{nav → shell}/shell-gradient.d.ts +0 -0
- /package/dist/types/{nav → shell}/shell-shortcuts.d.ts +0 -0
- /package/dist/types/{nav → shell}/shell-view-transition.d.ts +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": "
|
|
4
|
+
"packageVersion": "8.0.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -130,9 +130,83 @@
|
|
|
130
130
|
"tag": "ds-badge",
|
|
131
131
|
"name": "badge",
|
|
132
132
|
"title": "Badge",
|
|
133
|
-
"summary": "
|
|
134
|
-
"intentStatus": "
|
|
135
|
-
"intent":
|
|
133
|
+
"summary": "Non-interactive brand counter or dot that supplements an owning control or label with unread notification information.",
|
|
134
|
+
"intentStatus": "complete",
|
|
135
|
+
"intent": {
|
|
136
|
+
"audience": "general",
|
|
137
|
+
"status": "stable",
|
|
138
|
+
"summary": "Non-interactive brand counter or dot that supplements an owning control or label with unread notification information.",
|
|
139
|
+
"useWhen": [
|
|
140
|
+
"An existing control, navigation item, or label needs a compact unread notification count.",
|
|
141
|
+
"An owning element needs a small visual dot indicating that supplemental notification information exists.",
|
|
142
|
+
"The immediate backing surface can be identified so the badge ring visually separates the mark from its owner."
|
|
143
|
+
],
|
|
144
|
+
"avoidWhen": [
|
|
145
|
+
"The status must stand alone without an owning label or control.",
|
|
146
|
+
"The mark needs semantic positive, caution, negative, or neutral color; Badge intentionally uses one brand treatment.",
|
|
147
|
+
"The compact content is metadata or taxonomy; use Tag or Chip according to whether it is removable.",
|
|
148
|
+
"The badge itself would receive pointer or keyboard interaction; put interaction on the owning control."
|
|
149
|
+
],
|
|
150
|
+
"alternatives": [
|
|
151
|
+
{
|
|
152
|
+
"when": "A compact static label communicates taxonomy or a semantic status.",
|
|
153
|
+
"component": "component:ds-tag",
|
|
154
|
+
"reason": "Tag owns static metadata labels and semantic intent coloring."
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"when": "A metadata value must be individually removable.",
|
|
158
|
+
"component": "component:ds-chip",
|
|
159
|
+
"reason": "Chip owns dismissible metadata values."
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"when": "The count is primary content rather than supplemental notification chrome.",
|
|
163
|
+
"component": "component:ds-text",
|
|
164
|
+
"reason": "Text preserves the quantity as normal readable content."
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
"commonlyComposedWith": [
|
|
168
|
+
"component:ds-button-unfilled",
|
|
169
|
+
"component:ds-bar-nav",
|
|
170
|
+
"component:ds-panel-nav",
|
|
171
|
+
"component:ds-menu"
|
|
172
|
+
],
|
|
173
|
+
"accessibility": [
|
|
174
|
+
"The owning control or content provides the primary accessible name; Badge contributes only supplemental unread or notification meaning.",
|
|
175
|
+
"When a dot is announced, provide contextual text that explains its meaning. Otherwise mark it aria-hidden from the owning composition.",
|
|
176
|
+
"When a counter is announced, provide contextual text such as “5 unread notifications”; a bare number is insufficient.",
|
|
177
|
+
"Avoid duplicating information already included in the owning control's accessible name.",
|
|
178
|
+
"Badge never receives focus and never owns an interaction."
|
|
179
|
+
],
|
|
180
|
+
"states": [
|
|
181
|
+
"Counter represents an unread or notification count, while dot communicates presence without quantity.",
|
|
182
|
+
"Non-positive counter values hide the badge.",
|
|
183
|
+
"Counts above the configured compact limit display the limit with a plus suffix while accessible text retains meaningful context.",
|
|
184
|
+
"Badge keeps one brand treatment; semantic severity belongs to another component or adjacent content.",
|
|
185
|
+
"The ring matches the immediate backing surface for both variants. Use a direct ring override only for a component-local fill that no surface preset represents.",
|
|
186
|
+
"Shell gradient rings align automatically inside active AppShell gradient chrome and may be explicitly enabled or disabled when composition requires it."
|
|
187
|
+
],
|
|
188
|
+
"responsiveBehavior": [
|
|
189
|
+
"The owning control or layout positions Badge and decides whether notification indicators remain visible, condense, or move at responsive breakpoints.",
|
|
190
|
+
"Badge does not anchor itself or automatically switch between counter and dot variants."
|
|
191
|
+
],
|
|
192
|
+
"frameworkCaveats": {
|
|
193
|
+
"customElements": [
|
|
194
|
+
"Position Badge from the owning element's layout and synchronize its contextual accessibility text with the owner."
|
|
195
|
+
],
|
|
196
|
+
"react": [
|
|
197
|
+
"Keep count, visibility, and contextual accessibility text derived from the same unread-notification state as the owning control."
|
|
198
|
+
],
|
|
199
|
+
"angular": [
|
|
200
|
+
"Keep count, visibility, and contextual accessibility text derived from the same unread-notification state as the owning control."
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
"references": [
|
|
204
|
+
{
|
|
205
|
+
"label": "Storybook examples",
|
|
206
|
+
"path": "src/wc/components/Badge/Badge.stories.ts"
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
},
|
|
136
210
|
"api": {
|
|
137
211
|
"props": {
|
|
138
212
|
"background": {
|
|
@@ -1290,11 +1364,80 @@
|
|
|
1290
1364
|
"tag": "ds-divider",
|
|
1291
1365
|
"name": "divider",
|
|
1292
1366
|
"title": "Divider",
|
|
1293
|
-
"summary": "
|
|
1294
|
-
"intentStatus": "
|
|
1295
|
-
"intent":
|
|
1367
|
+
"summary": "Horizontal or vertical separator between sibling content groups, decorative by default with optional structural semantics.",
|
|
1368
|
+
"intentStatus": "complete",
|
|
1369
|
+
"intent": {
|
|
1370
|
+
"audience": "general",
|
|
1371
|
+
"status": "stable",
|
|
1372
|
+
"summary": "Horizontal or vertical separator between sibling content groups, decorative by default with optional structural semantics.",
|
|
1373
|
+
"useWhen": [
|
|
1374
|
+
"Related sibling content groups on one surface need stronger visual separation than spacing alone provides.",
|
|
1375
|
+
"A list or panel needs an inset separator that does not define the outer edge of its container.",
|
|
1376
|
+
"Meaningful document or group structure requires an explicit horizontal or vertical separator."
|
|
1377
|
+
],
|
|
1378
|
+
"avoidWhen": [
|
|
1379
|
+
"Spacing alone communicates the grouping clearly.",
|
|
1380
|
+
"The line defines a container edge, control outline, or selected state; use the owning component's border treatment.",
|
|
1381
|
+
"The divider would compensate for weak headings or unclear information hierarchy.",
|
|
1382
|
+
"A decorative flourish does not clarify grouping."
|
|
1383
|
+
],
|
|
1384
|
+
"alternatives": [
|
|
1385
|
+
{
|
|
1386
|
+
"when": "Content needs an enclosing surface and outer boundary.",
|
|
1387
|
+
"component": "component:ds-card",
|
|
1388
|
+
"reason": "Card owns container chrome, structure, and edge treatment."
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
"when": "A static compact label is being used to name a group.",
|
|
1392
|
+
"component": "component:ds-text",
|
|
1393
|
+
"reason": "Text communicates hierarchy directly instead of relying on a line."
|
|
1394
|
+
}
|
|
1395
|
+
],
|
|
1396
|
+
"commonlyComposedWith": [
|
|
1397
|
+
"component:ds-card",
|
|
1398
|
+
"component:ds-menu",
|
|
1399
|
+
"component:ds-panel-sub-nav"
|
|
1400
|
+
],
|
|
1401
|
+
"accessibility": [
|
|
1402
|
+
"Keep purely visual dividers hidden from assistive technology.",
|
|
1403
|
+
"Expose separator semantics only when the line represents meaningful document or group structure.",
|
|
1404
|
+
"Semantic orientation must match the divider's visual orientation.",
|
|
1405
|
+
"Do not use a semantic divider as a substitute for headings, landmarks, or explicit group labels."
|
|
1406
|
+
],
|
|
1407
|
+
"states": [
|
|
1408
|
+
"Horizontal and vertical variants separate sibling groups along the parent's layout axis.",
|
|
1409
|
+
"The omitted background context is for primary and secondary surfaces. Explicit faint documents a faint surface while using the same standard divider token.",
|
|
1410
|
+
"Other background contexts select their matching divider token, including navigation where Divider is composed inside app chrome.",
|
|
1411
|
+
"Inset is symmetric along the line axis. Explicit length is reserved for layout-specific separators; otherwise the line fills the available axis."
|
|
1412
|
+
],
|
|
1413
|
+
"responsiveBehavior": [
|
|
1414
|
+
"The parent layout decides whether to change orientation, visibility, inset, or length at responsive breakpoints.",
|
|
1415
|
+
"Divider does not infer layout direction or hide itself responsively."
|
|
1416
|
+
],
|
|
1417
|
+
"frameworkCaveats": {
|
|
1418
|
+
"customElements": [
|
|
1419
|
+
"Set semantic mode only from known document structure; presentation alone should remain hidden from assistive technology."
|
|
1420
|
+
],
|
|
1421
|
+
"react": [
|
|
1422
|
+
"Derive orientation and visibility from the parent layout rather than viewport logic inside Divider."
|
|
1423
|
+
],
|
|
1424
|
+
"angular": [
|
|
1425
|
+
"Derive orientation and visibility from the parent layout rather than viewport logic inside Divider."
|
|
1426
|
+
]
|
|
1427
|
+
},
|
|
1428
|
+
"references": [
|
|
1429
|
+
{
|
|
1430
|
+
"label": "Storybook examples",
|
|
1431
|
+
"path": "src/wc/components/Divider/Divider.stories.ts"
|
|
1432
|
+
}
|
|
1433
|
+
]
|
|
1434
|
+
},
|
|
1296
1435
|
"api": {
|
|
1297
1436
|
"props": {
|
|
1437
|
+
"background": {
|
|
1438
|
+
"type": "DividerBackground | undefined",
|
|
1439
|
+
"required": false
|
|
1440
|
+
},
|
|
1298
1441
|
"inset": {
|
|
1299
1442
|
"type": "DividerInset",
|
|
1300
1443
|
"required": false
|
|
@@ -1310,10 +1453,6 @@
|
|
|
1310
1453
|
"semantic": {
|
|
1311
1454
|
"type": "boolean",
|
|
1312
1455
|
"required": false
|
|
1313
|
-
},
|
|
1314
|
-
"surface": {
|
|
1315
|
-
"type": "DividerSurface",
|
|
1316
|
-
"required": false
|
|
1317
1456
|
}
|
|
1318
1457
|
},
|
|
1319
1458
|
"events": [],
|
|
@@ -1409,17 +1548,90 @@
|
|
|
1409
1548
|
"tag": "ds-icon",
|
|
1410
1549
|
"name": "icon",
|
|
1411
1550
|
"title": "Icon",
|
|
1412
|
-
"summary": "
|
|
1413
|
-
"intentStatus": "
|
|
1414
|
-
"intent":
|
|
1551
|
+
"summary": "Secure, lazily loaded renderer for canonical IcoMo system and flag glyphs, decorative by default with optional graphic semantics.",
|
|
1552
|
+
"intentStatus": "complete",
|
|
1553
|
+
"intent": {
|
|
1554
|
+
"audience": "general",
|
|
1555
|
+
"status": "stable",
|
|
1556
|
+
"summary": "Secure, lazily loaded renderer for canonical IcoMo system and flag glyphs, decorative by default with optional graphic semantics.",
|
|
1557
|
+
"useWhen": [
|
|
1558
|
+
"An approved IcoMo system glyph supplements visible text or control chrome.",
|
|
1559
|
+
"A canonical flag glyph communicates a country or region with adjacent text or an explicit localized label.",
|
|
1560
|
+
"A standalone non-interactive symbol conveys meaning that is unavailable from nearby text."
|
|
1561
|
+
],
|
|
1562
|
+
"avoidWhen": [
|
|
1563
|
+
"The glyph itself must be clickable or keyboard interactive; use an appropriate button or link and compose Icon inside it.",
|
|
1564
|
+
"The visual is an illustration, logo, chart, or arbitrary SVG artwork rather than a canonical IcoMo glyph.",
|
|
1565
|
+
"An alias, guessed name, or case-insensitive lookup would be required; runtime lookup uses exact canonical export names.",
|
|
1566
|
+
"A fallback glyph would be required when loading fails; Icon intentionally preserves an empty fixed-size box."
|
|
1567
|
+
],
|
|
1568
|
+
"alternatives": [
|
|
1569
|
+
{
|
|
1570
|
+
"when": "The icon initiates an action or persistent toggle.",
|
|
1571
|
+
"component": "component:ds-button-unfilled",
|
|
1572
|
+
"reason": "ButtonUnfilled owns interaction, focus, naming, and toggle semantics."
|
|
1573
|
+
},
|
|
1574
|
+
{
|
|
1575
|
+
"when": "The visual communicates indeterminate loading progress.",
|
|
1576
|
+
"component": "component:ds-loader",
|
|
1577
|
+
"reason": "Loader owns progress status and motion behavior."
|
|
1578
|
+
},
|
|
1579
|
+
{
|
|
1580
|
+
"when": "The compact visual is an unread count or notification dot.",
|
|
1581
|
+
"component": "component:ds-badge",
|
|
1582
|
+
"reason": "Badge owns supplemental notification semantics."
|
|
1583
|
+
}
|
|
1584
|
+
],
|
|
1585
|
+
"commonlyComposedWith": [
|
|
1586
|
+
"component:ds-button-filled",
|
|
1587
|
+
"component:ds-button-unfilled",
|
|
1588
|
+
"component:ds-menu",
|
|
1589
|
+
"component:ds-panel-nav"
|
|
1590
|
+
],
|
|
1591
|
+
"accessibility": [
|
|
1592
|
+
"Icons are decorative by default and remain hidden from assistive technology when visible text or an owning control already communicates the meaning.",
|
|
1593
|
+
"The owning button, link, or composite control provides the accessible name; do not repeat that name on its nested Icon.",
|
|
1594
|
+
"Provide an explicit label only when the non-interactive icon itself communicates otherwise unavailable meaning.",
|
|
1595
|
+
"Informative flags require an explicit localized country or region label; never derive accessible text from the export name.",
|
|
1596
|
+
"Icon never receives focus or owns interaction."
|
|
1597
|
+
],
|
|
1598
|
+
"states": [
|
|
1599
|
+
"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.",
|
|
1600
|
+
"Built-in glyph lookup accepts exact canonical IcoMo export names only. Names beginning with Flag select the flag catalog automatically.",
|
|
1601
|
+
"A cache miss lazy-loads into a fixed-size box without layout shift. Unknown names, failed loads, and rejected markup leave that box empty.",
|
|
1602
|
+
"Critical first-paint glyphs may be pre-registered before rendering; all resolved glyphs share a global cache.",
|
|
1603
|
+
"Every SVG is validated at the render boundary and injected as parsed DOM nodes so app-registered markup cannot bypass executable-content or external-reference checks."
|
|
1604
|
+
],
|
|
1605
|
+
"responsiveBehavior": [
|
|
1606
|
+
"The owning component or layout chooses icon size and any responsive changes.",
|
|
1607
|
+
"Icon does not scale from viewport width or change glyphs automatically."
|
|
1608
|
+
],
|
|
1609
|
+
"frameworkCaveats": {
|
|
1610
|
+
"customElements": [
|
|
1611
|
+
"Import each canonical glyph as an SVG string and call registerIcons before first render when synchronous critical-icon paint is required."
|
|
1612
|
+
],
|
|
1613
|
+
"react": [
|
|
1614
|
+
"Keep nested control icons decorative and place the accessible name on the owning React control."
|
|
1615
|
+
],
|
|
1616
|
+
"angular": [
|
|
1617
|
+
"Keep nested control icons decorative and place the accessible name on the owning Angular control."
|
|
1618
|
+
]
|
|
1619
|
+
},
|
|
1620
|
+
"references": [
|
|
1621
|
+
{
|
|
1622
|
+
"label": "Storybook examples",
|
|
1623
|
+
"path": "src/wc/components/Icon/Icon.stories.ts"
|
|
1624
|
+
},
|
|
1625
|
+
{
|
|
1626
|
+
"label": "Preload API guidance",
|
|
1627
|
+
"path": "src/wc/components/Icon/icon-cache.ts"
|
|
1628
|
+
}
|
|
1629
|
+
]
|
|
1630
|
+
},
|
|
1415
1631
|
"api": {
|
|
1416
1632
|
"props": {
|
|
1417
1633
|
"color": {
|
|
1418
|
-
"type": "IconColor
|
|
1419
|
-
"required": false
|
|
1420
|
-
},
|
|
1421
|
-
"flag": {
|
|
1422
|
-
"type": "boolean",
|
|
1634
|
+
"type": "IconColor",
|
|
1423
1635
|
"required": false
|
|
1424
1636
|
},
|
|
1425
1637
|
"label": {
|
|
@@ -1555,13 +1767,79 @@
|
|
|
1555
1767
|
"tag": "ds-loader",
|
|
1556
1768
|
"name": "loader",
|
|
1557
1769
|
"title": "Loader",
|
|
1558
|
-
"summary": "
|
|
1559
|
-
"intentStatus": "
|
|
1560
|
-
"intent":
|
|
1770
|
+
"summary": "Indeterminate progress glyph for ongoing operations, inheriting owner color and optionally exposing standalone polite status text.",
|
|
1771
|
+
"intentStatus": "complete",
|
|
1772
|
+
"intent": {
|
|
1773
|
+
"audience": "general",
|
|
1774
|
+
"status": "stable",
|
|
1775
|
+
"summary": "Indeterminate progress glyph for ongoing operations, inheriting owner color and optionally exposing standalone polite status text.",
|
|
1776
|
+
"useWhen": [
|
|
1777
|
+
"An action or operation is in progress and its remaining duration cannot be quantified.",
|
|
1778
|
+
"A button, field, or bounded workflow needs a compact visual busy indicator owned by that control or region.",
|
|
1779
|
+
"A standalone operation needs a visible spinner with contextual polite status text."
|
|
1780
|
+
],
|
|
1781
|
+
"avoidWhen": [
|
|
1782
|
+
"Pending content has a predictable structure; use Skeleton to preserve that layout.",
|
|
1783
|
+
"Progress is measurable; use an appropriate determinate progress pattern.",
|
|
1784
|
+
"The UI needs a blocking overlay or automatic centering; the owning layout must provide that structure.",
|
|
1785
|
+
"Success, failure, retry, or completion must be communicated; the owning workflow handles outcomes."
|
|
1786
|
+
],
|
|
1787
|
+
"alternatives": [
|
|
1788
|
+
{
|
|
1789
|
+
"when": "A content region is waiting for structured data.",
|
|
1790
|
+
"component": "component:ds-skeleton",
|
|
1791
|
+
"reason": "Skeleton preserves the expected content geometry while data loads."
|
|
1792
|
+
},
|
|
1793
|
+
{
|
|
1794
|
+
"when": "A static visual symbol is needed without progress semantics.",
|
|
1795
|
+
"component": "component:ds-icon",
|
|
1796
|
+
"reason": "Icon owns non-progress system and flag glyphs."
|
|
1797
|
+
}
|
|
1798
|
+
],
|
|
1799
|
+
"commonlyComposedWith": [
|
|
1800
|
+
"component:ds-button-filled",
|
|
1801
|
+
"component:ds-button-unfilled",
|
|
1802
|
+
"component:ds-input",
|
|
1803
|
+
"component:ds-select"
|
|
1804
|
+
],
|
|
1805
|
+
"accessibility": [
|
|
1806
|
+
"When Loader is nested in a busy button, field, or region, keep it unnamed and expose busy state from the owner.",
|
|
1807
|
+
"Standalone Loader requires contextual status text that explains what is loading; do not rely on a generic visual spinner alone.",
|
|
1808
|
+
"Avoid duplicate announcements from both Loader and its owning busy region.",
|
|
1809
|
+
"Reduced motion stops rotation while keeping the glyph and status semantics visible."
|
|
1810
|
+
],
|
|
1811
|
+
"states": [
|
|
1812
|
+
"Loader communicates indeterminate progress only and does not emit completion or failure events.",
|
|
1813
|
+
"Omitted color inherits currentColor. Explicit semantic aliases and CSS-variable references match Icon when an independent progress color is required.",
|
|
1814
|
+
"The owner decides whether to delay Loader visibility for short operations and removes it when the operation settles.",
|
|
1815
|
+
"The owner reserves space and supplies centering or overlay layout so Loader never causes unexpected layout movement."
|
|
1816
|
+
],
|
|
1817
|
+
"responsiveBehavior": [
|
|
1818
|
+
"The owning component or layout chooses Loader size, placement, and any responsive changes.",
|
|
1819
|
+
"Loader does not infer container size or viewport breakpoints."
|
|
1820
|
+
],
|
|
1821
|
+
"frameworkCaveats": {
|
|
1822
|
+
"customElements": [
|
|
1823
|
+
"Use the label only for standalone status; nested usage should synchronize aria-busy on the owning element."
|
|
1824
|
+
],
|
|
1825
|
+
"react": [
|
|
1826
|
+
"Derive Loader visibility and the owner's busy state from the same operation state."
|
|
1827
|
+
],
|
|
1828
|
+
"angular": [
|
|
1829
|
+
"Derive Loader visibility and the owner's busy state from the same operation state."
|
|
1830
|
+
]
|
|
1831
|
+
},
|
|
1832
|
+
"references": [
|
|
1833
|
+
{
|
|
1834
|
+
"label": "Storybook examples",
|
|
1835
|
+
"path": "src/wc/components/Loader/Loader.stories.ts"
|
|
1836
|
+
}
|
|
1837
|
+
]
|
|
1838
|
+
},
|
|
1561
1839
|
"api": {
|
|
1562
1840
|
"props": {
|
|
1563
1841
|
"color": {
|
|
1564
|
-
"type": "LoaderColor
|
|
1842
|
+
"type": "LoaderColor",
|
|
1565
1843
|
"required": false
|
|
1566
1844
|
},
|
|
1567
1845
|
"label": {
|
|
@@ -2752,11 +3030,88 @@
|
|
|
2752
3030
|
"tag": "ds-skeleton",
|
|
2753
3031
|
"name": "skeleton",
|
|
2754
3032
|
"title": "Skeleton",
|
|
2755
|
-
"summary": "
|
|
2756
|
-
"intentStatus": "
|
|
2757
|
-
"intent":
|
|
3033
|
+
"summary": "Aria-hidden atomic placeholder for preserving expected text, icon, or control geometry while structured content is pending.",
|
|
3034
|
+
"intentStatus": "complete",
|
|
3035
|
+
"intent": {
|
|
3036
|
+
"audience": "general",
|
|
3037
|
+
"status": "stable",
|
|
3038
|
+
"summary": "Aria-hidden atomic placeholder for preserving expected text, icon, or control geometry while structured content is pending.",
|
|
3039
|
+
"useWhen": [
|
|
3040
|
+
"A pending content region has a predictable structure whose geometry should remain stable while data loads.",
|
|
3041
|
+
"Text, icon, and control placeholder atoms can be composed to approximate the final hierarchy and arrangement.",
|
|
3042
|
+
"The owning region can expose busy state and contextual loading status independently."
|
|
3043
|
+
],
|
|
3044
|
+
"avoidWhen": [
|
|
3045
|
+
"An action or operation is progressing without predictable content structure; use Loader.",
|
|
3046
|
+
"The final layout is unknown or likely to differ substantially from the placeholder composition.",
|
|
3047
|
+
"A complete card, list, or table preset is expected from one Skeleton; compose atomic shapes in the owner.",
|
|
3048
|
+
"The shimmer would be used as decoration after content is available."
|
|
3049
|
+
],
|
|
3050
|
+
"alternatives": [
|
|
3051
|
+
{
|
|
3052
|
+
"when": "An indeterminate action or operation is in progress.",
|
|
3053
|
+
"component": "component:ds-loader",
|
|
3054
|
+
"reason": "Loader owns operation-level indeterminate progress."
|
|
3055
|
+
},
|
|
3056
|
+
{
|
|
3057
|
+
"when": "Real text content is already available.",
|
|
3058
|
+
"component": "component:ds-text",
|
|
3059
|
+
"reason": "Text should replace its placeholder as soon as content is ready."
|
|
3060
|
+
},
|
|
3061
|
+
{
|
|
3062
|
+
"when": "A real system glyph is available.",
|
|
3063
|
+
"component": "component:ds-icon",
|
|
3064
|
+
"reason": "Icon renders actual glyph content rather than loading geometry."
|
|
3065
|
+
}
|
|
3066
|
+
],
|
|
3067
|
+
"commonlyComposedWith": [
|
|
3068
|
+
"component:ds-card",
|
|
3069
|
+
"component:ds-table",
|
|
3070
|
+
"component:ds-text",
|
|
3071
|
+
"component:ds-icon"
|
|
3072
|
+
],
|
|
3073
|
+
"accessibility": [
|
|
3074
|
+
"Skeleton remains hidden from assistive technology because its shapes do not represent content.",
|
|
3075
|
+
"The owning content region exposes busy state and a contextual loading status when an announcement is needed.",
|
|
3076
|
+
"Do not announce every placeholder atom or duplicate status text across a composed skeleton layout.",
|
|
3077
|
+
"The owner preserves focus and meaningful reading order when replacing placeholders with real content."
|
|
3078
|
+
],
|
|
3079
|
+
"states": [
|
|
3080
|
+
"Text, icon, and control variants are atomic metric canvases aligned to their corresponding design-system recipes.",
|
|
3081
|
+
"Compose approximate line count, hierarchy, widths, and control placement without simulating actual values.",
|
|
3082
|
+
"Shimmer is on by default and may be disabled for a static placeholder. Reduced motion always produces the static final shape.",
|
|
3083
|
+
"Rounded is an optional visual treatment for icon and control atoms rather than a semantic state.",
|
|
3084
|
+
"Omitted background is for primary and secondary surfaces. Explicit faint documents a faint parent while using the same standard base and shimmer tokens; other contexts use matching surface tokens.",
|
|
3085
|
+
"The owner decides whether to delay initial visibility and when to replace the complete composition."
|
|
3086
|
+
],
|
|
3087
|
+
"responsiveBehavior": [
|
|
3088
|
+
"The owning layout changes placeholder count, width, visibility, and arrangement to match its real responsive content.",
|
|
3089
|
+
"Skeleton does not infer breakpoints or rearrange sibling atoms."
|
|
3090
|
+
],
|
|
3091
|
+
"frameworkCaveats": {
|
|
3092
|
+
"customElements": [
|
|
3093
|
+
"Compose one element per placeholder atom and set aria-busy or loading status on the containing content region."
|
|
3094
|
+
],
|
|
3095
|
+
"react": [
|
|
3096
|
+
"Render Skeleton and real content from one loading branch so placeholder geometry and region busy state settle together."
|
|
3097
|
+
],
|
|
3098
|
+
"angular": [
|
|
3099
|
+
"Render Skeleton and real content from one loading branch so placeholder geometry and region busy state settle together."
|
|
3100
|
+
]
|
|
3101
|
+
},
|
|
3102
|
+
"references": [
|
|
3103
|
+
{
|
|
3104
|
+
"label": "Storybook examples",
|
|
3105
|
+
"path": "src/wc/components/Skeleton/Skeleton.stories.ts"
|
|
3106
|
+
}
|
|
3107
|
+
]
|
|
3108
|
+
},
|
|
2758
3109
|
"api": {
|
|
2759
3110
|
"props": {
|
|
3111
|
+
"background": {
|
|
3112
|
+
"type": "SkeletonBackground | undefined",
|
|
3113
|
+
"required": false
|
|
3114
|
+
},
|
|
2760
3115
|
"controlSize": {
|
|
2761
3116
|
"type": "ControlSize",
|
|
2762
3117
|
"required": false
|
|
@@ -2773,10 +3128,6 @@
|
|
|
2773
3128
|
"type": "boolean",
|
|
2774
3129
|
"required": false
|
|
2775
3130
|
},
|
|
2776
|
-
"surface": {
|
|
2777
|
-
"type": "SkeletonSurface",
|
|
2778
|
-
"required": false
|
|
2779
|
-
},
|
|
2780
3131
|
"textVariant": {
|
|
2781
3132
|
"type": "TextVariant",
|
|
2782
3133
|
"required": false
|
|
@@ -3255,19 +3606,117 @@
|
|
|
3255
3606
|
"tag": "ds-tag",
|
|
3256
3607
|
"name": "tag",
|
|
3257
3608
|
"title": "Tag",
|
|
3258
|
-
"summary": "
|
|
3259
|
-
"intentStatus": "
|
|
3260
|
-
"intent":
|
|
3609
|
+
"summary": "Compact metadata or semantic-status label on primary surfaces, optionally rendered as a controlled menu trigger with leading and fixed suffix icons.",
|
|
3610
|
+
"intentStatus": "complete",
|
|
3611
|
+
"intent": {
|
|
3612
|
+
"audience": "general",
|
|
3613
|
+
"status": "stable",
|
|
3614
|
+
"summary": "Compact metadata or semantic-status label on primary surfaces, optionally rendered as a controlled menu trigger with leading and fixed suffix icons.",
|
|
3615
|
+
"useWhen": [
|
|
3616
|
+
"A value needs a compact static metadata or category label.",
|
|
3617
|
+
"A status needs persistent semantic color and visible text without interaction.",
|
|
3618
|
+
"Product affiliation or AI-generated content needs an explicit labelled marker.",
|
|
3619
|
+
"A compact metadata value opens a related menu and needs a native button with controlled popup state."
|
|
3620
|
+
],
|
|
3621
|
+
"avoidWhen": [
|
|
3622
|
+
"The value must be individually removable; use Chip.",
|
|
3623
|
+
"The element triggers an action other than opening a related menu; use the appropriate button or link.",
|
|
3624
|
+
"The element represents persistent selection or a toggle; use a control whose active state owns that meaning.",
|
|
3625
|
+
"A count or notification dot supplements another control; use Badge.",
|
|
3626
|
+
"The tag would be placed on a non-primary parent surface."
|
|
3627
|
+
],
|
|
3628
|
+
"alternatives": [
|
|
3629
|
+
{
|
|
3630
|
+
"when": "A metadata value is individually removable.",
|
|
3631
|
+
"component": "component:ds-chip",
|
|
3632
|
+
"reason": "Chip owns dismiss interaction and parent-managed removal."
|
|
3633
|
+
},
|
|
3634
|
+
{
|
|
3635
|
+
"when": "A compact mark communicates unread count or notification presence.",
|
|
3636
|
+
"component": "component:ds-badge",
|
|
3637
|
+
"reason": "Badge owns supplemental notification indicators."
|
|
3638
|
+
},
|
|
3639
|
+
{
|
|
3640
|
+
"when": "The compact element triggers a non-menu action or toggle.",
|
|
3641
|
+
"component": "component:ds-button-unfilled",
|
|
3642
|
+
"reason": "ButtonUnfilled owns general actions, focus, and active state."
|
|
3643
|
+
}
|
|
3644
|
+
],
|
|
3645
|
+
"commonlyComposedWith": [
|
|
3646
|
+
"component:ds-card",
|
|
3647
|
+
"component:ds-table",
|
|
3648
|
+
"component:ds-text",
|
|
3649
|
+
"component:ds-icon"
|
|
3650
|
+
],
|
|
3651
|
+
"accessibility": [
|
|
3652
|
+
"The visible label provides Tag's accessible name; a separate aria-label is normally unnecessary.",
|
|
3653
|
+
"Leading icons reinforce the visible label and remain decorative. The fixed ChevronUpDown suffix is always decorative.",
|
|
3654
|
+
"Static Tag stays outside the tab order. Interactive Tag renders a native button with menu popup semantics.",
|
|
3655
|
+
"The owner controls expanded state, associates the menu with aria-controls when available, and moves focus according to the Menu contract.",
|
|
3656
|
+
"Do not communicate semantic intent by color alone; the label must remain understandable without color."
|
|
3657
|
+
],
|
|
3658
|
+
"states": [
|
|
3659
|
+
"Intent describes the represented value's semantic meaning, never selection or interaction state.",
|
|
3660
|
+
"Neutral is ordinary metadata; brand marks Motive or product affiliation; AI marks AI-generated or AI-assisted content; positive, caution, warning, and negative communicate increasingly specific status meaning.",
|
|
3661
|
+
"Warning signals higher urgency or risk than caution, which asks for attention before a possible issue.",
|
|
3662
|
+
"Contrast changes visual prominence without changing semantic intent or parent surface context.",
|
|
3663
|
+
"Rounded is an optional visual style with no semantic difference.",
|
|
3664
|
+
"Labels stay on one line and truncate only when the owner supplies a maximum width.",
|
|
3665
|
+
"Omitted interactive renders static metadata with no focus, event, or suffix. Interactive adds the fixed ChevronUpDown suffix and emits dsClick without toggling expanded internally.",
|
|
3666
|
+
"isInactive disables only the interactive button and applies the shared inactive treatment."
|
|
3667
|
+
],
|
|
3668
|
+
"responsiveBehavior": [
|
|
3669
|
+
"The owner selects md, sm, or xs density to match its local layout and owns collection wrapping, overflow, and condensation.",
|
|
3670
|
+
"Tag does not change size or behavior automatically at breakpoints."
|
|
3671
|
+
],
|
|
3672
|
+
"frameworkCaveats": {
|
|
3673
|
+
"customElements": [
|
|
3674
|
+
"Listen for dsClick to open the associated menu, then update expanded as controlled state. Use the Tag host ID as the menu anchor when required."
|
|
3675
|
+
],
|
|
3676
|
+
"react": [
|
|
3677
|
+
"Use a stable key and parent-owned layout for Tag collections. For interactive Tag, synchronize expanded and the associated menu from the same state."
|
|
3678
|
+
],
|
|
3679
|
+
"angular": [
|
|
3680
|
+
"Use parent-owned layout for Tag collections. For interactive Tag, synchronize expanded and the associated menu from the same state."
|
|
3681
|
+
]
|
|
3682
|
+
},
|
|
3683
|
+
"references": [
|
|
3684
|
+
{
|
|
3685
|
+
"label": "Storybook examples",
|
|
3686
|
+
"path": "src/wc/components/Tag/Tag.stories.ts"
|
|
3687
|
+
}
|
|
3688
|
+
]
|
|
3689
|
+
},
|
|
3261
3690
|
"api": {
|
|
3262
3691
|
"props": {
|
|
3692
|
+
"ariaControls": {
|
|
3693
|
+
"type": "string | undefined",
|
|
3694
|
+
"required": false
|
|
3695
|
+
},
|
|
3263
3696
|
"contrast": {
|
|
3264
3697
|
"type": "TagContrast",
|
|
3265
3698
|
"required": false
|
|
3266
3699
|
},
|
|
3700
|
+
"expanded": {
|
|
3701
|
+
"type": "boolean",
|
|
3702
|
+
"required": false
|
|
3703
|
+
},
|
|
3704
|
+
"icon": {
|
|
3705
|
+
"type": "string",
|
|
3706
|
+
"required": false
|
|
3707
|
+
},
|
|
3267
3708
|
"intent": {
|
|
3268
3709
|
"type": "TagIntent",
|
|
3269
3710
|
"required": false
|
|
3270
3711
|
},
|
|
3712
|
+
"interactive": {
|
|
3713
|
+
"type": "boolean",
|
|
3714
|
+
"required": false
|
|
3715
|
+
},
|
|
3716
|
+
"isInactive": {
|
|
3717
|
+
"type": "boolean",
|
|
3718
|
+
"required": false
|
|
3719
|
+
},
|
|
3271
3720
|
"label": {
|
|
3272
3721
|
"type": "string",
|
|
3273
3722
|
"required": true
|
|
@@ -3285,7 +3734,12 @@
|
|
|
3285
3734
|
"required": false
|
|
3286
3735
|
}
|
|
3287
3736
|
},
|
|
3288
|
-
"events": [
|
|
3737
|
+
"events": [
|
|
3738
|
+
{
|
|
3739
|
+
"name": "dsClick",
|
|
3740
|
+
"detail": "MouseEvent"
|
|
3741
|
+
}
|
|
3742
|
+
],
|
|
3289
3743
|
"slots": []
|
|
3290
3744
|
},
|
|
3291
3745
|
"exports": {
|
|
@@ -3295,9 +3749,11 @@
|
|
|
3295
3749
|
},
|
|
3296
3750
|
"dependencies": [
|
|
3297
3751
|
"@ds-mo/ui",
|
|
3298
|
-
"@ds-mo/tokens"
|
|
3752
|
+
"@ds-mo/tokens",
|
|
3753
|
+
"@ds-mo/icons"
|
|
3299
3754
|
],
|
|
3300
3755
|
"componentDependencies": [
|
|
3756
|
+
"icon",
|
|
3301
3757
|
"text"
|
|
3302
3758
|
]
|
|
3303
3759
|
},
|
|
@@ -3306,9 +3762,86 @@
|
|
|
3306
3762
|
"tag": "ds-text",
|
|
3307
3763
|
"name": "text",
|
|
3308
3764
|
"title": "Text",
|
|
3309
|
-
"summary": "
|
|
3310
|
-
"intentStatus": "
|
|
3311
|
-
"intent":
|
|
3765
|
+
"summary": "Semantic plain UI text with atomic tokenized typography recipes, measurable line boxes, and composition-owned wrapping and truncation.",
|
|
3766
|
+
"intentStatus": "complete",
|
|
3767
|
+
"intent": {
|
|
3768
|
+
"audience": "general",
|
|
3769
|
+
"status": "stable",
|
|
3770
|
+
"summary": "Semantic plain UI text with atomic tokenized typography recipes, measurable line boxes, and composition-owned wrapping and truncation.",
|
|
3771
|
+
"useWhen": [
|
|
3772
|
+
"Plain UI text needs a complete design-system typography recipe.",
|
|
3773
|
+
"Headings, paragraphs, labels, or inline phrasing need native HTML semantics independent from their visual scale.",
|
|
3774
|
+
"A component needs a stable measurable text box aligned to shared typography metrics.",
|
|
3775
|
+
"Changing numeric values need tabular glyph widths."
|
|
3776
|
+
],
|
|
3777
|
+
"avoidWhen": [
|
|
3778
|
+
"Content is markdown, rich prose, or an arbitrary nested document structure.",
|
|
3779
|
+
"The element is interactive; use the correct native or design-system control and compose Text only for its label.",
|
|
3780
|
+
"Individual font metrics must be overridden instead of selecting an existing complete variant.",
|
|
3781
|
+
"Typography alone would be used to repair an incorrect heading hierarchy."
|
|
3782
|
+
],
|
|
3783
|
+
"alternatives": [
|
|
3784
|
+
{
|
|
3785
|
+
"when": "Predictable text geometry is pending while content loads.",
|
|
3786
|
+
"component": "component:ds-skeleton",
|
|
3787
|
+
"reason": "Skeleton owns aria-hidden loading geometry aligned to Text line metrics."
|
|
3788
|
+
},
|
|
3789
|
+
{
|
|
3790
|
+
"when": "Compact static metadata or semantic status needs a contained treatment.",
|
|
3791
|
+
"component": "component:ds-tag",
|
|
3792
|
+
"reason": "Tag owns compact labelled metadata and intent surfaces."
|
|
3793
|
+
}
|
|
3794
|
+
],
|
|
3795
|
+
"commonlyComposedWith": [
|
|
3796
|
+
"component:ds-icon",
|
|
3797
|
+
"component:ds-card",
|
|
3798
|
+
"component:ds-field",
|
|
3799
|
+
"component:ds-button-filled"
|
|
3800
|
+
],
|
|
3801
|
+
"accessibility": [
|
|
3802
|
+
"Choose the native element from document meaning and hierarchy; choose the visual variant independently.",
|
|
3803
|
+
"Composition authors preserve logical h1–h6 order regardless of visual size.",
|
|
3804
|
+
"Visible content and the selected native element provide accessible meaning; avoid redundant roles and labels.",
|
|
3805
|
+
"Use label semantics and its for association only for a real form control.",
|
|
3806
|
+
"When truncating essential content, the owner provides an accessible way to obtain the omitted text.",
|
|
3807
|
+
"Use solid underline only when Text is composed inside a real link.",
|
|
3808
|
+
"Use dotted underline to signal hidden or supplemental interaction such as a tooltip; the owning trigger must provide focus, keyboard interaction, and accessible tooltip semantics."
|
|
3809
|
+
],
|
|
3810
|
+
"states": [
|
|
3811
|
+
"A variant is atomic: font size, line height, weight, and letter spacing stay together and are not overridden by consumers.",
|
|
3812
|
+
"Emphasis selects the supported stronger recipe for local hierarchy; it does not independently mean selected or active.",
|
|
3813
|
+
"Omitted color inherits currentColor. Explicit semantic aliases or CSS-variable references are used only when Text has an independent color role.",
|
|
3814
|
+
"Line truncation and wrapping require an owner-supplied width constraint and content-aware composition decision.",
|
|
3815
|
+
"Solid underline communicates a real link; dotted underline communicates hidden or supplemental interaction such as a tooltip. Decoration does not make Text interactive by itself.",
|
|
3816
|
+
"Tabular numbers are for changing numeric values or aligned numeric columns where stable glyph width matters.",
|
|
3817
|
+
"Shimmer is reserved for visible generating/loading status text whose owner provides status semantics; reduced motion keeps static readable text."
|
|
3818
|
+
],
|
|
3819
|
+
"responsiveBehavior": [
|
|
3820
|
+
"The composition owns width, wrapping, truncation, alignment, and any responsive variant change.",
|
|
3821
|
+
"Text preserves complete token recipes and does not scale fluidly or infer breakpoints."
|
|
3822
|
+
],
|
|
3823
|
+
"frameworkCaveats": {
|
|
3824
|
+
"customElements": [
|
|
3825
|
+
"Set as explicitly for inline text, headings, and labels; omitted as renders a paragraph."
|
|
3826
|
+
],
|
|
3827
|
+
"react": [
|
|
3828
|
+
"Keep semantic as choices aligned with the rendered document hierarchy rather than component styling."
|
|
3829
|
+
],
|
|
3830
|
+
"angular": [
|
|
3831
|
+
"Use the for prop only when Text renders a label associated with a real control ID."
|
|
3832
|
+
]
|
|
3833
|
+
},
|
|
3834
|
+
"references": [
|
|
3835
|
+
{
|
|
3836
|
+
"label": "Storybook examples",
|
|
3837
|
+
"path": "src/wc/components/Text/Text.stories.ts"
|
|
3838
|
+
},
|
|
3839
|
+
{
|
|
3840
|
+
"label": "Typography contract",
|
|
3841
|
+
"path": "AGENTS.md"
|
|
3842
|
+
}
|
|
3843
|
+
]
|
|
3844
|
+
},
|
|
3312
3845
|
"api": {
|
|
3313
3846
|
"props": {
|
|
3314
3847
|
"align": {
|
|
@@ -3320,7 +3853,7 @@
|
|
|
3320
3853
|
"required": false
|
|
3321
3854
|
},
|
|
3322
3855
|
"color": {
|
|
3323
|
-
"type": "TextColor
|
|
3856
|
+
"type": "TextColor",
|
|
3324
3857
|
"required": false
|
|
3325
3858
|
},
|
|
3326
3859
|
"decoration": {
|