@nypl/design-system-react-components 0.25.13 → 0.27.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 (305) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +10 -10
  3. package/dist/components/Accordion/Accordion.d.ts +1 -1
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  5. package/dist/components/Button/Button.d.ts +2 -2
  6. package/dist/components/Card/Card.d.ts +11 -9
  7. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +5 -4
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
  10. package/dist/components/DatePicker/DatePicker.d.ts +5 -6
  11. package/dist/components/Fieldset/Fieldset.d.ts +5 -6
  12. package/dist/components/Form/Form.d.ts +6 -6
  13. package/dist/components/Grid/GridTypes.d.ts +7 -7
  14. package/dist/components/Grid/SimpleGrid.d.ts +1 -1
  15. package/dist/components/Heading/Heading.d.ts +1 -1
  16. package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
  17. package/dist/components/Hero/Hero.d.ts +2 -1
  18. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
  19. package/dist/components/Icons/Icon.d.ts +2 -1
  20. package/dist/components/Image/Image.d.ts +2 -2
  21. package/dist/components/Label/Label.d.ts +7 -4
  22. package/dist/components/Link/Link.d.ts +1 -1
  23. package/dist/components/List/List.d.ts +11 -11
  24. package/dist/components/List/ListTypes.d.ts +1 -1
  25. package/dist/components/Logo/Logo.d.ts +2 -1
  26. package/dist/components/Logo/LogoSvgs.d.ts +2 -0
  27. package/dist/components/Logo/LogoTypes.d.ts +2 -0
  28. package/dist/components/Modal/Modal.d.ts +28 -8
  29. package/dist/components/Notification/Notification.d.ts +4 -4
  30. package/dist/components/Pagination/Pagination.d.ts +2 -2
  31. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
  32. package/dist/components/Radio/Radio.d.ts +4 -6
  33. package/dist/components/RadioGroup/RadioGroup.d.ts +12 -6
  34. package/dist/components/SearchBar/SearchBar.d.ts +4 -4
  35. package/dist/components/Select/Select.d.ts +10 -6
  36. package/dist/components/Select/SelectTypes.d.ts +4 -0
  37. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +4 -3
  38. package/dist/components/Slider/Slider.d.ts +6 -4
  39. package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
  40. package/dist/components/StructuredContent/StructuredContent.d.ts +2 -2
  41. package/dist/components/Table/Table.d.ts +1 -1
  42. package/dist/components/Tabs/Tabs.d.ts +4 -3
  43. package/dist/components/Template/Template.d.ts +4 -3
  44. package/dist/components/Text/Text.d.ts +1 -1
  45. package/dist/components/TextInput/TextInput.d.ts +5 -5
  46. package/dist/components/Toggle/Toggle.d.ts +3 -4
  47. package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
  48. package/dist/design-system-react-components.cjs.development.js +1767 -1180
  49. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  50. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  51. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  52. package/dist/design-system-react-components.esm.js +1774 -1188
  53. package/dist/design-system-react-components.esm.js.map +1 -1
  54. package/dist/hooks/useCarouselStyles.d.ts +3 -2
  55. package/dist/hooks/useNYPLTheme.d.ts +12 -0
  56. package/dist/index.d.ts +5 -2
  57. package/dist/styles.css +1 -1
  58. package/dist/theme/components/button.d.ts +10 -2
  59. package/dist/theme/components/card.d.ts +42 -22
  60. package/dist/theme/components/checkbox.d.ts +5 -4
  61. package/dist/theme/components/checkboxGroup.d.ts +1 -1
  62. package/dist/theme/components/componentWrapper.d.ts +2 -2
  63. package/dist/theme/components/customTable.d.ts +84 -1
  64. package/dist/theme/components/fieldset.d.ts +4 -14
  65. package/dist/theme/components/global.d.ts +23 -17
  66. package/dist/theme/components/heading.d.ts +53 -0
  67. package/dist/theme/components/helperErrorText.d.ts +1 -0
  68. package/dist/theme/components/hero.d.ts +20 -14
  69. package/dist/theme/components/label.d.ts +9 -10
  70. package/dist/theme/components/list.d.ts +99 -9
  71. package/dist/theme/components/radio.d.ts +6 -4
  72. package/dist/theme/components/radioGroup.d.ts +1 -1
  73. package/dist/theme/components/select.d.ts +28 -5
  74. package/dist/theme/components/skeletonLoader.d.ts +2 -2
  75. package/dist/theme/components/slider.d.ts +6 -3
  76. package/dist/theme/components/structuredContent.d.ts +197 -0
  77. package/dist/theme/components/textInput.d.ts +18 -6
  78. package/dist/theme/components/toggle.d.ts +7 -4
  79. package/dist/theme/foundations/global.d.ts +2 -0
  80. package/dist/theme/foundations/radii.d.ts +1 -0
  81. package/dist/theme/foundations/spacing.d.ts +46 -43
  82. package/package.json +17 -19
  83. package/src/components/Accordion/Accordion.stories.mdx +9 -9
  84. package/src/components/Accordion/Accordion.test.tsx +21 -0
  85. package/src/components/Accordion/Accordion.tsx +13 -9
  86. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +276 -27
  87. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  88. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +21 -5
  89. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +52 -31
  90. package/src/components/Breadcrumbs/Breadcrumbs.tsx +8 -7
  91. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
  92. package/src/components/Button/Button.stories.mdx +87 -23
  93. package/src/components/Button/Button.test.tsx +25 -0
  94. package/src/components/Button/Button.tsx +18 -7
  95. package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
  96. package/src/components/Card/Card.stories.mdx +287 -194
  97. package/src/components/Card/Card.test.tsx +102 -0
  98. package/src/components/Card/Card.tsx +73 -32
  99. package/src/components/Card/__snapshots__/Card.test.tsx.snap +196 -36
  100. package/src/components/Chakra/Grid.stories.mdx +4 -4
  101. package/src/components/Checkbox/Checkbox.stories.mdx +62 -10
  102. package/src/components/Checkbox/Checkbox.test.tsx +32 -9
  103. package/src/components/Checkbox/Checkbox.tsx +20 -15
  104. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +134 -7
  105. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +65 -17
  106. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +137 -81
  107. package/src/components/CheckboxGroup/CheckboxGroup.tsx +31 -21
  108. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +332 -97
  109. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
  110. package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
  111. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
  112. package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
  113. package/src/components/DatePicker/DatePicker.test.tsx +89 -13
  114. package/src/components/DatePicker/DatePicker.tsx +62 -56
  115. package/src/components/DatePicker/_DatePicker.scss +71 -13
  116. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
  117. package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
  118. package/src/components/Fieldset/Fieldset.test.tsx +58 -28
  119. package/src/components/Fieldset/Fieldset.tsx +35 -30
  120. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
  121. package/src/components/Form/Form.stories.mdx +72 -39
  122. package/src/components/Form/Form.test.tsx +58 -15
  123. package/src/components/Form/Form.tsx +89 -67
  124. package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
  125. package/src/components/Grid/GridTypes.tsx +7 -7
  126. package/src/components/Grid/SimpleGrid.stories.mdx +34 -6
  127. package/src/components/Grid/SimpleGrid.test.tsx +9 -0
  128. package/src/components/Grid/SimpleGrid.tsx +29 -20
  129. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
  130. package/src/components/Heading/Heading.stories.mdx +36 -3
  131. package/src/components/Heading/Heading.test.tsx +10 -0
  132. package/src/components/Heading/Heading.tsx +56 -50
  133. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +26 -7
  134. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
  135. package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
  136. package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
  137. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
  138. package/src/components/Hero/Hero.stories.mdx +125 -95
  139. package/src/components/Hero/Hero.test.tsx +33 -0
  140. package/src/components/Hero/Hero.tsx +135 -126
  141. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
  142. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
  143. package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -19
  144. package/src/components/HorizontalRule/HorizontalRule.tsx +9 -26
  145. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
  146. package/src/components/Icons/Icon.stories.mdx +31 -6
  147. package/src/components/Icons/Icon.test.tsx +38 -0
  148. package/src/components/Icons/Icon.tsx +93 -76
  149. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  150. package/src/components/Image/Image.stories.mdx +29 -5
  151. package/src/components/Image/Image.test.tsx +8 -0
  152. package/src/components/Image/Image.tsx +38 -26
  153. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  154. package/src/components/Label/Label.stories.mdx +42 -20
  155. package/src/components/Label/Label.test.tsx +42 -17
  156. package/src/components/Label/Label.tsx +22 -13
  157. package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
  158. package/src/components/Link/Link.stories.mdx +25 -15
  159. package/src/components/Link/Link.test.tsx +21 -22
  160. package/src/components/Link/Link.tsx +8 -8
  161. package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
  162. package/src/components/List/List.stories.mdx +75 -40
  163. package/src/components/List/List.test.tsx +67 -19
  164. package/src/components/List/List.tsx +38 -25
  165. package/src/components/List/ListTypes.tsx +1 -1
  166. package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
  167. package/src/components/Logo/Logo.stories.mdx +30 -6
  168. package/src/components/Logo/Logo.test.tsx +17 -0
  169. package/src/components/Logo/Logo.tsx +18 -6
  170. package/src/components/Logo/LogoSvgs.tsx +4 -0
  171. package/src/components/Logo/LogoTypes.tsx +2 -0
  172. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
  173. package/src/components/Modal/Modal.stories.mdx +256 -136
  174. package/src/components/Modal/Modal.test.tsx +151 -9
  175. package/src/components/Modal/Modal.tsx +140 -20
  176. package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +25 -0
  177. package/src/components/Notification/Notification.stories.mdx +25 -1
  178. package/src/components/Notification/Notification.test.tsx +23 -0
  179. package/src/components/Notification/Notification.tsx +46 -44
  180. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
  181. package/src/components/Pagination/Pagination.stories.mdx +25 -6
  182. package/src/components/Pagination/Pagination.test.tsx +25 -0
  183. package/src/components/Pagination/Pagination.tsx +6 -6
  184. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
  185. package/src/components/Placeholder/Placeholder.tsx +3 -1
  186. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
  187. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +81 -11
  188. package/src/components/ProgressIndicator/ProgressIndicator.tsx +17 -9
  189. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
  190. package/src/components/Radio/Radio.stories.mdx +64 -12
  191. package/src/components/Radio/Radio.test.tsx +28 -8
  192. package/src/components/Radio/Radio.tsx +66 -63
  193. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +103 -6
  194. package/src/components/RadioGroup/RadioGroup.stories.mdx +224 -89
  195. package/src/components/RadioGroup/RadioGroup.test.tsx +122 -62
  196. package/src/components/RadioGroup/RadioGroup.tsx +106 -100
  197. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1236 -1020
  198. package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
  199. package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
  200. package/src/components/SearchBar/SearchBar.tsx +17 -8
  201. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
  202. package/src/components/Select/Select.stories.mdx +128 -49
  203. package/src/components/Select/Select.test.tsx +63 -16
  204. package/src/components/Select/Select.tsx +131 -92
  205. package/src/components/Select/SelectTypes.tsx +5 -0
  206. package/src/components/Select/__snapshots__/Select.test.tsx.snap +765 -425
  207. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +42 -10
  208. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +8 -0
  209. package/src/components/SkeletonLoader/SkeletonLoader.tsx +76 -72
  210. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
  211. package/src/components/Slider/Slider.stories.mdx +91 -42
  212. package/src/components/Slider/Slider.test.tsx +65 -17
  213. package/src/components/Slider/Slider.tsx +26 -19
  214. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
  215. package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
  216. package/src/components/StatusBadge/StatusBadge.test.tsx +16 -0
  217. package/src/components/StatusBadge/StatusBadge.tsx +25 -20
  218. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
  219. package/src/components/StructuredContent/StructuredContent.stories.mdx +131 -12
  220. package/src/components/StructuredContent/StructuredContent.test.tsx +34 -0
  221. package/src/components/StructuredContent/StructuredContent.tsx +80 -75
  222. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
  223. package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
  224. package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
  225. package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
  226. package/src/components/StyleGuide/ColorCard.tsx +1 -1
  227. package/src/components/StyleGuide/Colors.stories.mdx +1 -2
  228. package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
  229. package/src/components/StyleGuide/Forms.stories.mdx +27 -12
  230. package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
  231. package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
  232. package/src/components/StyleGuide/Typography.stories.mdx +30 -21
  233. package/src/components/Table/Table.stories.mdx +38 -11
  234. package/src/components/Table/Table.test.tsx +15 -0
  235. package/src/components/Table/Table.tsx +7 -7
  236. package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
  237. package/src/components/Tabs/Tabs.stories.mdx +52 -3
  238. package/src/components/Tabs/Tabs.test.tsx +16 -0
  239. package/src/components/Tabs/Tabs.tsx +10 -6
  240. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
  241. package/src/components/Template/Template.stories.mdx +47 -43
  242. package/src/components/Template/Template.test.tsx +33 -0
  243. package/src/components/Template/Template.tsx +65 -60
  244. package/src/components/Template/__snapshots__/Template.test.tsx.snap +191 -20
  245. package/src/components/Text/Text.stories.mdx +20 -1
  246. package/src/components/Text/Text.test.tsx +12 -0
  247. package/src/components/Text/Text.tsx +6 -4
  248. package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
  249. package/src/components/TextInput/TextInput.stories.mdx +65 -19
  250. package/src/components/TextInput/TextInput.test.tsx +42 -28
  251. package/src/components/TextInput/TextInput.tsx +121 -113
  252. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
  253. package/src/components/Toggle/Toggle.stories.mdx +80 -22
  254. package/src/components/Toggle/Toggle.test.tsx +27 -9
  255. package/src/components/Toggle/Toggle.tsx +22 -18
  256. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +128 -5
  257. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
  258. package/src/components/VideoPlayer/VideoPlayer.test.tsx +23 -0
  259. package/src/components/VideoPlayer/VideoPlayer.tsx +133 -126
  260. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
  261. package/src/docs/Chakra.stories.mdx +50 -9
  262. package/src/docs/Welcome.stories.mdx +160 -41
  263. package/src/hooks/useCarouselStyles.stories.mdx +22 -2
  264. package/src/hooks/useCarouselStyles.ts +3 -2
  265. package/src/hooks/useNYPLTheme.stories.mdx +101 -0
  266. package/src/hooks/useNYPLTheme.ts +30 -6
  267. package/src/hooks/useWindowSize.stories.mdx +23 -0
  268. package/src/index.ts +5 -2
  269. package/src/styles/base/_place-holder.scss +1 -1
  270. package/src/styles.scss +0 -1
  271. package/src/theme/components/button.ts +15 -7
  272. package/src/theme/components/card.ts +30 -19
  273. package/src/theme/components/checkbox.ts +10 -8
  274. package/src/theme/components/checkboxGroup.ts +1 -1
  275. package/src/theme/components/componentWrapper.ts +2 -2
  276. package/src/theme/components/customTable.ts +39 -31
  277. package/src/theme/components/fieldset.ts +1 -2
  278. package/src/theme/components/global.ts +25 -20
  279. package/src/theme/components/heading.ts +1 -1
  280. package/src/theme/components/helperErrorText.ts +1 -0
  281. package/src/theme/components/hero.ts +13 -15
  282. package/src/theme/components/label.ts +4 -3
  283. package/src/theme/components/list.ts +73 -66
  284. package/src/theme/components/notification.ts +2 -2
  285. package/src/theme/components/radio.ts +9 -9
  286. package/src/theme/components/radioGroup.ts +1 -1
  287. package/src/theme/components/select.ts +31 -22
  288. package/src/theme/components/skeletonLoader.ts +3 -3
  289. package/src/theme/components/slider.ts +8 -7
  290. package/src/theme/components/statusBadge.ts +2 -2
  291. package/src/theme/components/structuredContent.ts +66 -1
  292. package/src/theme/components/tabs.ts +2 -2
  293. package/src/theme/components/template.ts +9 -9
  294. package/src/theme/components/textInput.ts +13 -12
  295. package/src/theme/components/toggle.ts +17 -10
  296. package/src/theme/components/videoPlayer.ts +1 -1
  297. package/src/theme/foundations/colors.ts +1 -1
  298. package/src/theme/foundations/radii.ts +1 -0
  299. package/src/theme/foundations/spacing.ts +70 -22
  300. package/src/theme/foundations/typography.ts +2 -2
  301. package/src/utils/componentCategories.ts +1 -2
  302. package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
  303. package/dist/helpers/generateUUID.d.ts +0 -1
  304. package/src/components/Modal/_Modal.scss +0 -18
  305. package/src/helpers/generateUUID.tsx +0 -5
