@adobe/spectrum-design-data 3.3.0-beta.0 → 3.3.0-beta.2

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.
Files changed (119) hide show
  1. package/components/accordion.json +15 -54
  2. package/components/action-bar.json +9 -23
  3. package/components/action-button.json +39 -79
  4. package/components/action-group.json +18 -129
  5. package/components/alert-banner.json +8 -27
  6. package/components/alert-dialog.json +34 -48
  7. package/components/avatar-group.json +9 -28
  8. package/components/avatar.json +29 -92
  9. package/components/badge.json +56 -150
  10. package/components/breadcrumbs.json +26 -100
  11. package/components/button-group.json +19 -50
  12. package/components/button.json +61 -92
  13. package/components/calendar.json +8 -67
  14. package/components/cards.json +31 -46
  15. package/components/checkbox-group.json +16 -78
  16. package/components/checkbox.json +27 -90
  17. package/components/close-button.json +20 -62
  18. package/components/coach-indicator.json +14 -44
  19. package/components/coach-mark.json +8 -26
  20. package/components/color-area.json +20 -93
  21. package/components/color-handle.json +25 -38
  22. package/components/color-loupe.json +2 -6
  23. package/components/color-slider.json +26 -122
  24. package/components/color-wheel.json +17 -84
  25. package/components/combo-box.json +50 -182
  26. package/components/contextual-help.json +80 -119
  27. package/components/date-picker.json +24 -120
  28. package/components/divider.json +12 -25
  29. package/components/drop-zone.json +18 -30
  30. package/components/field-label.json +21 -62
  31. package/components/help-text.json +16 -53
  32. package/components/illustrated-message.json +21 -72
  33. package/components/in-line-alert.json +13 -53
  34. package/components/link.json +24 -56
  35. package/components/list-view.json +15 -73
  36. package/components/menu.json +45 -174
  37. package/components/meter.json +24 -65
  38. package/components/number-field.json +34 -168
  39. package/components/picker.json +42 -181
  40. package/components/popover.json +37 -113
  41. package/components/progress-bar.json +23 -95
  42. package/components/progress-circle.json +12 -42
  43. package/components/radio-button.json +14 -67
  44. package/components/radio-group.json +28 -125
  45. package/components/rating.json +9 -38
  46. package/components/search-field.json +34 -119
  47. package/components/segmented-control.json +21 -63
  48. package/components/select-box.json +29 -96
  49. package/components/side-navigation.json +28 -69
  50. package/components/slider.json +39 -148
  51. package/components/standard-dialog.json +16 -88
  52. package/components/status-light.json +41 -123
  53. package/components/steplist.json +5 -24
  54. package/components/swatch-group.json +19 -55
  55. package/components/swatch.json +24 -79
  56. package/components/switch.json +31 -72
  57. package/components/table.json +26 -73
  58. package/components/tabs.json +22 -39
  59. package/components/tag-field.json +14 -60
  60. package/components/tag-group.json +16 -49
  61. package/components/tag.json +21 -71
  62. package/components/takeover-dialog.json +10 -61
  63. package/components/text-area.json +49 -198
  64. package/components/text-field.json +42 -163
  65. package/components/thumbnail.json +22 -63
  66. package/components/toast.json +29 -50
  67. package/components/tooltip.json +27 -74
  68. package/components/tree-view.json +45 -140
  69. package/guidelines/app-frame-overview.json +18 -10
  70. package/guidelines/applying-the-type-system.json +14 -10
  71. package/guidelines/attention-hierarchy.json +3 -3
  72. package/guidelines/background-layers.json +41 -5
  73. package/guidelines/bi-directionality.json +8 -8
  74. package/guidelines/border-width.json +17 -1
  75. package/guidelines/brand.json +6 -6
  76. package/guidelines/colors.json +24 -12
  77. package/guidelines/component-spacing.json +14 -2
  78. package/guidelines/contact-us.json +1 -1
  79. package/guidelines/content-area-browsing-context.json +11 -11
  80. package/guidelines/content-design-grammar-and-mechanics.json +241 -0
  81. package/guidelines/content-design-voice-and-tone.json +37 -0
  82. package/guidelines/content-grammar-and-mechanics.json +252 -0
  83. package/guidelines/content-language-and-inclusivity-writing-about-people.json +103 -0
  84. package/guidelines/content-language-and-inclusivity-writing-with-visuals.json +70 -0
  85. package/guidelines/content-voice-and-tone.json +47 -0
  86. package/guidelines/creating-bluelines-browsing-context.json +9 -9
  87. package/guidelines/design-tokens.json +50 -14
  88. package/guidelines/drop-shadow.json +13 -1
  89. package/guidelines/grays.json +5 -5
  90. package/guidelines/header-browsing-context.json +7 -4
  91. package/guidelines/icon-fundamentals.json +4 -4
  92. package/guidelines/illustration.json +21 -25
  93. package/guidelines/in-product-word-list.json +1 -1
  94. package/guidelines/inclusive-design.json +14 -6
  95. package/guidelines/inclusive-ux-writing.json +1 -1
  96. package/guidelines/internationalization.json +13 -13
  97. package/guidelines/language-and-inclusivity-writing-about-people.json +85 -0
  98. package/guidelines/language-and-inclusivity-writing-with-visuals.json +61 -0
  99. package/guidelines/layout-and-structure-containers.json +7 -7
  100. package/guidelines/layout-and-structure-spacing-overview.json +66 -0
  101. package/guidelines/layout-spacing.json +4 -4
  102. package/guidelines/manifest.json +126 -38
  103. package/guidelines/motion.json +5 -5
  104. package/guidelines/object-styles-overview.json +2 -2
  105. package/guidelines/principles.json +7 -8
  106. package/guidelines/rounding.json +15 -3
  107. package/guidelines/side-navigation-browsing-context.json +16 -13
  108. package/guidelines/spacing-overview.json +7 -7
  109. package/guidelines/states.json +4 -4
  110. package/guidelines/support.json +113 -0
  111. package/guidelines/typography-overview.json +7 -3
  112. package/guidelines/typography-system.json +56 -16
  113. package/guidelines/using-icons.json +14 -14
  114. package/guidelines/visual-language-containers.json +7 -7
  115. package/guidelines/whats-new.json +32 -0
  116. package/guidelines/writing-for-errors.json +21 -21
  117. package/guidelines/writing-for-onboarding.json +17 -17
  118. package/guidelines/writing-for-readability.json +4 -4
  119. package/package.json +1 -1
