@nypl/design-system-react-components 0.25.13 → 0.26.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 (299) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +10 -10
  3. package/dist/components/Accordion/Accordion.d.ts +1 -1
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  5. package/dist/components/Button/Button.d.ts +2 -2
  6. package/dist/components/Card/Card.d.ts +11 -9
  7. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +5 -4
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
  10. package/dist/components/DatePicker/DatePicker.d.ts +5 -6
  11. package/dist/components/Fieldset/Fieldset.d.ts +5 -6
  12. package/dist/components/Form/Form.d.ts +6 -6
  13. package/dist/components/Grid/GridTypes.d.ts +7 -7
  14. package/dist/components/Grid/SimpleGrid.d.ts +1 -1
  15. package/dist/components/Heading/Heading.d.ts +1 -1
  16. package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
  17. package/dist/components/Hero/Hero.d.ts +2 -1
  18. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
  19. package/dist/components/Icons/Icon.d.ts +2 -1
  20. package/dist/components/Image/Image.d.ts +2 -2
  21. package/dist/components/Label/Label.d.ts +7 -4
  22. package/dist/components/Link/Link.d.ts +1 -1
  23. package/dist/components/List/List.d.ts +11 -11
  24. package/dist/components/List/ListTypes.d.ts +1 -1
  25. package/dist/components/Logo/Logo.d.ts +2 -1
  26. package/dist/components/Logo/LogoSvgs.d.ts +2 -0
  27. package/dist/components/Logo/LogoTypes.d.ts +2 -0
  28. package/dist/components/Notification/Notification.d.ts +4 -4
  29. package/dist/components/Pagination/Pagination.d.ts +2 -2
  30. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
  31. package/dist/components/Radio/Radio.d.ts +4 -6
  32. package/dist/components/RadioGroup/RadioGroup.d.ts +12 -6
  33. package/dist/components/SearchBar/SearchBar.d.ts +4 -4
  34. package/dist/components/Select/Select.d.ts +10 -6
  35. package/dist/components/Select/SelectTypes.d.ts +4 -0
  36. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +4 -3
  37. package/dist/components/Slider/Slider.d.ts +6 -4
  38. package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
  39. package/dist/components/StructuredContent/StructuredContent.d.ts +2 -2
  40. package/dist/components/Table/Table.d.ts +1 -1
  41. package/dist/components/Tabs/Tabs.d.ts +4 -3
  42. package/dist/components/Template/Template.d.ts +4 -3
  43. package/dist/components/Text/Text.d.ts +1 -1
  44. package/dist/components/TextInput/TextInput.d.ts +5 -5
  45. package/dist/components/Toggle/Toggle.d.ts +3 -4
  46. package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
  47. package/dist/design-system-react-components.cjs.development.js +1663 -1139
  48. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  49. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  50. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  51. package/dist/design-system-react-components.esm.js +1667 -1143
  52. package/dist/design-system-react-components.esm.js.map +1 -1
  53. package/dist/hooks/useCarouselStyles.d.ts +3 -2
  54. package/dist/hooks/useNYPLTheme.d.ts +12 -0
  55. package/dist/index.d.ts +4 -1
  56. package/dist/styles.css +1 -1
  57. package/dist/theme/components/button.d.ts +10 -2
  58. package/dist/theme/components/card.d.ts +42 -22
  59. package/dist/theme/components/checkbox.d.ts +5 -4
  60. package/dist/theme/components/checkboxGroup.d.ts +1 -1
  61. package/dist/theme/components/componentWrapper.d.ts +2 -2
  62. package/dist/theme/components/customTable.d.ts +84 -1
  63. package/dist/theme/components/fieldset.d.ts +4 -14
  64. package/dist/theme/components/global.d.ts +23 -17
  65. package/dist/theme/components/heading.d.ts +53 -0
  66. package/dist/theme/components/helperErrorText.d.ts +1 -0
  67. package/dist/theme/components/hero.d.ts +20 -14
  68. package/dist/theme/components/label.d.ts +9 -10
  69. package/dist/theme/components/list.d.ts +99 -9
  70. package/dist/theme/components/radio.d.ts +6 -4
  71. package/dist/theme/components/radioGroup.d.ts +1 -1
  72. package/dist/theme/components/select.d.ts +34 -5
  73. package/dist/theme/components/skeletonLoader.d.ts +2 -2
  74. package/dist/theme/components/slider.d.ts +6 -3
  75. package/dist/theme/components/structuredContent.d.ts +197 -0
  76. package/dist/theme/components/textInput.d.ts +18 -6
  77. package/dist/theme/components/toggle.d.ts +7 -4
  78. package/dist/theme/foundations/global.d.ts +2 -0
  79. package/dist/theme/foundations/radii.d.ts +1 -0
  80. package/dist/theme/foundations/spacing.d.ts +46 -43
  81. package/package.json +5 -6
  82. package/src/components/Accordion/Accordion.stories.mdx +9 -9
  83. package/src/components/Accordion/Accordion.test.tsx +21 -0
  84. package/src/components/Accordion/Accordion.tsx +13 -9
  85. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +276 -27
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  87. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +21 -5
  88. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +52 -31
  89. package/src/components/Breadcrumbs/Breadcrumbs.tsx +8 -7
  90. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
  91. package/src/components/Button/Button.stories.mdx +87 -23
  92. package/src/components/Button/Button.test.tsx +25 -0
  93. package/src/components/Button/Button.tsx +18 -7
  94. package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
  95. package/src/components/Card/Card.stories.mdx +287 -194
  96. package/src/components/Card/Card.test.tsx +102 -0
  97. package/src/components/Card/Card.tsx +73 -32
  98. package/src/components/Card/__snapshots__/Card.test.tsx.snap +195 -35
  99. package/src/components/Chakra/Grid.stories.mdx +4 -4
  100. package/src/components/Checkbox/Checkbox.stories.mdx +62 -10
  101. package/src/components/Checkbox/Checkbox.test.tsx +32 -9
  102. package/src/components/Checkbox/Checkbox.tsx +20 -15
  103. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +134 -7
  104. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +65 -17
  105. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +137 -81
  106. package/src/components/CheckboxGroup/CheckboxGroup.tsx +31 -21
  107. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +332 -97
  108. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
  109. package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
  110. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
  111. package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
  112. package/src/components/DatePicker/DatePicker.test.tsx +89 -13
  113. package/src/components/DatePicker/DatePicker.tsx +62 -56
  114. package/src/components/DatePicker/_DatePicker.scss +71 -13
  115. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
  116. package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
  117. package/src/components/Fieldset/Fieldset.test.tsx +58 -28
  118. package/src/components/Fieldset/Fieldset.tsx +35 -30
  119. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
  120. package/src/components/Form/Form.stories.mdx +72 -39
  121. package/src/components/Form/Form.test.tsx +58 -15
  122. package/src/components/Form/Form.tsx +89 -67
  123. package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
  124. package/src/components/Grid/GridTypes.tsx +7 -7
  125. package/src/components/Grid/SimpleGrid.stories.mdx +34 -6
  126. package/src/components/Grid/SimpleGrid.test.tsx +9 -0
  127. package/src/components/Grid/SimpleGrid.tsx +29 -20
  128. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
  129. package/src/components/Heading/Heading.stories.mdx +36 -3
  130. package/src/components/Heading/Heading.test.tsx +10 -0
  131. package/src/components/Heading/Heading.tsx +56 -50
  132. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +26 -7
  133. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
  134. package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
  135. package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
  136. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
  137. package/src/components/Hero/Hero.stories.mdx +125 -95
  138. package/src/components/Hero/Hero.test.tsx +33 -0
  139. package/src/components/Hero/Hero.tsx +135 -126
  140. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
  141. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
  142. package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -19
  143. package/src/components/HorizontalRule/HorizontalRule.tsx +9 -26
  144. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
  145. package/src/components/Icons/Icon.stories.mdx +31 -6
  146. package/src/components/Icons/Icon.test.tsx +38 -0
  147. package/src/components/Icons/Icon.tsx +93 -76
  148. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  149. package/src/components/Image/Image.stories.mdx +29 -5
  150. package/src/components/Image/Image.test.tsx +8 -0
  151. package/src/components/Image/Image.tsx +38 -26
  152. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  153. package/src/components/Label/Label.stories.mdx +42 -20
  154. package/src/components/Label/Label.test.tsx +42 -17
  155. package/src/components/Label/Label.tsx +22 -13
  156. package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
  157. package/src/components/Link/Link.stories.mdx +25 -1
  158. package/src/components/Link/Link.test.tsx +21 -0
  159. package/src/components/Link/Link.tsx +8 -8
  160. package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
  161. package/src/components/List/List.stories.mdx +75 -40
  162. package/src/components/List/List.test.tsx +67 -19
  163. package/src/components/List/List.tsx +38 -25
  164. package/src/components/List/ListTypes.tsx +1 -1
  165. package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
  166. package/src/components/Logo/Logo.stories.mdx +30 -6
  167. package/src/components/Logo/Logo.test.tsx +17 -0
  168. package/src/components/Logo/Logo.tsx +18 -6
  169. package/src/components/Logo/LogoSvgs.tsx +4 -0
  170. package/src/components/Logo/LogoTypes.tsx +2 -0
  171. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
  172. package/src/components/Modal/Modal.stories.mdx +13 -0
  173. package/src/components/Notification/Notification.stories.mdx +25 -1
  174. package/src/components/Notification/Notification.test.tsx +23 -0
  175. package/src/components/Notification/Notification.tsx +46 -44
  176. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
  177. package/src/components/Pagination/Pagination.stories.mdx +24 -4
  178. package/src/components/Pagination/Pagination.test.tsx +25 -0
  179. package/src/components/Pagination/Pagination.tsx +6 -6
  180. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
  181. package/src/components/Placeholder/Placeholder.tsx +3 -1
  182. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
  183. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +81 -11
  184. package/src/components/ProgressIndicator/ProgressIndicator.tsx +17 -9
  185. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
  186. package/src/components/Radio/Radio.stories.mdx +64 -12
  187. package/src/components/Radio/Radio.test.tsx +28 -8
  188. package/src/components/Radio/Radio.tsx +66 -63
  189. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +103 -6
  190. package/src/components/RadioGroup/RadioGroup.stories.mdx +224 -89
  191. package/src/components/RadioGroup/RadioGroup.test.tsx +122 -62
  192. package/src/components/RadioGroup/RadioGroup.tsx +106 -100
  193. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1236 -1020
  194. package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
  195. package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
  196. package/src/components/SearchBar/SearchBar.tsx +17 -8
  197. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
  198. package/src/components/Select/Select.stories.mdx +128 -49
  199. package/src/components/Select/Select.test.tsx +63 -16
  200. package/src/components/Select/Select.tsx +125 -92
  201. package/src/components/Select/SelectTypes.tsx +5 -0
  202. package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
  203. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +42 -10
  204. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +8 -0
  205. package/src/components/SkeletonLoader/SkeletonLoader.tsx +76 -72
  206. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
  207. package/src/components/Slider/Slider.stories.mdx +91 -42
  208. package/src/components/Slider/Slider.test.tsx +65 -17
  209. package/src/components/Slider/Slider.tsx +26 -19
  210. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
  211. package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
  212. package/src/components/StatusBadge/StatusBadge.test.tsx +16 -0
  213. package/src/components/StatusBadge/StatusBadge.tsx +25 -20
  214. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
  215. package/src/components/StructuredContent/StructuredContent.stories.mdx +131 -12
  216. package/src/components/StructuredContent/StructuredContent.test.tsx +34 -0
  217. package/src/components/StructuredContent/StructuredContent.tsx +80 -75
  218. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
  219. package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
  220. package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
  221. package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
  222. package/src/components/StyleGuide/ColorCard.tsx +1 -1
  223. package/src/components/StyleGuide/Colors.stories.mdx +1 -2
  224. package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
  225. package/src/components/StyleGuide/Forms.stories.mdx +27 -12
  226. package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
  227. package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
  228. package/src/components/StyleGuide/Typography.stories.mdx +30 -21
  229. package/src/components/Table/Table.stories.mdx +38 -11
  230. package/src/components/Table/Table.test.tsx +15 -0
  231. package/src/components/Table/Table.tsx +7 -7
  232. package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
  233. package/src/components/Tabs/Tabs.stories.mdx +52 -3
  234. package/src/components/Tabs/Tabs.test.tsx +16 -0
  235. package/src/components/Tabs/Tabs.tsx +10 -6
  236. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
  237. package/src/components/Template/Template.stories.mdx +47 -43
  238. package/src/components/Template/Template.test.tsx +33 -0
  239. package/src/components/Template/Template.tsx +65 -60
  240. package/src/components/Template/__snapshots__/Template.test.tsx.snap +191 -20
  241. package/src/components/Text/Text.stories.mdx +20 -1
  242. package/src/components/Text/Text.test.tsx +12 -0
  243. package/src/components/Text/Text.tsx +6 -4
  244. package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
  245. package/src/components/TextInput/TextInput.stories.mdx +65 -19
  246. package/src/components/TextInput/TextInput.test.tsx +42 -28
  247. package/src/components/TextInput/TextInput.tsx +121 -113
  248. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
  249. package/src/components/Toggle/Toggle.stories.mdx +80 -22
  250. package/src/components/Toggle/Toggle.test.tsx +27 -9
  251. package/src/components/Toggle/Toggle.tsx +22 -18
  252. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +128 -5
  253. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
  254. package/src/components/VideoPlayer/VideoPlayer.test.tsx +23 -0
  255. package/src/components/VideoPlayer/VideoPlayer.tsx +133 -126
  256. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
  257. package/src/docs/Chakra.stories.mdx +50 -9
  258. package/src/docs/Welcome.stories.mdx +160 -41
  259. package/src/hooks/useCarouselStyles.stories.mdx +22 -2
  260. package/src/hooks/useCarouselStyles.ts +3 -2
  261. package/src/hooks/useNYPLTheme.stories.mdx +101 -0
  262. package/src/hooks/useNYPLTheme.ts +30 -6
  263. package/src/hooks/useWindowSize.stories.mdx +23 -0
  264. package/src/index.ts +4 -1
  265. package/src/styles/base/_place-holder.scss +1 -1
  266. package/src/theme/components/button.ts +15 -7
  267. package/src/theme/components/card.ts +30 -19
  268. package/src/theme/components/checkbox.ts +10 -8
  269. package/src/theme/components/checkboxGroup.ts +1 -1
  270. package/src/theme/components/componentWrapper.ts +2 -2
  271. package/src/theme/components/customTable.ts +39 -31
  272. package/src/theme/components/fieldset.ts +1 -2
  273. package/src/theme/components/global.ts +25 -20
  274. package/src/theme/components/heading.ts +1 -1
  275. package/src/theme/components/helperErrorText.ts +1 -0
  276. package/src/theme/components/hero.ts +13 -15
  277. package/src/theme/components/label.ts +4 -3
  278. package/src/theme/components/list.ts +73 -66
  279. package/src/theme/components/notification.ts +2 -2
  280. package/src/theme/components/radio.ts +9 -9
  281. package/src/theme/components/radioGroup.ts +1 -1
  282. package/src/theme/components/select.ts +35 -22
  283. package/src/theme/components/skeletonLoader.ts +3 -3
  284. package/src/theme/components/slider.ts +8 -7
  285. package/src/theme/components/statusBadge.ts +2 -2
  286. package/src/theme/components/structuredContent.ts +66 -1
  287. package/src/theme/components/tabs.ts +2 -2
  288. package/src/theme/components/template.ts +9 -9
  289. package/src/theme/components/textInput.ts +13 -12
  290. package/src/theme/components/toggle.ts +17 -10
  291. package/src/theme/components/videoPlayer.ts +1 -1
  292. package/src/theme/foundations/colors.ts +1 -1
  293. package/src/theme/foundations/radii.ts +1 -0
  294. package/src/theme/foundations/spacing.ts +70 -22
  295. package/src/theme/foundations/typography.ts +2 -2
  296. package/src/utils/componentCategories.ts +1 -2
  297. package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
  298. package/dist/helpers/generateUUID.d.ts +0 -1
  299. package/src/helpers/generateUUID.tsx +0 -5