@@ -50,9 +50,6 @@ import DSProvider from "../../theme/provider";
50
50
  },
51
51
  name: { control: false },
52
52
  onChange: { control: false },
53
- optReqFlag: {
54
- table: { defaultValue: { summary: true } },
55
- },
56
53
  showBoxes: {
57
54
  table: { defaultValue: { summary: true } },
58
55
  },
@@ -62,6 +59,9 @@ import DSProvider from "../../theme/provider";
62
59
  showLabel: {
63
60
  table: { defaultValue: { summary: true } },
64
61
  },
62
+ showRequiredLabel: {
63
+ table: { defaultValue: { summary: true } },
64
+ },
65
65
  showValues: {
66
66
  table: { defaultValue: { summary: true } },
67
67
  },
@@ -76,7 +76,7 @@ import DSProvider from "../../theme/provider";
76
76
  | Component Version | DS Version |
77
77
  | ----------------- | ---------- |
78
78
  | Added | `0.25.4` |
79
- | Latest | `0.25.13` |
79
+ | Latest | `0.26.0` |
80
80
 
81
81
  ## Table of Contents
82
82
 
@@ -114,10 +114,10 @@ For this type of component, the `value` prop must be a single number.
114
114
  min: 0,
115
115
  name: undefined,
116
116
  onChange: undefined,
