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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/CHANGELOG.md +119 -1
  2. package/README.md +1 -1
  3. package/dist/components/Button/Button.d.ts +6 -6
  4. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  5. package/dist/components/Card/Card.d.ts +6 -4
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  7. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  8. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  9. package/dist/components/DatePicker/DatePicker.d.ts +4 -3
  10. package/dist/components/Fieldset/Fieldset.d.ts +1 -3
  11. package/dist/components/Form/Form.d.ts +15 -14
  12. package/dist/components/Form/FormTypes.d.ts +2 -2
  13. package/dist/components/Heading/Heading.d.ts +7 -3
  14. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  15. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  16. package/dist/components/HorizontalRule/HorizontalRule.d.ts +3 -3
  17. package/dist/components/Icons/Icon.d.ts +4 -4
  18. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  19. package/dist/components/Icons/IconTypes.d.ts +1 -23
  20. package/dist/components/Image/Image.d.ts +11 -3
  21. package/dist/components/Image/ImageTypes.d.ts +3 -1
  22. package/dist/components/Link/LinkTypes.d.ts +1 -0
  23. package/dist/components/Logo/Logo.d.ts +28 -0
  24. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  25. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  26. package/dist/components/Modal/Modal.d.ts +0 -4
  27. package/dist/components/Notification/Notification.d.ts +4 -2
  28. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  29. package/dist/components/Radio/Radio.d.ts +6 -5
  30. package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
  31. package/dist/components/SearchBar/SearchBar.d.ts +15 -7
  32. package/dist/components/Select/Select.d.ts +5 -2
  33. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  34. package/dist/components/Slider/Slider.d.ts +3 -2
  35. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  36. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  37. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  38. package/dist/components/Table/Table.d.ts +29 -0
  39. package/dist/components/Template/Template.d.ts +30 -6
  40. package/dist/components/Text/Text.d.ts +2 -2
  41. package/dist/components/TextInput/TextInput.d.ts +4 -3
  42. package/dist/components/Toggle/Toggle.d.ts +48 -0
  43. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  44. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  45. package/dist/design-system-react-components.cjs.development.js +4698 -4405
  46. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  48. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  49. package/dist/design-system-react-components.esm.js +5862 -5573
  50. package/dist/design-system-react-components.esm.js.map +1 -1
  51. package/dist/index.d.ts +13 -8
  52. package/dist/resources.scss +0 -2
  53. package/dist/styles.css +2 -2
  54. package/dist/theme/components/breadcrumb.d.ts +1 -1
  55. package/dist/theme/components/button.d.ts +0 -12
  56. package/dist/theme/components/card.d.ts +14 -2
  57. package/dist/theme/components/customTable.d.ts +56 -0
  58. package/dist/theme/components/fieldset.d.ts +2 -2
  59. package/dist/theme/components/global.d.ts +1 -1
  60. package/dist/theme/components/heading.d.ts +4 -0
  61. package/dist/theme/components/label.d.ts +1 -1
  62. package/dist/theme/components/link.d.ts +14 -1
  63. package/dist/theme/components/list.d.ts +0 -2
  64. package/dist/theme/components/logo.d.ts +4 -0
  65. package/dist/theme/components/notification.d.ts +8 -4
  66. package/dist/theme/components/searchBar.d.ts +7 -13
  67. package/dist/theme/components/select.d.ts +1 -0
  68. package/dist/theme/components/structuredContent.d.ts +33 -0
  69. package/dist/theme/components/template.d.ts +10 -10
  70. package/dist/theme/components/textInput.d.ts +2 -0
  71. package/dist/theme/components/toggle.d.ts +71 -0
  72. package/dist/theme/foundations/spacing.d.ts +2 -0
  73. package/dist/utils/utils.d.ts +10 -0
  74. package/package.json +40 -37
  75. package/src/__tests__/utils/utils.test.ts +23 -1
  76. package/src/components/Accordion/Accordion.stories.mdx +16 -15
  77. package/src/components/Accordion/Accordion.test.tsx +45 -1
  78. package/src/components/Accordion/Accordion.tsx +20 -8
  79. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
  80. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  81. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  82. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  83. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
  84. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +25 -0
  85. package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
  86. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +103 -4
  87. package/src/components/Button/Button.stories.mdx +93 -48
  88. package/src/components/Button/Button.test.tsx +0 -12
  89. package/src/components/Button/Button.tsx +7 -8
  90. package/src/components/Button/ButtonTypes.tsx +0 -1
  91. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  92. package/src/components/Card/Card.stories.mdx +246 -64
  93. package/src/components/Card/Card.test.tsx +45 -22
  94. package/src/components/Card/Card.tsx +30 -14
  95. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  96. package/src/components/Chakra/Box.stories.mdx +3 -3
  97. package/src/components/Chakra/Center.stories.mdx +5 -5
  98. package/src/components/Chakra/Flex.stories.mdx +113 -0
  99. package/src/components/Chakra/Grid.stories.mdx +14 -17
  100. package/src/components/Chakra/Stack.stories.mdx +2 -2
  101. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  102. package/src/components/Checkbox/Checkbox.tsx +13 -8
  103. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  104. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  105. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  106. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  107. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  108. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  109. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  110. package/src/components/DatePicker/DatePicker.test.tsx +14 -12
  111. package/src/components/DatePicker/DatePicker.tsx +13 -10
  112. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  113. package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
  114. package/src/components/Fieldset/Fieldset.tsx +2 -4
  115. package/src/components/Form/Form.stories.mdx +75 -49
  116. package/src/components/Form/Form.test.tsx +92 -3
  117. package/src/components/Form/Form.tsx +28 -23
  118. package/src/components/Form/FormTypes.tsx +2 -2
  119. package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
  120. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  121. package/src/components/Heading/Heading.stories.mdx +59 -23
  122. package/src/components/Heading/Heading.test.tsx +82 -18
  123. package/src/components/Heading/Heading.tsx +31 -31
  124. package/src/components/Heading/HeadingTypes.tsx +6 -6
  125. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  126. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  127. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  128. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  129. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  130. package/src/components/Hero/Hero.stories.mdx +72 -53
  131. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
  132. package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
  133. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
  134. package/src/components/Icons/Icon.stories.mdx +77 -75
  135. package/src/components/Icons/Icon.tsx +4 -5
  136. package/src/components/Icons/IconSvgs.tsx +2 -42
  137. package/src/components/Icons/IconTypes.tsx +1 -24
  138. package/src/components/Image/Image.stories.mdx +214 -104
  139. package/src/components/Image/Image.test.tsx +10 -0
  140. package/src/components/Image/Image.tsx +21 -10
  141. package/src/components/Image/ImageTypes.ts +2 -0
  142. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  143. package/src/components/Label/Label.stories.mdx +21 -20
  144. package/src/components/Link/Link.stories.mdx +103 -53
  145. package/src/components/Link/Link.test.tsx +108 -7
  146. package/src/components/Link/Link.tsx +58 -19
  147. package/src/components/Link/LinkTypes.tsx +1 -0
  148. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  149. package/src/components/List/List.stories.mdx +37 -25
  150. package/src/components/List/List.tsx +1 -1
  151. package/src/components/Logo/Logo.stories.mdx +220 -0
  152. package/src/components/Logo/Logo.test.tsx +98 -0
  153. package/src/components/Logo/Logo.tsx +97 -0
  154. package/src/components/Logo/LogoSvgs.tsx +34 -0
  155. package/src/components/Logo/LogoTypes.tsx +32 -0
  156. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  157. package/src/components/Modal/Modal.stories.mdx +20 -5
  158. package/src/components/Modal/Modal.tsx +2 -8
  159. package/src/components/Notification/Notification.stories.mdx +96 -40
  160. package/src/components/Notification/Notification.test.tsx +62 -16
  161. package/src/components/Notification/Notification.tsx +26 -9
  162. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  163. package/src/components/Pagination/Pagination.stories.mdx +19 -9
  164. package/src/components/Pagination/Pagination.tsx +3 -3
  165. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  166. package/src/components/Placeholder/Placeholder.tsx +7 -14
  167. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  168. package/src/components/Radio/Radio.stories.mdx +39 -19
  169. package/src/components/Radio/Radio.tsx +13 -9
  170. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
  171. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  172. package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
  173. package/src/components/RadioGroup/RadioGroup.tsx +97 -94
  174. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
  175. package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
  176. package/src/components/SearchBar/SearchBar.stories.mdx +116 -34
  177. package/src/components/SearchBar/SearchBar.tsx +70 -50
  178. package/src/components/Select/Select.stories.mdx +177 -66
  179. package/src/components/Select/Select.test.tsx +91 -2
  180. package/src/components/Select/Select.tsx +29 -13
  181. package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
  182. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  183. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  184. package/src/components/Slider/Slider.stories.mdx +74 -23
  185. package/src/components/Slider/Slider.test.tsx +35 -0
  186. package/src/components/Slider/Slider.tsx +22 -11
  187. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
  188. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  189. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  190. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  191. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  192. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  193. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  194. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  195. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  196. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  197. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  198. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  199. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  200. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  201. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  202. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  203. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  204. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  205. package/src/components/Table/Table.stories.mdx +165 -0
  206. package/src/components/Table/Table.test.tsx +137 -0
  207. package/src/components/Table/Table.tsx +126 -0
  208. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
  209. package/src/components/Tabs/Tabs.stories.mdx +20 -14
  210. package/src/components/Tabs/Tabs.test.tsx +21 -5
  211. package/src/components/Tabs/Tabs.tsx +33 -18
  212. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
  213. package/src/components/Template/Template.stories.mdx +132 -49
  214. package/src/components/Template/Template.test.tsx +128 -6
  215. package/src/components/Template/Template.tsx +93 -13
  216. package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
  217. package/src/components/Text/Text.stories.mdx +33 -11
  218. package/src/components/Text/Text.tsx +2 -2
  219. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  220. package/src/components/TextInput/TextInput.test.tsx +96 -0
  221. package/src/components/TextInput/TextInput.tsx +12 -8
  222. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  223. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  224. package/src/components/Toggle/Toggle.test.tsx +140 -0
  225. package/src/components/Toggle/Toggle.tsx +123 -0
  226. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  227. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  228. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  229. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  230. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  231. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  232. package/src/docs/Chakra.stories.mdx +5 -8
  233. package/src/docs/Intro.stories.mdx +2 -2
  234. package/src/index.ts +19 -6
  235. package/src/styles/base/_03-base.scss +1 -1
  236. package/src/styles/base/_place-holder.scss +7 -7
  237. package/src/styles.scss +1 -5
  238. package/src/theme/components/breadcrumb.ts +5 -5
  239. package/src/theme/components/button.ts +5 -12
  240. package/src/theme/components/card.ts +9 -7
  241. package/src/theme/components/checkbox.ts +1 -1
  242. package/src/theme/components/customTable.ts +63 -0
  243. package/src/theme/components/datePicker.ts +1 -1
  244. package/src/theme/components/global.ts +7 -7
  245. package/src/theme/components/heading.ts +13 -11
  246. package/src/theme/components/helperErrorText.ts +1 -1
  247. package/src/theme/components/icon.ts +2 -2
  248. package/src/theme/components/image.ts +9 -1
  249. package/src/theme/components/link.ts +17 -5
  250. package/src/theme/components/list.ts +1 -3
  251. package/src/theme/components/logo.ts +54 -0
  252. package/src/theme/components/notification.ts +9 -7
  253. package/src/theme/components/searchBar.ts +7 -13
  254. package/src/theme/components/select.ts +1 -0
  255. package/src/theme/components/statusBadge.ts +1 -1
  256. package/src/theme/components/structuredContent.ts +54 -0
  257. package/src/theme/components/template.ts +10 -10
  258. package/src/theme/components/text.ts +6 -6
  259. package/src/theme/components/textInput.ts +1 -0
  260. package/src/theme/components/toggle.ts +69 -0
  261. package/src/theme/components/videoPlayer.ts +0 -2
  262. package/src/theme/foundations/global.ts +2 -2
  263. package/src/theme/foundations/spacing.ts +3 -0
  264. package/src/theme/foundations/typography.ts +84 -12
  265. package/src/theme/index.ts +8 -0
  266. package/src/utils/componentCategories.ts +5 -2
  267. package/src/utils/utils.ts +17 -0
  268. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  269. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  270. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  271. package/dist/components/Input/Input.d.ts +0 -36
  272. package/dist/components/Input/Input.stories.d.ts +0 -29
  273. package/dist/components/Input/InputTypes.d.ts +0 -6
  274. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  275. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  276. package/dist/helpers/getCSSVariable.d.ts +0 -1
  277. package/dist/interfaces.d.ts +0 -3
  278. package/dist/utils/bem.d.ts +0 -1
  279. package/src/__tests__/utils/bem.test.ts +0 -37
  280. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  281. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  282. package/src/components/CardEdition/CardEdition.tsx +0 -60
  283. package/src/components/CardEdition/_CardEdition.scss +0 -137
  284. package/src/components/Input/Input.stories.tsx +0 -133
  285. package/src/components/Input/Input.test.tsx +0 -266
  286. package/src/components/Input/Input.tsx +0 -81
  287. package/src/components/Input/InputTypes.tsx +0 -8
  288. package/src/components/Input/_Input.scss +0 -78
  289. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  290. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  291. package/src/helpers/getCSSVariable.tsx +0 -5
  292. package/src/interfaces.ts +0 -3
  293. package/src/utils/bem.ts +0 -44
