@nypl/design-system-react-components 0.26.0 → 0.28.0

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 (306) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/components/Accordion/Accordion.d.ts +1 -1
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -5
  4. package/dist/components/Button/Button.d.ts +2 -10
  5. package/dist/components/ButtonGroup/ButtonGroup.d.ts +22 -0
  6. package/dist/components/Card/Card.d.ts +2 -2
  7. package/dist/components/Checkbox/Checkbox.d.ts +10 -8
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +1 -1
  9. package/dist/components/DatePicker/DatePicker.d.ts +1 -1
  10. package/dist/components/Form/Form.d.ts +2 -2
  11. package/dist/components/Grid/SimpleGrid.d.ts +6 -3
  12. package/dist/components/Heading/Heading.d.ts +2 -5
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +1 -5
  14. package/dist/components/Hero/Hero.d.ts +13 -9
  15. package/dist/components/Icons/Icon.d.ts +6 -5
  16. package/dist/components/Icons/IconSvgs.d.ts +21 -21
  17. package/dist/components/Image/Image.d.ts +8 -5
  18. package/dist/components/Link/Link.d.ts +1 -9
  19. package/dist/components/List/List.d.ts +7 -11
  20. package/dist/components/Logo/Logo.d.ts +2 -5
  21. package/dist/components/Logo/LogoSvgs.d.ts +39 -39
  22. package/dist/components/Modal/Modal.d.ts +28 -8
  23. package/dist/components/Notification/Notification.d.ts +1 -1
  24. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +2 -1
  25. package/dist/components/RadioGroup/RadioGroup.d.ts +1 -1
  26. package/dist/components/SearchBar/SearchBar.d.ts +3 -2
  27. package/dist/components/Select/Select.d.ts +2 -5
  28. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +4 -4
  29. package/dist/components/SkipNavigation/SkipNavigation.d.ts +17 -0
  30. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -3
  31. package/dist/components/StructuredContent/StructuredContent.d.ts +2 -2
  32. package/dist/components/Table/Table.d.ts +1 -1
  33. package/dist/components/Template/Template.d.ts +2 -0
  34. package/dist/components/Text/Text.d.ts +1 -1
  35. package/dist/components/TextInput/TextInput.d.ts +21 -9
  36. package/dist/components/Toggle/Toggle.d.ts +1 -5
  37. package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
  38. package/dist/design-system-react-components.cjs.development.js +977 -1213
  39. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  40. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  41. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  42. package/dist/design-system-react-components.esm.js +976 -1276
  43. package/dist/design-system-react-components.esm.js.map +1 -1
  44. package/dist/helpers/types.d.ts +1 -0
  45. package/dist/index.d.ts +27 -48
  46. package/dist/styles.css +1 -1
  47. package/dist/theme/components/buttonGroup.d.ts +11 -0
  48. package/dist/theme/components/card.d.ts +104 -8
  49. package/dist/theme/components/componentWrapper.d.ts +4 -3
  50. package/dist/theme/components/customTable.d.ts +11 -14
  51. package/dist/theme/components/fieldset.d.ts +4 -3
  52. package/dist/theme/components/helperErrorText.d.ts +4 -3
  53. package/dist/theme/components/hero.d.ts +1 -1
  54. package/dist/theme/components/horizontalRule.d.ts +4 -3
  55. package/dist/theme/components/icon.d.ts +47743 -1
  56. package/dist/theme/components/image.d.ts +563 -10
  57. package/dist/theme/components/label.d.ts +4 -3
  58. package/dist/theme/components/list.d.ts +6 -7
  59. package/dist/theme/components/logo.d.ts +474 -1
  60. package/dist/theme/components/notification.d.ts +20 -16
  61. package/dist/theme/components/progressIndicator.d.ts +6 -4
  62. package/dist/theme/components/select.d.ts +4 -10
  63. package/dist/theme/components/skeletonLoader.d.ts +14 -10
  64. package/dist/theme/components/skipNavigation.d.ts +22 -0
  65. package/dist/theme/components/slider.d.ts +7 -6
  66. package/dist/theme/components/structuredContent.d.ts +10 -9
  67. package/dist/theme/components/text.d.ts +7 -1
  68. package/dist/theme/components/toggle.d.ts +6 -4
  69. package/dist/theme/provider.d.ts +2 -4
  70. package/dist/utils/componentCategories.d.ts +1 -1
  71. package/dist/utils/interfaces.d.ts +5 -0
  72. package/dist/utils/utils.d.ts +2 -18
  73. package/package.json +15 -16
  74. package/src/__tests__/setup.ts +3 -3
  75. package/src/__tests__/utils/utils.test.ts +1 -23
  76. package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +22 -14
  77. package/src/components/Accordion/Accordion.stories.mdx +43 -44
  78. package/src/components/Accordion/Accordion.test.tsx +5 -13
  79. package/src/components/Accordion/Accordion.tsx +14 -18
  80. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +6 -6
  81. package/src/components/Autosuggest/Autosuggest.stories.mdx +1 -1
  82. package/src/components/Autosuggest/Autosuggest.stories.tsx +23 -25
  83. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +21 -37
  84. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +4 -17
  85. package/src/components/Breadcrumbs/Breadcrumbs.tsx +18 -21
  86. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +1 -100
  87. package/src/components/Button/Button.stories.mdx +89 -126
  88. package/src/components/Button/Button.test.tsx +16 -30
  89. package/src/components/Button/Button.tsx +14 -20
  90. package/src/components/ButtonGroup/ButtonGroup.stories.mdx +147 -0
  91. package/src/components/ButtonGroup/ButtonGroup.test.tsx +141 -0
  92. package/src/components/ButtonGroup/ButtonGroup.tsx +99 -0
  93. package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +117 -0
  94. package/src/components/Card/Card.stories.mdx +143 -177
  95. package/src/components/Card/Card.test.tsx +36 -97
  96. package/src/components/Card/Card.tsx +78 -74
  97. package/src/components/Card/__snapshots__/Card.test.tsx.snap +1 -1
  98. package/src/components/Chakra/Box.stories.mdx +2 -6
  99. package/src/components/Chakra/Center.stories.mdx +5 -23
  100. package/src/components/Chakra/Flex.stories.mdx +4 -6
  101. package/src/components/Chakra/Stack.stories.mdx +9 -10
  102. package/src/components/Checkbox/Checkbox.stories.mdx +1 -1
  103. package/src/components/Checkbox/Checkbox.test.tsx +2 -2
  104. package/src/components/Checkbox/Checkbox.tsx +20 -13
  105. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +9 -9
  106. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +6 -17
  107. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +1 -7
  108. package/src/components/CheckboxGroup/CheckboxGroup.tsx +33 -29
  109. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +24 -35
  110. package/src/components/ComponentWrapper/ComponentWrapper.tsx +3 -10
  111. package/src/components/DatePicker/DatePicker.stories.mdx +23 -37
  112. package/src/components/DatePicker/DatePicker.test.tsx +21 -19
  113. package/src/components/DatePicker/DatePicker.tsx +57 -49
  114. package/src/components/Form/Form.stories.mdx +46 -31
  115. package/src/components/Form/Form.test.tsx +1 -18
  116. package/src/components/Form/Form.tsx +7 -7
  117. package/src/components/Grid/SimpleGrid.stories.mdx +73 -49
  118. package/src/components/Grid/SimpleGrid.test.tsx +7 -9
  119. package/src/components/Grid/SimpleGrid.tsx +14 -11
  120. package/src/components/Heading/Heading.stories.mdx +27 -72
  121. package/src/components/Heading/Heading.test.tsx +18 -44
  122. package/src/components/Heading/Heading.tsx +7 -10
  123. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +1 -3
  124. package/src/components/HelperErrorText/HelperErrorText.tsx +1 -5
  125. package/src/components/Hero/Hero.stories.mdx +219 -216
  126. package/src/components/Hero/Hero.test.tsx +107 -223
  127. package/src/components/Hero/Hero.tsx +63 -61
  128. package/src/components/Icons/Icon.stories.mdx +172 -118
  129. package/src/components/Icons/Icon.test.tsx +8 -16
  130. package/src/components/Icons/Icon.tsx +75 -29
  131. package/src/components/Icons/IconSvgs.tsx +42 -42
  132. package/src/components/Image/Image.stories.mdx +45 -132
  133. package/src/components/Image/Image.test.tsx +16 -31
  134. package/src/components/Image/Image.tsx +28 -12
  135. package/src/components/Link/Link.stories.mdx +30 -94
  136. package/src/components/Link/Link.test.tsx +25 -75
  137. package/src/components/Link/Link.tsx +43 -56
  138. package/src/components/Link/__snapshots__/Link.test.tsx.snap +1 -2
  139. package/src/components/List/List.stories.mdx +20 -31
  140. package/src/components/List/List.test.tsx +24 -43
  141. package/src/components/List/List.tsx +25 -36
  142. package/src/components/Logo/Logo.stories.mdx +94 -50
  143. package/src/components/Logo/Logo.test.tsx +10 -19
  144. package/src/components/Logo/Logo.tsx +50 -17
  145. package/src/components/Logo/LogoSvgs.tsx +78 -78
  146. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +4 -4
  147. package/src/components/Modal/Modal.stories.mdx +245 -139
  148. package/src/components/Modal/Modal.test.tsx +147 -10
  149. package/src/components/Modal/Modal.tsx +140 -20
  150. package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +25 -0
  151. package/src/components/Notification/Notification.stories.mdx +10 -28
  152. package/src/components/Notification/Notification.test.tsx +9 -12
  153. package/src/components/Notification/Notification.tsx +34 -37
  154. package/src/components/Pagination/Pagination.stories.mdx +3 -4
  155. package/src/components/Pagination/Pagination.tsx +15 -10
  156. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +27 -53
  157. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +9 -10
  158. package/src/components/ProgressIndicator/ProgressIndicator.tsx +17 -21
  159. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +0 -10
  160. package/src/components/Radio/Radio.stories.mdx +1 -1
  161. package/src/components/Radio/Radio.tsx +9 -6
  162. package/src/components/RadioGroup/RadioGroup.stories.mdx +15 -16
  163. package/src/components/RadioGroup/RadioGroup.test.tsx +2 -8
  164. package/src/components/RadioGroup/RadioGroup.tsx +28 -24
  165. package/src/components/SearchBar/SearchBar.stories.mdx +1 -1
  166. package/src/components/SearchBar/SearchBar.test.tsx +1 -1
  167. package/src/components/SearchBar/SearchBar.tsx +14 -22
  168. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1 -13
  169. package/src/components/Select/Select.stories.mdx +10 -25
  170. package/src/components/Select/Select.test.tsx +6 -7
  171. package/src/components/Select/Select.tsx +28 -35
  172. package/src/components/Select/__snapshots__/Select.test.tsx.snap +24 -24
  173. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +17 -56
  174. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -21
  175. package/src/components/SkeletonLoader/SkeletonLoader.tsx +9 -8
  176. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +33 -33
  177. package/src/components/SkipNavigation/SkipNavigation.stories.mdx +90 -0
  178. package/src/components/SkipNavigation/SkipNavigation.test.tsx +63 -0
  179. package/src/components/SkipNavigation/SkipNavigation.tsx +51 -0
  180. package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +130 -0
  181. package/src/components/Slider/Slider.stories.mdx +19 -53
  182. package/src/components/Slider/Slider.test.tsx +2 -2
  183. package/src/components/Slider/Slider.tsx +10 -12
  184. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +2 -9
  185. package/src/components/StatusBadge/StatusBadge.stories.mdx +6 -21
  186. package/src/components/StatusBadge/StatusBadge.test.tsx +2 -3
  187. package/src/components/StatusBadge/StatusBadge.tsx +3 -10
  188. package/src/components/StructuredContent/StructuredContent.stories.mdx +30 -58
  189. package/src/components/StructuredContent/StructuredContent.test.tsx +42 -44
  190. package/src/components/StructuredContent/StructuredContent.tsx +9 -18
  191. package/src/components/StyleGuide/Bidirectionality.stories.mdx +9 -23
  192. package/src/components/StyleGuide/Buttons.stories.mdx +62 -62
  193. package/src/components/StyleGuide/ColorCard.tsx +2 -4
  194. package/src/components/StyleGuide/Colors.stories.mdx +7 -8
  195. package/src/components/StyleGuide/DesignTokens.stories.mdx +5 -7
  196. package/src/components/StyleGuide/Forms.stories.mdx +0 -1
  197. package/src/components/StyleGuide/Iconography.stories.mdx +59 -77
  198. package/src/components/StyleGuide/Spacing.stories.mdx +0 -1
  199. package/src/components/StyleGuide/Typography.stories.mdx +15 -18
  200. package/src/components/Table/Table.stories.mdx +85 -1
  201. package/src/components/Table/Table.test.tsx +57 -1
  202. package/src/components/Table/Table.tsx +7 -4
  203. package/src/components/Table/__snapshots__/Table.test.tsx.snap +121 -0
  204. package/src/components/Tabs/Tabs.stories.mdx +1 -1
  205. package/src/components/Tabs/Tabs.test.tsx +2 -2
  206. package/src/components/Tabs/Tabs.tsx +26 -27
  207. package/src/components/Template/Template.stories.mdx +49 -54
  208. package/src/components/Template/Template.tsx +9 -3
  209. package/src/components/Text/Text.stories.mdx +5 -11
  210. package/src/components/Text/Text.test.tsx +3 -6
  211. package/src/components/Text/Text.tsx +3 -5
  212. package/src/components/TextInput/TextInput.stories.mdx +10 -22
  213. package/src/components/TextInput/TextInput.test.tsx +32 -62
  214. package/src/components/TextInput/TextInput.tsx +61 -30
  215. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +1 -0
  216. package/src/components/Toggle/Toggle.stories.mdx +5 -16
  217. package/src/components/Toggle/Toggle.test.tsx +2 -3
  218. package/src/components/Toggle/Toggle.tsx +9 -10
  219. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +13 -29
  220. package/src/components/VideoPlayer/VideoPlayer.test.tsx +18 -23
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +13 -10
  222. package/src/docs/Chakra.stories.mdx +14 -11
  223. package/src/docs/Welcome.stories.mdx +23 -43
  224. package/src/helpers/types.ts +1 -0
  225. package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
  226. package/src/hooks/useNYPLTheme.stories.mdx +3 -6
  227. package/src/index.ts +52 -46
  228. package/src/styles.scss +0 -1
  229. package/src/theme/components/buttonGroup.ts +10 -0
  230. package/src/theme/components/card.ts +50 -15
  231. package/src/theme/components/componentWrapper.ts +5 -1
  232. package/src/theme/components/customTable.ts +8 -2
  233. package/src/theme/components/fieldset.ts +5 -1
  234. package/src/theme/components/helperErrorText.ts +5 -1
  235. package/src/theme/components/hero.ts +2 -2
  236. package/src/theme/components/horizontalRule.ts +5 -1
  237. package/src/theme/components/icon.ts +7 -1
  238. package/src/theme/components/image.ts +14 -3
  239. package/src/theme/components/label.ts +5 -1
  240. package/src/theme/components/list.ts +8 -2
  241. package/src/theme/components/logo.ts +5 -1
  242. package/src/theme/components/notification.ts +38 -14
  243. package/src/theme/components/progressIndicator.ts +10 -5
  244. package/src/theme/components/select.ts +5 -6
  245. package/src/theme/components/skeletonLoader.ts +8 -2
  246. package/src/theme/components/skipNavigation.ts +26 -0
  247. package/src/theme/components/slider.ts +13 -1
  248. package/src/theme/components/structuredContent.ts +11 -1
  249. package/src/theme/components/text.ts +12 -5
  250. package/src/theme/components/toggle.ts +9 -3
  251. package/src/theme/index.ts +4 -0
  252. package/src/theme/provider.tsx +1 -1
  253. package/src/utils/componentCategories.ts +13 -5
  254. package/src/utils/interfaces.ts +5 -0
  255. package/src/utils/utils.ts +2 -32
  256. package/dist/components/Accordion/AccordionTypes.d.ts +0 -5
  257. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +0 -8
  258. package/dist/components/Button/ButtonTypes.d.ts +0 -8
  259. package/dist/components/DatePicker/DatePickerTypes.d.ts +0 -5
  260. package/dist/components/Form/FormTypes.d.ts +0 -2
  261. package/dist/components/Grid/GridTypes.d.ts +0 -9
  262. package/dist/components/Heading/HeadingTypes.d.ts +0 -14
  263. package/dist/components/Hero/HeroTypes.d.ts +0 -12
  264. package/dist/components/Icons/IconTypes.d.ts +0 -77
  265. package/dist/components/Image/ImageTypes.d.ts +0 -22
  266. package/dist/components/Link/LinkTypes.d.ts +0 -8
  267. package/dist/components/List/ListTypes.d.ts +0 -5
  268. package/dist/components/Logo/LogoTypes.d.ts +0 -54
  269. package/dist/components/Notification/NotificationTypes.d.ts +0 -5
  270. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +0 -8
  271. package/dist/components/Select/SelectTypes.d.ts +0 -8
  272. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +0 -5
  273. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +0 -5
  274. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +0 -5
  275. package/dist/components/Text/TextTypes.d.ts +0 -6
  276. package/dist/components/TextInput/TextInputTypes.d.ts +0 -25
  277. package/dist/components/Toggle/ToggleTypes.d.ts +0 -4
  278. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +0 -9
  279. package/dist/helpers/enums.d.ts +0 -4
  280. package/dist/utils/siteSections.d.ts +0 -2
  281. package/src/components/Accordion/AccordionTypes.tsx +0 -5
  282. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +0 -8
  283. package/src/components/Button/ButtonTypes.tsx +0 -8
  284. package/src/components/DatePicker/DatePickerTypes.tsx +0 -5
  285. package/src/components/Form/FormTypes.tsx +0 -3
  286. package/src/components/Grid/GridTypes.tsx +0 -9
  287. package/src/components/Heading/HeadingTypes.tsx +0 -15
  288. package/src/components/Hero/HeroTypes.tsx +0 -20
  289. package/src/components/Icons/IconTypes.tsx +0 -83
  290. package/src/components/Image/ImageTypes.ts +0 -24
  291. package/src/components/Link/LinkTypes.tsx +0 -8
  292. package/src/components/List/ListTypes.tsx +0 -5
  293. package/src/components/Logo/LogoTypes.tsx +0 -56
  294. package/src/components/Modal/_Modal.scss +0 -18
  295. package/src/components/Notification/NotificationTypes.tsx +0 -5
  296. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +0 -8
  297. package/src/components/Select/SelectTypes.tsx +0 -10
  298. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
  299. package/src/components/StatusBadge/StatusBadgeTypes.tsx +0 -5
  300. package/src/components/StructuredContent/StructuredContentTypes.tsx +0 -5
  301. package/src/components/Text/TextTypes.tsx +0 -6
  302. package/src/components/TextInput/TextInputTypes.tsx +0 -48
  303. package/src/components/Toggle/ToggleTypes.tsx +0 -4
  304. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +0 -10
  305. package/src/helpers/enums.ts +0 -4
  306. package/src/utils/siteSections.ts +0 -10
