@nypl/design-system-react-components 0.25.8 → 0.25.9

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 (250) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/README.md +1 -1
  3. package/dist/components/Button/Button.d.ts +6 -6
  4. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  5. package/dist/components/Card/Card.d.ts +6 -4
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  7. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  8. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  9. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  10. package/dist/components/Form/Form.d.ts +2 -2
  11. package/dist/components/Heading/Heading.d.ts +7 -3
  12. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  15. package/dist/components/Icons/Icon.d.ts +4 -4
  16. package/dist/components/Icons/IconSvgs.d.ts +0 -21
  17. package/dist/components/Icons/IconTypes.d.ts +0 -23
  18. package/dist/components/Image/Image.d.ts +11 -3
  19. package/dist/components/Logo/Logo.d.ts +28 -0
  20. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  21. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  22. package/dist/components/Modal/Modal.d.ts +0 -4
  23. package/dist/components/Notification/Notification.d.ts +2 -2
  24. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  25. package/dist/components/Radio/Radio.d.ts +6 -5
  26. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  27. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  28. package/dist/components/Select/Select.d.ts +3 -2
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  30. package/dist/components/Slider/Slider.d.ts +3 -2
  31. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  32. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  33. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  34. package/dist/components/Table/Table.d.ts +23 -0
  35. package/dist/components/Template/Template.d.ts +8 -3
  36. package/dist/components/Text/Text.d.ts +2 -2
  37. package/dist/components/TextInput/TextInput.d.ts +4 -3
  38. package/dist/components/Toggle/Toggle.d.ts +3 -2
  39. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  40. package/dist/design-system-react-components.cjs.development.js +5630 -5692
  41. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  43. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  44. package/dist/design-system-react-components.esm.js +4304 -4362
  45. package/dist/design-system-react-components.esm.js.map +1 -1
  46. package/dist/index.d.ts +6 -4
  47. package/dist/styles.css +2 -2
  48. package/dist/theme/components/button.d.ts +0 -12
  49. package/dist/theme/components/card.d.ts +14 -2
  50. package/dist/theme/components/customTable.d.ts +47 -0
  51. package/dist/theme/components/fieldset.d.ts +2 -2
  52. package/dist/theme/components/global.d.ts +1 -1
  53. package/dist/theme/components/heading.d.ts +4 -0
  54. package/dist/theme/components/label.d.ts +1 -1
  55. package/dist/theme/components/link.d.ts +14 -1
  56. package/dist/theme/components/list.d.ts +0 -2
  57. package/dist/theme/components/logo.d.ts +4 -0
  58. package/dist/theme/components/searchBar.d.ts +7 -13
  59. package/dist/theme/components/select.d.ts +1 -0
  60. package/dist/theme/components/structuredContent.d.ts +33 -0
  61. package/dist/theme/components/template.d.ts +10 -10
  62. package/dist/theme/components/textInput.d.ts +2 -0
  63. package/dist/theme/components/toggle.d.ts +8 -5
  64. package/dist/utils/utils.d.ts +10 -0
  65. package/package.json +1 -2
  66. package/src/__tests__/utils/utils.test.ts +23 -1
  67. package/src/components/Accordion/Accordion.stories.mdx +14 -12
  68. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  69. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  70. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  71. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +30 -11
  72. package/src/components/Button/Button.stories.mdx +93 -48
  73. package/src/components/Button/Button.test.tsx +0 -12
  74. package/src/components/Button/Button.tsx +7 -7
  75. package/src/components/Button/ButtonTypes.tsx +0 -1
  76. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  77. package/src/components/Card/Card.stories.mdx +186 -71
  78. package/src/components/Card/Card.test.tsx +45 -22
  79. package/src/components/Card/Card.tsx +17 -5
  80. package/src/components/Card/__snapshots__/Card.test.tsx.snap +8 -2
  81. package/src/components/Chakra/Box.stories.mdx +3 -3
  82. package/src/components/Chakra/Center.stories.mdx +5 -5
  83. package/src/components/Chakra/Grid.stories.mdx +3 -3
  84. package/src/components/Chakra/Stack.stories.mdx +2 -2
  85. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  86. package/src/components/Checkbox/Checkbox.tsx +13 -8
  87. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  88. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  89. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  90. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  91. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  92. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  93. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  94. package/src/components/DatePicker/DatePicker.tsx +10 -6
  95. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +36 -18
  96. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  97. package/src/components/Form/Form.stories.mdx +49 -41
  98. package/src/components/Form/Form.tsx +5 -4
  99. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  100. package/src/components/Heading/Heading.stories.mdx +59 -23
  101. package/src/components/Heading/Heading.test.tsx +82 -18
  102. package/src/components/Heading/Heading.tsx +31 -31
  103. package/src/components/Heading/HeadingTypes.tsx +6 -6
  104. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  105. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  106. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  107. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  108. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  109. package/src/components/Hero/Hero.stories.mdx +72 -53
  110. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  111. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  112. package/src/components/Icons/Icon.stories.mdx +77 -76
  113. package/src/components/Icons/Icon.tsx +4 -5
  114. package/src/components/Icons/IconSvgs.tsx +0 -42
  115. package/src/components/Icons/IconTypes.tsx +0 -24
  116. package/src/components/Image/Image.stories.mdx +66 -18
  117. package/src/components/Image/Image.tsx +21 -10
  118. package/src/components/Label/Label.stories.mdx +20 -19
  119. package/src/components/Link/Link.stories.mdx +102 -51
  120. package/src/components/Link/Link.test.tsx +38 -8
  121. package/src/components/Link/Link.tsx +19 -12
  122. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  123. package/src/components/List/List.stories.mdx +36 -24
  124. package/src/components/Logo/Logo.stories.mdx +220 -0
  125. package/src/components/Logo/Logo.test.tsx +98 -0
  126. package/src/components/Logo/Logo.tsx +97 -0
  127. package/src/components/Logo/LogoSvgs.tsx +34 -0
  128. package/src/components/Logo/LogoTypes.tsx +32 -0
  129. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  130. package/src/components/Modal/Modal.stories.mdx +20 -5
  131. package/src/components/Modal/Modal.tsx +2 -8
  132. package/src/components/Notification/Notification.stories.mdx +61 -38
  133. package/src/components/Notification/Notification.tsx +9 -4
  134. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  135. package/src/components/Pagination/Pagination.stories.mdx +17 -6
  136. package/src/components/Pagination/Pagination.tsx +1 -1
  137. package/src/components/Placeholder/Placeholder.tsx +7 -14
  138. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  139. package/src/components/Radio/Radio.stories.mdx +39 -19
  140. package/src/components/Radio/Radio.tsx +13 -9
  141. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  142. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  143. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  144. package/src/components/SearchBar/SearchBar.Test.tsx +58 -10
  145. package/src/components/SearchBar/SearchBar.stories.mdx +109 -30
  146. package/src/components/SearchBar/SearchBar.tsx +53 -32
  147. package/src/components/Select/Select.stories.mdx +48 -14
  148. package/src/components/Select/Select.tsx +16 -10
  149. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  150. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  151. package/src/components/Slider/Slider.stories.mdx +72 -22
  152. package/src/components/Slider/Slider.tsx +15 -10
  153. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  154. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  155. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  156. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  157. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  158. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  159. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  160. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  161. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  162. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  163. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  164. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  165. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  166. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  167. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  168. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  169. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  170. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  171. package/src/components/Table/Table.stories.mdx +66 -0
  172. package/src/components/Table/Table.test.tsx +60 -0
  173. package/src/components/Table/Table.tsx +116 -0
  174. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  175. package/src/components/Tabs/Tabs.test.tsx +1 -1
  176. package/src/components/Template/Template.stories.mdx +56 -47
  177. package/src/components/Template/Template.test.tsx +65 -5
  178. package/src/components/Template/Template.tsx +35 -5
  179. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  180. package/src/components/Text/Text.stories.mdx +33 -11
  181. package/src/components/Text/Text.tsx +2 -2
  182. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  183. package/src/components/TextInput/TextInput.test.tsx +96 -0
  184. package/src/components/TextInput/TextInput.tsx +12 -8
  185. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  186. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  187. package/src/components/Toggle/Toggle.tsx +14 -9
  188. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  189. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  190. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  191. package/src/docs/Chakra.stories.mdx +5 -8
  192. package/src/docs/Intro.stories.mdx +2 -2
  193. package/src/index.ts +5 -4
  194. package/src/styles/base/_03-base.scss +1 -1
  195. package/src/styles/base/_place-holder.scss +7 -7
  196. package/src/styles.scss +1 -5
  197. package/src/theme/components/breadcrumb.ts +3 -3
  198. package/src/theme/components/button.ts +5 -12
  199. package/src/theme/components/card.ts +5 -2
  200. package/src/theme/components/checkbox.ts +1 -1
  201. package/src/theme/components/customTable.ts +50 -0
  202. package/src/theme/components/datePicker.ts +1 -1
  203. package/src/theme/components/global.ts +6 -6
  204. package/src/theme/components/heading.ts +13 -11
  205. package/src/theme/components/helperErrorText.ts +1 -1
  206. package/src/theme/components/image.ts +1 -1
  207. package/src/theme/components/link.ts +17 -5
  208. package/src/theme/components/list.ts +1 -3
  209. package/src/theme/components/logo.ts +54 -0
  210. package/src/theme/components/notification.ts +1 -1
  211. package/src/theme/components/searchBar.ts +7 -13
  212. package/src/theme/components/select.ts +1 -0
  213. package/src/theme/components/statusBadge.ts +1 -1
  214. package/src/theme/components/structuredContent.ts +54 -0
  215. package/src/theme/components/template.ts +10 -10
  216. package/src/theme/components/text.ts +6 -6
  217. package/src/theme/components/textInput.ts +1 -0
  218. package/src/theme/components/toggle.ts +9 -5
  219. package/src/theme/components/videoPlayer.ts +0 -2
  220. package/src/theme/foundations/global.ts +2 -2
  221. package/src/theme/foundations/typography.ts +84 -12
  222. package/src/theme/index.ts +6 -0
  223. package/src/utils/componentCategories.ts +1 -1
  224. package/src/utils/utils.ts +17 -0
  225. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  226. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  227. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  228. package/dist/components/Input/Input.d.ts +0 -36
  229. package/dist/components/Input/Input.stories.d.ts +0 -29
  230. package/dist/components/Input/InputTypes.d.ts +0 -6
  231. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  232. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  233. package/dist/helpers/getCSSVariable.d.ts +0 -1
  234. package/dist/interfaces.d.ts +0 -3
  235. package/dist/utils/bem.d.ts +0 -1
  236. package/src/__tests__/utils/bem.test.ts +0 -37
  237. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  238. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  239. package/src/components/CardEdition/CardEdition.tsx +0 -60
  240. package/src/components/CardEdition/_CardEdition.scss +0 -137
  241. package/src/components/Input/Input.stories.tsx +0 -133
  242. package/src/components/Input/Input.test.tsx +0 -266
  243. package/src/components/Input/Input.tsx +0 -81
  244. package/src/components/Input/InputTypes.tsx +0 -8
  245. package/src/components/Input/_Input.scss +0 -78
  246. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  247. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  248. package/src/helpers/getCSSVariable.tsx +0 -5
  249. package/src/interfaces.ts +0 -3
  250. package/src/utils/bem.ts +0 -44
