@nypl/design-system-react-components 0.25.5 → 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 (275) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/README.md +1 -1
  3. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  4. package/dist/components/Button/Button.d.ts +6 -6
  5. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  6. package/dist/components/Card/Card.d.ts +6 -4
  7. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  11. package/dist/components/Form/Form.d.ts +2 -2
  12. package/dist/components/Heading/Heading.d.ts +7 -3
  13. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  16. package/dist/components/Icons/Icon.d.ts +4 -4
  17. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  18. package/dist/components/Icons/IconTypes.d.ts +1 -23
  19. package/dist/components/Image/Image.d.ts +11 -3
  20. package/dist/components/Image/ImageTypes.d.ts +3 -1
  21. package/dist/components/Link/LinkTypes.d.ts +1 -0
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +30 -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 +3 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  31. package/dist/components/Select/Select.d.ts +5 -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 +23 -0
  38. package/dist/components/Template/Template.d.ts +8 -3
  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 +48 -0
  42. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  43. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  44. package/dist/design-system-react-components.cjs.development.js +5989 -5490
  45. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  48. package/dist/design-system-react-components.esm.js +6057 -5551
  49. package/dist/design-system-react-components.esm.js.map +1 -1
  50. package/dist/index.d.ts +11 -4
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +9 -0
  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 +47 -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 +8 -4
  64. package/dist/theme/components/searchBar.d.ts +7 -13
  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 +2 -0
  69. package/dist/theme/components/toggle.d.ts +71 -0
  70. package/dist/theme/foundations/spacing.d.ts +2 -0
  71. package/dist/utils/utils.d.ts +10 -0
  72. package/package.json +2 -3
  73. package/src/__tests__/utils/utils.test.ts +23 -1
  74. package/src/components/Accordion/Accordion.stories.mdx +15 -14
  75. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  76. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  77. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  78. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +50 -14
  79. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +20 -0
  80. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  81. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +198 -0
  82. package/src/components/Button/Button.stories.mdx +93 -48
  83. package/src/components/Button/Button.test.tsx +0 -12
  84. package/src/components/Button/Button.tsx +7 -8
  85. package/src/components/Button/ButtonTypes.tsx +0 -1
  86. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  87. package/src/components/Card/Card.stories.mdx +246 -64
  88. package/src/components/Card/Card.test.tsx +45 -22
  89. package/src/components/Card/Card.tsx +26 -13
  90. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  91. package/src/components/Chakra/Box.stories.mdx +3 -3
  92. package/src/components/Chakra/Center.stories.mdx +5 -5
  93. package/src/components/Chakra/Grid.stories.mdx +14 -17
  94. package/src/components/Chakra/Stack.stories.mdx +2 -2
  95. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  96. package/src/components/Checkbox/Checkbox.tsx +13 -8
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  99. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  100. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  101. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  102. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  103. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  104. package/src/components/DatePicker/DatePicker.test.tsx +8 -6
  105. package/src/components/DatePicker/DatePicker.tsx +10 -6
  106. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  107. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  108. package/src/components/Form/Form.stories.mdx +49 -41
  109. package/src/components/Form/Form.tsx +5 -4
  110. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  111. package/src/components/Heading/Heading.stories.mdx +59 -23
  112. package/src/components/Heading/Heading.test.tsx +82 -18
  113. package/src/components/Heading/Heading.tsx +31 -31
  114. package/src/components/Heading/HeadingTypes.tsx +6 -6
  115. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  116. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  117. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  118. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  119. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  120. package/src/components/Hero/Hero.stories.mdx +72 -53
  121. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  122. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  123. package/src/components/Icons/Icon.stories.mdx +77 -75
  124. package/src/components/Icons/Icon.tsx +4 -5
  125. package/src/components/Icons/IconSvgs.tsx +2 -42
  126. package/src/components/Icons/IconTypes.tsx +1 -24
  127. package/src/components/Image/Image.stories.mdx +214 -104
  128. package/src/components/Image/Image.test.tsx +10 -0
  129. package/src/components/Image/Image.tsx +21 -10
  130. package/src/components/Image/ImageTypes.ts +2 -0
  131. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  132. package/src/components/Label/Label.stories.mdx +21 -20
  133. package/src/components/Link/Link.stories.mdx +103 -53
  134. package/src/components/Link/Link.test.tsx +108 -7
  135. package/src/components/Link/Link.tsx +58 -19
  136. package/src/components/Link/LinkTypes.tsx +1 -0
  137. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  138. package/src/components/List/List.stories.mdx +36 -24
  139. package/src/components/Logo/Logo.stories.mdx +220 -0
  140. package/src/components/Logo/Logo.test.tsx +98 -0
  141. package/src/components/Logo/Logo.tsx +97 -0
  142. package/src/components/Logo/LogoSvgs.tsx +34 -0
  143. package/src/components/Logo/LogoTypes.tsx +32 -0
  144. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  145. package/src/components/Modal/Modal.stories.mdx +20 -5
  146. package/src/components/Modal/Modal.tsx +2 -8
  147. package/src/components/Notification/Notification.stories.mdx +96 -40
  148. package/src/components/Notification/Notification.test.tsx +62 -16
  149. package/src/components/Notification/Notification.tsx +26 -9
  150. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  151. package/src/components/Pagination/Pagination.stories.mdx +18 -8
  152. package/src/components/Pagination/Pagination.tsx +1 -1
  153. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  154. package/src/components/Placeholder/Placeholder.tsx +7 -14
  155. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  156. package/src/components/Radio/Radio.stories.mdx +39 -19
  157. package/src/components/Radio/Radio.tsx +13 -9
  158. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  159. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  160. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  161. package/src/components/SearchBar/SearchBar.Test.tsx +114 -22
  162. package/src/components/SearchBar/SearchBar.stories.mdx +111 -33
  163. package/src/components/SearchBar/SearchBar.tsx +57 -33
  164. package/src/components/Select/Select.stories.mdx +177 -66
  165. package/src/components/Select/Select.test.tsx +2 -2
  166. package/src/components/Select/Select.tsx +22 -12
  167. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  168. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  169. package/src/components/Slider/Slider.stories.mdx +74 -23
  170. package/src/components/Slider/Slider.test.tsx +35 -0
  171. package/src/components/Slider/Slider.tsx +22 -11
  172. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  173. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  174. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  175. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  176. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  177. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  178. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  179. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  180. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  181. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  182. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  183. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  184. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  185. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  186. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  187. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  188. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  189. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  190. package/src/components/Table/Table.stories.mdx +66 -0
  191. package/src/components/Table/Table.test.tsx +60 -0
  192. package/src/components/Table/Table.tsx +116 -0
  193. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  194. package/src/components/Tabs/Tabs.test.tsx +1 -1
  195. package/src/components/Template/Template.stories.mdx +57 -49
  196. package/src/components/Template/Template.test.tsx +65 -5
  197. package/src/components/Template/Template.tsx +35 -5
  198. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  199. package/src/components/Text/Text.stories.mdx +33 -11
  200. package/src/components/Text/Text.tsx +2 -2
  201. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  202. package/src/components/TextInput/TextInput.test.tsx +96 -0
  203. package/src/components/TextInput/TextInput.tsx +12 -8
  204. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  205. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  206. package/src/components/Toggle/Toggle.test.tsx +140 -0
  207. package/src/components/Toggle/Toggle.tsx +123 -0
  208. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  209. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  210. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  211. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  212. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  213. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  214. package/src/docs/Chakra.stories.mdx +5 -8
  215. package/src/docs/Intro.stories.mdx +2 -2
  216. package/src/index.ts +13 -4
  217. package/src/styles/base/_03-base.scss +1 -1
  218. package/src/styles/base/_place-holder.scss +7 -7
  219. package/src/styles.scss +1 -5
  220. package/src/theme/components/breadcrumb.ts +14 -4
  221. package/src/theme/components/button.ts +5 -12
  222. package/src/theme/components/card.ts +9 -7
  223. package/src/theme/components/checkbox.ts +1 -1
  224. package/src/theme/components/customTable.ts +50 -0
  225. package/src/theme/components/datePicker.ts +1 -1
  226. package/src/theme/components/global.ts +7 -7
  227. package/src/theme/components/heading.ts +13 -11
  228. package/src/theme/components/helperErrorText.ts +1 -1
  229. package/src/theme/components/icon.ts +2 -2
  230. package/src/theme/components/image.ts +9 -1
  231. package/src/theme/components/link.ts +17 -5
  232. package/src/theme/components/list.ts +1 -3
  233. package/src/theme/components/logo.ts +54 -0
  234. package/src/theme/components/notification.ts +9 -7
  235. package/src/theme/components/searchBar.ts +7 -13
  236. package/src/theme/components/select.ts +1 -0
  237. package/src/theme/components/statusBadge.ts +1 -1
  238. package/src/theme/components/structuredContent.ts +54 -0
  239. package/src/theme/components/template.ts +10 -10
  240. package/src/theme/components/text.ts +6 -6
  241. package/src/theme/components/textInput.ts +1 -0
  242. package/src/theme/components/toggle.ts +69 -0
  243. package/src/theme/components/videoPlayer.ts +0 -2
  244. package/src/theme/foundations/global.ts +2 -2
  245. package/src/theme/foundations/spacing.ts +3 -0
  246. package/src/theme/foundations/typography.ts +84 -12
  247. package/src/theme/index.ts +8 -0
  248. package/src/utils/componentCategories.ts +4 -2
  249. package/src/utils/utils.ts +17 -0
  250. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  251. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  252. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  253. package/dist/components/Input/Input.d.ts +0 -36
  254. package/dist/components/Input/Input.stories.d.ts +0 -29
  255. package/dist/components/Input/InputTypes.d.ts +0 -6
  256. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  257. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  258. package/dist/helpers/getCSSVariable.d.ts +0 -1
  259. package/dist/interfaces.d.ts +0 -3
  260. package/dist/utils/bem.d.ts +0 -1
  261. package/src/__tests__/utils/bem.test.ts +0 -37
  262. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  263. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  264. package/src/components/CardEdition/CardEdition.tsx +0 -60
  265. package/src/components/CardEdition/_CardEdition.scss +0 -137
  266. package/src/components/Input/Input.stories.tsx +0 -133
  267. package/src/components/Input/Input.test.tsx +0 -266
  268. package/src/components/Input/Input.tsx +0 -81
  269. package/src/components/Input/InputTypes.tsx +0 -8
  270. package/src/components/Input/_Input.scss +0 -78
  271. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  272. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  273. package/src/helpers/getCSSVariable.tsx +0 -5
  274. package/src/interfaces.ts +0 -3
  275. package/src/utils/bem.ts +0 -44
