@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,19 @@
9
9
  "category": "actions",
10
10
  "documentationUrl": "https://spectrum.adobe.com/page/button-group/"
11
11
  },
12
+ "implementations": [
13
+ {
14
+ "platform": "web",
15
+ "componentName": "ButtonGroup",
16
+ "package": "@react-spectrum/s2"
17
+ },
18
+ {
19
+ "platform": "web",
20
+ "componentName": "ButtonGroup",
21
+ "importPath": "@adobe/spectrum-wc/components/button-group",
22
+ "notes": "Spectrum 2 web component custom element: swc-button-group."
23
+ }
24
+ ],
12
25
  "documentBlocks": [
13
26
  {
14
27
  "type": "purpose",
@@ -16,76 +29,107 @@
16
29
  },
17
30
  {
18
31
  "type": "guideline",
19
- "content": "Overflow.\n\nWhen horizontal space is limited, button groups stack vertically. Buttons are stacked by the importance of the action, with the most critical or primary action at the bottom."
32
+ "content": "Button groups organize related buttons into a single group for presenting multiple, related actions."
20
33
  },
21
34
  {
22
35
  "type": "guideline",
23
- "content": "Use the recommended option for subsequent actions.\n\nThe most critical action within a button group should be an accent, primary, or negative button (fill or outline). The other actions should always be a secondary outline button."
36
+ "content": "A button group in a disabled state shows that the buttons within the group exist, but are not available in that circumstance. This state can be used to maintain layout continuity and to communicate that a button group may become available later."
24
37
  },
25
38
  {
26
39
  "type": "guideline",
27
- "content": "Align button groups based on content.\n\nButton groups are aligned contextually. In general, button groups are left-aligned to follow content such as a block of text. They are center-aligned in the context of an empty state. And, they should be right-aligned inside container components such as dialogs, popovers, or cards."
40
+ "content": "This option stacks button groups vertically when horizontal space is limited, placing the most important action at the bottom."
28
41
  },
29
42
  {
30
43
  "type": "guideline",
31
- "content": "Respect button order within a group.\n\nThe order of button priority should match the alignment of surrounding text. When text is left-aligned, buttons should be arranged so that the leftmost button is the most critical. When text is right- or center- aligned, the most critical action should be the furthest right."
44
+ "content": "Button groups come in four different sizes: small, medium, large, and extra-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."
32
45
  },
33
46
  {
34
47
  "type": "guideline",
35
- "content": "Use icons only for the most critical actions.\n\nNot all buttons in a group require an icon, but buttons with icons should always be of a higher priority than ones without icons. If the most critical action in a group doesn't have an icon, don't use icons in the remaining lower-level actions."
48
+ "content": "A button group can be either horizontal or vertical in its orientation. By default, a button group is horizontal. Use vertical option when horizontal space is limited."
36
49
  },
37
50
  {
38
51
  "type": "guideline",
39
- "content": "Use a button group to show additional actions.\n\nInstead of a single split button (now a deprecated component), use a button group to show any additional actions related to the most critical action."
52
+ "content": "When horizontal space is limited, button groups stack vertically. Buttons are stacked by the importance of the action, with the most critical or primary action at the bottom."
40
53
  },
41
54
  {
42
55
  "type": "guideline",
43
- "content": "RTL.\n\nFor RTL (right-to-left) languages, the layout of the button group is mirrored."
56
+ "content": "Button groups are aligned contextually. In general, button groups are left-aligned to follow content such as a block of text. They are center-aligned in the context of an empty state. And, they should be right-aligned inside container components such as dialogs, popovers, or cards."
44
57
  },
45
58
  {
46
59
  "type": "guideline",
47
- "content": "Keyboard interactions.\n\nKey Interaction TabMoves focus onto or off of the button group. Focus is placed on the primary button of the group.Shift + TabMoves focus to the previous component.Space or EnterExecutes the selected action within the button group. Focus remains on the active button to preserve context across the group. If the action opens or closes a related container, focus moves into the resulting context or returns to the triggering buttonArrow keysMoves focus through the group of buttons."
60
+ "content": "The order of button priority should match the alignment of surrounding text. When text is left-aligned, buttons should be arranged so that the leftmost button is the most critical. When text is right- or center- aligned, the most critical action should be the furthest right."
48
61
  },
49
62
  {
50
63
  "type": "guideline",
51
- "content": "Cursor guidelines.\n\nCursor Usage PointerUse the pointer cursor for all interactive components in every state."
64
+ "content": "Not all buttons in a group require an icon, but buttons with icons should always be of a higher priority than ones without icons. If the most critical action in a group doesn’t have an icon, don’t use icons in the remaining lower-level actions."
52
65
  },
53
66
  {
54
67
  "type": "guideline",
55
- "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.Orientation 1.3.4 AAButton groups are available in both vertical and horizontal orientations.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 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.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 text is wrapped in buttons. 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."
68
+ "content": "Instead of a single split button (now a deprecated component), use a button group to show any additional actions related to the most critical action."
56
69
  }
57
70
  ],
