@nypl/design-system-react-components 0.25.13 → 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 (299) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +10 -10
  3. package/dist/components/Accordion/Accordion.d.ts +1 -1
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  5. package/dist/components/Button/Button.d.ts +2 -2
  6. package/dist/components/Card/Card.d.ts +11 -9
  7. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +5 -4
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
  10. package/dist/components/DatePicker/DatePicker.d.ts +5 -6
  11. package/dist/components/Fieldset/Fieldset.d.ts +5 -6
  12. package/dist/components/Form/Form.d.ts +6 -6
  13. package/dist/components/Grid/GridTypes.d.ts +7 -7
  14. package/dist/components/Grid/SimpleGrid.d.ts +1 -1
  15. package/dist/components/Heading/Heading.d.ts +1 -1
  16. package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
  17. package/dist/components/Hero/Hero.d.ts +2 -1
  18. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
  19. package/dist/components/Icons/Icon.d.ts +2 -1
  20. package/dist/components/Image/Image.d.ts +2 -2
  21. package/dist/components/Label/Label.d.ts +7 -4
  22. package/dist/components/Link/Link.d.ts +1 -1
  23. package/dist/components/List/List.d.ts +11 -11
  24. package/dist/components/List/ListTypes.d.ts +1 -1
  25. package/dist/components/Logo/Logo.d.ts +2 -1
  26. package/dist/components/Logo/LogoSvgs.d.ts +2 -0
  27. package/dist/components/Logo/LogoTypes.d.ts +2 -0
  28. package/dist/components/Notification/Notification.d.ts +4 -4
  29. package/dist/components/Pagination/Pagination.d.ts +2 -2
  30. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
  31. package/dist/components/Radio/Radio.d.ts +4 -6
  32. package/dist/components/RadioGroup/RadioGroup.d.ts +12 -6
  33. package/dist/components/SearchBar/SearchBar.d.ts +4 -4
  34. package/dist/components/Select/Select.d.ts +10 -6
  35. package/dist/components/Select/SelectTypes.d.ts +4 -0
  36. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +4 -3
  37. package/dist/components/Slider/Slider.d.ts +6 -4
  38. package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
  39. package/dist/components/StructuredContent/StructuredContent.d.ts +2 -2
  40. package/dist/components/Table/Table.d.ts +1 -1
  41. package/dist/components/Tabs/Tabs.d.ts +4 -3
  42. package/dist/components/Template/Template.d.ts +4 -3
  43. package/dist/components/Text/Text.d.ts +1 -1
  44. package/dist/components/TextInput/TextInput.d.ts +5 -5
  45. package/dist/components/Toggle/Toggle.d.ts +3 -4
  46. package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
  47. package/dist/design-system-react-components.cjs.development.js +1663 -1139
  48. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  49. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  50. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  51. package/dist/design-system-react-components.esm.js +1667 -1143
  52. package/dist/design-system-react-components.esm.js.map +1 -1
  53. package/dist/hooks/useCarouselStyles.d.ts +3 -2
  54. package/dist/hooks/useNYPLTheme.d.ts +12 -0
  55. package/dist/index.d.ts +4 -1
  56. package/dist/styles.css +1 -1
  57. package/dist/theme/components/button.d.ts +10 -2
  58. package/dist/theme/components/card.d.ts +42 -22
  59. package/dist/theme/components/checkbox.d.ts +5 -4
  60. package/dist/theme/components/checkboxGroup.d.ts +1 -1
  61. package/dist/theme/components/componentWrapper.d.ts +2 -2
  62. package/dist/theme/components/customTable.d.ts +84 -1
  63. package/dist/theme/components/fieldset.d.ts +4 -14
  64. package/dist/theme/components/global.d.ts +23 -17
  65. package/dist/theme/components/heading.d.ts +53 -0
  66. package/dist/theme/components/helperErrorText.d.ts +1 -0
  67. package/dist/theme/components/hero.d.ts +20 -14
  68. package/dist/theme/components/label.d.ts +9 -10
  69. package/dist/theme/components/list.d.ts +99 -9
  70. package/dist/theme/components/radio.d.ts +6 -4
  71. package/dist/theme/components/radioGroup.d.ts +1 -1
  72. package/dist/theme/components/select.d.ts +34 -5
  73. package/dist/theme/components/skeletonLoader.d.ts +2 -2
  74. package/dist/theme/components/slider.d.ts +6 -3
  75. package/dist/theme/components/structuredContent.d.ts +197 -0
  76. package/dist/theme/components/textInput.d.ts +18 -6
  77. package/dist/theme/components/toggle.d.ts +7 -4
  78. package/dist/theme/foundations/global.d.ts +2 -0
  79. package/dist/theme/foundations/radii.d.ts +1 -0
  80. package/dist/theme/foundations/spacing.d.ts +46 -43
  81. package/package.json +5 -6
  82. package/src/components/Accordion/Accordion.stories.mdx +9 -9
  83. package/src/components/Accordion/Accordion.test.tsx +21 -0
  84. package/src/components/Accordion/Accordion.tsx +13 -9
  85. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +276 -27
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  87. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +21 -5
  88. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +52 -31
  89. package/src/components/Breadcrumbs/Breadcrumbs.tsx +8 -7
  90. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
  91. package/src/components/Button/Button.stories.mdx +87 -23
  92. package/src/components/Button/Button.test.tsx +25 -0
  93. package/src/components/Button/Button.tsx +18 -7
  94. package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
  95. package/src/components/Card/Card.stories.mdx +287 -194
  96. package/src/components/Card/Card.test.tsx +102 -0
  97. package/src/components/Card/Card.tsx +73 -32
  98. package/src/components/Card/__snapshots__/Card.test.tsx.snap +195 -35
  99. package/src/components/Chakra/Grid.stories.mdx +4 -4
  100. package/src/components/Checkbox/Checkbox.stories.mdx +62 -10
  101. package/src/components/Checkbox/Checkbox.test.tsx +32 -9
  102. package/src/components/Checkbox/Checkbox.tsx +20 -15
  103. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +134 -7
  104. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +65 -17
  105. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +137 -81
  106. package/src/components/CheckboxGroup/CheckboxGroup.tsx +31 -21
  107. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +332 -97
  108. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
  109. package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
  110. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
  111. package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
  112. package/src/components/DatePicker/DatePicker.test.tsx +89 -13
  113. package/src/components/DatePicker/DatePicker.tsx +62 -56
  114. package/src/components/DatePicker/_DatePicker.scss +71 -13
  115. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
  116. package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
  117. package/src/components/Fieldset/Fieldset.test.tsx +58 -28
  118. package/src/components/Fieldset/Fieldset.tsx +35 -30
  119. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
  120. package/src/components/Form/Form.stories.mdx +72 -39
  121. package/src/components/Form/Form.test.tsx +58 -15
  122. package/src/components/Form/Form.tsx +89 -67
  123. package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
  124. package/src/components/Grid/GridTypes.tsx +7 -7
  125. package/src/components/Grid/SimpleGrid.stories.mdx +34 -6
  126. package/src/components/Grid/SimpleGrid.test.tsx +9 -0
  127. package/src/components/Grid/SimpleGrid.tsx +29 -20
  128. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
  129. package/src/components/Heading/Heading.stories.mdx +36 -3
  130. package/src/components/Heading/Heading.test.tsx +10 -0
  131. package/src/components/Heading/Heading.tsx +56 -50
  132. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +26 -7
  133. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
  134. package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
  135. package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
  136. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
  137. package/src/components/Hero/Hero.stories.mdx +125 -95
  138. package/src/components/Hero/Hero.test.tsx +33 -0
  139. package/src/components/Hero/Hero.tsx +135 -126
  140. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
  141. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
  142. package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -19
  143. package/src/components/HorizontalRule/HorizontalRule.tsx +9 -26
  144. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
  145. package/src/components/Icons/Icon.stories.mdx +31 -6
  146. package/src/components/Icons/Icon.test.tsx +38 -0
  147. package/src/components/Icons/Icon.tsx +93 -76
  148. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  149. package/src/components/Image/Image.stories.mdx +29 -5
  150. package/src/components/Image/Image.test.tsx +8 -0
  151. package/src/components/Image/Image.tsx +38 -26
  152. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  153. package/src/components/Label/Label.stories.mdx +42 -20
  154. package/src/components/Label/Label.test.tsx +42 -17
  155. package/src/components/Label/Label.tsx +22 -13
  156. package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
  157. package/src/components/Link/Link.stories.mdx +25 -1
  158. package/src/components/Link/Link.test.tsx +21 -0
  159. package/src/components/Link/Link.tsx +8 -8
  160. package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
  161. package/src/components/List/List.stories.mdx +75 -40
  162. package/src/components/List/List.test.tsx +67 -19
  163. package/src/components/List/List.tsx +38 -25
  164. package/src/components/List/ListTypes.tsx +1 -1
  165. package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
  166. package/src/components/Logo/Logo.stories.mdx +30 -6
  167. package/src/components/Logo/Logo.test.tsx +17 -0
  168. package/src/components/Logo/Logo.tsx +18 -6
  169. package/src/components/Logo/LogoSvgs.tsx +4 -0
  170. package/src/components/Logo/LogoTypes.tsx +2 -0
  171. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
  172. package/src/components/Modal/Modal.stories.mdx +13 -0
  173. package/src/components/Notification/Notification.stories.mdx +25 -1
  174. package/src/components/Notification/Notification.test.tsx +23 -0
  175. package/src/components/Notification/Notification.tsx +46 -44
  176. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
  177. package/src/components/Pagination/Pagination.stories.mdx +24 -4
  178. package/src/components/Pagination/Pagination.test.tsx +25 -0
  179. package/src/components/Pagination/Pagination.tsx +6 -6
  180. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
  181. package/src/components/Placeholder/Placeholder.tsx +3 -1
  182. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
  183. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +81 -11
  184. package/src/components/ProgressIndicator/ProgressIndicator.tsx +17 -9
  185. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
  186. package/src/components/Radio/Radio.stories.mdx +64 -12
  187. package/src/components/Radio/Radio.test.tsx +28 -8
  188. package/src/components/Radio/Radio.tsx +66 -63
  189. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +103 -6
  190. package/src/components/RadioGroup/RadioGroup.stories.mdx +224 -89
  191. package/src/components/RadioGroup/RadioGroup.test.tsx +122 -62
  192. package/src/components/RadioGroup/RadioGroup.tsx +106 -100
  193. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1236 -1020
  194. package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
  195. package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
  196. package/src/components/SearchBar/SearchBar.tsx +17 -8
  197. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
  198. package/src/components/Select/Select.stories.mdx +128 -49
  199. package/src/components/Select/Select.test.tsx +63 -16
  200. package/src/components/Select/Select.tsx +125 -92
  201. package/src/components/Select/SelectTypes.tsx +5 -0
  202. package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
  203. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +42 -10
  204. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +8 -0
  205. package/src/components/SkeletonLoader/SkeletonLoader.tsx +76 -72
  206. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
  207. package/src/components/Slider/Slider.stories.mdx +91 -42
  208. package/src/components/Slider/Slider.test.tsx +65 -17
  209. package/src/components/Slider/Slider.tsx +26 -19
  210. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
  211. package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
  212. package/src/components/StatusBadge/StatusBadge.test.tsx +16 -0
  213. package/src/components/StatusBadge/StatusBadge.tsx +25 -20
  214. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
  215. package/src/components/StructuredContent/StructuredContent.stories.mdx +131 -12
  216. package/src/components/StructuredContent/StructuredContent.test.tsx +34 -0
  217. package/src/components/StructuredContent/StructuredContent.tsx +80 -75
  218. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
  219. package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
  220. package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
  221. package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
  222. package/src/components/StyleGuide/ColorCard.tsx +1 -1
  223. package/src/components/StyleGuide/Colors.stories.mdx +1 -2
  224. package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
  225. package/src/components/StyleGuide/Forms.stories.mdx +27 -12
  226. package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
  227. package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
  228. package/src/components/StyleGuide/Typography.stories.mdx +30 -21
  229. package/src/components/Table/Table.stories.mdx +38 -11
  230. package/src/components/Table/Table.test.tsx +15 -0
  231. package/src/components/Table/Table.tsx +7 -7
  232. package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
  233. package/src/components/Tabs/Tabs.stories.mdx +52 -3
  234. package/src/components/Tabs/Tabs.test.tsx +16 -0
  235. package/src/components/Tabs/Tabs.tsx +10 -6
  236. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
  237. package/src/components/Template/Template.stories.mdx +47 -43
  238. package/src/components/Template/Template.test.tsx +33 -0
  239. package/src/components/Template/Template.tsx +65 -60
  240. package/src/components/Template/__snapshots__/Template.test.tsx.snap +191 -20
  241. package/src/components/Text/Text.stories.mdx +20 -1
  242. package/src/components/Text/Text.test.tsx +12 -0
  243. package/src/components/Text/Text.tsx +6 -4
  244. package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
  245. package/src/components/TextInput/TextInput.stories.mdx +65 -19
  246. package/src/components/TextInput/TextInput.test.tsx +42 -28
  247. package/src/components/TextInput/TextInput.tsx +121 -113
  248. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
  249. package/src/components/Toggle/Toggle.stories.mdx +80 -22
  250. package/src/components/Toggle/Toggle.test.tsx +27 -9
  251. package/src/components/Toggle/Toggle.tsx +22 -18
  252. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +128 -5
  253. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
  254. package/src/components/VideoPlayer/VideoPlayer.test.tsx +23 -0
  255. package/src/components/VideoPlayer/VideoPlayer.tsx +133 -126
  256. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
  257. package/src/docs/Chakra.stories.mdx +50 -9
  258. package/src/docs/Welcome.stories.mdx +160 -41
  259. package/src/hooks/useCarouselStyles.stories.mdx +22 -2
  260. package/src/hooks/useCarouselStyles.ts +3 -2
  261. package/src/hooks/useNYPLTheme.stories.mdx +101 -0
  262. package/src/hooks/useNYPLTheme.ts +30 -6
  263. package/src/hooks/useWindowSize.stories.mdx +23 -0
  264. package/src/index.ts +4 -1
  265. package/src/styles/base/_place-holder.scss +1 -1
  266. package/src/theme/components/button.ts +15 -7
  267. package/src/theme/components/card.ts +30 -19
  268. package/src/theme/components/checkbox.ts +10 -8
  269. package/src/theme/components/checkboxGroup.ts +1 -1
  270. package/src/theme/components/componentWrapper.ts +2 -2
  271. package/src/theme/components/customTable.ts +39 -31
  272. package/src/theme/components/fieldset.ts +1 -2
  273. package/src/theme/components/global.ts +25 -20
  274. package/src/theme/components/heading.ts +1 -1
  275. package/src/theme/components/helperErrorText.ts +1 -0
  276. package/src/theme/components/hero.ts +13 -15
  277. package/src/theme/components/label.ts +4 -3
  278. package/src/theme/components/list.ts +73 -66
  279. package/src/theme/components/notification.ts +2 -2
  280. package/src/theme/components/radio.ts +9 -9
  281. package/src/theme/components/radioGroup.ts +1 -1
  282. package/src/theme/components/select.ts +35 -22
  283. package/src/theme/components/skeletonLoader.ts +3 -3
  284. package/src/theme/components/slider.ts +8 -7
  285. package/src/theme/components/statusBadge.ts +2 -2
  286. package/src/theme/components/structuredContent.ts +66 -1
  287. package/src/theme/components/tabs.ts +2 -2
  288. package/src/theme/components/template.ts +9 -9
  289. package/src/theme/components/textInput.ts +13 -12
  290. package/src/theme/components/toggle.ts +17 -10
  291. package/src/theme/components/videoPlayer.ts +1 -1
  292. package/src/theme/foundations/colors.ts +1 -1
  293. package/src/theme/foundations/radii.ts +1 -0
  294. package/src/theme/foundations/spacing.ts +70 -22
  295. package/src/theme/foundations/typography.ts +2 -2
  296. package/src/utils/componentCategories.ts +1 -2
  297. package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
  298. package/dist/helpers/generateUUID.d.ts +0 -1
  299. package/src/helpers/generateUUID.tsx +0 -5
