@nypl/design-system-react-components 0.25.8 → 0.25.11

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 (282) hide show
  1. package/CHANGELOG.md +110 -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 +0 -21
  19. package/dist/components/Icons/IconTypes.d.ts +0 -23
  20. package/dist/components/Image/Image.d.ts +11 -3
  21. package/dist/components/List/List.d.ts +1 -1
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +34 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +46 -0
  25. package/dist/components/Modal/Modal.d.ts +0 -4
  26. package/dist/components/Notification/Notification.d.ts +4 -2
  27. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  28. package/dist/components/Radio/Radio.d.ts +6 -5
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
  30. package/dist/components/SearchBar/SearchBar.d.ts +15 -7
  31. package/dist/components/Select/Select.d.ts +7 -2
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  33. package/dist/components/Slider/Slider.d.ts +3 -2
  34. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  35. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  36. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  37. package/dist/components/Table/Table.d.ts +29 -0
  38. package/dist/components/Template/Template.d.ts +30 -6
  39. package/dist/components/Text/Text.d.ts +2 -2
  40. package/dist/components/TextInput/TextInput.d.ts +4 -3
  41. package/dist/components/Toggle/Toggle.d.ts +3 -2
  42. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  43. package/dist/design-system-react-components.cjs.development.js +6721 -5777
  44. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  45. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  47. package/dist/design-system-react-components.esm.js +6774 -5839
  48. package/dist/design-system-react-components.esm.js.map +1 -1
  49. package/dist/index.d.ts +10 -8
  50. package/dist/resources.scss +0 -2
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +1 -1
  53. package/dist/theme/components/button.d.ts +0 -12
  54. package/dist/theme/components/card.d.ts +14 -2
  55. package/dist/theme/components/customTable.d.ts +56 -0
  56. package/dist/theme/components/fieldset.d.ts +2 -2
  57. package/dist/theme/components/global.d.ts +1 -1
  58. package/dist/theme/components/heading.d.ts +4 -0
  59. package/dist/theme/components/label.d.ts +1 -1
  60. package/dist/theme/components/link.d.ts +14 -1
  61. package/dist/theme/components/list.d.ts +0 -2
  62. package/dist/theme/components/logo.d.ts +4 -0
  63. package/dist/theme/components/notification.d.ts +13 -4
  64. package/dist/theme/components/searchBar.d.ts +9 -11
  65. package/dist/theme/components/select.d.ts +1 -0
  66. package/dist/theme/components/structuredContent.d.ts +33 -0
  67. package/dist/theme/components/template.d.ts +10 -10
  68. package/dist/theme/components/textInput.d.ts +4 -0
  69. package/dist/theme/components/toggle.d.ts +8 -5
  70. package/dist/utils/utils.d.ts +10 -0
  71. package/package.json +40 -37
  72. package/src/__tests__/utils/utils.test.ts +23 -1
  73. package/src/components/Accordion/Accordion.stories.mdx +15 -13
  74. package/src/components/Accordion/Accordion.test.tsx +45 -1
  75. package/src/components/Accordion/Accordion.tsx +20 -8
  76. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
  77. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  78. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  79. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  80. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
  81. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +15 -0
  82. package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
  83. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +5 -5
  84. package/src/components/Button/Button.stories.mdx +93 -48
  85. package/src/components/Button/Button.test.tsx +0 -12
  86. package/src/components/Button/Button.tsx +7 -7
  87. package/src/components/Button/ButtonTypes.tsx +0 -1
  88. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  89. package/src/components/Card/Card.stories.mdx +186 -71
  90. package/src/components/Card/Card.test.tsx +45 -22
  91. package/src/components/Card/Card.tsx +21 -6
  92. package/src/components/Card/__snapshots__/Card.test.tsx.snap +9 -3
  93. package/src/components/Chakra/Box.stories.mdx +3 -3
  94. package/src/components/Chakra/Center.stories.mdx +5 -5
  95. package/src/components/Chakra/Flex.stories.mdx +113 -0
  96. package/src/components/Chakra/Grid.stories.mdx +3 -3
  97. package/src/components/Chakra/Stack.stories.mdx +2 -2
  98. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  99. package/src/components/Checkbox/Checkbox.tsx +13 -8
  100. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  101. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  102. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  103. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  104. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  105. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  106. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  107. package/src/components/DatePicker/DatePicker.test.tsx +6 -6
  108. package/src/components/DatePicker/DatePicker.tsx +17 -11
  109. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +50 -24
  110. package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
  111. package/src/components/Fieldset/Fieldset.tsx +2 -4
  112. package/src/components/Form/Form.stories.mdx +75 -49
  113. package/src/components/Form/Form.test.tsx +92 -3
  114. package/src/components/Form/Form.tsx +28 -23
  115. package/src/components/Form/FormTypes.tsx +2 -2
  116. package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
  117. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  118. package/src/components/Heading/Heading.stories.mdx +59 -23
  119. package/src/components/Heading/Heading.test.tsx +82 -18
  120. package/src/components/Heading/Heading.tsx +31 -31
  121. package/src/components/Heading/HeadingTypes.tsx +6 -6
  122. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  123. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  124. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  125. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  126. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  127. package/src/components/Hero/Hero.stories.mdx +72 -53
  128. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
  129. package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
  130. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
  131. package/src/components/Icons/Icon.stories.mdx +78 -77
  132. package/src/components/Icons/Icon.test.tsx +1 -1
  133. package/src/components/Icons/Icon.tsx +5 -6
  134. package/src/components/Icons/IconSvgs.tsx +0 -42
  135. package/src/components/Icons/IconTypes.tsx +0 -24
  136. package/src/components/Image/Image.stories.mdx +66 -18
  137. package/src/components/Image/Image.tsx +21 -10
  138. package/src/components/Label/Label.stories.mdx +20 -19
  139. package/src/components/Link/Link.stories.mdx +102 -51
  140. package/src/components/Link/Link.test.tsx +38 -8
  141. package/src/components/Link/Link.tsx +19 -12
  142. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  143. package/src/components/List/List.stories.mdx +60 -29
  144. package/src/components/List/List.test.tsx +1 -1
  145. package/src/components/List/List.tsx +2 -2
  146. package/src/components/List/__snapshots__/List.test.tsx.snap +3 -1
  147. package/src/components/Logo/Logo.stories.mdx +222 -0
  148. package/src/components/Logo/Logo.test.tsx +98 -0
  149. package/src/components/Logo/Logo.tsx +97 -0
  150. package/src/components/Logo/LogoSvgs.tsx +66 -0
  151. package/src/components/Logo/LogoTypes.tsx +48 -0
  152. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  153. package/src/components/Modal/Modal.stories.mdx +20 -5
  154. package/src/components/Modal/Modal.tsx +2 -8
  155. package/src/components/Notification/Notification.stories.mdx +128 -38
  156. package/src/components/Notification/Notification.test.tsx +49 -1
  157. package/src/components/Notification/Notification.tsx +25 -12
  158. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  159. package/src/components/Pagination/Pagination.stories.mdx +18 -7
  160. package/src/components/Pagination/Pagination.tsx +3 -3
  161. package/src/components/Placeholder/Placeholder.tsx +7 -14
  162. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  163. package/src/components/Radio/Radio.stories.mdx +39 -19
  164. package/src/components/Radio/Radio.tsx +13 -9
  165. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
  166. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  167. package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
  168. package/src/components/RadioGroup/RadioGroup.tsx +97 -94
  169. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
  170. package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
  171. package/src/components/SearchBar/SearchBar.stories.mdx +115 -33
  172. package/src/components/SearchBar/SearchBar.tsx +72 -51
  173. package/src/components/Select/Select.stories.mdx +48 -14
  174. package/src/components/Select/Select.test.tsx +89 -0
  175. package/src/components/Select/Select.tsx +27 -12
  176. package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
  177. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  178. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  179. package/src/components/Slider/Slider.stories.mdx +72 -22
  180. package/src/components/Slider/Slider.tsx +15 -10
  181. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
  182. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  183. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  184. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  185. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  186. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  187. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  188. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  189. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  190. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  191. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  192. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  193. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  194. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  195. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  196. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  197. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  198. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  199. package/src/components/Table/Table.stories.mdx +165 -0
  200. package/src/components/Table/Table.test.tsx +137 -0
  201. package/src/components/Table/Table.tsx +126 -0
  202. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
  203. package/src/components/Tabs/Tabs.stories.mdx +20 -14
  204. package/src/components/Tabs/Tabs.test.tsx +21 -5
  205. package/src/components/Tabs/Tabs.tsx +35 -20
  206. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
  207. package/src/components/Template/Template.stories.mdx +132 -48
  208. package/src/components/Template/Template.test.tsx +128 -6
  209. package/src/components/Template/Template.tsx +93 -13
  210. package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
  211. package/src/components/Text/Text.stories.mdx +33 -11
  212. package/src/components/Text/Text.tsx +2 -2
  213. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  214. package/src/components/TextInput/TextInput.test.tsx +96 -0
  215. package/src/components/TextInput/TextInput.tsx +12 -8
  216. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  217. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  218. package/src/components/Toggle/Toggle.tsx +14 -9
  219. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +4 -4
  220. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  222. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  223. package/src/docs/Chakra.stories.mdx +5 -8
  224. package/src/docs/Intro.stories.mdx +2 -2
  225. package/src/index.ts +13 -6
  226. package/src/styles/base/_03-base.scss +1 -1
  227. package/src/styles/base/_place-holder.scss +7 -7
  228. package/src/styles.scss +1 -5
  229. package/src/theme/components/breadcrumb.ts +4 -4
  230. package/src/theme/components/button.ts +5 -12
  231. package/src/theme/components/card.ts +5 -2
  232. package/src/theme/components/checkbox.ts +1 -1
  233. package/src/theme/components/customTable.ts +63 -0
  234. package/src/theme/components/datePicker.ts +1 -1
  235. package/src/theme/components/global.ts +7 -7
  236. package/src/theme/components/heading.ts +13 -11
  237. package/src/theme/components/helperErrorText.ts +1 -1
  238. package/src/theme/components/image.ts +1 -1
  239. package/src/theme/components/link.ts +17 -5
  240. package/src/theme/components/list.ts +3 -5
  241. package/src/theme/components/logo.ts +54 -0
  242. package/src/theme/components/notification.ts +19 -9
  243. package/src/theme/components/searchBar.ts +11 -13
  244. package/src/theme/components/select.ts +1 -0
  245. package/src/theme/components/statusBadge.ts +1 -1
  246. package/src/theme/components/structuredContent.ts +74 -0
  247. package/src/theme/components/template.ts +10 -10
  248. package/src/theme/components/text.ts +6 -6
  249. package/src/theme/components/textInput.ts +2 -0
  250. package/src/theme/components/toggle.ts +10 -6
  251. package/src/theme/components/videoPlayer.ts +0 -2
  252. package/src/theme/foundations/global.ts +2 -2
  253. package/src/theme/foundations/typography.ts +84 -12
  254. package/src/theme/index.ts +6 -0
  255. package/src/utils/componentCategories.ts +2 -1
  256. package/src/utils/utils.ts +17 -0
  257. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  258. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  259. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  260. package/dist/components/Input/Input.d.ts +0 -36
  261. package/dist/components/Input/Input.stories.d.ts +0 -29
  262. package/dist/components/Input/InputTypes.d.ts +0 -6
  263. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  264. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  265. package/dist/helpers/getCSSVariable.d.ts +0 -1
  266. package/dist/interfaces.d.ts +0 -3
  267. package/dist/utils/bem.d.ts +0 -1
  268. package/src/__tests__/utils/bem.test.ts +0 -37
  269. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  270. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  271. package/src/components/CardEdition/CardEdition.tsx +0 -60
  272. package/src/components/CardEdition/_CardEdition.scss +0 -137
  273. package/src/components/Input/Input.stories.tsx +0 -133
  274. package/src/components/Input/Input.test.tsx +0 -266
  275. package/src/components/Input/Input.tsx +0 -81
  276. package/src/components/Input/InputTypes.tsx +0 -8
  277. package/src/components/Input/_Input.scss +0 -78
  278. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  279. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  280. package/src/helpers/getCSSVariable.tsx +0 -5
  281. package/src/interfaces.ts +0 -3
  282. package/src/utils/bem.ts +0 -44
