@nypl/design-system-react-components 1.0.1 → 1.0.2

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 (396) hide show
  1. package/CHANGELOG.md +1428 -3
  2. package/README.md +391 -3
  3. package/dist/__tests__/fileMock.d.ts +4 -0
  4. package/dist/__tests__/setup.d.ts +2 -0
  5. package/{lib/stories/0-Welcome.stories.d.ts → dist/__tests__/utils/utils.test.d.ts} +1 -1
  6. package/dist/components/Accordion/Accordion.d.ts +21 -0
  7. package/dist/components/Autosuggest/Autosuggest.stories.d.ts +4 -0
  8. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +18 -0
  9. package/dist/components/Button/Button.d.ts +25 -0
  10. package/dist/components/ButtonGroup/ButtonGroup.d.ts +22 -0
  11. package/dist/components/Card/Card.d.ts +49 -0
  12. package/dist/components/Checkbox/Checkbox.d.ts +47 -0
  13. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +49 -0
  14. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +29 -0
  15. package/dist/components/DatePicker/DatePicker.d.ts +81 -0
  16. package/dist/components/Fieldset/Fieldset.d.ts +22 -0
  17. package/dist/components/Form/Form.d.ts +29 -0
  18. package/dist/components/Grid/SimpleGrid.d.ts +17 -0
  19. package/dist/components/Heading/Heading.d.ts +27 -0
  20. package/dist/components/HelperErrorText/HelperErrorText.d.ts +29 -0
  21. package/dist/components/Hero/Hero.d.ts +40 -0
  22. package/dist/components/HorizontalRule/HorizontalRule.d.ts +11 -0
  23. package/dist/components/Icons/Icon.d.ts +37 -0
  24. package/dist/components/Icons/IconSvgs.d.ts +33 -0
  25. package/dist/components/Image/Image.d.ts +61 -0
  26. package/dist/components/Label/Label.d.ts +20 -0
  27. package/dist/components/Link/Link.d.ts +20 -0
  28. package/dist/components/List/List.d.ts +35 -0
  29. package/dist/components/Logo/Logo.d.ts +26 -0
  30. package/dist/components/Logo/LogoSvgs.d.ts +46 -0
  31. package/dist/components/Modal/Modal.d.ts +33 -0
  32. package/dist/components/Notification/Notification.d.ts +50 -0
  33. package/dist/components/Pagination/Pagination.d.ts +27 -0
  34. package/dist/components/Placeholder/Placeholder.d.ts +10 -0
  35. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +30 -0
  36. package/dist/components/Radio/Radio.d.ts +43 -0
  37. package/dist/components/RadioGroup/RadioGroup.d.ts +51 -0
  38. package/dist/components/SearchBar/SearchBar.d.ts +61 -0
  39. package/dist/components/Select/Select.d.ts +57 -0
  40. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +39 -0
  41. package/dist/components/SkipNavigation/SkipNavigation.d.ts +17 -0
  42. package/dist/components/Slider/Slider.d.ts +60 -0
  43. package/dist/components/StatusBadge/StatusBadge.d.ts +16 -0
  44. package/dist/components/StructuredContent/StructuredContent.d.ts +28 -0
  45. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  46. package/dist/components/Table/Table.d.ts +29 -0
  47. package/dist/components/Tabs/Tabs.d.ts +26 -0
  48. package/dist/components/Template/Template.d.ts +126 -0
  49. package/dist/components/Text/Text.d.ts +16 -0
  50. package/dist/components/TextInput/TextInput.d.ts +78 -0
  51. package/dist/components/Toggle/Toggle.d.ts +42 -0
  52. package/dist/components/VideoPlayer/VideoPlayer.d.ts +38 -0
  53. package/dist/design-system-react-components.cjs.development.js +11305 -0
  54. package/dist/design-system-react-components.cjs.development.js.map +1 -0
  55. package/dist/design-system-react-components.cjs.production.min.js +2 -0
  56. package/dist/design-system-react-components.cjs.production.min.js.map +1 -0
  57. package/dist/design-system-react-components.esm.js +11150 -0
  58. package/dist/design-system-react-components.esm.js.map +1 -0
  59. package/dist/helpers/types.d.ts +1 -0
  60. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  61. package/dist/hooks/useCarouselStyles.d.ts +17 -0
  62. package/dist/hooks/useNYPLTheme.d.ts +66 -0
  63. package/dist/hooks/useWindowSize.d.ts +10 -0
  64. package/dist/index.d.ts +48 -0
  65. package/dist/index.js +8 -0
  66. package/dist/resources.scss +386 -0
  67. package/dist/styles.css +3 -0
  68. package/dist/theme/components/accordion.d.ts +20 -0
  69. package/dist/theme/components/breadcrumb.d.ts +105 -0
  70. package/dist/theme/components/button.d.ts +120 -0
  71. package/dist/theme/components/buttonGroup.d.ts +11 -0
  72. package/dist/theme/components/card.d.ts +381 -0
  73. package/dist/theme/components/checkbox.d.ts +95 -0
  74. package/dist/theme/components/checkboxGroup.d.ts +14 -0
  75. package/dist/theme/components/componentWrapper.d.ts +12 -0
  76. package/dist/theme/components/customTable.d.ts +136 -0
  77. package/dist/theme/components/datePicker.d.ts +16 -0
  78. package/dist/theme/components/fieldset.d.ts +20 -0
  79. package/dist/theme/components/global.d.ts +73 -0
  80. package/dist/theme/components/globalMixins.d.ts +23 -0
  81. package/dist/theme/components/heading.d.ts +160 -0
  82. package/dist/theme/components/helperErrorText.d.ts +12 -0
  83. package/dist/theme/components/hero.d.ts +499 -0
  84. package/dist/theme/components/horizontalRule.d.ts +15 -0
  85. package/dist/theme/components/icon.d.ts +47755 -0
  86. package/dist/theme/components/image.d.ts +590 -0
  87. package/dist/theme/components/label.d.ts +18 -0
  88. package/dist/theme/components/link.d.ts +62 -0
  89. package/dist/theme/components/list.d.ts +182 -0
  90. package/dist/theme/components/logo.d.ts +477 -0
  91. package/dist/theme/components/notification.d.ts +95 -0
  92. package/dist/theme/components/pagination.d.ts +16 -0
  93. package/dist/theme/components/progressIndicator.d.ts +52 -0
  94. package/dist/theme/components/radio.d.ts +99 -0
  95. package/dist/theme/components/radioGroup.d.ts +14 -0
  96. package/dist/theme/components/searchBar.d.ts +18 -0
  97. package/dist/theme/components/select.d.ts +87 -0
  98. package/dist/theme/components/skeletonLoader.d.ts +102 -0
  99. package/dist/theme/components/skipNavigation.d.ts +25 -0
  100. package/dist/theme/components/slider.d.ts +59 -0
  101. package/dist/theme/components/statusBadge.d.ts +25 -0
  102. package/dist/theme/components/structuredContent.d.ts +226 -0
  103. package/dist/theme/components/tabs.d.ts +136 -0
  104. package/dist/theme/components/template.d.ts +105 -0
  105. package/dist/theme/components/text.d.ts +26 -0
  106. package/dist/theme/components/textInput.d.ts +124 -0
  107. package/dist/theme/components/toggle.d.ts +92 -0
  108. package/dist/theme/components/videoPlayer.d.ts +40 -0
  109. package/dist/theme/foundations/breakpoints.d.ts +23 -0
  110. package/dist/theme/foundations/colors.d.ts +3 -0
  111. package/dist/theme/foundations/global.d.ts +58 -0
  112. package/dist/theme/foundations/radii.d.ts +6 -0
  113. package/dist/theme/foundations/shadows.d.ts +4 -0
  114. package/dist/theme/foundations/spacing.d.ts +82 -0
  115. package/dist/theme/foundations/typography.d.ts +8 -0
  116. package/dist/theme/index.d.ts +20 -0
  117. package/dist/theme/provider.d.ts +3 -0
  118. package/dist/theme/types.d.ts +1 -0
  119. package/dist/utils/componentCategories.d.ts +1 -0
  120. package/dist/utils/interfaces.d.ts +5 -0
  121. package/dist/utils/utils.d.ts +31 -0
  122. package/package.json +133 -20
  123. package/src/__tests__/fileMock.ts +6 -0
  124. package/src/__tests__/setup.ts +27 -0
  125. package/src/__tests__/utils/utils.test.ts +18 -0
  126. package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +42 -0
  127. package/src/components/Accordion/Accordion.stories.mdx +333 -0
  128. package/src/components/Accordion/Accordion.test.tsx +237 -0
  129. package/src/components/Accordion/Accordion.tsx +137 -0
  130. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +734 -0
  131. package/src/components/Autosuggest/Autosuggest.stories.mdx +75 -0
  132. package/src/components/Autosuggest/Autosuggest.stories.tsx +211 -0
  133. package/src/components/Autosuggest/_Autosuggest.scss +51 -0
  134. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +231 -0
  135. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +144 -0
  136. package/src/components/Breadcrumbs/Breadcrumbs.tsx +98 -0
  137. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +695 -0
  138. package/src/components/Button/Button.stories.mdx +320 -0
  139. package/src/components/Button/Button.test.tsx +184 -0
  140. package/src/components/Button/Button.tsx +95 -0
  141. package/src/components/Button/__snapshots__/Button.test.tsx.snap +106 -0
  142. package/src/components/ButtonGroup/ButtonGroup.stories.mdx +178 -0
  143. package/src/components/ButtonGroup/ButtonGroup.test.tsx +141 -0
  144. package/src/components/ButtonGroup/ButtonGroup.tsx +100 -0
  145. package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +117 -0
  146. package/src/components/Card/Card.stories.mdx +1041 -0
  147. package/src/components/Card/Card.test.tsx +388 -0
  148. package/src/components/Card/Card.tsx +346 -0
  149. package/src/components/Card/__snapshots__/Card.test.tsx.snap +568 -0
  150. package/src/components/Chakra/Box.stories.mdx +52 -0
  151. package/src/components/Chakra/Center.stories.mdx +96 -0
  152. package/src/components/Chakra/Flex.stories.mdx +111 -0
  153. package/src/components/Chakra/Grid.stories.mdx +89 -0
  154. package/src/components/Chakra/Stack.stories.mdx +109 -0
  155. package/src/components/Checkbox/Checkbox.stories.mdx +243 -0
  156. package/src/components/Checkbox/Checkbox.test.tsx +350 -0
  157. package/src/components/Checkbox/Checkbox.tsx +152 -0
  158. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +661 -0
  159. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +462 -0
  160. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +492 -0
  161. package/src/components/CheckboxGroup/CheckboxGroup.tsx +173 -0
  162. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1842 -0
  163. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +163 -0
  164. package/src/components/ComponentWrapper/ComponentWrapper.tsx +76 -0
  165. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +103 -0
  166. package/src/components/DatePicker/DatePicker.stories.mdx +452 -0
  167. package/src/components/DatePicker/DatePicker.test.tsx +940 -0
  168. package/src/components/DatePicker/DatePicker.tsx +450 -0
  169. package/src/components/DatePicker/_DatePicker.scss +100 -0
  170. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +908 -0
  171. package/src/components/Fieldset/Fieldset.stories.mdx +96 -0
  172. package/src/components/Fieldset/Fieldset.test.tsx +155 -0
  173. package/src/components/Fieldset/Fieldset.tsx +55 -0
  174. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +89 -0
  175. package/src/components/Form/Form.stories.mdx +426 -0
  176. package/src/components/Form/Form.test.tsx +234 -0
  177. package/src/components/Form/Form.tsx +124 -0
  178. package/src/components/Form/__snapshots__/Form.test.tsx.snap +115 -0
  179. package/src/components/Grid/SimpleGrid.stories.mdx +336 -0
  180. package/src/components/Grid/SimpleGrid.test.tsx +79 -0
  181. package/src/components/Grid/SimpleGrid.tsx +49 -0
  182. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +23 -0
  183. package/src/components/Heading/Heading.stories.mdx +187 -0
  184. package/src/components/Heading/Heading.test.tsx +171 -0
  185. package/src/components/Heading/Heading.tsx +104 -0
  186. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +90 -0
  187. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +172 -0
  188. package/src/components/HelperErrorText/HelperErrorText.test.tsx +114 -0
  189. package/src/components/HelperErrorText/HelperErrorText.tsx +62 -0
  190. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +93 -0
  191. package/src/components/Hero/Hero.stories.mdx +378 -0
  192. package/src/components/Hero/Hero.test.tsx +611 -0
  193. package/src/components/Hero/Hero.tsx +203 -0
  194. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +379 -0
  195. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +73 -0
  196. package/src/components/HorizontalRule/HorizontalRule.test.tsx +54 -0
  197. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -0
  198. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +44 -0
  199. package/src/components/Icons/Icon.stories.mdx +413 -0
  200. package/src/components/Icons/Icon.test.tsx +120 -0
  201. package/src/components/Icons/Icon.tsx +187 -0
  202. package/src/components/Icons/IconSvgs.tsx +64 -0
  203. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  204. package/src/components/Image/Image.stories.mdx +332 -0
  205. package/src/components/Image/Image.test.tsx +155 -0
  206. package/src/components/Image/Image.tsx +171 -0
  207. package/src/components/Image/__snapshots__/Image.test.tsx.snap +269 -0
  208. package/src/components/Label/Label.stories.mdx +100 -0
  209. package/src/components/Label/Label.test.tsx +116 -0
  210. package/src/components/Label/Label.tsx +55 -0
  211. package/src/components/Label/__snapshots__/Label.test.tsx.snap +45 -0
  212. package/src/components/Link/Link.stories.mdx +249 -0
  213. package/src/components/Link/Link.test.tsx +224 -0
  214. package/src/components/Link/Link.tsx +178 -0
  215. package/src/components/Link/__snapshots__/Link.test.tsx.snap +286 -0
  216. package/src/components/List/List.stories.mdx +393 -0
  217. package/src/components/List/List.test.tsx +265 -0
  218. package/src/components/List/List.tsx +156 -0
  219. package/src/components/List/__snapshots__/List.test.tsx.snap +213 -0
  220. package/src/components/Logo/Logo.stories.mdx +295 -0
  221. package/src/components/Logo/Logo.test.tsx +116 -0
  222. package/src/components/Logo/Logo.tsx +151 -0
  223. package/src/components/Logo/LogoSvgs.tsx +90 -0
  224. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +142 -0
  225. package/src/components/Modal/Modal.stories.mdx +294 -0
  226. package/src/components/Modal/Modal.test.tsx +157 -0
  227. package/src/components/Modal/Modal.tsx +154 -0
  228. package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +25 -0
  229. package/src/components/Notification/Notification.stories.mdx +358 -0
  230. package/src/components/Notification/Notification.test.tsx +279 -0
  231. package/src/components/Notification/Notification.tsx +224 -0
  232. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +525 -0
  233. package/src/components/Pagination/Pagination.stories.mdx +184 -0
  234. package/src/components/Pagination/Pagination.test.tsx +419 -0
  235. package/src/components/Pagination/Pagination.tsx +269 -0
  236. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +544 -0
  237. package/src/components/Placeholder/Placeholder.tsx +19 -0
  238. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +360 -0
  239. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +298 -0
  240. package/src/components/ProgressIndicator/ProgressIndicator.tsx +132 -0
  241. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +434 -0
  242. package/src/components/Radio/Radio.stories.mdx +216 -0
  243. package/src/components/Radio/Radio.test.tsx +247 -0
  244. package/src/components/Radio/Radio.tsx +119 -0
  245. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +451 -0
  246. package/src/components/RadioGroup/RadioGroup.stories.mdx +479 -0
  247. package/src/components/RadioGroup/RadioGroup.test.tsx +471 -0
  248. package/src/components/RadioGroup/RadioGroup.tsx +171 -0
  249. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1550 -0
  250. package/src/components/SearchBar/SearchBar.stories.mdx +518 -0
  251. package/src/components/SearchBar/SearchBar.test.tsx +435 -0
  252. package/src/components/SearchBar/SearchBar.tsx +210 -0
  253. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1049 -0
  254. package/src/components/Select/Select.stories.mdx +439 -0
  255. package/src/components/Select/Select.test.tsx +358 -0
  256. package/src/components/Select/Select.tsx +183 -0
  257. package/src/components/Select/__snapshots__/Select.test.tsx.snap +895 -0
  258. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +142 -0
  259. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +116 -0
  260. package/src/components/SkeletonLoader/SkeletonLoader.tsx +123 -0
  261. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +898 -0
  262. package/src/components/SkipNavigation/SkipNavigation.stories.mdx +90 -0
  263. package/src/components/SkipNavigation/SkipNavigation.test.tsx +63 -0
  264. package/src/components/SkipNavigation/SkipNavigation.tsx +51 -0
  265. package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +130 -0
  266. package/src/components/Slider/Slider.stories.mdx +628 -0
  267. package/src/components/Slider/Slider.test.tsx +736 -0
  268. package/src/components/Slider/Slider.tsx +322 -0
  269. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +2186 -0
  270. package/src/components/StatusBadge/StatusBadge.stories.mdx +109 -0
  271. package/src/components/StatusBadge/StatusBadge.test.tsx +70 -0
  272. package/src/components/StatusBadge/StatusBadge.tsx +35 -0
  273. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +47 -0
  274. package/src/components/StructuredContent/StructuredContent.stories.mdx +567 -0
  275. package/src/components/StructuredContent/StructuredContent.test.tsx +435 -0
  276. package/src/components/StructuredContent/StructuredContent.tsx +139 -0
  277. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +368 -0
  278. package/src/components/StyleGuide/Bidirectionality.stories.mdx +206 -0
  279. package/src/components/StyleGuide/Breakpoints.stories.mdx +55 -0
  280. package/src/components/StyleGuide/Buttons.stories.mdx +194 -0
  281. package/src/components/StyleGuide/ColorCard.tsx +43 -0
  282. package/src/components/StyleGuide/Colors.stories.mdx +201 -0
  283. package/src/components/StyleGuide/DesignTokens.stories.mdx +193 -0
  284. package/src/components/StyleGuide/Forms.stories.mdx +94 -0
  285. package/src/components/StyleGuide/Iconography.stories.mdx +142 -0
  286. package/src/components/StyleGuide/Spacing.stories.mdx +116 -0
  287. package/src/components/StyleGuide/Typography.stories.mdx +419 -0
  288. package/src/components/Table/Table.stories.mdx +272 -0
  289. package/src/components/Table/Table.test.tsx +241 -0
  290. package/src/components/Table/Table.tsx +152 -0
  291. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1703 -0
  292. package/src/components/Tabs/Tabs.stories.mdx +338 -0
  293. package/src/components/Tabs/Tabs.test.tsx +298 -0
  294. package/src/components/Tabs/Tabs.tsx +264 -0
  295. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +584 -0
  296. package/src/components/Template/Template.stories.mdx +695 -0
  297. package/src/components/Template/Template.test.tsx +309 -0
  298. package/src/components/Template/Template.tsx +326 -0
  299. package/src/components/Template/__snapshots__/Template.test.tsx.snap +342 -0
  300. package/src/components/Text/Text.stories.mdx +103 -0
  301. package/src/components/Text/Text.test.tsx +63 -0
  302. package/src/components/Text/Text.tsx +50 -0
  303. package/src/components/Text/__snapshots__/Text.test.tsx.snap +50 -0
  304. package/src/components/TextInput/TextInput.stories.mdx +268 -0
  305. package/src/components/TextInput/TextInput.test.tsx +451 -0
  306. package/src/components/TextInput/TextInput.tsx +240 -0
  307. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +274 -0
  308. package/src/components/Toggle/Toggle.stories.mdx +237 -0
  309. package/src/components/Toggle/Toggle.test.tsx +170 -0
  310. package/src/components/Toggle/Toggle.tsx +128 -0
  311. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +470 -0
  312. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +212 -0
  313. package/src/components/VideoPlayer/VideoPlayer.test.tsx +308 -0
  314. package/src/components/VideoPlayer/VideoPlayer.tsx +188 -0
  315. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +192 -0
  316. package/src/docs/Chakra.stories.mdx +563 -0
  317. package/src/docs/Welcome.stories.mdx +148 -0
  318. package/src/helpers/types.ts +1 -0
  319. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  320. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  321. package/src/hooks/useCarouselStyles.stories.mdx +30 -0
  322. package/src/hooks/useCarouselStyles.ts +35 -0
  323. package/src/hooks/useNYPLTheme.stories.mdx +98 -0
  324. package/src/hooks/useNYPLTheme.ts +91 -0
  325. package/src/hooks/useWindowSize.stories.mdx +23 -0
  326. package/src/hooks/useWindowSize.ts +40 -0
  327. package/src/index.ts +136 -0
  328. package/src/resources.scss +6 -0
  329. package/src/styles/base/_01-breakpoints.scss +27 -0
  330. package/src/styles/base/_02-mixins.scss +103 -0
  331. package/src/styles/base/_place-holder.scss +33 -0
  332. package/src/styles/space/_space-inline.scss +79 -0
  333. package/src/styles/space/_space-inset.scss +57 -0
  334. package/src/styles/space/_space-stack.scss +116 -0
  335. package/src/styles.scss +23 -0
  336. package/src/theme/components/accordion.ts +25 -0
  337. package/src/theme/components/breadcrumb.ts +94 -0
  338. package/src/theme/components/button.ts +133 -0
  339. package/src/theme/components/buttonGroup.ts +10 -0
  340. package/src/theme/components/card.ts +237 -0
  341. package/src/theme/components/checkbox.ts +110 -0
  342. package/src/theme/components/checkboxGroup.ts +10 -0
  343. package/src/theme/components/componentWrapper.ts +14 -0
  344. package/src/theme/components/customTable.ts +77 -0
  345. package/src/theme/components/datePicker.ts +17 -0
  346. package/src/theme/components/fieldset.ts +23 -0
  347. package/src/theme/components/global.ts +91 -0
  348. package/src/theme/components/globalMixins.ts +24 -0
  349. package/src/theme/components/heading.ts +79 -0
  350. package/src/theme/components/helperErrorText.ts +14 -0
  351. package/src/theme/components/hero.ts +238 -0
  352. package/src/theme/components/horizontalRule.ts +17 -0
  353. package/src/theme/components/icon.ts +88 -0
  354. package/src/theme/components/image.ts +136 -0
  355. package/src/theme/components/label.ts +15 -0
  356. package/src/theme/components/link.ts +63 -0
  357. package/src/theme/components/list.ts +88 -0
  358. package/src/theme/components/logo.ts +58 -0
  359. package/src/theme/components/notification.ts +132 -0
  360. package/src/theme/components/pagination.ts +17 -0
  361. package/src/theme/components/progressIndicator.ts +67 -0
  362. package/src/theme/components/radio.ts +103 -0
  363. package/src/theme/components/radioGroup.ts +10 -0
  364. package/src/theme/components/searchBar.ts +19 -0
  365. package/src/theme/components/select.ts +72 -0
  366. package/src/theme/components/skeletonLoader.ts +113 -0
  367. package/src/theme/components/skipNavigation.ts +29 -0
  368. package/src/theme/components/slider.ts +95 -0
  369. package/src/theme/components/statusBadge.ts +26 -0
  370. package/src/theme/components/structuredContent.ts +149 -0
  371. package/src/theme/components/tabs.ts +109 -0
  372. package/src/theme/components/template.ts +114 -0
  373. package/src/theme/components/text.ts +38 -0
  374. package/src/theme/components/textInput.ts +65 -0
  375. package/src/theme/components/toggle.ts +109 -0
  376. package/src/theme/components/videoPlayer.ts +47 -0
  377. package/src/theme/foundations/breakpoints.ts +24 -0
  378. package/src/theme/foundations/colors.ts +212 -0
  379. package/src/theme/foundations/global.ts +43 -0
  380. package/src/theme/foundations/radii.ts +7 -0
  381. package/src/theme/foundations/shadows.ts +5 -0
  382. package/src/theme/foundations/spacing.ts +136 -0
  383. package/src/theme/foundations/typography.ts +107 -0
  384. package/src/theme/index.ts +131 -0
  385. package/src/theme/provider.tsx +9 -0
  386. package/src/theme/types.ts +1 -0
  387. package/src/utils/componentCategories.ts +152 -0
  388. package/src/utils/interfaces.ts +5 -0
  389. package/src/utils/utils.ts +84 -0
  390. package/lib/components/Button/Button.d.ts +0 -17
  391. package/lib/components/Button/Button.js +0 -42
  392. package/lib/index.d.ts +0 -1
  393. package/lib/index.js +0 -6
  394. package/lib/stories/0-Welcome.stories.js +0 -19
  395. package/lib/stories/1-Button.stories.d.ts +0 -6
  396. package/lib/stories/1-Button.stories.js +0 -20
