@adobe/spectrum-design-data 3.3.0-beta.1 → 3.3.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.
Files changed (135) hide show
  1. package/components/accordion.json +67 -15
  2. package/components/action-bar.json +30 -9
  3. package/components/action-button.json +92 -39
  4. package/components/action-group.json +137 -18
  5. package/components/alert-banner.json +27 -8
  6. package/components/alert-dialog.json +55 -34
  7. package/components/avatar-group.json +35 -9
  8. package/components/avatar.json +105 -29
  9. package/components/badge.json +163 -56
  10. package/components/breadcrumbs.json +107 -26
  11. package/components/button-group.json +63 -19
  12. package/components/button.json +105 -61
  13. package/components/calendar.json +74 -8
  14. package/components/card.json +13 -0
  15. package/components/cards.json +46 -31
  16. package/components/checkbox-group.json +85 -16
  17. package/components/checkbox.json +97 -27
  18. package/components/close-button.json +75 -20
  19. package/components/coach-indicator.json +44 -14
  20. package/components/coach-mark.json +26 -8
  21. package/components/color-area.json +100 -20
  22. package/components/color-handle.json +46 -25
  23. package/components/color-loupe.json +14 -2
  24. package/components/color-slider.json +129 -26
  25. package/components/color-wheel.json +91 -17
  26. package/components/combo-box.json +189 -50
  27. package/components/contextual-help.json +126 -80
  28. package/components/date-field.json +7 -0
  29. package/components/date-picker.json +127 -24
  30. package/components/divider.json +38 -12
  31. package/components/drop-zone.json +37 -18
  32. package/components/field-label.json +62 -21
  33. package/components/heading.json +7 -0
  34. package/components/help-text.json +53 -16
  35. package/components/illustrated-message.json +85 -21
  36. package/components/in-line-alert.json +53 -13
  37. package/components/link.json +63 -24
  38. package/components/list-view.json +80 -15
  39. package/components/menu.json +181 -45
  40. package/components/meter.json +78 -24
  41. package/components/number-field.json +175 -34
  42. package/components/picker.json +188 -42
  43. package/components/popover.json +126 -37
  44. package/components/progress-bar.json +108 -23
  45. package/components/progress-circle.json +55 -12
  46. package/components/radio-button.json +67 -14
  47. package/components/radio-group.json +132 -28
  48. package/components/rating.json +38 -9
  49. package/components/search-field.json +126 -34
  50. package/components/segmented-control.json +70 -21
  51. package/components/select-box.json +103 -29
  52. package/components/side-navigation.json +69 -28
  53. package/components/slider.json +155 -39
  54. package/components/standard-dialog.json +88 -16
  55. package/components/status-light.json +136 -41
  56. package/components/steplist.json +24 -5
  57. package/components/swatch-group.json +55 -19
  58. package/components/swatch.json +79 -24
  59. package/components/switch.json +79 -31
  60. package/components/table.json +73 -26
  61. package/components/tabs.json +52 -22
  62. package/components/tag-field.json +60 -14
  63. package/components/tag-group.json +56 -16
  64. package/components/tag.json +78 -21
  65. package/components/takeover-dialog.json +61 -10
  66. package/components/text-area.json +205 -49
  67. package/components/text-field.json +170 -42
  68. package/components/thumbnail.json +63 -22
  69. package/components/time-field.json +7 -0
  70. package/components/toast.json +50 -29
  71. package/components/tooltip.json +87 -27
  72. package/components/tree-view.json +147 -45
  73. package/components/user-card.json +7 -0
  74. package/guidelines/app-frame-content-area.json +81 -0
  75. package/guidelines/app-frame-creating-bluelines.json +58 -0
  76. package/guidelines/app-frame-header.json +72 -0
  77. package/guidelines/app-frame-overview.json +50 -44
  78. package/guidelines/app-frame-side-navigation.json +138 -0
  79. package/guidelines/attention-hierarchy.json +21 -12
  80. package/guidelines/background-layers.json +10 -44
  81. package/guidelines/brand.json +10 -30
  82. package/guidelines/colors.json +17 -35
  83. package/guidelines/containers.json +62 -0
  84. package/guidelines/developer-overview.json +9 -25
  85. package/guidelines/faqs.json +9 -96
  86. package/guidelines/fonts.json +14 -29
  87. package/guidelines/grays.json +44 -17
  88. package/guidelines/icon-fundamentals.json +18 -7
  89. package/guidelines/illustrations.json +111 -0
  90. package/guidelines/introduction.json +2 -2
  91. package/guidelines/manifest.json +60 -252
  92. package/guidelines/motion.json +16 -17
  93. package/guidelines/object-styles.json +102 -0
  94. package/guidelines/principles.json +2 -2
  95. package/guidelines/resources.json +15 -21
  96. package/guidelines/spacing.json +25 -0
  97. package/guidelines/states.json +10 -15
  98. package/guidelines/typography-fundamentals.json +142 -0
  99. package/guidelines/using-icons.json +44 -33
  100. package/package.json +2 -2
  101. package/registry/platform-implementations.json +30 -0
  102. package/guidelines/ai-resource-guide.json +0 -50
  103. package/guidelines/applying-the-type-system.json +0 -63
  104. package/guidelines/bi-directionality.json +0 -57
  105. package/guidelines/border-width.json +0 -42
  106. package/guidelines/cognitive.json +0 -197
  107. package/guidelines/component-spacing.json +0 -49
  108. package/guidelines/contact-us.json +0 -67
  109. package/guidelines/content-area-browsing-context.json +0 -65
  110. package/guidelines/creating-bluelines-browsing-context.json +0 -91
  111. package/guidelines/design-tokens.json +0 -122
  112. package/guidelines/drop-shadow.json +0 -56
  113. package/guidelines/grammar-and-mechanics.json +0 -252
  114. package/guidelines/header-browsing-context.json +0 -37
  115. package/guidelines/illustration.json +0 -109
  116. package/guidelines/in-product-word-list.json +0 -29
  117. package/guidelines/inclusive-design.json +0 -93
  118. package/guidelines/inclusive-ux-writing.json +0 -30
  119. package/guidelines/internationalization.json +0 -87
  120. package/guidelines/layout-and-structure-containers.json +0 -47
  121. package/guidelines/layout-spacing.json +0 -39
  122. package/guidelines/object-styles-overview.json +0 -17
  123. package/guidelines/rounding.json +0 -61
  124. package/guidelines/side-navigation-browsing-context.json +0 -71
  125. package/guidelines/spacing-overview.json +0 -45
  126. package/guidelines/typography-overview.json +0 -39
  127. package/guidelines/typography-system.json +0 -168
  128. package/guidelines/visual-language-containers.json +0 -36
  129. package/guidelines/voice-and-tone.json +0 -47
  130. package/guidelines/writing-about-people.json +0 -103
  131. package/guidelines/writing-for-errors.json +0 -120
  132. package/guidelines/writing-for-onboarding.json +0 -119
  133. package/guidelines/writing-for-readability.json +0 -54
  134. package/guidelines/writing-with-visuals.json +0 -70
  135. package/registry/platform-extensions/web-components-states.json +0 -58