@@ -2,10 +2,8 @@ import { chakra, useMultiStyleConfig } from "@chakra-ui/react";
2
2
  import React, { useState, forwardRef } from "react";
3
3
  import ReactDatePicker from "react-datepicker";
4
4
 
5
- import { DatePickerTypes } from "./DatePickerTypes";
6
5
  import Fieldset from "../Fieldset/Fieldset";
7
6
  import { FormRow, FormField } from "../Form/Form";
8
- import { FormGaps } from "../Form/FormTypes";
9
7
  import HelperErrorText, {
10
8
  HelperErrorTextType,
11
9
  } from "../HelperErrorText/HelperErrorText";
@@ -14,6 +12,19 @@ import TextInput, {
14
12
  TextInputRefType,
15
13
  } from "../TextInput/TextInput";
16
14
 
15
+ interface ReactDatePickerAttrs {
16
+ popperClassName: string;
17
+ popperPlacement: string;
18
+ popperModifiers: any[];
19
+ minDate: Date | null;
20
+ maxDate: Date | null;
21
+ dateFormat: string;
22
+ showMonthYearPicker?: boolean;
23
+ showYearPicker?: boolean;
24
+ yearItemNumber?: number;
25
+ }
26
+ export type DatePickerTypes = "full" | "month" | "year";
27
+
17
28
  // The object shape for the DatePicker's start and end date state values.
