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

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 (250) hide show
  1. package/CHANGELOG.md +45 -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 +3 -2
  10. package/dist/components/Form/Form.d.ts +2 -2
  11. package/dist/components/Heading/Heading.d.ts +7 -3
  12. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  15. package/dist/components/Icons/Icon.d.ts +4 -4
  16. package/dist/components/Icons/IconSvgs.d.ts +0 -21
  17. package/dist/components/Icons/IconTypes.d.ts +0 -23
  18. package/dist/components/Image/Image.d.ts +11 -3
  19. package/dist/components/Logo/Logo.d.ts +28 -0
  20. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  21. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  22. package/dist/components/Modal/Modal.d.ts +0 -4
  23. package/dist/components/Notification/Notification.d.ts +2 -2
  24. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  25. package/dist/components/Radio/Radio.d.ts +6 -5
  26. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  27. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  28. package/dist/components/Select/Select.d.ts +3 -2
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  30. package/dist/components/Slider/Slider.d.ts +3 -2
  31. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  32. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  33. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  34. package/dist/components/Table/Table.d.ts +23 -0
  35. package/dist/components/Template/Template.d.ts +8 -3
  36. package/dist/components/Text/Text.d.ts +2 -2
  37. package/dist/components/TextInput/TextInput.d.ts +4 -3
  38. package/dist/components/Toggle/Toggle.d.ts +3 -2
  39. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  40. package/dist/design-system-react-components.cjs.development.js +5630 -5692
  41. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  43. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  44. package/dist/design-system-react-components.esm.js +4304 -4362
  45. package/dist/design-system-react-components.esm.js.map +1 -1
  46. package/dist/index.d.ts +6 -4
  47. package/dist/styles.css +2 -2
  48. package/dist/theme/components/button.d.ts +0 -12
  49. package/dist/theme/components/card.d.ts +14 -2
  50. package/dist/theme/components/customTable.d.ts +47 -0
  51. package/dist/theme/components/fieldset.d.ts +2 -2
  52. package/dist/theme/components/global.d.ts +1 -1
  53. package/dist/theme/components/heading.d.ts +4 -0
  54. package/dist/theme/components/label.d.ts +1 -1
  55. package/dist/theme/components/link.d.ts +14 -1
  56. package/dist/theme/components/list.d.ts +0 -2
  57. package/dist/theme/components/logo.d.ts +4 -0
  58. package/dist/theme/components/searchBar.d.ts +7 -13
  59. package/dist/theme/components/select.d.ts +1 -0
  60. package/dist/theme/components/structuredContent.d.ts +33 -0
  61. package/dist/theme/components/template.d.ts +10 -10
  62. package/dist/theme/components/textInput.d.ts +2 -0
  63. package/dist/theme/components/toggle.d.ts +8 -5
  64. package/dist/utils/utils.d.ts +10 -0
  65. package/package.json +1 -2
  66. package/src/__tests__/utils/utils.test.ts +23 -1
  67. package/src/components/Accordion/Accordion.stories.mdx +14 -12
  68. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  69. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  70. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  71. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +30 -11
  72. package/src/components/Button/Button.stories.mdx +93 -48
  73. package/src/components/Button/Button.test.tsx +0 -12
  74. package/src/components/Button/Button.tsx +7 -7
  75. package/src/components/Button/ButtonTypes.tsx +0 -1
  76. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  77. package/src/components/Card/Card.stories.mdx +186 -71
  78. package/src/components/Card/Card.test.tsx +45 -22
  79. package/src/components/Card/Card.tsx +17 -5
  80. package/src/components/Card/__snapshots__/Card.test.tsx.snap +8 -2
  81. package/src/components/Chakra/Box.stories.mdx +3 -3
  82. package/src/components/Chakra/Center.stories.mdx +5 -5
  83. package/src/components/Chakra/Grid.stories.mdx +3 -3
  84. package/src/components/Chakra/Stack.stories.mdx +2 -2
  85. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  86. package/src/components/Checkbox/Checkbox.tsx +13 -8
  87. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  88. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  89. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  90. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  91. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  92. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  93. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  94. package/src/components/DatePicker/DatePicker.tsx +10 -6
  95. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +36 -18
  96. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  97. package/src/components/Form/Form.stories.mdx +49 -41
  98. package/src/components/Form/Form.tsx +5 -4
  99. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  100. package/src/components/Heading/Heading.stories.mdx +59 -23
  101. package/src/components/Heading/Heading.test.tsx +82 -18
  102. package/src/components/Heading/Heading.tsx +31 -31
  103. package/src/components/Heading/HeadingTypes.tsx +6 -6
  104. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  105. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  106. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  107. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  108. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  109. package/src/components/Hero/Hero.stories.mdx +72 -53
  110. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  111. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  112. package/src/components/Icons/Icon.stories.mdx +77 -76
  113. package/src/components/Icons/Icon.tsx +4 -5
  114. package/src/components/Icons/IconSvgs.tsx +0 -42
  115. package/src/components/Icons/IconTypes.tsx +0 -24
  116. package/src/components/Image/Image.stories.mdx +66 -18
  117. package/src/components/Image/Image.tsx +21 -10
  118. package/src/components/Label/Label.stories.mdx +20 -19
  119. package/src/components/Link/Link.stories.mdx +102 -51
  120. package/src/components/Link/Link.test.tsx +38 -8
  121. package/src/components/Link/Link.tsx +19 -12
  122. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  123. package/src/components/List/List.stories.mdx +36 -24
  124. package/src/components/Logo/Logo.stories.mdx +220 -0
  125. package/src/components/Logo/Logo.test.tsx +98 -0
  126. package/src/components/Logo/Logo.tsx +97 -0
  127. package/src/components/Logo/LogoSvgs.tsx +34 -0
  128. package/src/components/Logo/LogoTypes.tsx +32 -0
  129. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  130. package/src/components/Modal/Modal.stories.mdx +20 -5
  131. package/src/components/Modal/Modal.tsx +2 -8
  132. package/src/components/Notification/Notification.stories.mdx +61 -38
  133. package/src/components/Notification/Notification.tsx +9 -4
  134. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  135. package/src/components/Pagination/Pagination.stories.mdx +17 -6
  136. package/src/components/Pagination/Pagination.tsx +1 -1
  137. package/src/components/Placeholder/Placeholder.tsx +7 -14
  138. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  139. package/src/components/Radio/Radio.stories.mdx +39 -19
  140. package/src/components/Radio/Radio.tsx +13 -9
  141. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  142. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  143. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  144. package/src/components/SearchBar/SearchBar.Test.tsx +58 -10
  145. package/src/components/SearchBar/SearchBar.stories.mdx +109 -30
  146. package/src/components/SearchBar/SearchBar.tsx +53 -32
  147. package/src/components/Select/Select.stories.mdx +48 -14
  148. package/src/components/Select/Select.tsx +16 -10
  149. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  150. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  151. package/src/components/Slider/Slider.stories.mdx +72 -22
  152. package/src/components/Slider/Slider.tsx +15 -10
  153. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  154. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  155. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  156. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  157. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  158. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  159. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  160. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  161. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  162. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  163. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  164. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  165. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  166. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  167. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  168. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  169. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  170. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  171. package/src/components/Table/Table.stories.mdx +66 -0
  172. package/src/components/Table/Table.test.tsx +60 -0
  173. package/src/components/Table/Table.tsx +116 -0
  174. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  175. package/src/components/Tabs/Tabs.test.tsx +1 -1
  176. package/src/components/Template/Template.stories.mdx +56 -47
  177. package/src/components/Template/Template.test.tsx +65 -5
  178. package/src/components/Template/Template.tsx +35 -5
  179. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  180. package/src/components/Text/Text.stories.mdx +33 -11
  181. package/src/components/Text/Text.tsx +2 -2
  182. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  183. package/src/components/TextInput/TextInput.test.tsx +96 -0
  184. package/src/components/TextInput/TextInput.tsx +12 -8
  185. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  186. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  187. package/src/components/Toggle/Toggle.tsx +14 -9
  188. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  189. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  190. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  191. package/src/docs/Chakra.stories.mdx +5 -8
  192. package/src/docs/Intro.stories.mdx +2 -2
  193. package/src/index.ts +5 -4
  194. package/src/styles/base/_03-base.scss +1 -1
  195. package/src/styles/base/_place-holder.scss +7 -7
  196. package/src/styles.scss +1 -5
  197. package/src/theme/components/breadcrumb.ts +3 -3
  198. package/src/theme/components/button.ts +5 -12
  199. package/src/theme/components/card.ts +5 -2
  200. package/src/theme/components/checkbox.ts +1 -1
  201. package/src/theme/components/customTable.ts +50 -0
  202. package/src/theme/components/datePicker.ts +1 -1
  203. package/src/theme/components/global.ts +6 -6
  204. package/src/theme/components/heading.ts +13 -11
  205. package/src/theme/components/helperErrorText.ts +1 -1
  206. package/src/theme/components/image.ts +1 -1
  207. package/src/theme/components/link.ts +17 -5
  208. package/src/theme/components/list.ts +1 -3
  209. package/src/theme/components/logo.ts +54 -0
  210. package/src/theme/components/notification.ts +1 -1
  211. package/src/theme/components/searchBar.ts +7 -13
  212. package/src/theme/components/select.ts +1 -0
  213. package/src/theme/components/statusBadge.ts +1 -1
  214. package/src/theme/components/structuredContent.ts +54 -0
  215. package/src/theme/components/template.ts +10 -10
  216. package/src/theme/components/text.ts +6 -6
  217. package/src/theme/components/textInput.ts +1 -0
  218. package/src/theme/components/toggle.ts +9 -5
  219. package/src/theme/components/videoPlayer.ts +0 -2
  220. package/src/theme/foundations/global.ts +2 -2
  221. package/src/theme/foundations/typography.ts +84 -12
  222. package/src/theme/index.ts +6 -0
  223. package/src/utils/componentCategories.ts +1 -1
  224. package/src/utils/utils.ts +17 -0
  225. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  226. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  227. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  228. package/dist/components/Input/Input.d.ts +0 -36
  229. package/dist/components/Input/Input.stories.d.ts +0 -29
  230. package/dist/components/Input/InputTypes.d.ts +0 -6
  231. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  232. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  233. package/dist/helpers/getCSSVariable.d.ts +0 -1
  234. package/dist/interfaces.d.ts +0 -3
  235. package/dist/utils/bem.d.ts +0 -1
  236. package/src/__tests__/utils/bem.test.ts +0 -37
  237. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  238. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  239. package/src/components/CardEdition/CardEdition.tsx +0 -60
  240. package/src/components/CardEdition/_CardEdition.scss +0 -137
  241. package/src/components/Input/Input.stories.tsx +0 -133
  242. package/src/components/Input/Input.test.tsx +0 -266
  243. package/src/components/Input/Input.tsx +0 -81
  244. package/src/components/Input/InputTypes.tsx +0 -8
  245. package/src/components/Input/_Input.scss +0 -78
  246. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  247. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  248. package/src/helpers/getCSSVariable.tsx +0 -5
  249. package/src/interfaces.ts +0 -3
  250. package/src/utils/bem.ts +0 -44