@@ -9,6 +9,13 @@
9
9
  "category": "navigation",
10
10
  "documentationUrl": "https://spectrum.adobe.com/page/segmented-control/"
11
11
  },
12
+ "implementations": [
13
+ {
14
+ "platform": "web",
15
+ "componentName": "SegmentedControl",
16
+ "package": "@react-spectrum/s2"
17
+ }
18
+ ],
12
19
  "documentBlocks": [
13
20
  {
14
21
  "type": "purpose",
@@ -16,63 +23,81 @@
16
23
  },
17
24
  {
18
25
  "type": "guideline",
19
- "content": "Mutually exclusive items.\n\nSegmented controls have one item selected by default at all times, and are mutually exclusive. This means selecting one item automatically deselects the others."
26
+ "content": "Segmented controls display a group of buttons where only one can be selected at a time. They're ideal for toggling between layouts like a list, grid, or map. Avoid using them for navigation or triggering actions."
27
+ },
28
+ {
29
+ "type": "guideline",
30
+ "content": "Segmented controls should have between two and five items."
31
+ },
32
+ {
33
+ "type": "guideline",
34
+ "content": "The identifier of the currently selected item."
20
35
  },
21
36
  {
22
37
  "type": "guideline",
23
- "content": "Selection.\n\nClicking on a segmented control item immediately performs the view change."
38
+ "content": "By default, segmented controls should include a track. The track style is justified within the parent container. Segmented controls without a track are left-aligned in left-to-right (LTR) languages."
24
39
  },
25
40
  {
26
41
  "type": "guideline",
27
- "content": "Text overflow.\n\nWhen the segmented control item text is too long for the available horizontal space, it truncates at the end. The full text should be revealed with a tooltip on hover."
42
+ "content": "Segmented controls without a track are left aligned in left-to-right languages."
28
43
  },
29
44
  {
30
45
  "type": "guideline",
31
- "content": "Tooltips for hidden labels.\n\nIcon-only or truncated label segmented controls can be hard to identify. They should display a tooltip after a brief hover, showing the name and a keyboard shortcut, if applicable."
46
+ "content": "If true, the control takes up the full width of its container. Only horizontal segmented controls support fluid behavior."
32
47
  },
33
48
  {
34
49
  "type": "guideline",
35
- "content": "Segmented controls are for view switching.\n\nSegmented controls are only meant to be used to change the way you view information on a page. They should not be used for navigating, filtering content, or taking actions."
50
+ "content": "Segmented controls can be either horizontal or vertical. By default, segmented controls are horizontal."
36
51
  },
37
52
  {
38
53
  "type": "guideline",
39
- "content": "Segmented controls vs. similar components.\n\nUse a segmented control when the primary goal is to switch views of content. Tabs are reserved for navigation. Action groups are for triggering actions. Tag groups are for filtering content."
54
+ "content": "Segmented controls have one item selected by default at all times, and are mutually exclusive. This means selecting one item automatically deselects the others."
40
55
  },
41
56
  {
42
57
  "type": "guideline",
43
- "content": "Use icons only when they have a clear meaning.\n\nIt may not make sense in every case to include icons. If the items are too complicated to convey in an icon, don't force it. Keep in mind that if one segmented control has an icon, then they all should have an icon."
58
+ "content": "Clicking on a segmented control item immediately performs the view change."
44
59
  },
45
60
  {
46
61
  "type": "guideline",
47
- "content": "Keep segmented control groups to 5 items or less.\n\nSegmented control groups work best with 2 to 5 items. If your component needs more than 5 items, consider using a dropdown or radio button group instead."
62
+ "content": "When the segmented control item text is too long for the available horizontal space, it truncates at the end. The full text should be revealed with a tooltip on hover."
48
63
  },
49
64
  {
50
- "type": "do-dont",
51
- "content": "Don't use segmented control as actions, to make selections, or to navigate",
52
- "dont": "Segmented control groups are meant for switching views on a page. To navigate to a different page or progressively disclose different content, use tabs instead. To perform actions or make a selection, use action groups."
65
+ "type": "guideline",
66
+ "content": "Icon-only or truncated label segmented controls can be hard to identify. They should display a tooltip after a brief hover, showing the name and a keyboard shortcut, if applicable."
53
67
  },
54
68
  {
55
69
  "type": "guideline",
56
- "content": "RTL.\n\nThe order of the buttons in the segmented control are reversed in RTL languages. If it has icons with text, the icons are placed to the right of the text, and directional icons like arrows or chevrons are flipped horizontally."
70
+ "content": "Segmented controls are only meant to be used to change the way you view information on a page. They should not be used for navigating, filtering content, or taking actions."
57
71
  },
58
72
  {
59
73
  "type": "guideline",
60
- "content": "Keyboard interactions.\n\nKey Interaction TabMoves focus onto or off of the button.Space or EnterExecutes the button action. The focus remains on the button except if the button opens or closes the current container. In this case, the focus moves to the target or back to the caller."
74
+ "content": "Use a segmented control when the primary goal is to switch views of content. Tabs are reserved for navigation. Action groups are for triggering actions. Tag groups are for filtering content."
61
75
  },
62
76
  {
63
77
  "type": "guideline",
64
- "content": "Cursor guidelines.\n\nCursor Usage PointerUse the pointer cursor for all interactive components."
78
+ "content": "It may not make sense in every case to include icons. If the items are too complicated to convey in an icon, don’t force it. Keep in mind that if one segmented control has an icon, then they all should have an icon."
65
79
  },
66
80
  {
67
81
  "type": "guideline",
68
- "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 buttons—must provide a text alternative that communicates the button’s purpose. All buttons, especially icon‑only buttons, 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, AAAButtons should be understandable by assistive technologies like screen readers. This means using the proper semantic HTML or ARIA role of buttons should be utilized.Use of color 1.4.1 AColor is never used as the sole way to convey meaning in buttons. While negative buttons do use red to reinforce their purpose, every button also includes a clear text label that communicates the action it performs.Text contrast minimums 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 AAButtons 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 Requirement Criterion Level 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."
82
+ "content": "Segmented control groups work best with 2 to 5 items. If your component needs more than 5 items, consider using a dropdown or radio button group instead."
83
+ },
84
+ {
85
+ "type": "guideline",
86
+ "content": "Segmented control groups are meant for switching views on a page. To navigate to a different page or progressively disclose different content, use tabs instead. To perform actions or make a selection, use action groups."
69
87
  }
70
88
  ],