@@ -16,79 +16,64 @@
16
16
  },
17
17
  {
18
18
  "type": "guideline",
19
- "content": "Tables organize and display structured information in rows and columns. They support scanning, sorting, comparing, and interacting with large amounts of data. Use when multiple data points need to be reviewed or acted on in one place."
19
+ "content": "Standard vs. quiet.\n\nUse a standard table when a table is the main focus of an experience. Quiet tables are for when a table is meant to be supplementary, subtle, or lightweight."
20
20
  },
21
21
  {
22
22
  "type": "guideline",
23
- "content": "Tables come in three sizes: small, medium, and large. Size affects the overall scale, including font size and spacing. Medium is the default. Use large for high-visibility tables or when readability is critical. Use small in constrained spaces or when the table is secondary to other content."
24
- },
25
- {
26
- "type": "guideline",
27
- "content": "If true, the table header is hidden."
28
- },
29
- {
30
- "type": "guideline",
31
- "content": "Configuration for the table header row."
32
- },
33
- {
34
- "type": "guideline",
35
- "content": "Tables come in three densities: compact, regular, and spacious. Density controls vertical spacing while keeping font sizes consistent—compact rows have tighter padding, spacious rows have more breathing room. Regular is the default for most use cases. Use compact when fitting more data in a limited viewport is critical (e.g., dashboards, data-heavy admin panels). Use spacious when scannability and visual comfort are priorities (e.g., transaction histories, settings tables with minimal data)."
23
+ "content": "Column dividers help organize table content and aid users in parsing related data. You can apply dividers selectively to group related columns—for example, separating user information from action columns, or grouping metadata fields together. Use dividers sparingly to avoid visual clutter."
36
24
  },
37
25
  {
38
26
  "type": "guideline",
39
- "content": "Use a standard table when a table is the main focus of an experience. Quiet tables are for when a table is meant to be supplementary, subtle, or lightweight."
27
+ "content": "Selection.\n\nBy default, rows are not selectable. Enable selection with selectionMode=single or selectionMode=multiple. Checkbox selection (default): Checkboxes appear on the left. Clicking toggles selection. Use for bulk actions or when selection should be explicit. Highlight selection: No checkboxes—rows show a highlighted background when selected. Clicking a row selects it (use modifier keys for multi-select). Use when rows also need to support navigation or actions via onAction or href, or when a cleaner appearance is needed. Navigation: Use onAction for row actions or href for links. In highlight selection style, double-click performs actions while single-click selects, allowing both behaviors."
40
28
  },
41
29
  {
42
30
  "type": "guideline",
43
- "content": "If true, table columns can be sorted."
31
+ "content": "Hover state.\n\nAll tables have a hover state regardless of if actions or selections can be made. This aids the user in viewing content in a single row."
44
32
  },
45
33
  {
46
34
  "type": "guideline",
47
- "content": "An array of column definitions for the table."
35
+ "content": "Start-align textual data.\n\nSimilar to a paragraph of text, textual data should be start-aligned within a table (left-aligned in LTR languages, right-aligned in RTL languages). Never use center alignment."
48
36
  },
