@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
@@ -2,30 +2,43 @@
2
2
 
3
3
  exports[`HorizontalRule renders the UI snapshot correctly 1`] = `
4
4
  <hr
5
- className="css-1bhbd2a"
5
+ className="css-mvtkpx"
6
6
  />
7
7
  `;
8
8
 
9
9
  exports[`HorizontalRule renders the UI snapshot correctly 2`] = `
10
10
  <hr
11
- className="css-154goob"
11
+ className="css-j99tgf"
12
12
  />
13
13
  `;
14
14
 
15
15
  exports[`HorizontalRule renders the UI snapshot correctly 3`] = `
16
16
  <hr
17
- className="css-gj8znx"
17
+ className="css-21sffo"
18
18
  />
19
19
  `;
20
20
 
21
21
  exports[`HorizontalRule renders the UI snapshot correctly 4`] = `
22
22
  <hr
23
- className="css-1bhbd2a"
23
+ className="css-mvtkpx"
24
24
  />
25
25
  `;
26
26
 
27
27
  exports[`HorizontalRule renders the UI snapshot correctly 5`] = `
28
28
  <hr
29
- className="css-1bhbd2a"
29
+ className="css-mvtkpx"
30
+ />
31
+ `;
32
+
33
+ exports[`HorizontalRule renders the UI snapshot correctly 6`] = `
34
+ <hr
35
+ className="css-1pg2j4r"
36
+ />
37
+ `;
38
+
39
+ exports[`HorizontalRule renders the UI snapshot correctly 7`] = `
40
+ <hr
41
+ className="css-mvtkpx"
42
+ data-testid="props"
30
43
  />
31
44
  `;
@@ -7,6 +7,8 @@ import {
7
7
  } from "@storybook/addon-docs";
8
8
  import { withDesign } from "storybook-addon-designs";
9
9
 
10
+ import Heading from "../Heading/Heading";
11
+ import { HeadingLevels } from "../Heading/HeadingTypes";
10
12
  import Icon from "./Icon";