71
89
  "options": {
72
90
  "orientation": {
73
91
  "type": "string",
74
92
  "default": "horizontal",
75
- "values": [{ "value": "horizontal" }, { "value": "vertical" }]
93
+ "values": [
94
+ {
95
+ "value": "horizontal"
96
+ },
97
+ {
98
+ "value": "vertical"
99
+ }
100
+ ]
76
101
  },
77
102
  "isFluid": {
78
103
  "type": "boolean",
@@ -82,7 +107,14 @@
82
107
  "alignment": {
83
108
  "type": "string",
84
109
  "default": "start",
85
- "values": [{ "value": "start" }, { "value": "center" }]
110
+ "values": [
111
+ {
112
+ "value": "start"
113
+ },
114
+ {
115
+ "value": "center"
116
+ }
117
+ ]
86
118
  },
87
119
  "hideTracker": {
88
120
  "type": "boolean",
@@ -96,7 +128,14 @@
96
128
  "keyboardActivation": {
97
129
  "type": "string",
98
130
  "default": "manual",
99
- "values": [{ "value": "manual" }, { "value": "automatic" }]
131
+ "values": [
132
+ {
133
+ "value": "manual"
134
+ },
135
+ {
136
+ "value": "automatic"
137
+ }
138
+ ]
100
139
  },
101
140
  "items": {
102
141
  "type": "array",
@@ -129,14 +168,24 @@
129
168
  }
130
169
  }
131
170
  },
132
- "lifecycle": { "introduced": "1.0.0-draft" },
171
+ "lifecycle": {
172
+ "introduced": "1.0.0-draft"
173
+ },
133
174
  "accessibility": {
134
175
  "intents": ["choose"],
135
176
  "focusable": true,
136
177
  "keyboardIntents": ["navigate-items", "activate"],
137
178
  "wcag": [
138
- { "criterion": "2.1.1", "level": "A", "title": "Keyboard" },
139
- { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
179
+ {
180
+ "criterion": "2.1.1",
181
+ "level": "A",
182
+ "title": "Keyboard"
183
+ },
184
+ {
185
+ "criterion": "4.1.2",
186
+ "level": "A",
187
+ "title": "Name, Role, Value"
188
+ }
140
189
  ]
141
190
  }
142
191
  }
@@ -9,6 +9,13 @@
9
9
  "category": "inputs",
10
10
  "documentationUrl": "https://spectrum.adobe.com/page/select-box/"
11
11
  },
