@nypl/design-system-react-components 0.25.7 → 0.25.10

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 (293) hide show
  1. package/CHANGELOG.md +119 -1
  2. package/README.md +1 -1
  3. package/dist/components/Button/Button.d.ts +6 -6
  4. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  5. package/dist/components/Card/Card.d.ts +6 -4
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  7. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  8. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  9. package/dist/components/DatePicker/DatePicker.d.ts +4 -3
  10. package/dist/components/Fieldset/Fieldset.d.ts +1 -3
  11. package/dist/components/Form/Form.d.ts +15 -14
  12. package/dist/components/Form/FormTypes.d.ts +2 -2
  13. package/dist/components/Heading/Heading.d.ts +7 -3
  14. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  15. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  16. package/dist/components/HorizontalRule/HorizontalRule.d.ts +3 -3
  17. package/dist/components/Icons/Icon.d.ts +4 -4
  18. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  19. package/dist/components/Icons/IconTypes.d.ts +1 -23
  20. package/dist/components/Image/Image.d.ts +11 -3
  21. package/dist/components/Image/ImageTypes.d.ts +3 -1
  22. package/dist/components/Link/LinkTypes.d.ts +1 -0
  23. package/dist/components/Logo/Logo.d.ts +28 -0
  24. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  25. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  26. package/dist/components/Modal/Modal.d.ts +0 -4
  27. package/dist/components/Notification/Notification.d.ts +4 -2
  28. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  29. package/dist/components/Radio/Radio.d.ts +6 -5
  30. package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
  31. package/dist/components/SearchBar/SearchBar.d.ts +15 -7
  32. package/dist/components/Select/Select.d.ts +5 -2
  33. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  34. package/dist/components/Slider/Slider.d.ts +3 -2
  35. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  36. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  37. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  38. package/dist/components/Table/Table.d.ts +29 -0
  39. package/dist/components/Template/Template.d.ts +30 -6
  40. package/dist/components/Text/Text.d.ts +2 -2
  41. package/dist/components/TextInput/TextInput.d.ts +4 -3
  42. package/dist/components/Toggle/Toggle.d.ts +48 -0
  43. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  44. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  45. package/dist/design-system-react-components.cjs.development.js +4698 -4405
  46. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  48. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  49. package/dist/design-system-react-components.esm.js +5862 -5573
  50. package/dist/design-system-react-components.esm.js.map +1 -1
  51. package/dist/index.d.ts +13 -8
  52. package/dist/resources.scss +0 -2
  53. package/dist/styles.css +2 -2
  54. package/dist/theme/components/breadcrumb.d.ts +1 -1
  55. package/dist/theme/components/button.d.ts +0 -12
  56. package/dist/theme/components/card.d.ts +14 -2
  57. package/dist/theme/components/customTable.d.ts +56 -0
  58. package/dist/theme/components/fieldset.d.ts +2 -2
  59. package/dist/theme/components/global.d.ts +1 -1
  60. package/dist/theme/components/heading.d.ts +4 -0
  61. package/dist/theme/components/label.d.ts +1 -1
  62. package/dist/theme/components/link.d.ts +14 -1
  63. package/dist/theme/components/list.d.ts +0 -2
  64. package/dist/theme/components/logo.d.ts +4 -0
  65. package/dist/theme/components/notification.d.ts +8 -4
  66. package/dist/theme/components/searchBar.d.ts +7 -13
  67. package/dist/theme/components/select.d.ts +1 -0
  68. package/dist/theme/components/structuredContent.d.ts +33 -0
  69. package/dist/theme/components/template.d.ts +10 -10
  70. package/dist/theme/components/textInput.d.ts +2 -0
  71. package/dist/theme/components/toggle.d.ts +71 -0
  72. package/dist/theme/foundations/spacing.d.ts +2 -0
  73. package/dist/utils/utils.d.ts +10 -0
  74. package/package.json +40 -37
  75. package/src/__tests__/utils/utils.test.ts +23 -1
  76. package/src/components/Accordion/Accordion.stories.mdx +16 -15
  77. package/src/components/Accordion/Accordion.test.tsx +45 -1
  78. package/src/components/Accordion/Accordion.tsx +20 -8
  79. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
  80. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  81. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  82. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  83. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
  84. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +25 -0
  85. package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
  86. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +103 -4
  87. package/src/components/Button/Button.stories.mdx +93 -48
  88. package/src/components/Button/Button.test.tsx +0 -12
  89. package/src/components/Button/Button.tsx +7 -8
  90. package/src/components/Button/ButtonTypes.tsx +0 -1
  91. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  92. package/src/components/Card/Card.stories.mdx +246 -64
  93. package/src/components/Card/Card.test.tsx +45 -22
  94. package/src/components/Card/Card.tsx +30 -14
  95. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  96. package/src/components/Chakra/Box.stories.mdx +3 -3
  97. package/src/components/Chakra/Center.stories.mdx +5 -5
  98. package/src/components/Chakra/Flex.stories.mdx +113 -0
  99. package/src/components/Chakra/Grid.stories.mdx +14 -17
  100. package/src/components/Chakra/Stack.stories.mdx +2 -2
  101. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  102. package/src/components/Checkbox/Checkbox.tsx +13 -8
  103. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  104. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  105. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  106. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  107. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  108. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  109. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  110. package/src/components/DatePicker/DatePicker.test.tsx +14 -12
  111. package/src/components/DatePicker/DatePicker.tsx +13 -10
  112. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  113. package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
  114. package/src/components/Fieldset/Fieldset.tsx +2 -4
  115. package/src/components/Form/Form.stories.mdx +75 -49
  116. package/src/components/Form/Form.test.tsx +92 -3
  117. package/src/components/Form/Form.tsx +28 -23
  118. package/src/components/Form/FormTypes.tsx +2 -2
  119. package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
  120. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  121. package/src/components/Heading/Heading.stories.mdx +59 -23
  122. package/src/components/Heading/Heading.test.tsx +82 -18
  123. package/src/components/Heading/Heading.tsx +31 -31
  124. package/src/components/Heading/HeadingTypes.tsx +6 -6
  125. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  126. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  127. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  128. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  129. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  130. package/src/components/Hero/Hero.stories.mdx +72 -53
  131. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
  132. package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
  133. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
  134. package/src/components/Icons/Icon.stories.mdx +77 -75
  135. package/src/components/Icons/Icon.tsx +4 -5
  136. package/src/components/Icons/IconSvgs.tsx +2 -42
  137. package/src/components/Icons/IconTypes.tsx +1 -24
  138. package/src/components/Image/Image.stories.mdx +214 -104
  139. package/src/components/Image/Image.test.tsx +10 -0
  140. package/src/components/Image/Image.tsx +21 -10
  141. package/src/components/Image/ImageTypes.ts +2 -0
  142. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  143. package/src/components/Label/Label.stories.mdx +21 -20
  144. package/src/components/Link/Link.stories.mdx +103 -53
  145. package/src/components/Link/Link.test.tsx +108 -7
  146. package/src/components/Link/Link.tsx +58 -19
  147. package/src/components/Link/LinkTypes.tsx +1 -0
  148. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  149. package/src/components/List/List.stories.mdx +37 -25
  150. package/src/components/List/List.tsx +1 -1
  151. package/src/components/Logo/Logo.stories.mdx +220 -0
  152. package/src/components/Logo/Logo.test.tsx +98 -0
  153. package/src/components/Logo/Logo.tsx +97 -0
  154. package/src/components/Logo/LogoSvgs.tsx +34 -0
  155. package/src/components/Logo/LogoTypes.tsx +32 -0
  156. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  157. package/src/components/Modal/Modal.stories.mdx +20 -5
  158. package/src/components/Modal/Modal.tsx +2 -8
  159. package/src/components/Notification/Notification.stories.mdx +96 -40
  160. package/src/components/Notification/Notification.test.tsx +62 -16
  161. package/src/components/Notification/Notification.tsx +26 -9
  162. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  163. package/src/components/Pagination/Pagination.stories.mdx +19 -9
  164. package/src/components/Pagination/Pagination.tsx +3 -3
  165. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  166. package/src/components/Placeholder/Placeholder.tsx +7 -14
  167. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  168. package/src/components/Radio/Radio.stories.mdx +39 -19
  169. package/src/components/Radio/Radio.tsx +13 -9
  170. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
  171. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  172. package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
  173. package/src/components/RadioGroup/RadioGroup.tsx +97 -94
  174. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
  175. package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
  176. package/src/components/SearchBar/SearchBar.stories.mdx +116 -34
  177. package/src/components/SearchBar/SearchBar.tsx +70 -50
  178. package/src/components/Select/Select.stories.mdx +177 -66
  179. package/src/components/Select/Select.test.tsx +91 -2
  180. package/src/components/Select/Select.tsx +29 -13
  181. package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
  182. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  183. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  184. package/src/components/Slider/Slider.stories.mdx +74 -23
  185. package/src/components/Slider/Slider.test.tsx +35 -0
  186. package/src/components/Slider/Slider.tsx +22 -11
  187. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
  188. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  189. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  190. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  191. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  192. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  193. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  194. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  195. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  196. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  197. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  198. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  199. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  200. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  201. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  202. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  203. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  204. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  205. package/src/components/Table/Table.stories.mdx +165 -0
  206. package/src/components/Table/Table.test.tsx +137 -0
  207. package/src/components/Table/Table.tsx +126 -0
  208. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
  209. package/src/components/Tabs/Tabs.stories.mdx +20 -14
  210. package/src/components/Tabs/Tabs.test.tsx +21 -5
  211. package/src/components/Tabs/Tabs.tsx +33 -18
  212. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
  213. package/src/components/Template/Template.stories.mdx +132 -49
  214. package/src/components/Template/Template.test.tsx +128 -6
  215. package/src/components/Template/Template.tsx +93 -13
  216. package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
  217. package/src/components/Text/Text.stories.mdx +33 -11
  218. package/src/components/Text/Text.tsx +2 -2
  219. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  220. package/src/components/TextInput/TextInput.test.tsx +96 -0
  221. package/src/components/TextInput/TextInput.tsx +12 -8
  222. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  223. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  224. package/src/components/Toggle/Toggle.test.tsx +140 -0
  225. package/src/components/Toggle/Toggle.tsx +123 -0
  226. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  227. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  228. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  229. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  230. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  231. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  232. package/src/docs/Chakra.stories.mdx +5 -8
  233. package/src/docs/Intro.stories.mdx +2 -2
  234. package/src/index.ts +19 -6
  235. package/src/styles/base/_03-base.scss +1 -1
  236. package/src/styles/base/_place-holder.scss +7 -7
  237. package/src/styles.scss +1 -5
  238. package/src/theme/components/breadcrumb.ts +5 -5
  239. package/src/theme/components/button.ts +5 -12
  240. package/src/theme/components/card.ts +9 -7
  241. package/src/theme/components/checkbox.ts +1 -1
  242. package/src/theme/components/customTable.ts +63 -0
  243. package/src/theme/components/datePicker.ts +1 -1
  244. package/src/theme/components/global.ts +7 -7
  245. package/src/theme/components/heading.ts +13 -11
  246. package/src/theme/components/helperErrorText.ts +1 -1
  247. package/src/theme/components/icon.ts +2 -2
  248. package/src/theme/components/image.ts +9 -1
  249. package/src/theme/components/link.ts +17 -5
  250. package/src/theme/components/list.ts +1 -3
  251. package/src/theme/components/logo.ts +54 -0
  252. package/src/theme/components/notification.ts +9 -7
  253. package/src/theme/components/searchBar.ts +7 -13
  254. package/src/theme/components/select.ts +1 -0
  255. package/src/theme/components/statusBadge.ts +1 -1
  256. package/src/theme/components/structuredContent.ts +54 -0
  257. package/src/theme/components/template.ts +10 -10
  258. package/src/theme/components/text.ts +6 -6
  259. package/src/theme/components/textInput.ts +1 -0
  260. package/src/theme/components/toggle.ts +69 -0
  261. package/src/theme/components/videoPlayer.ts +0 -2
  262. package/src/theme/foundations/global.ts +2 -2
  263. package/src/theme/foundations/spacing.ts +3 -0
  264. package/src/theme/foundations/typography.ts +84 -12
  265. package/src/theme/index.ts +8 -0
  266. package/src/utils/componentCategories.ts +5 -2
  267. package/src/utils/utils.ts +17 -0
  268. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  269. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  270. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  271. package/dist/components/Input/Input.d.ts +0 -36
  272. package/dist/components/Input/Input.stories.d.ts +0 -29
  273. package/dist/components/Input/InputTypes.d.ts +0 -6
  274. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  275. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  276. package/dist/helpers/getCSSVariable.d.ts +0 -1
  277. package/dist/interfaces.d.ts +0 -3
  278. package/dist/utils/bem.d.ts +0 -1
  279. package/src/__tests__/utils/bem.test.ts +0 -37
  280. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  281. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  282. package/src/components/CardEdition/CardEdition.tsx +0 -60
  283. package/src/components/CardEdition/_CardEdition.scss +0 -137
  284. package/src/components/Input/Input.stories.tsx +0 -133
  285. package/src/components/Input/Input.test.tsx +0 -266
  286. package/src/components/Input/Input.tsx +0 -81
  287. package/src/components/Input/InputTypes.tsx +0 -8
  288. package/src/components/Input/_Input.scss +0 -78
  289. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  290. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  291. package/src/helpers/getCSSVariable.tsx +0 -5
  292. package/src/interfaces.ts +0 -3
  293. package/src/utils/bem.ts +0 -44