11
13
  import {
12
14
  IconAlign,
@@ -89,10 +91,25 @@ export const rotationEnumValues = getStorybookEnumValues(
89
91
  | Component Version | DS Version |
90
92
  | ----------------- | ---------- |
91
93
  | Added | `0.0.4` |
92
- | Latest | `0.25.11` |
94
+ | Latest | `0.26.0` |
95
+
96
+ ## Table of Contents
97
+
98
+ - [Overview](#overview)
99
+ - [Component Props](#component-props)
100
+ - [Accessibility](#accessibility)
101
+ - [Rotation Types](#rotation-types)
102
+ - [IconColors Types](#icon-colors-types)
103
+ - [IconSizes Types](#icon-sizes-types)
104
+ - [All Display Icons](#all-display-icons)
105
+ - [Custom Icons](#custom-icons)
106
+
107
+ ## Overview
93
108
 
94
109
  <Description of={Icon} />
95
110
 
111
+ ## Component Props
112
+
96
113
  <Canvas withToolbar>
97
114
  <Story
98
115
  name="Icon with Controls"
@@ -105,7 +122,7 @@ export const rotationEnumValues = getStorybookEnumValues(
105
122
  iconRotation: "IconRotationTypes.Rotate0",
106
123
  id: "icon-id",
107
124
  name: "IconNames.Check",
108
- size: "IconSizes.ExtraLarge",
125
+ size: "IconSizes.ExtraExtraLarge",
109
126
  title: undefined,
110
127
  type: IconTypes.Default,
111
128
  }}
@@ -128,7 +145,7 @@ export const rotationEnumValues = getStorybookEnumValues(
128
145
  export const iconRow = (icon, iconType = IconNames, opts = {}) => {
129
146
  // We'll use this setup function to render all the icons in a list item.
130
147
  // Some icons display better with a dark background.
131
- const styles = { padding: "1rem" };
148
+ const styles = { display: "block" };
132
149
  const {
133
150
  size = IconSizes.Large,
134
151
  iconRotation = IconRotationTypes.Rotate0,
@@ -138,6 +155,7 @@ export const iconRow = (icon, iconType = IconNames, opts = {}) => {
138
155
  let key = icon;
139
156
  if (icon.indexOf("Negative") !== -1 || color.indexOf("white") !== -1) {
140
157
  styles.backgroundColor = "#000";
158
+ styles.padding = "1rem";
141
159
  }
142
160
  // The following is just to fix duplicate React key issues.
143
161
  if (iconRotation !== IconRotationTypes.Rotate0) {
@@ -150,7 +168,11 @@ export const iconRow = (icon, iconType = IconNames, opts = {}) => {
150
168
  key += `-${size}`;
151
169
  }
152
170
  return (
153
- <li key={key} style={{ marginBottom: "var(--nypl-space-s)" }}>
171
+ <li
172
+ key={key}
173
+ style={{ marginBottom: "var(--nypl-space-l)", textAlign: "center" }}
174
+ >
175
+ <Heading level={HeadingLevels.Four}>{displayValue}</Heading>
154
176
  <span style={styles}>
155
177
  <Icon
156
178
  name={iconType[icon]}
@@ -159,7 +181,6 @@ export const iconRow = (icon, iconType = IconNames, opts = {}) => {
159
181
  color={color}
160
182
  />
161
183
  </span>
162
- {displayValue}
163
184
  </li>
164
185
  );
165
186
  };
@@ -168,30 +189,36 @@ export const rotations = [];
168
189
  export const colors = [];
169
190
  export const sizes = [];
170
191
  for (const icon in IconNames) {
171
- icons.push(iconRow(icon, IconNames, { displayValue: `IconNames.${icon}` }));
192
+ icons.push(
193
+ iconRow(icon, IconNames, {
194
+ displayValue: `IconNames.${icon}`,
195
+ size: IconSizes.ExtraExtraLarge,
196
+ })
197
+ );
172
198
  }
173
199
  for (const iconRotation in IconRotationTypes) {
174
200
  rotations.push(
175
201
  iconRow("Arrow", IconNames, {
176
- size: IconSizes.Large,
177
- iconRotation: IconRotationTypes[iconRotation],
178
202
  displayValue: `IconRotationTypes.${iconRotation}`,
203
+ iconRotation: IconRotationTypes[iconRotation],
204
+ size: IconSizes.ExtraExtraLarge,
179
205
  })
180
206
  );
181
207
  }
182
208
  for (const iconColor in IconColors) {
183
209
  colors.push(
184
- iconRow("Download", IconNames, {
210
+ iconRow("ErrorFilled", IconNames, {
185
211
  color: IconColors[iconColor],
186
212
  displayValue: `IconColors.${iconColor}`,
213
+ size: IconSizes.ExtraExtraLarge,
187
214
  })
188
215
  );
189
216
  }
190
217
  for (const iconSize in IconSizes) {
191
218
  sizes.push(
192
- iconRow("Arrow", IconNames, {
193
- size: IconSizes[iconSize],
219
+ iconRow("ActionCheckCircle", IconNames, {
194
220
  displayValue: `IconSizes.${iconSize}`,
221
+ size: IconSizes[iconSize],
195
222
  })
196
223
  );
197
224
  }
@@ -202,11 +229,21 @@ export const allIconsType = (list) => (
202
229
 
203
230
  ## Accessibility
204
231
 
205
- For accessibility purposes, every DS `Icon` will render the `svg` element with
206
- its icon name in the `title` element. The default text in the `title` element
207
- is the icon's code name. Pass in better descriptive text in the `title` prop
208
- when using the `Icon` component in your application. This will give screenreaders
209
- a better descriptive title for the `svg` graphic.
232
+ For accessibility purposes, every Reservoir Design System (DS) `Icon` will
233
+ render the `svg` element with its icon name in the `title` element. The default
234
+ text in the `title` element is the icon's code name. Pass in better descriptive
235
+ text in the `title` prop when using the `Icon` component in your application.
236
+ This will give screenreaders a better descriptive title for the `svg` graphic.
237
+
238
+ `Icon`s are decorative by default. This means that they are presentational and
239
+ screenreaders will not read them because the `aria-hidden` attribute is set to
240
+ `true`.
241
+
242
+ Resources:
243
+
244
+ - [W3C Design System SVG Icons](https://design-system.w3.org/styles/svg-icons.html)
245
+ - [CSS-Tricks Accessible SVG Icons](https://css-tricks.com/accessible-svg-icons/)
246
+ - [Chakra UI Icon](https://chakra-ui.com/docs/components/media-and-icons/icon)
210
247
 
211
248
  ## Rotation Types
212
249
 
@@ -214,13 +251,20 @@ Passing an `iconRotation` prop with a value from `IconRotationTypes` allows
214
251
  the icon to be rotated when it is rendered. The `IconRotationTypes` enum
215
252
  can be found in `src/components/Icons/IconTypes.tsx`.
216
253
 
254
+ Note: All of the examples below have been rendered with the `size` prop set to
255
+ `IconSizes.ExtraExtraLarge`.
256
+
217
257
  ```jsx
218
258
  // Example
219
- <Icon name={IconNames.Arrow} iconRotation={IconRotationTypes.Rotate180} />
259
+ <Icon
260
+ iconRotation={IconRotationTypes.Rotate180}
261
+ name={IconNames.Arrow}
262
+ size={IconSizes.ExtraExtraLarge}
263
+ />
220
264
  ```
221
265
 
222
266
  <Canvas>
223
- <Story name="Rotation Types">{allIconsType(rotations)}</Story>
267
+ <Story name="Icon Rotation">{allIconsType(rotations)}</Story>
224
268
  </Canvas>
225
269
 
226
270
  ## IconColors Types
@@ -228,13 +272,20 @@ can be found in `src/components/Icons/IconTypes.tsx`.
228
272
  Update an SVG icon by passing a `color` prop with a value from `IconColors`.
229
273
  The `IconColors` enum can be found in `src/components/Icons/IconTypes.tsx`.
230
274
 
275
+ Note: All of the examples below have been rendered with the `size` prop set to
276
+ `IconSizes.ExtraExtraLarge`.
277
+
231
278
  ```jsx
232
279
  // Example
233
- <Icon name={IconNames.Speaker_notes} color={IconColors.BrandPrimary} />
280
+ <Icon
281
+ color={IconColors.BrandPrimary}
282
+ name={IconNames.ErrorFilled}
283
+ size={IconSizes.ExtraExtraLarge}
284
+ />
234
285
  ```
235
286
 
236
287
  <Canvas>
237
- <Story name="Color Types">{allIconsType(colors)}</Story>
288
+ <Story name="Icon Colors">{allIconsType(colors)}</Story>
238
289
  </Canvas>
239
290
 
240
291
  ## IconSizes Types
@@ -242,13 +293,16 @@ The `IconColors` enum can be found in `src/components/Icons/IconTypes.tsx`.
242
293
  Update an SVG icon by passing a `size` prop with a value from `IconSizes`.
243
294
  The `IconSizes` enum can be found in`src/components/Icons/IconTypes.tsx`.
244
295
 
296
+ Note: `IconSizes.Default` sets the width to `100%` and the rendered icon will
297
+ expand to fill the full width of the parent element.
298
+
245
299
  ```jsx
246
300
  // Example
247
- <Icon name={IconNames.Clock} size={IconSizes.ExtraExtraLarge} />
301
+ <Icon name={IconNames.ActionCheckCircle} size={IconSizes.ExtraExtraLarge} />
248
302
  ```
249
303
 
250
304
  <Canvas>
251
- <Story name="Sizes Types">{allIconsType(sizes)}</Story>
305
+ <Story name="Icon Sizes">{allIconsType(sizes)}</Story>
252
306
  </Canvas>
253
307
 
254
308
  ## All Display Icons
@@ -256,8 +310,11 @@ The `IconSizes` enum can be found in`src/components/Icons/IconTypes.tsx`.
256
310
  The following icons are for generic purposes. All the available icon names can
257
311
  be found in the `IconNames` enum in `src/components/Icons/IconTypes.tsx`.
258
312
 
313
+ Note: All of the examples below have been rendered with the `size` prop set to
314
+ `IconSizes.ExtraExtraLarge`.
315
+
259
316
  <Canvas withToolbar>
260
- <Story name="All Display Icons">{allIconsType(icons)}</Story>
317
+ <Story name="All Icons">{allIconsType(icons)}</Story>
261
318
  </Canvas>
262
319
 
263
320
  ## Custom Icons
@@ -1,6 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { render } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
4
5
 
5
6
  import Icon from "./Icon";
6
7
  import { IconNames } from "./IconTypes";
@@ -27,7 +28,8 @@ describe("Icon", () => {
27
28
  </Icon>
28
29
  );
29
30
  expect(warn).toHaveBeenCalledWith(
30
- "Icon accepts either a `name` prop or an `svg` element child, not both."
31
+ "NYPL Reservoir Icon: Pass in either a `name` prop or an `svg` element " +
32
+ "child. Do not pass both."
31
33
  );
32
34
  });
33
35
 
@@ -35,7 +37,17 @@ describe("Icon", () => {
35
37
  const warn = jest.spyOn(console, "warn");
36
38
  render(<Icon />);
37
39
  expect(warn).toHaveBeenCalledWith(
38
- "Icon: Pass an icon `name` prop or an SVG child to ensure an icon appears."
40
+ "NYPL Reservoir Icon: Pass an icon `name` prop or an SVG child to " +
41
+ "ensure an icon appears."
42
+ );
43
+ });
44
+
45
+ it("consoles a warning if name is not passed and a child is but it's not an SVG element", () => {
46
+ const warn = jest.spyOn(console, "warn");
47
+ render(<Icon>Not an SVG</Icon>);
48
+ expect(warn).toHaveBeenCalledWith(
49
+ "NYPL Reservoir Icon: An `svg` element must be passed to the `Icon` " +
50
+ "component as its child."
39
51
  );
40
52
  });
41
53
 
@@ -76,4 +88,41 @@ describe("Icon", () => {
76
88
  );
77
89
  expect(container.querySelector("svg")).toBeInTheDocument();
78
90
  });
91
+
92
+ it("renders the UI snapshot correctly", () => {
93
+ const basic = renderer
94
+ .create(<Icon id="basic" name={IconNames.Download} />)
95
+ .toJSON();
96
+ const customIcon = renderer
97
+ .create(
98
+ <Icon id="customIcon">
99
+ <svg viewBox="0 0 24 14" xmlns="http://www.w3.org/2000/svg">
100
+ <path
101
+ fillRule="evenodd"
102
+ clipRule="evenodd"
103
+ d="M10.526 12.871L.263 1.676 1.737.324 12 11.52 22.263.324l1.474 1.352L13.474 12.87a2 2 0 01-2.948 0z"
104
+ />
105
+ </svg>
106
+ </Icon>
107
+ )
108
+ .toJSON();
109
+ const withChakraProps = renderer
110
+ .create(
111
+ <Icon
112
+ id="chakra"
113
+ name={IconNames.Download}
114
+ p="20px"
115
+ color="ui.error.primary"
116
+ />
117
+ )
118
+ .toJSON();
119
+ const withOtherProps = renderer
120
+ .create(<Icon id="props" name={IconNames.Download} data-testid="props" />)
121
+ .toJSON();
122
+
123
+ expect(basic).toMatchSnapshot();
124
+ expect(customIcon).toMatchSnapshot();
125
+ expect(withChakraProps).toMatchSnapshot();
126
+ expect(withOtherProps).toMatchSnapshot();
127
+ });
79
128
  });
@@ -1,7 +1,11 @@
1
+ import {
2
+ Icon as ChakraIcon,
3
+ Box,
4
+ chakra,
5
+ useStyleConfig,
6
+ } from "@chakra-ui/react";
1
7
  import * as React from "react";
2
- import { Icon as ChakraIcon, Box, useStyleConfig } from "@chakra-ui/react";
3
8
 
4
- import generateUUID from "../../helpers/generateUUID";
5
9
  import {
6
10
  IconAlign,
7
11
  IconColors,
@@ -43,77 +47,95 @@ export interface IconProps {
43
47
  /**
44
48
  * Renders SVG-based icons.
45
49
  */
46
- export default function Icon(props: React.PropsWithChildren<IconProps>) {
47
- const {
48
- additionalStyles = {},
49
- align = IconAlign.None,
50
- children,
51
- className,
52
- color = IconColors.UiBlack,
53
- decorative = true,
54
- iconRotation = IconRotationTypes.Rotate0,
55
- id = generateUUID(),
56
- name,
57
- size = IconSizes.Medium,
58
- title = `${name} icon`,
59
- type = IconTypes.Default,
60
- } = props;
61
- const styles = useStyleConfig("Icon", {
62
- align,
63
- color,
64
- iconRotation,
65
- size,
66
- variant: type,
67
- });
68
- const iconProps = {
69
- "aria-hidden": decorative,
70
- className,
71
- id,
72
- role: "img",
73
- title,
74
- };
75
- let childSVG = null;
50
+ export const Icon = chakra(
51
+ (props: React.PropsWithChildren<IconProps>) => {
52
+ const {
53
+ additionalStyles = {},
54
+ align = IconAlign.None,
55
+ children,
56
+ className,
57
+ color = IconColors.UiBlack,
58
+ decorative = true,
59
+ iconRotation = IconRotationTypes.Rotate0,
60
+ id,
61
+ name,
62
+ size = IconSizes.Default,
63
+ title = `${name} icon`,
64
+ type = IconTypes.Default,
65
+ ...rest
66
+ } = props;
67
+ const styles = useStyleConfig("Icon", {
68
+ align,
69
+ color,
70
+ iconRotation,
71
+ size,
72
+ variant: type,
73
+ });
74
+ const iconProps = {
75
+ "aria-hidden": decorative,
76
+ className,
77
+ id,
78
+ role: "img",
79
+ title,
80
+ ...rest,
81
+ };
82
+ let childSVG = null;
76
83
 
77
- // Component prop validation
78
- if (name && children) {
79
- console.warn(
80
- "Icon accepts either a `name` prop or an `svg` element child, not both."
81
- );
82
- return null;
83
- } else if (!name && !children) {
84
- console.warn(
85
- "Icon: Pass an icon `name` prop or an SVG child to ensure an icon appears."
86
- );
87
- return null;
88
- }
84
+ // Component prop validation
85
+ if (name && children) {
86
+ console.warn(
87
+ "NYPL Reservoir Icon: Pass in either a `name` prop or an `svg` element " +
88
+ "child. Do not pass both."
89
+ );
90
+ return null;
91
+ } else if (!name && !children) {
92
+ console.warn(
93
+ "NYPL Reservoir Icon: Pass an icon `name` prop or an SVG child to " +
94
+ "ensure an icon appears."
95
+ );
96
+ return null;
97
+ }
98
+
99
+ // The user wants to render an existing icon. Load the icon and render it
100
+ // as a component through Chakra's Icon component. Otherwise, we're going to
101
+ // render the SVG child with NYPL-theme styling.
102
+ if (name) {
103
+ const SvgComponent: any = iconSvgs[name];
104
+ return (
105
+ <ChakraIcon
106
+ as={SvgComponent}
107
+ {...iconProps}
108
+ __css={{ ...styles, ...additionalStyles }}
109
+ />
110
+ );
111
+ }
112
+
113
+ // If no `name` prop was passed, we expect a child SVG element to be passed.
114
+ // Apply icon props to the SVG child.
115
+ if (
116
+ (children as JSX.Element).type === "svg" ||
117
+ (children as JSX.Element).props?.type === "svg" ||
118
+ (children as JSX.Element).props?.mdxType === "svg"
119
+ ) {
120
+ childSVG = React.cloneElement(children as JSX.Element, {
121
+ ...iconProps,
122
+ });
123
+ } else {
124
+ console.warn(
125
+ "NYPL Reservoir Icon: An `svg` element must be passed to the `Icon` " +
126
+ "component as its child."
127
+ );
128
+ }
89
129
 
90
- // The user wants to render an existing icon. Load the icon and render it
91
- // as a component through Chakra's Icon component. Otherwise, we're going to
92
- // render the SVG child with NYPL-theme styling.
93
- if (name) {
94
- const SvgComponent: any = iconSvgs[name];
95
130
  return (
96
- <ChakraIcon
97
- as={SvgComponent}
98
- {...iconProps}
99
- __css={{ ...styles, ...additionalStyles }}
100
- />
131
+ <Box __css={styles} {...rest}>
132
+ {childSVG}
133
+ </Box>
101
134
  );
102
- }
103
-
104
- // If no `name` prop was passed, we expect a child SVG element to be passed.
105
- // Apply icon props to the SVG child.
106
- if (
107
- (children as JSX.Element).type === "svg" ||
108
- (children as JSX.Element).props.type === "svg" ||
109
- (children as JSX.Element).props.mdxType === "svg"
110
- ) {
111
- childSVG = React.cloneElement(children as JSX.Element, {
112
- ...iconProps,
113
- });
114
- } else {
115
- console.warn("You must pass an `svg` element to the `Icon` component.");
116
- }
135
+ },
136
+ // Pass all custom props to Chakra and override, e.g. we want the
137
+ // DS color prop to use the DS enum and not color strings.
138
+ { shouldForwardProp: () => true }
139
+ );
117
140
 
118
- return <Box __css={styles}>{childSVG}</Box>;
119
- }
141
+ export default Icon;
@@ -22,22 +22,25 @@ export enum IconColors {
22
22
  UiWhite = "ui.white",
23
23
  BrandPrimary = "brand.primary",
24
24
  BrandSecondary = "brand.secondary",
25
- SectionWhatsOnPrimary = "section.whats-on.primary",
26
- SectionWhatsOnSecondary = "section.whats-on.secondary",
25
+ SectionBlogsPrimary = "section.blogs.primary",
26
+ SectionBlogsSecondary = "section.blogs.secondary",
27
27
  SectionBooksAndMorePrimary = "section.books-and-more.primary",
28
28
  SectionBooksAndMoreSecondary = "section.books-and-more.secondary",
29
- SectionResearchPrimary = "section.research.primary",
30
- SectionResearchSecondary = "section.research.secondary",
29
+ SectionEducationPrimary = "section.education.primary",
30
+ SectionEducationSecondary = "section.education.secondary",
31
31
  SectionLocationsPrimary = "section.locations.primary",
32
32
  SectionLocationsSecondary = "section.locations.secondary",
33
- SectionBlogsPrimary = "section.blogs.primary",
34
- SectionBlogsSecondary = "section.blogs.secondary",
33
+ SectionResearchPrimary = "section.research.primary",
34
+ SectionResearchSecondary = "section.research.secondary",
35
35
  SectionResearchLibraryLpa = "section.research-library.lpa",
36
36
  SectionResearchLibrarySchomburg = "section.research-library.schomburg",
37
37
  SectionResearchLibrarySchwartzman = "section.research-library.schwartzman",
38
+ SectionWhatsOnPrimary = "section.whats-on.primary",
39
+ SectionWhatsOnSecondary = "section.whats-on.secondary",
38
40
  }
39
41
 
40
42
  export enum IconSizes {
43
+ Default = "default",
41
44
  Small = "small",
42
45
  Medium = "medium",
43
46
  Large = "large",