117
- optReqFlag: true,
118
117
  showBoxes: true,
119
118
  showHelperInvalidText: true,
120
119
  showLabel: true,
120
+ showRequiredLabel: true,
121
121
  showValues: true,
122
122
  step: 1,
123
123
  }}
@@ -138,14 +138,17 @@ For this type of component, the `value` prop must be a single number.
138
138
 
139
139
  ## Accessibility
140
140
 
141
- - UI component should be accessible via keyboard. In addition to the text fields,
142
- a keyboard user should be able to tab to the blue circle and then with left and
143
- right arrows increase or decrease the value.
144
- - The color contrast between foreground color and background color should be
145
- 4.5:1 contrast ratio.
146
- - If text size is 200%, the button should scale with text so there is no overlap.
147
- - A `Slider` is an input component, so it should have a label. A `Slider` without a
148
- label is ambiguous and not accessible.
141
+ The `Slider` component is accessible via keyboard. In addition to the text fields,
142
+ a keyboard user can tab to the blue slider thumb and then with left and right
143
+ arrows increase or decrease the value. The color contrast between foreground
144
+ color and background color is 4.5:1. If text size is 200%, the button scales
145
+ with text so there is no overlap. Internally, a `Label` is associated with the
146
+ `<input>` element.
147
+
148
+ When `showLabel` is set to false, the `labelText` value will be set to the
149
+ main `<div>`'s `aria-label` attribute. This is the same `<div>` that contains the
150
+ `aria-valuemin`, `aria-valuemax`, `aria-orientation`, and `aria-valuenow`
151
+ attributes.
149
152
 