@@ -1,31 +1,33 @@
1
+ import { action } from "@storybook/addon-actions";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
- import { getCategory } from "../../utils/componentCategories";
10
10
 
11
- import Form, { FormRow, FormField } from "./Form";
12
- import { FormSpacing } from "./FormTypes";
13
- import TextInput from "../TextInput/TextInput";
14
- import Radio from "../Radio/Radio";
15
- import RadioGroup from "../RadioGroup/RadioGroup";
11
+ import Button from "../Button/Button";
16
12
  import Checkbox from "../Checkbox/Checkbox";
17
13
  import CheckboxGroup from "../CheckboxGroup/CheckboxGroup";
18
- import Label from "../Label/Label";
19
- import Button from "../Button/Button";
20
- import Select from "../Select/Select";
14
+ import DatePicker from "../DatePicker/DatePicker";
15
+ import { DatePickerTypes } from "../DatePicker/DatePickerTypes";
16
+ import Form, { FormRow, FormField } from "./Form";
17
+ import { FormGaps } from "./FormTypes";
21
18
  import Heading from "../Heading/Heading";
22
19
  import { HeadingLevels } from "../Heading/HeadingTypes";
23
20
  import HorizontalRule from "../HorizontalRule/HorizontalRule";
24
- import DatePicker from "../DatePicker/DatePicker";
25
- import { DatePickerTypes } from "../DatePicker/DatePickerTypes";
26
- import { action } from "@storybook/addon-actions";
27
-
21
+ import Label from "../Label/Label";
22
+ import Radio from "../Radio/Radio";
23
+ import RadioGroup from "../RadioGroup/RadioGroup";
24
+ import Select from "../Select/Select";
25
+ import TextInput from "../TextInput/TextInput";
26
+ import { getCategory } from "../../utils/componentCategories";
28
27
  import SimpleGrid from "../Grid/SimpleGrid";