49
37
  {
50
38
  "type": "guideline",
51
- "content": "An array of row data for the table."
39
+ "content": "Right align numerical data.\n\nNumerical data should generally be right-aligned for ease of scanning and comparing. This alignment typically does NOT reverse in RTL languages because: Numbers are written left-to-right even in RTL languages (e.g., Arabic numerals) Right-alignment ensures decimal places and digits line up vertically for comparison Exception: Use start-alignment (left in LTR, right in RTL) when numbers are arbitrary identifiers, known as \"nominal numbers,\" which can't be compared or combined arithmetically (e.g., ZIP codes, IP addresses, phone numbers). These behave like text. Column headers follow the alignment of their data."
52
40
  },
53
41
  {
54
42
  "type": "guideline",
55
- "content": "Column dividers help organize table content and aid users in parsing related data. You can apply dividers selectively to group related columns—for example, separating user information from action columns, or grouping metadata fields together. Use dividers sparingly to avoid visual clutter."
43
+ "content": "Use tabular numbers for numerical data.\n\nWhen users need to compare numerical values, use tabular (monospaced) and lining (not old style) numbers to make it easier. These features are supported by Adobe Clean via the OpenType panel in Illustrator or via the CSS font feature settings."
56
44
  },
57
45
  {
58
46
  "type": "guideline",
59
- "content": "All tables have a hover state regardless of if actions or selections can be made. This aids the user in viewing content in a single row."
47
+ "content": "Respect vertical alignment.\n\nAll content should be centered vertically within the row to offer the right visual balance."
60
48
  },
61
49
  {
62
- "type": "guideline",
63
- "content": "Similar to a paragraph of text, textual data should be start-aligned within a table (left-aligned in LTR languages, right-aligned in RTL languages). Never use center alignment."
50
+ "type": "do-dont",
51
+ "content": "Don't use zebra stripes",
52
+ "dont": "Tables use row dividers, hover states, and selection highlighting to help users track data. Zebra striping adds visual noise without improving usability."
64
53
  },
65
54
  {
66
55
  "type": "guideline",
67
- "content": "Numerical data should generally be right-aligned for ease of scanning and comparing. This alignment typically does NOT reverse in RTL languages because:"
56
+ "content": "Use column dividers sparingly.\n\nColumn dividers are optional decorations that can help organize table content and create groups of data. Only use these when necessary, and don't add them to every column."
68
57
  },
69
58
  {
70
59
  "type": "guideline",
71
- "content": "Exception: Use start-alignment (left in LTR, right in RTL) when numbers are arbitrary identifiers, known as \"nominal numbers,\" which can't be compared or combined arithmetically (e.g., ZIP codes, IP addresses, phone numbers). These behave like text."
60
+ "content": "Use an en dash (–) for missing values.\n\nWhen there are gaps in the data, use an en dash (–) to represent null or not applicable (N/A) values."
72
61
  },
73
62
  {
74
63
  "type": "guideline",
75
- "content": "Column headers follow the alignment of their data."
64
+ "content": "RTL.\n\nIn right‑to‑left languages, the table layout is mirrored. The columns run from right to left, and the text alignment within each column is reversed. Keep in mind that some content, such as file extensions and email addresses, does not change direction or translate."
76
65
  },
77
66
  {
78
67
  "type": "guideline",
79
- "content": "All content should be centered vertically within the row to offer the right visual balance."
68
+ "content": "Keyboard interactions.\n\nKey Interaction TabTabbing into an item that has a tooltip associated with it (e.g., an icon) shows the tooltip.EscHides the tooltip."
80
69
  },
81
70
  {
82
71
  "type": "guideline",
83
- "content": "Tables use row dividers, hover states, and selection highlighting to help users track data. Zebra striping adds visual noise without improving usability."
72
+ "content": "Cursor guidelines.\n\nCursor Description PointerIf the trigger is a button or link, or a focus-only element (like an info icon that shows a tooltip on hover), use the pointer cursor.Default (Arrow)If the trigger is an icon that is not clickable, use the default cursor.PointerIf the tooltip has a link, use the pointer cursor when interacting with the link."
84
73
  },
