@nypl/design-system-react-components 0.25.12 → 0.26.1

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 (337) hide show
  1. package/CHANGELOG.md +131 -1
  2. package/README.md +10 -10
  3. package/dist/components/Accordion/Accordion.d.ts +6 -4
  4. package/dist/components/Accordion/AccordionTypes.d.ts +5 -0
  5. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -4
  6. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -1
  7. package/dist/components/Button/Button.d.ts +2 -2
  8. package/dist/components/Card/Card.d.ts +22 -29
  9. package/dist/components/Checkbox/Checkbox.d.ts +3 -3
  10. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +9 -6
  11. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
  12. package/dist/components/DatePicker/DatePicker.d.ts +5 -6
  13. package/dist/components/Fieldset/Fieldset.d.ts +5 -6
  14. package/dist/components/Form/Form.d.ts +6 -6
  15. package/dist/components/Grid/GridTypes.d.ts +7 -7
  16. package/dist/components/Grid/SimpleGrid.d.ts +1 -1
  17. package/dist/components/Heading/Heading.d.ts +5 -5
  18. package/dist/components/Heading/HeadingTypes.d.ts +1 -1
  19. package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
  20. package/dist/components/Hero/Hero.d.ts +9 -5
  21. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
  22. package/dist/components/Icons/Icon.d.ts +2 -1
  23. package/dist/components/Icons/IconTypes.d.ts +1 -0
  24. package/dist/components/Image/Image.d.ts +27 -9
  25. package/dist/components/Image/ImageTypes.d.ts +4 -4
  26. package/dist/components/Label/Label.d.ts +7 -4
  27. package/dist/components/Link/Link.d.ts +1 -1
  28. package/dist/components/List/List.d.ts +11 -11
  29. package/dist/components/List/ListTypes.d.ts +1 -1
  30. package/dist/components/Logo/Logo.d.ts +2 -1
  31. package/dist/components/Logo/LogoSvgs.d.ts +2 -0
  32. package/dist/components/Logo/LogoTypes.d.ts +4 -2
  33. package/dist/components/Notification/Notification.d.ts +7 -7
  34. package/dist/components/Pagination/Pagination.d.ts +2 -2
  35. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
  36. package/dist/components/Radio/Radio.d.ts +5 -7
  37. package/dist/components/RadioGroup/RadioGroup.d.ts +16 -8
  38. package/dist/components/SearchBar/SearchBar.d.ts +4 -4
  39. package/dist/components/Select/Select.d.ts +12 -8
  40. package/dist/components/Select/SelectTypes.d.ts +4 -0
  41. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -6
  42. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +0 -4
  43. package/dist/components/Slider/Slider.d.ts +6 -4
  44. package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
  45. package/dist/components/StructuredContent/StructuredContent.d.ts +10 -23
  46. package/dist/components/Table/Table.d.ts +1 -1
  47. package/dist/components/Tabs/Tabs.d.ts +7 -6
  48. package/dist/components/Template/Template.d.ts +17 -8
  49. package/dist/components/Text/Text.d.ts +4 -4
  50. package/dist/components/Text/TextTypes.d.ts +1 -1
  51. package/dist/components/TextInput/TextInput.d.ts +7 -7
  52. package/dist/components/Toggle/Toggle.d.ts +8 -10
  53. package/dist/components/Toggle/{ToggleSizes.d.ts → ToggleTypes.d.ts} +1 -1
  54. package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
  55. package/dist/design-system-react-components.cjs.development.js +2075 -1468
  56. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  57. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  58. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  59. package/dist/design-system-react-components.esm.js +2086 -1483
  60. package/dist/design-system-react-components.esm.js.map +1 -1
  61. package/dist/helpers/enums.d.ts +4 -0
  62. package/dist/hooks/useCarouselStyles.d.ts +3 -2
  63. package/dist/hooks/useNYPLTheme.d.ts +12 -0
  64. package/dist/index.d.ts +11 -9
  65. package/dist/styles.css +1 -1
  66. package/dist/theme/components/accordion.d.ts +7 -12
  67. package/dist/theme/components/breadcrumb.d.ts +3 -0
  68. package/dist/theme/components/button.d.ts +10 -2
  69. package/dist/theme/components/card.d.ts +44 -24
  70. package/dist/theme/components/checkbox.d.ts +6 -4
  71. package/dist/theme/components/checkboxGroup.d.ts +4 -2
  72. package/dist/theme/components/componentWrapper.d.ts +2 -2
  73. package/dist/theme/components/customTable.d.ts +84 -1
  74. package/dist/theme/components/fieldset.d.ts +4 -14
  75. package/dist/theme/components/global.d.ts +25 -18
  76. package/dist/theme/components/heading.d.ts +53 -0
  77. package/dist/theme/components/helperErrorText.d.ts +1 -0
  78. package/dist/theme/components/hero.d.ts +21 -15
  79. package/dist/theme/components/image.d.ts +1 -1
  80. package/dist/theme/components/label.d.ts +9 -10
  81. package/dist/theme/components/list.d.ts +99 -9
  82. package/dist/theme/components/notification.d.ts +4 -4
  83. package/dist/theme/components/pagination.d.ts +2 -5
  84. package/dist/theme/components/radio.d.ts +7 -4
  85. package/dist/theme/components/radioGroup.d.ts +4 -2
  86. package/dist/theme/components/select.d.ts +37 -5
  87. package/dist/theme/components/skeletonLoader.d.ts +2 -2
  88. package/dist/theme/components/slider.d.ts +6 -3
  89. package/dist/theme/components/structuredContent.d.ts +197 -0
  90. package/dist/theme/components/textInput.d.ts +18 -6
  91. package/dist/theme/components/toggle.d.ts +20 -5
  92. package/dist/theme/foundations/global.d.ts +2 -0
  93. package/dist/theme/foundations/radii.d.ts +1 -0
  94. package/dist/theme/foundations/spacing.d.ts +46 -43
  95. package/package.json +5 -6
  96. package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +34 -0
  97. package/src/components/Accordion/Accordion.stories.mdx +150 -66
  98. package/src/components/Accordion/Accordion.test.tsx +65 -17
  99. package/src/components/Accordion/Accordion.tsx +61 -27
  100. package/src/components/Accordion/AccordionTypes.tsx +5 -0
  101. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +505 -14
  102. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  103. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +37 -19
  104. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +57 -36
  105. package/src/components/Breadcrumbs/Breadcrumbs.tsx +14 -13
  106. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -1
  107. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
  108. package/src/components/Button/Button.stories.mdx +87 -23
  109. package/src/components/Button/Button.test.tsx +25 -0
  110. package/src/components/Button/Button.tsx +18 -7
  111. package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
  112. package/src/components/Card/Card.stories.mdx +493 -329
  113. package/src/components/Card/Card.test.tsx +138 -18
  114. package/src/components/Card/Card.tsx +151 -85
  115. package/src/components/Card/__snapshots__/Card.test.tsx.snap +221 -101
  116. package/src/components/Chakra/Center.stories.mdx +2 -2
  117. package/src/components/Chakra/Grid.stories.mdx +4 -4
  118. package/src/components/Checkbox/Checkbox.stories.mdx +73 -9
  119. package/src/components/Checkbox/Checkbox.test.tsx +89 -10
  120. package/src/components/Checkbox/Checkbox.tsx +26 -16
  121. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +209 -6
  122. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +135 -23
  123. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +216 -90
  124. package/src/components/CheckboxGroup/CheckboxGroup.tsx +39 -26
  125. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +493 -89
  126. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
  127. package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
  128. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
  129. package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
  130. package/src/components/DatePicker/DatePicker.test.tsx +94 -15
  131. package/src/components/DatePicker/DatePicker.tsx +67 -58
  132. package/src/components/DatePicker/_DatePicker.scss +71 -13
  133. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
  134. package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
  135. package/src/components/Fieldset/Fieldset.test.tsx +58 -28
  136. package/src/components/Fieldset/Fieldset.tsx +35 -30
  137. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
  138. package/src/components/Form/Form.stories.mdx +118 -47
  139. package/src/components/Form/Form.test.tsx +59 -16
  140. package/src/components/Form/Form.tsx +89 -65
  141. package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
  142. package/src/components/Grid/GridTypes.tsx +7 -7
  143. package/src/components/Grid/SimpleGrid.stories.mdx +87 -41
  144. package/src/components/Grid/SimpleGrid.test.tsx +24 -9
  145. package/src/components/Grid/SimpleGrid.tsx +29 -20
  146. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
  147. package/src/components/Heading/Heading.stories.mdx +56 -25
  148. package/src/components/Heading/Heading.test.tsx +17 -7
  149. package/src/components/Heading/Heading.tsx +60 -58
  150. package/src/components/Heading/HeadingTypes.tsx +1 -1
  151. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +27 -8
  152. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
  153. package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
  154. package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
  155. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
  156. package/src/components/Hero/Hero.stories.mdx +143 -113
  157. package/src/components/Hero/Hero.test.tsx +146 -58
  158. package/src/components/Hero/Hero.tsx +144 -112
  159. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
  160. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
  161. package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -17
  162. package/src/components/HorizontalRule/HorizontalRule.tsx +9 -25
  163. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
  164. package/src/components/Icons/Icon.stories.mdx +80 -23
  165. package/src/components/Icons/Icon.test.tsx +51 -2
  166. package/src/components/Icons/Icon.tsx +93 -71
  167. package/src/components/Icons/IconTypes.tsx +1 -0
  168. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  169. package/src/components/Image/Image.stories.mdx +160 -71
  170. package/src/components/Image/Image.test.tsx +40 -48
  171. package/src/components/Image/Image.tsx +80 -48
  172. package/src/components/Image/ImageTypes.ts +4 -4
  173. package/src/components/Image/__snapshots__/Image.test.tsx.snap +84 -21
  174. package/src/components/Label/Label.stories.mdx +42 -20
  175. package/src/components/Label/Label.test.tsx +42 -17
  176. package/src/components/Label/Label.tsx +22 -13
  177. package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
  178. package/src/components/Link/Link.stories.mdx +25 -1
  179. package/src/components/Link/Link.test.tsx +21 -0
  180. package/src/components/Link/Link.tsx +16 -9
  181. package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
  182. package/src/components/List/List.stories.mdx +75 -40
  183. package/src/components/List/List.test.tsx +73 -22
  184. package/src/components/List/List.tsx +44 -28
  185. package/src/components/List/ListTypes.tsx +1 -1
  186. package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
  187. package/src/components/Logo/Logo.stories.mdx +40 -16
  188. package/src/components/Logo/Logo.test.tsx +29 -2
  189. package/src/components/Logo/Logo.tsx +28 -11
  190. package/src/components/Logo/LogoSvgs.tsx +4 -0
  191. package/src/components/Logo/LogoTypes.tsx +3 -1
  192. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
  193. package/src/components/Modal/Modal.stories.mdx +13 -0
  194. package/src/components/Notification/Notification.stories.mdx +29 -5
  195. package/src/components/Notification/Notification.test.tsx +23 -0
  196. package/src/components/Notification/Notification.tsx +53 -51
  197. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
  198. package/src/components/Pagination/Pagination.stories.mdx +27 -6
  199. package/src/components/Pagination/Pagination.test.tsx +55 -2
  200. package/src/components/Pagination/Pagination.tsx +12 -9
  201. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
  202. package/src/components/Placeholder/Placeholder.tsx +3 -1
  203. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
  204. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +87 -13
  205. package/src/components/ProgressIndicator/ProgressIndicator.tsx +20 -10
  206. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
  207. package/src/components/Radio/Radio.stories.mdx +75 -11
  208. package/src/components/Radio/Radio.test.tsx +83 -9
  209. package/src/components/Radio/Radio.tsx +70 -62
  210. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +163 -5
  211. package/src/components/RadioGroup/RadioGroup.stories.mdx +293 -94
  212. package/src/components/RadioGroup/RadioGroup.test.tsx +193 -68
  213. package/src/components/RadioGroup/RadioGroup.tsx +110 -101
  214. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1258 -902
  215. package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
  216. package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
  217. package/src/components/SearchBar/SearchBar.tsx +20 -11
  218. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
  219. package/src/components/Select/Select.stories.mdx +151 -62
  220. package/src/components/Select/Select.test.tsx +56 -44
  221. package/src/components/Select/Select.tsx +125 -104
  222. package/src/components/Select/SelectTypes.tsx +5 -0
  223. package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
  224. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +53 -23
  225. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +14 -8
  226. package/src/components/SkeletonLoader/SkeletonLoader.tsx +80 -78
  227. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
  228. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
  229. package/src/components/Slider/Slider.stories.mdx +123 -41
  230. package/src/components/Slider/Slider.test.tsx +65 -17
  231. package/src/components/Slider/Slider.tsx +30 -23
  232. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
  233. package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
  234. package/src/components/StatusBadge/StatusBadge.test.tsx +19 -1
  235. package/src/components/StatusBadge/StatusBadge.tsx +25 -20
  236. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
  237. package/src/components/StructuredContent/StructuredContent.stories.mdx +229 -61
  238. package/src/components/StructuredContent/StructuredContent.test.tsx +162 -101
  239. package/src/components/StructuredContent/StructuredContent.tsx +98 -103
  240. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
  241. package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
  242. package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
  243. package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
  244. package/src/components/StyleGuide/ColorCard.tsx +4 -4
  245. package/src/components/StyleGuide/Colors.stories.mdx +1 -2
  246. package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
  247. package/src/components/StyleGuide/Forms.stories.mdx +27 -12
  248. package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
  249. package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
  250. package/src/components/StyleGuide/Typography.stories.mdx +47 -33
  251. package/src/components/Table/Table.stories.mdx +38 -11
  252. package/src/components/Table/Table.test.tsx +16 -1
  253. package/src/components/Table/Table.tsx +10 -8
  254. package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
  255. package/src/components/Tabs/Tabs.stories.mdx +59 -10
  256. package/src/components/Tabs/Tabs.test.tsx +29 -11
  257. package/src/components/Tabs/Tabs.tsx +28 -21
  258. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
  259. package/src/components/Template/Template.stories.mdx +73 -32
  260. package/src/components/Template/Template.test.tsx +68 -5
  261. package/src/components/Template/Template.tsx +89 -71
  262. package/src/components/Template/__snapshots__/Template.test.tsx.snap +195 -22
  263. package/src/components/Text/Text.stories.mdx +32 -15
  264. package/src/components/Text/Text.test.tsx +14 -11
  265. package/src/components/Text/Text.tsx +13 -16
  266. package/src/components/Text/TextTypes.tsx +1 -1
  267. package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
  268. package/src/components/TextInput/TextInput.stories.mdx +73 -27
  269. package/src/components/TextInput/TextInput.test.tsx +65 -50
  270. package/src/components/TextInput/TextInput.tsx +123 -115
  271. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
  272. package/src/components/Toggle/Toggle.stories.mdx +74 -26
  273. package/src/components/Toggle/Toggle.test.tsx +41 -10
  274. package/src/components/Toggle/Toggle.tsx +29 -26
  275. package/src/components/Toggle/{ToggleSizes.tsx → ToggleTypes.tsx} +1 -1
  276. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +191 -4
  277. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
  278. package/src/components/VideoPlayer/VideoPlayer.test.tsx +41 -6
  279. package/src/components/VideoPlayer/VideoPlayer.tsx +134 -120
  280. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
  281. package/src/docs/Chakra.stories.mdx +50 -9
  282. package/src/docs/Welcome.stories.mdx +168 -0
  283. package/src/{components/Card/CardTypes.tsx → helpers/enums.ts} +2 -2
  284. package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
  285. package/src/hooks/useCarouselStyles.stories.mdx +30 -0
  286. package/src/hooks/useCarouselStyles.ts +3 -2
  287. package/src/hooks/useNYPLTheme.stories.mdx +101 -0
  288. package/src/hooks/useNYPLTheme.ts +31 -7
  289. package/src/hooks/useWindowSize.stories.mdx +23 -0
  290. package/src/index.ts +11 -15
  291. package/src/styles/base/_place-holder.scss +1 -1
  292. package/src/theme/components/accordion.ts +7 -12
  293. package/src/theme/components/breadcrumb.ts +3 -0
  294. package/src/theme/components/button.ts +15 -7
  295. package/src/theme/components/card.ts +56 -36
  296. package/src/theme/components/checkbox.ts +10 -8
  297. package/src/theme/components/checkboxGroup.ts +4 -2
  298. package/src/theme/components/componentWrapper.ts +2 -2
  299. package/src/theme/components/customTable.ts +39 -31
  300. package/src/theme/components/fieldset.ts +1 -2
  301. package/src/theme/components/global.ts +29 -23
  302. package/src/theme/components/heading.ts +1 -1
  303. package/src/theme/components/helperErrorText.ts +1 -0
  304. package/src/theme/components/hero.ts +14 -16
  305. package/src/theme/components/icon.ts +5 -2
  306. package/src/theme/components/image.ts +1 -1
  307. package/src/theme/components/label.ts +4 -3
  308. package/src/theme/components/list.ts +73 -66
  309. package/src/theme/components/notification.ts +7 -7
  310. package/src/theme/components/pagination.ts +2 -5
  311. package/src/theme/components/progressIndicator.ts +3 -3
  312. package/src/theme/components/radio.ts +9 -9
  313. package/src/theme/components/radioGroup.ts +4 -2
  314. package/src/theme/components/select.ts +35 -16
  315. package/src/theme/components/skeletonLoader.ts +3 -3
  316. package/src/theme/components/slider.ts +8 -7
  317. package/src/theme/components/statusBadge.ts +2 -2
  318. package/src/theme/components/structuredContent.ts +66 -1
  319. package/src/theme/components/tabs.ts +2 -2
  320. package/src/theme/components/template.ts +9 -9
  321. package/src/theme/components/textInput.ts +13 -12
  322. package/src/theme/components/toggle.ts +43 -13
  323. package/src/theme/components/videoPlayer.ts +1 -1
  324. package/src/theme/foundations/colors.ts +1 -1
  325. package/src/theme/foundations/radii.ts +1 -0
  326. package/src/theme/foundations/spacing.ts +70 -22
  327. package/src/theme/foundations/typography.ts +2 -2
  328. package/src/utils/componentCategories.ts +28 -21
  329. package/dist/components/Card/CardTypes.d.ts +0 -4
  330. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +0 -4
  331. package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +0 -4
  332. package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
  333. package/dist/helpers/generateUUID.d.ts +0 -1
  334. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +0 -4
  335. package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +0 -4
  336. package/src/docs/Intro.stories.mdx +0 -53
  337. package/src/helpers/generateUUID.tsx +0 -5