@@ -0,0 +1,151 @@
1
+ import * as React from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
5
+
6
+ import ComponentWrapper from "./ComponentWrapper";
7
+
8
+ /**
9
+ * @NOTE while the component is accessible, whatever is passed as children
10
+ * elements may not be considered accessible. This is up to the developer to
11
+ * make sure to pass accessible elements.
12
+ */
13
+ describe("ComponentWrapper Accessibility", () => {
14
+ it("Passes axe accessibility test", async () => {
15
+ const { container } = render(
16
+ <ComponentWrapper
17
+ descriptionText="description text"
18
+ headingText="heading text"
19
+ helperText="helper text"
20
+ id="id"
21
+ invalidText="invalid text"
22
+ isInvalid={false}
23
+ >
24
+ <div>children elements</div>
25
+ </ComponentWrapper>
26
+ );
27
+ expect(await axe(container)).toHaveNoViolations();
28
+ });
29
+
30
+ it("Passes axe accessibility test without certain props", async () => {
31
+ const { container } = render(
32
+ <ComponentWrapper id="id">
33
+ <div>children elements</div>
34
+ </ComponentWrapper>
35
+ );
36
+ expect(await axe(container)).toHaveNoViolations();
37
+ });
38
+ });
39
+
40
+ describe("ComponentWrapper", () => {
41
+ it("renders with different text sections and children elements", () => {
42
+ render(
43
+ <ComponentWrapper
44
+ descriptionText="description text"
45
+ headingText="heading text"
46
+ helperText="helper text"
47
+ id="id"
48
+ invalidText="invalid text"
49
+ isInvalid={false}
50
+ >
51
+ <div>children elements</div>
52
+ </ComponentWrapper>
53
+ );
54
+
55
+ expect(screen.getByText("description text")).toBeInTheDocument();
56
+ expect(screen.getByText("heading text")).toBeInTheDocument();
57
+ expect(screen.getByText("helper text")).toBeInTheDocument();
58
+ expect(screen.queryByText("invalid text")).not.toBeInTheDocument();
59
+ expect(screen.getByText("children elements")).toBeInTheDocument();
60
+ });
61
+
62
+ it("renders with only its children elements", () => {
63
+ render(
64
+ <ComponentWrapper id="id">
65
+ <div>children elements</div>
66
+ </ComponentWrapper>
67
+ );
68
+
69
+ expect(screen.queryByText("description text")).not.toBeInTheDocument();
70
+ expect(screen.queryByText("heading text")).not.toBeInTheDocument();
71
+ expect(screen.queryByText("helper text")).not.toBeInTheDocument();
72
+ expect(screen.queryByText("invalid text")).not.toBeInTheDocument();
73
+ expect(screen.getByText("children elements")).toBeInTheDocument();
74
+ });
75
+
76
+ it("renders invalid text in the internal HelperErrorText component", () => {
77
+ const { rerender } = render(
78
+ <ComponentWrapper
79
+ descriptionText="description text"
80
+ headingText="heading text"
81
+ helperText="helper text"
82
+ id="id"
83
+ invalidText="invalid text"
84
+ isInvalid={false}
85
+ >
86
+ <div>children elements</div>
87
+ </ComponentWrapper>
88
+ );
89
+
90
+ expect(screen.getByText("helper text")).toBeInTheDocument();
91
+ expect(screen.queryByText("invalid text")).not.toBeInTheDocument();
92
+
93
+ rerender(
94
+ <ComponentWrapper
95
+ descriptionText="description text"
96
+ headingText="heading text"
97
+ helperText="helper text"
98
+ id="id"
99
+ invalidText="invalid text"
100
+ isInvalid={true}
101
+ >
102
+ <div>children elements</div>
103
+ </ComponentWrapper>
104
+ );
105
+
106
+ expect(screen.queryByText("helper text")).not.toBeInTheDocument();
107
+ expect(screen.getByText("invalid text")).toBeInTheDocument();
108
+ });
109
+
110
+ it("Renders the UI snapshot correctly", () => {
111
+ const basic = renderer
112
+ .create(
113
+ <ComponentWrapper
114
+ descriptionText="description text"
115
+ headingText="heading text"
116
+ helperText="helper text"
117
+ id="id"
118
+ invalidText="invalid text"
119
+ isInvalid={false}
120
+ >
121
+ <div>children elements</div>
122
+ </ComponentWrapper>
123
+ )
124
+ .toJSON();
125
+ const onlyWithChildren = renderer
126
+ .create(
127
+ <ComponentWrapper id="id">
128
+ <div>children elements</div>
129
+ </ComponentWrapper>
130
+ )
131
+ .toJSON();
132
+ const isInvalid = renderer
133
+ .create(
134
+ <ComponentWrapper
135
+ descriptionText="description text"
136
+ headingText="heading text"
137
+ helperText="helper text"
138
+ id="id"
139
+ invalidText="invalid text"
140
+ isInvalid={true}
141
+ >
142
+ <div>children elements</div>
143
+ </ComponentWrapper>
144
+ )
145
+ .toJSON();
146
+
147
+ expect(basic).toMatchSnapshot();
148
+ expect(onlyWithChildren).toMatchSnapshot();
149
+ expect(isInvalid).toMatchSnapshot();
150
+ });
151
+ });
@@ -1,22 +1,30 @@
1
- import * as React from "react";
2
1
  import { Box, useMultiStyleConfig } from "@chakra-ui/react";
