@nypl/design-system-react-components 0.25.12 → 0.26.1

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 (337) hide show
  1. package/CHANGELOG.md +131 -1
  2. package/README.md +10 -10
  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 +1 -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 +1 -0
  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 +2 -0
  32. package/dist/components/Logo/LogoTypes.d.ts +4 -2
  33. package/dist/components/Notification/Notification.d.ts +7 -7
  34. package/dist/components/Pagination/Pagination.d.ts +2 -2
  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 +4 -4
  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 +17 -8
  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 +2075 -1468
  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 +2086 -1483
  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 +3 -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 -4
  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 +4 -14
  75. package/dist/theme/components/global.d.ts +25 -18
  76. package/dist/theme/components/heading.d.ts +53 -0
  77. package/dist/theme/components/helperErrorText.d.ts +1 -0
  78. package/dist/theme/components/hero.d.ts +21 -15
  79. package/dist/theme/components/image.d.ts +1 -1
  80. package/dist/theme/components/label.d.ts +9 -10
  81. package/dist/theme/components/list.d.ts +99 -9
  82. package/dist/theme/components/notification.d.ts +4 -4
  83. package/dist/theme/components/pagination.d.ts +2 -5
  84. package/dist/theme/components/radio.d.ts +7 -4
  85. package/dist/theme/components/radioGroup.d.ts +4 -2
  86. package/dist/theme/components/select.d.ts +37 -5
  87. package/dist/theme/components/skeletonLoader.d.ts +2 -2
  88. package/dist/theme/components/slider.d.ts +6 -3
  89. package/dist/theme/components/structuredContent.d.ts +197 -0
  90. package/dist/theme/components/textInput.d.ts +18 -6
  91. package/dist/theme/components/toggle.d.ts +20 -5
  92. package/dist/theme/foundations/global.d.ts +2 -0
  93. package/dist/theme/foundations/radii.d.ts +1 -0
  94. package/dist/theme/foundations/spacing.d.ts +46 -43
  95. package/package.json +5 -6
  96. package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +34 -0
  97. package/src/components/Accordion/Accordion.stories.mdx +150 -66
  98. package/src/components/Accordion/Accordion.test.tsx +65 -17
  99. package/src/components/Accordion/Accordion.tsx +61 -27
  100. package/src/components/Accordion/AccordionTypes.tsx +5 -0
  101. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +505 -14
  102. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  103. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +37 -19
  104. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +57 -36
  105. package/src/components/Breadcrumbs/Breadcrumbs.tsx +14 -13
  106. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -1
  107. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
  108. package/src/components/Button/Button.stories.mdx +87 -23
  109. package/src/components/Button/Button.test.tsx +25 -0
  110. package/src/components/Button/Button.tsx +18 -7
  111. package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
  112. package/src/components/Card/Card.stories.mdx +493 -329
  113. package/src/components/Card/Card.test.tsx +138 -18
  114. package/src/components/Card/Card.tsx +151 -85
  115. package/src/components/Card/__snapshots__/Card.test.tsx.snap +221 -101
  116. package/src/components/Chakra/Center.stories.mdx +2 -2
  117. package/src/components/Chakra/Grid.stories.mdx +4 -4
  118. package/src/components/Checkbox/Checkbox.stories.mdx +73 -9
  119. package/src/components/Checkbox/Checkbox.test.tsx +89 -10
  120. package/src/components/Checkbox/Checkbox.tsx +26 -16
  121. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +209 -6
  122. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +135 -23
  123. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +216 -90
  124. package/src/components/CheckboxGroup/CheckboxGroup.tsx +39 -26
  125. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +493 -89
  126. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
  127. package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
  128. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
  129. package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
  130. package/src/components/DatePicker/DatePicker.test.tsx +94 -15
  131. package/src/components/DatePicker/DatePicker.tsx +67 -58
  132. package/src/components/DatePicker/_DatePicker.scss +71 -13
  133. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
  134. package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
  135. package/src/components/Fieldset/Fieldset.test.tsx +58 -28
  136. package/src/components/Fieldset/Fieldset.tsx +35 -30
  137. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
  138. package/src/components/Form/Form.stories.mdx +118 -47
  139. package/src/components/Form/Form.test.tsx +59 -16
  140. package/src/components/Form/Form.tsx +89 -65
  141. package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
  142. package/src/components/Grid/GridTypes.tsx +7 -7
  143. package/src/components/Grid/SimpleGrid.stories.mdx +87 -41
  144. package/src/components/Grid/SimpleGrid.test.tsx +24 -9
  145. package/src/components/Grid/SimpleGrid.tsx +29 -20
  146. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
  147. package/src/components/Heading/Heading.stories.mdx +56 -25
  148. package/src/components/Heading/Heading.test.tsx +17 -7
  149. package/src/components/Heading/Heading.tsx +60 -58
  150. package/src/components/Heading/HeadingTypes.tsx +1 -1
  151. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +27 -8
  152. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
  153. package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
  154. package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
  155. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
  156. package/src/components/Hero/Hero.stories.mdx +143 -113
  157. package/src/components/Hero/Hero.test.tsx +146 -58
  158. package/src/components/Hero/Hero.tsx +144 -112
  159. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
  160. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
  161. package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -17
  162. package/src/components/HorizontalRule/HorizontalRule.tsx +9 -25
  163. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
  164. package/src/components/Icons/Icon.stories.mdx +80 -23
  165. package/src/components/Icons/Icon.test.tsx +51 -2
  166. package/src/components/Icons/Icon.tsx +93 -71
  167. package/src/components/Icons/IconTypes.tsx +1 -0
  168. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  169. package/src/components/Image/Image.stories.mdx +160 -71
  170. package/src/components/Image/Image.test.tsx +40 -48
  171. package/src/components/Image/Image.tsx +80 -48
  172. package/src/components/Image/ImageTypes.ts +4 -4
  173. package/src/components/Image/__snapshots__/Image.test.tsx.snap +84 -21
  174. package/src/components/Label/Label.stories.mdx +42 -20
  175. package/src/components/Label/Label.test.tsx +42 -17
  176. package/src/components/Label/Label.tsx +22 -13
  177. package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
  178. package/src/components/Link/Link.stories.mdx +25 -1
  179. package/src/components/Link/Link.test.tsx +21 -0
  180. package/src/components/Link/Link.tsx +16 -9
  181. package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
  182. package/src/components/List/List.stories.mdx +75 -40
  183. package/src/components/List/List.test.tsx +73 -22
  184. package/src/components/List/List.tsx +44 -28
  185. package/src/components/List/ListTypes.tsx +1 -1
  186. package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
  187. package/src/components/Logo/Logo.stories.mdx +40 -16
  188. package/src/components/Logo/Logo.test.tsx +29 -2
  189. package/src/components/Logo/Logo.tsx +28 -11
  190. package/src/components/Logo/LogoSvgs.tsx +4 -0
  191. package/src/components/Logo/LogoTypes.tsx +3 -1
  192. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
  193. package/src/components/Modal/Modal.stories.mdx +13 -0
  194. package/src/components/Notification/Notification.stories.mdx +29 -5
  195. package/src/components/Notification/Notification.test.tsx +23 -0
  196. package/src/components/Notification/Notification.tsx +53 -51
  197. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
  198. package/src/components/Pagination/Pagination.stories.mdx +27 -6
  199. package/src/components/Pagination/Pagination.test.tsx +55 -2
  200. package/src/components/Pagination/Pagination.tsx +12 -9
  201. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
  202. package/src/components/Placeholder/Placeholder.tsx +3 -1
  203. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
  204. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +87 -13
  205. package/src/components/ProgressIndicator/ProgressIndicator.tsx +20 -10
  206. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
  207. package/src/components/Radio/Radio.stories.mdx +75 -11
  208. package/src/components/Radio/Radio.test.tsx +83 -9
  209. package/src/components/Radio/Radio.tsx +70 -62
  210. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +163 -5
  211. package/src/components/RadioGroup/RadioGroup.stories.mdx +293 -94
  212. package/src/components/RadioGroup/RadioGroup.test.tsx +193 -68
  213. package/src/components/RadioGroup/RadioGroup.tsx +110 -101
  214. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1258 -902
  215. package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
  216. package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
  217. package/src/components/SearchBar/SearchBar.tsx +20 -11
  218. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
  219. package/src/components/Select/Select.stories.mdx +151 -62
  220. package/src/components/Select/Select.test.tsx +56 -44
  221. package/src/components/Select/Select.tsx +125 -104
  222. package/src/components/Select/SelectTypes.tsx +5 -0
  223. package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
  224. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +53 -23
  225. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +14 -8
  226. package/src/components/SkeletonLoader/SkeletonLoader.tsx +80 -78
  227. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
  228. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
  229. package/src/components/Slider/Slider.stories.mdx +123 -41
  230. package/src/components/Slider/Slider.test.tsx +65 -17
  231. package/src/components/Slider/Slider.tsx +30 -23
  232. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
  233. package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
  234. package/src/components/StatusBadge/StatusBadge.test.tsx +19 -1
  235. package/src/components/StatusBadge/StatusBadge.tsx +25 -20
  236. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
  237. package/src/components/StructuredContent/StructuredContent.stories.mdx +229 -61
  238. package/src/components/StructuredContent/StructuredContent.test.tsx +162 -101
  239. package/src/components/StructuredContent/StructuredContent.tsx +98 -103
  240. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
  241. package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
  242. package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
  243. package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
  244. package/src/components/StyleGuide/ColorCard.tsx +4 -4
  245. package/src/components/StyleGuide/Colors.stories.mdx +1 -2
  246. package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
  247. package/src/components/StyleGuide/Forms.stories.mdx +27 -12
  248. package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
  249. package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
  250. package/src/components/StyleGuide/Typography.stories.mdx +47 -33
  251. package/src/components/Table/Table.stories.mdx +38 -11
  252. package/src/components/Table/Table.test.tsx +16 -1
  253. package/src/components/Table/Table.tsx +10 -8
  254. package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
  255. package/src/components/Tabs/Tabs.stories.mdx +59 -10
  256. package/src/components/Tabs/Tabs.test.tsx +29 -11
  257. package/src/components/Tabs/Tabs.tsx +28 -21
  258. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
  259. package/src/components/Template/Template.stories.mdx +73 -32
  260. package/src/components/Template/Template.test.tsx +68 -5
  261. package/src/components/Template/Template.tsx +89 -71
  262. package/src/components/Template/__snapshots__/Template.test.tsx.snap +195 -22
  263. package/src/components/Text/Text.stories.mdx +32 -15
  264. package/src/components/Text/Text.test.tsx +14 -11
  265. package/src/components/Text/Text.tsx +13 -16
  266. package/src/components/Text/TextTypes.tsx +1 -1
  267. package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
  268. package/src/components/TextInput/TextInput.stories.mdx +73 -27
  269. package/src/components/TextInput/TextInput.test.tsx +65 -50
  270. package/src/components/TextInput/TextInput.tsx +123 -115
  271. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
  272. package/src/components/Toggle/Toggle.stories.mdx +74 -26
  273. package/src/components/Toggle/Toggle.test.tsx +41 -10
  274. package/src/components/Toggle/Toggle.tsx +29 -26
  275. package/src/components/Toggle/{ToggleSizes.tsx → ToggleTypes.tsx} +1 -1
  276. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +191 -4
  277. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
  278. package/src/components/VideoPlayer/VideoPlayer.test.tsx +41 -6
  279. package/src/components/VideoPlayer/VideoPlayer.tsx +134 -120
  280. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
  281. package/src/docs/Chakra.stories.mdx +50 -9
  282. package/src/docs/Welcome.stories.mdx +168 -0
  283. package/src/{components/Card/CardTypes.tsx → helpers/enums.ts} +2 -2
  284. package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
  285. package/src/hooks/useCarouselStyles.stories.mdx +30 -0
  286. package/src/hooks/useCarouselStyles.ts +3 -2
  287. package/src/hooks/useNYPLTheme.stories.mdx +101 -0
  288. package/src/hooks/useNYPLTheme.ts +31 -7
  289. package/src/hooks/useWindowSize.stories.mdx +23 -0
  290. package/src/index.ts +11 -15
  291. package/src/styles/base/_place-holder.scss +1 -1
  292. package/src/theme/components/accordion.ts +7 -12
  293. package/src/theme/components/breadcrumb.ts +3 -0
  294. package/src/theme/components/button.ts +15 -7
  295. package/src/theme/components/card.ts +56 -36
  296. package/src/theme/components/checkbox.ts +10 -8
  297. package/src/theme/components/checkboxGroup.ts +4 -2
  298. package/src/theme/components/componentWrapper.ts +2 -2
  299. package/src/theme/components/customTable.ts +39 -31
  300. package/src/theme/components/fieldset.ts +1 -2
  301. package/src/theme/components/global.ts +29 -23
  302. package/src/theme/components/heading.ts +1 -1
  303. package/src/theme/components/helperErrorText.ts +1 -0
  304. package/src/theme/components/hero.ts +14 -16
  305. package/src/theme/components/icon.ts +5 -2
  306. package/src/theme/components/image.ts +1 -1
  307. package/src/theme/components/label.ts +4 -3
  308. package/src/theme/components/list.ts +73 -66
  309. package/src/theme/components/notification.ts +7 -7
  310. package/src/theme/components/pagination.ts +2 -5
  311. package/src/theme/components/progressIndicator.ts +3 -3
  312. package/src/theme/components/radio.ts +9 -9
  313. package/src/theme/components/radioGroup.ts +4 -2
  314. package/src/theme/components/select.ts +35 -16
  315. package/src/theme/components/skeletonLoader.ts +3 -3
  316. package/src/theme/components/slider.ts +8 -7
  317. package/src/theme/components/statusBadge.ts +2 -2
  318. package/src/theme/components/structuredContent.ts +66 -1
  319. package/src/theme/components/tabs.ts +2 -2
  320. package/src/theme/components/template.ts +9 -9
  321. package/src/theme/components/textInput.ts +13 -12
  322. package/src/theme/components/toggle.ts +43 -13
  323. package/src/theme/components/videoPlayer.ts +1 -1
  324. package/src/theme/foundations/colors.ts +1 -1
  325. package/src/theme/foundations/radii.ts +1 -0
  326. package/src/theme/foundations/spacing.ts +70 -22
  327. package/src/theme/foundations/typography.ts +2 -2
  328. package/src/utils/componentCategories.ts +28 -21
  329. package/dist/components/Card/CardTypes.d.ts +0 -4
  330. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +0 -4
  331. package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +0 -4
  332. package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
  333. package/dist/helpers/generateUUID.d.ts +0 -1
  334. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +0 -4
  335. package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +0 -4
  336. package/src/docs/Intro.stories.mdx +0 -53
  337. package/src/helpers/generateUUID.tsx +0 -5