@@ -3,14 +3,16 @@ import { render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
4
  import renderer from "react-test-renderer";
5
5
 
6
- import Card, { CardHeading, CardContent, CardActions } from "./Card";
7
- import Link from "../Link/Link";
8
- import { LinkTypes } from "../Link/LinkTypes";
9
6
  import Button from "../Button/Button";
10
7
  import { ButtonTypes } from "../Button/ButtonTypes";
8
+ import Card, { CardHeading, CardContent, CardActions } from "./Card";
11
9
  import { HeadingLevels } from "../Heading/HeadingTypes";
12
10
  import Icon from "../Icons/Icon";
13
11
  import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
12
+ import Image from "../Image/Image";
13
+ import Link from "../Link/Link";
14
+ import { LinkTypes } from "../Link/LinkTypes";
15
+ import { ImageRatios } from "../Image/ImageTypes";
14
16
 
15
17
  describe("Card Accessibility", () => {
16
18
  it("passes axe accessibility test", async () => {
@@ -92,12 +94,12 @@ describe("Card", () => {
92
94
  );
93
95
  const cardWithExtendedStyles = (
94
96
  <Card
95
- id="cardWithExtendedStyles"
96
97
  className="edition-card"
97
- imageSrc="https://placeimg.com/300/400/arch"
98
+ id="cardWithExtendedStyles"
98
99
  imageAlt="Alt text"
100
+ imageSrc="https://placeimg.com/300/400/arch"
99
101
  >
100
- <CardHeading level={HeadingLevels.Two} id="editioncardheading1">
102
+ <CardHeading id="editioncardheading1" level={HeadingLevels.Two}>
101
103
  The Card Heading
102
104
  </CardHeading>
103
105
  <CardContent>
@@ -114,10 +116,10 @@ describe("Card", () => {
114
116
  </Link>
115
117
  <Link id="link-icon" href="#url" type={LinkTypes.Action}>
116
118
  <Icon
117
- id="icon-cardWithExtendedStyles"
118
- name={IconNames.Download}
119
119
  align={IconAlign.Left}
120
120
  iconRotation={IconRotationTypes.Rotate0}
121
+ id="icon-cardWithExtendedStyles"
122
+ name={IconNames.Download}
121
123
  />
122
124
  Download
123
125
  </Link>
@@ -126,12 +128,12 @@ describe("Card", () => {
126
128
  );
127
129
  const cardWithNoCTAs = (
128
130
  <Card
129
- id="cardWithNoCTAs"
130
131
  className="edition-card"
131
- imageSrc="https://placeimg.com/300/400/arch"
132
+ id="cardWithNoCTAs"
132
133
  imageAlt="Alt text"
134
+ imageSrc="https://placeimg.com/300/400/arch"
133
135
  >
134
- <CardHeading level={HeadingLevels.Two} id="editioncardheading1">
136
+ <CardHeading id="editioncardheading1" level={HeadingLevels.Two}>
135
137
  The Card Heading
136
138
  </CardHeading>
137
139
  <CardContent>
@@ -143,14 +145,14 @@ describe("Card", () => {
143
145
  );
144
146
  const cardWithNoContent = (
145
147
  <Card
146
- id="cardWithNoContent"
147
148
  className="edition-card"
148
- imageSrc="https://placeimg.com/300/400/arch"
149
+ id="cardWithNoContent"
149
150
  imageAlt="Alt text"
151
+ imageSrc="https://placeimg.com/300/400/arch"
150
152
  >
151
153
  <CardHeading
152
- level={HeadingLevels.Two}
153
154
  id="editioncardheading1"
155
+ level={HeadingLevels.Two}
154
156
  url="#edition-link"
155
157
  >
156
158
  The Card Heading
@@ -161,10 +163,10 @@ describe("Card", () => {
161
163
  </Link>
162
164
  <Link id="link-icon" href="#url" type={LinkTypes.Action}>
163
165
  <Icon
164
- id="icon-cardWithNoContent"
165
- name={IconNames.Download}
166
166
  align={IconAlign.Left}
167
167
  iconRotation={IconRotationTypes.Rotate0}
168
+ id="icon-cardWithNoContent"
169
+ name={IconNames.Download}
168
170
  />
169
171
  Download
170
172
  </Link>
@@ -174,8 +176,8 @@ describe("Card", () => {
174
176
  const cardWithNoImage = (
175
177
  <Card id="cardWithNoImage" className="edition-card">
176
178
  <CardHeading
177
- level={HeadingLevels.Two}
178
179
  id="editioncardheading1"
180
+ level={HeadingLevels.Two}
179
181
  url="#edition-link"
180
182
  >
181
183
  The Card Heading
@@ -187,10 +189,10 @@ describe("Card", () => {
187
189
  </Link>
188
190
  <Link id="link-icon" href="#url" type={LinkTypes.Action}>
189
191
  <Icon
190
- id="icon-cardWithNoImage"
191
- name={IconNames.Download}
192
192
  align={IconAlign.Left}
193
193
  iconRotation={IconRotationTypes.Rotate0}
194
+ id="icon-cardWithNoImage"
195
+ name={IconNames.Download}
194
196
  />
195
197
  Download
196
198
  </Link>
@@ -200,8 +202,8 @@ describe("Card", () => {
200
202
  const cardFullClick = () => (
201
203
  <Card
202
204
  id="fullclick"
203
- imageSrc="https://placeimg.com/400/200/arch"
204
205
  imageAlt="Alt text"
206
+ imageSrc="https://placeimg.com/400/200/arch"
205
207
  mainActionLink="http://nypl.org"
206
208
  >
207
209
  <CardHeading level={HeadingLevels.Three} id="heading1">
@@ -210,9 +212,9 @@ describe("Card", () => {
210
212
  <CardContent>middle column content</CardContent>
211
213
  <CardActions>
212
214
  <Button
213
- onClick={() => {}}
214
- id="button1"
215
215
  buttonType={ButtonTypes.Primary}
216
+ id="button1"
217
+ onClick={() => {}}
216
218
  type="submit"
217
219
  >
218
220
  Example CTA
@@ -220,6 +222,18 @@ describe("Card", () => {
220
222
  </CardActions>
221
223
  </Card>
222
224
  );
225
+ const cardImageComponentAndRatio = () => (
226
+ <Card
227
+ id="fullclick"
228
+ imageComponent={<Image alt="" src="https://placeimg.com/400/200/arch" />}
229
+ imageAspectRatio={ImageRatios.ThreeByTwo}
230
+ >
231
+ <CardHeading level={HeadingLevels.Three} id="heading1">
232
+ The Card Heading
233
+ </CardHeading>
234
+ <CardContent>middle column content</CardContent>
235
+ </Card>
236
+ );
223
237
  let container;
224
238
 
225
239
  it("renders a Card with a header, image, content, and CTAs", () => {
@@ -289,6 +303,14 @@ describe("Card", () => {
289
303
  );
290
304
  });
291
305
 
306
+ it("Logs a warning when both `imageComponent` and `imageAspectRatio` are passed", () => {
307
+ const warn = jest.spyOn(console, "warn");
308
+ render(cardImageComponentAndRatio());
309
+ expect(warn).toHaveBeenCalledWith(
310
+ "Both `imageComponent` and `imageAspectRatio` are set but `imageAspectRatio` will be ignored in favor of the aspect ratio on `imageComponent`."
311
+ );
312
+ });
313
+
292
314
  it("Renders the UI snapshot correctly", () => {
293
315
  const regular = renderer.create(regularCard).toJSON();
294
316
  const withExtendedStyles = renderer.create(cardWithExtendedStyles).toJSON();
@@ -296,6 +318,7 @@ describe("Card", () => {
296
318
  const withNoContent = renderer.create(cardWithNoContent).toJSON();
297
319
  const withNoImage = renderer.create(cardWithNoImage).toJSON();
298
320
  const withFullClick = renderer.create(cardFullClick()).toJSON();
321
+
299
322
  expect(regular).toMatchSnapshot();
300
323
  expect(withExtendedStyles).toMatchSnapshot();
301
324
  expect(withNoCTAs).toMatchSnapshot();
@@ -16,7 +16,8 @@ import generateUUID from "../../helpers/generateUUID";
16
16
  interface CardBaseProps {
17
17
  /** Optional value to control the alignment of the text and elements. */
18
18
  center?: boolean;
19
- /** Optional value to render the layout in a row or column (default). */
19
+ /** Optional value to render the layout in a row or column.
20
+ * Default is `CardLayouts.Column`. */
20
21
  layout?: CardLayouts;
21
22
  }
22
23
 
@@ -54,14 +55,15 @@ export interface CardProps extends CardBaseProps, CardLinkBoxProps {
54
55
  /** Text description of the image; to follow best practices for accessibility,
55
56
  * this prop should not be left blank if `imageSrc` is passed. */
56
57
  imageAlt?: string;
57
- /** Optional value to control the aspect ratio of the `CardIage`; default
58
- * value is `square`. */
58
+ /** Optional value to control the aspect ratio of the `CardImage`; default
59
+ * value is `ImageRatios.Square`. */
59
60
  imageAspectRatio?: ImageRatios;
60
61
  /** Optional boolean value to control the position of the `CardImage`. */
61
62
  imageAtEnd?: boolean;
62
63
  /** Custom image component used in place of DS `Image` component. */
63
64
  imageComponent?: JSX.Element;
64
- /** Optional value to control the size of the `CardImage`. */
65
+ /** Optional value to control the size of the `CardImage`. Default value is
66
+ * `ImageSizes.Default`. */
65
67
  imageSize?: ImageSizes;
66
68
  /** The path to the image displayed within the `Card` component. */
67
69
  imageSrc?: string;
@@ -179,10 +181,19 @@ export default function Card(props: React.PropsWithChildren<CardProps>) {
179
181
  mainActionLink,
180
182
  } = props;
181
183
  const hasImage = imageSrc || imageComponent;
184
+ const finalImageAspectRatio = imageComponent
185
+ ? ImageRatios.Original
186
+ : imageAspectRatio;
182
187
  const customColors = {};
183
188
  const cardContents = [];
184
189
  let cardHeadingCount = 0;
185
190
 
191
+ if (imageComponent && imageAspectRatio !== ImageRatios.Square) {
192
+ console.warn(
193
+ "Both `imageComponent` and `imageAspectRatio` are set but `imageAspectRatio` will be ignored in favor of the aspect ratio on `imageComponent`."
194
+ );
195
+ }
196
+
186
197
  backgroundColor && (customColors["backgroundColor"] = backgroundColor);
187
198
  foregroundColor && (customColors["color"] = foregroundColor);
188
199
 
@@ -192,6 +203,7 @@ export default function Card(props: React.PropsWithChildren<CardProps>) {
192
203
  hasImage,
193
204
  imageAtEnd,
194
205
  layout,
206
+ mainActionLink,
195
207
  });
196
208
 
197
209
  React.Children.map(children, (child: React.ReactElement, key) => {
@@ -246,7 +258,7 @@ export default function Card(props: React.PropsWithChildren<CardProps>) {
246
258
  component={imageComponent}
247
259
  alt={imageAlt}
248
260
  imageSize={imageSize}
249
- imageAspectRatio={imageAspectRatio}
261
+ imageAspectRatio={finalImageAspectRatio}
250
262
  imageAtEnd={imageAtEnd}
251
263
  layout={layout}
252
264
  />
@@ -233,8 +233,11 @@ exports[`Card Renders the UI snapshot correctly 4`] = `
233
233
  id="editioncardheading1"
234
234
  >
235
235
  <a
236
- className="chakra-link css-1xdhyk6"
236
+ className="css-0"
237
237
  href="#edition-link"
238
+ id="editioncardheading1-link"
239
+ rel={null}
240
+ target={null}
238
241
  >
239
242
  The Card Heading
240
243
  </a>
@@ -310,8 +313,11 @@ exports[`Card Renders the UI snapshot correctly 5`] = `
310
313
  id="editioncardheading1"
311
314
  >
312
315
  <a
313
- className="chakra-link css-1xdhyk6"
316
+ className="css-0"
314
317
  href="#edition-link"
318
+ id="editioncardheading1-link"
319
+ rel={null}
320
+ target={null}
315
321
  >
316
322
  The Card Heading
317
323
  </a>
@@ -1,12 +1,12 @@
1
- import { Meta, Story, Canvas } from "@storybook/addon-docs/blocks";
2
1
  import { Box } from "@chakra-ui/react";
2
+ import { Canvas, Meta, Story } from "@storybook/addon-docs";
3
3
 
4
- import { getCategory } from "../../utils/componentCategories";
5
4
  import VideoPlayer from "../VideoPlayer/VideoPlayer";
6
5
  import {
7
- VideoPlayerTypes,
8
6
  VideoPlayerAspectRatios,
7
+ VideoPlayerTypes,
9
8
  } from "../VideoPlayer/VideoPlayerTypes";
9
+ import { getCategory } from "../../utils/componentCategories";
10
10
  import DSProvider from "../../theme/provider";
11
11
 
12
12
  <Meta title={getCategory("Box")} component={Box} />
@@ -1,11 +1,11 @@
1
- import { Meta, Story, Canvas } from "@storybook/addon-docs/blocks";
2
- import { Box, Center, Square, Circle, HStack } from "@chakra-ui/react";
1
+ import { Box, Center, Circle, HStack, Square } from "@chakra-ui/react";
2
+ import { Canvas, Meta, Story } from "@storybook/addon-docs";
3
3
 
4
- import { getCategory } from "../../utils/componentCategories";
4
+ import Icon from "../Icons/Icon";
5
+ import { IconColors, IconNames, IconSizes } from "../Icons/IconTypes";
5
6
  import Image from "../Image/Image";
6
7
  import { ImageSizes } from "../Image/ImageTypes";
7
- import Icon from "../Icons/Icon";
8
- import { IconNames, IconColors, IconSizes } from "../Icons/IconTypes";
8
+ import { getCategory } from "../../utils/componentCategories";
9
9
  import DSProvider from "../../theme/provider";
10
10
 
11
11
  <Meta title={getCategory("Center, Circle, Square")} component={Center} />
@@ -1,6 +1,6 @@
1
- import { Meta, Story, Canvas } from "@storybook/addon-docs/blocks";
2
- import { Box } from "@chakra-ui/react";
3
- import { Grid, GridItem } from "@chakra-ui/react";
1
+ import { Box, Grid, GridItem } from "@chakra-ui/react";
2
+ import { Canvas, Meta, Story } from "@storybook/addon-docs";
3
+
4
4
  import { getCategory } from "../../utils/componentCategories";
5
5
  import DSProvider from "../../theme/provider";
6
6
 
@@ -1,10 +1,10 @@
1
1
  import { Meta, Story, Canvas } from "@storybook/addon-docs";
2
2
  import { Box, Stack, HStack, VStack, Circle } from "@chakra-ui/react";
3
3
 
4
- import { getCategory } from "../../utils/componentCategories";
5
- import DSProvider from "../../theme/provider";
6
4
  import Icon from "../Icons/Icon";
7
5
  import { IconNames, IconSizes } from "../Icons/IconTypes";
6
+ import { getCategory } from "../../utils/componentCategories";
7
+ import DSProvider from "../../theme/provider";
8
8
 
9
9
  <Meta title={getCategory("Stack, HStack, VStack")} component={Stack} />
10
10
 
@@ -1,17 +1,17 @@
1
+ import { HStack } from "@chakra-ui/react";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
- import { HStack } from "@chakra-ui/react";
10
10
 
11
- import { getCategory } from "../../utils/componentCategories";
12
- import DSProvider from "../../theme/provider";
13
11
  import Checkbox from "./Checkbox";
14
12
  import { onChangeDefault } from "./Checkbox";
13
+ import { getCategory } from "../../utils/componentCategories";
14
+ import DSProvider from "../../theme/provider";
15
15
 
16
16
  <Meta
17
17
  title={getCategory("Checkbox")}
@@ -20,16 +20,35 @@ import { onChangeDefault } from "./Checkbox";
20
20
  parameters={{
21
21
  design: {
22
22
  type: "figma",
23
- url:
24
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
23
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
25
24
  },
26
25
  jest: ["Checkbox.test.tsx"],
27
26
  }}
28
27
  argTypes={{
29
- className: { table: { disable: true } },
30
- id: { table: { disable: true } },
31
- isChecked: { table: { disable: true } },
32
- onChange: { table: { disable: true } },
28
+ className: { control: false },
29
+ id: { control: false },
30
+ isChecked: { control: false },
31
+ isDisabled: {
32
+ table: { defaultValue: { summary: false } },
33
+ },
34
+ isIndeterminate: {
35
+ table: { defaultValue: { summary: false } },
36
+ },
37
+ isInvalid: {
38
+ table: { defaultValue: { summary: false } },
39
+ },
40
+ isRequired: {
41
+ table: { defaultValue: { summary: false } },
42
+ },
43
+ key: { table: { disable: true } },
44
+ onChange: { control: false },
45
+ ref: { table: { disable: true } },
46
+ showHelperInvalidText: {
47
+ table: { defaultValue: { summary: false } },
48
+ },
49
+ showLabel: {
50
+ table: { defaultValue: { summary: false } },
51
+ },
33
52
  }}
34
53
  />
35
54
 
@@ -38,7 +57,7 @@ import { onChangeDefault } from "./Checkbox";
38
57
  | Component Version | DS Version |
39
58
  | ----------------- | ---------- |
40
59
  | Added | `0.1.0` |
41
- | Latest | `0.25.3` |
60
+ | Latest | `0.25.9` |
42
61
 
43
62
  <Description of={Checkbox} />
44
63
 
@@ -49,15 +68,18 @@ cause an accessibility violation if none is present.
49
68
  <Story
50
69
  name="Checkbox"
51
70
  args={{
71
+ className: undefined,
52
72
  helperText: "This is the helper text!",
53
- id: "test_id",
73
+ id: "checkbox_id",
54
74
  invalidText: "This is the error text :(",
75
+ isChecked: undefined,
55
76
  isDisabled: false,
56
77
  isIndeterminate: false,
57
78
  isInvalid: false,
58
79
  isRequired: false,
59
80
  labelText: "Test Label",
60
81
  name: "test_name",
82
+ onChange: undefined,
61
83
  showHelperInvalidText: true,
62
84
  showLabel: true,
63
85
  value: "1",
@@ -1,23 +1,26 @@
1
- import * as React from "react";
2
1
  import {
3
2
  Box,
4
3
  Checkbox as ChakraCheckbox,
5
4
  Icon,
6
5
  useMultiStyleConfig,
7
6
  } from "@chakra-ui/react";
8
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
7
+ import * as React from "react";
8
+
9
+ import HelperErrorText, {
10
+ HelperErrorTextType,
11
+ } from "../HelperErrorText/HelperErrorText";
9
12
  import generateUUID from "../../helpers/generateUUID";
10
13
 
11
14
  export interface CheckboxProps {
12
15
  /** className you can add in addition to 'input' */
13
16
  className?: string;
14
17
  /** Optional string to populate the HelperErrorText for standard state */
15
- helperText?: string;
18
+ helperText?: HelperErrorTextType;
16
19
  /** ID that other components can cross reference for accessibility purposes */
17
20
  id?: string;
18
21
  /** Optional string to populate the HelperErrorText for the error state
19
22
  * when `isInvalid` is true. */
20
- invalidText?: string;
23
+ invalidText?: HelperErrorTextType;
21
24
  /** When using the Checkbox as a "controlled" form element, you can specify
22
25
  * the Checkbox's checked state using this prop.
23
26
  * Learn more about controlled and uncontrolled form fields:
@@ -89,7 +92,7 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
89
92
  value,
90
93
  } = props;
91
94
  const styles = useMultiStyleConfig("Checkbox", {});
92
- const footnote = isInvalid ? invalidText : helperText;
95
+ const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
93
96
  const ariaAttributes = {};
94
97
  const onChange = props.onChange || onChangeDefault;
95
98
  // Use Chakra's default indeterminate icon.
@@ -130,9 +133,11 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
130
133
  </ChakraCheckbox>
131
134
  {footnote && showHelperInvalidText && (
132
135
  <Box __css={styles.helper}>
133
- <HelperErrorText isInvalid={isInvalid} id={`${id}-helperText`}>
134
- {footnote}
135
- </HelperErrorText>
136
+ <HelperErrorText
137
+ id={`${id}-helperText`}
138
+ isInvalid={isInvalid}
139
+ text={footnote}
140
+ />
136
141
  </Box>
137
142
  )}
138
143
  </>
@@ -1,17 +1,23 @@
1
1
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
2
  ArgsTable,
3
+ Canvas,
6
4
  Description,
7
- } from "@storybook/addon-docs/blocks";
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
8
8
  import { withDesign } from "storybook-addon-designs";
9
9
 
10
- import { getCategory } from "../../utils/componentCategories";
11
- import DSProvider from "../../theme/provider";
10
+ import Checkbox from "../Checkbox/Checkbox";
12
11
  import CheckboxGroup from "./CheckboxGroup";
13
12
  import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
14
- import Checkbox from "../Checkbox/Checkbox";
13
+ import { getCategory } from "../../utils/componentCategories";
14
+ import DSProvider from "../../theme/provider";
15
+ import { getStorybookEnumValues } from "../../utils/utils";
16
+
17
+ export const enumValues = getStorybookEnumValues(
18
+ CheckboxGroupLayoutTypes,
19
+ "CheckboxGroupLayoutTypes"
20
+ );
15
21
 
16
22
  <Meta
17
23
  title={getCategory("CheckboxGroup")}
@@ -20,17 +26,41 @@ import Checkbox from "../Checkbox/Checkbox";
20
26
  parameters={{
21
27
  design: {
22
28
  type: "figma",
23
- url:
24
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
29
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
25
30
  },
26
31
  jest: ["CheckboxGroup.test.tsx"],
27
32
  }}
28
33
  argTypes={{
29
34
  children: { table: { disable: true } },
30
- defaultValue: { table: { disable: true } },
31
- id: { table: { disable: true } },
32
- name: { table: { disable: true } },
33
- onChange: { table: { disable: true } },
35
+ defaultValue: { control: false },
36
+ id: { control: false },
37
+ isDisabled: {
38
+ table: { defaultValue: { summary: false } },
39
+ },
40
+ isInvalid: {
41
+ table: { defaultValue: { summary: false } },
42
+ },
43
+ isRequired: {
44
+ table: { defaultValue: { summary: false } },
45
+ },
46
+ key: { table: { disable: true } },
47
+ layout: {
48
+ control: { type: "select" },
49
+ table: { defaultValue: { summary: "CheckboxGroupLayoutTypes.Column" } },
50
+ options: enumValues.options,
51
+ },
52
+ name: { control: false },
53
+ onChange: { control: false },
54
+ optReqFlag: {
55
+ table: { defaultValue: { summary: true } },
56
+ },
57
+ ref: { table: { disable: true } },
58
+ showHelperInvalidText: {
59
+ table: { defaultValue: { summary: true } },
60
+ },
61
+ showLabel: {
62
+ table: { defaultValue: { summary: true } },
63
+ },
34
64
  }}
35
65
  />
36
66
 
@@ -39,7 +69,7 @@ import Checkbox from "../Checkbox/Checkbox";
39
69
  | Component Version | DS Version |
40
70
  | ----------------- | ---------- |
41
71
  | Added | `0.25.1` |
42
- | Latest | `0.25.3` |
72
+ | Latest | `0.25.9` |
43
73
 
44
74
  <Description of={CheckboxGroup} />
45
75
 
@@ -49,20 +79,22 @@ import Checkbox from "../Checkbox/Checkbox";
49
79
  args={{
50
80
  defaultValue: ["4"],
51
81
  helperText: "This is the helper text for the full group.",
82
+ id: "checkboxGroup-id",
52
83
  invalidText: "This is the error text :(",
53
84
  isDisabled: false,
54
85
  isInvalid: false,
55
86
  isRequired: false,
56
87
  labelText: "Standard Checkbox Group",
57
- layout: CheckboxGroupLayoutTypes.Column,
88
+ layout: "CheckboxGroupLayoutTypes.Column",
58
89
  name: "checkbox-story",
90
+ onChange: undefined,
59
91
  optReqFlag: true,
60
92
  showHelperInvalidText: true,
61
93
  showLabel: true,
62
94
  }}
63
95
  >
64
96
  {(args) => (
65
- <CheckboxGroup {...args}>
97
+ <CheckboxGroup {...args} layout={enumValues.getValue(args.layout)}>
66
98
  <Checkbox value="2" labelText="Checkbox 2" />
67
99
  <Checkbox value="3" labelText="Checkbox 3" />
68
100
  <Checkbox value="4" labelText="Checkbox 4" />
@@ -6,12 +6,14 @@ import {
6
6
  useMultiStyleConfig,
7
7
  } from "@chakra-ui/react";
8
8
 
9
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
10
- import generateUUID from "../../helpers/generateUUID";
11
- import { spacing } from "../../theme/foundations/spacing";
12
- import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
13
9
  import Checkbox from "../Checkbox/Checkbox";
10
+ import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
14
11
  import Fieldset from "../Fieldset/Fieldset";
12
+ import HelperErrorText, {
13
+ HelperErrorTextType,
14
+ } from "../HelperErrorText/HelperErrorText";
15
+ import { spacing } from "../../theme/foundations/spacing";
16
+ import generateUUID from "../../helpers/generateUUID";
15
17
 
16
18
  export interface CheckboxGroupProps {
17
19
  /** Any child node passed to the component. */
@@ -19,11 +21,11 @@ export interface CheckboxGroupProps {
19
21
  /** Populates the initial value of the input */
20
22
  defaultValue?: string[];
21
23
  /** Optional string to populate the HelperErrorText for standard state */
22
- helperText?: string;
24
+ helperText?: HelperErrorTextType;
23
25
  /** ID that other components can cross reference for accessibility purposes */
24
26
  id?: string;
25
27
  /** Optional string to populate the HelperErrorText for error state */
26
- invalidText?: string;
28
+ invalidText?: HelperErrorTextType;
27
29
  /** Adds the 'disabled' prop to the input when true. */
28
30
  isDisabled?: boolean;
29
31
  /** A`dds the 'aria-invalid' attribute to the input and
@@ -76,7 +78,7 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
76
78
  showHelperInvalidText = true,
77
79
  showLabel = true,
78
80
  } = props;
79
- const footnote = isInvalid ? invalidText : helperText;
81
+ const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
80
82
  const spacingProp =
81
83
  layout === CheckboxGroupLayoutTypes.Column ? spacing.s : spacing.l;
82
84
  const newChildren = [];
@@ -139,9 +141,11 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
139
141
  </ChakraCheckboxGroup>
140
142
  {footnote && showHelperInvalidText && (
141
143
  <Box __css={styles.helper}>
142
- <HelperErrorText isInvalid={isInvalid} id={`${id}-helperErrorText`}>
143
- {footnote}
144
- </HelperErrorText>
144
+ <HelperErrorText
145
+ id={`${id}-helperErrorText`}
146
+ isInvalid={isInvalid}
147
+ text={footnote}
148
+ />
145
149
  </Box>
146
150
  )}
147
151
  </Fieldset>
@@ -584,11 +584,14 @@ exports[`Checkbox renders the UI snapshot correctly 4`] = `
584
584
  aria-atomic={true}
585
585
  aria-live="off"
586
586
  className=" css-0"
587
+ dangerouslySetInnerHTML={
588
+ Object {
589
+ "__html": "helper text",
590
+ }
591
+ }
587
592
  data-isinvalid={false}
588
593
  id="helperText-helperErrorText"
589
- >
590
- helper text
591
- </div>
594
+ />
592
595
  </div>
593
596
  </fieldset>
594
597
  `;