12
+ "implementations": [
13
+ {
14
+ "platform": "web",
15
+ "componentName": "SelectBox",
16
+ "package": "@react-spectrum/s2"
17
+ }
18
+ ],
12
19
  "documentBlocks": [
13
20
  {
14
21
  "type": "purpose",
@@ -16,63 +23,108 @@
16
23
  },
17
24
  {
18
25
  "type": "guideline",
19
- "content": "Minimum and maximum size.\n\nMinimum and maximum sizing ensures that the component remains clear, usable, and visually consistent, even in flexible or responsive layouts."
26
+ "content": "Select boxes allow users to choose options in a workflow. Both single-select and multi-select versions use checkboxes to show selection. Multi-select boxes display unchecked checkboxes by default to signal that multiple choices are allowed. Single-select boxes only show an unchecked checkbox on hover. If showCheckbox is false, selection is only shown using the dark border."
27
+ },
28
+ {
29
+ "type": "guideline",
30
+ "content": "A select box in a disabled state shows that the items within the group exist, but are not available in that circumstance. This state can be used to maintain layout continuity and to communicate that an option may become available later. Individual boxes may be disabled or the entire group may be disabled."
31
+ },
32
+ {
33
+ "type": "guideline",
34
+ "content": "Illustrations are optional but recommended and included by default."
35
+ },
36
+ {
37
+ "type": "guideline",
38
+ "content": "A label is required in select boxes. It acts as the title of the select box and explains its action or purpose.. Ideally, the label should be kept concise, even in the horizontal orientation."
39
+ },
40
+ {
41
+ "type": "guideline",
42
+ "content": "Body is optional in select boxes. If no value is entered for the body, then it will not appear in the component. Body is usually reserved for the horizontal version of select boxes."
43
+ },
44
+ {
45
+ "type": "guideline",
46
+ "content": "A select box is vertical by default, which works best when metadata is limited to a short title, with or without an illustration. The horizontal orientation is recommended when the select box includes longer-form metadata."
47
+ },
48
+ {
49
+ "type": "guideline",
50
+ "content": "Minimum and maximum sizing ensures that the component remains clear, usable, and visually consistent, even in flexible or responsive layouts."
20
51
  },
21
52
  {
22
53
  "type": "guideline",
23
- "content": "Consistent sizing.\n\nAll select boxes should be the same size as one another. Keep metadata concise, and make the size of the box large enough to accommodate longer text when translated to other languages."
54
+ "content": "All select boxes should be the same size as one another. Keep metadata concise, and make the size of the box large enough to accommodate longer text when translated to other languages."
24
55
  },
25
56
  {
26
57
  "type": "guideline",
27
- "content": "Text overflow.\n\nWhen the title of the select box is too long for the available horizontal space, it wraps to another line. Wrapped text should not affect the size of an individual select box. Each box in a group should have enough space to allow for longer, localized text to fit as necessary."
58
+ "content": "When the title of the select box is too long for the available horizontal space, it wraps to another line. Wrapped text should not affect the size of an individual select box. Each box in a group should have enough space to allow for longer, localized text to fit as necessary."
28
59
  },
29
60
  {
30
61
  "type": "guideline",
31
- "content": "Selection.\n\nClicking a select box does not immediately move to the next step in the sequence. After making a selection, the user must initiate the next step by choosing a button or similar component outside the select box group."
62
+ "content": "Clicking a select box does not immediately move to the next step in the sequence. After making a selection, the user must initiate the next step by choosing a button or similar component outside the select box group."
32
63
  },
33
64
  {
34
65
  "type": "guideline",
35
- "content": "Keyboard focus.\n\nA select box group can be navigated using a keyboard. The keyboard focus state takes the button's visual hover state and adds a blue ring to the button in focus."
66
+ "content": "A select box group can be navigated using a keyboard. The keyboard focus state takes the button’s visual hover state and adds a blue ring to the button in focus."
36
67
  },
37
68
  {
38
69
  "type": "guideline",
39
- "content": "Use illustrations only when they have a clear meaning.\n\nIllustrations should be used when they help clarify the content. If the items are too complex to represent visually, it may be better to omit them. For consistency, if one select box includes an illustration, all select boxes in the group should include one."
70
+ "content": "Illustrations should be used when they help clarify the content. If the items are too complex to represent visually, it may be better to omit them. For consistency, if one select box includes an illustration, all select boxes in the group should include one."
40
71
  },
41
72
  {
42
73
  "type": "guideline",
43
- "content": "Keep select box groups to 9 items or less.\n\nSelect box groups work best with 3 to 9 items. If your experience needs more than 9 items, consider using a dropdown, checkboxes, or radio button group instead."
74
+ "content": "Select box groups work best with 3 to 9 items. If your experience needs more than 9 items, consider using a dropdown, checkboxes, or radio button group instead."
44
75
  },
45
76
  {
46
- "type": "do-dont",
47
- "content": "Don't use select boxes as actions",
48
- "dont": "Select boxes are used to choose an item from a group. If clicking an item is meant to immediately trigger an action, use an action group instead."
77
+ "type": "guideline",
78
+ "content": "Select boxes are used to choose an item from a group. If clicking an item is meant to immediately trigger an action, use an action group instead."
49
79
  },
50
80
  {
51
81
  "type": "guideline",
52
- "content": "Use consistent sizing.\n\nAll select boxes in a group should be the same size to maintain visual consistency and usability."
82
+ "content": "All select boxes in a group should be the same size to maintain visual consistency and usability."
53
83
  },
54
84
  {
55
- "type": "do-dont",
56
- "content": "Don't use radio buttons in select boxes",
57
- "dont": "Select boxes use a checkbox to indicate both single- and multi-selection. Don't use radio buttons for single-selection."
85
+ "type": "guideline",
86
+ "content": "Select boxes use a checkbox to indicate both single- and multi-selection. Don’t use radio buttons for single-selection."
58
87
  },
59
88
  {
60
89
  "type": "guideline",
61
- "content": "Checkbox vs. highlight selection.\n\nSome cases may make more sense for the user to select one or a few options in a group of select boxes, but if the use case doesn't make sense to be checking a selection, showCheckbox can be false and the highlight style can be used instead. There is no visual differentiation between single- and multi-select behaviors when checkboxes are not present."
90
+ "content": "Some cases may make more sense for the user to select one or a few options in a group of select boxes, but if the use case doesn’t make sense to be checking a selection, showCheckbox can be false and the highlight style can be used instead. There is no visual differentiation between single- and multi-select behaviors when checkboxes are not present."
62
91
  }
63
92
  ],