150
153
  Resources:
151
154
 
@@ -157,10 +160,11 @@ Resources:
157
160
  ### Slider Accessibility Implementation
158
161
 
159
162
  Chakra's `Slider` component is accessible and, as recommended, we pass in an
160
- `aria-label` to their `Slider` component. On top of that, the DS `Slider`
161
- component's `<label>` points to the `<input>` element which shows the current
162
- value. This `input` element also has its own `aria-label`. When the input box
163
- is hidden, the `for` attribute in the `label` element is removed.
163
+ `aria-label` to their `Slider` component. On top of that, the Reservoir Design
164
+ System (DS) `Slider` component's `<label>` points to the `<input>` element
165
+ which shows the current value. This `input` element also has its own
166
+ `aria-label`. When the input box is hidden, the `for` attribute in the `label`
167
+ element is removed.
164
168
 
165
169
  Note that Chakra handles its single slider thumb aria attributes: `aria-valuemin`,
166
170
  `aria-valuemax`, `aria-valuenow`, and `aria-orientation`.
@@ -190,10 +194,10 @@ numbers. This signifies the starting and ending values of the range slider.
190
194
  min: 0,
191
195
  name: undefined,
192
196
  onChange: undefined,
193
- optReqFlag: true,
194
197
  showBoxes: true,
195
198
  showHelperInvalidText: true,
196
199
  showLabel: true,
200
+ showRequiredLabel: true,
197
201
  showValues: true,
198
202
  step: 1,
199
203
  }}
@@ -227,9 +231,6 @@ Note that Chakra handles its two slider thumbs aria attributes: `aria-valuemin`,
227
231
 
228
232
  ### Single Slider States
229
233
 
230
- Note: In the following examples, the "Required"/"Optional" text in the label is
231
- hidden by setting the `optReqFlag` prop to false.
232
-
233
234
  <Canvas>
234
235
  <DSProvider>
235
236
  <Heading
@@ -239,8 +240,8 @@ hidden by setting the `optReqFlag` prop to false.
239
240
  />
240
241
  <Slider
241
242
  defaultValue={50}
242
- optReqFlag={false}
243
243
  helperText="Component helper text."
244
+ id="single-slider"
244
245
  invalidText="Component error text :("
