@nypl/design-system-react-components 0.25.1 → 0.25.5

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 (307) hide show
  1. package/CHANGELOG.md +118 -1
  2. package/README.md +98 -50
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Button/Button.d.ts +13 -8
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +36 -52
  7. package/dist/components/Card/CardTypes.d.ts +0 -15
  8. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  9. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -2
  10. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -34
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/Heading/Heading.d.ts +4 -4
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  16. package/dist/components/Icons/Icon.d.ts +8 -0
  17. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  18. package/dist/components/Icons/IconTypes.d.ts +11 -0
  19. package/dist/components/Image/Image.d.ts +19 -9
  20. package/dist/components/Image/ImageTypes.d.ts +20 -0
  21. package/dist/components/Link/Link.d.ts +4 -0
  22. package/dist/components/List/List.d.ts +19 -14
  23. package/dist/components/Notification/Notification.d.ts +37 -16
  24. package/dist/components/Pagination/Pagination.d.ts +16 -13
  25. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  27. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  28. package/dist/components/Radio/Radio.d.ts +2 -0
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  31. package/dist/components/Select/Select.d.ts +2 -0
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  33. package/dist/components/Slider/Slider.d.ts +57 -0
  34. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  35. package/dist/components/Tabs/Tabs.d.ts +1 -1
  36. package/dist/components/TextInput/TextInput.d.ts +12 -0
  37. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  38. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  39. package/dist/design-system-react-components.cjs.development.js +6131 -3715
  40. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  41. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  43. package/dist/design-system-react-components.esm.js +6124 -3699
  44. package/dist/design-system-react-components.esm.js.map +1 -1
  45. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  46. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  47. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  48. package/dist/hooks/useWindowSize.d.ts +10 -0
  49. package/dist/index.d.ts +13 -8
  50. package/dist/resources.scss +180 -170
  51. package/dist/styles.css +1 -1
  52. package/dist/theme/components/button.d.ts +22 -8
  53. package/dist/theme/components/card.d.ts +168 -0
  54. package/dist/theme/components/checkbox.d.ts +5 -1
  55. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  56. package/dist/theme/components/componentWrapper.d.ts +11 -0
  57. package/dist/theme/components/datePicker.d.ts +16 -0
  58. package/dist/theme/components/fieldset.d.ts +27 -0
  59. package/dist/theme/components/global.d.ts +23 -13
  60. package/dist/theme/components/globalMixins.d.ts +9 -1
  61. package/dist/theme/components/heading.d.ts +5 -0
  62. package/dist/theme/components/helperErrorText.d.ts +10 -0
  63. package/dist/theme/components/hero.d.ts +1 -0
  64. package/dist/theme/components/horizontalRule.d.ts +14 -0
  65. package/dist/theme/components/image.d.ts +31 -0
  66. package/dist/theme/components/label.d.ts +5 -3
  67. package/dist/theme/components/link.d.ts +4 -0
  68. package/dist/theme/components/list.d.ts +89 -0
  69. package/dist/theme/components/notification.d.ts +75 -0
  70. package/dist/theme/components/pagination.d.ts +19 -0
  71. package/dist/theme/components/progressIndicator.d.ts +50 -0
  72. package/dist/theme/components/radioGroup.d.ts +12 -0
  73. package/dist/theme/components/select.d.ts +11 -2
  74. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  75. package/dist/theme/components/slider.d.ts +51 -0
  76. package/dist/theme/components/tabs.d.ts +54 -3
  77. package/dist/theme/components/textInput.d.ts +8 -1
  78. package/dist/theme/components/videoPlayer.d.ts +40 -0
  79. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  80. package/dist/theme/foundations/global.d.ts +6 -1
  81. package/dist/theme/foundations/radii.d.ts +5 -0
  82. package/dist/theme/foundations/spacing.d.ts +16 -16
  83. package/package.json +72 -83
  84. package/src/__tests__/setup.ts +2 -2
  85. package/src/components/Accordion/Accordion.stories.mdx +39 -44
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  87. package/src/components/Autosuggest/Autosuggest.stories.tsx +2 -1
  88. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  89. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +14 -10
  90. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +23 -0
  91. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  92. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +199 -1
  93. package/src/components/Button/Button.stories.mdx +15 -10
  94. package/src/components/Button/Button.test.tsx +21 -7
  95. package/src/components/Button/Button.tsx +22 -34
  96. package/src/components/Button/ButtonTypes.tsx +1 -0
  97. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  98. package/src/components/Card/Card.stories.mdx +296 -259
  99. package/src/components/Card/Card.test.tsx +156 -84
  100. package/src/components/Card/Card.tsx +195 -145
  101. package/src/components/Card/CardTypes.tsx +0 -17
  102. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  103. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  104. package/src/components/CardEdition/_CardEdition.scss +22 -23
  105. package/src/components/Chakra/Box.stories.mdx +15 -16
  106. package/src/components/Chakra/Center.stories.mdx +31 -16
  107. package/src/components/Chakra/Grid.stories.mdx +28 -15
  108. package/src/components/Chakra/Stack.stories.mdx +35 -18
  109. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  110. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  111. package/src/components/Checkbox/Checkbox.tsx +39 -33
  112. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  113. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  114. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +29 -2
  115. package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -18
  116. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +47 -81
  117. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  118. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  119. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  120. package/src/components/DatePicker/DatePicker.tsx +159 -128
  121. package/src/components/DatePicker/_DatePicker.scss +33 -67
  122. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  123. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  124. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  125. package/src/components/Fieldset/Fieldset.tsx +52 -0
  126. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  127. package/src/components/Form/Form.stories.mdx +24 -6
  128. package/src/components/Form/Form.test.tsx +1 -1
  129. package/src/components/Form/Form.tsx +1 -0
  130. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  131. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  132. package/src/components/Heading/Heading.stories.mdx +3 -4
  133. package/src/components/Heading/Heading.tsx +5 -5
  134. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  135. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  136. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  137. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  138. package/src/components/Hero/Hero.stories.mdx +12 -2
  139. package/src/components/Hero/Hero.tsx +1 -1
  140. package/src/components/Hero/HeroTypes.tsx +1 -0
  141. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  142. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  143. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  144. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  145. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  146. package/src/components/Icons/Icon.stories.mdx +12 -4
  147. package/src/components/Icons/Icon.test.tsx +18 -0
  148. package/src/components/Icons/Icon.tsx +16 -1
  149. package/src/components/Icons/IconSvgs.tsx +22 -0
  150. package/src/components/Icons/IconTypes.tsx +11 -0
  151. package/src/components/Image/Image.stories.mdx +220 -0
  152. package/src/components/Image/Image.test.tsx +131 -29
  153. package/src/components/Image/Image.tsx +84 -56
  154. package/src/components/Image/ImageTypes.ts +22 -0
  155. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  156. package/src/components/Input/Input.stories.tsx +23 -67
  157. package/src/components/Input/Input.test.tsx +4 -4
  158. package/src/components/Input/_Input.scss +23 -14
  159. package/src/components/Link/Link.tsx +4 -1
  160. package/src/components/List/List.stories.mdx +124 -49
  161. package/src/components/List/List.test.tsx +142 -63
  162. package/src/components/List/List.tsx +89 -93
  163. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  164. package/src/components/Modal/Modal.stories.mdx +3 -3
  165. package/src/components/Modal/_Modal.scss +2 -2
  166. package/src/components/Notification/Notification.stories.mdx +109 -112
  167. package/src/components/Notification/Notification.test.tsx +99 -110
  168. package/src/components/Notification/Notification.tsx +156 -159
  169. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  170. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  171. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  172. package/src/components/Pagination/Pagination.test.tsx +276 -146
  173. package/src/components/Pagination/Pagination.tsx +174 -154
  174. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  175. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  176. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  177. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  178. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  179. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  180. package/src/components/Radio/Radio.test.tsx +20 -4
  181. package/src/components/Radio/Radio.tsx +6 -3
  182. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  183. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  184. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  185. package/src/components/RadioGroup/RadioGroup.tsx +19 -19
  186. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  187. package/src/components/SearchBar/SearchBar.Test.tsx +20 -1
  188. package/src/components/SearchBar/SearchBar.stories.mdx +113 -8
  189. package/src/components/SearchBar/SearchBar.tsx +20 -10
  190. package/src/components/Select/Select.test.tsx +12 -0
  191. package/src/components/Select/Select.tsx +5 -2
  192. package/src/components/Select/SelectTypes.tsx +1 -0
  193. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  194. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  195. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  196. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  197. package/src/components/Slider/Slider.stories.mdx +529 -0
  198. package/src/components/Slider/Slider.test.tsx +653 -0
  199. package/src/components/Slider/Slider.tsx +303 -0
  200. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  201. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  202. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  203. package/src/components/StyleGuide/Buttons.stories.mdx +89 -73
  204. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  205. package/src/components/StyleGuide/Colors.stories.mdx +171 -311
  206. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  207. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  208. package/src/components/StyleGuide/Iconography.stories.mdx +85 -91
  209. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  210. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  211. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  212. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  213. package/src/components/Tabs/Tabs.tsx +87 -64
  214. package/src/components/Template/Template.stories.mdx +25 -27
  215. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  216. package/src/components/TextInput/TextInput.test.tsx +22 -2
  217. package/src/components/TextInput/TextInput.tsx +28 -8
  218. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  219. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  220. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  222. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  223. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  224. package/src/docs/Chakra.stories.mdx +244 -63
  225. package/src/docs/Intro.stories.mdx +5 -2
  226. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  227. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  228. package/src/hooks/useCarouselStyles.ts +34 -0
  229. package/src/hooks/useNYPLTheme.ts +67 -0
  230. package/src/hooks/useWindowSize.ts +40 -0
  231. package/src/index.ts +22 -19
  232. package/src/resources.scss +5 -5
  233. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  234. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  235. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  236. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  237. package/src/styles/base/_place-holder.scss +14 -3
  238. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  239. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  240. package/src/styles/space/_space-stack.scss +116 -0
  241. package/src/styles.scss +13 -60
  242. package/src/theme/components/button.ts +21 -15
  243. package/src/theme/components/card.ts +174 -0
  244. package/src/theme/components/checkbox.ts +8 -3
  245. package/src/theme/components/checkboxGroup.ts +8 -0
  246. package/src/theme/components/componentWrapper.ts +10 -0
  247. package/src/theme/components/datePicker.ts +17 -0
  248. package/src/theme/components/fieldset.ts +18 -0
  249. package/src/theme/components/global.ts +26 -15
  250. package/src/theme/components/globalMixins.ts +9 -1
  251. package/src/theme/components/heading.ts +10 -5
  252. package/src/theme/components/helperErrorText.ts +9 -0
  253. package/src/theme/components/hero.ts +4 -3
  254. package/src/theme/components/horizontalRule.ts +13 -0
  255. package/src/theme/components/icon.ts +9 -9
  256. package/src/theme/components/image.ts +116 -0
  257. package/src/theme/components/label.ts +3 -10
  258. package/src/theme/components/link.ts +5 -1
  259. package/src/theme/components/list.ts +73 -0
  260. package/src/theme/components/notification.ts +93 -0
  261. package/src/theme/components/pagination.ts +20 -0
  262. package/src/theme/components/progressIndicator.ts +62 -0
  263. package/src/theme/components/radio.ts +2 -2
  264. package/src/theme/components/radioGroup.ts +8 -0
  265. package/src/theme/components/select.ts +6 -3
  266. package/src/theme/components/skeletonLoader.ts +107 -0
  267. package/src/theme/components/slider.ts +79 -0
  268. package/src/theme/components/statusBadge.ts +1 -2
  269. package/src/theme/components/tabs.ts +49 -19
  270. package/src/theme/components/template.ts +8 -8
  271. package/src/theme/components/textInput.ts +5 -4
  272. package/src/theme/components/videoPlayer.ts +49 -0
  273. package/src/theme/foundations/breakpoints.ts +8 -8
  274. package/src/theme/foundations/global.ts +6 -1
  275. package/src/theme/foundations/radii.ts +6 -0
  276. package/src/theme/foundations/spacing.ts +24 -24
  277. package/src/theme/index.ts +41 -10
  278. package/src/utils/componentCategories.ts +4 -3
  279. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  280. package/dist/components/Image/Image.stories.d.ts +0 -18
  281. package/dist/components/List/List.stories.d.ts +0 -7
  282. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  283. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  284. package/src/components/Button/_Button.scss +0 -32
  285. package/src/components/Card/_Card.scss +0 -308
  286. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  287. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  288. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  289. package/src/components/Image/Image.stories.tsx +0 -54
  290. package/src/components/Image/_Image.scss +0 -38
  291. package/src/components/List/List.stories.tsx +0 -139
  292. package/src/components/List/_List.scss +0 -76
  293. package/src/components/Notification/_Notification.scss +0 -110
  294. package/src/components/Pagination/_Pagination.scss +0 -40
  295. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  296. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  297. package/src/styles/01-colors/_colors-brand.scss +0 -62
  298. package/src/styles/01-colors/_colors-utility.scss +0 -67
  299. package/src/styles/02-typography/_type-scale.css +0 -11
  300. package/src/styles/02-typography/_type-weight.css +0 -7
  301. package/src/styles/02-typography/_typefaces.css +0 -4
  302. package/src/styles/03-space/_space-stack.scss +0 -116
  303. package/src/styles/03-space/_space.css +0 -30
  304. package/src/styles/base/_card-grid.scss +0 -78
  305. package/src/styles/base/_typography.scss +0 -11
  306. package/src/theme/components/customCheckboxGroup.ts +0 -12
  307. package/src/theme/components/customRadioGroup.ts +0 -12
