@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,4 +1,4 @@
1
- import { Box } from "@chakra-ui/react";
1
+ import { Box, VStack } from "@chakra-ui/react";
2
2
  import {
3
3
  ArgsTable,
4
4
  Canvas,
@@ -19,10 +19,7 @@ import { getCategory } from "../../utils/componentCategories";
19
19
  argTypes={{
20
20
  className: { control: false },
21
21
  id: { control: false },
22
- optReqFlag: {
23
- control: { type: "select" },
24
- options: ["Required", "Optional", ""],
25
- },
22
+ isInlined: { table: { disable: true } },
26
23
  text: {
27
24
  description: "Only used for Storybook",
28
25
  },
@@ -34,10 +31,21 @@ import { getCategory } from "../../utils/componentCategories";
34
31
  | Component Version | DS Version |
35
32
  | ----------------- | ---------- |
36
33
  | Added | `0.0.10` |
37
- | Latest | `0.25.8` |
34
+ | Latest | `0.26.0` |
35
+
36
+ ## Table of Contents
37
+
38
+ - [Overview](#overview)
39
+ - [Component Props](#component-props)
40
+ - [Accessibility](#accessibility)
41
+ - [isRequired helper text](#isrequired-helper-text)
42
+
43
+ ## Overview
38
44
 
39
45
  <Description of={Label} />
40
46
 
47
+ ## Component Props
48
+
41
49
  <Canvas>
42
50
  <Story
43
51
  name="Label with Controls"
@@ -45,7 +53,7 @@ import { getCategory } from "../../utils/componentCategories";
45
53
  className: undefined,
46
54
  htmlFor: "id-of-input-element",
47
55
  id: "label-id",
48
- optReqFlag: "Required",
56
+ isRequired: false,
49
57
  text: "A label for a villager.",
50
58
  }}
51
59
  >
@@ -55,24 +63,38 @@ import { getCategory } from "../../utils/componentCategories";
55
63
 
56
64
  <ArgsTable story="Label with Controls" />
57
65
 
58
- ## Required/Optional helper text
66
+ ## Accessibility
67
+
68
+ The `Label` component is an accessible HTML `<label>` element. The JSX prop
69
+ `htmlFor` should be set to the `id` of the input element that the label is
70
+ associated with. This is the proper way to label inputs so that screenreaders
71
+ can read the label, without the use of the `aria-label` attribute on the input
72
+ element.
73
+
74
+ Note: All form-related Reservoir components already implement this `Label`
75
+ component so there is no need to use this component unless if you are building
76
+ a new form-related input component.
77
+
78
+ Resources:
79
+
80
+ - [WebAIM Creating Accessible Forms](https://webaim.org/techniques/forms/advanced)
81
+
82
+ ## isRequired helper text
59
83
 
60
84
  An optional helper string can be rendered at the end of the `Label` text through
61
- the `optReqFlag` prop. Pass in either `"Required"`, `"Optional"`, or `""`. The
62
- default value is undefined for no helper text to appear.
85
+ the `isRequired` prop. This is useful for visually labeling a field as required
86
+ with the `"(Required)"` text next to the label's text. This is set to `false`
87
+ by default.
63
88
 
64
89
  <Canvas>
65
- <Story name="Required/Optional helper text">
66
- <Box width="300px">
67
- <Label htmlFor="some-id1" optReqFlag="">
68
- No text
69
- </Label>
70
- <Label htmlFor="some-id2" optReqFlag="Required">
71
- Required helper text
90
+ <Story name="isRequired helper text">
91
+ <VStack>
92
+ <Label htmlFor="label-id1" id="regular">
93
+ A regular label
72
94
  </Label>
73
- <Label htmlFor="some-id3" optReqFlag="Optional">
74
- Optional helper text
95
+ <Label htmlFor="label-id2" id="required" isRequired>
96
+ A label that is required
75
97
  </Label>
76
- </Box>
98
+ </VStack>
77
99
  </Story>
78
100
  </Canvas>
@@ -14,6 +14,15 @@ describe("Label Accessibility", () => {
14
14
  );
15
15
  expect(await axe(container)).toHaveNoViolations();
16
16
  });
17
+
18
+ it("passes axe accessibility test with required text", async () => {
19
+ const { container } = render(
20
+ <Label id="label" htmlFor="some-input-id" isRequired>
21
+ Cupcakes
22
+ </Label>
23
+ );
24
+ expect(await axe(container)).toHaveNoViolations();
25
+ });
17
26
  });
18
27
 
19
28
  describe("Label", () => {
@@ -35,30 +44,33 @@ describe("Label", () => {
35
44
  expect(screen.getByText("Cupcakes")).toBeInTheDocument();
36
45
  });
37
46
 
38
- it("renders the optional or required helper text", () => {
47
+ it("renders the '(Required)' helper text", () => {
39
48
  const { rerender } = render(
40
49
  <Label id="label" htmlFor="some-input-id">
41
50
  <span>Cupcakes</span>
42
51
  </Label>
43
52
  );
44
- expect(screen.queryByText("Optional")).not.toBeInTheDocument();
45
- expect(screen.queryByText("Required")).not.toBeInTheDocument();
53
+ expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
46
54
 
47
55
  rerender(
48
- <Label id="label2" htmlFor="some-input-id" optReqFlag="Optional">
56
+ <Label id="label" htmlFor="some-input-id" isRequired>
49
57
  <span>Cupcakes</span>
50
58
  </Label>
51
59
  );
52
- expect(screen.getByText("Optional")).toBeInTheDocument();
53
- expect(screen.queryByText("Required")).not.toBeInTheDocument();
54
60
 
55
- rerender(
56
- <Label id="label3" htmlFor="some-input-id" optReqFlag="Required">
57
- <span>Cupcakes</span>
58
- </Label>
61
+ expect(screen.queryByText(/Required/i)).toBeInTheDocument();
62
+ });
63
+
64
+ it("Logs a warning when there is no `id` passed", () => {
65
+ const warn = jest.spyOn(console, "warn");
66
+ render(
67
+ // @ts-ignore: Typescript complains when a required prop is not passed, but
68
+ // here we don't want to pass the required prop to make sure the warning appears.
69
+ <Label htmlFor="some-input-id">Cupcakes</Label>
70
+ );
71
+ expect(warn).toHaveBeenCalledWith(
72
+ "NYPL Reservoir Label: This component's required `id` prop was not passed."
59
73
  );
60
- expect(screen.queryByText("Optional")).not.toBeInTheDocument();
61
- expect(screen.getByText("Required")).toBeInTheDocument();
62
74
  });
63
75
 
64
76
  it("Renders the UI snapshot correctly", () => {
@@ -69,23 +81,36 @@ describe("Label", () => {
69
81
  </Label>
70
82
  )
71
83
  .toJSON();
72
- const optional = renderer
84
+ const required = renderer
73
85
  .create(
74
- <Label id="label2" htmlFor="some-input-id" optReqFlag="Optional">
86
+ <Label id="label3" htmlFor="some-input-id" isRequired>
75
87
  Cupcakes
76
88
  </Label>
77
89
  )
78
90
  .toJSON();
79
- const required = renderer
91
+ const withChakraProps = renderer
92
+ .create(
93
+ <Label
94
+ id="chakra"
95
+ htmlFor="some-input-id"
96
+ p="20px"
97
+ color="ui.error.primary"
98
+ >
99
+ Cupcakes
100
+ </Label>
101
+ )
102
+ .toJSON();
103
+ const withOtherProps = renderer
80
104
  .create(
81
- <Label id="label3" htmlFor="some-input-id" optReqFlag="Required">
105
+ <Label id="props" htmlFor="some-input-id" data-testid="props">
82
106
  Cupcakes
83
107
  </Label>
84
108
  )
85
109
  .toJSON();
86
110
 
87
111
  expect(simple).toMatchSnapshot();
88
- expect(optional).toMatchSnapshot();
89
112
  expect(required).toMatchSnapshot();
113
+ expect(withChakraProps).toMatchSnapshot();
114
+ expect(withOtherProps).toMatchSnapshot();
90
115
  });
91
116
  });
@@ -1,9 +1,5 @@
1
+ import { Box, chakra, useStyleConfig } from "@chakra-ui/react";
1
2
  import * as React from "react";
2
- import { Box, useMultiStyleConfig } from "@chakra-ui/react";
3
-
4
- import generateUUID from "../../helpers/generateUUID";
5
-
6
- type optReqFlagType = "Required" | "Optional" | "" | undefined;
7
3
 
8
4
  interface LabelProps {
9
5
  /** Additional CSS class name to render in the `label` element. */
@@ -12,22 +8,34 @@ interface LabelProps {
12
8
  htmlFor: string;
13
9
  /** ID that other components can cross reference for accessibility purposes */
14
10
  id?: string;
15
- /** Displays "Required" or "Optional" string alongside the label */
16
- optReqFlag?: optReqFlagType;
11
+ /** Controls whether the label should be inline with the input it goes with.
12
+ * This prop should only be used internally. */
13
+ isInlined?: boolean;
14
+ /** Controls whether the "(Required)" text should be displayed alongside the
15
+ * label's text. False by default. */
16
+ isRequired?: boolean;
17
17
  }
18
18
 
19
19
  /**
20
20
  * A label for form inputs. It should never be used alone.
21
21
  */
22
- function Label(props: React.PropsWithChildren<LabelProps>) {
22
+ export const Label = chakra((props: React.PropsWithChildren<LabelProps>) => {
23
23
  const {
24
24
  children,
25
25
  className,
26
26
  htmlFor,
27
- id = generateUUID(),
28
- optReqFlag,
27
+ id,
28
+ isInlined = false,
29
+ isRequired = false,
30
+ ...rest
29
31
  } = props;
30
- const styles = useMultiStyleConfig("Label", {});
32
+ const styles = useStyleConfig("Label", { isInlined });
33
+
34
+ if (!id) {
35
+ console.warn(
36
+ "NYPL Reservoir Label: This component's required `id` prop was not passed."
37
+ );
38
+ }
31
39
 
32
40
  return (
33
41
  <Box
@@ -36,11 +44,12 @@ function Label(props: React.PropsWithChildren<LabelProps>) {
36
44
  className={className}
37
45
  htmlFor={htmlFor}
38
46
  __css={styles}
47
+ {...rest}
39
48
  >
40
49
  {children}
41
- {optReqFlag && <Box __css={styles.helper}>{optReqFlag}</Box>}
50
+ {isRequired && <span> (Required)</span>}
42
51
  </Box>
43
52
  );
44
- }
53
+ });
45
54
 
46
55
  export default Label;
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports[`Label Renders the UI snapshot correctly 1`] = `
4
4
  <label
5
- className="css-0"
5
+ className="css-1xdhyk6"
6
6
  htmlFor="some-input-id"
7
7
  id="label"
8
8
  >
@@ -12,30 +12,34 @@ exports[`Label Renders the UI snapshot correctly 1`] = `
12
12
 
13
13
  exports[`Label Renders the UI snapshot correctly 2`] = `
14
14
  <label
15
- className="css-0"
15
+ className="css-1xdhyk6"
16
16
  htmlFor="some-input-id"
17
- id="label2"
17
+ id="label3"
18
18
  >
19
19
  Cupcakes
20
- <div
21
- className="css-0"
22
- >
23
- Optional
24
- </div>
20
+ <span>
21
+ (Required)
22
+ </span>
25
23
  </label>
26
24
  `;
27
25
 
28
26
  exports[`Label Renders the UI snapshot correctly 3`] = `
29
27
  <label
30
- className="css-0"
28
+ className="css-kle7zy"
31
29
  htmlFor="some-input-id"
32
- id="label3"
30
+ id="chakra"
31
+ >
32
+ Cupcakes
33
+ </label>
34
+ `;
35
+
36
+ exports[`Label Renders the UI snapshot correctly 4`] = `
37
+ <label
38
+ className="css-1xdhyk6"
39
+ data-testid="props"
40
+ htmlFor="some-input-id"
41
+ id="props"
33
42
  >
34
43
  Cupcakes
35
- <div
36
- className="css-0"
37
- >
38
- Required
39
- </div>
40
44
  </label>
41
45
  `;
@@ -52,10 +52,23 @@ export const enumValues = getStorybookEnumValues(LinkTypes, "LinkTypes");
52
52
  | Component Version | DS Version |
53
53
  | ----------------- | ---------- |
54
54
  | Added | `0.0.4` |
55
- | Latest | `0.25.9` |
55
+ | Latest | `0.26.0` |
56
+
57
+ ## Table of Contents
58
+
59
+ - [Overview](#overview)
60
+ - [Component Props](#component-props)
61
+ - [Accessibility](#accessibility)
62
+ - [Links With Icons](#links-with-icons)
63
+ - [Anchor Element Rendering](#anchor-element-rendering)
64
+ - [Link with Routers](#link-with-routers)
65
+
66
+ ## Overview
56
67
 
57
68
  <Description of={Link} />
58
69
 
70
+ ## Component Props
71
+
59
72
  <Canvas withToolbar>
60
73
  <Story
61
74
  name="Link with Controls"
@@ -81,6 +94,17 @@ export const enumValues = getStorybookEnumValues(LinkTypes, "LinkTypes");
81
94
 
82
95
  <ArgsTable story="Link with Controls" />
83
96
 
97
+ ## Accessibility
98
+
99
+ The `Link` component should be used for navigation. If an `onClick` user
100
+ interface action is required, a `Button` component should be used instead. The
101
+ `Link` component renders an `<a>` element with the `href` attribute.
102
+
103
+ Resources:
104
+
105
+ - [W3C WAI Link Examples](https://www.w3.org/TR/wai-aria-practices-1.1/examples/link/link.html)
106
+ - [Yale Usability & Web Accessibility Links](https://usability.yale.edu/web-accessibility/articles/links)
107
+
84
108
  ## Links With Icons
85
109
 
86
110
  To render an `Icon` as part of the link, make sure that the `Link` component
@@ -229,6 +229,25 @@ describe("Link", () => {
229
229
  </Link>
230
230
  )
231
231
  .toJSON();
232
+ const withChakraProps = renderer
233
+ .create(
234
+ <Link
235
+ href="#passed-in-link"
236
+ id="chakra"
237
+ p="20px"
238
+ color="ui.error.primary"
239
+ >
240
+ Standard
241
+ </Link>
242
+ )
243
+ .toJSON();
244
+ const withOtherProps = renderer
245
+ .create(
246
+ <Link href="#passed-in-link" id="props" data-testid="props">
247
+ Standard
248
+ </Link>
249
+ )
250
+ .toJSON();
232
251
 
233
252
  expect(standard).toMatchSnapshot();
234
253
  expect(typeForwards).toMatchSnapshot();
@@ -238,6 +257,8 @@ describe("Link", () => {
238
257
  expect(withIconChild).toMatchSnapshot();
239
258
  expect(withAchorChild).toMatchSnapshot();
240
259
  expect(withAchorChildAndIcon).toMatchSnapshot();
260
+ expect(withChakraProps).toMatchSnapshot();
261
+ expect(withOtherProps).toMatchSnapshot();
241
262
  });
242
263
 
243
264
  // TODO:
@@ -1,11 +1,14 @@
1
+ import { Box, chakra, useStyleConfig } from "@chakra-ui/react";
1
2
  import * as React from "react";
2
- import { Box, useStyleConfig } from "@chakra-ui/react";
3
3
 
4
4
  import { LinkTypes } from "./LinkTypes";
5
5
  import Icon from "../Icons/Icon";
6
- import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
7
- import generateUUID from "../../helpers/generateUUID";
8
-
6
+ import {
7
+ IconRotationTypes,
8
+ IconNames,
9
+ IconAlign,
10
+ IconSizes,
11
+ } from "../Icons/IconTypes";
9
12
  export interface LinkProps {
10
13
  /** Optionally pass in additional Chakra-based styles. */
11
14
  additionalStyles?: { [key: string]: any };
@@ -51,6 +54,7 @@ function getWithDirectionIcon(children, type: LinkTypes, linkId) {
51
54
  iconRotation={iconRotation}
52
55
  id={iconId}
53
56
  name={IconNames.Arrow}
57
+ size={IconSizes.Medium}
54
58
  />
55
59
  );
56
60
 
@@ -71,6 +75,7 @@ function getExternalIcon(children, linkId) {
71
75
  className="more-link"
72
76
  id={iconId}
73
77
  name={IconNames.ActionLaunch}
78
+ size={IconSizes.Medium}
74
79
  />
75
80
  );
76
81
 
@@ -86,16 +91,17 @@ function getExternalIcon(children, linkId) {
86
91
  * A component that uses an `href` prop or a child anchor element, to create
87
92
  * an anchor element with added styling and conventions.
88
93
  */
89
- const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
90
- (props, ref: any) => {
94
+ export const Link = chakra(
95
+ React.forwardRef<HTMLAnchorElement, LinkProps>((props, ref: any) => {
91
96
  const {
92
97
  additionalStyles = {},
93
98
  attributes,
94
99
  children,
95
100
  className,
96
101
  href,
97
- id = generateUUID(),
102
+ id,
98
103
  type = LinkTypes.Default,
104
+ ...rest
99
105
  } = props;
100
106
 
101
107
  // Merge the necessary props alongside any extra props for the
@@ -145,7 +151,7 @@ const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
145
151
  const childrenToClone: any = children[0] ? children[0] : children;
146
152
  const childProps = childrenToClone.props;
147
153
  return (
148
- <Box as="span" __css={style}>
154
+ <Box as="span" __css={style} {...rest}>
149
155
  {React.cloneElement(
150
156
  childrenToClone,
151
157
  {
@@ -173,12 +179,13 @@ const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
173
179
  target={target}
174
180
  {...linkProps}
175
181
  __css={{ ...style, ...additionalStyles }}
182
+ {...rest}
176
183
  >
177
184
  {newChildren}
178
185
  </Box>
179
186
  );
180
187
  }
181
- }
188
+ })
182
189
  );
183
190
 
184
191
  export default Link;
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports[`Link renders the UI snapshot correctly 1`] = `
4
4
  <a
5
- className="css-0"
5
+ className="css-1xdhyk6"
6
6
  href="#passed-in-link"
7
7
  id="standard-link"
8
8
  rel={null}
@@ -14,7 +14,7 @@ exports[`Link renders the UI snapshot correctly 1`] = `
14
14
 
15
15
  exports[`Link renders the UI snapshot correctly 2`] = `
16
16
  <a
17
- className="css-0"
17
+ className="css-1xdhyk6"
18
18
  href="#passed-in-link"
19
19
  id="forwards-link"
20
20
  rel={null}
@@ -23,7 +23,7 @@ exports[`Link renders the UI snapshot correctly 2`] = `
23
23
  Forwards
24
24
  <svg
25
25
  aria-hidden={true}
26
- className="chakra-icon more-link css-onkibi"
26
+ className="chakra-icon more-link css-1grhd2q"
27
27
  focusable={false}
28
28
  id="forwards-link-icon"
29
29
  role="img"
@@ -58,7 +58,7 @@ exports[`Link renders the UI snapshot correctly 2`] = `
58
58
 
59
59
  exports[`Link renders the UI snapshot correctly 3`] = `
60
60
  <a
61
- className="css-0"
61
+ className="css-1xdhyk6"
62
62
  href="#passed-in-link"
63
63
  id="backwards-link"
64
64
  rel={null}
@@ -66,7 +66,7 @@ exports[`Link renders the UI snapshot correctly 3`] = `
66
66
  >
67
67
  <svg
68
68
  aria-hidden={true}
69
- className="chakra-icon more-link css-onkibi"
69
+ className="chakra-icon more-link css-1grhd2q"
70
70
  focusable={false}
71
71
  id="backwards-link-icon"
72
72
  role="img"
@@ -102,7 +102,7 @@ exports[`Link renders the UI snapshot correctly 3`] = `
102
102
 
103
103
  exports[`Link renders the UI snapshot correctly 4`] = `
104
104
  <a
105
- className="css-0"
105
+ className="css-1xdhyk6"
106
106
  href="#passed-in-link"
107
107
  id="external-link"
108
108
  rel="nofollow"
@@ -111,7 +111,7 @@ exports[`Link renders the UI snapshot correctly 4`] = `
111
111
  External
112
112
  <svg
113
113
  aria-hidden={true}
114
- className="chakra-icon more-link css-onkibi"
114
+ className="chakra-icon more-link css-1grhd2q"
115
115
  focusable={false}
116
116
  id="external-link-icon"
117
117
  role="img"
@@ -146,7 +146,7 @@ exports[`Link renders the UI snapshot correctly 4`] = `
146
146
 
147
147
  exports[`Link renders the UI snapshot correctly 5`] = `
148
148
  <a
149
- className="css-0"
149
+ className="css-1xdhyk6"
150
150
  href="#passed-in-link"
151
151
  id="button-link"
152
152
  rel={null}
@@ -158,7 +158,7 @@ exports[`Link renders the UI snapshot correctly 5`] = `
158
158
 
159
159
  exports[`Link renders the UI snapshot correctly 6`] = `
160
160
  <a
161
- className="css-0"
161
+ className="css-1xdhyk6"
162
162
  href="#passed-in-link"
163
163
  id="icon-link"
164
164
  rel={null}
@@ -166,7 +166,7 @@ exports[`Link renders the UI snapshot correctly 6`] = `
166
166
  >
167
167
  <svg
168
168
  aria-hidden={true}
169
- className="chakra-icon more-link css-onkibi"
169
+ className="chakra-icon more-link css-1grhd2q"
170
170
  focusable={false}
171
171
  id="link-icon"
172
172
  role="img"
@@ -205,6 +205,7 @@ exports[`Link renders the UI snapshot correctly 7`] = `
205
205
  className="css-0"
206
206
  >
207
207
  <a
208
+ className="css-0"
208
209
  href="#existing-anchor-tag"
209
210
  id="anchor-link"
210
211
  rel={null}
@@ -222,7 +223,7 @@ exports[`Link renders the UI snapshot correctly 8`] = `
222
223
  >
223
224
  <svg
224
225
  aria-hidden={true}
225
- className="chakra-icon css-onkibi"
226
+ className="chakra-icon css-1grhd2q"
226
227
  focusable={false}
227
228
  id="link-icon"
228
229
  role="img"
@@ -259,3 +260,28 @@ exports[`Link renders the UI snapshot correctly 8`] = `
259
260
  </a>
260
261
  </span>
261
262
  `;
263
+
264
+ exports[`Link renders the UI snapshot correctly 9`] = `
265
+ <a
266
+ className="css-kle7zy"
267
+ href="#passed-in-link"
268
+ id="chakra"
269
+ rel={null}
270
+ target={null}
271
+ >
272
+ Standard
273
+ </a>
274
+ `;
275
+
276
+ exports[`Link renders the UI snapshot correctly 10`] = `
277
+ <a
278
+ className="css-1xdhyk6"
279
+ data-testid="props"
280
+ href="#passed-in-link"
281
+ id="props"
282
+ rel={null}
283
+ target={null}
284
+ >
285
+ Standard
286
+ </a>
287
+ `;