245
246
  labelText="Label"
246
247
  />
@@ -256,8 +257,8 @@ hidden by setting the `optReqFlag` prop to false.
256
257
  />
257
258
  <Slider
258
259
  defaultValue={50}
259
- optReqFlag={false}
260
260
  helperText="Component helper text."
261
+ id="errored-slider"
261
262
  invalidText="Component error text :("
262
263
  labelText="Label"
263
264
  isInvalid
@@ -265,6 +266,24 @@ hidden by setting the `optReqFlag` prop to false.
265
266
  </DSProvider>
266
267
  </Canvas>
267
268
 
269
+ <Canvas>
270
+ <DSProvider>
271
+ <Heading
272
+ id="heading-single-required"
273
+ level={HeadingLevels.Four}
274
+ text="Required State"
275
+ />
276
+ <Slider
277
+ defaultValue={50}
278
+ helperText="Component helper text."
279
+ id="required-slider"
280
+ invalidText="Component error text :("
281
+ labelText="Label"
282
+ isRequired
283
+ />
284
+ </DSProvider>
285
+ </Canvas>
286
+
268
287
  <Canvas>
269
288
  <DSProvider>
270
289
  <Heading
@@ -274,8 +293,8 @@ hidden by setting the `optReqFlag` prop to false.
274
293
  />
275
294
  <Slider
276
295
  defaultValue={50}
277
- optReqFlag={false}
278
296
  helperText="Component helper text."
297
+ id="disabled-slider"
279
298
  invalidText="Component error text :("
280
299
  labelText="Label"
281
300
  isDisabled
@@ -287,9 +306,6 @@ hidden by setting the `optReqFlag` prop to false.
287
306
 
288
307
  To enable the Range Slider, set the `isRangeSlider` prop to true.
289
308
 
290
- Note: In the following examples, the "Required"/"Optional" text in the label is
291
- hidden by setting the `optReqFlag` prop to false.
292
-
293
309
  <Canvas>
294
310
  <DSProvider>
295
311
  <Heading
@@ -299,8 +315,8 @@ hidden by setting the `optReqFlag` prop to false.
299
315
  />
300
316
  <Slider
301
317
  defaultValue={[25, 75]}
302
- optReqFlag={false}
303
318
  helperText="Component helper text."
319
+ id="range-slider"
304
320
  invalidText="Component error text :("
305
321
  labelText="Label"
306
322
  isRangeSlider
@@ -318,8 +334,8 @@ hidden by setting the `optReqFlag` prop to false.
318
334
  <SimpleGrid columns={1} gap={GridGaps.Large}>
319
335
  <Slider
320
336
  defaultValue={[25, 75]}
321
- optReqFlag={false}
322
337
  helperText="Component helper text."
338
+ id="range-error-slider"
323
339
  invalidText="Component error text :("
324
340
  labelText="Label"
325
341
  isRangeSlider
@@ -336,8 +352,8 @@ hidden by setting the `optReqFlag` prop to false.
336
352
  </p>
337
353
  <Slider
338
354
  defaultValue={[80, 20]}
339
- optReqFlag={false}
340
355
  helperText="Component helper text."
356
+ id="range-error-slider2"
341
357
  invalidText="Component error text :("
342
358
  labelText="Label"
343
359
  isRangeSlider
@@ -346,6 +362,25 @@ hidden by setting the `optReqFlag` prop to false.
346
362
  </DSProvider>
347
363
  </Canvas>
348
364
 
365
+ <Canvas>
366
+ <DSProvider>
367
+ <Heading
368
+ id="heading-range-required"
369
+ level={HeadingLevels.Four}
370
+ text="Required State"
371
+ />
372
+ <Slider
373
+ defaultValue={[25, 75]}
374
+ helperText="Component helper text."
375
+ id="range-required-slider"
376
+ invalidText="Component error text :("
377
+ labelText="Label"
378
+ isRangeSlider
379
+ isRequired
380
+ />
381
+ </DSProvider>
382
+ </Canvas>
383
+
349
384
  <Canvas>
350
385
  <DSProvider>
351
386
  <Heading
@@ -355,8 +390,8 @@ hidden by setting the `optReqFlag` prop to false.
355
390
  />
356
391
  <Slider
357
392
  defaultValue={[25, 75]}
358
- optReqFlag={false}
359
393
  helperText="Component helper text."
394
+ id="single-disabled-slider"
360
395
  invalidText="Component error text :("
361
396
  labelText="Label"
362
397
  isRangeSlider
@@ -381,6 +416,7 @@ input are hidden.
381
416
  <Slider
382
417
  defaultValue={50}
383
418
  helperText="Component helper text."
419
+ id="single-slider-variant-1"
384
420
  labelText="Label"
385
421
  showValues={false}
386
422
  showBoxes={false}
@@ -388,6 +424,7 @@ input are hidden.
388
424
  <Slider
389
425
  defaultValue={50}
390
426
  helperText="Component helper text."
427
+ id="single-slider-variant-2"
391
428
  labelText="Label"
392
429
  showValues={false}
393
430
  showBoxes={false}
@@ -396,16 +433,16 @@ input are hidden.
396
433
  <Slider
397
434
  defaultValue={50}
398
435
  helperText="Component helper text."
436
+ id="single-slider-variant-3"
399
437
  labelText="Label"
400
- optReqFlag={false}
401
438
  showValues={false}
402
439
  showBoxes={false}
403
440
  />
404
441
  <Slider
405
442
  defaultValue={50}
406
443
  helperText="Component helper text."