28
+ import { getStorybookEnumValues } from "../../utils/utils";
29
+
30
+ export const enumValues = getStorybookEnumValues(FormGaps, "FormGaps");
29
31
 
30
32
  <Meta
31
33
  title={getCategory("Form")}
@@ -34,11 +36,23 @@ import SimpleGrid from "../Grid/SimpleGrid";
34
36
  parameters={{
35
37
  design: {
36
38
  type: "figma",
37
- url:
38
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
39
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
39
40
  },
40
41
  jest: ["Form.test.tsx"],
41
42
  }}
43
+ argTypes={{
44
+ action: { control: false },
45
+ id: { control: false },
46
+ method: {
47
+ control: { type: "radio" },
48
+ options: ["get", "post"],
49
+ },
50
+ gap: {
51
+ control: { type: "select" },
52
+ table: { defaultValue: { summary: "FormGaps.Large" } },
53
+ options: enumValues.options,
54
+ },
55
+ }}
42
56
  />
43
57
 
44
58
  # Form
@@ -46,35 +60,45 @@ import SimpleGrid from "../Grid/SimpleGrid";
46
60
  | Component Version | DS Version |
47
61
  | ----------------- | ---------- |
48
62
  | Added | `0.23.2` |
49
- | Latest | `0.25.1` |
63
+ | Latest | `0.25.10` |
50
64
 
