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