3
- import generateUUID from "../../helpers/generateUUID";
2
+ import * as React from "react";
3
+
4
4
  import Heading from "../Heading/Heading";
5
5
  import { HeadingLevels } from "../Heading/HeadingTypes";
6
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
6
+ import HelperErrorText, {
7
+ HelperErrorTextType,
8
+ } from "../HelperErrorText/HelperErrorText";
7
9
  import Text from "../Text/Text";
10
+ import generateUUID from "../../helpers/generateUUID";
8
11
 
9
12
  export interface ComponentWrapperProps {
10
13
  /** The UI elements that will be wrapped by this component */
11
14
  children: React.ReactNode;
12
- /** Optional string to set the text for a video description */
15
+ /** Optional string to set the text for the component's description */
13
16
  descriptionText?: string;
14
17
  /** Optional string to set the text for a `Heading` component */
15
18
  headingText?: string;
16
19
  /** Optional string to set the text for a `HelperErrorText` component */
17
- helperText?: string;
20
+ helperText?: HelperErrorTextType;
18
21
  /** ID that other components can cross reference for accessibility purposes */
19
22
  id?: string;
23
+ /** Optional string to populate the `HelperErrorText` for the error state
24
+ * when `isInvalid` is true. */
25
+ invalidText?: HelperErrorTextType;
26
+ /** Sets invalid text in the error state. */
27
+ isInvalid?: boolean;
20
28
  }