@@ -2,6 +2,7 @@ import * as React from "react";
2
2
  import { render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
4
  import userEvent from "@testing-library/user-event";
5
+ import renderer from "react-test-renderer";
5
6
 
6
7
  import DatePicker from "./DatePicker";
7
8
  import { DatePickerTypes } from "./DatePickerTypes";
@@ -36,7 +37,7 @@ describe("DatePicker Accessibility", () => {
36
37
  const { container } = render(
37
38
  <DatePicker
38
39
  labelText="Select the date range you want to visit NYPL"
39
- dateRange={true}
40
+ isDateRange
40
41
  />
41
42
  );
42
43
  expect(await axe(container)).toHaveNoViolations();
@@ -195,7 +196,7 @@ describe("DatePicker", () => {
195
196
  labelText="Select the date you want to visit NYPL"
196
197
  helperText="Note that the Library may be closed on Sundays."
197
198
  invalidText="Please select a valid date."
198
- isInvalid={true}
199
+ isInvalid
199
200
  />
200
201
  );
201
202
  // When errored, we expect only the error text to appear.
@@ -207,12 +208,45 @@ describe("DatePicker", () => {
207
208
  ).toBeInTheDocument();
208
209
  });
209
210
 
211
+ it("should not render the helper text or invalid text when 'showHelperInvalidText' is false", () => {
212
+ const { rerender } = render(
213
+ <DatePicker
214
+ labelText="Select the date you want to visit NYPL"
215
+ helperText="Note that the Library may be closed on Sundays."
216
+ invalidText="Please select a valid date."
217
+ showHelperInvalidText={false}
218
+ />
219
+ );
220
+ expect(
221
+ screen.queryByText("Note that the Library may be closed on Sundays.")
222
+ ).not.toBeInTheDocument();
223
+ expect(
224
+ screen.queryByText("Please select a valid date.")
225
+ ).not.toBeInTheDocument();
226
+
227
+ rerender(
228
+ <DatePicker
229
+ labelText="Select the date you want to visit NYPL"
230
+ helperText="Note that the Library may be closed on Sundays."
231
+ invalidText="Please select a valid date."
232
+ showHelperInvalidText={false}
233
+ isInvalid
234
+ />
235
+ );
236
+ expect(
237
+ screen.queryByText("Note that the Library may be closed on Sundays.")
238
+ ).not.toBeInTheDocument();
239
+ expect(
240
+ screen.queryByText("Please select a valid date.")
241
+ ).not.toBeInTheDocument();
242
+ });
243
+
210
244
  it("should render a disabled input field", () => {
211
245
  render(
212
246
  <DatePicker
213
247
  labelText="Select the date you want to visit NYPL"
214
248
  helperText="Note that the Library may be closed on Sundays."
215
- isDisabled={true}
249
+ isDisabled
216
250
  />
217
251
  );
218
252
 
@@ -226,13 +260,45 @@ describe("DatePicker", () => {
226
260
  <DatePicker
227
261
  labelText="Select the date you want to visit NYPL"
228
262
  helperText="Note that the Library may be closed on Sundays."
229
- required={true}
263
+ isRequired
230
264
  />
231
265
  );
232
266
 
233
267
  expect(screen.getByText(/required/i)).toBeInTheDocument();
234
268
  });
235
269
 
270
+ it("should hide the Optional/Required text in the label with `showOptReqLabel`", () => {
271
+ const { rerender } = render(
272
+ <DatePicker labelText="Select the date you want to visit NYPL" />
273
+ );
274
+ expect(screen.getByText(/Optional/i)).toBeInTheDocument();
275
+
276
+ rerender(
277
+ <DatePicker
278
+ labelText="Select the date you want to visit NYPL"
279
+ showOptReqLabel={false}
280
+ />
281
+ );
282
+ expect(screen.queryByText(/Optional/i)).not.toBeInTheDocument();
283
+
284
+ rerender(
285
+ <DatePicker
286
+ labelText="Select the date you want to visit NYPL"
287
+ isRequired
288
+ />
289
+ );
290
+ expect(screen.getByText(/Required/i)).toBeInTheDocument();
291
+
292
+ rerender(
293
+ <DatePicker
294
+ labelText="Select the date you want to visit NYPL"
295
+ showOptReqLabel={false}
296
+ isRequired
297
+ />
298
+ );
299
+ expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
300
+ });
301
+
236
302
  it("should pass the value to the `onChange` function", () => {
237
303
  let dateObject: any = {};
238
304
  const onChange = (data) => {
@@ -242,8 +308,8 @@ describe("DatePicker", () => {
242
308
  <DatePicker
243
309
  labelText="Select the date you want to visit NYPL"
244
310
  helperText="Note that the Library may be closed on Sundays."
245
- required={true}
246
311
  onChange={onChange}
312
+ isRequired
247
313
  />
248
314
  );
249
315
 
@@ -299,17 +365,68 @@ describe("DatePicker", () => {
299
365
  );
300
366
  });
301
367
 
302
- it("should not render a required label if the 'showOptReqLabel' flag is false", () => {
303
- render(
304
- <DatePicker
305
- labelText="Select the date you want to visit NYPL"
306
- helperText="Note that the Library may be closed on Sundays."
307
- required={true}
308
- showOptReqLabel={false}
309
- />
310
- );
311
-
312
- expect(screen.queryByText(/required/i)).not.toBeInTheDocument();
368
+ // Note: Have to add an initial date so that the snapshot tests always
369
+ // pass. Otherwise, it'll use the _current_ date which changes
370
+ // based on the day it is tested and is not what we want.
371
+ it.skip("renders the UI snapshot correctly", () => {
372
+ const basic = renderer
373
+ .create(
374
+ <DatePicker
375
+ id="basic"
376
+ labelText="Select the full date you want to visit NYPL"
377
+ initialDate="1/2/1988"
378
+ />
379
+ )
380
+ .toJSON();
381
+ const withoutLabel = renderer
382
+ .create(
383
+ <DatePicker
384
+ id="no-label"
385
+ labelText="Select the date you want to visit NYPL"
386
+ initialDate="1/2/1988"
387
+ showLabel={false}
388
+ />
389
+ )
390
+ .toJSON();
391
+ const withCustomFormat = renderer
392
+ .create(
393
+ <DatePicker
394
+ id="custom-format"
395
+ labelText="Select the date you want to visit NYPL"
396
+ dateFormat="yyyy/dd/MM"
397
+ initialDate="1/2/1988"
398
+ />
399
+ )
400
+ .toJSON();
401
+ const invalid = renderer
402
+ .create(
403
+ <DatePicker
404
+ id="invalid"
405
+ labelText="Select the date you want to visit NYPL"
406
+ helperText="Note that the Library may be closed on Sundays."
407
+ invalidText="Please select a valid date."
408
+ initialDate="1/2/1988"
409
+ isInvalid
410
+ />
411
+ )
412
+ .toJSON();
413
+ const disabled = renderer
414
+ .create(
415
+ <DatePicker
416
+ id="disabled"
417
+ labelText="Select the date you want to visit NYPL"
418
+ helperText="Note that the Library may be closed on Sundays."
419
+ invalidText="Please select a valid date."
420
+ initialDate="1/2/1988"
421
+ isDisabled
422
+ />
423
+ )
424
+ .toJSON();
425
+ expect(basic).toMatchSnapshot();
426
+ expect(withoutLabel).toMatchSnapshot();
427
+ expect(withCustomFormat).toMatchSnapshot();
428
+ expect(invalid).toMatchSnapshot();
429
+ expect(disabled).toMatchSnapshot();
313
430
  });
314
431
  });
315
432
 
@@ -317,8 +434,8 @@ describe("DatePicker", () => {
317
434
  it("should render the date range with two input fields", () => {
318
435
  render(
319
436
  <DatePicker
320
- dateRange={true}
321
437
  labelText="Select the date range you want to visit NYPL"
438
+ isDateRange
322
439
  />
323
440
  );
324
441
  const [year, month, day] = getTodaysValues();
@@ -337,7 +454,7 @@ describe("DatePicker", () => {
337
454
  render(
338
455
  <DatePicker
339
456
  labelText="Select the full date you want to visit NYPL"
340
- dateRange={true}
457
+ isDateRange
341
458
  initialDate="1/2/1988"
342
459
  initialDateTo="3/4/1990"
343
460
  />
@@ -352,12 +469,12 @@ describe("DatePicker", () => {
352
469
  it("should render two input labels and three separate helper text", () => {
353
470
  render(
354
471
  <DatePicker
355
- dateRange={true}
356
472
  labelText="Select the date range you want to visit NYPL"
357
473
  helperText="Note that the Library may be closed on Sundays."
358
474
  helperTextFrom="Note for the 'from' field."
359
475
  helperTextTo="Note for the 'to' field."
360
476
  invalidText="Please select a valid date range."
477
+ isDateRange
361
478
  />
362
479
  );
363
480
  // There are two labels for each input.
@@ -375,95 +492,169 @@ describe("DatePicker", () => {
375
492
  expect(screen.getByText(/Note for the 'to' field./i)).toBeInTheDocument();
376
493
  });
377
494
 
378
- it("should render based on other props", () => {
495
+ it("should render different states based on respective props", () => {
379
496
  const { rerender } = render(
380
497
  <DatePicker
381
- dateRange={true}
382
498
  labelText="Select the date range you want to visit NYPL"
383
499
  helperText="Note that the Library may be closed on Sundays."
384
500
  helperTextTo="Note for the 'to' field."
385
501
  invalidText="Please select a valid date range."
386
- isInvalid={true}
502
+ isDateRange
503
+ isInvalid
387
504
  />
388
505
  );
389
506
 
507
+ // The invalid text displays under each input field.
390
508
  expect(
391
509
  screen.getAllByText("Please select a valid date range.")
392
510
  ).toHaveLength(2);
393
511
 
394
512
  rerender(
395
513
  <DatePicker
396
- dateRange={true}
397
514
  labelText="Select the date range you want to visit NYPL"
398
515
  helperText="Note that the Library may be closed on Sundays."
399
516
  helperTextTo="Note for the 'to' field."
400
517
  invalidText="Please select a valid date range."
401
- isDisabled={true}
518
+ isDisabled
519
+ isDateRange
402
520
  />
403
521
  );
404
-
522
+ // Both input fields are disabled.
405
523
  expect(screen.getByLabelText(/From/i)).toHaveAttribute("disabled");
406
524
  expect(screen.getByLabelText(/To/i)).toHaveAttribute("disabled");
407
525
 
408
526
  rerender(
409
527
  <DatePicker
410
- dateRange={true}
411
528
  labelText="Select the date range you want to visit NYPL"
412
529
  helperText="Note that the Library may be closed on Sundays."
413
530
  helperTextTo="Note for the 'to' field."
414
531
  invalidText="Please select a valid date range."
415
- required={true}
532
+ isRequired
533
+ isDateRange
416
534
  />
417
535
  );
536
+ // Both input fields are required.
537
+ // The "Required" text is only displayed once in the `legend`.
538
+ expect(screen.getAllByText(/required/i)).toHaveLength(1);
539
+ expect(screen.getByLabelText(/From/i)).toHaveAttribute("required");
540
+ expect(screen.getByLabelText(/To/i)).toHaveAttribute("required");
541
+ });
418
542
 
419
- expect(screen.getAllByText(/required/i)).toHaveLength(2);
543
+ // Note: Have to add initial dates so that the snapshot tests always
544
+ // pass. Otherwise, it'll use the _current_ date which changes
545
+ // based on the day it is tested and is not what we want.
546
+ it("renders the UI snapshot correctly", () => {
547
+ const basic = renderer
548
+ .create(
549
+ <DatePicker
550
+ id="basic"
551
+ labelText="Select the full date you want to visit NYPL"
552
+ initialDate="1/2/1988"
553
+ initialDateTo="2/2/1988"
554
+ isDateRange
555
+ />
556
+ )
557
+ .toJSON();
558
+ const withoutLabel = renderer
559
+ .create(
560
+ <DatePicker
561
+ id="no-label"
562
+ labelText="Select the date you want to visit NYPL"
563
+ showLabel={false}
564
+ initialDate="1/2/1988"
565
+ initialDateTo="2/2/1988"
566
+ isDateRange
567
+ />
568
+ )
569
+ .toJSON();
570
+ const withCustomFormat = renderer
571
+ .create(
572
+ <DatePicker
573
+ id="custom-format"
574
+ labelText="Select the date you want to visit NYPL"
575
+ dateFormat="yyyy/dd/MM"
576
+ initialDate="1/2/1988"
577
+ initialDateTo="2/2/1988"
578
+ isDateRange
579
+ />
580
+ )
581
+ .toJSON();
582
+ const invalid = renderer
583
+ .create(
584
+ <DatePicker
585
+ id="invalid"
586
+ labelText="Select the date you want to visit NYPL"
587
+ helperText="Note that the Library may be closed on Sundays."
588
+ invalidText="Please select a valid date."
589
+ initialDate="1/2/1988"
590
+ initialDateTo="2/2/1988"
591
+ isInvalid
592
+ isDateRange
593
+ />
594
+ )
595
+ .toJSON();
596
+ const disabled = renderer
597
+ .create(
598
+ <DatePicker
599
+ id="disabled"
600
+ labelText="Select the date you want to visit NYPL"
601
+ helperText="Note that the Library may be closed on Sundays."
602
+ invalidText="Please select a valid date."
603
+ initialDate="1/2/1988"
604
+ initialDateTo="2/2/1988"
605
+ isDisabled
606
+ isDateRange
607
+ />
608
+ )
609
+ .toJSON();
610
+ expect(basic).toMatchSnapshot();
611
+ expect(withoutLabel).toMatchSnapshot();
612
+ expect(withCustomFormat).toMatchSnapshot();
613
+ expect(invalid).toMatchSnapshot();
614
+ expect(disabled).toMatchSnapshot();
420
615
  });
421
616
 
422
- /* // REVISIT THIS TEST
423
617
  it("should select two new dates", () => {
424
618
  render(
425
619
  <DatePicker
426
- dateRange={true}
620
+ initialDate="3/2/1988"
621
+ initialDateTo="3/28/1988"
622
+ isDateRange
427
623
  labelText="Select the date range you want to visit NYPL"
428
624
  />
429
625
  );
430
626
  const fromInput = screen.getByLabelText(/From/i);
431
627
  const toInput = screen.getByLabelText(/To/i);
432
- const date = getTodaysDateDisplay();
433
628
 
434
- expect(screen.getAllByDisplayValue(date)).toHaveLength(2);
629
+ expect(fromInput).toHaveValue("1988-03-02");
630
+ expect(toInput).toHaveValue("1988-03-28");
631
+ // expect(screen.getAllByDisplayValue(date)).toHaveLength(2);
435
632
 
436
633
  // Let's select a new day.
437
634
  userEvent.click(fromInput);
438
635
  // The popup displays. Select a new day.
439
- const newDateFrom =
440
- todaysDate.getDate() > 28 ? 1 : todaysDate.getDate() + 1;
441
- const newDateTo =
442
- todaysDate.getDate() > 28 ? 18 : todaysDate.getDate() + 5;
443
- const newDateToSelect = str_pad(newDateFrom);
444
- userEvent.click(screen.getAllByText(newDateFrom)[0]);
636
+ const newDateFrom = 5;
637
+ const newDateTo = 25;
638
+ userEvent.click(screen.getByText(newDateFrom));
445
639
 
446
- // We selected a new day but kept everything else the same. So we just
447
- // need to remove the older day with the new "2" selected date.
448
- // Example: 2021-08-01 -> 2 is selected -> 2021-08-02
449
- const newFromValue = `${date.slice(0, -2)}${newDateToSelect}`;
450
- expect(screen.getByDisplayValue(newFromValue)).toBeInTheDocument();
640
+ // We selected a new day but kept everything else the same.
641
+ // Example: 2021-03-02 -> 5 is selected -> 2021-03-05
642
+ expect(screen.getByDisplayValue("1988-03-05")).toBeInTheDocument();
451
643
  // The "To" input should only have the older value now.
452
- expect(screen.getAllByDisplayValue(date)).toHaveLength(1);
644
+ // expect(screen.getAllByDisplayValue(date)).toHaveLength(1);
453
645
 
454
646
  // Now select the "To" date.
455
647
  userEvent.click(toInput);
456
648
  // The popup displays.
457
649
  userEvent.click(screen.getByText(newDateTo));
458
650
 
459
- const newToValue = `${date.slice(0, -2)}${newDateTo}`;
460
- expect(screen.getByDisplayValue(newToValue)).toBeInTheDocument();
461
- // The original date value is no longer in display.
462
- expect(screen.queryAllByDisplayValue(date)).toHaveLength(0);
651
+ expect(screen.getByDisplayValue("1988-03-25")).toBeInTheDocument();
652
+ // The original date values are no longer in display.
653
+ expect(screen.queryByDisplayValue("1988-03-02")).not.toBeInTheDocument();
654
+ expect(screen.queryByDisplayValue("1988-03-28")).not.toBeInTheDocument();
463
655
  // The "From" date value wasn't affected by this!
464
- expect(screen.getByDisplayValue(newFromValue)).toBeInTheDocument();
656
+ expect(screen.getByDisplayValue("1988-03-05")).toBeInTheDocument();
465
657
  });
466
- */
467
658
  });
468
659
 
469
660
  describe("Popup Calendar", () => {
@@ -496,11 +687,16 @@ describe("DatePicker", () => {
496
687
  });
497
688
 
498
689
  it("should select a new date from the calendar", () => {
499
- render(<DatePicker labelText="Select the date you want to visit NYPL" />);
690
+ render(
691
+ <DatePicker
692
+ labelText="Select the date you want to visit NYPL"
693
+ initialDate="08/01/2021"
694
+ />
695
+ );
500
696
  const input = screen.getByLabelText(
501
697
  /Select the date you want to visit NYPL/i
502
698
  );
503
- const date = getTodaysDateDisplay();
699
+ const date = "2021-08-01";
504
700
  const midMonthDay = "15";
505
701
 
506
702
  expect(screen.getByDisplayValue(date)).toBeInTheDocument();
@@ -518,19 +714,18 @@ describe("DatePicker", () => {
518
714
 
519
715
  // Let's select a new month
520
716
  userEvent.click(input);
521
- // The popup displays.
717
+ // The popup displays. We are currently on 08/15/2021.
522
718
  expect(
523
- screen.getByText(monthArray[todaysDate.getMonth()], { exact: false })
719
+ screen.getByText(monthArray["7"], { exact: false })
524
720
  ).toBeInTheDocument();
525
721
  userEvent.click(screen.getByLabelText("Next Month"));
526
722
  userEvent.click(screen.getByLabelText("Next Month"));
527
723
 
528
724
  // We are two months ahead but still selecting the midmonth day.
529
725
  userEvent.click(screen.getByText(midMonthDay));
530
- // So only the month should change accordingly. The month value from JS'
531
- // Date object is 0-index so we have to add 3.
726
+ // So only the month should change accordingly.
532
727
  const newMonthValue = `${newDayValue.substr(0, 5)}${str_pad(
533
- todaysDate.getMonth() + 3
728
+ "10"
534
729
  )}${newDayValue.substr(7)}`;
535
730
  expect(screen.getByDisplayValue(newMonthValue)).toBeInTheDocument();
536
731
  });
@@ -565,33 +760,38 @@ describe("DatePicker", () => {
565
760
  render(
566
761
  <DatePicker
567
762
  dateType={DatePickerTypes.Month}
763
+ initialDate="4/1/1988"
568
764
  labelText="Select the month you want to visit NYPL"
569
765
  />
570
766
  );
571
767
  const input = screen.getByLabelText(
572
768
  /Select the month you want to visit NYPL/i
573
769
  );
574
- const date = getTodaysDateDisplay(DatePickerTypes.Month);
575
- let currentMonthSelected = monthArray[todaysDate.getMonth() + 1];
770
+ // In the "month" format.
771
+ const date = "04-1988";
772
+ // Let's select May as the new month.
773
+ let currentMonthSelected = monthArray[4];
576
774
  let currentMonthSelectedDisplay = currentMonthSelected.slice(0, 3);
577
775
 
776
+ // We start off with April being displayed as "4-1988".
578
777
  expect(screen.getByDisplayValue(date)).toBeInTheDocument();
579
778
  expect(
580
779
  screen.queryByText(currentMonthSelectedDisplay)
581
780
  ).not.toBeInTheDocument();
582
781
 
583
- // Let's select a new day.
782
+ // Let's select a new day by first clicking on the input to open
783
+ // the calendar popup.
584
784
  userEvent.click(input);
585
- // The popup displays.
586
785
 
786
+ // Now "May" appears as the next month in the calendar popup.
587
787
  expect(screen.getByText(currentMonthSelectedDisplay)).toBeInTheDocument();
588
788
 
589
- userEvent.click(screen.getByText("Jan"));
789
+ userEvent.click(screen.getByText(currentMonthSelectedDisplay));
590
790
 
591
791
  // We selected a new month but kept the year the same.
592
- // Example: 08-2021 -> "Jan" -> 01-2021
792
+ // Example: 04-2021 -> "May" -> 05-2021
593
793
  expect(
594
- screen.getByDisplayValue(`01-${date.substr(3)}`)
794
+ screen.getByDisplayValue(`05-${date.substr(3)}`)
595
795
  ).toBeInTheDocument();
596
796
  });
597
797