64
93
  "options": {
65
- "label": { "type": "string" },
94
+ "label": {
95
+ "type": "string"
96
+ },
66
97
  "orientation": {
67
98
  "type": "string",
68
99
  "default": "vertical",
69
- "values": [{ "value": "horizontal" }, { "value": "vertical" }]
100
+ "values": [
101
+ {
102
+ "value": "horizontal"
103
+ },
104
+ {
105
+ "value": "vertical"
106
+ }
107
+ ]
108
+ },
109
+ "body": {
110
+ "type": "string"
111
+ },
112
+ "isSelected": {
113
+ "type": "boolean",
114
+ "default": false
115
+ },
116
+ "hideIllustration": {
117
+ "type": "boolean",
118
+ "default": false
119
+ },
120
+ "showCheckbox": {
121
+ "type": "boolean",
122
+ "default": false
123
+ },
124
+ "isDisabled": {
125
+ "type": "boolean",
126
+ "default": false
70
127
  },
71
- "body": { "type": "string" },
72
- "isSelected": { "type": "boolean", "default": false },
73
- "hideIllustration": { "type": "boolean", "default": false },
74
- "showCheckbox": { "type": "boolean", "default": false },
75
- "isDisabled": { "type": "boolean", "default": false },
76
128
  "multiple": {
77
129
  "type": "boolean",
78
130
  "default": false,
@@ -80,19 +132,41 @@
80
132
  }
81
133
  },