58
71
  "options": {
59
72
  "orientation": {
60
73
  "type": "string",
61
74
  "default": "horizontal",
62
- "values": [{ "value": "horizontal" }, { "value": "vertical" }]
75
+ "values": [
76
+ {
77
+ "value": "horizontal"
78
+ },
79
+ {
80
+ "value": "vertical"
81
+ }
82
+ ]
63
83
  },
64
84
  "size": {
65
85
  "type": "string",
66
86
  "pattern": "^(x?s|m|x{0,3}l)$",
67
87
  "default": "m",
68
88
  "values": [
69
- { "value": "s" },
70
- { "value": "m" },
71
- { "value": "l" },
72
- { "value": "xl" }
89
+ {
90
+ "value": "s"
91
+ },
92
+ {
93
+ "value": "m"
94
+ },
95
+ {
96
+ "value": "l"
97
+ },
98
+ {
99
+ "value": "xl"
100
+ }
73
101
  ]
74
102
  },
75
103
  "overflowMode": {
76
104
  "type": "string",
77
105
  "default": "wrap",
78
- "values": [{ "value": "wrap" }, { "value": "collapse" }]
106
+ "values": [
107
+ {
108
+ "value": "wrap"
109
+ },
110
+ {
111
+ "value": "collapse"
112
+ }
113
+ ]
79
114
  },
80
- "isDisabled": { "type": "boolean", "default": false }
115
+ "isDisabled": {
116
+ "type": "boolean",
117
+ "default": false
118
+ }
119
+ },
120
+ "lifecycle": {
121
+ "introduced": "1.0.0-draft"
81
122
  },
82
- "lifecycle": { "introduced": "1.0.0-draft" },
83
123
  "accessibility": {
84
124
  "role": "group",
85
125
  "intents": ["trigger"],
86
126
  "focusable": false,
87
127
  "wcag": [
88
- { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
128
+ {
129
+ "criterion": "4.1.2",
130
+ "level": "A",
131
+ "title": "Name, Role, Value"
132
+ }
89
133
  ]
90
134
  }
91
135
  }
@@ -9,10 +9,23 @@
9
9
  "category": "actions",
10
10
  "documentationUrl": "https://spectrum.adobe.com/page/button/"
11
11
  },