@@ -0,0 +1,358 @@
1
+ import * as React from "react";
2
+ import { render, screen, fireEvent } from "@testing-library/react";
3
+ import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
5
+
6
+ import Select from "./Select";
7
+
8
+ const baseProps = {
9
+ helperText: "This is the helper text.",
10
+ id: "select",
11
+ labelText: "What is your favorite color?",
12
+ name: "color",
13
+ };
14
+ const baseOptions = (
15
+ <>
16
+ <option value="red">Red</option>
17
+ <option value="green">Green</option>
18
+ <option value="blue">Blue</option>
19
+ <option value="black">Black</option>
20
+ <option value="white">White</option>
21
+ </>
22
+ );
23
+
24
+ describe("Select Accessibility", () => {
25
+ it("passes axe accessibility test", async () => {
26
+ const { container } = render(<Select {...baseProps}>{baseOptions}</Select>);
27
+ expect(await axe(container)).toHaveNoViolations();
28
+ });
29
+ });
30
+
31
+ describe("Select", () => {
32
+ it("renders a label, select, option, and helper text DOM elements", () => {
33
+ render(<Select {...baseProps}>{baseOptions}</Select>);
34
+
35
+ expect(
36
+ screen.getByLabelText(/What is your favorite color/i)
37
+ ).toBeInTheDocument();
38
+ expect(screen.getByRole("combobox")).toBeInTheDocument();
39
+ expect(screen.getAllByRole("option")).toHaveLength(5);
40
+ expect(screen.getByText(/This is the helper text/i)).toBeInTheDocument();
41
+ });
42
+
43
+ it("renders a name attribute to use in forms", () => {
44
+ render(<Select {...baseProps}>{baseOptions}</Select>);
45
+ expect(
46
+ screen.getByLabelText(/What is your favorite color/i)
47
+ ).toHaveAttribute("name", "color");
48
+ });
49
+
50
+ it("renders an aria-label attribute when `showLabel` is false", () => {
51
+ const { rerender } = render(<Select {...baseProps}>{baseOptions}</Select>);
52
+
53
+ expect(
54
+ screen.getByLabelText(/What is your favorite color/i)
55
+ ).not.toHaveAttribute("aria-label");
56
+
57
+ rerender(
58
+ <Select {...baseProps} showLabel={false}>
59
+ {baseOptions}
60
+ </Select>
61
+ );
62
+ expect(
63
+ screen.getByLabelText(/What is your favorite color/i)
64
+ ).toHaveAttribute(
65
+ "aria-label",
66
+ "What is your favorite color? - This is the helper text."
67
+ );
68
+ });
69
+
70
+ it("renders aria-describedby when helperText prop is passed", () => {
71
+ const id = "test-describe";
72
+ render(
73
+ <Select {...baseProps} id={id}>
74
+ {baseOptions}
75
+ </Select>
76
+ );
77
+
78
+ expect(
79
+ screen.getByLabelText(/What is your favorite color/i)
80
+ ).toHaveAttribute("aria-describedby", `${id}-helperText`);
81
+ });
82
+
83
+ it("renders '(Required)' text in the label", () => {
84
+ const { rerender } = render(
85
+ <Select {...baseProps} isRequired>
86
+ {baseOptions}
87
+ </Select>
88
+ );
89
+
90
+ expect(screen.getByText(/Required/i)).toBeInTheDocument();
91
+
92
+ rerender(
93
+ <Select {...baseProps} isRequired showRequiredLabel={false}>
94
+ {baseOptions}
95
+ </Select>
96
+ );
97
+ expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
98
+ });
99
+
100
+ it("renders required and aria-required attributes when 'showLabel' is false", () => {
101
+ render(
102
+ <Select {...baseProps} isRequired showLabel={false}>
103
+ {baseOptions}
104
+ </Select>
105
+ );
106
+ expect(screen.queryByText(/equired/i)).not.toBeInTheDocument();
107
+ expect(
108
+ screen.getByLabelText(/What is your favorite color/i)
109
+ ).toHaveAttribute("aria-required");
110
+ expect(
111
+ screen.getByLabelText(/What is your favorite color/i)
112
+ ).toHaveAttribute("required");
113
+ });
114
+
115
+ it("should not render a required label if 'showRequiredLabel' flag is false, but still render the label", () => {
116
+ render(
117
+ <Select {...baseProps} isRequired showRequiredLabel={false}>
118
+ {baseOptions}
119
+ </Select>
120
+ );
121
+ expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
122
+ expect(
123
+ screen.getByLabelText(/What is your favorite color/i)
124
+ ).toBeInTheDocument();
125
+ });
126
+
127
+ it("renders helper text when helperText prop is passed", () => {
128
+ render(<Select {...baseProps}>{baseOptions}</Select>);
129
+
130
+ expect(screen.getByText("This is the helper text.")).toBeInTheDocument();
131
+ });
132
+
133
+ it("renders default error text when 'invalidText' prop is not passed and 'isInvalid' prop is set to true", () => {
134
+ render(
135
+ <Select {...baseProps} isInvalid>
136
+ {baseOptions}
137
+ </Select>
138
+ );
139
+
140
+ expect(
141
+ screen.getByText("There is an error related to this field.")
142
+ ).toBeInTheDocument();
143
+ });
144
+
145
+ it("does not render the error text when 'isInvalid' is true and 'showHelperInvalidText' is false", () => {
146
+ render(
147
+ <Select {...baseProps} showHelperInvalidText={false} isInvalid>
148
+ {baseOptions}
149
+ </Select>
150
+ );
151
+
152
+ expect(
153
+ screen.queryByText("There is an error related to this field.")
154
+ ).not.toBeInTheDocument();
155
+ });
156
+
157
+ it("renders custom error text when 'invalidText' prop is passed and 'isInvalid' prop is set to true", () => {
158
+ render(
159
+ <Select
160
+ {...baseProps}
161
+ invalidText="This is a custom error text!"
162
+ isInvalid
163
+ >
164
+ {baseOptions}
165
+ </Select>
166
+ );
167
+ expect(
168
+ screen.getByText("This is a custom error text!")
169
+ ).toBeInTheDocument();
170
+ });
171
+
172
+ it("updates the value through a ref", () => {
173
+ const selectRef = React.createRef<HTMLSelectElement>();
174
+ render(
175
+ <Select {...baseProps} ref={selectRef}>
176
+ {baseOptions}
177
+ </Select>
178
+ );
179
+
180
+ expect(selectRef.current?.value).toEqual("red");
181
+
182
+ fireEvent.change(screen.getByRole("combobox"), {
183
+ target: { value: "blue" },
184
+ });
185
+ expect(selectRef.current?.value).toEqual("blue");
186
+
187
+ fireEvent.change(screen.getByRole("combobox"), {
188
+ target: { value: "white" },
189
+ });
190
+ expect(selectRef.current?.value).toEqual("white");
191
+ });
192
+
193
+ it("calls the onChange callback function", () => {
194
+ let value = "";
195
+ const changeCallback = (e: React.FormEvent) => {
196
+ value = (e.target as HTMLInputElement).value;
197
+ };
198
+ render(
199
+ <Select {...baseProps} onChange={changeCallback} value={value}>
200
+ {baseOptions}
201
+ </Select>
202
+ );
203
+
204
+ expect(value).toEqual("");
205
+
206
+ fireEvent.change(screen.getByRole("combobox"), {
207
+ target: { value: "blue" },
208
+ });
209
+ expect(value).toEqual("blue");
210
+
211
+ fireEvent.change(screen.getByRole("combobox"), {
212
+ target: { value: "white" },
213
+ });
214
+ expect(value).toEqual("white");
215
+ });
216
+
217
+ it("logs a warning when there is no `id` passed", () => {
218
+ const warn = jest.spyOn(console, "warn");
219
+ render(
220
+ // @ts-ignore: Typescript complains when a required prop is not passed, but
221
+ // here we don't want to pass the required prop to make sure the warning appears.
222
+ <Select labelText="What is your favorite color?" name="color">
223
+ {baseOptions}
224
+ </Select>
225
+ );
226
+ expect(warn).toHaveBeenCalledWith(
227
+ "NYPL Reservoir Select: This component's required `id` prop was not passed."
228
+ );
229
+ });
230
+
231
+ it("Renders the UI snapshot correctly", () => {
232
+ const siblings = ["Kendall", "Shiv", "Connor", "Roman", "Tom"];
233
+ const options = siblings.map((sibling) => (
234
+ <option key={sibling}>{sibling}</option>
235
+ ));
236
+
237
+ const primary = renderer
238
+ .create(
239
+ <Select
240
+ id="select"
241
+ labelText="Which Succession sibling are you?"
242
+ name="succession-sibling"
243
+ >
244
+ {options}
245
+ </Select>
246
+ )
247
+ .toJSON();
248
+ const disabled = renderer
249
+ .create(
250
+ <Select
251
+ id="select"
252
+ isDisabled
253
+ labelText="Which Succession sibling are you?"
254
+ name="succession-sibling"
255
+ >
256
+ {options}
257
+ </Select>
258
+ )
259
+ .toJSON();
260
+ const withInvalidText = renderer
261
+ .create(
262
+ <Select
263
+ id="select"
264
+ invalidText="Tom doesn't count as a sibling :(."
265
+ isInvalid
266
+ labelText="Which Succession sibling are you?"
267
+ name="succession-sibling"
268
+ >
269
+ {options}
270
+ </Select>
271
+ )
272
+ .toJSON();
273
+ const withHelperText = renderer
274
+ .create(
275
+ <Select
276
+ helperText="Remember, Logan will judge you no matter who you pick."
277
+ id="select"
278
+ labelText="Which Succession sibling are you?"
279
+ name="succession-sibling"
280
+ >
281
+ {options}
282
+ </Select>
283
+ )
284
+ .toJSON();
285
+ const required = renderer
286
+ .create(
287
+ <Select
288
+ id="select"
289
+ isRequired
290
+ labelText="Which Succession sibling are you?"
291
+ name="succession-sibling"
292
+ >
293
+ {options}
294
+ </Select>
295
+ )
296
+ .toJSON();
297
+ const withLabelInline = renderer
298
+ .create(
299
+ <Select
300
+ id="select"
301
+ isRequired
302
+ labelPosition="inline"
303
+ labelText="Which Succession sibling are you?"
304
+ name="succession-sibling"
305
+ >
306
+ {options}
307
+ </Select>
308
+ )
309
+ .toJSON();
310
+ const hasOnChange = renderer
311
+ .create(
312
+ <Select
313
+ id="select"
314
+ labelText="Which Succession sibling are you?"
315
+ name="succession-sibling"
316
+ onChange={jest.fn()}
317
+ >
318
+ {options}
319
+ </Select>
320
+ )
321
+ .toJSON();
322
+ const withChakraProps = renderer
323
+ .create(
324
+ <Select
325
+ id="chakra"
326
+ labelText="Which Succession sibling are you?"
327
+ name="succession-sibling"
328
+ p="20px"
329
+ color="ui.error.primary"
330
+ >
331
+ {options}
332
+ </Select>
333
+ )
334
+ .toJSON();
335
+ const withOtherProps = renderer
336
+ .create(
337
+ <Select
338
+ id="props"
339
+ labelText="Which Succession sibling are you?"
340
+ name="succession-sibling"
341
+ data-testid="props"
342
+ >
343
+ {options}
344
+ </Select>
345
+ )
346
+ .toJSON();
347
+
348
+ expect(primary).toMatchSnapshot();
349
+ expect(disabled).toMatchSnapshot();
350
+ expect(withInvalidText).toMatchSnapshot();
351
+ expect(withHelperText).toMatchSnapshot();
352
+ expect(required).toMatchSnapshot();
353
+ expect(withLabelInline).toMatchSnapshot();
354
+ expect(hasOnChange).toMatchSnapshot();
355
+ expect(withChakraProps).toMatchSnapshot();
356
+ expect(withOtherProps).toMatchSnapshot();
357
+ });
358
+ });
@@ -0,0 +1,183 @@
1
+ import {
2
+ Box,
3
+ chakra,
4
+ Select as ChakraSelect,
5
+ useMultiStyleConfig,
6
+ } from "@chakra-ui/react";
7
+ import React, { useEffect, useState, useRef } from "react";
8
+
9
+ import ComponentWrapper from "../ComponentWrapper/ComponentWrapper";
10
+ import { HelperErrorTextType } from "../HelperErrorText/HelperErrorText";
11
+ import Icon from "../Icons/Icon";
12
+ import Label from "../Label/Label";
13
+ import { getAriaAttrs } from "../../utils/utils";
14
+
15
+ export type SelectTypes = "default" | "searchbar";
16
+ export type LabelPositions = "default" | "inline";
17
+ export interface SelectProps {
18
+ /** A class name for the `div` parent element. */
19
+ className?: string;
20
+ /** Optional string to populate the `HelperErrorText` for the standard state. */
21
+ helperText?: HelperErrorTextType;
22
+ /** ID that other components can cross reference for accessibility purposes */
23
+ id: string;
24
+ /** Optional string to populate the `HelperErrorText` for the error state
25
+ * when `isInvalid` is true. */
26
+ invalidText?: HelperErrorTextType;
27
+ /** Adds the `disabled` and `aria-disabled` attributes to the select when true */
28
+ isDisabled?: boolean;
29
+ /** Adds the `aria-invalid` attribute to the select when true. This also makes
30
+ * the color theme "NYPL error" red for the select and text. */
31
+ isInvalid?: boolean;
32
+ /** Adds the `required` and `aria-required` attributes to the input when true. */
33
+ isRequired?: boolean;
34
+ /** Optional value to render the label inline, rather than the default (on top)
35
+ * of the select element. */
36
+ labelPosition?: LabelPositions;
37
+ /** Provides text for a `Label` component if `showLabel` is set to `true`;
38
+ * populates an `aria-label` attribute on the select input if `showLabel` is
39
+ * set to `false`. */
40
+ labelText: string;
41
+ /** Used to reference the select element in forms. */
42
+ name: string;
43
+ /** The callback function to get the selected value.
44
+ * Should be passed along with `value` for controlled components. */
45
+ onChange?: (event: React.FormEvent) => void;
46
+ /** Placeholder text in the select element. */
47
+ placeholder?: string;
48
+ /** The variant to display. */
49
+ selectType?: SelectTypes;
50
+ /** Offers the ability to hide the helper/invalid text. */
51
+ showHelperInvalidText?: boolean;
52
+ /** Offers the ability to show the select's label onscreen or hide it. Refer
53
+ * to the `labelText` property for more information. */
54
+ showLabel?: boolean;
55
+ /** Whether or not to display the "(Required)" text in the label text.
56
+ * True by default. */
57
+ showRequiredLabel?: boolean;
58
+ /** The value of the selected option.
59
+ * Should be passed along with `onChange` for controlled components. */
60
+ value?: string;
61
+ }
62
+
63
+ /**
64
+ * Component that renders Chakra's `Select` component along with an accessible
65
+ * `Label` and optional `HelperErrorText` component.
66
+ */
67
+ export const Select = chakra(
68
+ React.forwardRef<HTMLSelectElement, React.PropsWithChildren<SelectProps>>(
69
+ (props: React.PropsWithChildren<SelectProps>, ref?) => {
70
+ const {
71
+ children,
72
+ className,
73
+ helperText,
74
+ id,
75
+ invalidText,
76
+ isDisabled = false,
77
+ isInvalid = false,
78
+ isRequired = false,
79
+ labelPosition = "default",
80
+ labelText,
81
+ name,
82
+ onChange,
83
+ placeholder,
84
+ selectType = "default",
85
+ showHelperInvalidText = true,
86
+ showLabel = true,
87
+ showRequiredLabel = true,
88
+ value = "",
89
+ ...rest
90
+ } = props;
91
+ const [labelWidth, setLabelWidth] = useState<number>(0);
92
+ const labelRef = useRef<HTMLDivElement>(null);
93
+ const styles = useMultiStyleConfig("CustomSelect", {
94
+ variant: selectType,
95
+ labelPosition,
96
+ });
97
+ const finalInvalidText = invalidText
98
+ ? invalidText
99
+ : "There is an error related to this field.";
100
+ const footnote = isInvalid ? finalInvalidText : helperText;
101
+ const ariaAttributes = getAriaAttrs({
102
+ footnote,
103
+ id,
104
+ labelText,
105
+ name: "Select",
106
+ showLabel,
107
+ });
108
+ // To control the `Select` component, both `onChange` and `value`
109
+ // must be passed.
110
+ const controlledProps = onChange ? { onChange, value } : {};
111
+
112
+ // The number of pixels between the label and select elements
113
+ // when the labelPosition is inline (equivalent to --nypl-space-xs).
114
+ const labelSelectGap = 8;
115
+
116
+ if (!id) {
117
+ console.warn(
118
+ "NYPL Reservoir Select: This component's required `id` prop was not passed."
119
+ );
120
+ }
121
+
122
+ useEffect(() => {
123
+ if (labelPosition === "inline") {
124
+ if (labelRef.current) {
125
+ const width = labelRef.current.clientWidth + labelSelectGap;
126
+ setLabelWidth(width);
127
+ }
128
+ } else {
129
+ setLabelWidth(0);
130
+ }
131
+ }, [labelPosition]);
132
+
133
+ return (
134
+ <ComponentWrapper
135
+ className={className}
136
+ helperText={helperText}
137
+ helperTextStyles={{
138
+ marginLeft: { sm: "auto", md: `${labelWidth}px` },
139
+ }}
140
+ id={id}
141
+ invalidText={finalInvalidText}
142
+ isInvalid={isInvalid}
143
+ showHelperInvalidText={showHelperInvalidText}
144
+ __css={styles}
145
+ {...rest}
146
+ >
147
+ <Box __css={labelPosition === "inline" && styles.inline}>
148
+ {showLabel && (
149
+ <Box ref={labelRef}>
150
+ <Label
151
+ htmlFor={id}
152
+ id={`${id}-label`}
153
+ isInlined
154
+ isRequired={showRequiredLabel && isRequired}
155
+ >
156
+ {labelText}
157
+ </Label>
158
+ </Box>
159
+ )}
160
+ <ChakraSelect
161
+ id={id}
162
+ variant="outline"
163
+ isRequired={isRequired}
164
+ isDisabled={isDisabled}
165
+ isInvalid={isInvalid}
166
+ name={name}
167
+ placeholder={placeholder}
168
+ ref={ref}
169
+ {...controlledProps}
170
+ {...ariaAttributes}
171
+ icon={<Icon id={`${id}-icon`} name="arrow" size="medium" />}
172
+ __css={styles.select}
173
+ >
174
+ {children}
175
+ </ChakraSelect>
176
+ </Box>
177
+ </ComponentWrapper>
178
+ );
179
+ }
180
+ )
181
+ );
182
+
183
+ export default Select;