@@ -1,17 +1,17 @@
1
+ import { HStack } 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 { HStack } from "@chakra-ui/react";
10
10
 
11
- import { getCategory } from "../../utils/componentCategories";
12
- import DSProvider from "../../theme/provider";
13
11
  import Checkbox from "./Checkbox";
14
12
  import { onChangeDefault } from "./Checkbox";
13
+ import { getCategory } from "../../utils/componentCategories";
14
+ import DSProvider from "../../theme/provider";
15
15
 
16
16
  <Meta
17
17
  title={getCategory("Checkbox")}
@@ -20,16 +20,35 @@ import { onChangeDefault } from "./Checkbox";
20
20
  parameters={{
21
21
  design: {
22
22
  type: "figma",
23
- url:
24
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
23
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
25
24
  },
26
25
  jest: ["Checkbox.test.tsx"],
27
26
  }}
28
27
  argTypes={{
29
- className: { table: { disable: true } },
30
- id: { table: { disable: true } },
31
- isChecked: { table: { disable: true } },
32
- onChange: { table: { disable: true } },
28
+ className: { control: false },
29
+ id: { control: false },
30
+ isChecked: { control: false },
31
+ isDisabled: {
32
+ table: { defaultValue: { summary: false } },
33
+ },
34
+ isIndeterminate: {
35
+ table: { defaultValue: { summary: false } },
36
+ },
37
+ isInvalid: {
38
+ table: { defaultValue: { summary: false } },
39
+ },
40
+ isRequired: {
41
+ table: { defaultValue: { summary: false } },
42
+ },
43
+ key: { table: { disable: true } },
44
+ onChange: { control: false },
45
+ ref: { table: { disable: true } },
46
+ showHelperInvalidText: {
47
+ table: { defaultValue: { summary: false } },
48
+ },
49
+ showLabel: {
50
+ table: { defaultValue: { summary: false } },
51
+ },
33
52
  }}