85
74
  {
86
75
  "type": "guideline",
87
- "content": "Column dividers are optional decorations that can help organize table content and create groups of data. Only use these when necessary, and don't add them to every column."
88
- },
89
- {
90
- "type": "guideline",
91
- "content": "When there are gaps in the data, use an en dash (–) to represent null or not applicable (N/A) values."
76
+ "content": "WCAG 2.2 compliance.\n\nAny criterion not mention in the below table are not applicable to this component or are resolved with underlying requirements, engineering, and styles of the entire system. 1. Perceivable Requirement Criterion Level Compliance Non-text content1.1.1ANon‑text elements—such as icons used in tooltips and icons that trigger tooltips—must provide a text alternative that communicates the control’s purpose. All controls, especially icon‑only controls, need an accessible name (for example, via a title, aria‑label, or associated text) so screen readers can announce their function.Info and relationships, Identify purpose1.3.1, 1.3.6A, AAATooltips should be understandable by assistive technologies like screen readers. This means using the proper semantic HTML or ARIA role should be utilized.Use of color1.4.1AColor is never used as the sole way to convey meaning in tooltips. Tooltips use color to reinforce their meaning, but every tooltip also includes a clear text label that communicates purpose.Text contrast minimums1.4.3AALarge text has a contrast ratio of at least 3:1, and small text has a contrast ratio of at least 4.5:1. Incidental text such as disabled, hidden, or decorative text has no contrast requirement.Resize text1.4.4AATooltips should be built in such a way that they can be resized without assistive technology up to 200%.Visual presentation1.4.8AAAThe width of text blocks is no more than 80 characters (40 for CJK languages), and text is never justified.Non-text contrast1.4.11AAThe visual presentation of icons and various states have a contrast ratio of at least 3:1.Text spacing1.4.12AALine height of text is at least 1.5x the font size in wrapped tooltips. 2. Operable RequirementCriterionLevel Compliance Keyboard 2.1.1, 2.1.3 A, AAAAll functionality of the component is operable through a keyboard without specific timing for keystrokes.Keyboard traps 2.1.2 AFocus can be moved away from the component using only a keyboard.Seizures and physical reactions 2.3.1, 2.3.2, 2.3.3 A, AAA, AAAThere is no flashing content or unnecessary motion or animation in this component.Focus order 2.4.3 ANavigation sequences receive focus in an order that preserves meaning and operability.Focus visible 2.4.7 AAKeyboard states use an indicator that is visible with at least 3:1 contrast."
92
77
  }
93
78
  ],
94
79
  "options": {
@@ -96,17 +81,7 @@
96
81
  "type": "string",
97
82
  "default": "m",
98
83
  "description": "Controls the density of table rows.",
99
- "values": [
100
- {
101
- "value": "s"
102
- },
103
- {
104
- "value": "m"
105
- },
106
- {
107
- "value": "l"
108
- }
109
- ]
84
+ "values": [{ "value": "s" }, { "value": "m" }, { "value": "l" }]
110
85
  },
111
86
  "hideHeader": {
112
87
  "type": "boolean",
@@ -135,15 +110,9 @@
135
110
  "type": "string",
136
111
  "default": "regular",
137
112
  "values": [
138
- {
139
- "value": "compact"
140
- },
141
- {
142
- "value": "regular"
143
- },
144
- {
145
- "value": "spacious"
146
- }
113
+ { "value": "compact" },
114
+ { "value": "regular" },
115
+ { "value": "spacious" }
147
116
  ]
148
117
  },
149
118
  "isQuiet": {
@@ -240,34 +209,18 @@
240
209
  "name": "header-row-checkbox",
241
210
  "description": "Select-all checkbox within the column header row."
242
211
  },
243
- {
244
- "name": "section-header"
245
- }
212
+ { "name": "section-header" }
246
213
  ],
247
- "lifecycle": {
248
- "introduced": "1.0.0-draft"
249
- },
214
+ "lifecycle": { "introduced": "1.0.0-draft" },
250
215
  "accessibility": {
251
216
  "role": "grid",
252
217
  "intents": ["select", "navigate"],
253
218
  "focusable": true,
254
219
  "keyboardIntents": ["navigate-items", "activate", "select-all"],
255
220
  "wcag": [
256
- {
257
- "criterion": "1.3.1",
258
- "level": "A",
259
- "title": "Info and Relationships"
260
- },
261
- {
262
- "criterion": "2.1.1",
263
- "level": "A",
264
- "title": "Keyboard"
265
- },
266
- {
267
- "criterion": "4.1.2",
268
- "level": "A",
269
- "title": "Name, Role, Value"
270
- }
221
+ { "criterion": "1.3.1", "level": "A", "title": "Info and Relationships" },
222
+ { "criterion": "2.1.1", "level": "A", "title": "Keyboard" },
223
+ { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
271
224
  ]
272
225
  }
273
226
  }
@@ -16,61 +16,59 @@
16
16
  },
17
17
  {
18
18
  "type": "guideline",
19
- "content": "Tabs organize related content into multiple sections. They allow navigation between views while keeping the content grouped under a single context. Use when content can be divided logically into categories within the same view."
19
+ "content": "Animation.\n\nWhen a user selects a tab item, the selection indicator slides along the base to the newly selected tab. The text and icon colors of both tabs fade during the transition. The tab view changes immediately upon selection."
20
20
  },
21
21
  {
22
22
  "type": "guideline",
23
- "content": "Tabs can be horizontal or vertical. By default, tabs are horizontal and should be used when horizontal space is limited."
23
+ "content": "Tab overflow.\n\nWhen there are too many tabs to fit horizontally across the viewport, display the tabs component as a quiet picker. When appropriate, you can also use alternative overflow methods such as horizontal scrolling."
24
24
  },