51
65
  <Description of={Form} />
52
66
 
53
- The `Form` component renders a standard `<form>` element and should be used to handle layout and spacing for child input fields. `FormRow` and `FormField` components should be used to build the `<form>` struture and to arrange input fields as needed.
67
+ The `Form` component renders a standard `<form>` element and should be used to
68
+ handle layout and spacing for child input fields. `FormRow` and `FormField`
69
+ components should be used to build the `<form>` structure and to arrange input
70
+ fields as needed.
54
71
 
55
- `FormField` should be used as a parent for all input components from the DS (`Button`, `Select`, `TextInput`, etc.).
72
+ ```jsx
73
+ <Form>
74
+ <FormRow>
75
+ <FormField>{/* ... */}</FormField>
76
+ </FormRow>
77
+ <FormRow>
78
+ <FormField>{/* ... */}</FormField>
79
+ </FormRow>
80
+ </Form>
81
+ ```
82
+
83
+ `FormField` should be used as a parent for all input components from the DS
84
+ (`Button`, `Select`, `TextInput`, etc.).
56
85
 
57
- `FormRow` should be used as a parent of multiple `FormField` components when you need to render multiple input components in a horizontal row.
86
+ `FormRow` should be used as a parent of multiple `FormField` components when you
87
+ need to render multiple input components in a horizontal row.
58
88
 