@@ -9,14 +9,21 @@ import {
9
9
  import { withDesign } from "storybook-addon-designs";
10
10
 
11
11
  import Button from "../Button/Button";
12
- import Form from "../Form/Form";
12
+ import Form, { FormField } from "../Form/Form";
13
13
  import Select from "./Select";
14
- import { SelectTypes } from "./SelectTypes";
14
+ import { SelectTypes, LabelPositions } from "./SelectTypes";
15
15
  import { getCategory } from "../../utils/componentCategories";
16
16
  import DSProvider from "../../theme/provider";
17
17
  import { getStorybookEnumValues } from "../../utils/utils";
18
18
 
19
- export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
19
+ export const selectTypesEnumValues = getStorybookEnumValues(
20
+ SelectTypes,
21
+ "SelectTypes"
22
+ );
23
+ export const labelPositionsEnumValues = getStorybookEnumValues(
24
+ LabelPositions,
25
+ "LabelPositions"
26
+ );
20
27
 
21
28
  <Meta
22
29
  title={getCategory("Select")}
@@ -41,6 +48,11 @@ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
41
48
  isRequired: {
42
49
  table: { defaultValue: { summary: false } },
43
50
  },
51
+ labelPosition: {
52
+ control: { type: "select" },
53
+ table: { defaultValue: { summary: "LabelPositions.Default" } },
54
+ options: labelPositionsEnumValues.options,
55
+ },
44
56
  name: { control: false },
45
57
  key: { table: { disable: true } },
46
58
  onChange: { control: false },
@@ -51,10 +63,10 @@ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
51
63
  showLabel: {
52
64
  table: { defaultValue: { summary: true } },
53
65
  },
54
- showOptReqLabel: {
66
+ showRequiredLabel: {
55
67
  table: { defaultValue: { summary: true } },
56
68
  },
57
- type: {
69
+ selectType: {
58
70
  control: false,
59
71
  table: { defaultValue: { summary: "SelectTypes.Default" } },
60
72
  },
@@ -67,7 +79,20 @@ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
67
79
  | Component Version | DS Version |
68
80
  | ----------------- | ---------- |
69
81
  | Added | `0.7.0` |
70
- | Latest | `0.25.12` |
82
+ | Latest | `0.26.0` |
83
+
84
+ ## Table of Contents
85
+
86
+ - [Overview](#overview)
87
+ - [Component Props](#component-props)
88
+ - [Accessibility](#accessibility)
89
+ - [Option Elements](#option-elements)
90
+ - [Labelling Variations](#labelling-variations)
91
+ - [Errored](#errored)
92
+ - [Disabled](#disabled)
93
+ - [Getting Select Input Value](#getting-select-input-value)
94
+
95
+ ## Overview
71
96
 
72
97
  <Description of={Select} />
73
98
 
@@ -77,18 +102,7 @@ prop, regardless of the label visibility. Additionally, while the `id` prop is
77
102
  optional, a unique `id` attribute is necessary for accessibility. If the prop
78
103
  is left blank, a value will be generated for you.
79
104
 
80
- The `Select` component renders all the necessary wrapping and associated text
81
- elements, but the select options _need_ to be child `<option>` HTML elements.
82
-
83
- ```jsx
84
- <Select labelText="What is your favorite color?" name="color">
85
- <option value="red">Red</option>
86
- <option value="green">Green</option>
87
- <option value="blue">Blue</option>
88
- <option value="black">Black</option>
89
- <option value="white">White</option>
90
- </Select>
91
- ```
105
+ ## Component Props
92
106
 
93
107
  <Canvas withToolbar>
94
108
  <Story
@@ -101,18 +115,22 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
101
115
  isDisabled: false,
102
116
  isInvalid: false,
103
117
  isRequired: false,
118
+ labelPosition: "LabelPositions.Default",
104
119
  labelText: "What is your favorite color?",
105
120
  name: "color",
106
121
  onChange: undefined,
107
122
  showHelperInvalidText: undefined,
108
123
  showLabel: true,
109
- showOptReqLabel: true,
110
- type: SelectTypes.Default,
124
+ showRequiredLabel: true,
125
+ selectType: SelectTypes.Default,
111
126
  value: undefined,
112
127
  }}
113
128
  >
114
129
  {(args) => (
115
- <Select {...args}>
130
+ <Select
131
+ {...args}
132
+ labelPosition={labelPositionsEnumValues.getValue(args.labelPosition)}
133
+ >
116
134
  <option value="red">Red</option>
117
135
  <option value="green">Green</option>
118
136
  <option value="blue">Blue</option>
@@ -125,19 +143,60 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
125
143
 
126
144
  <ArgsTable story="Select with Controls" />
127
145
 
146
+ ## Accessibility
147
+
148
+ The `Select` component renders an HTML `<select>` element which is accessible.
149
+ It's the developer's responsibility to ensure that the appropriate `<option>`
150
+ elements are provided as children. Internally, a `Label` is associated with the
151
+ `<select>` element.
152
+
153
+ When `showLabel` is set to false, the `labelText` value will be set to the
154
+ `<select>`'s `aria-label` attribute.
155
+
156
+ Resources:
157
+
158
+ - [MDN select: The HTML Select element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select)
159
+ - [Chakra UI Select](https://chakra-ui.com/docs/components/form/select)
160
+
161
+ ## Option Elements
162
+
163
+ The `Select` component renders all the necessary wrapping and associated text
164
+ elements, but the select options _need_ to be child `<option>` HTML elements.
165
+
166
+ ```jsx
167
+ <Select id="select" labelText="What is your favorite color?" name="color">
168
+ <option value="red">Red</option>
169
+ <option value="green">Green</option>
170
+ <option value="blue">Blue</option>
171
+ <option value="black">Black</option>
172
+ <option value="white">White</option>
173
+ </Select>
174
+ ```
175
+
176
+ There are two NYPL best practices to consider when using the `Select` component
177
+ and `option` HTML elements:
178
+
179
+ - Use no more than 10 options. If more than 10 options are needed, an
180
+ auto-complete text input is a good alternative.
181
+ - Use at least four options. If fewer than three options are needed, a radio
182
+ button group is a good alternative.
183
+
128
184
  ## Labelling Variations
129
185
 
130
- A Select can be rendered with or without a visible label. When `showLabel` is
131
- set to `false`, an `aria-label` attribute is added to the select input to
132
- maintain accessibility. If the component needs to be required, the
133
- `showOptReqLabel` prop can be used to show or hide the "Required"/"Optional"
134
- text within the `label` element.
186
+ A Select can be rendered with or without a visible label. If the label is visible,
187
+ it can be displayed above (the default) or inline with the select input using the
188
+ `labelPosition` prop. Note that the label will only display inline when the device
189
+ width exceeds the `--nypl-breakpoint-medium` breakpoint, or 600px. When `showLabel`
190
+ is set to `false`, an `aria-label` attribute is added to the select input to maintain
191
+ accessibility. If the component needs to be required, the `showRequiredLabel` prop
192
+ can be used to show or hide the "Required" text within the `label` element.
135
193
 
136
194
  <Canvas>
137
195
  <Story name="Labelling Variations">
138
196
  <VStack align="stretch" spacing={8}>
139
197
  <Select
140
198
  helperText="Display the label"
199
+ id="label-example1"
141
200
  labelText="What is your favorite color?"
142
201
  name="color"
143
202
  >
@@ -149,6 +208,7 @@ text within the `label` element.
149
208
  </Select>
150
209
  <Select
151
210
  helperText="Do not display the label"
211
+ id="label-example2"
152
212
  labelText="What is your favorite color?"
153
213
  name="color"
154
214
  showLabel={false}
@@ -160,7 +220,8 @@ text within the `label` element.
160
220
  <option value="white">White</option>
161
221
  </Select>
162
222
  <Select
163
- helperText="Display the Required/Optional text"
223
+ helperText="Display the Required text"
224
+ id="label-example3"
164
225
  isRequired
165
226
  labelText="What is your favorite color?"
166
227
  name="color"
@@ -172,11 +233,25 @@ text within the `label` element.
172
233
  <option value="white">White</option>
173
234
  </Select>
174
235
  <Select
175
- helperText="Do not display the Required/Optional text"
236
+ helperText="Do not display the Required text"
237
+ id="label-example4"
176
238
  isRequired
177
239
  labelText="What is your favorite color?"
178
240
  name="color"
179
- showOptReqLabel={false}
241
+ showRequiredLabel={false}
242
+ >
243
+ <option value="red">Red</option>
244
+ <option value="green">Green</option>
245
+ <option value="blue">Blue</option>
246
+ <option value="black">Black</option>
247
+ <option value="white">White</option>
248
+ </Select>
249
+ <Select
250
+ helperText="Display the label inline"
251
+ isRequired
252
+ labelText="What is your favorite color?"
253
+ name="color"
254
+ labelPosition={LabelPositions.Inline}
180
255
  >
181
256
  <option value="red">Red</option>
182
257
  <option value="green">Green</option>
@@ -194,6 +269,7 @@ text within the `label` element.
194
269
  <DSProvider>
195
270
  <Select
196
271
  helperText="This is the helper text."
272
+ id="errored"
197
273
  invalidText="This is the error text :("
198
274
  isInvalid
199
275
  labelText="What is your favorite color?"
@@ -214,6 +290,7 @@ text within the `label` element.
214
290
  <DSProvider>
215
291
  <Select
216
292
  helperText="This is the helper text."
293
+ id="disabled"
217
294
  invalidText="This is the error text :("
218
295
  isDisabled
219
296
  labelText="What is your favorite color?"
@@ -228,14 +305,14 @@ text within the `label` element.
228
305
  </DSProvider>
229
306
  </Canvas>
230
307
 
231
- ## Getting Select Data Value
308
+ ## Getting Select Input Value
232
309
 
233
310
  ### Controlled Component using `value` and `onChange` props
234
311
 
235
- If your application uses controlled React components and the DS `Select`
236
- component must be controlled, you can pass and extract the value through the
237
- `value` and `onChange` props. This will be called every time a new `option`
238
- value is selected.
312
+ If your application uses controlled React components and the Reservoir Design
313
+ System (DS) `Select` component must be controlled, you can pass and extract the
314
+ value through the `value` and `onChange` props. This will be called every time
315
+ a new `option` value is selected.
239
316
 
240
317
  Try it out: open up the browser's console to see new values being logged on
241
318
  each change.
@@ -251,6 +328,7 @@ export function SelectControlledExample() {
251
328
  return (
252
329
  <Select
253
330
  helperText="This is the helper text."
331
+ id="example-1"
254
332
  labelText="What is your favorite color?"
255
333
  name="color"
256
334
  onChange={onChange}
@@ -276,6 +354,7 @@ export function SelectControlledExample() {
276
354
  return (
277
355
  <Select
278
356
  helperText="This is the helper text."
357
+ id="example-1"
279
358
  labelText="What is your favorite color?"
280
359
  name="color"
281
360
  onChange={onChange}
@@ -314,20 +393,25 @@ export function SelectUncontrolledExample() {
314
393
  console.log("Using uncontrolled ref:", selectValue);
315
394
  };
316
395
  return (
317
- <Form>
318
- <Select
319
- helperText="This is the helper text."
320
- labelText="What is your favorite color?"
321
- name="color"
322
- ref={selectRef}
323
- >
324
- <option value="red">Red</option>
325
- <option value="green">Green</option>
326
- <option value="blue">Blue</option>
327
- <option value="black">Black</option>
328
- <option value="white">White</option>
329
- </Select>
330
- <Button onClick={onSubmit}>Submit</Button>
396
+ <Form id="form">
397
+ <FormField>
398
+ <Select
399
+ helperText="This is the helper text."
400
+ id="example-2"
401
+ labelText="What is your favorite color?"
402
+ name="color"
403
+ ref={selectRef}
404
+ >
405
+ <option value="red">Red</option>
406
+ <option value="green">Green</option>
407
+ <option value="blue">Blue</option>
408
+ <option value="black">Black</option>
409
+ <option value="white">White</option>
410
+ </Select>
411
+ <Button id="submit" onClick={onSubmit}>
412
+ Submit
413
+ </Button>
414
+ </FormField>
331
415
  </Form>
332
416
  );
333
417
  }
@@ -340,20 +424,25 @@ export function SelectUncontrolledExample() {
340
424
  console.log("Using uncontrolled ref:", selectValue);
341
425
  };
342
426
  return (
343
- <Form>
344
- <Select
345
- helperText="This is the helper text."
346
- labelText="What is your favorite color?"
347
- name="color"
348
- ref={selectRef}
349
- >
350
- <option value="red">Red</option>
351
- <option value="green">Green</option>
352
- <option value="blue">Blue</option>
353
- <option value="black">Black</option>
354
- <option value="white">White</option>
355
- </Select>
356
- <Button onClick={onSubmit}>Submit</Button>
427
+ <Form id="form">
428
+ <FormField>
429
+ <Select
430
+ helperText="This is the helper text."
431
+ id="example-2"
432
+ labelText="What is your favorite color?"
433
+ name="color"
434
+ ref={selectRef}
435
+ >
436
+ <option value="red">Red</option>
437
+ <option value="green">Green</option>
438
+ <option value="blue">Blue</option>
439
+ <option value="black">Black</option>
440
+ <option value="white">White</option>
441
+ </Select>
442
+ <Button id="submit" onClick={onSubmit}>
443
+ Submit
444
+ </Button>
445
+ </FormField>
357
446
  </Form>
358
447
  );
359
448
  }
@@ -4,10 +4,12 @@ import { axe } from "jest-axe";
4
4
  import renderer from "react-test-renderer";
5
5
 
6
6
  import Select from "./Select";
7
+ import { LabelPositions } from "./SelectTypes";
7
8
 
8
9
  const baseProps = {
9
- labelText: "What is your favorite color?",
10
10
  helperText: "This is the helper text.",
11
+ id: "select",
12
+ labelText: "What is your favorite color?",
11
13
  name: "color",
12
14
  };
13
15
  const baseOptions = (
@@ -79,26 +81,17 @@ describe("Select", () => {
79
81
  ).toHaveAttribute("aria-describedby", `${id}-helperText`);
80
82
  });
81
83
 
82
- it("renders required or optional text in the label", () => {
83
- const { rerender } = render(<Select {...baseProps}>{baseOptions}</Select>);
84
- expect(screen.getByText(/Optional/i)).toBeInTheDocument();
85
-
86
- rerender(
84
+ it("renders '(Required)' text in the label", () => {
85
+ const { rerender } = render(
87
86
  <Select {...baseProps} isRequired>
88
87
  {baseOptions}
89
88
  </Select>
90
89
  );
91
- expect(screen.getByText(/Required/i)).toBeInTheDocument();
92
90
 
93
- rerender(
94
- <Select {...baseProps} showOptReqLabel={false}>
95
- {baseOptions}
96
- </Select>
97
- );
98
- expect(screen.queryByText(/Optional/i)).not.toBeInTheDocument();
91
+ expect(screen.getByText(/Required/i)).toBeInTheDocument();
99
92
 
100
93
  rerender(
101
- <Select {...baseProps} isRequired showOptReqLabel={false}>
94
+ <Select {...baseProps} isRequired showRequiredLabel={false}>
102
95
  {baseOptions}
103
96
  </Select>
104
97
  );
@@ -120,9 +113,9 @@ describe("Select", () => {
120
113
  ).toHaveAttribute("required");
121
114
  });
122
115
 
123
- it("should not render a required label if 'showOptReqLabel' flag is false, but still render the label", () => {
116
+ it("should not render a required label if 'showRequiredLabel' flag is false, but still render the label", () => {
124
117
  render(
125
- <Select {...baseProps} isRequired showOptReqLabel={false}>
118
+ <Select {...baseProps} isRequired showRequiredLabel={false}>
126
119
  {baseOptions}
127
120
  </Select>
128
121
  );
@@ -222,44 +215,22 @@ describe("Select", () => {
222
215
  expect(value).toEqual("white");
223
216
  });
224
217
 
225
- it("should throw warning when fewer than 4 options", () => {
226
- const warn = jest.spyOn(console, "warn");
227
- render(
228
- <Select {...baseProps}>
229
- <option value="red">Red</option>
230
- </Select>
231
- );
232
- expect(warn).toHaveBeenCalledWith(
233
- "NYPL DS recommends that <select> fields have at least 4 options; a radio button group is a good alternative for 3 or fewer options."
234
- );
235
- });
236
-
237
- it("should throw warning when there are more than 10 options", () => {
218
+ it("logs a warning when there is no `id` passed", () => {
238
219
  const warn = jest.spyOn(console, "warn");
239
220
  render(
240
- <Select {...baseProps}>
241
- <option aria-selected={false}>test1</option>
242
- <option aria-selected={false}>test2</option>
243
- <option aria-selected={false}>test3</option>
244
- <option aria-selected={false}>test4</option>
245
- <option aria-selected={false}>test5</option>
246
- <option aria-selected={false}>test6</option>
247
- <option aria-selected={false}>test7</option>
248
- <option aria-selected={false}>test8</option>
249
- <option aria-selected={false}>test9</option>
250
- <option aria-selected={false}>test10</option>
251
- <option aria-selected={false}>test11</option>
221
+ // @ts-ignore: Typescript complains when a required prop is not passed, but
222
+ // here we don't want to pass the required prop to make sure the warning appears.
223
+ <Select labelText="What is your favorite color?" name="color">
224
+ {baseOptions}
252
225
  </Select>
253
226
  );
254
-
255
227
  expect(warn).toHaveBeenCalledWith(
256
- "NYPL DS recommends that <select> fields have no more than 10 options; an auto-complete text input is a good alternative for 11 or more options."
228
+ "NYPL Reservoir Select: This component's required `id` prop was not passed."
257
229
  );
258
230
  });
259
231
 
260
232
  it("Renders the UI snapshot correctly", () => {
261
233
  const siblings = ["Kendall", "Shiv", "Connor", "Roman", "Tom"];
262
-
263
234
  const options = siblings.map((sibling) => (
264
235
  <option key={sibling}>{sibling}</option>
265
236
  ));
@@ -324,6 +295,19 @@ describe("Select", () => {
324
295
  </Select>
325
296
  )
326
297
  .toJSON();
298
+ const withLabelInline = renderer
299
+ .create(
300
+ <Select
301
+ id="select"
302
+ isRequired
303
+ labelPosition={LabelPositions.Inline}
304
+ labelText="Which Succession sibling are you?"
305
+ name="succession-sibling"
306
+ >
307
+ {options}
308
+ </Select>
309
+ )
310
+ .toJSON();
327
311
  const hasOnChange = renderer
328
312
  .create(
329
313
  <Select
@@ -336,12 +320,40 @@ describe("Select", () => {
336
320
  </Select>
337
321
  )
338
322
  .toJSON();
323
+ const withChakraProps = renderer
324
+ .create(
325
+ <Select
326
+ id="chakra"
327
+ labelText="Which Succession sibling are you?"
328
+ name="succession-sibling"
329
+ p="20px"
330
+ color="ui.error.primary"
331
+ >
332
+ {options}
333
+ </Select>
334
+ )
335
+ .toJSON();
336
+ const withOtherProps = renderer
337
+ .create(
338
+ <Select
339
+ id="props"
340
+ labelText="Which Succession sibling are you?"
341
+ name="succession-sibling"
342
+ data-testid="props"
343
+ >
344
+ {options}
345
+ </Select>
346
+ )
347
+ .toJSON();
339
348
 
340
349
  expect(primary).toMatchSnapshot();
341
350
  expect(disabled).toMatchSnapshot();
342
351
  expect(withInvalidText).toMatchSnapshot();
343
352
  expect(withHelperText).toMatchSnapshot();
344
353
  expect(required).toMatchSnapshot();
354
+ expect(withLabelInline).toMatchSnapshot();
345
355
  expect(hasOnChange).toMatchSnapshot();
356
+ expect(withChakraProps).toMatchSnapshot();
357
+ expect(withOtherProps).toMatchSnapshot();
346
358
  });
347
359
  });