25
25
  {
26
26
  "type": "guideline",
27
- "content": "Use vertical tabs when horizontal space is more generous or when the list of sections is too long for a horizontal layout. Vertical tabs can also serve as anchor links, providing shortcuts to sections on a single page. In this case, tab items link to on-page anchors rather than opening a new tab view."
27
+ "content": "Too many tabs.\n\nWhen there are too many tabs to fit horizontally across the viewport, you can either allow horizontal scrolling or place all tab items in a quiet picker. Do not truncate multiple tab items just to make them fit horizontally."
28
+ },
29
+ {
30
+ "type": "do-dont",
31
+ "content": "Don't use tabs for varying levels of importance",
32
+ "dont": "Use tabs to organize sections of equal importance. Groups of content under each tab item should not be of different natures. Don't use tabs to replace a flow; use pagination components instead."
28
33
  },
29
34
  {
30
35
  "type": "guideline",
31
- "content": "When a user selects a tab item, the selection indicator slides along the base to the newly selected tab. The text and icon colors of both tabs fade during the transition. The tab view changes immediately upon selection."
36
+ "content": "Nested tabs.\n\nAvoid using multiple levels of tabs. Instead, consider other organizational patterns such as side navigation, accordions or collapsible panels. Nesting tabs is acceptable only when there is a clear separation between the two tab experiences or when different orientations are used. Do not compromise hierarchy by using the same tab variations or orientations."
32
37
  },
33
38
  {
34
39
  "type": "guideline",
35
- "content": "When there are too many tabs to fit horizontally across the viewport, display the tabs component as a quiet picker. When appropriate, you can also use alternative overflow methods such as horizontal scrolling."
40
+ "content": "Use icons consistently.\n\nDon't mix the use of icons in tabs. Navigation controls require a clear spacial relationship to one another, and mixing the use of icons can dramatically impact the visual balance and presence for each tab item. Keep in mind that if one tab item has an icon, then they all should have an icon."
36
41
  },
37
42
  {
38
43
  "type": "guideline",
39
- "content": "When there are too many tabs to fit horizontally across the viewport, you can either allow horizontal scrolling or place all tab items in a quiet picker. Do not truncate multiple tab items just to make them fit horizontally."
44
+ "content": "Use tooltips for icon only tabs.\n\nIt can often be hard to identify the meaning of icon-only tabs. An icon-only tab should always show a tooltip displaying the label on hover."
40
45
  },
41
46
  {
42
47
  "type": "guideline",
43
- "content": "Use tabs to organize sections of equal importance. Groups of content under each tab item should not be of different natures. Don't use tabs to replace a flow; use pagination components instead."
48
+ "content": "RTL horizontal tabs.\n\nFor RTL (right-to-left) languages, the layout of the horizontal tabs is mirrored. The tabs are right-aligned and their order is reverse."
44
49
  },
45
50
  {
46
51
  "type": "guideline",
47
- "content": "Avoid using multiple levels of tabs. Instead, consider other organizational patterns such as side navigation, accordions or collapsible panels. Nesting tabs is acceptable only when there is a clear separation between the two tab experiences or when different orientations are used."
52
+ "content": "RTL vertical tabs.\n\nFor RTL (right-to-left) languages, the layout of the vertical tabs is mirrored. The divider and selection indicator should be placed on the right, as they are meant to visually anchor the text labels."
48
53
  },
49
54
  {
50
55
  "type": "guideline",
51
- "content": "Do not compromise hierarchy by using the same tab variations or orientations."
56
+ "content": "Keyboard interactions.\n\nThere are two possible behaviors for manipulating tabs with the keyboard: manual or automatic activation. Typically, manual activation of tabs is only necessary when content cannot be displayed instantly (i.e., not all the panel content is present in the DOM.) For additional guidance, see Deciding When to Make Selection Automatically Follow Focus. Option 1: Manual activation Key Interaction TabMoves focus into the tabs component and places focus on the selected tab item. If the tabs component is already in focus, moves focus to the next element in the page tab sequence.Left ArrowMoves focus to the previous tab item. If focus is on the first tab item, moves focus to the last tab item.Right ArrowMoves focus to the next tab item. If focus is on the last tab item, moves focus to the first tab item.Space or EnterActivates the tab item in focus.Home (optional)Moves focus to the first tab item.End (optional)Moves focus to the last tab item.Delete (optional)When deletion is allowed, Delete closes the currently activated tab item. If any tab items remain, moves focus to the tab item following one that was closed. Option 2: Automatic activation Key Interaction TabMoves focus into the tabs component and places focus on the selected tab item. If the tabs component is already in focus, moves focus to the next element in the page tab sequence.Left ArrowMoves focus to the previous tab item and automatically activates it. If focus is on the first tab item, moves focus to the last tab item.Right ArrowMoves focus to the next tab item and automatically activates it. If focus is on the last tab item, moves focus to the first tab item.Home (optional)Moves focus to the first tab item and automatically activates it.End (optional)Moves focus to the last tab item and automatically activates it.Delete (optional)When deletion is allowed, Delete closes the currently activated tab item. If any tab items remain, moves focus to and activates the tab item following one that was closed."
52
57
  },
