@nypl/design-system-react-components 0.25.2 → 0.25.6

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 (238) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +47 -11
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  5. package/dist/components/Button/Button.d.ts +9 -8
  6. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  7. package/dist/components/Card/Card.d.ts +36 -52
  8. package/dist/components/Card/CardTypes.d.ts +0 -15
  9. package/dist/components/Checkbox/Checkbox.d.ts +8 -9
  10. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +2 -2
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -36
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +4 -0
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -3
  15. package/dist/components/Icons/Icon.d.ts +4 -0
  16. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  17. package/dist/components/Icons/IconTypes.d.ts +11 -0
  18. package/dist/components/Image/Image.d.ts +19 -9
  19. package/dist/components/Image/ImageTypes.d.ts +20 -0
  20. package/dist/components/Link/Link.d.ts +4 -0
  21. package/dist/components/List/List.d.ts +7 -1
  22. package/dist/components/Notification/Notification.d.ts +6 -4
  23. package/dist/components/Pagination/Pagination.d.ts +16 -13
  24. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  25. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  27. package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
  28. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  30. package/dist/components/Slider/Slider.d.ts +57 -0
  31. package/dist/components/Tabs/Tabs.d.ts +1 -1
  32. package/dist/components/TextInput/TextInput.d.ts +10 -0
  33. package/dist/design-system-react-components.cjs.development.js +3058 -936
  34. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  35. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  36. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  37. package/dist/design-system-react-components.esm.js +3049 -921
  38. package/dist/design-system-react-components.esm.js.map +1 -1
  39. package/dist/index.d.ts +12 -6
  40. package/dist/resources.scss +180 -170
  41. package/dist/styles.css +1 -1
  42. package/dist/theme/components/breadcrumb.d.ts +9 -0
  43. package/dist/theme/components/button.d.ts +22 -8
  44. package/dist/theme/components/card.d.ts +168 -0
  45. package/dist/theme/components/checkbox.d.ts +5 -1
  46. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  47. package/dist/theme/components/datePicker.d.ts +16 -0
  48. package/dist/theme/components/fieldset.d.ts +27 -0
  49. package/dist/theme/components/global.d.ts +23 -13
  50. package/dist/theme/components/globalMixins.d.ts +9 -1
  51. package/dist/theme/components/heading.d.ts +5 -0
  52. package/dist/theme/components/image.d.ts +31 -0
  53. package/dist/theme/components/label.d.ts +5 -3
  54. package/dist/theme/components/link.d.ts +4 -0
  55. package/dist/theme/components/list.d.ts +5 -1
  56. package/dist/theme/components/notification.d.ts +4 -14
  57. package/dist/theme/components/pagination.d.ts +19 -0
  58. package/dist/theme/components/progressIndicator.d.ts +50 -0
  59. package/dist/theme/components/radioGroup.d.ts +12 -0
  60. package/dist/theme/components/select.d.ts +11 -2
  61. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  62. package/dist/theme/components/slider.d.ts +51 -0
  63. package/dist/theme/components/textInput.d.ts +8 -0
  64. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  65. package/dist/theme/foundations/global.d.ts +6 -1
  66. package/package.json +72 -84
  67. package/src/__tests__/setup.ts +2 -2
  68. package/src/components/Accordion/Accordion.stories.mdx +39 -42
  69. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  70. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -0
  71. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  72. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +24 -8
  73. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +33 -0
  74. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  75. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  76. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +298 -1
  77. package/src/components/Button/Button.stories.mdx +15 -10
  78. package/src/components/Button/Button.test.tsx +21 -7
  79. package/src/components/Button/Button.tsx +18 -33
  80. package/src/components/Button/ButtonTypes.tsx +1 -0
  81. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  82. package/src/components/Card/Card.stories.mdx +296 -259
  83. package/src/components/Card/Card.test.tsx +156 -84
  84. package/src/components/Card/Card.tsx +195 -145
  85. package/src/components/Card/CardTypes.tsx +0 -17
  86. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  87. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  88. package/src/components/CardEdition/_CardEdition.scss +22 -23
  89. package/src/components/Chakra/Box.stories.mdx +14 -15
  90. package/src/components/Chakra/Center.stories.mdx +15 -8
  91. package/src/components/Chakra/Grid.stories.mdx +16 -7
  92. package/src/components/Chakra/Stack.stories.mdx +35 -18
  93. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  94. package/src/components/Checkbox/Checkbox.test.tsx +30 -3
  95. package/src/components/Checkbox/Checkbox.tsx +27 -27
  96. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  98. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +1 -1
  99. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -15
  100. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +44 -80
  101. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  102. package/src/components/DatePicker/DatePicker.test.tsx +248 -65
  103. package/src/components/DatePicker/DatePicker.tsx +158 -130
  104. package/src/components/DatePicker/_DatePicker.scss +33 -67
  105. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  106. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  107. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  108. package/src/components/Fieldset/Fieldset.tsx +52 -0
  109. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  110. package/src/components/Form/Form.stories.mdx +4 -5
  111. package/src/components/Form/Form.tsx +1 -0
  112. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  113. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  114. package/src/components/Heading/Heading.stories.mdx +3 -4
  115. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +1 -1
  116. package/src/components/HelperErrorText/HelperErrorText.tsx +5 -1
  117. package/src/components/Hero/HeroTypes.tsx +1 -0
  118. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  119. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -5
  120. package/src/components/HorizontalRule/HorizontalRule.test.tsx +17 -0
  121. package/src/components/HorizontalRule/HorizontalRule.tsx +21 -4
  122. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +5 -5
  123. package/src/components/Icons/Icon.stories.mdx +11 -3
  124. package/src/components/Icons/Icon.test.tsx +18 -0
  125. package/src/components/Icons/Icon.tsx +6 -0
  126. package/src/components/Icons/IconSvgs.tsx +22 -0
  127. package/src/components/Icons/IconTypes.tsx +11 -0
  128. package/src/components/Image/Image.stories.mdx +220 -0
  129. package/src/components/Image/Image.test.tsx +131 -29
  130. package/src/components/Image/Image.tsx +84 -56
  131. package/src/components/Image/ImageTypes.ts +22 -0
  132. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  133. package/src/components/Input/Input.stories.tsx +20 -64
  134. package/src/components/Input/_Input.scss +23 -14
  135. package/src/components/Link/Link.tsx +4 -1
  136. package/src/components/List/List.stories.mdx +1 -1
  137. package/src/components/List/List.tsx +11 -4
  138. package/src/components/Modal/Modal.stories.mdx +3 -3
  139. package/src/components/Modal/_Modal.scss +2 -2
  140. package/src/components/Notification/Notification.stories.mdx +1 -3
  141. package/src/components/Notification/Notification.tsx +24 -9
  142. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +2 -0
  143. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  144. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  145. package/src/components/Pagination/Pagination.test.tsx +276 -146
  146. package/src/components/Pagination/Pagination.tsx +174 -154
  147. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  148. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  149. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  150. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  151. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  152. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  153. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  154. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  155. package/src/components/RadioGroup/RadioGroup.tsx +11 -16
  156. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +39 -71
  157. package/src/components/SearchBar/SearchBar.Test.tsx +66 -21
  158. package/src/components/SearchBar/SearchBar.stories.mdx +114 -10
  159. package/src/components/SearchBar/SearchBar.tsx +15 -5
  160. package/src/components/Select/SelectTypes.tsx +1 -0
  161. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  162. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  163. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  164. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  165. package/src/components/Slider/Slider.stories.mdx +529 -0
  166. package/src/components/Slider/Slider.test.tsx +653 -0
  167. package/src/components/Slider/Slider.tsx +303 -0
  168. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  169. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  170. package/src/components/StyleGuide/Breakpoints.stories.mdx +21 -7
  171. package/src/components/StyleGuide/Buttons.stories.mdx +69 -15
  172. package/src/components/StyleGuide/ColorCard.tsx +0 -1
  173. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  174. package/src/components/StyleGuide/Iconography.stories.mdx +51 -62
  175. package/src/components/Tabs/Tabs.tsx +5 -5
  176. package/src/components/Template/Template.stories.mdx +11 -16
  177. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  178. package/src/components/TextInput/TextInput.tsx +23 -6
  179. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  180. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -3
  181. package/src/docs/Chakra.stories.mdx +2 -2
  182. package/src/index.ts +20 -12
  183. package/src/resources.scss +5 -5
  184. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  185. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  186. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  187. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  188. package/src/styles/base/_place-holder.scss +14 -3
  189. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  190. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  191. package/src/styles/space/_space-stack.scss +116 -0
  192. package/src/styles.scss +13 -55
  193. package/src/theme/components/breadcrumb.ts +10 -0
  194. package/src/theme/components/button.ts +18 -12
  195. package/src/theme/components/card.ts +174 -0
  196. package/src/theme/components/checkbox.ts +7 -2
  197. package/src/theme/components/checkboxGroup.ts +8 -0
  198. package/src/theme/components/datePicker.ts +17 -0
  199. package/src/theme/components/fieldset.ts +18 -0
  200. package/src/theme/components/global.ts +26 -15
  201. package/src/theme/components/globalMixins.ts +9 -1
  202. package/src/theme/components/heading.ts +5 -0
  203. package/src/theme/components/image.ts +116 -0
  204. package/src/theme/components/label.ts +3 -10
  205. package/src/theme/components/link.ts +4 -0
  206. package/src/theme/components/list.ts +6 -3
  207. package/src/theme/components/notification.ts +12 -14
  208. package/src/theme/components/pagination.ts +20 -0
  209. package/src/theme/components/progressIndicator.ts +62 -0
  210. package/src/theme/components/radioGroup.ts +8 -0
  211. package/src/theme/components/select.ts +5 -2
  212. package/src/theme/components/skeletonLoader.ts +107 -0
  213. package/src/theme/components/slider.ts +79 -0
  214. package/src/theme/components/textInput.ts +2 -0
  215. package/src/theme/foundations/breakpoints.ts +8 -8
  216. package/src/theme/foundations/global.ts +6 -1
  217. package/src/theme/index.ts +22 -4
  218. package/src/utils/componentCategories.ts +4 -3
  219. package/dist/components/Image/Image.stories.d.ts +0 -18
  220. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  221. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  222. package/src/components/Button/_Button.scss +0 -32
  223. package/src/components/Card/_Card.scss +0 -308
  224. package/src/components/Image/Image.stories.tsx +0 -54
  225. package/src/components/Image/_Image.scss +0 -38
  226. package/src/components/Pagination/_Pagination.scss +0 -40
  227. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  228. package/src/styles/01-colors/_colors-brand.scss +0 -62
  229. package/src/styles/01-colors/_colors-utility.scss +0 -67
  230. package/src/styles/02-typography/_type-scale.css +0 -11
  231. package/src/styles/02-typography/_type-weight.css +0 -7
  232. package/src/styles/02-typography/_typefaces.css +0 -4
  233. package/src/styles/03-space/_space-stack.scss +0 -116
  234. package/src/styles/03-space/_space.css +0 -30
  235. package/src/styles/base/_card-grid.scss +0 -77
  236. package/src/styles/base/_typography.scss +0 -11
  237. package/src/theme/components/customCheckboxGroup.ts +0 -12
  238. package/src/theme/components/customRadioGroup.ts +0 -12