18
29
  export interface FullDateType {
19
30
  /** Date object that gets returned for the onChange
@@ -50,9 +61,6 @@ interface DatePickerWrapperProps extends DateRangeRowProps {
50
61
  // Interface used by the internal DS `TextInput` component as a custom
51
62
  // component for the ReactDatePicker plugin component. Internal use only.
52
63
  interface CustomTextInputProps extends Partial<InputProps> {
53
- /** The ReactDatePicker plugin has its own `id` prop so we use this to pass the
54
- * value from the parent `DatePicker` component. */
55
- dsId: string;
56
64
  /** The ReactDatePicker plugin manipulates the ref value so we declare our
57
65
  * own for some cases. */
58
66
  dsRef?: React.Ref<TextInputRefType>;
@@ -124,16 +132,15 @@ export interface DatePickerProps extends DatePickerWrapperProps {
124
132
  const CustomTextInput = forwardRef<TextInputRefType, CustomTextInputProps>(
125
133
  (
126
134
  {
127
- additionalStyles = {},
128
- attributes,
129
- dsId,
130
135
  dsRef,
131
136
  helperText,
137
+ id,
132
138
  invalidText,
133
139
  isDisabled,
134
140
  isInvalid,
135
141
  isRequired,
136
142
  labelText,
143
+ name,
137
144
  onChange,
138
145
  onClick,
139
146
  showLabel,
@@ -142,28 +149,30 @@ const CustomTextInput = forwardRef<TextInputRefType, CustomTextInputProps>(
142
149
  value,
143
150
  },
144
151
  ref: React.Ref<TextInputRefType>
145
- ) => (
146
- <TextInput
147
- id={dsId}
148
- showLabel={showLabel}
149
- onChange={onChange}
150
- value={value}
151
- labelText={labelText}
152
- isDisabled={isDisabled}
153
- isRequired={isRequired}
154
- showHelperInvalidText={showHelperInvalidText}
155
- showRequiredLabel={showRequiredLabel}
156
- isInvalid={isInvalid}
157
- helperText={helperText}
158
- invalidText={invalidText}
159
- // Use either the specific prop-based or the `forwardRef` value.
160
- // `react-datepicker` manipulates the `ref` value so when we
161
- // want a specific ref, use the `dsRef` prop.
162
- ref={dsRef || ref}
163
- attributes={{ ...attributes, onClick }}
164
- additionalStyles={additionalStyles}
165
- />
166
- )
152
+ ) => {
153
+ return (
154
+ <TextInput
155
+ helperText={helperText}
156
+ id={id}
157
+ invalidText={invalidText}
158
+ isDisabled={isDisabled}
159
+ isInvalid={isInvalid}
160
+ isRequired={isRequired}
161
+ labelText={labelText}
162
+ name={name}
163
+ onChange={onChange}
164
+ onClick={onClick}
165
+ showHelperInvalidText={showHelperInvalidText}
166
+ showLabel={showLabel}
167
+ showRequiredLabel={showRequiredLabel}
168
+ value={value}
169
+ // Use either the specific prop-based or the `forwardRef` value.
170
+ // `react-datepicker` manipulates the `ref` value so when we
171
+ // want a specific ref, use the `dsRef` prop.
172
+ ref={dsRef || ref}
173
+ />
174
+ );
175
+ }
167
176
  );
168
177
 
169
178
  /**
@@ -216,7 +225,7 @@ const DateRangeRow: React.FC<DateRangeRowProps> = ({
216
225
  children,
217
226
  }) =>
218
227
  isDateRange ? (
219
- <FormRow id={`${id}-form-row`} gap={FormGaps.ExtraSmall}>
228
+ <FormRow id={`${id}-form-row`} gap="grid.xs">
220
229
  {children}
221
230
  </FormRow>
222
231
  ) : (
@@ -231,7 +240,7 @@ export const DatePicker = chakra(
231
240
  const {
232
241
  className,
233
242
  dateFormat = "yyyy-MM-dd",
234
- dateType = DatePickerTypes.Full,
243
+ dateType = "full",
235
244
  helperText,
236
245
  helperTextFrom,
237
246
  helperTextTo,
@@ -268,14 +277,14 @@ export const DatePicker = chakra(
268
277
  // This updates the internal state for the start and end date values,
269
278
  // and also calls the `onChange` prop if it was passed to return the
270
279
  // date value to the parent.
271
- const onChangeDefault = (date, value) => {
280
+ const onChangeDefault = (date: Date, value: string) => {
272
281
  setFullDate({ ...fullDate, [value]: date });
273
282
  onChange && onChange({ ...fullDate, [value]: date });
274
283
  };
275
- // How many years to display in the DatePickerTypes.Year option.
284
+ // How many years to display in the "year" option.
276
285
  const yearsToDisplay = 12;
277
286
  // Both `ReactDatePicker` components share some props.
278
- let baseDatePickerAttrs = {
287
+ let baseDatePickerAttrs: ReactDatePickerAttrs = {
279
288
  popperClassName: "date-picker-calendar",
280
289
  popperPlacement: "bottom-start",
281
290
  popperModifiers: [
@@ -292,7 +301,6 @@ export const DatePicker = chakra(
292
301
  };
293
302
  // Both custom `TextInput` components share some props.
294
303
  let baseCustomTextInputAttrs = {
295
- dsId: `${id}-start`,
296
304
  isRequired,
297
305
  // In the date range type, don't display the "(Required)" text in
298
306
  // individual input labels. It'll display in the legend element.
@@ -305,7 +313,7 @@ export const DatePicker = chakra(
305
313
  helperText: isDateRange ? helperTextFrom : helperText,
306
314
  showHelperInvalidText,
307
315
  invalidText,
308
- additionalStyles: finalStyles.subLabels,
316
+ __css: finalStyles.subLabels,
309
317
  };
310
318
  // These are attribute objects for the `react-datepicker` package component.
311
319
  let startDatePickerAttrs = {};
@@ -316,10 +324,10 @@ export const DatePicker = chakra(
316
324
  let startLabelText = labelText;
317
325
 
318
326
  // Update the appropriate props for the selected date type to render.
319
- if (dateType === DatePickerTypes.Month) {
327
+ if (dateType === "month") {
320
328
  baseDatePickerAttrs["showMonthYearPicker"] = true;
321
329
  baseDatePickerAttrs.dateFormat = "MM-yyyy";
322
- } else if (dateType === DatePickerTypes.Year) {
330
+ } else if (dateType === "year") {
323
331
  baseDatePickerAttrs["showYearPicker"] = true;
324
332
  baseDatePickerAttrs["yearItemNumber"] = yearsToDisplay;
325
333
  baseDatePickerAttrs.dateFormat = "yyyy";
@@ -354,7 +362,6 @@ export const DatePicker = chakra(
354
362
  if (isDateRange) {
355
363
  const endCustomTextInputAttrs = {
356
364
  ...baseCustomTextInputAttrs,
357
- dsId: `${id}-end`,
358
365
  helperText: helperTextTo,
359
366
  };
360
367
  // These props are used to follow the pattern recommended by
@@ -375,33 +382,34 @@ export const DatePicker = chakra(
375
382
  startLabelText = "From";
376
383
  endDatePickerElement = (
377
384
  <ReactDatePicker
378
- selected={fullDate.endDate}
379
- onChange={(date) => onChangeDefault(date, "endDate")}
380
385
  customInput={
381
386
  <CustomTextInput
382
- labelText="To"
383
387
  dsRef={refTo}
384
- attributes={{ name: nameTo }}
388
+ labelText="To"
385
389
  {...endCustomTextInputAttrs}
386
390
  />
387
391
  }
392
+ id={`${id}-end`}
393
+ name={nameTo}
394
+ onChange={(date: Date) => onChangeDefault(date, "endDate")}
395
+ selected={fullDate.endDate}
388
396
  {...endDatePickerAttrs}
389
397
  />
390
398
  );
391
399
  }
392
-
393
400
  const startDatePickerElement = (
394
401
  <ReactDatePicker
395
- selected={fullDate.startDate}
396
- onChange={(date) => onChangeDefault(date, "startDate")}
397
402
  customInput={
398
403
  <CustomTextInput
399
- labelText={startLabelText}
400
404
  dsRef={ref}
401
- attributes={{ name: nameFrom }}
405
+ labelText={startLabelText}
402
406
  {...baseCustomTextInputAttrs}
403
407
  />
404
408
  }
409
+ id={`${id}-start`}
410
+ name={nameFrom}
411
+ onChange={(date: Date) => onChangeDefault(date, "startDate")}
412
+ selected={fullDate.startDate}
405
413
  {...startDatePickerAttrs}
406
414
  />
407
415
  );
@@ -1,4 +1,4 @@
1
- import { ButtonGroup, Flex, Spacer } from "@chakra-ui/react";
1
+ import { Flex, Spacer } from "@chakra-ui/react";
2
2
  import { action } from "@storybook/addon-actions";
3
3
  import {
4
4
  ArgsTable,
@@ -10,25 +10,20 @@ import {
10
10
  import { withDesign } from "storybook-addon-designs";
11
11
 
12
12
  import Button from "../Button/Button";
13
+ import ButtonGroup from "../ButtonGroup/ButtonGroup";
13
14
  import Checkbox from "../Checkbox/Checkbox";
14
15
  import CheckboxGroup from "../CheckboxGroup/CheckboxGroup";
15
16
  import DatePicker from "../DatePicker/DatePicker";
16
- import { DatePickerTypes } from "../DatePicker/DatePickerTypes";
17
17
  import Form, { FormRow, FormField } from "./Form";
18
- import { FormGaps } from "./FormTypes";
19
18
  import Heading from "../Heading/Heading";
20
- import { HeadingLevels } from "../Heading/HeadingTypes";
21
19
  import HorizontalRule from "../HorizontalRule/HorizontalRule";
22
20
  import Label from "../Label/Label";
23
21
  import Radio from "../Radio/Radio";
24
22
  import RadioGroup from "../RadioGroup/RadioGroup";
25
23
  import Select from "../Select/Select";
24
+ import SimpleGrid from "../Grid/SimpleGrid";
26
25
  import TextInput from "../TextInput/TextInput";
27
26
  import { getCategory } from "../../utils/componentCategories";
28
- import SimpleGrid from "../Grid/SimpleGrid";
29
- import { getStorybookEnumValues } from "../../utils/utils";
30
-
31
- export const enumValues = getStorybookEnumValues(FormGaps, "FormGaps");
32
27
 
33
28
  <Meta
34
29
  title={getCategory("Form")}
@@ -50,8 +45,16 @@ export const enumValues = getStorybookEnumValues(FormGaps, "FormGaps");
50
45
  },
51
46
  gap: {
52
47
  control: { type: "select" },
53
- table: { defaultValue: { summary: "FormGaps.Large" } },
54
- options: enumValues.options,
48
+ table: { defaultValue: { summary: "grid.l" } },
49
+ options: [
50
+ "grid.xxs",
51
+ "grid.xs",
52
+ "grid.s",
53
+ "grid.m",
54
+ "grid.l",
55
+ "grid.xl",
56
+ "grid.xxl",
57
+ ],
55
58
  },
56
59
  }}
57
60
  />
@@ -61,7 +64,7 @@ export const enumValues = getStorybookEnumValues(FormGaps, "FormGaps");
61
64
  | Component Version | DS Version |
62
65
  | ----------------- | ---------- |
63
66
  | Added | `0.23.2` |
64
- | Latest | `0.26.0` |
67
+ | Latest | `0.28.0` |
65
68
 
66
69
  ## Table of Contents
67
70
 
@@ -91,10 +94,10 @@ fields as needed.
91
94
  </Form>
92
95
  ```
93
96
 
94
- `FormField` should be used as a parent for all input components from the
97
+ `FormField` should be used as a parent for all input components from the
95
98
  Reservoir Design System (DS) (`Button`, `Select`, `TextInput`, etc.).
96
99
 
97
- `FormRow` should be used as a parent of multiple `FormField` components when
100
+ `FormRow` should be used as a parent of multiple `FormField` components when
98
101
  you need to render multiple input components in a horizontal row.
99
102
 
100
103
  ## Component Props
@@ -107,11 +110,11 @@ you need to render multiple input components in a horizontal row.
107
110
  className: undefined,
108
111
  id: "form-id",
109
112
  method: "get",
110
- gap: "FormGaps.Large",
113
+ gap: "grid.l",
111
114
  }}
112
115
  >
113
116
  {(args) => (
114
- <Form {...args} gap={enumValues.getValue(args.gap)} id="form-id">
117
+ <Form {...args} id="form-id">
115
118
  <FormRow>
116
119
  <FormField>
117
120
  <TextInput
@@ -131,7 +134,7 @@ you need to render multiple input components in a horizontal row.
131
134
  </FormField>
132
135
  <FormField>
133
136
  <DatePicker
134
- dateType={DatePickerTypes.Full}
137
+ dateType="full"
135
138
  dateFormat="yyyy-MM-dd"
136
139
  helperTextFrom="From this date."
137
140
  helperTextTo="To this date."
@@ -293,17 +296,17 @@ Resources:
293
296
 
294
297
  ## Spacing Variants
295
298
 
296
- export const formRow = (nameString, size) => {
297
- const labelText = `Size: ${nameString} (${size})`;
299
+ export const formRow = (gapValue) => {
300
+ const labelText = `Size: ${gapValue}`;
298
301
  return (
299
- <li key={size}>
300
- <Heading level={HeadingLevels.Three}>{labelText}</Heading>
301
- <Form gap={size} id={`form-spacing-${size}`}>
302
+ <li key={gapValue}>
303
+ <Heading level="three">{labelText}</Heading>
304
+ <Form gap={gapValue} id={`form-spacing-${gapValue}`}>
302
305
  <FormRow>
303
306
  <FormField>
304
307
  <Select
305
308
  helperText="The select field helper text."
306
- id={`select-spacing-${size}-1`}
309
+ id={`select-spacing-${gapValue}-1`}
307
310
  labelText="Select Field"
308
311
  showLabel={true}
309
312
  >
@@ -316,7 +319,7 @@ export const formRow = (nameString, size) => {
316
319
  <FormField>
317
320
  <Select
318
321
  helperText="The select field helper text."
319
- id={`select-spacing-${size}-2`}
322
+ id={`select-spacing-${gapValue}-2`}
320
323
  labelText="Select Field"
321
324
  showLabel={true}
322
325
  >
@@ -329,7 +332,7 @@ export const formRow = (nameString, size) => {
329
332
  <FormField>
330
333
  <Select
331
334
  helperText="The select field helper text."
332
- id={`select-spacing-${size}-3`}
335
+ id={`select-spacing-${gapValue}-3`}
333
336
  labelText="Select Field"
334
337
  showLabel={true}
335
338
  >
@@ -346,18 +349,30 @@ export const formRow = (nameString, size) => {
346
349
  );
347
350
  };
348
351
  export const sizes = [];
349
- for (const formGap in FormGaps) {
350
- sizes.push(formRow(`FormGaps.${formGap}`, FormGaps[formGap]));
352
+ export const gapValues = [
353
+ "grid.xxs",
354
+ "grid.xs",
355
+ "grid.s",
356
+ "grid.m",
357
+ "grid.l",
358
+ "grid.xl",
359
+ "grid.xxl",
360
+ ];
361
+ for (const gap in gapValues) {
362
+ sizes.push(formRow(gapValues[gap]));
351
363
  }
352
364
  export const getForms = (list) => <ul style={{ listStyle: "none" }}>{list}</ul>;
353
365
 
354
366
  By default, the `Form` component will handle the NYPL spacing around form input
355
- elements. The default spacing value is `large`, which corresponds to the CSS
356
- variable `--nypl-space-l` (2rem / 32px).
367
+ elements. The default spacing value is large `grid.l`, which corresponds to the
368
+ CSS variable `--nypl-space-l` (2rem / 32px).
357
369
 
358
- **IMPORTANT:** The default spacing should not be overwritten without a very good reason.
370
+ **IMPORTANT:** The default spacing should not be overwritten without a very
371
+ good reason.
359
372
 
360
- Below are the spacing variants available with the `FormGaps` enum.
373
+ Below are examples of the spacing values available to use in the `gap` prop of
374
+ the `Form` component: `"grid.xxs"`, `"grid.xs"`, `"grid.s"`, `"grid.m"`,
375
+ `"grid.l"`, `"grid.xl"`, `"grid.xxl"`.
361
376
 
362
377
  <Canvas>
363
378
  <Story name="Spacing Variants">{getForms(sizes)}</Story>
@@ -366,7 +381,7 @@ Below are the spacing variants available with the `FormGaps` enum.
366
381
  ## Example Code
367
382
 
368
383
  ```jsx
369
- <Form action="/end/point" method="get" gap={FormGaps.Large} id="example-form">
384
+ <Form action="/end/point" method="get" gap="grid.l" id="example-form">
370
385
  <FormField>
371
386
  <TextInput
372
387
  labelText="Username"
@@ -4,7 +4,6 @@ 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 { FormGaps } from "./FormTypes";
8
7
  import TextInput from "../TextInput/TextInput";
9
8
 
10
9
  describe("Form Accessibility", () => {
@@ -117,7 +116,7 @@ describe("Form", () => {
117
116
  );
118
117
  const form = screen.getByRole("form");
119
118
  const formRow = form.firstChild;
120
- const formField = formRow.firstChild;
119
+ const formField = formRow?.firstChild;
121
120
  const textInput = screen.getByRole("textbox");
122
121
  expect(form).toBeInTheDocument();
123
122
  expect(formRow).toBeInTheDocument();
@@ -232,20 +231,4 @@ describe("Form", () => {
232
231
  "NYPL Reservoir Form: This component's required `id` prop was not passed."
233
232
  );
234
233
  });
235
-
236
- // TO DO: There's somethign weird about checking for the "grid-gap" style.
237
- // Other styles can be validated, but "grid-gap" is being ellusive.
238
- // it("Renders a <form> element with spacing variant applied", () => {
239
- // render(
240
- // <Form gap={FormGaps.ExtraSmall}>
241
- // <FormRow />
242
- // </Form>
243
- // );
244
- // const form = screen.getByRole("form");
245
- // const formRow = form.firstChild;
246
- // expect(form).toBeInTheDocument();
247
- // expect(formRow).toHaveStyle({
248
- // "grid-gap": "var(--nypl-space-xs)",
249
- // });
250
- // });
251
234
  });
@@ -1,8 +1,7 @@
1
1
  import { chakra } from "@chakra-ui/react";
2
2
  import * as React from "react";
3
3
 
4
- import { FormGaps } from "./FormTypes";
5
- import SimpleGrid from "../Grid/SimpleGrid";
4
+ import SimpleGrid, { GridGaps } from "../Grid/SimpleGrid";
6
5
 
7
6
  interface FormBaseProps {
8
7
  /** className to be applied to FormRow, FormField, and Form */
@@ -10,7 +9,7 @@ interface FormBaseProps {
10
9
  /** Optional spacing size; if omitted, the default `large` (2rem / 32px)
11
10
  * spacing will be used; ```IMPORTANT: for general form layout, this prop
12
11
  * should not be used``` */
13
- gap?: FormGaps;
12
+ gap?: GridGaps;
14
13
  /** ID that other components can cross reference (internal use) */
15
14
  id: string;
16
15
  }
@@ -32,7 +31,7 @@ export const FormRow = chakra(
32
31
  const { children, className, gap, id, ...rest } = props;
33
32
  const count = React.Children.count(children);
34
33
  const alteredChildren = React.Children.map(
35
- children,
34
+ children as JSX.Element,
36
35
  (child: React.ReactElement, i) => {
37
36
  if (!child) return null;
38
37
  if (child.type === FormField || child.props.mdxType === "FormField") {
@@ -77,7 +76,7 @@ export const Form = chakra(
77
76
  action,
78
77
  children,
79
78
  className,
80
- gap = FormGaps.Large,
79
+ gap = "grid.l",
81
80
  id,
82
81
  method,
83
82
  onSubmit,
@@ -89,7 +88,8 @@ export const Form = chakra(
89
88
  "NYPL Reservoir Form: This component's required `id` prop was not passed."
90
89
  );
91
90
  }
92
- let attributes = {};
91
+
92
+ const attributes: Partial<FormProps> = {};
93
93
  action && (attributes["action"] = action);
94
94
 
95
95
  method &&
@@ -97,7 +97,7 @@ export const Form = chakra(
97
97
  (attributes["method"] = method);
98
98
 
99
99
  const alteredChildren = React.Children.map(
100
- children,
100
+ children as JSX.Element,
101
101
  (child: React.ReactElement, i) => {
102
102
  return React.cloneElement(child, { gap, id: `${id}-child${i}` });
103
103
  }