@@ -19,8 +19,10 @@ describe("Card Accessibility", () => {
19
19
  const { container } = render(
20
20
  <Card
21
21
  id="cardID"
22
- imageSrc="https://placeimg.com/400/200/arch"
23
- imageAlt="Alt text"
22
+ imageProps={{
23
+ alt: "Alt text",
24
+ src: "https://placeimg.com/400/200/arch",
25
+ }}
24
26
  >
25
27
  <CardHeading level={HeadingLevels.Three} id="heading1">
26
28
  The Card Heading
@@ -45,8 +47,10 @@ describe("Card Accessibility", () => {
45
47
  const { container } = render(
46
48
  <Card
47
49
  id="cardID"
48
- imageSrc="https://placeimg.com/400/200/arch"
49
- imageAlt="Alt text"
50
+ imageProps={{
51
+ alt: "Alt text",
52
+ src: "https://placeimg.com/400/200/arch",
53
+ }}
50
54
  mainActionLink="http://nypl.org"
51
55
  >
52
56
  <CardHeading level={HeadingLevels.Three} id="heading1">
@@ -73,8 +77,10 @@ describe("Card", () => {
73
77
  const regularCard = (
74
78
  <Card
75
79
  id="regularCard"
76
- imageSrc="https://placeimg.com/400/200/arch"
77
- imageAlt="Alt text"
80
+ imageProps={{
81
+ alt: "Alt text",
82
+ src: "https://placeimg.com/400/200/arch",
83
+ }}
78
84
  >
79
85
  <CardHeading level={HeadingLevels.Three} id="heading1">
80
86
  The Card Heading
@@ -96,8 +102,10 @@ describe("Card", () => {
96
102
  <Card
97
103
  className="edition-card"
98
104
  id="cardWithExtendedStyles"
99
- imageAlt="Alt text"
100
- imageSrc="https://placeimg.com/300/400/arch"
105
+ imageProps={{
106
+ alt: "Alt text",
107
+ src: "https://placeimg.com/300/400/arch",
108
+ }}
101
109
  >
102
110
  <CardHeading id="editioncardheading1" level={HeadingLevels.Two}>
103
111
  The Card Heading
@@ -130,8 +138,10 @@ describe("Card", () => {
130
138
  <Card
131
139
  className="edition-card"
132
140
  id="cardWithNoCTAs"
133
- imageAlt="Alt text"
134
- imageSrc="https://placeimg.com/300/400/arch"
141
+ imageProps={{
142
+ alt: "Alt text",
143
+ src: "https://placeimg.com/300/400/arch",
144
+ }}
135
145
  >
136
146
  <CardHeading id="editioncardheading1" level={HeadingLevels.Two}>
137
147
  The Card Heading
@@ -147,8 +157,10 @@ describe("Card", () => {
147
157
  <Card
148
158
  className="edition-card"
149
159
  id="cardWithNoContent"
150
- imageAlt="Alt text"
151
- imageSrc="https://placeimg.com/300/400/arch"
160
+ imageProps={{
161
+ alt: "Alt text",
162
+ src: "https://placeimg.com/300/400/arch",
163
+ }}
152
164
  >
153
165
  <CardHeading
154
166
  id="editioncardheading1"
@@ -202,8 +214,10 @@ describe("Card", () => {
202
214
  const cardFullClick = () => (
203
215
  <Card
204
216
  id="fullclick"
205
- imageAlt="Alt text"
206
- imageSrc="https://placeimg.com/400/200/arch"
217
+ imageProps={{
218
+ alt: "Alt text",
219
+ src: "https://placeimg.com/400/200/arch",
220
+ }}
207
221
  mainActionLink="http://nypl.org"
208
222
  >
209
223
  <CardHeading level={HeadingLevels.Three} id="heading1">
@@ -225,8 +239,10 @@ describe("Card", () => {
225
239
  const cardImageComponentAndRatio = () => (
226
240
  <Card
227
241
  id="fullclick"
228
- imageComponent={<Image alt="" src="https://placeimg.com/400/200/arch" />}
229
- imageAspectRatio={ImageRatios.ThreeByTwo}
242
+ imageProps={{
243
+ aspectRatio: ImageRatios.ThreeByTwo,
244
+ component: <Image alt="" src="https://placeimg.com/400/200/arch" />,
245
+ }}
230
246
  >
231
247
  <CardHeading level={HeadingLevels.Three} id="heading1">
232
248
  The Card Heading
@@ -234,6 +250,102 @@ describe("Card", () => {
234
250
  <CardContent>middle column content</CardContent>
235
251
  </Card>
236
252
  );
253
+ const cardWithRightActions = () => (
254
+ <Card
255
+ id="cardID"
256
+ imageProps={{
257
+ alt: "Alt text",
258
+ src: "https://placeimg.com/400/200/arch",
259
+ }}
260
+ isAlignedRightActions
261
+ >
262
+ <CardHeading level={HeadingLevels.Three} id="heading1">
263
+ The Card Heading
264
+ </CardHeading>
265
+ <CardContent>middle column content</CardContent>
266
+ <CardActions>
267
+ <Button
268
+ onClick={() => {}}
269
+ id="button1"
270
+ buttonType={ButtonTypes.Primary}
271
+ type="submit"
272
+ >
273
+ Example CTA
274
+ </Button>
275
+ </CardActions>
276
+ <CardActions>
277
+ <Button
278
+ onClick={() => {}}
279
+ id="button2"
280
+ buttonType={ButtonTypes.Primary}
281
+ type="submit"
282
+ >
283
+ Example CTA
284
+ </Button>
285
+ </CardActions>
286
+ </Card>
287
+ );
288
+ const cardWithChakraProps = (
289
+ <Card
290
+ id="chakraProps"
291
+ imageProps={{
292
+ alt: "Alt text",
293
+ src: "https://placeimg.com/400/200/arch",
294
+ }}
295
+ p="s"
296
+ color="ui.error.primary"
297
+ >
298
+ <CardHeading
299
+ level={HeadingLevels.Three}
300
+ id="heading1"
301
+ color="ui.error.secondary"
302
+ >
303
+ The Card Heading
304
+ </CardHeading>
305
+ <CardContent p="20px">middle column content</CardContent>
306
+ <CardActions m="20px">
307
+ <Button
308
+ onClick={() => {}}
309
+ id="button1"
310
+ buttonType={ButtonTypes.Primary}
311
+ type="submit"
312
+ >
313
+ Example CTA
314
+ </Button>
315
+ </CardActions>
316
+ </Card>
317
+ );
318
+ const cardWithOtherProps = (
319
+ <Card
320
+ id="otherProps"
321
+ imageProps={{
322
+ alt: "Alt text",
323
+ src: "https://placeimg.com/400/200/arch",
324
+ }}
325
+ data-testid="card-testid"
326
+ >
327
+ <CardHeading
328
+ level={HeadingLevels.Three}
329
+ id="heading1"
330
+ color="ui.error.secondary"
331
+ >
332
+ The Card Heading
333
+ </CardHeading>
334
+ <CardContent data-testid="cardcontent-testid">
335
+ middle column content
336
+ </CardContent>
337
+ <CardActions data-testid="cardaction-testid">
338
+ <Button
339
+ onClick={() => {}}
340
+ id="button1"
341
+ buttonType={ButtonTypes.Primary}
342
+ type="submit"
343
+ >
344
+ Example CTA
345
+ </Button>
346
+ </CardActions>
347
+ </Card>
348
+ );
237
349
  let container;
238
350
 
239
351
  it("renders a Card with a header, image, content, and CTAs", () => {
@@ -303,11 +415,13 @@ describe("Card", () => {
303
415
  );
304
416
  });
305
417
 
306
- it("Logs a warning when both `imageComponent` and `imageAspectRatio` are passed", () => {
418
+ it("Logs a warning when both `imageProps.component` and `imageProps.aspectRatio` are passed", () => {
307
419
  const warn = jest.spyOn(console, "warn");
308
420
  render(cardImageComponentAndRatio());
309
421
  expect(warn).toHaveBeenCalledWith(
310
- "Both `imageComponent` and `imageAspectRatio` are set but `imageAspectRatio` will be ignored in favor of the aspect ratio on `imageComponent`."
422
+ "NYPL Reservoir Card: Both the `imageProps.component` and `imageProps.aspectRatio` " +
423
+ "props were set but `imageProps.aspectRatio` will be ignored in favor " +
424
+ "of the aspect ratio on `imageProps.component` prop."
311
425
  );
312
426
  });
313
427
 
@@ -318,6 +432,9 @@ describe("Card", () => {
318
432
  const withNoContent = renderer.create(cardWithNoContent).toJSON();
319
433
  const withNoImage = renderer.create(cardWithNoImage).toJSON();
320
434
  const withFullClick = renderer.create(cardFullClick()).toJSON();
435
+ const withRightActions = renderer.create(cardWithRightActions()).toJSON();
436
+ const withChakraProps = renderer.create(cardWithChakraProps).toJSON();
437
+ const withOtherProps = renderer.create(cardWithOtherProps).toJSON();
321
438
 
322
439
  expect(regular).toMatchSnapshot();
323
440
  expect(withExtendedStyles).toMatchSnapshot();
@@ -325,5 +442,8 @@ describe("Card", () => {
325
442
  expect(withNoContent).toMatchSnapshot();
326
443
  expect(withNoImage).toMatchSnapshot();
327
444
  expect(withFullClick).toMatchSnapshot();
445
+ expect(withRightActions).toMatchSnapshot();
446
+ expect(withChakraProps).toMatchSnapshot();
447
+ expect(withOtherProps).toMatchSnapshot();
328
448
  });
329
449
  });
@@ -1,24 +1,24 @@
1
- import * as React from "react";
2
1
  import {
3
2
  Box,
3
+ chakra,
4
4
  LinkBox as ChakraLinkBox,
5
5
  LinkOverlay as ChakraLinkOverlay,
6
6
  useMultiStyleConfig,
7
7
  useStyleConfig,
8
8
  } from "@chakra-ui/react";
9
+ import * as React from "react";
9
10
 
10
- import { CardLayouts } from "./CardTypes";
11
+ import { LayoutTypes } from "../../helpers/enums";
11
12
  import Heading from "../Heading/Heading";
12
- import Image, { ImageProps } from "../Image/Image";
13
+ import Image, { ComponentImageProps, ImageProps } from "../Image/Image";
13
14
  import { ImageRatios, ImageSizes } from "../Image/ImageTypes";
14
- import generateUUID from "../../helpers/generateUUID";
15
-
15
+ import useWindowSize from "../../hooks/useWindowSize";
16
16
  interface CardBaseProps {
17
17
  /** Optional value to control the alignment of the text and elements. */
18
- center?: boolean;
18
+ isCentered?: boolean;
19
19
  /** Optional value to render the layout in a row or column.
20
- * Default is `CardLayouts.Column`. */
21
- layout?: CardLayouts;
20
+ * Default is `LayoutTypes.Column`. */
21
+ layout?: LayoutTypes;
22
22
  }
23
23
 
24
24
  interface CardLinkBoxProps {
@@ -26,6 +26,12 @@ interface CardLinkBoxProps {
26
26
  mainActionLink?: string;
27
27
  }
28
28
 
29
+ // Used internally only for the `imageProps` prop for the `Card` component.
30
+ interface CardImageProps extends ComponentImageProps {
31
+ /** Optional boolean value to control the position of the `CardImage`. */
32
+ isAtEnd?: boolean;
33
+ }
34
+
29
35
  interface CardActionsProps extends CardBaseProps {
30
36
  /** Optional boolean value to control visibility of border on the bottom edge
31
37
  * of the card actions element */
@@ -35,38 +41,29 @@ interface CardActionsProps extends CardBaseProps {
35
41
  topBorder?: boolean;
36
42
  }
37
43
 
38
- interface CardImageProps extends CardBaseProps, ImageProps {
44
+ /** Used only internally for the `CardImage` component. */
45
+ interface CardImageComponentProps extends CardBaseProps, ImageProps {
39
46
  /** Optional boolean value to control the position of the `CardImage`. */
40
- imageAtEnd?: boolean;
47
+ isAtEnd?: boolean;
41
48
  }
42
49
 
43
50
  export interface CardProps extends CardBaseProps, CardLinkBoxProps {
44
51
  /** Optional hex color value used to set the card background color. */
45
52
  backgroundColor?: string;
46
- /** Optional boolean value to control the visibility of a border around
47
- * the card. */
48
- border?: boolean;
49
53
  /** Optional CSS class name to add. */
50
54
  className?: string;
51
55
  /** Optional hex color value used to override the default text color. */
52
56
  foregroundColor?: string;
53
57
  /** ID that other components can cross reference for accessibility purposes. */
54
58
  id?: string;
55
- /** Text description of the image; to follow best practices for accessibility,
56
- * this prop should not be left blank if `imageSrc` is passed. */
57
- imageAlt?: string;
58
- /** Optional value to control the aspect ratio of the `CardImage`; default
59
- * value is `ImageRatios.Square`. */
60
- imageAspectRatio?: ImageRatios;
61
- /** Optional boolean value to control the position of the `CardImage`. */
62
- imageAtEnd?: boolean;
63
- /** Custom image component used in place of DS `Image` component. */
64
- imageComponent?: JSX.Element;
65
- /** Optional value to control the size of the `CardImage`. Default value is
66
- * `ImageSizes.Default`. */
67
- imageSize?: ImageSizes;
68
- /** The path to the image displayed within the `Card` component. */
69
- imageSrc?: string;
59
+ /** Optional boolean value to control the visibility of a border around
60
+ * the card. */
61
+ isBordered?: boolean;
62
+ /** Object used to create and render the `Image` component. */
63
+ imageProps?: CardImageProps;
64
+ /** Set CardActions to the right content side. This only works in
65
+ * the row layout. */
66
+ isAlignedRightActions?: boolean;
70
67
  }
71
68
 
72
69
  /**
@@ -74,31 +71,37 @@ export interface CardProps extends CardBaseProps, CardLinkBoxProps {
74
71
  * renders an `Image` component but with overriding styles specific to the
75
72
  * `Card` component.
76
73
  */
77
- function CardImage(props: React.ComponentProps<"img"> & CardImageProps) {
74
+ function CardImage(
75
+ props: React.ComponentProps<"img"> & CardImageComponentProps
76
+ ) {
78
77
  const {
79
78
  alt,
80
- center,
79
+ aspectRatio,
80
+ caption,
81
81
  component,
82
- imageSize,
83
- imageAspectRatio,
84
- src,
85
- imageAtEnd,
82
+ credit,
83
+ isAtEnd,
84
+ isCentered,
86
85
  layout,
86
+ size,
87
+ src,
87
88
  } = props;
88
89
  // Additional styles to add to the `Image` component.
89
90
  const styles = useStyleConfig("CardImage", {
90
- center,
91
- imageAtEnd,
92
- imageSize,
91
+ imageIsAtEnd: isAtEnd,
92
+ isCentered,
93
93
  layout,
94
+ size,
94
95
  });
95
96
  return (
96
97
  <Box __css={styles}>
97
98
  <Image
98
99
  alt={alt}
100
+ caption={caption}
99
101
  component={component}
100
- imageAspectRatio={imageAspectRatio}
101
- imageSize={imageSize}
102
+ credit={credit}
103
+ aspectRatio={aspectRatio}
104
+ size={size}
102
105
  src={src}
103
106
  />
104
107
  </Box>
@@ -106,27 +109,42 @@ function CardImage(props: React.ComponentProps<"img"> & CardImageProps) {
106
109
  }
107
110
 
108
111
  // CardHeading child-component
109
- export const CardHeading = Heading;
112
+ export const CardHeading = chakra(Heading);
110
113
 
111
114
  // CardContent child-component
112
- export function CardContent(props: React.PropsWithChildren<{}>) {
113
- const { children } = props;
115
+ export const CardContent = chakra((props: React.PropsWithChildren<{}>) => {
116
+ const { children, ...rest } = props;
114
117
  const styles = useStyleConfig("CardContent");
115
- return children && <Box __css={styles}>{children}</Box>;
116
- }
118
+ return (
119
+ children && (
120
+ <Box __css={styles} {...rest}>
121
+ {children}
122
+ </Box>
123
+ )
124
+ );
125
+ });
117
126
 
118
127
  // CardActions child-component
119
- export function CardActions(props: React.PropsWithChildren<CardActionsProps>) {
120
- const { bottomBorder, children, topBorder, center, layout } = props;
121
- const styles = useStyleConfig("CardActions", {
122
- bottomBorder,
123
- topBorder,
124
- center,
125
- layout,
126
- });
128
+ export const CardActions = chakra(
129
+ (props: React.PropsWithChildren<CardActionsProps>) => {
130
+ const { bottomBorder, children, isCentered, layout, topBorder, ...rest } =
131
+ props;
132
+ const styles = useStyleConfig("CardActions", {
133
+ bottomBorder,
134
+ isCentered,
135
+ layout,
136
+ topBorder,
137
+ });
127
138
 
128
- return children && <Box __css={styles}>{children}</Box>;
129
- }
139
+ return (
140
+ children && (
141
+ <Box __css={styles} {...rest}>
142
+ {children}
143
+ </Box>
144
+ )
145
+ );
146
+ }
147
+ );
130
148
 
131
149
  /**
132
150
  * If `mainActionLink` is passed, then this adds Chakra's `LinkBox` wrapper
@@ -162,51 +180,79 @@ function CardLinkOverlay({
162
180
  );
163
181
  }
164
182
 
165
- export default function Card(props: React.PropsWithChildren<CardProps>) {
183
+ export const Card = chakra((props: React.PropsWithChildren<CardProps>) => {
166
184
  const {
167
185
  backgroundColor,
168
- border,
169
- center = false,
170
186
  children,
171
187
  className,
172
188
  foregroundColor,
173
- id = generateUUID(),
174
- imageAlt = "",
175
- imageAspectRatio = ImageRatios.Square,
176
- imageAtEnd,
177
- imageComponent,
178
- imageSize = ImageSizes.Default,
179
- imageSrc,
180
- layout = CardLayouts.Column,
189
+ id,
190
+ imageProps = {
191
+ alt: "",
192
+ aspectRatio: ImageRatios.Square,
193
+ caption: undefined,
194
+ component: undefined,
195
+ credit: undefined,
196
+ isAtEnd: false,
197
+ size: ImageSizes.Default,
198
+ src: "",
199
+ },
200
+ isAlignedRightActions = false,
201
+ isBordered,
202
+ isCentered = false,
203
+ layout = LayoutTypes.Column,
181
204
  mainActionLink,
205
+ ...rest
182
206
  } = props;
183
- const hasImage = imageSrc || imageComponent;
184
- const finalImageAspectRatio = imageComponent
207
+ const hasImage = imageProps.src || imageProps.component;
208
+ const [finalImageSize, setFinalImageSize] = React.useState<ImageSizes>(
209
+ imageProps.size
210
+ );
211
+ const finalImageAspectRatio = imageProps.component
185
212
  ? ImageRatios.Original
186
- : imageAspectRatio;
213
+ : imageProps.aspectRatio;
187
214
  const customColors = {};
188
215
  const cardContents = [];
216
+ const cardRightContents = [];
217
+ const windowDimensions = useWindowSize();
189
218
  let cardHeadingCount = 0;
190
219
 
191
- if (imageComponent && imageAspectRatio !== ImageRatios.Square) {
220
+ if (imageProps.component && imageProps.aspectRatio !== ImageRatios.Square) {
192
221
  console.warn(
193
- "Both `imageComponent` and `imageAspectRatio` are set but `imageAspectRatio` will be ignored in favor of the aspect ratio on `imageComponent`."
222
+ "NYPL Reservoir Card: Both the `imageProps.component` and `imageProps.aspectRatio` " +
223
+ "props were set but `imageProps.aspectRatio` will be ignored in favor " +
224
+ "of the aspect ratio on `imageProps.component` prop."
194
225
  );
195
226
  }
196
227
 
228
+ // The `Card`'s image should always display as 100% width on mobile. To
229
+ // achieve this, we set the size to `ImageSizes.Default` only when the
230
+ // viewport is less than "600px". Otherwise, we set the size to
231
+ // the value passed in via `imageSize`.
232
+ React.useEffect(() => {
233
+ if (windowDimensions.width < 600) {
234
+ setFinalImageSize(ImageSizes.Default);
235
+ } else {
236
+ setFinalImageSize(imageProps.size);
237
+ }
238
+ }, [windowDimensions.width, imageProps.size]);
239
+
197
240
  backgroundColor && (customColors["backgroundColor"] = backgroundColor);
198
241
  foregroundColor && (customColors["color"] = foregroundColor);
199
242
 
200
243
  const styles = useMultiStyleConfig("Card", {
201
- border,
202
- center,
203
244
  hasImage,
204
- imageAtEnd,
245
+ imageIsAtEnd: imageProps.isAtEnd,
246
+ isBordered,
247
+ isCentered,
205
248
  layout,
206
249
  mainActionLink,
207
250
  });
208
251
 
209
252
  React.Children.map(children, (child: React.ReactElement, key) => {
253
+ const isCardActions =
254
+ child.type === CardActions || child.props.mdxType === "CardActions";
255
+
210
256
  if (child.type === CardHeading || child.props.mdxType === "CardHeading") {
211
257
  // If the child is a `CardHeading` component, then we add the
212
258
  // `CardLinkOverlay` inside of the `Heading` component and wrap its text.
@@ -227,7 +273,6 @@ export default function Card(props: React.PropsWithChildren<CardProps>) {
227
273
  ...child.props.additionalStyles,
228
274
  },
229
275
  key,
230
- center,
231
276
  // Override the child text with the potential `CardLinkOverlay`.
232
277
  children: newChildren,
233
278
  layout,
@@ -236,12 +281,20 @@ export default function Card(props: React.PropsWithChildren<CardProps>) {
236
281
  cardHeadingCount++;
237
282
  } else if (
238
283
  child.type === CardContent ||
239
- child.props.mdxType === "CardContent" ||
240
- child.type === CardActions ||
241
- child.props.mdxType === "CardActions"
284
+ child.props.mdxType === "CardContent"
242
285
  ) {
243
- const elem = React.cloneElement(child, { key, center, layout });
286
+ const elem = React.cloneElement(child, { key });
244
287
  cardContents.push(elem);
288
+ } else if (isCardActions) {
289
+ const elem = React.cloneElement(child, { key, isCentered, layout });
290
+
291
+ // Only allow `CardActions` to align to the right of the main
292
+ // `CardContent` component when in the row layout.
293
+ if (isAlignedRightActions && layout === LayoutTypes.Row) {
294
+ cardRightContents.push(elem);
295
+ } else {
296
+ cardContents.push(elem);
297
+ }
245
298
  }
246
299
  });
247
300
 
@@ -254,22 +307,35 @@ export default function Card(props: React.PropsWithChildren<CardProps>) {
254
307
  ...styles,
255
308
  ...customColors,
256
309
  }}
310
+ {...rest}
257
311
  >
258
312
  {hasImage && (
259
313
  <CardImage
260
- src={imageSrc ? imageSrc : null}
261
- component={imageComponent}
262
- alt={imageAlt}
263
- imageSize={imageSize}
264
- imageAspectRatio={finalImageAspectRatio}
265
- imageAtEnd={imageAtEnd}
314
+ alt={imageProps.alt}
315
+ aspectRatio={finalImageAspectRatio}
316
+ caption={imageProps.caption}
317
+ component={imageProps.component}
318
+ credit={imageProps.credit}
319
+ isAtEnd={imageProps.isAtEnd}
266
320
  layout={layout}
321
+ size={finalImageSize}
322
+ src={imageProps.src ? imageProps.src : undefined}
267
323
  />
268
324
  )}
269
325
  <Box className="card-body" __css={styles.body}>
270
326
  {cardContents}
271
327
  </Box>
328
+ {cardRightContents.length ? (
329
+ <Box
330
+ className="card-right"
331
+ __css={{ ...styles.body, ...styles.actions }}
332
+ >
333
+ {cardRightContents}
334
+ </Box>
335
+ ) : null}
272
336
  </Box>
273
337
  </CardLinkBox>
274
338
  );
275
- }
339
+ });
340
+
341
+ export default Card;