21
29
 
22
30
  function ComponentWrapper(
@@ -28,34 +36,39 @@ function ComponentWrapper(
28
36
  headingText,
29
37
  helperText,
30
38
  id = generateUUID(),
39
+ invalidText,
40
+ isInvalid = false,
31
41
  } = props;
32
42
  const hasChildren = !!children;
33
43
  const styles = useMultiStyleConfig("ComponentWrapper", { hasChildren });
44
+ const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
34
45
 
46
+ // Note: Typescript warns when there are no children passed and
47
+ // doesn't compile. This is meant to log in non-Typescript apps.
35
48
  if (!hasChildren) {
36
- console.warn("Component Wrapper has no children.");
49
+ console.warn("`ComponentWrapper` has no children.");
37
50
  }
38
51
 
39
52
  return (
40
53
  <Box __css={styles}>
41
- <>
42
- {headingText && (
43
- <Heading
44
- id={`${id}-heading`}
45
- level={HeadingLevels.Two}
46
- text={headingText}
54
+ {headingText && (
55
+ <Heading
56
+ id={`${id}-heading`}
57
+ level={HeadingLevels.Two}
58
+ text={headingText}
59
+ />
60
+ )}
61
+ {descriptionText && <Text>{descriptionText}</Text>}
62
+ {children}
63
+ {footnote && (
64
+ <Box __css={styles.helperText}>
65
+ <HelperErrorText
66
+ id={`${id}-helperText`}
67
+ isInvalid={isInvalid}
68
+ text={footnote}
47
69
  />
48
- )}
49
- {descriptionText && <Text>{descriptionText}</Text>}
50
- {children}
51
- {helperText && (
52
- <Box __css={styles.helperText}>
53
- <HelperErrorText id={`${id}-helperText`} isInvalid={false}>
54
- {helperText}
55
- </HelperErrorText>
56
- </Box>
57
- )}
58
- </>
70
+ </Box>
71
+ )}
59
72
  </Box>
60
73
  );
61
74
  }