@@ -6,10 +6,10 @@ export enum HeadingDisplaySizes {
6
6
  }
7
7
 
8
8
  export enum HeadingLevels {
9
- One = 1,
10
- Two = 2,
11
- Three = 3,
12
- Four = 4,
13
- Five = 5,
14
- Six = 6,
9
+ One = "one",
10
+ Two = "two",
11
+ Three = "three",
12
+ Four = "four",
13
+ Five = "five",
14
+ Six = "six",
15
15
  }
@@ -0,0 +1,71 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Heading renders the UI snapshot correctly 1`] = `
4
+ <h1
5
+ className="chakra-heading css-0"
6
+ id="basic"
7
+ >
8
+ Heading text
9
+ </h1>
10
+ `;
11
+
12
+ exports[`Heading renders the UI snapshot correctly 2`] = `
13
+ <h1
14
+ className="chakra-heading css-0"
15
+ id="basicWithChildText"
16
+ >
17
+ Heading text
18
+ </h1>
19
+ `;
20
+
21
+ exports[`Heading renders the UI snapshot correctly 3`] = `
22
+ <h1
23
+ className="chakra-heading css-0"
24
+ id="customDisplaySize"
25
+ >
26
+ Heading with Secondary displaySize
27
+ </h1>
28
+ `;
29
+
30
+ exports[`Heading renders the UI snapshot correctly 4`] = `
31
+ <h6
32
+ className="chakra-heading css-0"
33
+ id="otherLevel"
34
+ >
35
+ Heading level six
36
+ </h6>
37
+ `;
38
+
39
+ exports[`Heading renders the UI snapshot correctly 5`] = `
40
+ <h1
41
+ className="chakra-heading css-0"
42
+ id="withLink"
43
+ >
44
+ <a
45
+ className="css-0"
46
+ href="fake-url"
47
+ id="withLink-link"
48
+ rel={null}
49
+ target={null}
50
+ >
51
+ Heading text is a link
52
+ </a>
53
+ </h1>
54
+ `;
55
+
56
+ exports[`Heading renders the UI snapshot correctly 6`] = `
57
+ <h1
58
+ className="chakra-heading css-0"
59
+ id="withCustomLink"
60
+ >
61
+ Part of the heading text is
62
+ <a
63
+ className="custom-link"
64
+ href="fake-url"
65
+ >
66
+ <span>
67
+ a link
68
+ </span>
69
+ </a>
70
+ </h1>
71
+ `;
@@ -1,13 +1,15 @@
1
1
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
2
  ArgsTable,
3
+ Canvas,
6
4
  Description,
7
- } from "@storybook/addon-docs/blocks";
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
8
8
  import { withDesign } from "storybook-addon-designs";
9
9
 
10
10
  import HelperErrorText from "./HelperErrorText";
11
+ import Link from "../Link/Link";
12
+ import Text from "../Text/Text";
11
13
  import { getCategory } from "../../utils/componentCategories";
12
14
  import DSProvider from "../../theme/provider";
13
15
 
@@ -23,10 +25,20 @@ import DSProvider from "../../theme/provider";
23
25
  jest: ["HelperErrorText.test.tsx"],
24
26
  }}
25
27
  argTypes={{
26
- ariaAtomic: { table: { disable: true } },
28
+ additionalStyles: { control: false },
29
+ ariaAtomic: {
30
+ control: false,
31
+ table: { defaultValue: { summary: true } },
32
+ },
33
+ ariaLive: {
34
+ table: { defaultValue: { summary: "polite" } },
35
+ },
27
36
  children: { table: { disable: true } },
28
- className: { table: { disable: true } },
29
- id: { table: { disable: true } },
37
+ className: { control: false },
38
+ id: { control: false },
39
+ isInvalid: {
40
+ table: { defaultValue: { summary: false } },
41
+ },
30
42
  }}
31
43
  />
32
44
 
@@ -35,41 +47,57 @@ import DSProvider from "../../theme/provider";
35
47
  | Component Version | DS Version |
36
48
  | ----------------- | ---------- |
37
49
  | Added | `0.0.10` |
38
- | Latest | `0.25.3` |
50
+ | Latest | `0.25.11` |
39
51
 
40
52
  <Description of={HelperErrorText} />
41
53
 
42
54
  <Canvas withToolbar>
43
55
  <Story
44
- name="Basic with Props"
56
+ name="HelperErrorText with Controls"
45
57
  args={{
58
+ additionalStyles: undefined,
59
+ ariaAtomic: undefined,
46
60
  ariaLive: "polite",
61
+ className: undefined,
62
+ id: "helperErrorText-id",
47
63
  isInvalid: false,
64
+ text: "This is the helper text!",
48
65
  }}
49
66
  >
50
67
  {(args) => (
51
- <HelperErrorText {...args}>
52
- {args.isInvalid
53
- ? "This is the error text :("
54
- : "This is the helper text!"}
55
- </HelperErrorText>
68
+ <HelperErrorText
69
+ {...args}
70
+ text={args.isInvalid ? "This is the error text :(" : args.text}
71
+ />
56
72
  )}
57
73
  </Story>
58
74
  </Canvas>
59
75
 
60
- <ArgsTable story="Basic with Props" />
76
+ <ArgsTable story="HelperErrorText with Controls" />
61
77
 
62
78
  ## With HTML Children
63
79
 
64
- The `HelperErrorText` component can take any React component or HTML element as
65
- its children.
80
+ The `HelperErrorText` component can render any React component or HTML element
81
+ through the `text` prop.
66
82
 
67
83
  <Canvas>
68
84
  <Story name="With HTML Children">
69
- <HelperErrorText>
70
- If you're unsure of your size, please view the{" "}
71
- <a href="#sizing-chart">Sizing Chart</a>.
72
- </HelperErrorText>
85
+ <HelperErrorText
86
+ text={
87
+ <>
88
+ This first example uses an HTML anchor element for{" "}
89
+ <a href="#">a link</a>.
90
+ </>
91
+ }
92
+ />
93
+ <HelperErrorText
94
+ text={
95
+ <Text>
96
+ This second example uses DS components, such as the{" "}
97
+ <Link href="#">`Link`</Link> component, and the `Text` component.
98
+ </Text>
99
+ }
100
+ />
73
101
  </Story>
74
102
  </Canvas>
75
103
 
@@ -80,7 +108,7 @@ NYPL "invalid" styling.
80
108
 
81
109
  <Canvas>
82
110
  <Story name="Invalid State">
83
- <HelperErrorText isInvalid>This is the error text :(</HelperErrorText>
111
+ <HelperErrorText isInvalid text="This is the error text :(" />
84
112
  </Story>
85
113
  </Canvas>
86
114
 
@@ -107,7 +135,7 @@ announced immediately.
107
135
 
108
136
  <Canvas>
109
137
  <Story
110
- name="With Aria Props"
138
+ name="With Aria Controls"
111
139
  args={{
112
140
  ariaAtomic: true,
113
141
  ariaLive: "polite",
@@ -115,10 +143,10 @@ announced immediately.
115
143
  }}
116
144
  >
117
145
  {(args) => (
118
- <HelperErrorText {...args}>
119
- Only invalid text can be read to screen readers with the appropriate
120
- aria-atomic and aria-live props.
121
- </HelperErrorText>
146
+ <HelperErrorText
147
+ {...args}
148
+ text="Only invalid text can be read to screen readers with the appropriate aria-atomic and aria-live props."
149
+ />
122
150
  )}
123
151
  </Story>
124
152
  </Canvas>
@@ -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
  `;