@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.
- package/components/accordion.json +67 -15
- package/components/action-bar.json +30 -9
- package/components/action-button.json +92 -39
- package/components/action-group.json +137 -18
- package/components/alert-banner.json +27 -8
- package/components/alert-dialog.json +55 -34
- package/components/avatar-group.json +35 -9
- package/components/avatar.json +105 -29
- package/components/badge.json +163 -56
- package/components/breadcrumbs.json +107 -26
- package/components/button-group.json +63 -19
- package/components/button.json +105 -61
- package/components/calendar.json +74 -8
- package/components/card.json +13 -0
- package/components/cards.json +46 -31
- package/components/checkbox-group.json +85 -16
- package/components/checkbox.json +97 -27
- package/components/close-button.json +75 -20
- package/components/coach-indicator.json +44 -14
- package/components/coach-mark.json +26 -8
- package/components/color-area.json +100 -20
- package/components/color-handle.json +46 -25
- package/components/color-loupe.json +14 -2
- package/components/color-slider.json +129 -26
- package/components/color-wheel.json +91 -17
- package/components/combo-box.json +189 -50
- package/components/contextual-help.json +126 -80
- package/components/date-field.json +7 -0
- package/components/date-picker.json +127 -24
- package/components/divider.json +38 -12
- package/components/drop-zone.json +37 -18
- package/components/field-label.json +62 -21
- package/components/heading.json +7 -0
- package/components/help-text.json +53 -16
- package/components/illustrated-message.json +85 -21
- package/components/in-line-alert.json +53 -13
- package/components/link.json +63 -24
- package/components/list-view.json +80 -15
- package/components/menu.json +181 -45
- package/components/meter.json +78 -24
- package/components/number-field.json +175 -34
- package/components/picker.json +188 -42
- package/components/popover.json +126 -37
- package/components/progress-bar.json +108 -23
- package/components/progress-circle.json +55 -12
- package/components/radio-button.json +67 -14
- package/components/radio-group.json +132 -28
- package/components/rating.json +38 -9
- package/components/search-field.json +126 -34
- package/components/segmented-control.json +70 -21
- package/components/select-box.json +103 -29
- package/components/side-navigation.json +69 -28
- package/components/slider.json +155 -39
- package/components/standard-dialog.json +88 -16
- package/components/status-light.json +136 -41
- package/components/steplist.json +24 -5
- package/components/swatch-group.json +55 -19
- package/components/swatch.json +79 -24
- package/components/switch.json +79 -31
- package/components/table.json +73 -26
- package/components/tabs.json +52 -22
- package/components/tag-field.json +60 -14
- package/components/tag-group.json +56 -16
- package/components/tag.json +78 -21
- package/components/takeover-dialog.json +61 -10
- package/components/text-area.json +205 -49
- package/components/text-field.json +170 -42
- package/components/thumbnail.json +63 -22
- package/components/time-field.json +7 -0
- package/components/toast.json +50 -29
- package/components/tooltip.json +87 -27
- package/components/tree-view.json +147 -45
- package/components/user-card.json +7 -0
- package/guidelines/app-frame-content-area.json +81 -0
- package/guidelines/app-frame-creating-bluelines.json +58 -0
- package/guidelines/app-frame-header.json +72 -0
- package/guidelines/app-frame-overview.json +50 -44
- package/guidelines/app-frame-side-navigation.json +138 -0
- package/guidelines/attention-hierarchy.json +21 -12
- package/guidelines/background-layers.json +10 -44
- package/guidelines/brand.json +10 -30
- package/guidelines/colors.json +17 -35
- package/guidelines/containers.json +62 -0
- package/guidelines/developer-overview.json +9 -25
- package/guidelines/faqs.json +9 -96
- package/guidelines/fonts.json +14 -29
- package/guidelines/grays.json +44 -17
- package/guidelines/icon-fundamentals.json +18 -7
- package/guidelines/illustrations.json +111 -0
- package/guidelines/introduction.json +2 -2
- package/guidelines/manifest.json +60 -252
- package/guidelines/motion.json +16 -17
- package/guidelines/object-styles.json +102 -0
- package/guidelines/principles.json +2 -2
- package/guidelines/resources.json +15 -21
- package/guidelines/spacing.json +25 -0
- package/guidelines/states.json +10 -15
- package/guidelines/typography-fundamentals.json +142 -0
- package/guidelines/using-icons.json +44 -33
- package/package.json +2 -2
- package/registry/platform-implementations.json +30 -0
- package/guidelines/ai-resource-guide.json +0 -50
- package/guidelines/applying-the-type-system.json +0 -63
- package/guidelines/bi-directionality.json +0 -57
- package/guidelines/border-width.json +0 -42
- package/guidelines/cognitive.json +0 -197
- package/guidelines/component-spacing.json +0 -49
- package/guidelines/contact-us.json +0 -67
- package/guidelines/content-area-browsing-context.json +0 -65
- package/guidelines/creating-bluelines-browsing-context.json +0 -91
- package/guidelines/design-tokens.json +0 -122
- package/guidelines/drop-shadow.json +0 -56
- package/guidelines/grammar-and-mechanics.json +0 -252
- package/guidelines/header-browsing-context.json +0 -37
- package/guidelines/illustration.json +0 -109
- package/guidelines/in-product-word-list.json +0 -29
- package/guidelines/inclusive-design.json +0 -93
- package/guidelines/inclusive-ux-writing.json +0 -30
- package/guidelines/internationalization.json +0 -87
- package/guidelines/layout-and-structure-containers.json +0 -47
- package/guidelines/layout-spacing.json +0 -39
- package/guidelines/object-styles-overview.json +0 -17
- package/guidelines/rounding.json +0 -61
- package/guidelines/side-navigation-browsing-context.json +0 -71
- package/guidelines/spacing-overview.json +0 -45
- package/guidelines/typography-overview.json +0 -39
- package/guidelines/typography-system.json +0 -168
- package/guidelines/visual-language-containers.json +0 -36
- package/guidelines/voice-and-tone.json +0 -47
- package/guidelines/writing-about-people.json +0 -103
- package/guidelines/writing-for-errors.json +0 -120
- package/guidelines/writing-for-onboarding.json +0 -119
- package/guidelines/writing-for-readability.json +0 -54
- package/guidelines/writing-with-visuals.json +0 -70
- 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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
|
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
|
|
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": "
|
|
58
|
+
"content": "Clicking on a segmented control item immediately performs the view change."
|
|
44
59
|
},
|
|
45
60
|
{
|
|
46
61
|
"type": "guideline",
|
|
47
|
-
"content": "
|
|
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": "
|
|
51
|
-
"content": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": [
|
|
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": [
|
|
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": [
|
|
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": {
|
|
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
|
-
{
|
|
139
|
-
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
47
|
-
"content": "
|
|
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": "
|
|
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": "
|
|
56
|
-
"content": "Don
|
|
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": "
|
|
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": {
|
|
94
|
+
"label": {
|
|
95
|
+
"type": "string"
|
|
96
|
+
},
|
|
66
97
|
"orientation": {
|
|
67
98
|
"type": "string",
|
|
68
99
|
"default": "vertical",
|
|
69
|
-
"values": [
|
|
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
|
-
{
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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": {
|
|
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
|
-
{
|
|
95
|
-
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
31
|
-
"content": "
|
|
32
|
-
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
52
|
-
"content": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
-
{
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
{
|
|
147
|
+
{
|
|
148
|
+
"name": "indicator"
|
|
149
|
+
}
|
|
128
150
|
],
|
|
129
151
|
"states": [
|
|
130
|
-
{
|
|
131
|
-
|
|
132
|
-
|
|
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": {
|
|
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
|
-
{
|
|
141
|
-
|
|
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
|
}
|