@@ -7,45 +7,51 @@ import HelperErrorText from "./HelperErrorText";
7
7
 
8
8
  describe("HelperErrorText Accessibility", () => {
9
9
  it("passes axe accessibility test", async () => {
10
- const { container } = render(<HelperErrorText>Text</HelperErrorText>);
10
+ const { container } = render(<HelperErrorText text="Text" />);
11
11
  expect(await axe(container)).toHaveNoViolations();
12
12
  });
13
13
  });
14
14
 
15
15
  describe("HelperErrorText", () => {
16
16
  it("renders the text passed", () => {
17
- render(<HelperErrorText>Text</HelperErrorText>);
17
+ render(<HelperErrorText text="Text" />);
18
18
  expect(screen.getByText("Text")).toBeInTheDocument();
19
19
  });
20
20
 
21
+ it("renders the text passed as an HTML string", () => {
22
+ render(<HelperErrorText text="<b>This text is bold</b>" />);
23
+ expect(screen.getByText("This text is bold")).toBeInTheDocument();
24
+ });
25
+
26
+ it("renders the text passed as HTML", () => {
27
+ render(<HelperErrorText text={<b>This text is bold</b>} />);
28
+ expect(screen.getByText("This text is bold")).toBeInTheDocument();
29
+ });
30
+
21
31
  it("renders the invalid state", () => {
22
- const utils = render(<HelperErrorText>Text</HelperErrorText>);
32
+ const utils = render(<HelperErrorText text="Text" />);
23
33
 
24
34
  // False by default. Note, this is a custom `data-*` attribute only used
25
35
  // for testing the invalid state.
26
36
  expect(screen.getByText("Text")).toHaveAttribute("data-isinvalid", "false");
27
37
 
28
- utils.rerender(<HelperErrorText isInvalid>Text</HelperErrorText>);
38
+ utils.rerender(<HelperErrorText isInvalid text="Text" />);
29
39
  expect(screen.getByText("Text")).toHaveAttribute("data-isinvalid", "true");
30
40
  });
31
41
 
32
42
  it("has aria-live and aria-atomic attributes when errored", () => {
33
- render(<HelperErrorText isInvalid>Text</HelperErrorText>);
43
+ render(<HelperErrorText isInvalid text="Text" />);
34
44
  expect(screen.getByText("Text")).toHaveAttribute("aria-live", "polite");
35
45
  expect(screen.getByText("Text")).toHaveAttribute("aria-atomic");
36
46
  });
37
47
 
38
48
  it("accepts an aria-atomic value of false", () => {
39
- const utils = render(
40
- <HelperErrorText isInvalid>Static Text</HelperErrorText>
41
- );
49
+ const utils = render(<HelperErrorText isInvalid text="Static Text" />);
42
50
  // The default is "true".
43
51
  expect(screen.getByText("Static Text")).toHaveAttribute("aria-atomic");
44
52
 
45
53
  utils.rerender(
46
- <HelperErrorText ariaAtomic={false} isInvalid>
47
- Static Text
48
- </HelperErrorText>
54
+ <HelperErrorText ariaAtomic={false} isInvalid text="Static Text" />
49
55
  );
50
56
  // But the prop accepts false in case only part of the helper text
51
57
  // should only be read instead of the whole region.
@@ -57,16 +63,37 @@ describe("HelperErrorText", () => {
57
63
 
58
64
  it("Renders the UI snapshot correctly", () => {
59
65
  const basic = renderer
60
- .create(<HelperErrorText id="basic">Text</HelperErrorText>)
66
+ .create(<HelperErrorText id="basic" text="Text" />)
61
67
  .toJSON();
62
68
  const invalid = renderer
69
+ .create(<HelperErrorText id="invalid" isInvalid text="Text" />)
70
+ .toJSON();
71
+ const withHTMLString = renderer
63
72
  .create(
64
- <HelperErrorText id="invalid" isInvalid>
65
- Text
66
- </HelperErrorText>
73
+ <HelperErrorText
74
+ id="invalid"
75
+ isInvalid
76
+ text="This helper text <b>contains HTML in the string</b>."
77
+ />
67
78
  )
68
79
  .toJSON();
80
+ const withHTMLElement = renderer
81
+ .create(
82
+ <HelperErrorText
83
+ id="invalid"
84
+ isInvalid
85
+ text={
86
+ <>
87
+ This helper text <b>contains HTML</b>.
88
+ </>
89
+ }
90
+ />
91
+ )
92
+ .toJSON();
93
+
69
94
  expect(basic).toMatchSnapshot();
70
95
  expect(invalid).toMatchSnapshot();
96
+ expect(withHTMLString).toMatchSnapshot();
97
+ expect(withHTMLElement).toMatchSnapshot();
71
98
  });
72
99
  });
@@ -4,6 +4,7 @@ import { Box, useStyleConfig } from "@chakra-ui/react";
4
4
  import generateUUID from "../../helpers/generateUUID";
5
5
 
6
6
  export type AriaLiveValues = "assertive" | "off" | "polite";
7
+ export type HelperErrorTextType = string | JSX.Element;
7
8
 
8
9
  interface HelperErrorTextProps {
9
10
  /** Optionally pass in additional Chakra-based styles. */
@@ -24,38 +25,37 @@ interface HelperErrorTextProps {
24
25
  id?: string;
25
26
  /** Toggles between helper and invalid styling. */
26
27
  isInvalid?: boolean;
28
+ /** The text to display. */
29
+ text: HelperErrorTextType;
27
30
  }
28
31
 
29
32
  /**
30
33
  * Helper or Error text for forms
31
34
  */
32
- export default function HelperErrorText(
33
- props: React.PropsWithChildren<HelperErrorTextProps>
34
- ) {
35
- const {
36
- additionalStyles = {},
37
- ariaAtomic = true,
38
- ariaLive = "polite",
39
- children,
40
- className = "",
41
- id = generateUUID(),
42
- isInvalid = false,
43
- } = props;
35
+ export default function HelperErrorText({
36
+ additionalStyles = {},
37
+ ariaAtomic = true,
38
+ ariaLive = "polite",
39
+ className = "",
40
+ id = generateUUID(),
41
+ isInvalid = false,
42
+ text,
43
+ }: HelperErrorTextProps) {
44
44
  // Only announce the text in the invalid state.
45
45
  const announceAriaLive = isInvalid;
46
46
  const styles = useStyleConfig("HelperErrorText", { isInvalid });
47
47
  const finalStyles = { ...styles, ...additionalStyles };
48
-
49
- return (
50
- <Box
51
- id={id}
52
- className={className}
53
- aria-atomic={ariaAtomic}
54
- data-isinvalid={isInvalid}
55
- aria-live={announceAriaLive ? ariaLive : "off"}
56
- __css={finalStyles}
57
- >
58
- {children}
59
- </Box>
48
+ const props = {
49
+ "aria-atomic": ariaAtomic,
50
+ "aria-live": announceAriaLive ? ariaLive : "off",
51
+ className,
52
+ "data-isinvalid": isInvalid,
53
+ id,
54
+ __css: finalStyles,
55
+ };
56
+ return typeof text === "string" ? (
57
+ <Box {...props} dangerouslySetInnerHTML={{ __html: text }} />
58
+ ) : (
59
+ <Box {...props}>{text}</Box>
60
60
  );
61
61
  }
@@ -5,14 +5,47 @@ exports[`HelperErrorText Renders the UI snapshot correctly 1`] = `
5
5
  aria-atomic={true}
6
6
  aria-live="off"
7
7
  className=" css-0"
8
+ dangerouslySetInnerHTML={
9
+ Object {
10
+ "__html": "Text",
11
+ }
12
+ }
8
13
  data-isinvalid={false}
9
14
  id="basic"
10
- >
11
- Text
12
- </div>
15
+ />
13
16
  `;
14
17
 
15
18
  exports[`HelperErrorText Renders the UI snapshot correctly 2`] = `
19
+ <div
20
+ aria-atomic={true}
21
+ aria-live="polite"
22
+ className=" css-0"
23
+ dangerouslySetInnerHTML={
24
+ Object {
25
+ "__html": "Text",
26
+ }
27
+ }
28
+ data-isinvalid={true}
29
+ id="invalid"
30
+ />
31
+ `;
32
+
33
+ exports[`HelperErrorText Renders the UI snapshot correctly 3`] = `
34
+ <div
35
+ aria-atomic={true}
36
+ aria-live="polite"
37
+ className=" css-0"
38
+ dangerouslySetInnerHTML={
39
+ Object {
40
+ "__html": "This helper text <b>contains HTML in the string</b>.",
41
+ }
42
+ }
43
+ data-isinvalid={true}
44
+ id="invalid"
45
+ />
46
+ `;
47
+
48
+ exports[`HelperErrorText Renders the UI snapshot correctly 4`] = `
16
49
  <div
17
50
  aria-atomic={true}
18
51
  aria-live="polite"
@@ -20,6 +53,10 @@ exports[`HelperErrorText Renders the UI snapshot correctly 2`] = `
20
53
  data-isinvalid={true}
21
54
  id="invalid"
22
55
  >
23
- Text
56
+ This helper text
57
+ <b>
58
+ contains HTML
59
+ </b>
60
+ .
24
61
  </div>
25
62
  `;
@@ -1,20 +1,23 @@
1
+ import { Box, VStack } from "@chakra-ui/react";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
- import { Box, VStack } from "@chakra-ui/react";
10
10
 
11
+ import Heading from "../Heading/Heading";
12
+ import { HeadingLevels } from "../Heading/HeadingTypes";
11
13
  import Hero from "./Hero";
12
14
  import { HeroTypes, HeroSecondaryTypes } from "./HeroTypes";
13
15
  import Image from "../Image/Image";
14
- import Heading from "../Heading/Heading";
15
- import { HeadingLevels } from "../Heading/HeadingTypes";
16
16
  import { getCategory } from "../../utils/componentCategories";
17
17
  import DSProvider from "../../theme/provider";
18
+ import { getStorybookEnumValues } from "../../utils/utils";
19
+
20
+ export const enumValues = getStorybookEnumValues(HeroTypes, "HeroTypes");
18
21
 
19
22
  <Meta
20
23
  title={getCategory("Hero")}
@@ -23,18 +26,22 @@ import DSProvider from "../../theme/provider";
23
26
  parameters={{
24
27
  design: {
25
28
  type: "figma",
26
- url:
27
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10968%3A5314",
29
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36817%3A23704",
28
30
  },
29
31
  jest: ["Hero.test.tsx"],
30
32
  }}
31
33
  argTypes={{
32
- backgroundColor: { table: { disable: true } },
33
- foregroundColor: { table: { disable: true } },
34
- heading: { table: { disable: true } },
35
- image: { table: { disable: true } },
36
- locationDetails: { table: { disable: true } },
37
- subHeaderText: { table: { disable: true } },
34
+ backgroundColor: { control: false },
35
+ foregroundColor: { control: false },
36
+ heading: { control: false },
37
+ heroType: {
38
+ control: { type: "select" },
39
+ table: { defaultValue: { summary: "HeroTypes.Primary" } },
40
+ options: enumValues.options,
41
+ },
42
+ image: { control: false },
43
+ locationDetails: { control: false },
44
+ subHeaderText: { control: false },
38
45
  }}
39
46
  />
40
47
 
@@ -67,76 +74,88 @@ descriptive text and images.
67
74
 
68
75
  <Canvas withToolbar>
69
76
  <Story
70
- name="Hero Props"
77
+ name="Hero with Controls"
71
78
  args={{
72
- heroType: HeroTypes.Campaign,
79
+ backgroundColor: undefined,
80
+ backgroundImageSrc: undefined,
81
+ foregroundColor: undefined,
82
+ heading: undefined,
83
+ heroType: "HeroTypes.Primary",
84
+ image: undefined,
85
+ locationDetails: undefined,
86
+ subHeaderText: undefined,
73
87
  }}
74
88
  >
75
89
  {(args) =>
76
- (args.heroType === HeroTypes.Primary && (
90
+ (args.heroType === "HeroTypes.Primary" && (
77
91
  <Hero
78
92
  {...args}
93
+ backgroundImageSrc="https://placeimg.com/2400/800/nature"
79
94
  heading={
80
95
  <Heading level={HeadingLevels.One} id="1" text="Hero Primary" />
81
96
  }
97
+ heroType={enumValues.getValue(args.heroType)}
82
98
  subHeaderText="Example Subtitle"
83
- backgroundImageSrc="https://placeimg.com/2400/800/nature"
84
99
  />
85
100
  )) ||
86
- (HeroSecondaryTypes.includes(args.heroType) && (
101
+ (HeroSecondaryTypes.includes(enumValues.getValue(args.heroType)) && (
87
102
  <div className="nypl--books-and-more">
88
103
  <Hero
89
104
  {...args}
90
105
  heading={
91
106
  <Heading level={HeadingLevels.One} id="1" text="Hero Secondary" />
92
107
  }
93
- subHeaderText={secondarySubHeaderText}
108
+ heroType={enumValues.getValue(args.heroType)}
94
109
  image={image}
110
+ subHeaderText={secondarySubHeaderText}
95
111
  />
96
112
  </div>
97
113
  )) ||
98
- (args.heroType === HeroTypes.Tertiary && (
114
+ (args.heroType === "HeroTypes.Tertiary" && (
99
115
  <Hero
100
116
  {...args}
101
117
  heading={
102
118
  <Heading level={HeadingLevels.One} id="1" text="Hero Tertiary" />
103
119
  }
120
+ heroType={enumValues.getValue(args.heroType)}
104
121
  subHeaderText={otherSubHeaderText}
105
122
  />
106
123
  )) ||
107
- (args.heroType === HeroTypes.Campaign && (
124
+ (args.heroType === "HeroTypes.Campaign" && (
108
125
  <Hero
109
126
  {...args}
127
+ backgroundImageSrc="https://placeimg.com/2400/800/nature"
110
128
  heading={
111
129
  <Heading level={HeadingLevels.One} id="1" text="Hero Campaign" />
112
130
  }
113
- subHeaderText={otherSubHeaderText}
114
- backgroundImageSrc="https://placeimg.com/2400/800/nature"
131
+ heroType={enumValues.getValue(args.heroType)}
115
132
  image={
116
133
  <Image
117
134
  src="https://placeimg.com/800/400/animals"
118
135
  alt="Image example"
119
136
  />
120
137
  }
138
+ subHeaderText={otherSubHeaderText}
121
139
  />
122
140
  )) ||
123
- (args.heroType === HeroTypes.FiftyFifty && (
141
+ (args.heroType === "HeroTypes.FiftyFifty" && (
124
142
  <Hero
125
143
  {...args}
126
- subHeaderText={otherSubHeaderText}
144
+ heroType={enumValues.getValue(args.heroType)}
127
145
  image={
128
146
  <Image
129
147
  src="https://placeimg.com/600/200/animals"
130
148
  alt="Image example"
131
149
  />
132
150
  }
151
+ subHeaderText={otherSubHeaderText}
133
152
  />
134
153
  ))
135
154
  }
136
155
  </Story>
137
156
  </Canvas>
138
157
 
139
- <ArgsTable story="Hero Props" />
158
+ <ArgsTable story="Hero with Controls" />
140
159
 
141
160
  ## Color Variations for Secondary Hero
142
161
 
@@ -159,12 +178,12 @@ parent wrapper's CSS class name for background color updates. Now, the proper
159
178
  <Story name="Color Variations for Secondary Hero">
160
179
  <VStack spacing={10} align="stretch">
161
180
  <Heading
181
+ id="books-heading"
162
182
  level={HeadingLevels.Two}
163
183
  text="HeroTypes.SecondaryBooksAndMore"
164
- id="books-heading"
165
184
  />
166
185
  <Hero
167
- heroType={HeroTypes.SecondaryBooksAndMore}
186
+ image={image}
168
187
  heading={
169
188
  <Heading
170
189
  level={HeadingLevels.One}
@@ -172,16 +191,16 @@ parent wrapper's CSS class name for background color updates. Now, the proper
172
191
  text="Books and More"
173
192
  />
174
193
  }
194
+ heroType={HeroTypes.SecondaryBooksAndMore}
175
195
  subHeaderText={secondarySubHeaderText}
176
- image={image}
177
196
  />
178
197
  <Heading
198
+ id="location-heading"
179
199
  level={HeadingLevels.Two}
180
200
  text="HeroTypes.SecondaryLocations"
181
- id="location-heading"
182
201
  />
183
202
  <Hero
184
- heroType={HeroTypes.SecondaryLocations}
203
+ image={image}
185
204
  heading={
186
205
  <Heading
187
206
  level={HeadingLevels.One}
@@ -189,16 +208,16 @@ parent wrapper's CSS class name for background color updates. Now, the proper
189
208
  text="Locations"
190
209
  />
191
210
  }
211
+ heroType={HeroTypes.SecondaryLocations}
192
212
  subHeaderText={secondarySubHeaderText}
193
- image={image}
194
213
  />
195
214
  <Heading
215
+ id="research-heading"
196
216
  level={HeadingLevels.Two}
197
217
  text="HeroTypes.SecondaryResearch"
198
- id="research-heading"
199
218
  />
200
219
  <Hero
201
- heroType={HeroTypes.SecondaryResearch}
220
+ image={image}
202
221
  heading={
203
222
  <Heading
204
223
  level={HeadingLevels.One}
@@ -206,16 +225,15 @@ parent wrapper's CSS class name for background color updates. Now, the proper
206
225
  text="Research"
207
226
  />
208
227
  }
228
+ heroType={HeroTypes.SecondaryResearch}
209
229
  subHeaderText={secondarySubHeaderText}
210
- image={image}
211
230
  />
212
231
  <Heading
232
+ id="whats-on-heading"
213
233
  level={HeadingLevels.Two}
214
234
  text="HeroTypes.SecondaryWhatsOn"
215
- id="whats-on-heading"
216
235
  />
217
236
  <Hero
218
- heroType={HeroTypes.SecondaryWhatsOn}
219
237
  heading={
220
238
  <Heading
221
239
  level={HeadingLevels.One}
@@ -223,8 +241,9 @@ parent wrapper's CSS class name for background color updates. Now, the proper
223
241
  text="What's On"
224
242
  />
225
243
  }
226
- subHeaderText={secondarySubHeaderText}
244
+ heroType={HeroTypes.SecondaryWhatsOn}
227
245
  image={image}
246
+ subHeaderText={secondarySubHeaderText}
228
247
  />
229
248
  </VStack>
230
249
  </Story>
@@ -237,7 +256,7 @@ parent wrapper's CSS class name for background color updates. Now, the proper
237
256
  <VStack spacing={10} align="stretch">
238
257
  <Heading level={HeadingLevels.Two} text="Primary" id="primary-heading" />
239
258
  <Hero
240
- heroType={HeroTypes.Primary}
259
+ backgroundImageSrc="https://placeimg.com/1600/800/arch"
241
260
  heading={
242
261
  <Heading
243
262
  level={HeadingLevels.One}
@@ -245,16 +264,15 @@ parent wrapper's CSS class name for background color updates. Now, the proper
245
264
  text="Hero Primary"
246
265
  />
247
266
  }
248
- backgroundImageSrc="https://placeimg.com/1600/800/arch"
267
+ heroType={HeroTypes.Primary}
249
268
  />
250
269
  <Heading
270
+ id="secondary-heading"
251
271
  level={HeadingLevels.Two}
252
272
  text="Secondary"
253
- id="secondary-heading"
254
273
  />
255
274
  <div className="nypl--locations">
256
275
  <Hero
257
- heroType={HeroTypes.Secondary}
258
276
  heading={
259
277
  <Heading
260
278
  level={HeadingLevels.One}
@@ -262,17 +280,17 @@ parent wrapper's CSS class name for background color updates. Now, the proper
262
280
  text="Hero Secondary"
263
281
  />
264
282
  }
265
- subHeaderText={secondarySubHeaderText}
283
+ heroType={HeroTypes.Secondary}
266
284
  image={image}
285
+ subHeaderText={secondarySubHeaderText}
267
286
  />
268
287
  </div>
269
288
  <Heading
289
+ id="tertiary-heading"
270
290
  level={HeadingLevels.Two}
271
291
  text="Tertiary"
272
- id="tertiary-heading"
273
292
  />
274
293
  <Hero
275
- heroType={HeroTypes.Tertiary}
276
294
  heading={
277
295
  <Heading
278
296
  level={HeadingLevels.One}
@@ -280,10 +298,10 @@ parent wrapper's CSS class name for background color updates. Now, the proper
280
298
  text="Hero Tertiary with Sub-Header"
281
299
  />
282
300
  }
301
+ heroType={HeroTypes.Tertiary}
283
302
  subHeaderText={otherSubHeaderText}
284
303
  />
285
304
  <Hero
286
- heroType={HeroTypes.Tertiary}
287
305
  heading={
288
306
  <Heading
289
307
  level={HeadingLevels.One}
@@ -291,13 +309,15 @@ parent wrapper's CSS class name for background color updates. Now, the proper
291
309
  text="Hero Tertiary without Sub-Header"
292
310
  />
293
311
  }
312
+ heroType={HeroTypes.Tertiary}
294
313
  />
295
314
  <Heading
315
+ id="campaign-heading"
296
316
  level={HeadingLevels.Two}
297
317
  text="Campaign"
298
- id="campaign-heading"
299
318
  />
300
319
  <Hero
320
+ backgroundImageSrc="https://placeimg.com/2400/800/nature/grayscale"
301
321
  heroType={HeroTypes.Campaign}
302
322
  heading={
303
323
  <Heading
@@ -306,20 +326,19 @@ parent wrapper's CSS class name for background color updates. Now, the proper
306
326
  text="Hero Campaign"
307
327
  />
308
328
  }
309
- subHeaderText={otherSubHeaderText}
310
- backgroundImageSrc="https://placeimg.com/2400/800/nature/grayscale"
311
329
  image={image}
330
+ subHeaderText={otherSubHeaderText}
312
331
  />
313
332
  <Box marginTop="30px" />
314
333
  <Heading
334
+ id="fiftyfifty-heading"
315
335
  level={HeadingLevels.Two}
316
336
  text="FiftyFifty"
317
- id="fiftyfifty-heading"
318
337
  />
319
338
  <Hero
320
339
  heroType={HeroTypes.FiftyFifty}
321
- subHeaderText={otherSubHeaderText}
322
340
  image={image}
341
+ subHeaderText={otherSubHeaderText}
323
342
  />
324
343
  </VStack>
325
344
  </DSProvider>
@@ -1,14 +1,15 @@
1
+ import { action } from "@storybook/addon-actions";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
10
 
10
11
  import HorizontalRule from "./HorizontalRule";
11
- import { action } from "@storybook/addon-actions";
12
+ import SimpleGrid from "../Grid/SimpleGrid";
12
13
  import { getCategory } from "../../utils/componentCategories";
13
14
 
14
15
  <Meta
@@ -18,13 +19,14 @@ import { getCategory } from "../../utils/componentCategories";
18
19
  parameters={{
19
20
  design: {
20
21
  type: "figma",
21
- url:
22
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=19659%3A0",
22
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=19659%3A0",
23
23
  },
24
24
  jest: ["HorizontalRule.test.tsx"],
25
25
  }}
26
26
  argTypes={{
27
- className: { table: { disable: true } },
27
+ className: { control: false },
28
+ height: { table: { defaultValue: { summary: "2px" } } },
29
+ width: { table: { defaultValue: { summary: "100%" } } },
28
30
  }}
29
31
  />
30
32
 
@@ -33,7 +35,7 @@ import { getCategory } from "../../utils/componentCategories";
33
35
  | Component Version | DS Version |
34
36
  | ----------------- | ---------- |
35
37
  | Added | `0.23.0` |
36
- | Latest | `0.25.3` |
38
+ | Latest | `0.25.10` |
37
39
 
38
40
  <Description of={HorizontalRule} />
39
41
 
@@ -1,6 +1,6 @@
1
1
  // HorizontalRule
2
- import * as React from "react";
3
2
  import { Box, useStyleConfig } from "@chakra-ui/react";
3
+ import * as React from "react";
4
4
 
5
5
  export interface HorizontalRuleProps {
6
6
  /** Optional alignment value to align the horizontal rule to one side or the
@@ -16,14 +16,12 @@ export interface HorizontalRuleProps {
16
16
  height?: string;
17
17
  /** Optional width value. This value should be entered with the same
18
18
  * formatting as a CSS width attribute (ex. `50%`, `640px`, `20rem`). If
19
- * omitted, the horizontal rule will have a default width of "auto". */
19
+ * omitted, the horizontal rule will have a default width of "100%". */
20
20
  width?: string;
21
21
  }
22
22
 
23
- export default function HorizontalRule(
24
- props: React.ComponentProps<"hr"> & HorizontalRuleProps
25
- ) {
26
- const { align, className, height = "2px", width = "auto" } = props;
23
+ export default function HorizontalRule(props: HorizontalRuleProps) {
24
+ const { align, className, height = "2px", width = "100%" } = props;
27
25
  const styles = useStyleConfig("HorizontalRule", { align });
28
26
  let finalHeight = height;
29
27