@@ -3,6 +3,7 @@ import { Box, Center, Square, Circle, HStack } from "@chakra-ui/react";
3
3
 
4
4
  import { getCategory } from "../../utils/componentCategories";
5
5
  import Image from "../Image/Image";
6
+ import { ImageSizes } from "../Image/ImageTypes";
6
7
  import Icon from "../Icons/Icon";
7
8
  import { IconNames, IconColors, IconSizes } from "../Icons/IconTypes";
8
9
  import DSProvider from "../../theme/provider";
@@ -15,7 +16,8 @@ import DSProvider from "../../theme/provider";
15
16
  | ----------------- | ---------- |
16
17
  | Added | `0.24.0` |
17
18
 
18
- Note: This needs the use of the `DSProvider` component. See the [README](https://github.com/NYPL/nypl-design-system#using-the-design-system-in-your-product)
19
+ Note: This needs the use of the `DSProvider` component. See the
20
+ [README](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/chakra-ui--page#dsprovider)
19
21
  for more information.
20
22
 
21
23
  These components are directly exported from Chakra UI. The `Center`, `Circle`,
@@ -30,7 +32,7 @@ guide on the Chakra UI site.
30
32
  <Story
31
33
  name="Center, Circle, Square"
32
34
  args={{
33
- p: "5",
35
+ padding: "s",
34
36
  bg: "var(--nypl-colors-brand-primary)",
35
37
  color: "var(--nypl-colors-ui-white)",
36
38
  }}
@@ -39,8 +41,7 @@ guide on the Chakra UI site.
39
41
  <Box>
40
42
  Some text at the beginning.
41
43
  <Center {...args}>
42
- So when I look up at the stars, I just wonder...what will they all
43
- become someday?
44
+ This text is centered inside a `Center` component.
44
45
  </Center>
45
46
  Some text at the end.
46
47
  </Box>
@@ -50,15 +51,20 @@ guide on the Chakra UI site.
50
51
 
51
52
  <Canvas>
52
53
  <DSProvider>
53
- <Center>
54
- <Image src="https://placeimg.com/300/400/arch" alt="Centered Image" />
54
+ <Center border="1px solid" borderColor="var(--nypl-colors-ui-gray-medium)">
55
+ <Image
56
+ src="https://placeimg.com/300/400/arch"
57
+ alt="Centered Image"
58
+ imageSize={ImageSizes.Medium}
59
+ />
55
60
  </Center>
56
61
  </DSProvider>
57
62
  </Canvas>
58
63
 
59
64
  ## Circle
60
65
 
61
- Similar to `Center` but is always a circle!
66
+ This component is similar to the `Center` component but it is always rendered as
67
+ a circle.
62
68
 
63
69
  <Canvas>
64
70
  <DSProvider>
@@ -83,7 +89,8 @@ Similar to `Center` but is always a circle!
83
89
 
84
90
  ## Square
85
91
 
86
- Similar to `Center` but always has equal height and width.
92
+ This component is similar to the `Circle` component but always has equal height
93
+ and width.
87
94
 
88
95
  <Canvas>
89
96
  <DSProvider>
@@ -2,6 +2,7 @@ import { Meta, Story, Canvas } from "@storybook/addon-docs/blocks";
2
2
  import { Box } from "@chakra-ui/react";
3
3
  import { Grid, GridItem } from "@chakra-ui/react";
4
4
  import { getCategory } from "../../utils/componentCategories";
5
+ import DSProvider from "../../theme/provider";
5
6
 
6
7
  <Meta title={getCategory("Grid")} component={Grid} />
7
8
 
@@ -11,13 +12,17 @@ import { getCategory } from "../../utils/componentCategories";
11
12
  | ----------------- | ---------- |
12
13
  | Added | `0.25.1` |
13
14
 
14
- Note: This needs the use of the `DSProvider` component. See the [README](https://github.com/NYPL/nypl-design-system#using-the-design-system-in-your-product)
15
+ Note: This needs the use of the `DSProvider` component. See the
16
+ [README](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/chakra-ui--page#dsprovider)
15
17
  for more information.
16
18
 
17
- This component is directly exported from Chakra UI. The `Grid` component is useful for grid layouts and offers more complexity and formatting options than the DS `SimpleGrid` component. `Grid` is `Box` with `display: grid` and it comes with helpful style shorthand. It renders a `div` element.
19
+ This component is directly exported from Chakra UI. The `Grid` component is
20
+ useful for grid layouts and offers more complexity and formatting options than
21
+ the DS `SimpleGrid` component. `Grid` is `Box` with `display: grid` and it comes
22
+ with helpful style shorthand. It renders a `div` element.
18
23
 
19
- Details about available props and related child components can be found on the [Grid component](https://chakra-ui.com/docs/layout/grid)
20
- page on the Chakra UI site.
24
+ Details about available props and related child components can be found on the
25
+ [Grid component](https://chakra-ui.com/docs/layout/grid) page on the Chakra UI site.
21
26
 
22
27
  <Canvas>
23
28
  <Story
@@ -46,12 +51,16 @@ page on the Chakra UI site.
46
51
 
47
52
  ## Complex Layouts with Grid Child Components
48
53
 
49
- In some layouts, you may need certain grid items to span a specific amount of columns or rows instead of an even distribution. To achieve this, you need to pass the `colSpan` prop to the `GridItem` component to span across columns and also pass the `rowSpan` component to span across rows. You also need to specify the `templateColumns` and `templateRows`.
54
+ In some layouts, you may need certain grid items to span a specific amount of
55
+ columns or rows instead of an even distribution. To achieve this, you need to
56
+ pass the `colSpan` prop to the `GridItem` component to span across columns and
57
+ also pass the `rowSpan` component to span across rows. You also need to specify
58
+ the `templateColumns` and `templateRows`.
50
59
 
51
60
  <Canvas>
52
61
  <DSProvider>
53
62
  <Grid
54
- h="200px"
63
+ height="200px"
55
64
  templateRows="repeat(2, 1fr)"
56
65
  templateColumns="repeat(5, 1fr)"
57
66
  gap="32"
@@ -70,7 +79,7 @@ In some layouts, you may need certain grid items to span a specific amount of co
70
79
 
71
80
  ```jsx
72
81
  <Grid
73
- h="200px"
82
+ height="200px"
74
83
  templateRows="repeat(2, 1fr)"
75
84
  templateColumns="repeat(5, 1fr)"
76
85
  gap="32"
@@ -4,8 +4,7 @@ import { Box, Stack, HStack, VStack, Circle } from "@chakra-ui/react";
4
4
  import { getCategory } from "../../utils/componentCategories";
5
5
  import DSProvider from "../../theme/provider";
6
6
  import Icon from "../Icons/Icon";
7
- import { IconNames, IconRotationTypes, IconSizes } from "../Icons/IconTypes";
8
- import Radio from "../Radio/Radio";
7
+ import { IconNames, IconSizes } from "../Icons/IconTypes";
9
8
 
10
9
  <Meta title={getCategory("Stack, HStack, VStack")} component={Stack} />
11
10
 
@@ -15,7 +14,8 @@ import Radio from "../Radio/Radio";
15
14
  | ----------------- | ---------- |
16
15
  | Added | `0.24.0` |
17
16
 
18
- Note: This needs the use of the `DSProvider` component. See the [README](https://github.com/NYPL/nypl-design-system#using-the-design-system-in-your-product)
17
+ Note: This needs the use of the `DSProvider` component. See the
18
+ [README](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/chakra-ui--page#dsprovider)
19
19
  for more information.
20
20
 
21
21
  These components are directly exported from Chakra UI. The `Stack`, `HStack`,
@@ -25,17 +25,21 @@ with spacing between them.
25
25
  All available props can be found on the [Style Props](https://chakra-ui.com/docs/features/style-props)
26
26
  guide on the Chakra UI site.
27
27
 
28
+ In all the following examples, Design System `Icon` components are wrapped in
29
+ Chakra's `Circle` component.
30
+
28
31
  ## Stack
29
32
 
30
- The `Stack` component is the most flexible component because it can stack elements
31
- both horizontally and vertically through the `direction` prop.
33
+ The `Stack` component is the most flexible component because it can stack
34
+ elements both horizontally and vertically through the `direction` prop and the
35
+ `"row"` and `"column"` values, respectively.
32
36
 
33
37
  <Canvas>
34
38
  <Story
35
39
  name="Stack, HStack, VStack"
36
40
  args={{
37
41
  direction: "column",
38
- spacing: "10px",
42
+ spacing: "s",
39
43
  }}
40
44
  argTypes={{
41
45
  direction: {
@@ -64,30 +68,43 @@ both horizontally and vertically through the `direction` prop.
64
68
 
65
69
  ## HStack
66
70
 
67
- Stacks components horizontally.
71
+ Stacks components horizontally. This is the same as the `Stack` component with
72
+ a `direction` value of `"row"`.
68
73
 
69
74
  <Canvas>
70
75
  <DSProvider>
71
- <HStack>
72
- <Radio checked labelText="Tom Nook" name="testChecked" />
73
- <Radio labelText="Timmy" name="testChecked" />
74
- <Radio labelText="Tommy" name="testChecked" />
75
- <Radio labelText="Celeste" name="testChecked" />
76
+ <HStack spacing="s">
77
+ <Circle size="50px" borderColor="ui.black" borderWidth="1px">
78
+ <Icon name={IconNames.ErrorFilled} size={IconSizes.Large} />
79
+ </Circle>
80
+ <Circle size="50px" borderColor="ui.black" borderWidth="1px">
81
+ <Icon name={IconNames.ErrorOutline} size={IconSizes.Large} />
82
+ </Circle>
83
+ <Circle size="50px" borderColor="ui.black" borderWidth="1px">
84
+ <Icon name={IconNames.Check} size={IconSizes.Large} />
85
+ </Circle>
76
86
  </HStack>
77
87
  </DSProvider>
78
88
  </Canvas>
79
89
 
80
90
  ## VStack
81
91
 
82
- Stacks components vertically.
92
+ Stacks components vertically. This is the same as the `Stack` component with
93
+ a `direction` value of `"column"`.Pass in a value to the `align` prop to align
94
+ all the elements in the stack.
83
95
 
84
96
  <Canvas>
85
97
  <DSProvider>
86
- <VStack>
87
- <Radio isChecked labelText="Tom Nook" name="testChecked" />
88
- <Radio labelText="Timmy" name="testChecked" />
89
- <Radio labelText="Tommy" name="testChecked" />
90
- <Radio labelText="Celeste" name="testChecked" />
98
+ <VStack align="left" spacing="s">
99
+ <Circle size="50px" borderColor="ui.black" borderWidth="1px">
100
+ <Icon name={IconNames.ErrorFilled} size={IconSizes.Large} />
101
+ </Circle>
102
+ <Circle size="50px" borderColor="ui.black" borderWidth="1px">
103
+ <Icon name={IconNames.ErrorOutline} size={IconSizes.Large} />
104
+ </Circle>
105
+ <Circle size="50px" borderColor="ui.black" borderWidth="1px">
106
+ <Icon name={IconNames.Check} size={IconSizes.Large} />
107
+ </Circle>
91
108
  </VStack>
92
109
  </DSProvider>
93
110
  </Canvas>
@@ -38,7 +38,7 @@ import { onChangeDefault } from "./Checkbox";
38
38
  | Component Version | DS Version |
39
39
  | ----------------- | ---------- |
40
40
  | Added | `0.1.0` |
41
- | Latest | `0.25.0` |
41
+ | Latest | `0.25.3` |
42
42
 
43
43
  <Description of={Checkbox} />
44
44
 
@@ -49,16 +49,18 @@ cause an accessibility violation if none is present.
49
49
  <Story
50
50
  name="Checkbox"
51
51
  args={{
52
- labelText: "Test Label",
53
- showLabel: true,
52
+ helperText: "This is the helper text!",
54
53
  id: "test_id",
55
- name: "test_name",
56
- value: "1",
54
+ invalidText: "This is the error text :(",
57
55
  isDisabled: false,
58
- isRequired: false,
56
+ isIndeterminate: false,
59
57
  isInvalid: false,
60
- helperText: "This is the helper text!",
61
- errorText: "This is the error text :(",
58
+ isRequired: false,
59
+ labelText: "Test Label",
60
+ name: "test_name",
61
+ showHelperInvalidText: true,
62
+ showLabel: true,
63
+ value: "1",
62
64
  }}
63
65
  >
64
66
  {(args) => <Checkbox {...args} />}
@@ -69,9 +71,29 @@ cause an accessibility violation if none is present.
69
71
 
70
72
  ## Checked
71
73
 
74
+ Note that the `isChecked` property in this example is set to `true` and clicking
75
+ on it won't remove the checkmark; the `isChecked` prop must now be controlled
76
+ and removed manually by the parent component that controls this state.
77
+
72
78
  <Canvas>
73
79
  <DSProvider>
74
- <Checkbox labelText="I am checked" isChecked value="1" />
80
+ <Checkbox id="isChecked" labelText="I am checked" isChecked value="1" />
81
+ </DSProvider>
82
+ </Canvas>
83
+
84
+ ## Indeterminate
85
+
86
+ Note: This state only changes the icon through the `isIndeterminate` prop. This
87
+ does not affect whether the checkbox is checked. The `isIndeterminate` prop must
88
+ now be controlled and removed by the parent component in order to remove this state.
89
+
90
+ <Canvas>
91
+ <DSProvider>
92
+ <Checkbox
93
+ id="indeterminate"
94
+ labelText="I am indeterminate"
95
+ isIndeterminate
96
+ />
75
97
  </DSProvider>
76
98
  </Canvas>
77
99
 
@@ -126,9 +148,9 @@ cause an accessibility violation if none is present.
126
148
  <Canvas>
127
149
  <DSProvider>
128
150
  <Checkbox
129
- name="testErrorText"
151
+ name="testinvalidText"
130
152
  labelText="I have error text"
131
- errorText="I am the error text for this Checkbox"
153
+ invalidText="I am the error text for this Checkbox"
132
154
  isInvalid
133
155
  />
134
156
  </DSProvider>
@@ -63,7 +63,7 @@ describe("Checkbox", () => {
63
63
  id="inputID"
64
64
  labelText="Test Label"
65
65
  helperText="This is the helper text."
66
- errorText="This is the error text :("
66
+ invalidText="This is the error text :("
67
67
  />
68
68
  );
69
69
  expect(screen.getByText("This is the helper text.")).toBeVisible();
@@ -77,7 +77,7 @@ describe("Checkbox", () => {
77
77
  labelText="Test Label"
78
78
  isInvalid
79
79
  helperText="This is the helper text."
80
- errorText="This is the error text :("
80
+ invalidText="This is the error text :("
81
81
  />
82
82
  );
83
83
  expect(screen.getByText("This is the error text :(")).toBeVisible();
@@ -109,6 +109,22 @@ describe("Checkbox", () => {
109
109
  expect(screen.getByRole("checkbox")).toHaveAttribute("checked");
110
110
  });
111
111
 
112
+ it("Sets the 'indeterminate' state", () => {
113
+ const { container, rerender } = render(
114
+ <Checkbox id="inputID" labelText="Test Label" isChecked />
115
+ );
116
+ expect(
117
+ container.querySelector(".chakra-checkbox__control")
118
+ ).not.toHaveAttribute("data-indeterminate");
119
+
120
+ rerender(
121
+ <Checkbox id="inputID" labelText="Test Label" isChecked isIndeterminate />
122
+ );
123
+ expect(
124
+ container.querySelector(".chakra-checkbox__control")
125
+ ).toHaveAttribute("data-indeterminate");
126
+ });
127
+
112
128
  it("Sets the 'disabled' attribute", () => {
113
129
  render(
114
130
  <Checkbox
@@ -139,7 +155,7 @@ describe("Checkbox", () => {
139
155
  id="inputID-attributes"
140
156
  labelText="onChange test"
141
157
  showLabel={true}
142
- errorText="This is the error text!"
158
+ invalidText="This is the error text!"
143
159
  isInvalid
144
160
  />
145
161
  );
@@ -188,6 +204,16 @@ describe("Checkbox", () => {
188
204
  <Checkbox id="checkbox-checked" labelText="Test Label" isChecked />
189
205
  )
190
206
  .toJSON();
207
+ const isIndeterminate = renderer
208
+ .create(
209
+ <Checkbox
210
+ id="checkbox-checked"
211
+ labelText="Test Label"
212
+ isChecked
213
+ isIndeterminate
214
+ />
215
+ )
216
+ .toJSON();
191
217
  const isRequired = renderer
192
218
  .create(
193
219
  <Checkbox id="checkbox-required" labelText="Test Label" isRequired />
@@ -206,6 +232,7 @@ describe("Checkbox", () => {
206
232
 
207
233
  expect(primary).toMatchSnapshot();
208
234
  expect(isChecked).toMatchSnapshot();
235
+ expect(isIndeterminate).toMatchSnapshot();
209
236
  expect(isRequired).toMatchSnapshot();
210
237
  expect(isInvalid).toMatchSnapshot();
211
238
  expect(isDisabled).toMatchSnapshot();
@@ -11,26 +11,25 @@ import generateUUID from "../../helpers/generateUUID";
11
11
  export interface CheckboxProps {
12
12
  /** className you can add in addition to 'input' */
13
13
  className?: string;
14
- /** Optional string to populate the HelperErrorText for the error state
15
- * when `isInvalid` is true.
16
- */
17
- errorText?: string;
18
14
  /** Optional string to populate the HelperErrorText for standard state */
19
15
  helperText?: string;
20
16
  /** ID that other components can cross reference for accessibility purposes */
21
17
  id?: string;
18
+ /** Optional string to populate the HelperErrorText for the error state
19
+ * when `isInvalid` is true. */
20
+ invalidText?: string;
22
21
  /** When using the Checkbox as a "controlled" form element, you can specify
23
22
  * the Checkbox's checked state using this prop.
24
23
  * Learn more about controlled and uncontrolled form fields:
25
24
  * https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ */
26
25
  isChecked?: boolean;
27
26
  /** Adds the 'disabled' and `aria-disabled` attributes to the input when true.
28
- * This also makes the text italic and color scheme gray.
29
- */
27
+ * This also makes the text italic and color scheme gray. */
30
28
  isDisabled?: boolean;
29
+ /** Adds the indeterminate state to the `Checkbox`. */
30
+ isIndeterminate?: boolean;
31
31
  /** Adds the 'aria-invalid' attribute to the input when true. This also makes
32
- * the color theme "NYPL error" red for the button and text.
33
- */
32
+ * the color theme "NYPL error" red for the button and text. */
34
33
  isInvalid?: boolean;
35
34
  /** Adds the 'required' attribute to the input when true. */
36
35
  isRequired?: boolean;
@@ -38,7 +37,7 @@ export interface CheckboxProps {
38
37
  * element if `showlabel` is true, or an "aria-label" if `showLabel` is false. */
39
38
  labelText: string;
40
39
  /** The name prop indicates into which group of checkboxes this checkbox
41
- * belongs. If none is specified, 'default' will be used */
40
+ * belongs. If none is specified, 'default' will be used */
42
41
  name?: string;
43
42
  /** The action to perform on the `<input>`'s onChange function */
44
43
  onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
@@ -56,17 +55,17 @@ export const onChangeDefault = () => {
56
55
  };
57
56
 
58
57
  function CheckboxIcon(props) {
59
- // Don't need the `isChecked` prop but it causes
60
- // rendering issues on the SVG element.
58
+ // We don't need the `isIndeterminate` or `isChecked` props but it
59
+ // causes rendering issues on the SVG element, so we remove them
60
+ // before passing all the props to the `Icon` component.
61
61
  const { isIndeterminate, isChecked, ...rest } = props;
62
62
 
63
- const d = isIndeterminate
64
- ? "M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm0,19a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,12,19Zm1.6-6.08a1,1,0,0,0-.6.917,1,1,0,1,1-2,0,3,3,0,0,1,1.8-2.75A2,2,0,1,0,10,9.255a1,1,0,1,1-2,0,4,4,0,1,1,5.6,3.666Z"
65
- : "M8.795 15.875l-4.17-4.17-1.42 1.41 5.59 5.59 12-12-1.41-1.41-10.59 10.58z";
66
-
67
63
  return (
68
64
  <Icon viewBox="0 0 24 24" {...rest}>
69
- <path fill="currentColor" d={d} />
65
+ <path
66
+ fill="currentColor"
67
+ d="M8.795 15.875l-4.17-4.17-1.42 1.41 5.59 5.59 12-12-1.41-1.41-10.59 10.58z"
68
+ />
70
69
  </Icon>
71
70
  );
72
71
  }
@@ -75,11 +74,12 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
75
74
  (props, ref?) => {
76
75
  const {
77
76
  className,
78
- errorText,
77
+ invalidText,
79
78
  helperText,
80
79
  id = generateUUID(),
81
80
  isChecked,
82
81
  isDisabled = false,
82
+ isIndeterminate = false,
83
83
  isInvalid = false,
84
84
  isRequired = false,
85
85
  labelText,
@@ -88,17 +88,18 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
88
88
  showLabel = true,
89
89
  value,
90
90
  } = props;
91
-
92
91
  const styles = useMultiStyleConfig("Checkbox", {});
93
- const footnote = isInvalid ? errorText : helperText;
94
- const attributes = {};
92
+ const footnote = isInvalid ? invalidText : helperText;
93
+ const ariaAttributes = {};
95
94
  const onChange = props.onChange || onChangeDefault;
95
+ // Use Chakra's default indeterminate icon.
96
+ const icon = !isIndeterminate ? <CheckboxIcon /> : undefined;
96
97
 
97
98
  if (!showLabel) {
98
- attributes["aria-label"] =
99
+ ariaAttributes["aria-label"] =
99
100
  labelText && footnote ? `${labelText} - ${footnote}` : labelText;
100
101
  } else {
101
- if (footnote) attributes["aria-describedby"] = `${id}-helperText`;
102
+ if (footnote) ariaAttributes["aria-describedby"] = `${id}-helperText`;
102
103
  }
103
104
 
104
105
  return (
@@ -110,6 +111,7 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
110
111
  isDisabled={isDisabled}
111
112
  isInvalid={isInvalid}
112
113
  isRequired={isRequired}
114
+ isIndeterminate={isIndeterminate}
113
115
  ref={ref}
114
116
  value={value}
115
117
  {...(isChecked !== undefined
@@ -120,14 +122,14 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
120
122
  : {
121
123
  defaultIsChecked: false,
122
124
  })}
123
- icon={<CheckboxIcon />}
125
+ icon={icon}
124
126
  __css={styles}
125
- {...attributes}
127
+ {...ariaAttributes}
126
128
  >
127
129
  {showLabel && labelText}
128
130
  </ChakraCheckbox>
129
131
  {footnote && showHelperInvalidText && (
130
- <Box __css={styles.helper} aria-disabled={isDisabled}>
132
+ <Box __css={styles.helper}>
131
133
  <HelperErrorText isInvalid={isInvalid} id={`${id}-helperText`}>
132
134
  {footnote}
133
135
  </HelperErrorText>
@@ -138,6 +140,4 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
138
140
  }
139
141
  );
140
142
 
141
- Checkbox.displayName = "Checkbox";
142
-
143
143
  export default Checkbox;
@@ -130,6 +130,94 @@ exports[`Checkbox Renders the UI snapshot correctly 2`] = `
130
130
  `;
131
131
 
132
132
  exports[`Checkbox Renders the UI snapshot correctly 3`] = `
133
+ <label
134
+ className="chakra-checkbox css-1uiwwan"
135
+ data-checked=""
136
+ onClick={[Function]}
137
+ >
138
+ <input
139
+ aria-disabled={false}
140
+ aria-invalid={false}
141
+ checked={true}
142
+ className="chakra-checkbox__input"
143
+ disabled={false}
144
+ id="checkbox-checked"
145
+ name="default"
146
+ onBlur={[Function]}
147
+ onChange={[Function]}
148
+ onFocus={[Function]}
149
+ onKeyDown={[Function]}
150
+ onKeyUp={[Function]}
151
+ required={false}
152
+ style={
153
+ Object {
154
+ "border": "0px",
155
+ "clip": "rect(0px, 0px, 0px, 0px)",
156
+ "height": "1px",
157
+ "margin": "-1px",
158
+ "overflow": "hidden",
159
+ "padding": "0px",
160
+ "position": "absolute",
161
+ "whiteSpace": "nowrap",
162
+ "width": "1px",
163
+ }
164
+ }
165
+ type="checkbox"
166
+ />
167
+ <span
168
+ aria-hidden={true}
169
+ className="chakra-checkbox__control css-dnty2r"
170
+ data-checked=""
171
+ data-indeterminate=""
172
+ onMouseDown={[Function]}
173
+ onMouseEnter={[Function]}
174
+ onMouseLeave={[Function]}
175
+ onMouseUp={[Function]}
176
+ >
177
+ <div
178
+ style={
179
+ Object {
180
+ "alignItems": "center",
181
+ "display": "flex",
182
+ "height": "100%",
183
+ "justifyContent": "center",
184
+ "transform": "none",
185
+ }
186
+ }
187
+ >
188
+ <svg
189
+ className="css-o8vbdw"
190
+ style={
191
+ Object {
192
+ "opacity": 1,
193
+ "stroke": "currentColor",
194
+ "strokeWidth": 4,
195
+ "transform": "none",
196
+ }
197
+ }
198
+ viewBox="0 0 24 24"
199
+ >
200
+ <line
201
+ x1="21"
202
+ x2="3"
203
+ y1="12"
204
+ y2="12"
205
+ />
206
+ </svg>
207
+ </div>
208
+ </span>
209
+ <span
210
+ className="chakra-checkbox__label css-1oeb2oe"
211
+ data-checked=""
212
+ onMouseDown={[Function]}
213
+ onTouchStart={[Function]}
214
+ >
215
+ Test Label
216
+ </span>
217
+ </label>
218
+ `;
219
+
220
+ exports[`Checkbox Renders the UI snapshot correctly 4`] = `
133
221
  <label
134
222
  className="chakra-checkbox css-1uiwwan"
135
223
  onClick={[Function]}
@@ -192,7 +280,7 @@ exports[`Checkbox Renders the UI snapshot correctly 3`] = `
192
280
  </label>
193
281
  `;
194
282
 
195
- exports[`Checkbox Renders the UI snapshot correctly 4`] = `
283
+ exports[`Checkbox Renders the UI snapshot correctly 5`] = `
196
284
  <label
197
285
  className="chakra-checkbox css-1uiwwan"
198
286
  data-invalid=""
@@ -258,7 +346,7 @@ exports[`Checkbox Renders the UI snapshot correctly 4`] = `
258
346
  </label>
259
347
  `;
260
348
 
261
- exports[`Checkbox Renders the UI snapshot correctly 5`] = `
349
+ exports[`Checkbox Renders the UI snapshot correctly 6`] = `
262
350
  <label
263
351
  className="chakra-checkbox css-1uiwwan"
264
352
  data-disabled=""