34
53
  />
35
54
 
@@ -38,7 +57,7 @@ import { onChangeDefault } from "./Checkbox";
38
57
  | Component Version | DS Version |
39
58
  | ----------------- | ---------- |
40
59
  | Added | `0.1.0` |
41
- | Latest | `0.25.3` |
60
+ | Latest | `0.25.9` |
42
61
 
43
62
  <Description of={Checkbox} />
44
63
 
@@ -49,15 +68,18 @@ cause an accessibility violation if none is present.
49
68
  <Story
50
69
  name="Checkbox"
51
70
  args={{
71
+ className: undefined,
52
72
  helperText: "This is the helper text!",
53
- id: "test_id",
73
+ id: "checkbox_id",
54
74
  invalidText: "This is the error text :(",
75
+ isChecked: undefined,
55
76
  isDisabled: false,
56
77
  isIndeterminate: false,
57
78
  isInvalid: false,
58
79
  isRequired: false,
59
80
  labelText: "Test Label",
60
81
  name: "test_name",
82
+ onChange: undefined,
61
83
  showHelperInvalidText: true,
62
84
  showLabel: true,
63
85
  value: "1",
@@ -1,23 +1,26 @@
1
- import * as React from "react";
2
1
  import {
3
2
  Box,
4
3
  Checkbox as ChakraCheckbox,
5
4
  Icon,
6
5
  useMultiStyleConfig,
7
6
  } from "@chakra-ui/react";
8
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
7
+ import * as React from "react";
8
+
9
+ import HelperErrorText, {
10
+ HelperErrorTextType,
11
+ } from "../HelperErrorText/HelperErrorText";
9
12
  import generateUUID from "../../helpers/generateUUID";
10
13
 
11
14
  export interface CheckboxProps {
12
15
  /** className you can add in addition to 'input' */
13
16
  className?: string;
14
17
  /** Optional string to populate the HelperErrorText for standard state */
15
- helperText?: string;
18
+ helperText?: HelperErrorTextType;
16
19
  /** ID that other components can cross reference for accessibility purposes */
17
20
  id?: string;
18
21
  /** Optional string to populate the HelperErrorText for the error state
19
22
  * when `isInvalid` is true. */
20
- invalidText?: string;
23
+ invalidText?: HelperErrorTextType;
21
24
  /** When using the Checkbox as a "controlled" form element, you can specify
22
25
  * the Checkbox's checked state using this prop.
23
26
  * Learn more about controlled and uncontrolled form fields:
@@ -89,7 +92,7 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
89
92
  value,
90
93
  } = props;
91
94
  const styles = useMultiStyleConfig("Checkbox", {});
92
- const footnote = isInvalid ? invalidText : helperText;
95
+ const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
93
96
  const ariaAttributes = {};
94
97
  const onChange = props.onChange || onChangeDefault;
95
98
  // Use Chakra's default indeterminate icon.
@@ -130,9 +133,11 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
130
133
  </ChakraCheckbox>
131
134
  {footnote && showHelperInvalidText && (
132
135
  <Box __css={styles.helper}>
133
- <HelperErrorText isInvalid={isInvalid} id={`${id}-helperText`}>
134
- {footnote}
135
- </HelperErrorText>
136
+ <HelperErrorText
137
+ id={`${id}-helperText`}
138
+ isInvalid={isInvalid}
139
+ text={footnote}
140
+ />
136
141
  </Box>
137
142
  )}
138
143
  </>
@@ -1,17 +1,23 @@
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
- import DSProvider from "../../theme/provider";
10
+ import Checkbox from "../Checkbox/Checkbox";
12
11
  import CheckboxGroup from "./CheckboxGroup";
13
12
  import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
14
- import Checkbox from "../Checkbox/Checkbox";
13
+ import { getCategory } from "../../utils/componentCategories";
14
+ import DSProvider from "../../theme/provider";
15
+ import { getStorybookEnumValues } from "../../utils/utils";
16
+
17
+ export const enumValues = getStorybookEnumValues(
18
+ CheckboxGroupLayoutTypes,
19
+ "CheckboxGroupLayoutTypes"
20
+ );
15
21
 
16
22
  <Meta
17
23
  title={getCategory("CheckboxGroup")}
@@ -20,17 +26,41 @@ import Checkbox from "../Checkbox/Checkbox";
20
26
  parameters={{
21
27
  design: {
22
28
  type: "figma",
23
- url:
24
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
29
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
25
30
  },
26
31
  jest: ["CheckboxGroup.test.tsx"],
27
32
  }}
28
33
  argTypes={{
29
34
  children: { table: { disable: true } },
30
- defaultValue: { table: { disable: true } },
31
- id: { table: { disable: true } },
32
- name: { table: { disable: true } },
33
- onChange: { table: { disable: true } },
35
+ defaultValue: { control: false },
36
+ id: { control: false },
37
+ isDisabled: {
38
+ table: { defaultValue: { summary: false } },
39
+ },
40
+ isInvalid: {
41
+ table: { defaultValue: { summary: false } },
42
+ },
43
+ isRequired: {
44
+ table: { defaultValue: { summary: false } },
45
+ },
46
+ key: { table: { disable: true } },
47
+ layout: {
48
+ control: { type: "select" },
49
+ table: { defaultValue: { summary: "CheckboxGroupLayoutTypes.Column" } },
50
+ options: enumValues.options,
51
+ },
52
+ name: { control: false },
53
+ onChange: { control: false },
54
+ optReqFlag: {
55
+ table: { defaultValue: { summary: true } },
56
+ },
57
+ ref: { table: { disable: true } },
58
+ showHelperInvalidText: {
59
+ table: { defaultValue: { summary: true } },
60
+ },
61
+ showLabel: {
62
+ table: { defaultValue: { summary: true } },
63
+ },
34
64
  }}
35
65
  />
36
66
 
@@ -39,7 +69,7 @@ import Checkbox from "../Checkbox/Checkbox";
39
69
  | Component Version | DS Version |
40
70
  | ----------------- | ---------- |
41
71
  | Added | `0.25.1` |
42
- | Latest | `0.25.3` |
72
+ | Latest | `0.25.9` |
43
73
 
44
74
  <Description of={CheckboxGroup} />
45
75
 
@@ -49,20 +79,22 @@ import Checkbox from "../Checkbox/Checkbox";
49
79
  args={{
50
80
  defaultValue: ["4"],
51
81
  helperText: "This is the helper text for the full group.",
82
+ id: "checkboxGroup-id",
52
83
  invalidText: "This is the error text :(",
53
84
  isDisabled: false,
54
85
  isInvalid: false,
55
86
  isRequired: false,
56
87
  labelText: "Standard Checkbox Group",
57
- layout: CheckboxGroupLayoutTypes.Column,
88
+ layout: "CheckboxGroupLayoutTypes.Column",
58
89
  name: "checkbox-story",
90
+ onChange: undefined,
59
91
  optReqFlag: true,
60
92
  showHelperInvalidText: true,
61
93
  showLabel: true,
62
94
  }}
63
95
  >
64
96
  {(args) => (
65
- <CheckboxGroup {...args}>
97
+ <CheckboxGroup {...args} layout={enumValues.getValue(args.layout)}>
66
98
  <Checkbox value="2" labelText="Checkbox 2" />
67
99
  <Checkbox value="3" labelText="Checkbox 3" />
68
100
  <Checkbox value="4" labelText="Checkbox 4" />
@@ -6,12 +6,14 @@ import {
6
6
  useMultiStyleConfig,
7
7
  } from "@chakra-ui/react";
8
8
 
9
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
10
- import generateUUID from "../../helpers/generateUUID";
11
- import { spacing } from "../../theme/foundations/spacing";
12
- import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
13
9
  import Checkbox from "../Checkbox/Checkbox";
10
+ import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
14
11
  import Fieldset from "../Fieldset/Fieldset";
12
+ import HelperErrorText, {
13
+ HelperErrorTextType,
14
+ } from "../HelperErrorText/HelperErrorText";
15
+ import { spacing } from "../../theme/foundations/spacing";
16
+ import generateUUID from "../../helpers/generateUUID";
15
17
 
16
18
  export interface CheckboxGroupProps {
17
19
  /** Any child node passed to the component. */
@@ -19,11 +21,11 @@ export interface CheckboxGroupProps {
19
21
  /** Populates the initial value of the input */
20
22
  defaultValue?: string[];
21
23
  /** Optional string to populate the HelperErrorText for standard state */
22
- helperText?: string;
24
+ helperText?: HelperErrorTextType;
23
25
  /** ID that other components can cross reference for accessibility purposes */
24
26
  id?: string;
25
27
  /** Optional string to populate the HelperErrorText for error state */
26
- invalidText?: string;
28
+ invalidText?: HelperErrorTextType;
27
29
  /** Adds the 'disabled' prop to the input when true. */
28
30
  isDisabled?: boolean;
29
31
  /** A`dds the 'aria-invalid' attribute to the input and
@@ -76,7 +78,7 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
76
78
  showHelperInvalidText = true,
77
79
  showLabel = true,
78
80
  } = props;
79
- const footnote = isInvalid ? invalidText : helperText;
81
+ const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
80
82
  const spacingProp =
81
83
  layout === CheckboxGroupLayoutTypes.Column ? spacing.s : spacing.l;
82
84
  const newChildren = [];
@@ -139,9 +141,11 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
139
141
  </ChakraCheckboxGroup>
140
142
  {footnote && showHelperInvalidText && (
141
143
  <Box __css={styles.helper}>
142
- <HelperErrorText isInvalid={isInvalid} id={`${id}-helperErrorText`}>
143
- {footnote}
144
- </HelperErrorText>
144
+ <HelperErrorText
145
+ id={`${id}-helperErrorText`}
146
+ isInvalid={isInvalid}
147
+ text={footnote}
148
+ />
145
149
  </Box>
146
150
  )}
147
151
  </Fieldset>
@@ -584,11 +584,14 @@ exports[`Checkbox renders the UI snapshot correctly 4`] = `
584
584
  aria-atomic={true}
585
585
  aria-live="off"
586
586
  className=" css-0"
587
+ dangerouslySetInnerHTML={
588
+ Object {
589
+ "__html": "helper text",
590
+ }
591
+ }
587
592
  data-isinvalid={false}
588
593
  id="helperText-helperErrorText"
589
- >
590
- helper text
591
- </div>
594
+ />
592
595
  </div>
593
596
  </fieldset>
594
597
  `;
@@ -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
+ `;