12
+ "implementations": [
13
+ {
14
+ "platform": "web",
15
+ "componentName": "Button",
16
+ "package": "@react-spectrum/s2"
17
+ },
18
+ {
19
+ "platform": "web",
20
+ "componentName": "Button",
21
+ "importPath": "@adobe/spectrum-wc/components/button",
22
+ "notes": "Spectrum 2 web component custom element: swc-button."
23
+ }
24
+ ],
12
25
  "documentBlocks": [
13
26
  {
14
27
  "type": "purpose",
15
- "content": "Buttons allow users to perform an action or to navigate to another page."
28
+ "content": "Buttons enable actions or navigation between views. They come in multiple styles to support different levels of emphasis, and are commonly used to guide progression through a flow."
16
29
  },
17
30
  {
18
31
  "type": "guideline",
@@ -49,7 +62,7 @@
49
62
  {
50
63
  "type": "do-dont",
51
64
  "content": "Don't override color",
52
- "dont": "Do not use custom colors for buttons. The colors of different button variations have been designed to be consistent and accessible"
65
+ "dont": "Do not use custom colors for buttons. The colors of different button variations have been designed to be consistent and accessible."
53
66
  },
54
67
  {
55
68
  "type": "guideline",
@@ -58,51 +71,15 @@
58
71
  {
59
72
  "type": "do-dont",
60
73
  "content": "Don't use the pending state for long progress",
61
- "dont": "The pending state should be reserved for indeterminate actions that are expected to take 5 seconds or less. For determinate or longer actions, use a progress bar or progress circle outside of the button."
74
+ "dont": "The pending state should be reserved for indeterminate actions that are expected to take 5 seconds or less. For determinate or longer actions, use a [progress bar](https://spectrum.adobe.com/page/progress-bar/) or [progress circle](https://spectrum.adobe.com/page/progress-circle/) outside of the button."
62
75
  },
63
76
  {
64
77
  "type": "guideline",
65
- "content": "Use a button group to show additional actions.\n\nInstead of a single split button (now a deprecated component), use a button group to show any additional actions related to the most critical action."
78
+ "content": "Use a button group to show additional actions.\n\nInstead of a single split button (now a deprecated component), use a [button group](https://spectrum.adobe.com/page/button-group/) to show any additional actions related to the most critical action."
66
79
  },
67
80
  {
68
81
  "type": "guideline",
69
82
  "content": "Display a popover when featuring subsequent options.\n\nIn some instances, it's possible to have a call to action button display a popover (or tray) to feature subsequent options. These options should extend and parallel the action of the button. Do not include arbitrary or unrelated options."
70
- },
71
- {
72
- "type": "guideline",
73
- "content": "Be concise.\n\nButton text should be concise: 1 or 2 words, no longer than 4 words, with fewer than 20 characters including spaces. Don't use punctuation marks such as periods or exclamation points."
74
- },
75
- {
76
- "type": "guideline",
77
- "content": "Write labels as verbs.\n\nA button represents an action, so its label needs to reflect the action that a user is taking — which is a verb. Labels written as nouns or adjectives tend to be unclear and disorienting."
78
- },
79
- {
80
- "type": "guideline",
81
- "content": "Clearly state the action.\n\nMake sure that a button's label clearly states the outcome of the action. Use the same word or phrase as found elsewhere in the experience. For example, when designing a form for people to sign up for a trial offer, use \"Sign up\" as the call to action for completing the form. Phrases like \"Start trial\" skip the sign up step. Words like \"Submit\" or \"Enter,\" while technically correct, focus on the action of finishing filling out the form itself, rather than what the user is actually doing by filling it out (signing up for something)."
82
- },
83
- {
84
- "type": "guideline",
85
- "content": "Use sentence case.\n\nButton text should always be in sentence case. Never use capitalization to emphasize a specific button."
86
- },
87
- {
88
- "type": "guideline",
89
- "content": "Be aware of tone.\n\nEmoji and exclamation points aren't appropriate for the functional, utilitarian nature of buttons. Keep the label to just text, with no punctuation or extra decoration."
90
- },
91
- {
92
- "type": "guideline",
93
- "content": "RTL.\n\nFor RTL (right-to-left) languages, the layout of the button is mirrored. The icon is placed on the right side of the text."
94
- },
95
- {
96
- "type": "guideline",
97
- "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."
98
- },
99
- {
100
- "type": "guideline",
101
- "content": "Cursor guidelines.\n\nCursor Usage PointerUse the pointer cursor for all interactive components."
102
- },
103
- {
104
- "type": "guideline",
105
- "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."
106
83
  }
107
84
  ],
108
85
  "options": {
@@ -111,30 +88,62 @@
111
88
  "default": "accent",
112
89
  "description": "Visual emphasis level.",
113
90
  "values": [
114
- { "value": "accent" },
115
- { "value": "negative" },
116
- { "value": "primary" },
117
- { "value": "secondary" }
91
+ {
92
+ "value": "accent"
93
+ },
94
+ {
95
+ "value": "negative"
96
+ },
97
+ {
98
+ "value": "primary"
99
+ },
100
+ {
101
+ "value": "secondary"
102
+ }
118
103
  ]
119
104
  },
120
105
  "style": {
121
106
  "type": "string",
122
107
  "default": "fill",
123
- "values": [{ "value": "fill" }, { "value": "outline" }]
108
+ "values": [
109
+ {
110
+ "value": "fill"
111
+ },
112
+ {
113
+ "value": "outline"
114
+ }
115
+ ]
124
116
  },
125
117
  "size": {
126
118
  "type": "string",
127
119
  "default": "m",
128
120
  "values": [
129
- { "value": "s" },
130
- { "value": "m" },
131
- { "value": "l" },
132
- { "value": "xl" }
121
+ {
122
+ "value": "s"
123
+ },
124
+ {
125
+ "value": "m"
126
+ },
127
+ {
128
+ "value": "l"
129
+ },
130
+ {
131
+ "value": "xl"
132
+ }
133
133
  ]
134
134
  },
135
- "isDisabled": { "type": "boolean", "default": false },
136
- "isPending": { "type": "boolean", "default": false },
137
- "isLabelHidden": { "type": "boolean", "default": false },
135
+ "isDisabled": {
136
+ "type": "boolean",
137
+ "default": false
138
+ },
139
+ "isPending": {
140
+ "type": "boolean",
141
+ "default": false
142
+ },
143
+ "isLabelHidden": {
144
+ "type": "boolean",
145
+ "default": false
146
+ },
138
147
  "icon": {
139
148
  "$ref": "https://opensource.adobe.com/spectrum-design-data/schemas/types/workflow-icon.json",
140
149
  "description": "Icon placed at the start of the button. Required when isLabelHidden is true."
@@ -142,7 +151,14 @@
142
151
  "staticColor": {
143
152
  "type": "string",
144
153
  "description": "Static color for use on colored backgrounds.",
145
- "values": [{ "value": "white" }, { "value": "black" }]
154
+ "values": [
155
+ {
156
+ "value": "white"
157
+ },
158
+ {
159
+ "value": "black"
160
+ }
161
+ ]
146
162
  }
147
163
  },
148
164
  "slots": [
@@ -151,23 +167,43 @@
151
167
  "description": "Text label of the button.",
152
168
  "required": false
153
169
  },
154
- { "name": "icon", "description": "Icon placed at the start of the button." }
170
+ {
171
+ "name": "icon",
172
+ "description": "Icon placed at the start of the button."
173
+ }
155
174
  ],
156
175
  "anatomy": [
157
- { "name": "icon", "description": "Leading icon." },
158
- { "name": "label", "description": "Button text.", "required": true }
176
+ {
177
+ "name": "icon",
178
+ "description": "Leading icon."
179
+ },
180
+ {
181
+ "name": "label",
182
+ "description": "Button text.",
183
+ "required": true
184
+ }
159
185
  ],
160
186
  "states": [
161
- { "name": "hover", "trigger": "interaction", "precedence": 50 },
187
+ {
188
+ "name": "hover",
189
+ "trigger": "interaction",
190
+ "precedence": 50
191
+ },
162
192
  {
163
193
  "name": "focus",
164
194
  "trigger": "interaction",
165
195
  "precedence": 60,
166
196
  "layered": true
167
197
  },
168
- { "name": "disabled", "trigger": "prop", "precedence": 100 }
198
+ {
199
+ "name": "disabled",
200
+ "trigger": "prop",
201
+ "precedence": 100
202
+ }
169
203
  ],
170
- "lifecycle": { "introduced": "1.0.0-draft" },
204
+ "lifecycle": {
205
+ "introduced": "1.0.0-draft"
206
+ },
171
207
  "tokenBindings": [
172
208
  {
173
209
  "token": "corner-radius-button-small",
@@ -188,8 +224,16 @@
188
224
  "focusable": true,
189
225
  "keyboardIntents": ["activate"],
190
226
  "wcag": [
191
- { "criterion": "2.1.1", "level": "A", "title": "Keyboard" },
192
- { "criterion": "4.1.2", "level": "A", "title": "Name, Role, Value" }
227
+ {
228
+ "criterion": "2.1.1",
229
+ "level": "A",
230
+ "title": "Keyboard"
231
+ },
232
+ {
233
+ "criterion": "4.1.2",
234
+ "level": "A",
235
+ "title": "Name, Role, Value"
236
+ }
193
237
  ]
194
238
  }
195
239
  }
@@ -9,6 +9,13 @@
9
9
  "category": "inputs",
10
10
  "documentationUrl": "https://spectrum.adobe.com/page/calendar/"
11
11
  },