82
134
  "states": [
83
- { "name": "down", "trigger": "interaction" },
84
- { "name": "hover", "trigger": "interaction" },
85
- { "name": "keyboard-focus", "trigger": "interaction" },
86
- { "name": "selected", "trigger": "interaction" }
135
+ {
136
+ "name": "down",
137
+ "trigger": "interaction"
138
+ },
139
+ {
140
+ "name": "hover",
141
+ "trigger": "interaction"
142
+ },
143
+ {
144
+ "name": "keyboard-focus",
145
+ "trigger": "interaction"
146
+ },
147
+ {
148
+ "name": "selected",
149
+ "trigger": "interaction"
150
+ }
87
151
  ],
88
- "lifecycle": { "introduced": "1.0.0-draft" },
152
+ "lifecycle": {
153
+ "introduced": "1.0.0-draft"
154
+ },
89
155
  "accessibility": {
90
156
  "intents": ["select"],
91
157
  "focusable": true,
92
158
  "keyboardIntents": ["activate"],
93
159
  "wcag": [
94
- { "criterion": "2.1.1", "level": "A", "title": "Keyboard" },
95
- { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
160
+ {
161
+ "criterion": "2.1.1",
162
+ "level": "A",
163
+ "title": "Keyboard"
164
+ },
165
+ {
166
+ "criterion": "4.1.2",
167
+ "level": "A",
168
+ "title": "Name, Role, Value"
169
+ }
96
170
  ]
97
171
  }
98
172
  }
@@ -16,61 +16,75 @@
16
16
  },
17
17
  {
18
18
  "type": "guideline",
19
- "content": "App frame side navigation.\n\nAt a glance, the app frame side navigation may look similar to the standard side navigation. However, its interaction model introduces key differences. The app frame side navigation includes a collapsible menu that lets users hide or reveal labels. The standard side navigation, on the other hand, is best suited for fixed layouts that support multiple visual styles, such as icon-only, text-only, or mixed. Note that the standard side navigation cannot collapse."
19
+ "content": "Side navigation provides access to the main content areas of a product or section. It can support single-level or multi-level navigation."
20
20
  },