@@ -0,0 +1,85 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ComponentWrapper Renders the UI snapshot correctly 1`] = `
4
+ <div
5
+ className="css-0"
6
+ >
7
+ <h2
8
+ className="chakra-heading css-0"
9
+ id="id-heading"
10
+ >
11
+ heading text
12
+ </h2>
13
+ <p
14
+ className="chakra-text css-0"
15
+ >
16
+ description text
17
+ </p>
18
+ <div>
19
+ children elements
20
+ </div>
21
+ <div
22
+ className="css-0"
23
+ >
24
+ <div
25
+ aria-atomic={true}
26
+ aria-live="off"
27
+ className=" css-0"
28
+ dangerouslySetInnerHTML={
29
+ Object {
30
+ "__html": "helper text",
31
+ }
32
+ }
33
+ data-isinvalid={false}
34
+ id="id-helperText"
35
+ />
36
+ </div>
37
+ </div>
38
+ `;
39
+
40
+ exports[`ComponentWrapper Renders the UI snapshot correctly 2`] = `
41
+ <div
42
+ className="css-0"
43
+ >
44
+ <div>
45
+ children elements
46
+ </div>
47
+ </div>
48
+ `;
49
+
50
+ exports[`ComponentWrapper Renders the UI snapshot correctly 3`] = `
51
+ <div
52
+ className="css-0"
53
+ >
54
+ <h2
55
+ className="chakra-heading css-0"
56
+ id="id-heading"
57
+ >
58
+ heading text
59
+ </h2>
60
+ <p
61
+ className="chakra-text css-0"
62
+ >
63
+ description text
64
+ </p>
65
+ <div>
66
+ children elements
67
+ </div>
68
+ <div
69
+ className="css-0"
70
+ >
71
+ <div
72
+ aria-atomic={true}
73
+ aria-live="polite"
74
+ className=" css-0"
75
+ dangerouslySetInnerHTML={
76
+ Object {
77
+ "__html": "invalid text",
78
+ }
79
+ }
80
+ data-isinvalid={true}
81
+ id="id-helperText"
82
+ />
83
+ </div>
84
+ </div>
85
+ `;
@@ -1,16 +1,22 @@
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
- import { getCategory } from "../../utils/componentCategories";
11
10
  import DatePicker from "./DatePicker";
12
11
  import { DatePickerTypes } from "./DatePickerTypes";
12
+ import { getCategory } from "../../utils/componentCategories";
13
13
  import DSProvider from "../../theme/provider";
14
+ import { getStorybookEnumValues } from "../../utils/utils";
15
+
16
+ export const enumValues = getStorybookEnumValues(
17
+ DatePickerTypes,
18
+ "DatePickerTypes"
19
+ );
14
20
 
15
21
  <Meta
16
22
  title={getCategory("DatePicker")}
@@ -19,18 +25,51 @@ import DSProvider from "../../theme/provider";
19
25
  parameters={{
20
26
  design: {
21
27
  type: "figma",
22
- url:
23
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11689%3A0",
28
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11689%3A0",
24
29
  },
25
30
  jest: ["DatePicker.test.tsx"],
26
31
  }}
27
32
  argTypes={{
28
- className: { table: { disable: true } },
29
- id: { table: { disable: true } },
30
- nameFrom: { table: { disable: true } },
31
- nameTo: { table: { disable: true } },
32
- onChange: { table: { disable: true } },
33
- refTo: { table: { disable: true } },
33
+ className: { control: false },
34
+ dateFormat: {
35
+ table: { defaultValue: { summary: "yyyy-MM-dd" } },
36
+ },
37
+ dateType: {
38
+ control: { type: "select" },
39
+ table: { defaultValue: { summary: "DatePickerTypes.Full" } },
40
+ options: enumValues.options,
41
+ },
42
+ id: { control: false },
43
+ isDateRange: {
44
+ table: { defaultValue: { summary: false } },
45
+ },
46
+ isDisabled: {
47
+ table: { defaultValue: { summary: false } },
48
+ },
49
+ isInvalid: {
50
+ table: { defaultValue: { summary: false } },
51
+ },
52
+ isRequired: {
53
+ table: { defaultValue: { summary: false } },
54
+ },
55
+ key: { table: { disable: true } },
56
+ labelText: {
57
+ table: { defaultValue: { summary: "From" } },
58
+ },
59
+ nameFrom: { control: false },
60
+ nameTo: { control: false },
61
+ onChange: { control: false },
62
+ ref: { table: { disable: true } },
63
+ refTo: { control: false },
64
+ showHelperInvalidText: {
65
+ table: { defaultValue: { summary: true } },
66
+ },
67
+ showLabel: {
68
+ table: { defaultValue: { summary: true } },
69
+ },
70
+ showOptReqLabel: {
71
+ table: { defaultValue: { summary: true } },
72
+ },
34
73
  }}
35
74
  />
36
75
 
@@ -39,7 +78,7 @@ import DSProvider from "../../theme/provider";
39
78
  | Component Version | DS Version |
40
79
  | ----------------- | ---------- |
41
80
  | Added | `0.24.0` |
42
- | Latest | `0.25.3` |
81
+ | Latest | `0.25.9` |
43
82
 
44
83
  <Description of={DatePicker} />
45
84
 
@@ -49,13 +88,15 @@ also be added through props.
49
88
 
50
89
  <Canvas withToolbar>
51
90
  <Story
52
- name="DatePicker"
91
+ name="DatePicker with Controls"
53
92
  args={{
93
+ className: undefined,
54
94
  dateFormat: "yyyy-MM-dd",
55
- dateType: DatePickerTypes.Full,
95
+ dateType: "DatePickerTypes.Full",
56
96
  helperText: "Note that the Library may be closed on Sundays.",
57
97
  helperTextFrom: "Select start date.",
58
98
  helperTextTo: "Select end date.",
99
+ id: "datePicker-id",
59
100
  initialDate: "1/1/2021",
60
101
  initialDateTo: "1/30/2021",
61
102
  invalidText: "Please select a valid date.",
@@ -68,16 +109,20 @@ also be added through props.
68
109
  minDate: "1/1/2021",
69
110
  nameFrom: "visit-dates-from",
70
111
  nameTo: "visit-dates-to",
112
+ onChange: undefined,
113
+ refTo: undefined,
71
114
  showHelperInvalidText: true,
72
115
  showLabel: true,
73
116
  showOptReqLabel: true,
74
117
  }}
75
118
  >
76
- {(args) => <DatePicker id="visit-dates" {...args} />}
119
+ {(args) => (
120
+ <DatePicker {...args} dateType={enumValues.getValue(args.dateType)} />
121
+ )}
77
122
  </Story>
78
123
  </Canvas>
79
124
 
80
- <ArgsTable story="DatePicker" />
125
+ <ArgsTable story="DatePicker with Controls" />
81
126
 
82
127
  ## Date Range
83
128
 
@@ -5,7 +5,9 @@ import { DatePickerTypes } from "./DatePickerTypes";
5
5
  import Fieldset from "../Fieldset/Fieldset";
6
6
  import { FormRow, FormField } from "../Form/Form";
7
7
  import { FormSpacing } from "../Form/FormTypes";
8
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
8
+ import HelperErrorText, {
9
+ HelperErrorTextType,
10
+ } from "../HelperErrorText/HelperErrorText";
9
11
  import TextInput, {
10
12
  InputProps,
11
13
  TextInputRefType,
@@ -74,7 +76,7 @@ export interface DatePickerProps extends DatePickerWrapperProps {
74
76
  /** DatePicker date types that can be rendered. */
75
77
  dateType?: DatePickerTypes;
76
78
  /** Populates the `HelperErrorText` component in this component. */
77
- helperText?: string;
79
+ helperText?: HelperErrorTextType;
78
80
  /** Populates the `HelperErrorText` component in the "From" `TextInput` component. */
79
81
  helperTextFrom?: string;
80
82
  /** Populates the `HelperErrorText` component in the "To" `TextInput` component. */
@@ -86,7 +88,7 @@ export interface DatePickerProps extends DatePickerWrapperProps {
86
88
  initialDateTo?: string;
87
89
  /** Populates the `HelperErrorText` error state for both "From"
88
90
  * and "To" input components. */
89
- invalidText?: string;
91
+ invalidText?: HelperErrorTextType;
90
92
  /** Adds the 'disabled' property to the input element(s). */
91
93
  isDisabled?: boolean;
92
94
  /** Adds 'isInvalid' styling. */
@@ -415,9 +417,11 @@ const DatePicker = React.forwardRef<TextInputRefType, DatePickerProps>(
415
417
  )}
416
418
  </DateRangeRow>
417
419
  {helperText && isDateRange && showHelperInvalidText && (
418
- <HelperErrorText id={`${id}-helper-text`} isInvalid={false}>
419
- {helperText}
420
- </HelperErrorText>
420
+ <HelperErrorText
421
+ id={`${id}-helper-text`}
422
+ isInvalid={false}
423
+ text={helperText}
424
+ />
421
425
  )}
422
426
  </DatePickerWrapper>
423
427
  );
@@ -363,11 +363,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 4`] = `
363
363
  aria-atomic={true}
364
364
  aria-live="polite"
365
365
  className=" css-0"
366
+ dangerouslySetInnerHTML={
367
+ Object {
368
+ "__html": "Please select a valid date.",
369
+ }
370
+ }
366
371
  data-isinvalid={true}
367
372
  id="invalid-start-helperText"
368
- >
369
- Please select a valid date.
370
- </div>
373
+ />
371
374
  </div>
372
375
  </div>
373
376
  </div>
@@ -415,11 +418,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 4`] = `
415
418
  aria-atomic={true}
416
419
  aria-live="polite"
417
420
  className=" css-0"
421
+ dangerouslySetInnerHTML={
422
+ Object {
423
+ "__html": "Please select a valid date.",
424
+ }
425
+ }
418
426
  data-isinvalid={true}
419
427
  id="invalid-end-helperText"
420
- >
421
- Please select a valid date.
422
- </div>
428
+ />
423
429
  </div>
424
430
  </div>
425
431
  </div>
@@ -430,11 +436,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 4`] = `
430
436
  aria-atomic={true}
431
437
  aria-live="off"
432
438
  className=" css-0"
439
+ dangerouslySetInnerHTML={
440
+ Object {
441
+ "__html": "Note that the Library may be closed on Sundays.",
442
+ }
443
+ }
433
444
  data-isinvalid={false}
434
445
  id="invalid-helper-text"
435
- >
436
- Note that the Library may be closed on Sundays.
437
- </div>
446
+ />
438
447
  </fieldset>
439
448
  </div>
440
449
  `;