@@ -5,7 +5,6 @@ import { axe } from "jest-axe";
5
5
  import * as React from "react";
6
6
  import renderer from "react-test-renderer";
7
7
 
8
- import * as generateUUID from "../../helpers/generateUUID";
9
8
  import CheckboxGroup from "./CheckboxGroup";
10
9
  import Checkbox from "../Checkbox/Checkbox";
11
10
  import { LayoutTypes } from "../../helpers/enums";
@@ -13,11 +12,15 @@ import { LayoutTypes } from "../../helpers/enums";
13
12
  describe("CheckboxGroup Accessibility", () => {
14
13
  it("passes axe accessibility with string labels ", async () => {
15
14
  const { container } = render(
16
- <CheckboxGroup labelText="CheckboxGroup example" name="a11y-test">
17
- <Checkbox value="2" labelText="Checkbox 2" />
18
- <Checkbox value="3" labelText="Checkbox 3" />
19
- <Checkbox value="4" labelText="Checkbox 4" />
20
- <Checkbox value="5" labelText="Checkbox 5" />
15
+ <CheckboxGroup
16
+ id="checkboxGroup"
17
+ labelText="CheckboxGroup example"
18
+ name="a11y-test"
19
+ >
20
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
21
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
22
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
23
+ <Checkbox id="checkbox5" value="5" labelText="Checkbox 5" />
21
24
  </CheckboxGroup>
22
25
  );
23
26
  expect(await axe(container)).toHaveNoViolations();
@@ -61,10 +64,10 @@ describe("CheckboxGroup Accessibility", () => {
61
64
  describe("Checkbox", () => {
62
65
  it("renders with Checkbox inputs and a label", () => {
63
66
  render(
64
- <CheckboxGroup labelText="Test Label" name="test1">
65
- <Checkbox value="2" labelText="Checkbox 2" />
66
- <Checkbox value="3" labelText="Checkbox 3" />
67
- <Checkbox value="4" labelText="Checkbox 4" />
67
+ <CheckboxGroup id="checkboxGroup" labelText="Test Label" name="test1">
68
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
69
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
70
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
68
71
  </CheckboxGroup>
69
72
  );
70
73
  expect(screen.getByText(/Test Label/i)).toBeInTheDocument();
@@ -76,10 +79,10 @@ describe("Checkbox", () => {
76
79
 
77
80
  it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false", () => {
78
81
  const { rerender } = render(
79
- <CheckboxGroup labelText="Test Label" name="test2">
80
- <Checkbox value="2" labelText="Checkbox 2" />
81
- <Checkbox value="3" labelText="Checkbox 3" />
82
- <Checkbox value="4" labelText="Checkbox 4" />
82
+ <CheckboxGroup id="checkboxGroup" labelText="Test Label" name="test2">
83
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
84
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
85
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
83
86
  </CheckboxGroup>
84
87
  );
85
88
  expect(screen.getByTestId("checkbox-group")).not.toHaveAttribute(
@@ -88,10 +91,15 @@ describe("Checkbox", () => {
88
91
  );
89
92
 
90
93
  rerender(
91
- <CheckboxGroup labelText="Test Label" name="test2" showLabel={false}>
92
- <Checkbox value="2" labelText="Checkbox 2" />
93
- <Checkbox value="3" labelText="Checkbox 3" />
94
- <Checkbox value="4" labelText="Checkbox 4" />
94
+ <CheckboxGroup
95
+ id="checkboxGroup"
96
+ labelText="Test Label"
97
+ name="test2"
98
+ showLabel={false}
99
+ >
100
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
101
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
102
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
95
103
  </CheckboxGroup>
96
104
  );
97
105
  expect(screen.getByTestId("checkbox-group")).toHaveAttribute(
@@ -103,14 +111,15 @@ describe("Checkbox", () => {
103
111
  it("renders visible helper or error text", () => {
104
112
  const { rerender } = render(
105
113
  <CheckboxGroup
114
+ id="checkboxGroup"
106
115
  labelText="Test Label"
107
116
  name="test3"
108
117
  helperText="This is the helper text for the full group."
109
118
  invalidText="This is the error text :("
110
119
  >
111
- <Checkbox value="2" labelText="Checkbox 2" />
112
- <Checkbox value="3" labelText="Checkbox 3" />
113
- <Checkbox value="4" labelText="Checkbox 4" />
120
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
121
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
122
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
114
123
  </CheckboxGroup>
115
124
  );
116
125
  expect(
@@ -122,15 +131,16 @@ describe("Checkbox", () => {
122
131
 
123
132
  rerender(
124
133
  <CheckboxGroup
134
+ id="checkboxGroup"
125
135
  labelText="Test Label"
126
136
  name="test3"
127
137
  helperText="This is the helper text for the full group."
128
138
  invalidText="This is the error text :("
129
139
  isInvalid
130
140
  >
131
- <Checkbox value="2" labelText="Checkbox 2" />
132
- <Checkbox value="3" labelText="Checkbox 3" />
133
- <Checkbox value="4" labelText="Checkbox 4" />
141
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
142
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
143
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
134
144
  </CheckboxGroup>
135
145
  );
136
146
  expect(screen.getByText("This is the error text :(")).toBeVisible();
@@ -142,7 +152,7 @@ describe("Checkbox", () => {
142
152
  it("sets the CheckboxGroup's ID", () => {
143
153
  render(
144
154
  <CheckboxGroup labelText="Test Label" name="test5" id="some-id">
145
- <Checkbox value="2" labelText="Checkbox 2" />
155
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
146
156
  </CheckboxGroup>
147
157
  );
148
158
 
@@ -160,14 +170,15 @@ describe("Checkbox", () => {
160
170
  };
161
171
  render(
162
172
  <CheckboxGroup
173
+ id="checkboxGroup"
163
174
  labelText="Test Label"
164
175
  name="getValue"
165
176
  defaultValue={["4"]}
166
177
  onChange={onChange}
167
178
  >
168
- <Checkbox value="2" labelText="Checkbox 2" />
169
- <Checkbox value="3" labelText="Checkbox 3" />
170
- <Checkbox value="4" labelText="Checkbox 4" />
179
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
180
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
181
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
171
182
  </CheckboxGroup>
172
183
  );
173
184
 
@@ -182,23 +193,17 @@ describe("Checkbox", () => {
182
193
  expect(newValue).toEqual(["4", "2"]);
183
194
  });
184
195
 
185
- it("calls the UUID generation function if no id prop value is passed", () => {
186
- const generateUUIDSpy = jest.spyOn(generateUUID, "default");
187
- expect(generateUUIDSpy).toHaveBeenCalledTimes(0);
188
- render(
189
- <CheckboxGroup labelText="Test Label" name="test6">
190
- <Checkbox value="2" labelText="Checkbox 2" />
191
- </CheckboxGroup>
192
- );
193
- expect(generateUUIDSpy).toHaveBeenCalledTimes(1);
194
- });
195
-
196
196
  it("sets the 'disabled' attribute for all its Checkbox children", () => {
197
197
  render(
198
- <CheckboxGroup labelText="Test Label" name="test7" isDisabled>
199
- <Checkbox value="2" labelText="Checkbox 2" />
200
- <Checkbox value="3" labelText="Checkbox 3" />
201
- <Checkbox value="4" labelText="Checkbox 4" />
198
+ <CheckboxGroup
199
+ id="checkboxGroup"
200
+ labelText="Test Label"
201
+ name="test7"
202
+ isDisabled
203
+ >
204
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
205
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
206
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
202
207
  </CheckboxGroup>
203
208
  );
204
209
  const Checkboxes = screen.getAllByRole("checkbox");
@@ -211,10 +216,15 @@ describe("Checkbox", () => {
211
216
 
212
217
  it("sets the 'required' attribute for all its Checkbox children", () => {
213
218
  render(
214
- <CheckboxGroup labelText="Test Label" name="test8" isRequired>
215
- <Checkbox value="2" labelText="Checkbox 2" />
216
- <Checkbox value="3" labelText="Checkbox 3" />
217
- <Checkbox value="4" labelText="Checkbox 4" />
219
+ <CheckboxGroup
220
+ id="checkboxGroup"
221
+ labelText="Test Label"
222
+ name="test8"
223
+ isRequired
224
+ >
225
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
226
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
227
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
218
228
  </CheckboxGroup>
219
229
  );
220
230
  const Checkboxes = screen.getAllByRole("checkbox");
@@ -228,14 +238,15 @@ describe("Checkbox", () => {
228
238
  it("sets the error state for all its Checkbox children", () => {
229
239
  render(
230
240
  <CheckboxGroup
241
+ id="checkboxGroup"
231
242
  labelText="Test Label"
232
243
  name="test9"
233
244
  isInvalid
234
245
  invalidText="There's an error!"
235
246
  >
236
- <Checkbox value="2" labelText="Checkbox 2" />
237
- <Checkbox value="3" labelText="Checkbox 3" />
238
- <Checkbox value="4" labelText="Checkbox 4" />
247
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
248
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
249
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
239
250
  </CheckboxGroup>
240
251
  );
241
252
  const Checkboxes = screen.getAllByRole("checkbox");
@@ -249,15 +260,16 @@ describe("Checkbox", () => {
249
260
  it("does not render the invalid text when 'isInvalid' is true but 'showHelperInvalidText' is false", () => {
250
261
  render(
251
262
  <CheckboxGroup
263
+ id="checkboxGroup"
252
264
  labelText="Test Label"
253
265
  name="test9"
254
266
  isInvalid
255
267
  invalidText="There's an error!"
256
268
  showHelperInvalidText={false}
257
269
  >
258
- <Checkbox value="2" labelText="Checkbox 2" />
259
- <Checkbox value="3" labelText="Checkbox 3" />
260
- <Checkbox value="4" labelText="Checkbox 4" />
270
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
271
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
272
+ <Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
261
273
  </CheckboxGroup>
262
274
  );
263
275
  const Checkboxes = screen.getAllByRole("checkbox");
@@ -268,12 +280,26 @@ describe("Checkbox", () => {
268
280
  expect(Checkboxes[2]).toHaveAttribute("aria-invalid");
269
281
  });
270
282
 
283
+ it("logs a warning when there is no `id` passed", () => {
284
+ const warn = jest.spyOn(console, "warn");
285
+ render(
286
+ // @ts-ignore: Typescript complains when a required prop is not passed, but
287
+ // here we don't want to pass the required prop to make sure the warning appears.
288
+ <CheckboxGroup labelText="column" name="column">
289
+ <Checkbox id="checkbox1" value="1" labelText="Checkbox 1" />
290
+ </CheckboxGroup>
291
+ );
292
+ expect(warn).toHaveBeenCalledWith(
293
+ "NYPL Reservoir CheckboxGroup: This component's required `id` prop was not passed."
294
+ );
295
+ });
296
+
271
297
  it("renders the UI snapshot correctly", () => {
272
298
  const column = renderer
273
299
  .create(
274
300
  <CheckboxGroup labelText="column" name="column" id="column">
275
- <Checkbox value="2" labelText="Checkbox 2" />
276
- <Checkbox value="3" labelText="Checkbox 3" />
301
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
302
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
277
303
  </CheckboxGroup>
278
304
  )
279
305
  .toJSON();
@@ -285,8 +311,8 @@ describe("Checkbox", () => {
285
311
  id="row"
286
312
  layout={LayoutTypes.Row}
287
313
  >
288
- <Checkbox value="2" labelText="Checkbox 2" />
289
- <Checkbox value="3" labelText="Checkbox 3" />
314
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
315
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
290
316
  </CheckboxGroup>
291
317
  )
292
318
  .toJSON();
@@ -298,8 +324,8 @@ describe("Checkbox", () => {
298
324
  id="noLabel"
299
325
  showLabel={false}
300
326
  >
301
- <Checkbox value="2" labelText="Checkbox 2" />
302
- <Checkbox value="3" labelText="Checkbox 3" />
327
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
328
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
303
329
  </CheckboxGroup>
304
330
  )
305
331
  .toJSON();
@@ -311,8 +337,8 @@ describe("Checkbox", () => {
311
337
  id="helperText"
312
338
  helperText="helper text"
313
339
  >
314
- <Checkbox value="2" labelText="Checkbox 2" />
315
- <Checkbox value="3" labelText="Checkbox 3" />
340
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
341
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
316
342
  </CheckboxGroup>
317
343
  )
318
344
  .toJSON();
@@ -324,34 +350,35 @@ describe("Checkbox", () => {
324
350
  id="invalidText"
325
351
  invalidText="error text"
326
352
  >
327
- <Checkbox value="2" labelText="Checkbox 2" />
328
- <Checkbox value="3" labelText="Checkbox 3" />
353
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
354
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
329
355
  </CheckboxGroup>
330
356
  )
331
357
  .toJSON();
332
- const noOptReqLabel = renderer
358
+ const isRequired = renderer
333
359
  .create(
334
360
  <CheckboxGroup
335
- labelText="no optional or required label"
336
- name="optReq"
337
- id="optReq"
338
- optReqFlag={false}
361
+ labelText="required"
362
+ name="required"
363
+ id="required"
364
+ isRequired
339
365
  >
340
- <Checkbox value="2" labelText="Checkbox 2" />
341
- <Checkbox value="3" labelText="Checkbox 3" />
366
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
367
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
342
368
  </CheckboxGroup>
343
369
  )
344
370
  .toJSON();
345
- const isRequired = renderer
371
+ const noRequiredLabel = renderer
346
372
  .create(
347
373
  <CheckboxGroup
348
- labelText="required"
349
- name="required"
350
- id="required"
374
+ labelText="no optional or required label"
375
+ name="noRequiredLabel"
376
+ id="noRequiredLabel"
351
377
  isRequired
378
+ showRequiredLabel={false}
352
379
  >
353
- <Checkbox value="2" labelText="Checkbox 2" />
354
- <Checkbox value="3" labelText="Checkbox 3" />
380
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
381
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
355
382
  </CheckboxGroup>
356
383
  )
357
384
  .toJSON();
@@ -363,8 +390,8 @@ describe("Checkbox", () => {
363
390
  id="invalid"
364
391
  isInvalid
365
392
  >
366
- <Checkbox value="2" labelText="Checkbox 2" />
367
- <Checkbox value="3" labelText="Checkbox 3" />
393
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
394
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
368
395
  </CheckboxGroup>
369
396
  )
370
397
  .toJSON();
@@ -376,8 +403,8 @@ describe("Checkbox", () => {
376
403
  id="disabled"
377
404
  isDisabled
378
405
  >
379
- <Checkbox value="2" labelText="Checkbox 2" />
380
- <Checkbox value="3" labelText="Checkbox 3" />
406
+ <Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
407
+ <Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
381
408
  </CheckboxGroup>
382
409
  )
383
410
  .toJSON();
@@ -414,17 +441,46 @@ describe("Checkbox", () => {
414
441
  </CheckboxGroup>
415
442
  )
416
443
  .toJSON();
444
+ const withChakraProps = renderer
445
+ .create(
446
+ <CheckboxGroup
447
+ labelText="chakraProps"
448
+ name="chakraProps"
449
+ id="chakraProps"
450
+ p="s"
451
+ color="ui.error.primary"
452
+ >
453
+ <Checkbox id="2" value="2" labelText="Checkbox 2" />
454
+ <Checkbox id="3" value="3" labelText="Checkbox 3" />
455
+ </CheckboxGroup>
456
+ )
457
+ .toJSON();
458
+ const withOtherProps = renderer
459
+ .create(
460
+ <CheckboxGroup
461
+ labelText="otherProps"
462
+ name="otherProps"
463
+ id="otherProps"
464
+ data-testid="props"
465
+ >
466
+ <Checkbox id="2" value="2" labelText="Checkbox 2" />
467
+ <Checkbox id="3" value="3" labelText="Checkbox 3" />
468
+ </CheckboxGroup>
469
+ )
470
+ .toJSON();
417
471
 
418
472
  expect(column).toMatchSnapshot();
419
473
  expect(row).toMatchSnapshot();
420
474
  expect(noLabel).toMatchSnapshot();
421
475
  expect(helperText).toMatchSnapshot();
422
476
  expect(invalidText).toMatchSnapshot();
423
- expect(noOptReqLabel).toMatchSnapshot();
477
+ expect(noRequiredLabel).toMatchSnapshot();
424
478
  expect(isRequired).toMatchSnapshot();
425
479
  expect(isInvalid).toMatchSnapshot();
426
480
  expect(isDisabled).toMatchSnapshot();
427
481
  expect(withJSXCheckboxLabels).toMatchSnapshot();
482
+ expect(withChakraProps).toMatchSnapshot();
483
+ expect(withOtherProps).toMatchSnapshot();
428
484
  });
429
485
 
430
486
  it("should throw warning when a non-Checkbox component is used as a child", () => {
@@ -1,10 +1,10 @@
1
- import * as React from "react";
2
1
  import {
3
- Box,
2
+ chakra,
4
3
  CheckboxGroup as ChakraCheckboxGroup,
5
4
  Stack,
6
5
  useMultiStyleConfig,
7
6
  } from "@chakra-ui/react";
7
+ import * as React from "react";
8
8
 
9
9
  import Checkbox from "../Checkbox/Checkbox";
10
10
  import Fieldset from "../Fieldset/Fieldset";
@@ -13,8 +13,6 @@ import HelperErrorText, {
13
13
  } from "../HelperErrorText/HelperErrorText";
14
14
  import { LayoutTypes } from "../../helpers/enums";
15
15
  import { spacing } from "../../theme/foundations/spacing";
16
- import generateUUID from "../../helpers/generateUUID";
17
-
18
16
  export interface CheckboxGroupProps {
19
17
  /** Any child node passed to the component. */
20
18
  children: React.ReactNode;
@@ -23,7 +21,7 @@ export interface CheckboxGroupProps {
23
21
  /** Optional string to populate the HelperErrorText for standard state */
24
22
  helperText?: HelperErrorTextType;
25
23
  /** ID that other components can cross reference for accessibility purposes */
26
- id?: string;
24
+ id: string;
27
25
  /** Optional string to populate the HelperErrorText for error state */
28
26
  invalidText?: HelperErrorTextType;
29
27
  /** Adds the 'disabled' prop to the input when true. */
@@ -44,13 +42,14 @@ export interface CheckboxGroupProps {
44
42
  name: string;
45
43
  /** The action to perform on the `<input>`'s onChange function */
46
44
  onChange?: (value: string[]) => void;
47
- /** Whether or not to display "Required"/"Optional" in the label text. */
48
- optReqFlag?: boolean;
49
45
  /** Offers the ability to hide the helper/invalid text. */
50
46
  showHelperInvalidText?: boolean;
51
47
  /** Offers the ability to show the group's legend onscreen or hide it. Refer
52
48
  * to the `labelText` property for more information. */
53
49
  showLabel?: boolean;
50
+ /** Whether or not to display the "(Required)" text in the label text.
51
+ * True by default. */
52
+ showRequiredLabel?: boolean;
54
53
  }
55
54
 
56
55
  const noop = () => {};
@@ -61,13 +60,13 @@ const noop = () => {};
61
60
  * wrapping and associated text elements, but the checkbox input elements
62
61
  * _need_ to be child `Checkbox` components from the NYPL Design System.
63
62
  */
64
- const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
65
- (props, ref?) => {
63
+ export const CheckboxGroup = chakra(
64
+ React.forwardRef<HTMLInputElement, CheckboxGroupProps>((props, ref?) => {
66
65
  const {
67
66
  children,
68
67
  defaultValue = [],
69
68
  helperText,
70
- id = generateUUID(),
69
+ id,
71
70
  invalidText,
72
71
  isDisabled = false,
73
72
  isFullWidth = false,
@@ -77,12 +76,16 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
77
76
  layout = LayoutTypes.Column,
78
77
  name,
79
78
  onChange,
80
- optReqFlag = true,
81
79
  showHelperInvalidText = true,
82
80
  showLabel = true,
81
+ showRequiredLabel = true,
82
+ ...rest
83
83
  } = props;
84
84
  const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
85
- const spacingProp = layout === LayoutTypes.Column ? spacing.s : spacing.l;
85
+ const spacingProp =
86
+ layout === LayoutTypes.Column
87
+ ? spacing.input.group.default.vstack
88
+ : spacing.input.group.default.hstack;
86
89
  const newChildren = [];
87
90
  const checkboxProps =
88
91
  defaultValue && onChange
@@ -92,6 +95,12 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
92
95
  }
93
96
  : {};
94
97
 
98
+ if (!id) {
99
+ console.warn(
100
+ "NYPL Reservoir CheckboxGroup: This component's required `id` prop was not passed."
101
+ );
102
+ }
103
+
95
104
  // Go through the Checkbox children and update them as needed.
96
105
  React.Children.map(children, (child: React.ReactElement, i) => {
97
106
  if (child.type !== Checkbox) {
@@ -126,8 +135,10 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
126
135
  <Fieldset
127
136
  id={`${id}-checkbox-group`}
128
137
  isLegendHidden={!showLabel}
138
+ isRequired={isRequired}
129
139
  legendText={labelText}
130
- optReqFlag={optReqFlag}
140
+ showRequiredLabel={showRequiredLabel}
141
+ {...rest}
131
142
  >
132
143
  <ChakraCheckboxGroup {...checkboxProps}>
133
144
  <Stack
@@ -143,17 +154,16 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
143
154
  </Stack>
144
155
  </ChakraCheckboxGroup>
145
156
  {footnote && showHelperInvalidText && (
146
- <Box __css={styles.helper}>
147
- <HelperErrorText
148
- id={`${id}-helperErrorText`}
149
- isInvalid={isInvalid}
150
- text={footnote}
151
- />
152
- </Box>
157
+ <HelperErrorText
158
+ additionalStyles={styles.helperErrorText}
159
+ id={`${id}-helperErrorText`}
160
+ isInvalid={isInvalid}
161
+ text={footnote}
162
+ />
153
163
  )}
154
164
  </Fieldset>
155
165
  );
156
- }
166
+ })
157
167
  );
158
168
 
159
169
  export default CheckboxGroup;