53
58
  {
54
59
  "type": "guideline",
55
- "content": "Don’t mix the use of icons in tabs. Navigation controls require a clear spacial relationship to one another, and mixing the use of icons can dramatically impact the visual balance and presence for each tab item. Keep in mind that if one tab item has an icon, then they all should have an icon."
60
+ "content": "Cursor guidelines.\n\nCursor Usage PointerUse the pointer cursor for interactive elements including tabs."
56
61
  },
57
62
  {
58
63
  "type": "guideline",
59
- "content": "It can often be hard to identify the meaning of icon-only tabs. An icon-only tab should always show a tooltip displaying the label on hover."
64
+ "content": "WCAG 2.2 compliance.\n\nAny criterion not mention in the below table are not applicable to this component or are resolved with underlying requirements, engineering, and styles of the entire system. 1. Perceivable Requirement Criterion Level Compliance Non-text content 1.1.1 ANon-text elements, such as icons used in tabs, must provide a text alternative that communicates the tab's purpose. All tabs, especially icon-only tabs, need an accessible name (for example, via a title, aria-label, or associated text) so screen readers can announce their function.Info and relationships, Identify purpose 1.3.1, 1.3.6 A, AAATabs should be understandable by assistive technologies like screen readers. This means the proper semantic HTML or ARIA role should be utilized.Orientation 1.3.4 AATabs are available in both vertical and horizontal orientations.Use of color 1.4.1 AColor is not used as a means to convey information or distinguish elements.Contrast 1.4.3 AAThe visual presentation of text has a contrast ratio of at least 4.5:1.Resize text 1.4.4 AATabs should be built in such a way that they can be resized without assistive technology up to 200%.Visual presentation 1.4.8 AAAThe width of text blocks is no more than 80 characters (40 for CJK languages), and text is never justified.Non-text contrast 1.4.11 AAThe visual presentation of icons and various states have a contrast ratio of at least 3:1.Text spacing 1.4.12 AALine height of text is at least 1.5x the font size. 2. Operable RequirementCriterionLevel Compliance Keyboard 2.1.1, 2.1.3 A, AAAAll functionality of the component is operable through a keyboard without specific timing for keystrokes.Keyboard traps 2.1.2 AFocus can be moved away from the component using only a keyboard.Seizures and physical reactions 2.3.1, 2.3.2, 2.3.3 A, AAA, AAAThere is no flashing content or unnecessary motion or animation in this component.Focus order 2.4.3 ANavigation sequences receive focus in an order that preserves meaning and operability.Focus visible 2.4.7 AAKeyboard states use an indicator that is visible with at least 3:1 contrast."
60
65
  }
61
66
  ],
62
67
  "options": {
63
68
  "orientation": {
64
69
  "type": "string",
65
70
  "default": "horizontal",
66
- "values": [
67
- {
68
- "value": "horizontal"
69
- },
70
- {
71
- "value": "vertical"
72
- }
73
- ]
71
+ "values": [{ "value": "horizontal" }, { "value": "vertical" }]
74
72
  },
75
73
  "items": {
76
74
  "type": "array",
@@ -109,18 +107,13 @@
109
107
  "default": false,
110
108
  "description": "This overrides density and is only applicable to horizontal tabs."
111
109
  },
112
- "isEmphasized": {
113
- "type": "boolean",
114
- "default": false
115
- },
110
+ "isEmphasized": { "type": "boolean", "default": false },
116
111
  "alignment": {
117
112
  "type": "string",
118
113
  "enum": ["start", "center"],
119
114
  "default": "start"
120
115
  },
121
- "selectedItem": {
122
- "description": "(list of available items)"
123
- },
116
+ "selectedItem": { "description": "(list of available items)" },
124
117
  "keyboardActivation": {
125
118
  "type": "string",
126
119
  "enum": ["manual", "automatic"],
@@ -130,9 +123,7 @@
130
123
  }
131
124
  }
132
125
  },
133
- "lifecycle": {
134
- "introduced": "1.0.0-draft"
135
- },
126
+ "lifecycle": { "introduced": "1.0.0-draft" },
136
127
  "tokenBindings": [
137
128
  {
138
129
  "token": "tab-item-to-tab-item-compact-horizontal-medium",
@@ -148,16 +139,8 @@
148
139
  "focusable": true,
149
140
  "keyboardIntents": ["navigate-items"],
150
141
  "wcag": [
151
- {
152
- "criterion": "2.1.1",
153
- "level": "A",
154
- "title": "Keyboard"
155
- },
156
- {
157
- "criterion": "4.1.2",
158
- "level": "A",
159
- "title": "Name, Role, Value"
160
- }
142
+ { "criterion": "2.1.1", "level": "A", "title": "Keyboard" },
143
+ { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
161
144
  ]
162
145
  }
163
146
  }
@@ -67,81 +67,35 @@
67
67
  "size": {
68
68
  "type": "string",
69
69
  "default": "m",
70
- "values": [
71
- {
72
- "value": "s"
73
- },
74
- {
75
- "value": "m"
76
- },
77
- {
78
- "value": "l"
79
- }
80
- ]
70
+ "values": [{ "value": "s" }, { "value": "m" }, { "value": "l" }]
81
71
  },
82
72
  "style": {
83
73
  "type": "string",
84
74
  "default": "keyword",
85
75
  "values": [
86
- {
87
- "value": "keyword"
88
- },
89
- {
90
- "value": "icon"
91
- },
92
- {
93
- "value": "thumbnail"
94
- },
95
- {
96
- "value": "avatar"
97
- }
76
+ { "value": "keyword" },
77
+ { "value": "icon" },
78
+ { "value": "thumbnail" },
79
+ { "value": "avatar" }
98
80
  ]
99
81
  },
100
- "isDisabled": {
101
- "type": "boolean",
102
- "default": false
103
- },
104
- "hideLabel": {
105
- "type": "boolean",
106
- "default": false
107
- }
82
+ "isDisabled": { "type": "boolean", "default": false },
83
+ "hideLabel": { "type": "boolean", "default": false }
108
84
  },