@@ -539,11 +548,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 5`] = `
539
548
  aria-atomic={true}
540
549
  aria-live="off"
541
550
  className=" css-0"
551
+ dangerouslySetInnerHTML={
552
+ Object {
553
+ "__html": "Note that the Library may be closed on Sundays.",
554
+ }
555
+ }
542
556
  data-isinvalid={false}
543
557
  id="disabled-helper-text"
544
- >
545
- Note that the Library may be closed on Sundays.
546
- </div>
558
+ />
547
559
  </fieldset>
548
560
  </div>
549
561
  `;
@@ -740,11 +752,14 @@ exports[`DatePicker Single input renders the UI snapshot correctly 4`] = `
740
752
  aria-atomic={true}
741
753
  aria-live="polite"
742
754
  className=" css-0"
755
+ dangerouslySetInnerHTML={
756
+ Object {
757
+ "__html": "Please select a valid date.",
758
+ }
759
+ }
743
760
  data-isinvalid={true}
744
761
  id="invalid-start-helperText"
745
- >
746
- Please select a valid date.
747
- </div>
762
+ />
748
763
  </div>
749
764
  </div>
750
765
  </div>
@@ -805,11 +820,14 @@ exports[`DatePicker Single input renders the UI snapshot correctly 5`] = `
805
820
  aria-atomic={true}
806
821
  aria-live="off"
807
822
  className=" css-0"
823
+ dangerouslySetInnerHTML={
824
+ Object {
825
+ "__html": "Note that the Library may be closed on Sundays.",
826
+ }
827
+ }
808
828
  data-isinvalid={false}
809
829
  id="disabled-start-helperText"
810
- >
811
- Note that the Library may be closed on Sundays.
812
- </div>
830
+ />
813
831
  </div>
814
832
  </div>
815
833
  </div>
@@ -1,10 +1,10 @@
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 Fieldset from "./Fieldset";
@@ -20,8 +20,17 @@ import DSProvider from "../../theme/provider";
20
20
  }}
21
21
  argTypes={{
22
22
  children: { table: { disable: true } },
23
- className: { table: { disable: true } },
24
- id: { table: { disable: true } },
23
+ className: { control: false },
24
+ id: { control: false },
25
+ isLegendHidden: {
26
+ table: { defaultValue: { summary: false } },
27
+ },
28
+ isRequired: {
29
+ table: { defaultValue: { summary: false } },
30
+ },
31
+ optReqFlag: {
32
+ table: { defaultValue: { summary: false } },
33
+ },
25
34
  }}
26
35
  />
27
36
 
@@ -36,8 +45,10 @@ import DSProvider from "../../theme/provider";
36
45
 
37
46
  <Canvas withToolbar>
38
47
  <Story
39
- name="Basic"
48
+ name="Fieldset"
40
49
  args={{
50
+ className: undefined,
51
+ id: "fieldset-id",
41
52
  isLegendHidden: false,
42
53
  isRequired: false,
43
54
  legendText: "This is the legend text",
@@ -52,4 +63,4 @@ import DSProvider from "../../theme/provider";
52
63
  </Story>
53
64
  </Canvas>
54
65
 
55
- <ArgsTable story="Basic" />
66
+ <ArgsTable story="Fieldset" />