444
+ id="single-slider-variant-4"
407
445
  labelText="Label"
408
- optReqFlag={false}
409
446
  showHelperInvalidText={false}
410
447
  showValues={false}
411
448
  showBoxes={false}
@@ -413,8 +450,8 @@ input are hidden.
413
450
  <Slider
414
451
  defaultValue={50}
415
452
  helperText="Component helper text."
453
+ id="single-slider-variant-5"
416
454
  labelText="Label"
417
- optReqFlag={false}
418
455
  showValues={false}
419
456
  showBoxes={false}
420
457
  showLabel={false}
@@ -436,6 +473,7 @@ For the following examples, all labels are hidden.
436
473
  <Slider
437
474
  defaultValue={50}
438
475
  helperText="Component helper text."
476
+ id="hidden-labels-1"
439
477
  labelText="Label"
440
478
  showHelperInvalidText={false}
441
479
  showLabel={false}
@@ -443,6 +481,7 @@ For the following examples, all labels are hidden.
443
481
  <Slider
444
482
  defaultValue={50}
445
483
  helperText="Component helper text."
484
+ id="hidden-labels-2"
446
485
  labelText="Label"
447
486
  showHelperInvalidText={false}
448
487
  showLabel={false}
@@ -451,6 +490,7 @@ For the following examples, all labels are hidden.
451
490
  <Slider
452
491
  defaultValue={50}
453
492
  helperText="Component helper text."
493
+ id="hidden-labels-3"
454
494
  labelText="Label"
455
495
  showHelperInvalidText={false}
456
496
  showLabel={false}
@@ -459,6 +499,7 @@ For the following examples, all labels are hidden.
459
499
  <Slider
460
500
  defaultValue={50}
461
501
  helperText="Component helper text."
502
+ id="hidden-labels-4"
462
503
  labelText="Label"
463
504
  showHelperInvalidText={false}
464
505
  showLabel={false}
@@ -479,38 +520,42 @@ In the following examples, all the labels are hidden.
479
520
  <Slider
480
521
  defaultValue={[15, 75]}
481
522
  helperText="Component helper text."
523
+ id="range-slider-1"
524
+ isRangeSlider
482
525
  labelText="Label"
483
526
  showHelperInvalidText={false}
484
527
  showLabel={false}
485
- isRangeSlider
486
528
  />
487
529
  <Slider
488
530
  defaultValue={[15, 75]}
489
531
  helperText="Component helper text."
532
+ id="range-slider-1"
533
+ isRangeSlider
490
534
  labelText="Label"
535
+ showBoxes={false}
491
536
  showHelperInvalidText={false}
492
537
  showLabel={false}
493
- showBoxes={false}
494
- isRangeSlider
495
538
  />
496
539
  <Slider
497
540
  defaultValue={[15, 75]}
498
541
  helperText="Component helper text."
542
+ id="range-slider-3"
543
+ isRangeSlider
499
544
  labelText="Label"
500
545
  showHelperInvalidText={false}
501
546
  showLabel={false}
502
547
  showValues={false}
503
- isRangeSlider
504
548
  />
505
549
  <Slider
506
550
  defaultValue={[15, 75]}
507
551
  helperText="Component helper text."
552
+ id="range-slider-4"
553
+ isRangeSlider
508
554
  labelText="Label"
555
+ showBoxes={false}
509
556
  showHelperInvalidText={false}
510
557
  showLabel={false}
511
558
  showValues={false}
512
- showBoxes={false}
513
- isRangeSlider
514
559
  />
515
560
  </SimpleGrid>
516
561
  </DSProvider>