59
89
  <Canvas withToolbar>
60
90
  <Story
61
- name="Form"
91
+ name="Form with Controls"
62
92
  args={{
63
93
  action: "/end/point",
64
- id: "custom-form-id",
94
+ className: undefined,
95
+ id: "form-id",
65
96
  method: "get",
66
- }}
67
- argTypes={{
68
- method: {
69
- control: {
70
- type: "radio",
71
- options: ["get", "post"],
72
- },
73
- },
97
+ gap: "FormGaps.Large",
74
98
  }}
75
99
  >
76
100
  {(args) => (
77
- <Form {...args}>
101
+ <Form {...args} gap={enumValues.getValue(args.gap)}>
78
102
  <FormRow>
79
103
  <FormField>
80
104
  <TextInput
@@ -95,15 +119,15 @@ The `Form` component renders a standard `<form>` element and should be used to h
95
119
  id="date-range"
96
120
  dateType={DatePickerTypes.Full}
97
121
  dateFormat="yyyy-MM-dd"
98
- dateRange={true}
99
- minDate="1/1/2021"
100
- maxDate="1/1/2022"
101
- labelText="Select the date range you want to visit NYPL"
102
- nameFrom="visit-dates"
103
122
  helperTextFrom="From this date."
104
123
  helperTextTo="To this date."
105
124
  helperText="Select a valid date range."
106
125
  invalidText="Please select a valid date range."
126
+ isDateRange
127
+ labelText="Select the date range you want to visit NYPL"
128
+ minDate="1/1/2021"
129
+ maxDate="1/1/2022"
130
+ nameFrom="visit-dates"
107
131
  showLabel={false}
108
132
  />
109
133
  </FormField>
@@ -188,16 +212,16 @@ The `Form` component renders a standard `<form>` element and should be used to h
188
212
  </Story>
189
213
  </Canvas>
190
214
 
191
- <ArgsTable story="Form" />
215
+ <ArgsTable story="Form with Controls" />
192
216
 
193
217
  ## Spacing Variants
194
218
 
195
- export const formRow = (size) => {
196
- const labelText = `Size: ${size}`;
219
+ export const formRow = (nameString, size) => {
220
+ const labelText = `Size: ${nameString} (${size})`;
197
221
  return (
198
- <li>
222
+ <li key={size}>
199
223
  <Heading level={HeadingLevels.Three}>{labelText}</Heading>
200
- <Form spacing={size}>
224
+ <Form gap={size}>
201
225
  <FormRow>
202
226
  <FormField>
203
227
  <Select
@@ -242,16 +266,18 @@ export const formRow = (size) => {
242
266
  );
243
267
  };
244
268
  export const sizes = [];
245
- for (const formSpacing in FormSpacing) {
246
- sizes.push(formRow(FormSpacing[formSpacing]));
269
+ for (const FormGaps in FormGaps) {
270
+ sizes.push(formRow(`FormGaps.${FormGaps}`, FormGaps[FormGaps]));
247
271
  }
248
272
  export const getForms = (list) => <ul style={{ listStyle: "none" }}>{list}</ul>;
249
273
 
250
- By default, the `Form` component will handle the NYPL spacing around form input elements. The default spacing value is `large`, which corresponds to the CSS variable `--nypl-space-l` (2rem / 32px).
274
+ By default, the `Form` component will handle the NYPL spacing around form input
275
+ elements. The default spacing value is `large`, which corresponds to the CSS
276
+ variable `--nypl-space-l` (2rem / 32px).
251
277
 
252
278
  **IMPORTANT:** The default spacing should not be overwritten without a very good reason.
253
279
 
254
- Below are the spacing variants available with the `FormSpacing` enum.
280
+ Below are the spacing variants available with the `FormGaps` enum.
255
281
 
256
282
  <Canvas>
257
283
  <Story
@@ -269,7 +295,7 @@ Below are the spacing variants available with the `FormSpacing` enum.
269
295
  <Story name="Example Code" />
270
296
 
271
297
  ```jsx
272
- <Form action="/end/point" method="get">
298
+ <Form action="/end/point" method="get" gap={FormGaps.Large}>
273
299
  <FormField>
274
300
  <TextInput
275
301
  labelText="Username"
@@ -1,10 +1,10 @@
1
1
  import * as React from "react";
2
- import { render, screen } from "@testing-library/react";
2
+ import { fireEvent, render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
4
  import renderer from "react-test-renderer";
5
5
 
6
6
  import Form, { FormRow, FormField } from "./Form";
7
- // import { FormSpacing } from "./FormTypes";
7
+ // import { FormGaps } from "./FormTypes";
8
8
  import TextInput from "../TextInput/TextInput";
9
9
 
10
10
  describe("Form Accessibility", () => {
@@ -12,6 +12,19 @@ describe("Form Accessibility", () => {
12
12
  const { container } = render(<Form />);
13
13
  expect(await axe(container)).toHaveNoViolations();
14
14
  });
15
+
16
+ it("passes axe accessibility test for the full hierachy", async () => {
17
+ const { container } = render(
18
+ <Form>
19
+ <FormRow>
20
+ <FormField>Form Field 1</FormField>
21
+ <FormField>Form Field 2</FormField>
22
+ <FormField>Form Field 3</FormField>
23
+ </FormRow>
24
+ </Form>
25
+ );
26
+ expect(await axe(container)).toHaveNoViolations();
27
+ });
15
28
  });
16
29
 
17
30
  describe("Form Snapshot", () => {
@@ -101,11 +114,87 @@ describe("Form", () => {
101
114
  expect(form).toHaveAttribute("method", "get");
102
115
  });
103
116
 
117
+ it("passes down the `Form`'s id down to its children", () => {
118
+ const { container } = render(
119
+ <Form id="formId">
120
+ <FormRow>
121
+ <FormField>
122
+ <TextInput labelText="Input Field" />
123
+ </FormField>
124
+ <FormField>
125
+ <TextInput labelText="Input Field" />
126
+ </FormField>
127
+ </FormRow>
128
+ <FormRow>
129
+ <FormField>
130
+ <TextInput labelText="Input Field" />
131
+ </FormField>
132
+ <FormField>
133
+ <TextInput labelText="Input Field" />
134
+ </FormField>
135
+ </FormRow>
136
+ </Form>
137
+ );
138
+
139
+ expect(container.querySelector("#formId")).toBeInTheDocument();
140
+ // The first `FormRow` adds "child0" to its id
141
+ expect(container.querySelector("#formId-child0")).toBeInTheDocument();
142
+ // The first `FormRow`'s first `FormField` adds "grandchild0" to its id
143
+ expect(
144
+ container.querySelector("#formId-child0-grandchild0")
145
+ ).toBeInTheDocument();
146
+ // The first `FormRow`'s second `FormField` adds "grandchild1" to its id
147
+ expect(
148
+ container.querySelector("#formId-child0-grandchild1")
149
+ ).toBeInTheDocument();
150
+ // The second `FormRow` adds "child1" to its id
151
+ expect(container.querySelector("#formId-child1")).toBeInTheDocument();
152
+ // The second `FormRow`'s first `FormField` adds "grandchild0" to its id
153
+ expect(
154
+ container.querySelector("#formId-child1-grandchild0")
155
+ ).toBeInTheDocument();
156
+ // The second `FormRow`'s second `FormField` adds "grandchild1" to its id
157
+ expect(
158
+ container.querySelector("#formId-child1-grandchild1")
159
+ ).toBeInTheDocument();
160
+ });
161
+
162
+ it("logs a warning if a child of `FormRow` is not a `FormField`", () => {
163
+ const warn = jest.spyOn(console, "warn");
164
+ render(
165
+ <Form>
166
+ <FormRow>
167
+ <div>Not a FormField</div>
168
+ </FormRow>
169
+ </Form>
170
+ );
171
+ expect(warn).toHaveBeenCalledWith(
172
+ "FormRow children must be `FormField` components."
173
+ );
174
+ });
175
+
176
+ it("calls the onSubmit function", () => {
177
+ const onSubmit = jest.fn();
178
+ render(
179
+ <Form onSubmit={onSubmit}>
180
+ <FormRow>
181
+ <FormField>
182
+ <TextInput labelText="Input Field" />
183
+ </FormField>
184
+ </FormRow>
185
+ </Form>
186
+ );
187
+ const form = screen.getByRole("form");
188
+ expect(onSubmit).toHaveBeenCalledTimes(0);
189
+ fireEvent.submit(form);
190
+ expect(onSubmit).toHaveBeenCalledTimes(1);
191
+ });
192
+
104
193
  // TO DO: There's somethign weird about checking for the "grid-gap" style.
105
194
  // Other styles can be validated, but "grid-gap" is being ellusive.
106
195
  // it("Renders a <form> element with spacing variant applied", () => {
107
196
  // render(
108
- // <Form spacing={FormSpacing.ExtraSmall}>
197
+ // <Form gap={FormGaps.ExtraSmall}>
109
198
  // <FormRow />
110
199
  // </Form>
111
200
  // );
@@ -1,29 +1,29 @@
1
1
  import * as React from "react";
2
- import { FormSpacing } from "./FormTypes";
2
+
3
+ import { FormGaps } from "./FormTypes";
3
4
  import SimpleGrid from "../Grid/SimpleGrid";
4
- import { Box } from "@chakra-ui/react";
5
5
  import generateUUID from "../../helpers/generateUUID";
6
6
 
7
- export interface FormChildProps {
8
- /** className to be applied to FormRow */
7
+ interface FormBaseProps {
8
+ /** className to be applied to FormRow, FormField, and Form */
9
9
  className?: string;
10
- /** Spacing size (internal use) */
11
- gap?: FormSpacing;
10
+ /** Optional spacing size; if omitted, the default `large` (2rem / 32px)
11
+ * spacing will be used; ```IMPORTANT: for general form layout, this prop
12
+ * should not be used``` */
13
+ gap?: FormGaps;
12
14
  /** ID that other components can cross reference (internal use) */
13
15
  id?: string;
14
16
  }
15
17
 
16
- export interface FormProps {
18
+ export interface FormChildProps extends FormBaseProps {}
19
+
20
+ export interface FormProps extends FormBaseProps {
17
21
  /** Optional form `action` attribute */
18
22
  action?: string;
19
- /** Optional className you can add in addition to `form` */
20
- className?: string;
21
- /** Optional ID that other components can cross reference */
22
- id?: string;
23
23
  /** Optional form `method` attribute */
24
24
  method?: "get" | "post";
25
- /** Optional spacing size; if omitted, the default `large` (2rem / 32px) spacing will be used; ```IMPORTANT: for general form layout, this prop should not be used``` */
26
- spacing?: FormSpacing;
25
+ /** Function to call for the `onSubmit` form event. */
26
+ onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;
27
27
  }
28
28
 
29
29
  /** FormRow child-component */
@@ -34,7 +34,11 @@ export function FormRow(props: React.PropsWithChildren<FormChildProps>) {
34
34
  children,
35
35
  (child: React.ReactElement, i) => {
36
36
  if (!child) return null;
37
- return React.cloneElement(child, { id: `${id}-grandchild${i}` });
37
+ if (child.type === FormField || child.props.mdxType === "FormField") {
38
+ return React.cloneElement(child, { id: `${id}-grandchild${i}` });
39
+ }
40
+ console.warn("FormRow children must be `FormField` components.");
41
+ return null;
38
42
  }
39
43
  );
40
44
  return (
@@ -54,15 +58,16 @@ export function FormField(props: React.PropsWithChildren<FormChildProps>) {
54
58
  );
55
59
  }
56
60
 
57
- /** main Form component */
58
- export default function Form(props: React.ComponentProps<"form"> & FormProps) {
61
+ /** Main Form component */
62
+ export default function Form(props: React.PropsWithChildren<FormProps>) {
59
63
  const {
60
64
  action,
61
65
  children,
62
66
  className,
67
+ gap = FormGaps.Large,
63
68
  id = generateUUID(),
64
69
  method,
65
- spacing,
70
+ onSubmit,
66
71
  } = props;
67
72
 
68
73
  let attributes = {};
@@ -75,21 +80,21 @@ export default function Form(props: React.ComponentProps<"form"> & FormProps) {
75
80
  const alteredChildren = React.Children.map(
76
81
  children,
77
82
  (child: React.ReactElement, i) => {
78
- return React.cloneElement(child, { gap: spacing, id: `${id}-child${i}` });
83
+ return React.cloneElement(child, { gap, id: `${id}-child${i}` });
79
84
  }
80
85
  );
81
86
 
82
87
  return (
83
- <Box
84
- as="form"
88
+ <form
85
89
  aria-label="form"
90
+ className={className}
86
91
  id={id}
92
+ onSubmit={onSubmit}
87
93
  {...attributes}
88
- className={className}
89
94
  >
90
- <SimpleGrid columns={1} gap={spacing} id={id + "-parent"}>
95
+ <SimpleGrid columns={1} gap={gap} id={`${id}-parent`}>
91
96
  {alteredChildren}
92
97
  </SimpleGrid>
93
- </Box>
98
+ </form>
94
99
  );
95
100
  }
@@ -1,3 +1,3 @@
1
- import { GridGaps as FormSpacing } from "../Grid/GridTypes";
1
+ import { GridGaps as FormGaps } from "../Grid/GridTypes";
2
2
 
3
- export { FormSpacing };
3
+ export { FormGaps };
@@ -3,7 +3,6 @@
3
3
  exports[`Form Snapshot Renders the UI snapshot correctly 1`] = `
4
4
  <form
5
5
  aria-label="form"
6
- className="css-0"
7
6
  id="snapshot-form"
8
7
  >
9
8
  <div
@@ -1,13 +1,14 @@
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 SimpleGrid from "./SimpleGrid";
11
+ import { GridGaps } from "./GridTypes";
11
12
  import Card, { CardHeading, CardContent, CardActions } from "../Card/Card";
12
13
  import { CardLayouts } from "../Card/CardTypes";
13
14
  import { HeadingDisplaySizes, HeadingLevels } from "../Heading/HeadingTypes";
@@ -20,9 +21,11 @@ import {
20
21
  } from "../Icons/IconTypes";
21
22
  import Image from "../Image/Image";
22
23
  import { ImageRatios } from "../Image/ImageTypes";
23
-
24
24
  import { getCategory } from "../../utils/componentCategories";
25
25
  import DSProvider from "../../theme/provider";
26
+ import { getStorybookEnumValues } from "../../utils/utils";
27
+
28
+ export const enumValues = getStorybookEnumValues(GridGaps, "GridGaps");
26
29
 
27
30
  <Meta
28
31
  title={getCategory("SimpleGrid")}
@@ -31,32 +34,21 @@ import DSProvider from "../../theme/provider";
31
34
  parameters={{
32
35
  design: {
33
36
  type: "figma",
34
- url:
35
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36835%3A26613",
37
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36835%3A26613",
36
38
  },
37
39
  jest: ["SimpleGrid.test.tsx"],
38
40
  }}
39
41
  argTypes={{
42
+ className: { control: false },
40
43
  columns: {
41
- control: {
42
- type: "number",
43
- min: 2,
44
- },
45
- table: {
46
- defaultValue: {
47
- summary: 3,
48
- },
49
- },
44
+ control: { min: 2, type: "number" },
50
45
  },
51
46
  gap: {
52
- table: {
53
- defaultValue: {
54
- summary: "l",
55
- },
56
- },
47
+ control: { type: "select" },
48
+ options: enumValues.options,
49
+ table: { defaultValue: { summary: "GridGaps.Large" } },
57
50
  },
58
- className: { table: { disable: true } },
59
- id: { table: { disable: true } },
51
+ id: { control: false },
60
52
  }}
61
53
  />
62
54
 
@@ -74,9 +66,17 @@ The `SimpleGrid` component is used to render UI elements in a uniform grid layou
74
66
  The NYPL standards for the items per row in a grid is `3` for desktop, `2` for tablet and `1` for mobile. By default, the `SimpleGrid` component uses these standards and the `columns` prop is optional. If the `columns` prop is used, the tablet breakpoint will be dropped and only the mobile breakpoint (1 item per row) will be triggered.
75
67
 
76
68
  <Canvas withToolbar>
77
- <Story name="SimpleGrid Props">
69
+ <Story
70
+ name="SimpleGrid with Controls"
71
+ args={{
72
+ className: undefined,
73
+ columns: undefined,
74
+ gap: "GridGaps.Large",
75
+ id: "simpleGrid-id",
76
+ }}
77
+ >
78
78
  {(args) => (
79
- <SimpleGrid {...args}>
79
+ <SimpleGrid {...args} gap={enumValues.getValue(args.gap)}>
80
80
  <Card
81
81
  imageSrc="https://placeimg.com/400/220/animals"
82
82
  imageAlt="Alt text"
@@ -148,7 +148,7 @@ The NYPL standards for the items per row in a grid is `3` for desktop, `2` for t
148
148
  </Story>
149
149
  </Canvas>
150
150
 
151
- <ArgsTable story="SimpleGrid Props" />
151
+ <ArgsTable story="SimpleGrid with Controls" />
152
152
 
153
153
  ## Other SimpleGrid Examples
154
154