109
85
  "states": [
110
- {
111
- "name": "hover",
112
- "trigger": "interaction"
113
- },
114
- {
115
- "name": "focus-+-hover",
116
- "trigger": "prop"
117
- },
118
- {
119
- "name": "focus-+-not-hover",
120
- "trigger": "prop"
121
- },
122
- {
123
- "name": "keyboard-focus",
124
- "trigger": "interaction"
125
- }
86
+ { "name": "hover", "trigger": "interaction" },
87
+ { "name": "focus-+-hover", "trigger": "prop" },
88
+ { "name": "focus-+-not-hover", "trigger": "prop" },
89
+ { "name": "keyboard-focus", "trigger": "interaction" }
126
90
  ],
127
- "lifecycle": {
128
- "introduced": "1.0.0-draft"
129
- },
91
+ "lifecycle": { "introduced": "1.0.0-draft" },
130
92
  "accessibility": {
131
93
  "intents": ["input", "select"],
132
94
  "focusable": true,
133
95
  "keyboardIntents": ["navigate-items", "activate"],
134
96
  "wcag": [
135
- {
136
- "criterion": "1.3.1",
137
- "level": "A",
138
- "title": "Info and Relationships"
139
- },
140
- {
141
- "criterion": "4.1.2",
142
- "level": "A",
143
- "title": "Name, Role, Value"
144
- }
97
+ { "criterion": "1.3.1", "level": "A", "title": "Info and Relationships" },
98
+ { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
145
99
  ]
146
100
  }
147
101
  }
@@ -16,96 +16,63 @@
16
16
  },
17
17
  {
18
18
  "type": "guideline",
19
- "content": "Tag groups organize multiple tags into a single visual group. They’re used to categorize content like keywords or names that describe an item or search query. Tags within the group can be added, removed, or styled to reflect different types of content."
19
+ "content": "Tag group overflow.\n\nWhen horizontal space is limited in a tag group, the individual tags wrap to form another line."
20
20
  },
21
21
  {
22
22
  "type": "guideline",
23
- "content": "Tag groups come in three different sizes: small, medium, and large. The medium size is the default and most frequently used option. Use the other sizes sparingly; they should be used to create a hierarchy of importance within the page."
23
+ "content": "Focus between tags.\n\nIf the order of tags within the group matters, the user must be able to click or use keyboard focus between tags to add more."
24
24
  },
25
25
  {
26
26
  "type": "guideline",
27
- "content": "Labels can be placed either on top or on the side of a group of tags. Top labels are the default and are recommended because they work better with long copy, localization, and responsive layouts. Side labels are most useful when vertical space is limited."
27
+ "content": "Allow bulk actions.\n\nIn some instances, it's possible to add an action next to a group of tags to provide a way to easily act on the entire group at once. Reveal the action only when more than one tag is displayed."
28
28
  },
29
29
  {
30
- "type": "guideline",
31
- "content": "The label of the tag group can be hidden if the context for the tags is sufficient without the title — for example, when the page title or section title applies to the group of tags."
32
- },
33
- {
34
- "type": "guideline",
35
- "content": "Define an action label to include a link-style button to perform an action on the entire group of tags. This button always appears at the end of the tag group."
30
+ "type": "do-dont",
31
+ "content": "Avoid disabling a large group of tags",
32
+ "dont": "In cases where users cannot interact with a large group of tags, consider hiding the group and its broader construct rather than disabling all the individual tags."
36
33
  },
37
34
  {
38
35
  "type": "guideline",
39
- "content": "When horizontal space is limited in a tag group, the individual tags wrap to form another line."
36
+ "content": "RTL.\n\nFor RTL (right-to-left) languages, the group of tags is mirrored. The first tag will appear on the left instead of the right and flow from there."
40
37
  },