@@ -539,6 +584,7 @@ function SliderExample() {
539
584
  return (
540
585
  <Slider
541
586
  helperText="Component helper text."
587
+ id="slider"
542
588
  labelText="Label"
543
589
  onChange={onChange}
544
590
  />
@@ -553,6 +599,7 @@ export function SliderExample() {
553
599
  return (
554
600
  <Slider
555
601
  helperText="Component helper text."
602
+ id="slider"
556
603
  labelText="Label"
557
604
  onChange={onChange}
558
605
  />
@@ -581,9 +628,10 @@ function RangeSliderExample() {
581
628
  return (
582
629
  <Slider
583
630
  helperText="Component helper text."
631
+ id="range-slider"
632
+ isRangeSlider
584
633
  labelText="Label"
585
634
  onChange={onChange}
586
- isRangeSlider
587
635
  />
588
636
  );
589
637
  }
@@ -599,9 +647,10 @@ export function RangeSliderExample() {
599
647
  <Slider
600
648
  defaultValue={[15, 75]}
601
649
  helperText="Component helper text."
650
+ id="range-slider"
651
+ isRangeSlider
602
652
  labelText="Label"
603
653
  onChange={onChange}
604
- isRangeSlider
605
654
  />
606
655
  );
607
656
  }
@@ -10,6 +10,7 @@ describe("Slider Accessibility", () => {
10
10
  it("passes axe accessibility test", async () => {
11
11
  const { container } = render(
12
12
  <Slider
13
+ id="slider"
13
14
  defaultValue={50}
14
15
  helperText="Component helper text."
15
16
  invalidText="Component error text :("
@@ -21,6 +22,7 @@ describe("Slider Accessibility", () => {
21
22
  it("passes axe accessibility test without a label", async () => {
22
23
  const { container } = render(
23
24
  <Slider
25
+ id="slider"
24
26
  defaultValue={50}
25
27
  helperText="Component helper text."
26
28
  invalidText="Component error text :("
@@ -33,6 +35,7 @@ describe("Slider Accessibility", () => {
33
35
  it("passes axe accessibility test without visible values", async () => {
34
36
  const { container } = render(
35
37
  <Slider
38
+ id="slider"
36
39
  defaultValue={50}
37
40
  helperText="Component helper text."
38
41
  invalidText="Component error text :("
@@ -49,6 +52,7 @@ describe("Slider Accessibility", () => {
49
52
  it("passes axe accessibility test", async () => {
50
53
  const { container } = render(
51
54
  <Slider
55
+ id="slider"
52
56
  defaultValue={[25, 75]}
53
57
  helperText="Component helper text."
54
58
  invalidText="Component error text :("
@@ -61,6 +65,7 @@ describe("Slider Accessibility", () => {
61
65
  it("passes axe accessibility test without a label", async () => {
62
66
  const { container } = render(
63
67
  <Slider
68
+ id="slider"
64
69
  defaultValue={[25, 75]}
65
70
  helperText="Component helper text."
66
71
  invalidText="Component error text :("
@@ -74,6 +79,7 @@ describe("Slider Accessibility", () => {
74
79
  it("passes axe accessibility test without visible values", async () => {
75
80
  const { container } = render(
76
81
  <Slider
82
+ id="slider"
77
83
  defaultValue={[25, 75]}
78
84
  helperText="Component helper text."
79
85
  invalidText="Component error text :("
@@ -93,6 +99,7 @@ describe("Slider", () => {
93
99
  it("renders a label, two static values, text input, and helper text", () => {
94
100
  render(
95
101
  <Slider
102
+ id="slider"
96
103
  defaultValue={50}
97
104
  helperText="Component helper text."
98
105
  invalidText="Component error text :("
@@ -100,7 +107,6 @@ describe("Slider", () => {
100
107
  />
101
108
  );
102
109
  expect(screen.getByText(/Label/i)).toBeInTheDocument();
103
- expect(screen.getByText(/Optional/i)).toBeInTheDocument();
104
110
  expect(screen.getByRole("slider")).toBeInTheDocument();
105
111
  // default min and max values
106
112
  expect(screen.getByText("0")).toBeInTheDocument();
@@ -128,20 +134,10 @@ describe("Slider", () => {
128
134
  expect(slider).toHaveAttribute("aria-labelledBy", "sliderId-label");
129
135
  });
130
136
 
131
- it("renders the 'required' text in the label or hides it", () => {
137
+ it("renders the '(Required)' text in the label or hides it", () => {
132
138
  const { rerender } = render(
133
139
  <Slider
134
- defaultValue={50}
135
- helperText="Component helper text."
136
- invalidText="Component error text :("
137
- labelText="Label"
138
- />
139
- );
140
- // "Optional" by default.
141
- expect(screen.getByText(/Optional/i)).toBeInTheDocument();
142
-
143
- rerender(
144
- <Slider
140
+ id="slider"
145
141
  defaultValue={50}
146
142
  helperText="Component helper text."
147
143
  invalidText="Component error text :("
@@ -149,26 +145,26 @@ describe("Slider", () => {
149
145
  isRequired
150
146
  />
151
147
  );
152
- expect(screen.queryByText(/Optional/i)).not.toBeInTheDocument();
153
148
  expect(screen.getByText(/Required/i)).toBeInTheDocument();
154
149
 
155
150
  rerender(
156
151
  <Slider
152
+ id="slider"
157
153
  defaultValue={50}
158
154
  helperText="Component helper text."
159
155
  invalidText="Component error text :("
160
156
  labelText="Label"
161
157
  isRequired
162
- optReqFlag={false}
158
+ showRequiredLabel={false}
163
159
  />
164
160
  );
165
- expect(screen.queryByText(/Optional/i)).not.toBeInTheDocument();
166
161
  expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
167
162
  });
168
163
 
169
164
  it("hides the label but adds it as an aria-label attribute", () => {
170
165
  render(
171
166
  <Slider
167
+ id="slider"
172
168
  defaultValue={50}
173
169
  helperText="Component helper text."
174
170
  invalidText="Component error text :("
@@ -184,6 +180,7 @@ describe("Slider", () => {
184
180
  it("hides the min/max static values", () => {
185
181
  const { rerender } = render(
186
182
  <Slider
183
+ id="slider"
187
184
  defaultValue={50}
188
185
  helperText="Component helper text."
189
186
  invalidText="Component error text :("
@@ -197,6 +194,7 @@ describe("Slider", () => {
197
194
 
198
195
  rerender(
199
196
  <Slider
197
+ id="slider"
200
198
  defaultValue={50}
201
199
  helperText="Component helper text."
202
200
  invalidText="Component error text :("
@@ -213,6 +211,7 @@ describe("Slider", () => {
213
211
  it("hides the current value input box", () => {
214
212
  const { rerender } = render(
215
213
  <Slider
214
+ id="slider"
216
215
  defaultValue={50}
217
216
  helperText="Component helper text."
218
217
  invalidText="Component error text :("
@@ -224,6 +223,7 @@ describe("Slider", () => {
224
223
 
225
224
  rerender(
226
225
  <Slider
226
+ id="slider"
227
227
  defaultValue={50}
228
228
  helperText="Component helper text."
229
229
  invalidText="Component error text :("
@@ -237,6 +237,7 @@ describe("Slider", () => {
237
237
  it("renders the invalid state", () => {
238
238
  render(
239
239
  <Slider
240
+ id="slider"
240
241
  defaultValue={50}
241
242
  helperText="Component helper text."
242
243
  invalidText="Component error text :("
@@ -258,6 +259,7 @@ describe("Slider", () => {
258
259
  it("renders the disabled state", () => {
259
260
  render(
260
261
  <Slider
262
+ id="slider"
261
263
  defaultValue={50}
262
264
  helperText="Component helper text."
263
265
  invalidText="Component error text :("
@@ -274,6 +276,7 @@ describe("Slider", () => {
274
276
  it("updates the value through the text input", () => {
275
277
  render(
276
278
  <Slider
279
+ id="slider"
277
280
  defaultValue={50}
278
281
  helperText="Component helper text."
279
282
  invalidText="Component error text :("
@@ -298,6 +301,7 @@ describe("Slider", () => {
298
301
  let currentValue = 0;
299
302
  render(
300
303
  <Slider
304
+ id="slider"
301
305
  defaultValue={50}
302
306
  helperText="Component helper text."
303
307
  invalidText="Component error text :("
@@ -322,6 +326,7 @@ describe("Slider", () => {
322
326
 
323
327
  render(
324
328
  <Slider
329
+ id="slider"
325
330
  defaultValue={50}
326
331
  helperText="Component helper text."
327
332
  invalidText="Component error text :("
@@ -431,6 +436,31 @@ describe("Slider", () => {
431
436
  />
432
437
  )
433
438
  .toJSON();
439
+ const withChakraProps = renderer
440
+ .create(
441
+ <Slider
442
+ id="chakra"
443
+ defaultValue={50}
444
+ helperText="Component helper text."
445
+ invalidText="Component error text :("
446
+ labelText="Label"
447
+ p="20px"
448
+ color="ui.error.primary"
449
+ />
450
+ )
451
+ .toJSON();
452
+ const withOtherProps = renderer
453
+ .create(
454
+ <Slider
455
+ id="props"
456
+ defaultValue={50}
457
+ helperText="Component helper text."
458
+ invalidText="Component error text :("
459
+ labelText="Label"
460
+ data-testid="props"
461
+ />
462
+ )
463
+ .toJSON();
434
464
 
435
465
  expect(defaultSlider).toMatchSnapshot();
436
466
  expect(errored).toMatchSnapshot();
@@ -439,6 +469,8 @@ describe("Slider", () => {
439
469
  expect(noLabels).toMatchSnapshot();
440
470
  expect(noVisibleValues).toMatchSnapshot();
441
471
  expect(onlySlider).toMatchSnapshot();
472
+ expect(withChakraProps).toMatchSnapshot();
473
+ expect(withOtherProps).toMatchSnapshot();
442
474
  });
443
475
  });
444
476
 
@@ -446,6 +478,7 @@ describe("Slider", () => {
446
478
  it("renders everything from the single but also two text input fields", () => {
447
479
  render(
448
480
  <Slider
481
+ id="slider"
449
482
  defaultValue={[25, 75]}
450
483
  helperText="Component helper text."
451
484
  invalidText="Component error text :("
@@ -454,7 +487,6 @@ describe("Slider", () => {
454
487
  />
455
488
  );
456
489
  expect(screen.getByText(/Label/i)).toBeInTheDocument();
457
- expect(screen.getByText(/Optional/i)).toBeInTheDocument();
458
490
  // The range slider has two sliders!
459
491
  expect(screen.getAllByRole("slider")).toHaveLength(2);
460
492
  // default min and max values
@@ -495,6 +527,7 @@ describe("Slider", () => {
495
527
  it("hides the label but adds it as an aria-label attribute", () => {
496
528
  render(
497
529
  <Slider
530
+ id="slider"
498
531
  defaultValue={[25, 75]}
499
532
  helperText="Component helper text."
500
533
  invalidText="Component error text :("
@@ -518,6 +551,7 @@ describe("Slider", () => {
518
551
  it("renders with min and max values as the default values if no `defaultValue` array is passed", () => {
519
552
  render(
520
553
  <Slider
554
+ id="slider"
521
555
  helperText="Component helper text."
522
556
  invalidText="Component error text :("
523
557
  isRangeSlider
@@ -534,6 +568,7 @@ describe("Slider", () => {
534
568
  // The start value is bigger than the end value.
535
569
  render(
536
570
  <Slider
571
+ id="slider"
537
572
  defaultValue={[75, 25]}
538
573
  helperText="Component helper text."
539
574
  invalidText="Component error text :("
@@ -559,6 +594,7 @@ describe("Slider", () => {
559
594
  it("updates the value through the text input", () => {
560
595
  render(
561
596
  <Slider
597
+ id="slider"
562
598
  defaultValue={[25, 75]}
563
599
  helperText="Component helper text."
564
600
  invalidText="Component error text :("
@@ -579,6 +615,18 @@ describe("Slider", () => {
579
615
  expect(endingInput).toHaveValue(79);
580
616
  });
581
617
 
618
+ it("logs a warning when there is no `id` passed", () => {
619
+ const warn = jest.spyOn(console, "warn");
620
+ render(
621
+ // @ts-ignore: Typescript complains when a required prop is not passed, but
622
+ // here we don't want to pass the required prop to make sure the warning appears.
623
+ <Slider labelText="Label" />
624
+ );
625
+ expect(warn).toHaveBeenCalledWith(
626
+ "NYPL Reservoir Slider: This component's required `id` prop was not passed."
627
+ );
628
+ });
629
+
582
630
  it("renders the UI snapshot correctly", () => {
583
631
  const defaultRangeSlider = renderer
584
632
  .create(