12
+ "implementations": [
13
+ {
14
+ "platform": "web",
15
+ "componentName": "Calendar",
16
+ "package": "@react-spectrum/s2"
17
+ }
18
+ ],
12
19
  "documentBlocks": [
13
20
  {
14
21
  "type": "purpose",
@@ -16,28 +23,87 @@
16
23
  },
17
24
  {
18
25
  "type": "guideline",
19
- "content": "Unavailable dates.\n\nWhen a day or several days are unavailable within the calendar popover, each day should display a strikethrough to help the user understand that they cannot select it. Disabled days use a distinct gray style to clearly differentiate them from unavailable days. When the calendar prevents selection of past dates, this visual treatment helps users distinguish disabled days from those marked as unavailable."
26
+ "content": "Calendars display the days of a selected month and highlight the current day. They support navigating to past or future months and selecting a specific date."
20
27
  },
21
28
  {
22
29
  "type": "guideline",
23
- "content": "Why unavailable and disabled days are necessary.\n\nIn a date selection system, users often need to distinguish between dates that cannot be selected and dates that are simply inactive. Supporting both states improves clarity and prevents errors. Here's an example scenario: A potential guest is browsing a calendar to book a stay at a vacation rental. Unavailable dates: Days when the rental is already booked or blocked by the owner. These appear with a strikethrough, indicating they cannot be selected. Disabled dates: Past dates that are no longer valid for booking. These appear visually distinct (gray style) to show they are inactive. Guests see unavailable dates marked clearly so they don't attempt to select them. Hosts or admins can view past dates as disabled and also mark future dates as unavailable when needed. By supporting both behaviors, the system provides a clear, intuitive experience for different user roles and prevents confusion during date selection."
30
+ "content": "An array of days that are displayed in the current calendar view. This includes:"
24
31
  },
25
32
  {
26
33
  "type": "guideline",
27
- "content": "Range fill color.\n\nThe range fill shows which days fall between two selected dates. If the range spans more than the three-month calendar view, it ends on the last visible day but continues as users navigate with the calendar chevrons. A dashed stroke outlines the fill to improve visibility on bright screens and for users with vision impairments."
34
+ "content": "The maximum amount of months displayed in the calendar popover is three."
28
35
  },
29
36
  {
30
- "type": "do-dont",
31
- "content": "Do not change the styling of unavailable days",
32
- "dont": "The strikethrough styling intentionally accommodates internationalization."
37
+ "type": "guideline",
38
+ "content": "The minimum amount of months displayed in the calendar popover is one."
39
+ },
40
+ {
41
+ "type": "guideline",
42
+ "content": "The calendar popover may display an error as error text when a user attempts to provide an input that violates the defined constraints of the date selection. For example, when the user selects dates that fall outside allowable limits, or conflict with contextual restrictions."
43
+ },
44
+ {
45
+ "type": "guideline",
46
+ "content": "The calendar popover is disabled. For example, a month within a three-month range is disabled."
47
+ },
48
+ {
49
+ "type": "guideline",
50
+ "content": "The types of selection available for the calendar."
51
+ },
52
+ {
53
+ "type": "guideline",
54
+ "content": "The current year or month displayed in the calendar popover."
55
+ },
56
+ {
57
+ "type": "guideline",
58
+ "content": "When a day or several days are unavailable within the calendar popover, each day should display a strikethrough to help the user understand that they cannot select it."
59
+ },
60
+ {
61
+ "type": "guideline",
62
+ "content": "Disabled days use a distinct gray style to clearly differentiate them from unavailable days. When the calendar prevents selection of past dates, this visual treatment helps users distinguish disabled days from those marked as unavailable."
63
+ },
64
+ {
65
+ "type": "guideline",
66
+ "content": "In a date selection system, users often need to distinguish between dates that cannot be selected and dates that are simply inactive. Supporting both states improves clarity and prevents errors."
67
+ },
68
+ {
69
+ "type": "guideline",
70
+ "content": "Here’s an example scenario: A potential guest is browsing a calendar to book a stay at a vacation rental."
71
+ },
72
+ {
73
+ "type": "guideline",
74
+ "content": "Unavailable dates: Days when the rental is already booked or blocked by the owner. These appear with a strikethrough, indicating they cannot be selected."
75
+ },
76
+ {
77
+ "type": "guideline",
78
+ "content": "Disabled dates: Past dates that are no longer valid for booking. These appear visually distinct (gray style) to show they are inactive."
79
+ },
80
+ {
81
+ "type": "guideline",
82
+ "content": "Guests see unavailable dates marked clearly so they don’t attempt to select them. Hosts or admins can view past dates as disabled and also mark future dates as unavailable when needed."
83
+ },
84
+ {
85
+ "type": "guideline",
86
+ "content": "By supporting both behaviors, the system provides a clear, intuitive experience for different user roles and prevents confusion during date selection."
87
+ },
88
+ {
89
+ "type": "guideline",
90
+ "content": "The range fill shows which days fall between two selected dates. If the range spans more than the three-month calendar view, it ends on the last visible day but continues as users navigate with the calendar chevrons. A dashed stroke outlines the fill to improve visibility on bright screens and for users with vision impairments."
91
+ },
92
+ {
93
+ "type": "guideline",
94
+ "content": "The strikethrough styling intentionally accommodates internationalization."
95
+ },
96
+ {
97
+ "type": "guideline",
98
+ "content": "The calendar popover supports a disabled state but not a read-only state. Dates or months may be temporarily disabled based on context (for example, if a user must complete a task before selecting a date). In these cases, help text can explain why certain dates are unavailable."
33
99
  },
34
100
  {
35
101
  "type": "guideline",
36
- "content": "Calendar popover states.\n\nThe calendar popover supports a disabled state but not a read-only state. Dates or months may be temporarily disabled based on context (for example, if a user must complete a task before selecting a date). In these cases, help text can explain why certain dates are unavailable. If a date picker is truly read-only, users shouldn't be able to open the calendar popover at all, since they can't interact with it."
102
+ "content": "If a date picker is truly read-only, users shouldn’t be able to open the calendar popover at all, since they can’t interact with it."
37
103
  },
38
104
  {
39
105
  "type": "guideline",
40
- "content": "Optional time fields.\n\nThe calendar popover can also include time-specific fields, allowing users to specify start and end times."
106
+ "content": "The calendar popover can also include time-specific fields, allowing users to specify start and end times."
41
107
  }
42
108
  ],
43
109
  "options": {
@@ -17,6 +17,19 @@
17
17
  "description": "Preview area or thumbnail within the card."
18
18
  }
19
19
  ],
20
+ "implementations": [
21
+ {
22
+ "platform": "web",
23
+ "componentName": "Card",
24
+ "package": "@react-spectrum/s2"
25
+ },
26
+ {
27
+ "platform": "web",
28
+ "componentName": "Card",
29
+ "importPath": "@adobe/spectrum-wc/components/card",
30
+ "notes": "Spectrum 2 web component custom element: swc-card."
31
+ }
32
+ ],
20
33
  "states": [{ "name": "default" }],
21
34
  "lifecycle": { "introduced": "1.0.0-draft" }
22
35
  }