21
21
  {
22
22
  "type": "guideline",
23
- "content": "Flexible width.\n\nThe width of the side navigation is flexible, so choose a width that works with the navigation items in your experience. Make the width generous enough so that it doesn't feel too condensed. Doing this will ensure that users won't confuse the side navigation with buttons or other controls."
23
+ "content": "The type of selection allowed in side navigation can be none, single or multiple."
24
24
  },
25
25
  {
26
26
  "type": "guideline",
27
- "content": "Text overflow.\n\nWhen the navigation item text is too long for the horizontal space available, it wraps to form another line."
27
+ "content": "The list of navigation items displayed in a side navigation. Each item includes a label by default and can optionally include an icon. Items that contain nested navigation levels can also include a trailing accessory area, which supports a chevron and an optional counter."
28
28
  },
29
29
  {
30
- "type": "do-dont",
31
- "content": "Don't make the width too condensed",
32
- "dont": "Make sure the width is generous enough so that it doesn't feel too condensed. This ensures it doesn't get confused with buttons or other controls."
30
+ "type": "guideline",
31
+ "content": "At a glance, the app frame side navigation may look similar to the standard side navigation. However, its interaction model introduces key differences."
32
+ },
33
+ {
34
+ "type": "guideline",
35
+ "content": "The app frame side navigation includes a collapsible menu that lets users hide or reveal labels."
36
+ },
37
+ {
38
+ "type": "guideline",
39
+ "content": "The standard side navigation, on the other hand, is best suited for fixed layouts that support multiple visual styles, such as icon-only, text-only, or mixed. Note that the standard side navigation cannot collapse."
40
+ },
41
+ {
42
+ "type": "guideline",
43
+ "content": "The width of the side navigation is flexible, so choose a width that works with the navigation items in your experience. Make the width generous enough so that it doesn’t feel too condensed. Doing this will ensure that users won't confuse the side navigation with buttons or other controls."
44
+ },
45
+ {
46
+ "type": "guideline",
47
+ "content": "When the navigation item text is too long for the horizontal space available, it wraps to form another line."
33
48
  },
34
49
  {
35
50
  "type": "guideline",
36
- "content": "Use descriptive titles.\n\nNavigation should be helpful. Choose titles for navigation items that clearly communicate the places where they'll go. Arbitrary or non-useful titles cause usability issues."
51
+ "content": "Make sure the width is generous enough so that it doesn’t feel too condensed. This ensures it doesn’t get confused with buttons or other controls."
37
52
  },
38
53
  {
39
54
  "type": "guideline",
40
- "content": "Be concise.\n\nAlong with being descriptive, the labels of navigation items should be succinct. Keep navigation strings to 1 or 2 and no more than 3 concise words (in U.S. English, which is the source locale). Reduce any unnecessary words in order to ensure simplicity. Navigation items should never be so long that they require truncation, except in instances where navigation is user-generated, such as folder and filenames."
55
+ "content": "Navigation should be helpful. Choose titles for navigation items that clearly communicate the places where they'll go. Arbitrary or non-useful titles cause usability issues."
41
56
  },
42
57
  {
43
58
  "type": "guideline",
44
- "content": "Be cautious with line breaks.\n\nWhen possible, the default width should automatically adjust to the longest string in the navigation to accommodate all translations. As a last resort for long strings, specific line breaks can be built into the implementation. These breaks depend on the content and require manual handling by globalization engineers."
59
+ "content": "Along with being descriptive, the labels of navigation items should be succinct. Keep navigation strings to 1 or 2 and no more than 3 concise words (in U.S. English, which is the source locale). Reduce any unnecessary words in order to ensure simplicity."
45
60
  },
46
61
  {
47
62
  "type": "guideline",
48
- "content": "Mixed icon usage.\n\nIn multi-level side navigation, icon and text-only styles can be used together. Users may include supporting icons on the first level and omit them on the second and third levels, or choose to use no icons at all. Do not mix icon and no-icon options within the same navigation level."
63
+ "content": "Navigation items should never be so long that they require truncation, except in instances where navigation is user-generated, such as folder and filenames."
49
64
  },
50
65
  {
51
- "type": "do-dont",
52
- "content": "Avoid deeply nested menus",
53
- "dont": "The multi-level side navigation goes to three levels deep. Adding more than three levels will make the indentation indiscernible, which becomes a major usability issue."
66
+ "type": "guideline",
67
+ "content": "When possible, the default width should automatically adjust to the longest string in the navigation to accommodate all translations. As a last resort for long strings, specific line breaks can be built into the implementation. These breaks depend on the content and require manual handling by globalization engineers."
54
68
  },