@@ -1,5 +1,5 @@
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 { HeroTypes, HeroSecondaryTypes } from "./HeroTypes";
5
5
  import Image from "../Image/Image";
@@ -49,144 +49,153 @@ for (const type in HeroTypes) {
49
49
  */
50
50
  const getVariant = (type) => variantMap[type] || HeroTypes.Primary;
51
51
 
52
- export default function Hero(props: React.PropsWithChildren<HeroProps>) {
53
- const {
54
- backgroundColor,
55
- backgroundImageSrc,
56
- foregroundColor,
57
- heading,
58
- heroType,
59
- imageAlt,
60
- imageSrc,
61
- locationDetails,
62
- subHeaderText,
63
- } = props;
64
- const variant = getVariant(heroType);
65
- const styles = useMultiStyleConfig("Hero", { variant });
66
- const headingStyles = styles.heading;
67
- // We want to add `Hero`-specific styling to the `Heading` component.
68
- const finalHeading =
69
- heading && React.cloneElement(heading, { additionalStyles: headingStyles });
70
- let backgroundImageStyle = {};
71
- let contentBoxStyling = {};
52
+ export const Hero = chakra(
53
+ (props: React.PropsWithChildren<HeroProps>) => {
54
+ const {
55
+ backgroundColor,
56
+ backgroundImageSrc,
57
+ foregroundColor,
58
+ heading,
59
+ heroType,
60
+ imageAlt,
61
+ imageSrc,
62
+ locationDetails,
63
+ subHeaderText,
64
+ ...rest
65
+ } = props;
66
+ const variant = getVariant(heroType);
67
+ const styles = useMultiStyleConfig("Hero", { variant });
68
+ const headingStyles = styles.heading;
69
+ // We want to add `Hero`-specific styling to the `Heading` component.
70
+ const finalHeading =
71
+ heading &&
72
+ React.cloneElement(heading, { additionalStyles: headingStyles });
73
+ let backgroundImageStyle = {};
74
+ let contentBoxStyling = {};
72
75
 
73
- if (imageSrc && !imageAlt) {
74
- console.warn(
75
- `NYPL Reservoir: The "imageSrc" prop was passed but the "imageAlt" props was not. This will make the rendered image inaccessible.`
76
- );
77
- }
76
+ if (imageSrc && !imageAlt) {
77
+ console.warn(
78
+ `NYPL Reservoir: The "imageSrc" prop was passed but the "imageAlt" props was not. This will make the rendered image inaccessible.`
79
+ );
80
+ }
78
81
 
79
- if (heroType === HeroTypes.Primary) {
80
- if (!backgroundImageSrc) {
82
+ if (heroType === HeroTypes.Primary) {
83
+ if (!backgroundImageSrc) {
84
+ console.warn(
85
+ "NYPL Reservoir Hero: It is recommended to use the `backgroundImageSrc` " +
86
+ "prop for the `HeroTypes.Primary` `heroType` variant."
87
+ );
88
+ }
89
+ if (imageAlt && imageSrc) {
90
+ console.warn(
91
+ "NYPL Reservoir Hero: The `imageSrc` and `imageAlt` props have been " +
92
+ "passed, but the `HeroTypes.Primary` `heroType` variant will not use it."
93
+ );
94
+ }
95
+ } else if (locationDetails) {
81
96
  console.warn(
82
- "NYPL Reservoir Hero: It is recommended to use the `backgroundImageSrc` " +
83
- "prop for the `HeroTypes.Primary` `heroType` variant."
97
+ "NYPL Reservoir Hero: The `locationDetails` prop should only be used " +
98
+ "with the `HeroTypes.Primary` `heroType` variant."
84
99
  );
85
100
  }
86
- if (imageAlt && imageSrc) {
101
+ if (HeroSecondaryTypes.includes(heroType) && backgroundImageSrc) {
87
102
  console.warn(
88
- "NYPL Reservoir Hero: The `imageSrc` and `imageAlt` props have been " +
89
- "passed, but the `HeroTypes.Primary` `heroType` variant will not use it."
103
+ "NYPL Reservoir Hero: The `backgroundImageSrc` prop has been passed, " +
104
+ "but the `HeroTypes.Secondary` `heroType` variant will not use it."
105
+ );
106
+ }
107
+ if (heroType === HeroTypes.Tertiary && (backgroundImageSrc || imageSrc)) {
108
+ console.warn(
109
+ "NYPL Reservoir Hero: The `HeroTypes.Tertiary` `heroType` variant hero " +
110
+ "will not use any of the image props."
111
+ );
112
+ }
113
+ if (heroType === HeroTypes.Campaign && (!backgroundImageSrc || !imageSrc)) {
114
+ console.warn(
115
+ "NYPL Reservoir Hero: It is recommended to use both the " +
116
+ "`backgroundImageSrc` and `imageSrc` props for the " +
117
+ "`HeroTypes.Campaign` `heroType` variant."
118
+ );
119
+ }
120
+ if (heroType === HeroTypes.FiftyFifty && backgroundImageSrc) {
121
+ console.warn(
122
+ "NYPL Reservoir Hero: The `backgroundImageSrc` prop has been passed, " +
123
+ "but the `HeroTypes.FiftyFifty` `heroType` variant hero will not use it."
90
124
  );
91
125
  }
92
- } else if (locationDetails) {
93
- console.warn(
94
- "NYPL Reservoir Hero: The `locationDetails` prop should only be used " +
95
- "with the `HeroTypes.Primary` `heroType` variant."
96
- );
97
- }
98
- if (HeroSecondaryTypes.includes(heroType) && backgroundImageSrc) {
99
- console.warn(
100
- "NYPL Reservoir Hero: The `backgroundImageSrc` prop has been passed, " +
101
- "but the `HeroTypes.Secondary` `heroType` variant will not use it."
102
- );
103
- }
104
- if (heroType === HeroTypes.Tertiary && (backgroundImageSrc || imageSrc)) {
105
- console.warn(
106
- "NYPL Reservoir Hero: The `HeroTypes.Tertiary` `heroType` variant hero " +
107
- "will not use any of the image props."
108
- );
109
- }
110
- if (heroType === HeroTypes.Campaign && (!backgroundImageSrc || !imageSrc)) {
111
- console.warn(
112
- "NYPL Reservoir Hero: It is recommended to use both the " +
113
- "`backgroundImageSrc` and `imageSrc` props for the " +
114
- "`HeroTypes.Campaign` `heroType` variant."
115
- );
116
- }
117
- if (heroType === HeroTypes.FiftyFifty && backgroundImageSrc) {
118
- console.warn(
119
- "NYPL Reservoir Hero: The `backgroundImageSrc` prop has been passed, " +
120
- "but the `HeroTypes.FiftyFifty` `heroType` variant hero will not use it."
121
- );
122
- }
123
126
 
124
- if (heroType === HeroTypes.Primary) {
125
- backgroundImageStyle = backgroundImageSrc
126
- ? { backgroundImage: `url(${backgroundImageSrc})` }
127
- : {};
128
- } else if (heroType === HeroTypes.Campaign) {
129
- backgroundImageStyle = backgroundImageSrc
130
- ? { backgroundImage: `url(${backgroundImageSrc})` }
131
- : { backgroundColor };
132
- } else if (
133
- heroType === HeroTypes.Tertiary ||
134
- heroType === HeroTypes.FiftyFifty
135
- ) {
136
- backgroundImageStyle = { backgroundColor };
137
- }
127
+ if (heroType === HeroTypes.Primary) {
128
+ backgroundImageStyle = backgroundImageSrc
129
+ ? { backgroundImage: `url(${backgroundImageSrc})` }
130
+ : {};
131
+ } else if (heroType === HeroTypes.Campaign) {
132
+ backgroundImageStyle = backgroundImageSrc
133
+ ? { backgroundImage: `url(${backgroundImageSrc})` }
134
+ : { backgroundColor };
135
+ } else if (
136
+ heroType === HeroTypes.Tertiary ||
137
+ heroType === HeroTypes.FiftyFifty
138
+ ) {
139
+ backgroundImageStyle = { backgroundColor };
140
+ }
138
141
 
139
- if (!HeroSecondaryTypes.includes(heroType)) {
140
- contentBoxStyling = {
141
- color: foregroundColor,
142
- backgroundColor,
143
- };
144
- } else if (foregroundColor || backgroundColor) {
145
- console.warn(
146
- "NYPL Reservoir Hero: The `foregroundColor` and/or `backgroundColor` " +
147
- "props have been passed, but the `HeroTypes.Secondary` `heroType` " +
148
- "variant will not use them."
149
- );
150
- }
142
+ if (!HeroSecondaryTypes.includes(heroType)) {
143
+ contentBoxStyling = {
144
+ color: foregroundColor,
145
+ backgroundColor,
146
+ };
147
+ } else if (foregroundColor || backgroundColor) {
148
+ console.warn(
149
+ "NYPL Reservoir Hero: The `foregroundColor` and/or `backgroundColor` " +
150
+ "props have been passed, but the `HeroTypes.Secondary` `heroType` " +
151
+ "variant will not use them."
152
+ );
153
+ }
151
154
 
152
- const childrenToRender =
153
- heroType === HeroTypes.Campaign ? (
154
- <>
155
- <Image alt={imageAlt} src={imageSrc} />
156
- <Box __css={styles.interior}>
157
- {finalHeading}
158
- {subHeaderText}
159
- </Box>
160
- </>
161
- ) : (
162
- <>
163
- {heroType !== HeroTypes.Primary && heroType !== HeroTypes.Tertiary && (
155
+ const childrenToRender =
156
+ heroType === HeroTypes.Campaign ? (
157
+ <>
164
158
  <Image alt={imageAlt} src={imageSrc} />
165
- )}
166
- {finalHeading}
167
- {heroType === HeroTypes.Tertiary && subHeaderText ? (
168
- <p>{subHeaderText}</p>
169
- ) : (
170
- <Box __css={styles.bodyText}>{subHeaderText}</Box>
171
- )}
172
- </>
173
- );
159
+ <Box __css={styles.interior}>
160
+ {finalHeading}
161
+ {subHeaderText}
162
+ </Box>
163
+ </>
164
+ ) : (
165
+ <>
166
+ {heroType !== HeroTypes.Primary &&
167
+ heroType !== HeroTypes.Tertiary && (
168
+ <Image alt={imageAlt} src={imageSrc} />
169
+ )}
170
+ {finalHeading}
171
+ {heroType === HeroTypes.Tertiary && subHeaderText ? (
172
+ <p>{subHeaderText}</p>
173
+ ) : (
174
+ <Box __css={styles.bodyText}>{subHeaderText}</Box>
175
+ )}
176
+ </>
177
+ );
174
178
 
175
- return (
176
- <Box
177
- data-testid="hero"
178
- data-responsive-background-image
179
- style={backgroundImageStyle}
180
- __css={styles}
181
- >
179
+ return (
182
180
  <Box
183
- data-testid="hero-content"
184
- style={contentBoxStyling}
185
- __css={styles.content}
181
+ data-testid="hero"
182
+ data-responsive-background-image
183
+ style={backgroundImageStyle}
184
+ __css={styles}
185
+ {...rest}
186
186
  >
187
- {childrenToRender}
187
+ <Box
188
+ data-testid="hero-content"
189
+ style={contentBoxStyling}
190
+ __css={styles.content}
191
+ >
192
+ {childrenToRender}
193
+ </Box>
194
+ {locationDetails}
188
195
  </Box>
189
- {locationDetails}
190
- </Box>
191
- );
192
- }
196
+ );
197
+ },
198
+ { shouldForwardProp: () => true }
199
+ );
200
+
201
+ export default Hero;
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports[`Hero Renders the UI snapshot correctly 1`] = `
4
4
  <div
5
- className="css-0"
5
+ className="css-1xdhyk6"
6
6
  data-responsive-background-image={true}
7
7
  data-testid="hero"
8
8
  style={
@@ -22,7 +22,7 @@ exports[`Hero Renders the UI snapshot correctly 1`] = `
22
22
  }
23
23
  >
24
24
  <h1
25
- className="chakra-heading css-0"
25
+ className="chakra-heading css-1xdhyk6"
26
26
  id="primary-hero"
27
27
  >
28
28
  Hero Primary
@@ -38,7 +38,7 @@ exports[`Hero Renders the UI snapshot correctly 1`] = `
38
38
 
39
39
  exports[`Hero Renders the UI snapshot correctly 2`] = `
40
40
  <div
41
- className="css-0"
41
+ className="css-1xdhyk6"
42
42
  data-responsive-background-image={true}
43
43
  data-testid="hero"
44
44
  style={Object {}}
@@ -54,7 +54,7 @@ exports[`Hero Renders the UI snapshot correctly 2`] = `
54
54
  src="https://placeimg.com/800/400/animals"
55
55
  />
56
56
  <h1
57
- className="chakra-heading css-0"
57
+ className="chakra-heading css-1xdhyk6"
58
58
  id="secondary-hero"
59
59
  >
60
60
  Hero Secondary
@@ -70,7 +70,7 @@ exports[`Hero Renders the UI snapshot correctly 2`] = `
70
70
 
71
71
  exports[`Hero Renders the UI snapshot correctly 3`] = `
72
72
  <div
73
- className="css-0"
73
+ className="css-1xdhyk6"
74
74
  data-responsive-background-image={true}
75
75
  data-testid="hero"
76
76
  style={Object {}}
@@ -86,7 +86,7 @@ exports[`Hero Renders the UI snapshot correctly 3`] = `
86
86
  src="https://placeimg.com/800/400/animals"
87
87
  />
88
88
  <h1
89
- className="chakra-heading css-0"
89
+ className="chakra-heading css-1xdhyk6"
90
90
  id="secondary-hero"
91
91
  >
92
92
  Hero Secondary Books and More
@@ -102,7 +102,7 @@ exports[`Hero Renders the UI snapshot correctly 3`] = `
102
102
 
103
103
  exports[`Hero Renders the UI snapshot correctly 4`] = `
104
104
  <div
105
- className="css-0"
105
+ className="css-1xdhyk6"
106
106
  data-responsive-background-image={true}
107
107
  data-testid="hero"
108
108
  style={Object {}}
@@ -118,7 +118,7 @@ exports[`Hero Renders the UI snapshot correctly 4`] = `
118
118
  src="https://placeimg.com/800/400/animals"
119
119
  />
120
120
  <h1
121
- className="chakra-heading css-0"
121
+ className="chakra-heading css-1xdhyk6"
122
122
  id="secondary-hero"
123
123
  >
124
124
  Hero Secondary Locations
@@ -134,7 +134,7 @@ exports[`Hero Renders the UI snapshot correctly 4`] = `
134
134
 
135
135
  exports[`Hero Renders the UI snapshot correctly 5`] = `
136
136
  <div
137
- className="css-0"
137
+ className="css-1xdhyk6"
138
138
  data-responsive-background-image={true}
139
139
  data-testid="hero"
140
140
  style={Object {}}
@@ -150,7 +150,7 @@ exports[`Hero Renders the UI snapshot correctly 5`] = `
150
150
  src="https://placeimg.com/800/400/animals"
151
151
  />
152
152
  <h1
153
- className="chakra-heading css-0"
153
+ className="chakra-heading css-1xdhyk6"
154
154
  id="secondary-hero"
155
155
  >
156
156
  Hero Secondary
@@ -166,7 +166,7 @@ exports[`Hero Renders the UI snapshot correctly 5`] = `
166
166
 
167
167
  exports[`Hero Renders the UI snapshot correctly 6`] = `
168
168
  <div
169
- className="css-0"
169
+ className="css-1xdhyk6"
170
170
  data-responsive-background-image={true}
171
171
  data-testid="hero"
172
172
  style={Object {}}
@@ -182,7 +182,7 @@ exports[`Hero Renders the UI snapshot correctly 6`] = `
182
182
  src="https://placeimg.com/800/400/animals"
183
183
  />
184
184
  <h1
185
- className="chakra-heading css-0"
185
+ className="chakra-heading css-1xdhyk6"
186
186
  id="secondary-hero"
187
187
  >
188
188
  Hero Secondary What's On
@@ -198,7 +198,7 @@ exports[`Hero Renders the UI snapshot correctly 6`] = `
198
198
 
199
199
  exports[`Hero Renders the UI snapshot correctly 7`] = `
200
200
  <div
201
- className="css-0"
201
+ className="css-1xdhyk6"
202
202
  data-responsive-background-image={true}
203
203
  data-testid="hero"
204
204
  style={
@@ -218,7 +218,7 @@ exports[`Hero Renders the UI snapshot correctly 7`] = `
218
218
  }
219
219
  >
220
220
  <h1
221
- className="chakra-heading css-0"
221
+ className="chakra-heading css-1xdhyk6"
222
222
  id="tertiary-hero"
223
223
  >
224
224
  Hero Tertiary
@@ -232,7 +232,7 @@ exports[`Hero Renders the UI snapshot correctly 7`] = `
232
232
 
233
233
  exports[`Hero Renders the UI snapshot correctly 8`] = `
234
234
  <div
235
- className="css-0"
235
+ className="css-1xdhyk6"
236
236
  data-responsive-background-image={true}
237
237
  data-testid="hero"
238
238
  style={
@@ -260,7 +260,7 @@ exports[`Hero Renders the UI snapshot correctly 8`] = `
260
260
  className="css-0"
261
261
  >
262
262
  <h1
263
- className="chakra-heading css-0"
263
+ className="chakra-heading css-1xdhyk6"
264
264
  id="campaign-hero"
265
265
  >
266
266
  Hero Campaign
@@ -273,7 +273,7 @@ exports[`Hero Renders the UI snapshot correctly 8`] = `
273
273
 
274
274
  exports[`Hero Renders the UI snapshot correctly 9`] = `
275
275
  <div
276
- className="css-0"
276
+ className="css-1xdhyk6"
277
277
  data-responsive-background-image={true}
278
278
  data-testid="hero"
279
279
  style={
@@ -305,3 +305,75 @@ exports[`Hero Renders the UI snapshot correctly 9`] = `
305
305
  </div>
306
306
  </div>
307
307
  `;
308
+
309
+ exports[`Hero Renders the UI snapshot correctly 10`] = `
310
+ <div
311
+ className="css-16h1ce8"
312
+ data-responsive-background-image={true}
313
+ data-testid="hero"
314
+ style={
315
+ Object {
316
+ "backgroundImage": "url(https://placeimg.com/1600/800/arch)",
317
+ }
318
+ }
319
+ >
320
+ <div
321
+ className="css-0"
322
+ data-testid="hero-content"
323
+ style={
324
+ Object {
325
+ "backgroundColor": undefined,
326
+ "color": undefined,
327
+ }
328
+ }
329
+ >
330
+ <h1
331
+ className="chakra-heading css-1xdhyk6"
332
+ id="chakra"
333
+ >
334
+ Hero Primary
335
+ </h1>
336
+ <div
337
+ className="css-0"
338
+ >
339
+ Example Subtitle
340
+ </div>
341
+ </div>
342
+ </div>
343
+ `;
344
+
345
+ exports[`Hero Renders the UI snapshot correctly 11`] = `
346
+ <div
347
+ className="css-1xdhyk6"
348
+ data-responsive-background-image={true}
349
+ data-testid="props"
350
+ style={
351
+ Object {
352
+ "backgroundImage": "url(https://placeimg.com/1600/800/arch)",
353
+ }
354
+ }
355
+ >
356
+ <div
357
+ className="css-0"
358
+ data-testid="hero-content"
359
+ style={
360
+ Object {
361
+ "backgroundColor": undefined,
362
+ "color": undefined,
363
+ }
364
+ }
365
+ >
366
+ <h1
367
+ className="chakra-heading css-1xdhyk6"
368
+ id="props"
369
+ >
370
+ Hero Primary
371
+ </h1>
372
+ <div
373
+ className="css-0"
374
+ >
375
+ Example Subtitle
376
+ </div>
377
+ </div>
378
+ </div>
379
+ `;
@@ -25,8 +25,6 @@ import { getCategory } from "../../utils/componentCategories";
25
25
  }}
26
26
  argTypes={{
27
27
  className: { control: false },
28
- height: { table: { defaultValue: { summary: "2px" } } },
29
- width: { table: { defaultValue: { summary: "100%" } } },
30
28
  }}
31
29
  />
32
30
 
@@ -35,7 +33,15 @@ import { getCategory } from "../../utils/componentCategories";
35
33
  | Component Version | DS Version |
36
34
  | ----------------- | ---------- |
37
35
  | Added | `0.23.0` |
38
- | Latest | `0.25.10` |
36
+ | Latest | `0.26.0` |
37
+
38
+ ## Table of Contents
39
+
40
+ - [Overview](#overview)
41
+ - [Component Props](#component-props)
42
+ - [Accessibility](#accessibility)
43
+
44
+ ## Overview
39
45
 
40
46
  <Description of={HorizontalRule} />
41
47
 
@@ -44,8 +50,24 @@ The `HorizontalRule` component renders a basic `<hr>` element. The `height`,
44
50
  number, a `px` value, a `em` value, or a `rem` value. Otherwise, the default
45
51
  value of "2px" will be used.
46
52
 
53
+ ## Component Props
54
+
47
55
  <Canvas withToolbar>
48
- <Story name="HorizontalRule">{(args) => <HorizontalRule {...args} />}</Story>
56
+ <Story name="HorizontalRule" args={{ align: "left" }}>
57
+ {(args) => <HorizontalRule {...args} />}
58
+ </Story>
49
59
  </Canvas>
50
60
 
51
61
  <ArgsTable story="HorizontalRule" />
62
+
63
+ ## Accessibility
64
+
65
+ The `HorizontalRule` component is not just a visual thematic break between
66
+ content or interfaces, it is also picked up by screenreaders. Internally, the
67
+ `HorizontalRule` component uses the `<hr>` element which has a `role` of
68
+ `"separator"`.
69
+
70
+ Resources:
71
+
72
+ - [MDN hr: The Thematic Break (Horizontal Rule) element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr)
73
+ - [Not Your Typical Horizontal Rules](https://www.sarasoueidan.com/blog/horizontal-rules/#)
@@ -24,25 +24,6 @@ describe("HorizontalRule", () => {
24
24
  expect(hrClass).toContain("custom-hr");
25
25
  });
26
26
 
27
- it("renders with proper custom class", () => {
28
- const warn = jest.spyOn(console, "warn");
29
- const { rerender } = render(
30
- <HorizontalRule className="custom-hr" height="20px" />
31
- );
32
- expect(warn).not.toHaveBeenCalledWith(
33
- "NYPL Reservoir HorizontalRule: An invalid value was passed for the " +
34
- "`height` prop, so the default value of 2px will be used. A valid " +
35
- "value should be a whole number, a `px` value, a `em` value, or a `rem` value."
36
- );
37
-
38
- rerender(<HorizontalRule className="custom-hr" height="20%" />);
39
- expect(warn).toHaveBeenCalledWith(
40
- "NYPL Reservoir HorizontalRule: An invalid value was passed for the " +
41
- "`height` prop, so the default value of 2px will be used. A valid " +
42
- "value should be a whole number, a `px` value, a `em` value, or a `rem` value."
43
- );
44
- });
45
-
46
27
  it("renders the UI snapshot correctly", () => {
47
28
  const basic = renderer.create(<HorizontalRule />).toJSON();
48
29
  const updatedHeight = renderer
@@ -55,10 +36,19 @@ describe("HorizontalRule", () => {
55
36
  const alignRight = renderer
56
37
  .create(<HorizontalRule align="right" />)
57
38
  .toJSON();
39
+ const withChakraProps = renderer
40
+ .create(<HorizontalRule p="20px" color="ui.error.primary" />)
41
+ .toJSON();
42
+ const withOtherProps = renderer
43
+ .create(<HorizontalRule data-testid="props" />)
44
+ .toJSON();
45
+
58
46
  expect(basic).toMatchSnapshot();
59
47
  expect(updatedHeight).toMatchSnapshot();
60
48
  expect(updatedWidth).toMatchSnapshot();
61
49
  expect(alignLeft).toMatchSnapshot();
62
50
  expect(alignRight).toMatchSnapshot();
51
+ expect(withChakraProps).toMatchSnapshot();
52
+ expect(withOtherProps).toMatchSnapshot();
63
53
  });
64
54
  });
@@ -1,5 +1,5 @@
1
1
  // HorizontalRule
2
- import { Box, useStyleConfig } from "@chakra-ui/react";
2
+ import { Box, chakra, useStyleConfig } from "@chakra-ui/react";
3
3
  import * as React from "react";
4
4
 
5
5
  export interface HorizontalRuleProps {
@@ -9,36 +9,19 @@ export interface HorizontalRuleProps {
9
9
  align?: "left" | "right";
10
10
  /** ClassName you can add in addition to `horizontal-rule` */
11
11
  className?: string;
12
- /** Optional height value. This value should be entered with the same
13
- * formatting as a CSS height attribute except for percent values (ex. `2`,
14
- * `5px`, `1.5rem`). If this prop is omitted or a percent value is used, the
15
- * horizontal rule will have a default height of 2px. */
16
- height?: string;
17
- /** Optional width value. This value should be entered with the same
18
- * formatting as a CSS width attribute (ex. `50%`, `640px`, `20rem`). If
19
- * omitted, the horizontal rule will have a default width of "100%". */
20
- width?: string;
21
12
  }
22
13
 
23
- export default function HorizontalRule(props: HorizontalRuleProps) {
24
- const { align, className, height = "2px", width = "100%" } = props;
14
+ export const HorizontalRule = chakra((props: HorizontalRuleProps) => {
15
+ const { align, className, ...rest } = props;
25
16
  const styles = useStyleConfig("HorizontalRule", { align });
26
- let finalHeight = height;
27
-
28
- if (height.endsWith("%")) {
29
- console.warn(
30
- "NYPL Reservoir HorizontalRule: An invalid value was passed for the " +
31
- "`height` prop, so the default value of 2px will be used. A valid " +
32
- "value should be a whole number, a `px` value, a `em` value, or a `rem` value."
33
- );
34
- finalHeight = "2px";
35
- }
36
17
 
37
18
  const finalStyles = {
38
19
  ...styles,
39
- height: finalHeight,
40
- width,
20
+ height: "2px",
21
+ width: "100%",
41
22
  };
42
23
 
43
- return <Box as="hr" className={className} __css={finalStyles} />;
44
- }
24
+ return <Box as="hr" className={className} __css={finalStyles} {...rest} />;
25
+ });
26
+
27
+ export default HorizontalRule;