41
38
  {
42
39
  "type": "guideline",
43
- "content": "If the order of tags within the group matters, the user must be able to click or use keyboard focus between tags to add more."
40
+ "content": "Keyboard interactions.\n\nKey Interaction TabTabbing into a group of tags places the focus on the first tag (only one tag receives the keyboard focus at a time).Arrow keysMoves focus through the group of tags.Page Up or Page DownMoves focus to the previous or next tag in the group (last becomes first, and first becomes last).Home or EndMoves focus to the first or last tag in the group.Backspace or DeleteRemoves the tag in focus from the group.SpaceIf the tag is selectable, the space bar will toggle selection.Ctrl / Cmd + ASelects all tags."
44
41
  },
45
42
  {
46
43
  "type": "guideline",
47
- "content": "In some instances, it's possible to add an action next to a group of tags to provide a way to easily act on the entire group at once. Reveal the action only when more than one tag is displayed."
44
+ "content": "Cursor guidelines.\n\nCursor Description Default (Arrow)Use the default cursor for non-interactive tags.PointerUse the pointer cursor for interactive tags, such as tags that are removable or can be used to filter content.Grab handUse the grab hand cursor when the order of tags can be rearranged.Grab fistUse the grab fist cursor when holding a tag."
48
45
  },
49
46
  {
50
47
  "type": "guideline",
51
- "content": "In cases where users cannot interact with a large group of tags, consider hiding the group and its broader construct rather than disabling all the individual tags."
48
+ "content": "WCAG 2.2 compliance.\n\nAny criterion not mention in the below table are not applicable to this component or are resolved with underlying requirements, engineering, and styles of the entire system. 1. Perceivable Requirement Criterion Level Compliance Non-text content 1.1.1 ANon‑text elements—such as icons used in tags—must provide a text alternative that communicates the control’s purpose. All controls, especially icon‑only controls, need an accessible name (for example, via a title, aria‑label, or associated text) so screen readers can announce their function.Info and relationships, Identify purpose 1.3.1, 1.3.6 A, AAATags should be understandable by assistive technologies like screen readers. This means the proper semantic HTML or ARIA role should be utilized.Text contrast 1.4.3 AALarge text has a contrast ratio of at least 3:1, and small text has a contrast ratio of at least 4.5:1. Incidental text such as disabled, hidden, or decorative text has no contrast requirement.Resize text 1.4.4 AATag groups should be built in such a way that they can be resized without assistive technology up to 200%.Non-text contrast 1.4.11 AAThe visual presentation of icons and various states have a contrast ratio of at least 3:1.Text spacing 1.4.12 AALine height of text is at least 1.5x the font size when wrapped. 2. Operable RequirementCriterionLevel Compliance Keyboard 2.1.1, 2.1.3 A, AAAAll functionality of the component is operable through a keyboard without specific timing for keystrokes.Keyboard traps 2.1.2 AFocus can be moved away from the component using only a keyboard.Seizures and physical reactions 2.3.1, 2.3.2, 2.3.3 A, AAA, AAAThere is no flashing content or unnecessary motion or animation in this component.Focus order 2.4.3 ANavigation sequences receive focus in an order that preserves meaning and operability.Focus visible 2.4.7 AAKeyboard states use an indicator that is visible with at least 3:1 contrast."
52
49
  }
53
50
  ],
54
51
  "options": {
55
52
  "size": {
56
53
  "type": "string",
57
54
  "default": "m",
58
- "values": [
59
- {
60
- "value": "s"
61
- },
62
- {
63
- "value": "m"
64
- },
65
- {
66
- "value": "l"
67
- }
68
- ]
55
+ "values": [{ "value": "s" }, { "value": "m" }, { "value": "l" }]
69
56
  },
70
57
  "labelPosition": {
71
58
  "type": "string",
72
59
  "default": "top",
73
- "values": [
74
- {
75
- "value": "top"
76
- },
77
- {
78
- "value": "side"
79
- }
80
- ]
81
- },
82
- "hideLabel": {
83
- "type": "boolean",
84
- "default": false
60
+ "values": [{ "value": "top" }, { "value": "side" }]
85
61
  },
62
+ "hideLabel": { "type": "boolean", "default": false },
86
63
  "actionLabel": {
87
64
  "type": "string",
88
65
  "description": "If undefined, this button does not appear."
89
66
  }
90
67
  },
91
- "lifecycle": {
92
- "introduced": "1.0.0-draft"
93
- },
68
+ "lifecycle": { "introduced": "1.0.0-draft" },
94
69
  "accessibility": {
95
70
  "intents": ["select"],
96
71
  "focusable": true,
97
72
  "keyboardIntents": ["navigate-items", "activate"],
98
73
  "wcag": [
99
- {
100
- "criterion": "1.3.1",
101
- "level": "A",
102
- "title": "Info and Relationships"
103
- },
104
- {
105
- "criterion": "4.1.2",
106
- "level": "A",
107
- "title": "Name, Role, Value"
108
- }
74
+ { "criterion": "1.3.1", "level": "A", "title": "Info and Relationships" },
75
+ { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
109
76
  ]
110
77
  }
111
78
  }