55
69
  {
56
70
  "type": "guideline",
57
- "content": "Use consistent multi-level behavior.\n\nIf top-level navigation items have a location associated with them, send the user to that location and open the sub-level navigation items. If a top-level navigation item does not have any associated location, only open the sub-level navigation items. Side navigation can use either of these behaviors, but should never mix behaviors in the same experience."
71
+ "content": "In multi-level side navigation, icon and text-only styles can be used together. Users may include supporting icons on the first level and omit them on the second and third levels, or choose to use no icons at all."
58
72
  },
59
73
  {
60
74
  "type": "guideline",
61
- "content": "RTL.\n\nFor RTL (right-to-left) languages, the layout of the side navigation is mirrored. Navigation items are left-aligned and their icons are placed on the right side of the text."
75
+ "content": "Do not mix icon and no-icon options within the same navigation level."
62
76
  },
63
77
  {
64
78
  "type": "guideline",
65
- "content": "Keyboard interactions.\n\nKey Interaction TabMoves focus to next item.Shift + TabMoves focus to previous item.Enter or SpaceSelects item, expands and collapses item with children."
79
+ "content": "The multi-level side navigation goes to three levels deep. Adding more than three levels will make the indentation indiscernible, which becomes a major usability issue."
66
80
  },
67
81
  {
68
82
  "type": "guideline",
69
- "content": "Cursor guidelines.\n\nCursor Usage PointerUse the pointer cursor for all interactive components in every state.Grab handUse the grab hand cursor when hovering over a side navigation item that can be moved.Grab fistUse the grabbing hand cursor while dragging a side nav item."
83
+ "content": "If top-level navigation items have a location associated with them, send the user to that location and open the sub-level navigation items. If a top-level navigation item does not have any associated location, only open the sub-level navigation items."
70
84
  },
71
85
  {
72
86
  "type": "guideline",
73
- "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 side navigations—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, AAASide navigation must be understandable to assistive technologies, such as screen readers. Use proper semantic HTML or the appropriate ARIA roles to ensure accessibility.Text contrast minimums 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.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 Requirement Criterion Level 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."
87
+ "content": "Side navigation can use either of these behaviors, but should never mix behaviors in the same experience."
74
88
  }
75
89
  ],
76
90
  "options": {
@@ -113,9 +127,15 @@
113
127
  "default": "single",
114
128
  "description": "How selection is handled for items.",
115
129
  "values": [
116
- { "value": "none" },
117
- { "value": "single" },
118
- { "value": "multiple" }
130
+ {
131
+ "value": "none"
132
+ },
133
+ {
134
+ "value": "single"
135
+ },
136
+ {
137
+ "value": "multiple"
138
+ }
119
139
  ]
120
140
  }
121
141
  },
@@ -124,21 +144,42 @@
124
144
  "name": "trailing-accessory-area",
125
145
  "description": "Trailing area for accessory content such as counts or actions."
126
146
  },
127
- { "name": "indicator" }
147
+ {
148
+ "name": "indicator"
149
+ }
128
150
  ],
129
151
  "states": [
130
- { "name": "hover", "trigger": "interaction" },
131
- { "name": "down", "trigger": "interaction" },
132
- { "name": "keyboard-focus", "trigger": "interaction" }
152
+ {
153
+ "name": "hover",
154
+ "trigger": "interaction"
155
+ },
156
+ {
157
+ "name": "down",
158
+ "trigger": "interaction"
159
+ },
160
+ {
161
+ "name": "keyboard-focus",
162
+ "trigger": "interaction"
163
+ }
133
164
  ],
134
- "lifecycle": { "introduced": "1.0.0-draft" },
165
+ "lifecycle": {
166
+ "introduced": "1.0.0-draft"
167
+ },
135
168
  "accessibility": {
136
169
  "intents": ["navigate"],
137
170
  "focusable": true,
138
171
  "keyboardIntents": ["navigate-items", "activate"],
139
172
  "wcag": [
140
- { "criterion": "2.1.1", "level": "A", "title": "Keyboard" },
141
- { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
173
+ {
174
+ "criterion": "2.1.1",
175
+ "level": "A",
176
+ "title": "Keyboard"
177
+ },
178
+ {
179
+ "criterion": "4.1.2",
180
+ "level": "A",
181
+ "title": "Name, Role, Value"
182
+ }
142
183
  ]
143
184
  }
144
185
  }