@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
@@ -83,16 +83,18 @@ describe("StructuredContent Accessibility", () => {
83
83
  it("passes axe accessibility for HTML string text content", async () => {
84
84
  const { container } = render(
85
85
  <StructuredContent
86
+ bodyContent={htmlStringBodyContent}
86
87
  calloutText="This is the callout text"
87
88
  headingText="Heading text"
88
- imageAlt="Image alt text"
89
- imageAspectRatio={ImageRatios.Original}
90
- imageCaption="Image caption"
91
- imageCredit="Image credit"
92
- imagePosition={StructuredContentImagePosition.Left}
93
- imageSize={ImageSizes.Medium}
94
- imageSrc="https://placeimg.com/400/300/animals"
95
- bodyContent={htmlStringBodyContent}
89
+ imageProps={{
90
+ alt: "Image alt text",
91
+ aspectRatio: ImageRatios.Original,
92
+ caption: "Image caption",
93
+ credit: "Image credit",
94
+ position: StructuredContentImagePosition.Left,
95
+ size: ImageSizes.Medium,
96
+ src: "https://placeimg.com/400/300/animals",
97
+ }}
96
98
  />
97
99
  );
98
100
  expect(await axe(container)).toHaveNoViolations();
@@ -101,16 +103,18 @@ describe("StructuredContent Accessibility", () => {
101
103
  it("passes axe accessibility for HTML DOM text content", async () => {
102
104
  const { container } = render(
103
105
  <StructuredContent
106
+ bodyContent={htmlDOMBodyContent}
104
107
  calloutText="This is the callout text"
105
108
  headingText="Heading text"
106
- imageAlt="Image alt text"
107
- imageAspectRatio={ImageRatios.Original}
108
- imageCaption="Image caption"
109
- imageCredit="Image credit"
110
- imagePosition={StructuredContentImagePosition.Left}
111
- imageSize={ImageSizes.Medium}
112
- imageSrc="https://placeimg.com/400/300/animals"
113
- bodyContent={htmlDOMBodyContent}
109
+ imageProps={{
110
+ alt: "Image alt text",
111
+ aspectRatio: ImageRatios.Original,
112
+ caption: "Image caption",
113
+ credit: "Image credit",
114
+ position: StructuredContentImagePosition.Left,
115
+ size: ImageSizes.Medium,
116
+ src: "https://placeimg.com/400/300/animals",
117
+ }}
114
118
  />
115
119
  );
116
120
  expect(await axe(container)).toHaveNoViolations();
@@ -119,9 +123,9 @@ describe("StructuredContent Accessibility", () => {
119
123
  it("passes axe accessibility without an image", async () => {
120
124
  const { container } = render(
121
125
  <StructuredContent
126
+ bodyContent={htmlStringBodyContent}
122
127
  calloutText="This is the callout text"
123
128
  headingText="Heading text"
124
- bodyContent={htmlStringBodyContent}
125
129
  />
126
130
  );
127
131
  expect(await axe(container)).toHaveNoViolations();
@@ -132,16 +136,18 @@ describe("StructuredContent", () => {
132
136
  it("renders two headings, an image, and body text", () => {
133
137
  render(
134
138
  <StructuredContent
139
+ bodyContent={htmlStringBodyContent}
135
140
  calloutText="This is the callout text"
136
141
  headingText="Heading text"
137
- imageAlt="Image alt text"
138
- imageAspectRatio={ImageRatios.Original}
139
- imageCaption="Image caption"
140
- imageCredit="Image credit"
141
- imagePosition={StructuredContentImagePosition.Left}
142
- imageSize={ImageSizes.Medium}
143
- imageSrc="https://placeimg.com/400/300/animals"
144
- bodyContent={htmlStringBodyContent}
142
+ imageProps={{
143
+ alt: "Image alt text",
144
+ aspectRatio: ImageRatios.Original,
145
+ caption: "Image caption",
146
+ credit: "Image credit",
147
+ position: StructuredContentImagePosition.Left,
148
+ size: ImageSizes.Medium,
149
+ src: "https://placeimg.com/400/300/animals",
150
+ }}
145
151
  />
146
152
  );
147
153
  const mainHeading = screen.getByRole("heading", { level: 2 });
@@ -156,14 +162,16 @@ describe("StructuredContent", () => {
156
162
  it("optionally renders without the headings", () => {
157
163
  render(
158
164
  <StructuredContent
159
- imageAlt="Image alt text"
160
- imageAspectRatio={ImageRatios.Original}
161
- imageCaption="Image caption"
162
- imageCredit="Image credit"
163
- imagePosition={StructuredContentImagePosition.Left}
164
- imageSize={ImageSizes.Medium}
165
- imageSrc="https://placeimg.com/400/300/animals"
166
165
  bodyContent={htmlStringBodyContent}
166
+ imageProps={{
167
+ alt: "Image alt text",
168
+ aspectRatio: ImageRatios.Original,
169
+ caption: "Image caption",
170
+ credit: "Image credit",
171
+ position: StructuredContentImagePosition.Left,
172
+ size: ImageSizes.Medium,
173
+ src: "https://placeimg.com/400/300/animals",
174
+ }}
167
175
  />
168
176
  );
169
177
  const mainHeading = screen.queryByRole("heading", { level: 2 });
@@ -178,9 +186,9 @@ describe("StructuredContent", () => {
178
186
  it("optionally renders without the image", () => {
179
187
  render(
180
188
  <StructuredContent
189
+ bodyContent={htmlStringBodyContent}
181
190
  calloutText="This is the callout text"
182
191
  headingText="Heading text"
183
- bodyContent={htmlStringBodyContent}
184
192
  />
185
193
  );
186
194
  const mainHeading = screen.getByRole("heading", { level: 2 });
@@ -192,24 +200,27 @@ describe("StructuredContent", () => {
192
200
  expect(screen.getByText(/Lorem ipsum dolor sit amet/i)).toBeInTheDocument();
193
201
  });
194
202
 
195
- it("logs a warning when an image is used but no alt text is passed to `imageAlt`", () => {
203
+ it("logs a warning when an image is used but no alt text is passed to `imageProps.alt`", () => {
196
204
  const warn = jest.spyOn(console, "warn");
197
205
  render(
198
206
  <StructuredContent
207
+ bodyContent={htmlStringBodyContent}
199
208
  calloutText="This is the callout text"
200
209
  headingText="Heading text"
201
- imageAspectRatio={ImageRatios.Original}
202
- imageCaption="Image caption"
203
- imageCredit="Image credit"
204
- imagePosition={StructuredContentImagePosition.Left}
205
- imageSize={ImageSizes.Medium}
206
- imageSrc="https://placeimg.com/400/300/animals"
207
- bodyContent={htmlStringBodyContent}
210
+ imageProps={{
211
+ aspectRatio: ImageRatios.Original,
212
+ caption: "Image caption",
213
+ credit: "Image credit",
214
+ position: StructuredContentImagePosition.Left,
215
+ size: ImageSizes.Medium,
216
+ src: "https://placeimg.com/400/300/animals",
217
+ }}
208
218
  />
209
219
  );
210
220
 
211
221
  expect(warn).toHaveBeenCalledWith(
212
- "StructuredContent: `imageAlt` prop is required when using an image."
222
+ "NYPL Reservoir StructuredContent: The `imageProps.alt` prop is required " +
223
+ "when using an image."
213
224
  );
214
225
  expect(screen.getByRole("img")).toBeInTheDocument();
215
226
  });
@@ -217,16 +228,18 @@ describe("StructuredContent", () => {
217
228
  it("renders an image wrapped in figure when provided an image caption or credit", () => {
218
229
  const { rerender } = render(
219
230
  <StructuredContent
231
+ bodyContent={htmlStringBodyContent}
220
232
  calloutText="This is the callout text"
221
233
  headingText="Heading text"
222
- imageAlt="Image alt text"
223
- imageAspectRatio={ImageRatios.Original}
224
- imageCaption="Image caption"
225
- imageCredit="Image credit"
226
- imagePosition={StructuredContentImagePosition.Left}
227
- imageSize={ImageSizes.Medium}
228
- imageSrc="https://placeimg.com/400/300/animals"
229
- bodyContent={htmlStringBodyContent}
234
+ imageProps={{
235
+ alt: "Image alt text",
236
+ aspectRatio: ImageRatios.Original,
237
+ caption: "Image caption",
238
+ credit: "Image credit",
239
+ position: StructuredContentImagePosition.Left,
240
+ size: ImageSizes.Medium,
241
+ src: "https://placeimg.com/400/300/animals",
242
+ }}
230
243
  />
231
244
  );
232
245
  expect(screen.getByRole("img")).toBeInTheDocument();
@@ -237,15 +250,17 @@ describe("StructuredContent", () => {
237
250
  // Not passing in the image's caption
238
251
  rerender(
239
252
  <StructuredContent
253
+ bodyContent={htmlStringBodyContent}
240
254
  calloutText="This is the callout text"
241
255
  headingText="Heading text"
242
- imageAlt="Image alt text"
243
- imageAspectRatio={ImageRatios.Original}
244
- imageCredit="Image credit"
245
- imagePosition={StructuredContentImagePosition.Left}
246
- imageSize={ImageSizes.Medium}
247
- imageSrc="https://placeimg.com/400/300/animals"
248
- bodyContent={htmlStringBodyContent}
256
+ imageProps={{
257
+ alt: "Image alt text",
258
+ aspectRatio: ImageRatios.Original,
259
+ credit: "Image credit",
260
+ position: StructuredContentImagePosition.Left,
261
+ size: ImageSizes.Medium,
262
+ src: "https://placeimg.com/400/300/animals",
263
+ }}
249
264
  />
250
265
  );
251
266
  expect(screen.getByRole("img")).toBeInTheDocument();
@@ -257,14 +272,16 @@ describe("StructuredContent", () => {
257
272
  it("renders a simple image element when no image caption or credit are provided", () => {
258
273
  render(
259
274
  <StructuredContent
275
+ bodyContent={htmlStringBodyContent}
260
276
  calloutText="This is the callout text"
261
277
  headingText="Heading text"
262
- imageAlt="Image alt text"
263
- imageAspectRatio={ImageRatios.Original}
264
- imagePosition={StructuredContentImagePosition.Left}
265
- imageSize={ImageSizes.Medium}
266
- imageSrc="https://placeimg.com/400/300/animals"
267
- bodyContent={htmlStringBodyContent}
278
+ imageProps={{
279
+ alt: "Image alt text",
280
+ aspectRatio: ImageRatios.Original,
281
+ position: StructuredContentImagePosition.Left,
282
+ size: ImageSizes.Medium,
283
+ src: "https://placeimg.com/400/300/animals",
284
+ }}
268
285
  />
269
286
  );
270
287
  expect(screen.getByRole("img")).toBeInTheDocument();
@@ -277,91 +294,133 @@ describe("StructuredContent", () => {
277
294
  const withHTMLStringContent = renderer
278
295
  .create(
279
296
  <StructuredContent
297
+ bodyContent={htmlStringBodyContent}
280
298
  calloutText="This is the callout text"
281
299
  headingText="Heading text"
282
300
  id="withHTMLStringContent"
283
- imageAlt="Image alt text"
284
- imageAspectRatio={ImageRatios.Original}
285
- imageCaption="Image caption"
286
- imageCredit="Image credit"
287
- imagePosition={StructuredContentImagePosition.Left}
288
- imageSize={ImageSizes.Medium}
289
- imageSrc="https://placeimg.com/400/300/animals"
290
- bodyContent={htmlStringBodyContent}
301
+ imageProps={{
302
+ alt: "Image alt text",
303
+ aspectRatio: ImageRatios.Original,
304
+ caption: "Image caption",
305
+ credit: "Image credit",
306
+ position: StructuredContentImagePosition.Left,
307
+ size: ImageSizes.Medium,
308
+ src: "https://placeimg.com/400/300/animals",
309
+ }}
291
310
  />
292
311
  )
293
312
  .toJSON();
294
313
  const withHTMLDOMContent = renderer
295
314
  .create(
296
315
  <StructuredContent
316
+ bodyContent={htmlDOMBodyContent}
297
317
  calloutText="This is the callout text"
298
318
  headingText="Heading text"
299
319
  id="withHTMLDOMContent"
300
- imageAlt="Image alt text"
301
- imageAspectRatio={ImageRatios.Original}
302
- imageCaption="Image caption"
303
- imageCredit="Image credit"
304
- imagePosition={StructuredContentImagePosition.Left}
305
- imageSize={ImageSizes.Medium}
306
- imageSrc="https://placeimg.com/400/300/animals"
307
- bodyContent={htmlDOMBodyContent}
320
+ imageProps={{
321
+ alt: "Image alt text",
322
+ aspectRatio: ImageRatios.Original,
323
+ caption: "Image caption",
324
+ credit: "Image credit",
325
+ position: StructuredContentImagePosition.Left,
326
+ size: ImageSizes.Medium,
327
+ src: "https://placeimg.com/400/300/animals",
328
+ }}
308
329
  />
309
330
  )
310
331
  .toJSON();
311
332
  const withoutAnImage = renderer
312
333
  .create(
313
334
  <StructuredContent
335
+ bodyContent={htmlStringBodyContent}
314
336
  calloutText="This is the callout text"
315
337
  headingText="Heading text"
316
338
  id="withoutAnImage"
317
- bodyContent={htmlStringBodyContent}
318
339
  />
319
340
  )
320
341
  .toJSON();
321
342
  const withImageWithoutCaptionOrCredit = renderer
322
343
  .create(
323
344
  <StructuredContent
345
+ bodyContent={htmlStringBodyContent}
324
346
  calloutText="This is the callout text"
325
347
  headingText="Heading text"
326
348
  id="withImageWithoutCaptionOrCredit"
327
- imageAlt="Image alt text"
328
- imageAspectRatio={ImageRatios.Original}
329
- imagePosition={StructuredContentImagePosition.Left}
330
- imageSize={ImageSizes.Medium}
331
- imageSrc="https://placeimg.com/400/300/animals"
332
- bodyContent={htmlStringBodyContent}
349
+ imageProps={{
350
+ alt: "Image alt text",
351
+ aspectRatio: ImageRatios.Original,
352
+ position: StructuredContentImagePosition.Left,
353
+ size: ImageSizes.Medium,
354
+ src: "https://placeimg.com/400/300/animals",
355
+ }}
333
356
  />
334
357
  )
335
358
  .toJSON();
336
359
  const withoutHeading = renderer
337
360
  .create(
338
361
  <StructuredContent
362
+ bodyContent={htmlStringBodyContent}
339
363
  calloutText="This is the callout text"
340
364
  id="withoutHeading"
341
- imageAlt="Image alt text"
342
- imageAspectRatio={ImageRatios.Original}
343
- imageCaption="Image caption"
344
- imageCredit="Image credit"
345
- imagePosition={StructuredContentImagePosition.Left}
346
- imageSize={ImageSizes.Medium}
347
- imageSrc="https://placeimg.com/400/300/animals"
348
- bodyContent={htmlStringBodyContent}
365
+ imageProps={{
366
+ alt: "Image alt text",
367
+ aspectRatio: ImageRatios.Original,
368
+ caption: "Image caption",
369
+ credit: "Image credit",
370
+ position: StructuredContentImagePosition.Left,
371
+ size: ImageSizes.Medium,
372
+ src: "https://placeimg.com/400/300/animals",
373
+ }}
349
374
  />
350
375
  )
351
376
  .toJSON();
352
377
  const withoutCalloutText = renderer
353
378
  .create(
354
379
  <StructuredContent
380
+ bodyContent={htmlStringBodyContent}
355
381
  headingText="Heading text"
356
382
  id="withoutCalloutText"
357
- imageAlt="Image alt text"
358
- imageAspectRatio={ImageRatios.Original}
359
- imageCaption="Image caption"
360
- imageCredit="Image credit"
361
- imagePosition={StructuredContentImagePosition.Left}
362
- imageSize={ImageSizes.Medium}
363
- imageSrc="https://placeimg.com/400/300/animals"
383
+ />
384
+ )
385
+ .toJSON();
386
+ const withChakraProps = renderer
387
+ .create(
388
+ <StructuredContent
389
+ calloutText="This is the callout text"
390
+ headingText="Heading text"
391
+ id="withChakraProps"
392
+ imageProps={{
393
+ alt: "Image alt text",
394
+ aspectRatio: ImageRatios.Original,
395
+ caption: "Image caption",
396
+ credit: "Image credit",
397
+ position: StructuredContentImagePosition.Left,
398
+ size: ImageSizes.Medium,
399
+ src: "https://placeimg.com/400/300/animals",
400
+ }}
401
+ bodyContent={htmlStringBodyContent}
402
+ p="20px"
403
+ color="ui.error.primary"
404
+ />
405
+ )
406
+ .toJSON();
407
+ const withOtherProps = renderer
408
+ .create(
409
+ <StructuredContent
410
+ calloutText="This is the callout text"
411
+ headingText="Heading text"
412
+ id="withOtherProps"
413
+ imageProps={{
414
+ alt: "Image alt text",
415
+ aspectRatio: ImageRatios.Original,
416
+ caption: "Image caption",
417
+ credit: "Image credit",
418
+ position: StructuredContentImagePosition.Left,
419
+ size: ImageSizes.Medium,
420
+ src: "https://placeimg.com/400/300/animals",
421
+ }}
364
422
  bodyContent={htmlStringBodyContent}
423
+ data-testid="props"
365
424
  />
366
425
  )
367
426
  .toJSON();
@@ -372,5 +431,7 @@ describe("StructuredContent", () => {
372
431
  expect(withImageWithoutCaptionOrCredit).toMatchSnapshot();
373
432
  expect(withoutHeading).toMatchSnapshot();
374
433
  expect(withoutCalloutText).toMatchSnapshot();
434
+ expect(withChakraProps).toMatchSnapshot();
435
+ expect(withOtherProps).toMatchSnapshot();
375
436
  });
376
437
  });
@@ -1,12 +1,17 @@
1
+ import { Box, chakra, useMultiStyleConfig } from "@chakra-ui/react";
1
2
  import * as React from "react";
2
- import { Box, useMultiStyleConfig } from "@chakra-ui/react";
3
3
 
4
4
  import Heading from "../Heading/Heading";
5
- import { HeadingDisplaySizes, HeadingLevels } from "../Heading/HeadingTypes";
6
- import Image, { ImageProps } from "../Image/Image";
5
+ import { HeadingSizes, HeadingLevels } from "../Heading/HeadingTypes";
6
+ import Image, { ComponentImageProps, ImageProps } from "../Image/Image";
7
7
  import { ImageRatios, ImageSizes } from "../Image/ImageTypes";
8
8
  import { StructuredContentImagePosition } from "./StructuredContentTypes";
9
- import generateUUID from "../../helpers/generateUUID";
9
+
10
+ interface StructuredContentImageProps extends ComponentImageProps {
11
+ /** Optional value to control the positioning of the internal `Image` component.
12
+ * Defaults to `StructuredContentImagePosition.Left`. */
13
+ position?: StructuredContentImagePosition;
14
+ }
10
15
 
11
16
  export interface StructuredContentProps {
12
17
  /** Optional value to set the text for the callout heading text. */
@@ -17,27 +22,8 @@ export interface StructuredContentProps {
17
22
  headingText?: string;
18
23
  /** ID that other components can cross reference for accessibility purposes. */
19
24
  id?: string;
20
- /** String value used to populate the `alt` attribute of the internal `Image`
21
- * component's `img` element. @NOTE if an image is used, this value must be passed. */
22
- imageAlt?: string;
23
- /** Optional value to control the aspect ratio of the internal `Image` component.
24
- * Defaults to `ImageRatios.Square`. */
25
- imageAspectRatio?: ImageRatios;
26
- /** Optional value to render as a caption for the internal `Image` component. */
27
- imageCaption?: string;
28
- /** Optional DOM element to use instead of the DS `Image` component. */
29
- imageComponent?: JSX.Element;
30
- /** Optional value to render as a credit for the internal `Image` component. */
31
- imageCredit?: string;
32
- /** Optional value to control the positioning of the internal `Image` component.
33
- * Defaults to `StructuredContentImagePosition.Left`. */
34
- imagePosition?: StructuredContentImagePosition;
35
- /** Optional value to control the size of the internal `Image` component.
36
- * Defaults to `ImageSizes.Medium`. */
37
- imageSize?: ImageSizes;
38
- /** Optional value that contains the path to an image. If omitted, the internal
39
- * DS `Image` component will not render. */
40
- imageSrc?: string;
25
+ /** Object used to create and render the `Image` component. */
26
+ imageProps?: StructuredContentImageProps;
41
27
  /** Required value to set the text for the body content. */
42
28
  bodyContent: string | JSX.Element;
43
29
  }
@@ -46,17 +32,17 @@ export interface StructuredContentProps {
46
32
  * Internal component used in the `StructuredContent` component
47
33
  * that renders the DS `Image` component.
48
34
  */
49
- function StructuredContentImage(props: ImageProps) {
35
+ const StructuredContentImage = chakra((props: ImageProps) => {
50
36
  const {
51
37
  additionalFigureStyles,
52
38
  additionalImageStyles,
53
39
  additionalWrapperStyles,
54
40
  alt,
41
+ aspectRatio,
42
+ caption,
55
43
  component,
56
- imageAspectRatio,
57
- imageCaption,
58
- imageCredit,
59
- imageSize,
44
+ credit,
45
+ size,
60
46
  src,
61
47
  } = props;
62
48
  return (
@@ -66,88 +52,97 @@ function StructuredContentImage(props: ImageProps) {
66
52
  additionalWrapperStyles={additionalWrapperStyles}
67
53
  alt={alt}
68
54
  component={component}
69
- imageAspectRatio={imageAspectRatio}
70
- imageSize={imageSize}
71
- imageCaption={imageCaption}
72
- imageCredit={imageCredit}
55
+ aspectRatio={aspectRatio}
56
+ size={size}
57
+ caption={caption}
58
+ credit={credit}
73
59
  src={src}
74
60
  />
75
61
  );
76
- }
62
+ });
77
63
 
78
64
  /**
79
65
  * The `StructuredContent` component that displays a heading, callout content,
80
66
  * an image, and body content. All are optional except for body content.
81
67
  */
82
- export default function StructuredContent(
83
- props: React.PropsWithChildren<StructuredContentProps>
84
- ) {
85
- const {
86
- calloutText,
87
- className,
88
- headingText,
89
- id = generateUUID(),
90
- imageAlt = "",
91
- imageAspectRatio = ImageRatios.Square,
92
- imageCaption,
93
- imageComponent,
94
- imageCredit,
95
- imagePosition = StructuredContentImagePosition.Left,
96
- imageSize = ImageSizes.Medium,
97
- imageSrc,
98
- bodyContent,
99
- } = props;
100
- const hasImage = imageSrc || imageComponent;
101
- const hasFigureImage = imageCaption || imageCredit;
102
- const styles = useMultiStyleConfig("StructuredContent", {
103
- hasFigureImage,
104
- imageAspectRatio,
105
- imagePosition,
106
- });
107
- const finalBodyContent =
108
- typeof bodyContent === "string" ? (
109
- <div dangerouslySetInnerHTML={{ __html: bodyContent }} />
110
- ) : (
111
- <Box>{bodyContent}</Box>
112
- );
68
+ export const StructuredContent = chakra(
69
+ (props: React.PropsWithChildren<StructuredContentProps>) => {
70
+ const {
71
+ calloutText,
72
+ className,
73
+ headingText,
74
+ id,
75
+ imageProps = {
76
+ alt: "",
77
+ aspectRatio: ImageRatios.Square,
78
+ caption: undefined,
79
+ component: undefined,
80
+ credit: undefined,
81
+ position: StructuredContentImagePosition.Left,
82
+ size: ImageSizes.Medium,
83
+ src: "",
84
+ },
85
+ bodyContent,
86
+ ...rest
87
+ } = props;
88
+ const hasImage = imageProps.src || imageProps.component;
89
+ const hasFigureImage = imageProps.caption || imageProps.credit;
90
+ const styles = useMultiStyleConfig("StructuredContent", {
91
+ hasFigureImage,
92
+ imageAspectRatio: imageProps.aspectRatio,
93
+ imagePosition: imageProps.position,
94
+ });
95
+ const finalBodyContent =
96
+ typeof bodyContent === "string" ? (
97
+ <div
98
+ className="structuredcontent-body"
99
+ dangerouslySetInnerHTML={{ __html: bodyContent }}
100
+ />
101
+ ) : (
102
+ <Box className="structuredcontent-body">{bodyContent}</Box>
103
+ );
104
+
105
+ if (hasImage && !imageProps.alt) {
106
+ console.warn(
107
+ "NYPL Reservoir StructuredContent: The `imageProps.alt` prop is required " +
108
+ "when using an image."
109
+ );
110
+ }
113
111
 
114
- if (hasImage && !imageAlt) {
115
- console.warn(
116
- "StructuredContent: `imageAlt` prop is required when using an image."
112
+ return (
113
+ <Box id={id} className={className} __css={styles} {...rest}>
114
+ {headingText && (
115
+ <Heading id={`${id}-heading`} level={HeadingLevels.Two}>
116
+ {headingText}
117
+ </Heading>
118
+ )}
119
+ {calloutText && (
120
+ <Heading
121
+ id={`${id}-callout`}
122
+ level={HeadingLevels.Three}
123
+ size={HeadingSizes.Callout}
124
+ >
125
+ {calloutText}
126
+ </Heading>
127
+ )}
128
+ {hasImage && (
129
+ <StructuredContentImage
130
+ additionalFigureStyles={styles.imageFigure}
131
+ additionalImageStyles={styles.image}
132
+ additionalWrapperStyles={styles.imageWrapper}
133
+ alt={imageProps.alt}
134
+ component={imageProps.component}
135
+ aspectRatio={imageProps.aspectRatio}
136
+ caption={imageProps.caption}
137
+ credit={imageProps.credit}
138
+ size={imageProps.size}
139
+ src={imageProps.src ? imageProps.src : null}
140
+ />
141
+ )}
142
+ {finalBodyContent}
143
+ </Box>
117
144
  );
118
145
  }
146
+ );
119
147
 
120
- return (
121
- <Box id={id} className={className} __css={styles}>
122
- {headingText && (
123
- <Heading id={`${id}-heading`} level={HeadingLevels.Two}>
124
- {headingText}
125
- </Heading>
126
- )}
127
- {calloutText && (
128
- <Heading
129
- displaySize={HeadingDisplaySizes.Callout}
130
- id={`${id}-callout`}
131
- level={HeadingLevels.Three}
132
- >
133
- {calloutText}
134
- </Heading>
135
- )}
136
- {hasImage && (
137
- <StructuredContentImage
138
- additionalFigureStyles={styles.imageFigure}
139
- additionalImageStyles={styles.image}
140
- additionalWrapperStyles={styles.imageWrapper}
141
- alt={imageAlt}
142
- component={imageComponent}
143
- imageAspectRatio={imageAspectRatio}
144
- imageCaption={imageCaption}
145
- imageCredit={imageCredit}
146
- imageSize={imageSize}
147
- src={imageSrc ? imageSrc : null}
148
- />
149
- )}
150
- {finalBodyContent}
151
- </Box>
152
- );
153
- }
148
+ export default StructuredContent;