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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/CHANGELOG.md +118 -1
  2. package/README.md +98 -50
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Button/Button.d.ts +13 -8
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +36 -52
  7. package/dist/components/Card/CardTypes.d.ts +0 -15
  8. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  9. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -2
  10. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -34
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/Heading/Heading.d.ts +4 -4
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  16. package/dist/components/Icons/Icon.d.ts +8 -0
  17. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  18. package/dist/components/Icons/IconTypes.d.ts +11 -0
  19. package/dist/components/Image/Image.d.ts +19 -9
  20. package/dist/components/Image/ImageTypes.d.ts +20 -0
  21. package/dist/components/Link/Link.d.ts +4 -0
  22. package/dist/components/List/List.d.ts +19 -14
  23. package/dist/components/Notification/Notification.d.ts +37 -16
  24. package/dist/components/Pagination/Pagination.d.ts +16 -13
  25. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  27. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  28. package/dist/components/Radio/Radio.d.ts +2 -0
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  31. package/dist/components/Select/Select.d.ts +2 -0
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  33. package/dist/components/Slider/Slider.d.ts +57 -0
  34. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  35. package/dist/components/Tabs/Tabs.d.ts +1 -1
  36. package/dist/components/TextInput/TextInput.d.ts +12 -0
  37. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  38. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  39. package/dist/design-system-react-components.cjs.development.js +6131 -3715
  40. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  41. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  43. package/dist/design-system-react-components.esm.js +6124 -3699
  44. package/dist/design-system-react-components.esm.js.map +1 -1
  45. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  46. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  47. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  48. package/dist/hooks/useWindowSize.d.ts +10 -0
  49. package/dist/index.d.ts +13 -8
  50. package/dist/resources.scss +180 -170
  51. package/dist/styles.css +1 -1
  52. package/dist/theme/components/button.d.ts +22 -8
  53. package/dist/theme/components/card.d.ts +168 -0
  54. package/dist/theme/components/checkbox.d.ts +5 -1
  55. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  56. package/dist/theme/components/componentWrapper.d.ts +11 -0
  57. package/dist/theme/components/datePicker.d.ts +16 -0
  58. package/dist/theme/components/fieldset.d.ts +27 -0
  59. package/dist/theme/components/global.d.ts +23 -13
  60. package/dist/theme/components/globalMixins.d.ts +9 -1
  61. package/dist/theme/components/heading.d.ts +5 -0
  62. package/dist/theme/components/helperErrorText.d.ts +10 -0
  63. package/dist/theme/components/hero.d.ts +1 -0
  64. package/dist/theme/components/horizontalRule.d.ts +14 -0
  65. package/dist/theme/components/image.d.ts +31 -0
  66. package/dist/theme/components/label.d.ts +5 -3
  67. package/dist/theme/components/link.d.ts +4 -0
  68. package/dist/theme/components/list.d.ts +89 -0
  69. package/dist/theme/components/notification.d.ts +75 -0
  70. package/dist/theme/components/pagination.d.ts +19 -0
  71. package/dist/theme/components/progressIndicator.d.ts +50 -0
  72. package/dist/theme/components/radioGroup.d.ts +12 -0
  73. package/dist/theme/components/select.d.ts +11 -2
  74. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  75. package/dist/theme/components/slider.d.ts +51 -0
  76. package/dist/theme/components/tabs.d.ts +54 -3
  77. package/dist/theme/components/textInput.d.ts +8 -1
  78. package/dist/theme/components/videoPlayer.d.ts +40 -0
  79. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  80. package/dist/theme/foundations/global.d.ts +6 -1
  81. package/dist/theme/foundations/radii.d.ts +5 -0
  82. package/dist/theme/foundations/spacing.d.ts +16 -16
  83. package/package.json +72 -83
  84. package/src/__tests__/setup.ts +2 -2
  85. package/src/components/Accordion/Accordion.stories.mdx +39 -44
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  87. package/src/components/Autosuggest/Autosuggest.stories.tsx +2 -1
  88. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  89. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +14 -10
  90. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +23 -0
  91. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  92. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +199 -1
  93. package/src/components/Button/Button.stories.mdx +15 -10
  94. package/src/components/Button/Button.test.tsx +21 -7
  95. package/src/components/Button/Button.tsx +22 -34
  96. package/src/components/Button/ButtonTypes.tsx +1 -0
  97. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  98. package/src/components/Card/Card.stories.mdx +296 -259
  99. package/src/components/Card/Card.test.tsx +156 -84
  100. package/src/components/Card/Card.tsx +195 -145
  101. package/src/components/Card/CardTypes.tsx +0 -17
  102. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  103. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  104. package/src/components/CardEdition/_CardEdition.scss +22 -23
  105. package/src/components/Chakra/Box.stories.mdx +15 -16
  106. package/src/components/Chakra/Center.stories.mdx +31 -16
  107. package/src/components/Chakra/Grid.stories.mdx +28 -15
  108. package/src/components/Chakra/Stack.stories.mdx +35 -18
  109. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  110. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  111. package/src/components/Checkbox/Checkbox.tsx +39 -33
  112. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  113. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  114. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +29 -2
  115. package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -18
  116. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +47 -81
  117. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  118. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  119. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  120. package/src/components/DatePicker/DatePicker.tsx +159 -128
  121. package/src/components/DatePicker/_DatePicker.scss +33 -67
  122. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  123. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  124. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  125. package/src/components/Fieldset/Fieldset.tsx +52 -0
  126. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  127. package/src/components/Form/Form.stories.mdx +24 -6
  128. package/src/components/Form/Form.test.tsx +1 -1
  129. package/src/components/Form/Form.tsx +1 -0
  130. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  131. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  132. package/src/components/Heading/Heading.stories.mdx +3 -4
  133. package/src/components/Heading/Heading.tsx +5 -5
  134. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  135. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  136. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  137. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  138. package/src/components/Hero/Hero.stories.mdx +12 -2
  139. package/src/components/Hero/Hero.tsx +1 -1
  140. package/src/components/Hero/HeroTypes.tsx +1 -0
  141. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  142. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  143. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  144. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  145. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  146. package/src/components/Icons/Icon.stories.mdx +12 -4
  147. package/src/components/Icons/Icon.test.tsx +18 -0
  148. package/src/components/Icons/Icon.tsx +16 -1
  149. package/src/components/Icons/IconSvgs.tsx +22 -0
  150. package/src/components/Icons/IconTypes.tsx +11 -0
  151. package/src/components/Image/Image.stories.mdx +220 -0
  152. package/src/components/Image/Image.test.tsx +131 -29
  153. package/src/components/Image/Image.tsx +84 -56
  154. package/src/components/Image/ImageTypes.ts +22 -0
  155. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  156. package/src/components/Input/Input.stories.tsx +23 -67
  157. package/src/components/Input/Input.test.tsx +4 -4
  158. package/src/components/Input/_Input.scss +23 -14
  159. package/src/components/Link/Link.tsx +4 -1
  160. package/src/components/List/List.stories.mdx +124 -49
  161. package/src/components/List/List.test.tsx +142 -63
  162. package/src/components/List/List.tsx +89 -93
  163. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  164. package/src/components/Modal/Modal.stories.mdx +3 -3
  165. package/src/components/Modal/_Modal.scss +2 -2
  166. package/src/components/Notification/Notification.stories.mdx +109 -112
  167. package/src/components/Notification/Notification.test.tsx +99 -110
  168. package/src/components/Notification/Notification.tsx +156 -159
  169. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  170. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  171. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  172. package/src/components/Pagination/Pagination.test.tsx +276 -146
  173. package/src/components/Pagination/Pagination.tsx +174 -154
  174. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  175. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  176. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  177. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  178. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  179. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  180. package/src/components/Radio/Radio.test.tsx +20 -4
  181. package/src/components/Radio/Radio.tsx +6 -3
  182. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  183. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  184. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  185. package/src/components/RadioGroup/RadioGroup.tsx +19 -19
  186. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  187. package/src/components/SearchBar/SearchBar.Test.tsx +20 -1
  188. package/src/components/SearchBar/SearchBar.stories.mdx +113 -8
  189. package/src/components/SearchBar/SearchBar.tsx +20 -10
  190. package/src/components/Select/Select.test.tsx +12 -0
  191. package/src/components/Select/Select.tsx +5 -2
  192. package/src/components/Select/SelectTypes.tsx +1 -0
  193. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  194. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  195. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  196. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  197. package/src/components/Slider/Slider.stories.mdx +529 -0
  198. package/src/components/Slider/Slider.test.tsx +653 -0
  199. package/src/components/Slider/Slider.tsx +303 -0
  200. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  201. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  202. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  203. package/src/components/StyleGuide/Buttons.stories.mdx +89 -73
  204. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  205. package/src/components/StyleGuide/Colors.stories.mdx +171 -311
  206. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  207. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  208. package/src/components/StyleGuide/Iconography.stories.mdx +85 -91
  209. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  210. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  211. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  212. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  213. package/src/components/Tabs/Tabs.tsx +87 -64
  214. package/src/components/Template/Template.stories.mdx +25 -27
  215. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  216. package/src/components/TextInput/TextInput.test.tsx +22 -2
  217. package/src/components/TextInput/TextInput.tsx +28 -8
  218. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  219. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  220. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  222. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  223. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  224. package/src/docs/Chakra.stories.mdx +244 -63
  225. package/src/docs/Intro.stories.mdx +5 -2
  226. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  227. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  228. package/src/hooks/useCarouselStyles.ts +34 -0
  229. package/src/hooks/useNYPLTheme.ts +67 -0
  230. package/src/hooks/useWindowSize.ts +40 -0
  231. package/src/index.ts +22 -19
  232. package/src/resources.scss +5 -5
  233. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  234. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  235. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  236. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  237. package/src/styles/base/_place-holder.scss +14 -3
  238. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  239. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  240. package/src/styles/space/_space-stack.scss +116 -0
  241. package/src/styles.scss +13 -60
  242. package/src/theme/components/button.ts +21 -15
  243. package/src/theme/components/card.ts +174 -0
  244. package/src/theme/components/checkbox.ts +8 -3
  245. package/src/theme/components/checkboxGroup.ts +8 -0
  246. package/src/theme/components/componentWrapper.ts +10 -0
  247. package/src/theme/components/datePicker.ts +17 -0
  248. package/src/theme/components/fieldset.ts +18 -0
  249. package/src/theme/components/global.ts +26 -15
  250. package/src/theme/components/globalMixins.ts +9 -1
  251. package/src/theme/components/heading.ts +10 -5
  252. package/src/theme/components/helperErrorText.ts +9 -0
  253. package/src/theme/components/hero.ts +4 -3
  254. package/src/theme/components/horizontalRule.ts +13 -0
  255. package/src/theme/components/icon.ts +9 -9
  256. package/src/theme/components/image.ts +116 -0
  257. package/src/theme/components/label.ts +3 -10
  258. package/src/theme/components/link.ts +5 -1
  259. package/src/theme/components/list.ts +73 -0
  260. package/src/theme/components/notification.ts +93 -0
  261. package/src/theme/components/pagination.ts +20 -0
  262. package/src/theme/components/progressIndicator.ts +62 -0
  263. package/src/theme/components/radio.ts +2 -2
  264. package/src/theme/components/radioGroup.ts +8 -0
  265. package/src/theme/components/select.ts +6 -3
  266. package/src/theme/components/skeletonLoader.ts +107 -0
  267. package/src/theme/components/slider.ts +79 -0
  268. package/src/theme/components/statusBadge.ts +1 -2
  269. package/src/theme/components/tabs.ts +49 -19
  270. package/src/theme/components/template.ts +8 -8
  271. package/src/theme/components/textInput.ts +5 -4
  272. package/src/theme/components/videoPlayer.ts +49 -0
  273. package/src/theme/foundations/breakpoints.ts +8 -8
  274. package/src/theme/foundations/global.ts +6 -1
  275. package/src/theme/foundations/radii.ts +6 -0
  276. package/src/theme/foundations/spacing.ts +24 -24
  277. package/src/theme/index.ts +41 -10
  278. package/src/utils/componentCategories.ts +4 -3
  279. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  280. package/dist/components/Image/Image.stories.d.ts +0 -18
  281. package/dist/components/List/List.stories.d.ts +0 -7
  282. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  283. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  284. package/src/components/Button/_Button.scss +0 -32
  285. package/src/components/Card/_Card.scss +0 -308
  286. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  287. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  288. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  289. package/src/components/Image/Image.stories.tsx +0 -54
  290. package/src/components/Image/_Image.scss +0 -38
  291. package/src/components/List/List.stories.tsx +0 -139
  292. package/src/components/List/_List.scss +0 -76
  293. package/src/components/Notification/_Notification.scss +0 -110
  294. package/src/components/Pagination/_Pagination.scss +0 -40
  295. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  296. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  297. package/src/styles/01-colors/_colors-brand.scss +0 -62
  298. package/src/styles/01-colors/_colors-utility.scss +0 -67
  299. package/src/styles/02-typography/_type-scale.css +0 -11
  300. package/src/styles/02-typography/_type-weight.css +0 -7
  301. package/src/styles/02-typography/_typefaces.css +0 -4
  302. package/src/styles/03-space/_space-stack.scss +0 -116
  303. package/src/styles/03-space/_space.css +0 -30
  304. package/src/styles/base/_card-grid.scss +0 -78
  305. package/src/styles/base/_typography.scss +0 -11
  306. package/src/theme/components/customCheckboxGroup.ts +0 -12
  307. package/src/theme/components/customRadioGroup.ts +0 -12
@@ -0,0 +1,34 @@
1
+ import React from "react";
2
+
3
+ /**
4
+ * Custom hook that controls the sliding function for the carousel wrapper.
5
+ * This returns functions to use for the "previous" and "next" buttons as well
6
+ * as a CSS style object that should be use to transition between slides.
7
+ * Inspired by: https://codesandbox.io/s/fxjeo
8
+ */
9
+ const useCarouselStyles = (slidesCount = 0, slideWidth = 100) => {
10
+ const [currentSlide, setCurrentSlide] = React.useState(0);
11
+ // This wraps around to the last slide if this is invoked while the
12
+ // first slide is active.
13
+ const prevSlide = () => {
14
+ setCurrentSlide((slide) => (slide === 0 ? slidesCount - 1 : slide - 1));
15
+ };
16
+ // This wraps around to the first slide if this is invoked while the
17
+ // last slide is active.
18
+ const nextSlide = () => {
19
+ setCurrentSlide((slide) => (slide === slidesCount - 1 ? 0 : slide + 1));
20
+ };
21
+ const goToStart = () => {
22
+ setCurrentSlide(0);
23
+ };
24
+ // Updates the left margin for the carousel so the elements can
25
+ // slide inside the container.
26
+ const carouselStyle = {
27
+ transition: "all .5s",
28
+ marginLeft: `-${currentSlide * slideWidth}%`,
29
+ };
30
+
31
+ return { prevSlide, nextSlide, carouselStyle, goToStart };
32
+ };
33
+
34
+ export default useCarouselStyles;
@@ -0,0 +1,67 @@
1
+ import { useTheme } from "@chakra-ui/react";
2
+
3
+ /**
4
+ * A custom hook that returns the Chakra-based NYPL theme object. This must be
5
+ * used inside a component that is wrapped in the `DSProvider` component, so
6
+ * that the theme object can be available to use.
7
+ */
8
+ function useNYPLTheme() {
9
+ const theme = useTheme();
10
+ if (!theme || Object.keys(theme).length === 0) {
11
+ console.warn(
12
+ "The `useNYPLTheme` hook must be used inside of `<DSProvider />`."
13
+ );
14
+ return {};
15
+ }
16
+
17
+ // Chakra provides a lot of their own styles but
18
+ // only NYPL styles should be exported.
19
+ return {
20
+ // base, sm, md, lg, xl, 2xl
21
+ breakpoints: theme.breakpoints,
22
+ colors: {
23
+ // primary, secondary
24
+ brand: theme.colors.brand,
25
+ // blogs, books-and-more, locations, research,
26
+ // research-library, whats-on
27
+ section: theme.colors.section,
28
+ transparent: theme.colors.transparent,
29
+ // black, disabled, error, focus, gray, link,
30
+ // status, success, test, warning, white
31
+ ui: theme.colors.ui,
32
+ },
33
+ fontSizes: {
34
+ "-3": theme.fontSizes["-3"],
35
+ "-2": theme.fontSizes.xs,
36
+ "-1": theme.fontSizes.sm,
37
+ "0": theme.fontSizes.md,
38
+ "1": theme.fontSizes.lg,
39
+ "2": theme.fontSizes["2"],
40
+ "3": theme.fontSizes["3"],
41
+ "4": theme.fontSizes["4"],
42
+ },
43
+ fontWeights: {
44
+ light: theme.fontWeights.light,
45
+ regular: theme.fontWeights.regular,
46
+ medium: theme.fontWeights.medium,
47
+ bold: theme.fontWeights.bold,
48
+ },
49
+ fonts: {
50
+ body: theme.fonts.body,
51
+ heading: theme.fonts.heading,
52
+ },
53
+ radii: theme.radii,
54
+ space: {
55
+ xxs: theme.space.xxs,
56
+ xs: theme.space.xs,
57
+ s: theme.space.s,
58
+ m: theme.space.m,
59
+ l: theme.space.l,
60
+ xl: theme.space.xl,
61
+ xxl: theme.space.xxl,
62
+ xxxl: theme.space.xxxl,
63
+ },
64
+ };
65
+ }
66
+
67
+ export default useNYPLTheme;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+
3
+ interface WindowSize {
4
+ width: number;
5
+ height: number;
6
+ }
7
+
8
+ /**
9
+ * React hook used to get the window size on device resizing.
10
+ * Based on https://usehooks-typescript.com/react-hook/use-window-size
11
+ */
12
+ function useWindowSize(): WindowSize {
13
+ const [windowSize, setWindowSize] = React.useState<WindowSize>({
14
+ width: 0,
15
+ height: 0,
16
+ });
17
+
18
+ React.useEffect(() => {
19
+ const handler = () => {
20
+ setWindowSize({
21
+ width: window.innerWidth,
22
+ height: window.innerHeight,
23
+ });
24
+ };
25
+
26
+ // Set size at the first client-side load
27
+ handler();
28
+
29
+ window.addEventListener("resize", handler);
30
+
31
+ // Remove event listener on cleanup
32
+ return () => {
33
+ window.removeEventListener("resize", handler);
34
+ };
35
+ }, []);
36
+
37
+ return windowSize;
38
+ }
39
+
40
+ export default useWindowSize;
package/src/index.ts CHANGED
@@ -4,18 +4,20 @@ import "./styles.scss";
4
4
  // components for usage in consuming applications.
5
5
  export {
6
6
  Box,
7
+ ButtonGroup,
7
8
  Center,
8
9
  Circle,
9
10
  Grid,
10
11
  GridItem,
12
+ HStack,
11
13
  Square,
12
14
  Stack,
13
- HStack,
14
15
  VStack,
15
16
  } from "@chakra-ui/react";
16
17
  export { default as Accordion } from "./components/Accordion/Accordion";
17
18
  export { default as Breadcrumbs } from "./components/Breadcrumbs/Breadcrumbs";
18
- export { default as Button, ButtonGroup } from "./components/Button/Button";
19
+ export { ColorVariants } from "./components/Breadcrumbs/BreadcrumbsTypes";
20
+ export { default as Button } from "./components/Button/Button";
19
21
  export { ButtonTypes } from "./components/Button/ButtonTypes";
20
22
  export {
21
23
  default as Card,
@@ -23,17 +25,15 @@ export {
23
25
  CardContent,
24
26
  CardHeading,
25
27
  } from "./components/Card/Card";
26
- export {
27
- CardImageRatios,
28
- CardImageSizes,
29
- CardLayouts,
30
- } from "./components/Card/CardTypes";
28
+ export { CardLayouts } from "./components/Card/CardTypes";
31
29
  export { default as CardEdition } from "./components/CardEdition/CardEdition";
32
30
  export { default as Checkbox } from "./components/Checkbox/Checkbox";
33
31
  export { default as CheckboxGroup } from "./components/CheckboxGroup/CheckboxGroup";
34
32
  export { CheckboxGroupLayoutTypes } from "./components/CheckboxGroup/CheckboxGroupLayoutTypes";
35
33
  export { default as DatePicker } from "./components/DatePicker/DatePicker";
36
34
  export { DatePickerTypes } from "./components/DatePicker/DatePickerTypes";
35
+ export { default as DSProvider } from "./theme/provider";
36
+ export { default as Fieldset } from "./components/Fieldset/Fieldset";
37
37
  export { default as Form, FormField, FormRow } from "./components/Form/Form";
38
38
  export { FormSpacing } from "./components/Form/FormTypes";
39
39
  export { GridGaps } from "./components/Grid/GridTypes";
@@ -48,13 +48,20 @@ export { HeroTypes } from "./components/Hero/HeroTypes";
48
48
  export { default as HorizontalRule } from "./components/HorizontalRule/HorizontalRule";
49
49
  export { default as Icon } from "./components/Icons/Icon";
50
50
  export {
51
+ IconAlign,
52
+ IconColors,
51
53
  IconNames,
52
- LogoNames,
53
54
  IconRotationTypes,
54
- IconColors,
55
55
  IconSizes,
56
+ IconTypes,
57
+ LogoNames,
56
58
  } from "./components/Icons/IconTypes";
57
59
  export { default as Image } from "./components/Image/Image";
60
+ export {
61
+ ImageRatios,
62
+ ImageSizes,
63
+ ImageTypes,
64
+ } from "./components/Image/ImageTypes";
58
65
  export { default as Input } from "./components/Input/Input";
59
66
  export { InputTypes } from "./components/Input/InputTypes";
60
67
  export { default as Label } from "./components/Label/Label";
@@ -63,25 +70,22 @@ export { LinkTypes } from "./components/Link/LinkTypes";
63
70
  export { default as List } from "./components/List/List";
64
71
  export { ListTypes } from "./components/List/ListTypes";
65
72
  export { default as Modal } from "./components/Modal/Modal";
66
- export {
67
- default as Notification,
68
- NotificationContent,
69
- NotificationHeading,
70
- } from "./components/Notification/Notification";
73
+ export { default as Notification } from "./components/Notification/Notification";
71
74
  export { NotificationTypes } from "./components/Notification/NotificationTypes";
72
75
  export { default as Pagination } from "./components/Pagination/Pagination";
73
76
  export { default as Radio } from "./components/Radio/Radio";
74
77
  export { default as RadioGroup } from "./components/RadioGroup/RadioGroup";
75
78
  export { RadioGroupLayoutTypes } from "./components/RadioGroup/RadioGroupLayoutTypes";
76
79
  export { default as SearchBar } from "./components/SearchBar/SearchBar";
80
+ export { default as Select } from "./components/Select/Select";
77
81
  export { default as SimpleGrid } from "./components/Grid/SimpleGrid";
78
82
  export { default as SkeletonLoader } from "./components/SkeletonLoader/SkeletonLoader";
79
83
  export {
80
84
  SkeletonLoaderImageRatios,
81
85
  SkeletonLoaderLayouts,
82
86
  } from "./components/SkeletonLoader/SkeletonLoaderTypes";
83
- export { default as Select } from "./components/Select/Select";
84
87
  export { default as StatusBadge } from "./components/StatusBadge/StatusBadge";
88
+ export { StatusBadgeTypes } from "./components/StatusBadge/StatusBadgeTypes";
85
89
  export {
86
90
  Tabs,
87
91
  TabList,
@@ -89,8 +93,6 @@ export {
89
93
  TabPanels,
90
94
  TabPanel,
91
95
  } from "./components/Tabs/Tabs";
92
- export { default as Text } from "./components/Text/Text";
93
- export { TextDisplaySizes } from "./components/Text/TextTypes";
94
96
  export {
95
97
  TemplateAppContainer,
96
98
  Template,
@@ -102,15 +104,16 @@ export {
102
104
  TemplateContentSidebar,
103
105
  TemplateFooter,
104
106
  } from "./components/Template/Template";
105
-
107
+ export { default as Text } from "./components/Text/Text";
108
+ export { TextDisplaySizes } from "./components/Text/TextTypes";
106
109
  export {
107
110
  default as TextInput,
108
111
  TextInputRefType,
109
112
  } from "./components/TextInput/TextInput";
110
113
  export { TextInputTypes } from "./components/TextInput/TextInputTypes";
114
+ export { default as useNYPLTheme } from "./hooks/useNYPLTheme";
111
115
  export { default as VideoPlayer } from "./components/VideoPlayer/VideoPlayer";
112
116
  export {
113
117
  VideoPlayerAspectRatios,
114
118
  VideoPlayerTypes,
115
119
  } from "./components/VideoPlayer/VideoPlayerTypes";
116
- export { default as DSProvider } from "./theme/provider";
@@ -1,6 +1,6 @@
1
1
  // Resources to export as sass mixins
2
- @import "./styles/03-space/space-inline.scss";
3
- @import "./styles/03-space/space-inset.scss";
4
- @import "./styles/03-space/space-stack.scss";
5
- @import "./styles/base/02-breakpoints.scss";
6
- @import "./styles/base/03-mixins.scss";
2
+ @import "./styles/base/01-breakpoints";
3
+ @import "./styles/base/02-mixins";
4
+ @import "./styles/space/space-inline";
5
+ @import "./styles/space/space-inset";
6
+ @import "./styles/space/space-stack";
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Breakpoint Configuration
3
3
  * @see https://github.com/Team-Sass/breakpoint/wiki
4
- *
5
4
  */
6
5
 
7
6
  // Global Breakpoints
@@ -12,17 +11,17 @@
12
11
  // Sass' breakpoint() mixin doesn't work without Sass variables.
13
12
  // CSS variables expose the breakpoint variables to consumers.
14
13
  :root {
15
- --breakpoint-small: 320px;
16
- --breakpoint-medium: 600px;
17
- --breakpoint-large: 960px;
18
- --breakpoint-xl: 1280px;
14
+ --nypl-breakpoint-small: 320px;
15
+ --nypl-breakpoint-medium: 600px;
16
+ --nypl-breakpoint-large: 960px;
17
+ --nypl-breakpoint-xl: 1280px;
19
18
  }
20
19
 
21
- $breakpoint-small: 320px;
22
- $breakpoint-medium: 600px;
23
- $breakpoint-large: 960px;
24
- $breakpoint-xl: 1280px;
20
+ $nypl-breakpoint-small: 320px;
21
+ $nypl-breakpoint-medium: 600px;
22
+ $nypl-breakpoint-large: 960px;
23
+ $nypl-breakpoint-xl: 1280px;
25
24
  // The max-width breakpoint is used when the design should be applied at
26
25
  // whatever the largest breakpoint is regardless of actual pixel value,
27
26
  // e.g. removing outer margin on body wrapper.
28
- $max-width: $breakpoint-xl;
27
+ $nypl-max-width: $nypl-breakpoint-xl;
@@ -3,7 +3,7 @@
3
3
 
4
4
  /// Mixin - Clearfix.
5
5
  /// Adds clearfix based on http://bourbon.io/docs/#clearfix
6
- /// use example = @include clearfix
6
+ /// use example = @include clearfix
7
7
 
8
8
  @mixin clearfix {
9
9
  &::after {
@@ -29,10 +29,10 @@
29
29
  /// Outer container mixin for large screens
30
30
  @mixin wrapper(
31
31
  $container-max-width: $max-width,
32
- $outer-container-break: $breakpoint-small,
32
+ $outer-container-break: $nypl-breakpoint-small,
33
33
  $v-margin: 0,
34
34
  $v-padding: 0,
35
- $h-padding: var(--space)
35
+ $h-padding: var(--nypl-space-s)
36
36
  ) {
37
37
  margin: #{$v-margin} auto;
38
38
  max-width: #{$container-max-width};
@@ -41,12 +41,12 @@
41
41
  }
42
42
 
43
43
  .container {
44
- @include space-inset-s;
44
+ padding: var(--nypl-space-s);
45
45
  }
46
46
 
47
47
  /// Use the breakout mixin for elements that should be edge-to-edge
48
48
  /// Even when a parent container uses the wrapper mixin
49
- @mixin breakout($v-padding: var(--space)) {
49
+ @mixin breakout($v-padding: var(--nypl-space-s)) {
50
50
  margin-left: calc(-50vw + 50%);
51
51
  margin-right: calc(-50vw + 50%);
52
52
  }
@@ -61,6 +61,17 @@
61
61
  word-wrap: normal;
62
62
  }
63
63
 
64
+ // Focus state mixin
65
+ @mixin focus-outline($darkBackground: false) {
66
+ outline: 2px solid var(--nypl-colors-ui-focus);
67
+ outline-offset: 2px;
68
+ z-index: 9999;
69
+
70
+ @if $darkBackground {
71
+ outline-color: var(--nypl-colors-ui-white);
72
+ }
73
+ }
74
+
64
75
  //Convert pixel values to rem
65
76
  @function to-rem($size) {
66
77
  @return $size / 16px * 1rem;
@@ -1,7 +1,8 @@
1
+ // Kept for backwards compatibility.
1
2
  .nypl-ds {
2
3
  box-sizing: border-box;
3
- color: var(--ui-black);
4
- font-family: var(--typeface-body);
4
+ color: var(--nypl-colors-ui-black);
5
+ font-family: var(--nypl-fonts-body);
5
6
 
6
7
  // Sets up the base font-size, 1rem, for the system
7
8
  font-size: 16px;
@@ -12,6 +13,10 @@
12
13
  // our breakout mixin. Fix identified here: https://cloudfour.com/thinks/breaking-out-with-viewport-units-and-calc/#one-big-dumb-caveat
13
14
  overflow-x: hidden;
14
15
 
16
+ p {
17
+ margin: 0 0 var(--nypl-space-s);
18
+ }
19
+
15
20
  *,
16
21
  *::after,
17
22
  *::before {
@@ -1,14 +1,3 @@
1
- // Focus state mixin
2
- @mixin focus-outline($darkBackground: false) {
3
- outline: 2px solid var(--ui-focus);
4
- outline-offset: 2px;
5
- z-index: 9999;
6
-
7
- @if $darkBackground {
8
- outline-color: var(--ui-white);
9
- }
10
- }
11
-
12
1
  // Apply :focus behavior to focusable elements only (For IE 11)
13
2
  .nypl-ds {
14
3
  input,
@@ -31,7 +20,3 @@
31
20
  }
32
21
  }
33
22
  }
34
-
35
- .focus {
36
- @include focus-outline;
37
- }
@@ -1,8 +1,19 @@
1
1
  .placeholder {
2
- --color-place-holder: var(--ui-gray-light-cool);
2
+ --color-place-holder: var(--nypl-colors-ui-gray-dark);
3
3
 
4
- @include space-stack-page;
5
- @include space-inset-s;
4
+ margin-bottom: var(--nypl-space-l);
5
+ @include breakpoint($nypl-breakpoint-large) {
6
+ margin-bottom: var(--nypl-space-xl);
7
+ }
8
+
9
+ &--full {
10
+ margin-bottom: var(--nypl-space-xxl);
11
+ @include breakpoint($nypl-breakpoint-large) {
12
+ margin-bottom: var(--nypl-space-xxxl);
13
+ }
14
+ }
15
+
16
+ padding: var(--nypl-space-s);
6
17
 
7
18
  align-items: center;
8
19
  border: 4px dashed var(--color-place-holder);
@@ -1,11 +1,11 @@
1
1
  /**
2
- * $space-xxs: $space / 4; // 4px
3
- * $space-xs: $space / 2; // 8px
4
- * $space-s: $space * 1; // 16px
5
- * $space-m: $space * 1.5; // 24px
6
- * $space-l: $space * 2; // 32px
7
- * $space-xl: $space * 3; // 48px
8
- * $space-xxl: $space * 4; // 64px
2
+ * --nypl-space-xxs: --nypl-space-s / 4 // 4px or 0.25rem
3
+ * --nypl-space-xs: --nypl-space-s / 2 // 8px or 0.5rem
4
+ * --nypl-space-s: --nypl-space-s * 1; // 16px or 1rem
5
+ * --nypl-space-m: --nypl-space * 1.5; // 24px or 1.5rem
6
+ * --nypl-space-l: --nypl-space * 2; // 32px or 2rem
7
+ * --nypl-space-xl: --nypl-space * 3; // 48px or 3rem
8
+ * --nypl-space-xxl: --nypl-space * 4; // 64px or 4rem
9
9
  */
10
10
 
11
11
  @mixin space-inline-none {
@@ -13,31 +13,31 @@
13
13
  }
14
14
 
15
15
  @mixin space-inline-xxs {
16
- margin-right: var(--space-xxs);
16
+ margin-right: var(--nypl-space-xxs);
17
17
  }
18
18
 
19
19
  @mixin space-inline-xs {
20
- margin-right: var(--space-xs);
20
+ margin-right: var(--nypl-space-xs);
21
21
  }
22
22
 
23
23
  @mixin space-inline-s {
24
- margin-right: var(--space-s);
24
+ margin-right: var(--nypl-space-s);
25
25
  }
26
26
 
27
27
  @mixin space-inline-m {
28
- margin-right: var(--space-m);
28
+ margin-right: var(--nypl-space-m);
29
29
  }
30
30
 
31
31
  @mixin space-inline-l {
32
- margin-right: var(--space-l);
32
+ margin-right: var(--nypl-space-l);
33
33
  }
34
34
 
35
35
  @mixin space-inline-xl {
36
- margin-right: var(--space-xl);
36
+ margin-right: var(--nypl-space-xl);
37
37
  }
38
38
 
39
39
  @mixin space-inline-xxl {
40
- margin-right: var(--space-xxl);
40
+ margin-right: var(--nypl-space-xxl);
41
41
  }
42
42
 
43
43
  @mixin get-space-inline($id) {
@@ -1,9 +1,9 @@
1
1
  /**
2
- * $space-xs: $space / 2; // 8px
3
- * $space-s: $space * 1; // 16px
4
- * $space-m: $space * 1.5; // 24px
5
- * $space-l: $space * 2; // 32px
6
- * $space-xl: $space * 3; // 48px
2
+ * --nypl-space-xs: --nypl-space-s / 2 // 8px or 0.5rem
3
+ * --nypl-space-s: --nypl-space-s * 1; // 16px or 1rem
4
+ * --nypl-space-m: --nypl-space * 1.5; // 24px or 1.5rem
5
+ * --nypl-space-l: --nypl-space * 2; // 32px or 2rem
6
+ * --nypl-space-xl: --nypl-space * 3; // 48px or 3rem
7
7
  */
8
8
 
9
9
  @mixin space-inset-none {
@@ -11,23 +11,23 @@
11
11
  }
12
12
 
13
13
  @mixin space-inset-xs {
14
- padding: var(--space-xs);
14
+ padding: var(--nypl-space-xs);
15
15
  }
16
16
 
17
17
  @mixin space-inset-s {
18
- padding: var(--space-s);
18
+ padding: var(--nypl-space-s);
19
19
  }
20
20
 
21
21
  @mixin space-inset-m {
22
- padding: var(--space-m);
22
+ padding: var(--nypl-space-m);
23
23
  }
24
24
 
25
25
  @mixin space-inset-l {
26
- padding: var(--space-l);
26
+ padding: var(--nypl-space-l);
27
27
  }
28
28
 
29
29
  @mixin space-inset-xl {
30
- padding: var(--space-xl);
30
+ padding: var(--nypl-space-xl);
31
31
  }
32
32
 
33
33
  @mixin get-space-inset($id) {
@@ -0,0 +1,116 @@
1
+ /**
2
+ * --nypl-space-xxs: --nypl-space-s / 4 // 4px or 0.25rem
3
+ * --nypl-space-xs: --nypl-space-s / 2 // 8px or 0.5rem
4
+ * --nypl-space-s: --nypl-space-s * 1; // 16px or 1rem
5
+ * --nypl-space-m: --nypl-space-s * 1.5; // 24px or 1.5rem
6
+ * --nypl-space-l: --nypl-space-s * 2; // 32px or 2rem
7
+ * --nypl-space-xl: --nypl-space-s * 3; // 48px or 3rem
8
+ * --nypl-space-xxl: --nypl-space-s * 4; // 64px or 4rem
9
+ * --nypl-space-xxxl: --nypl-space-s * 6; // 96px or 6rem
10
+ */
11
+
12
+ @mixin space-stack-none {
13
+ margin-bottom: 0;
14
+ }
15
+
16
+ @mixin space-stack-xxs {
17
+ margin-bottom: var(--nypl-space-xxs);
18
+ }
19
+
20
+ @mixin space-stack-xs {
21
+ margin-bottom: var(--nypl-space-xs);
22
+ }
23
+
24
+ @mixin space-stack-s {
25
+ margin-bottom: var(--nypl-space-s);
26
+ }
27
+
28
+ @mixin space-stack-m {
29
+ margin-bottom: var(--nypl-space-m);
30
+ }
31
+
32
+ @mixin space-stack-l {
33
+ margin-bottom: var(--nypl-space-l);
34
+ }
35
+
36
+ @mixin space-stack-xl {
37
+ margin-bottom: var(--nypl-space-xl);
38
+ }
39
+
40
+ @mixin space-stack-xxl {
41
+ margin-bottom: var(--nypl-space-xxl);
42
+ }
43
+
44
+ @mixin space-stack-xxxl {
45
+ margin-bottom: var(--nypl-space-xxxl);
46
+ }
47
+
48
+ @mixin space-stack-page {
49
+ @include space-stack-l;
50
+
51
+ @include breakpoint($nypl-breakpoint-large) {
52
+ @include space-stack-xl;
53
+ }
54
+
55
+ &--full {
56
+ @include space-stack-xxl;
57
+
58
+ @include breakpoint($nypl-breakpoint-large) {
59
+ @include space-stack-xxxl;
60
+ }
61
+ }
62
+ }
63
+
64
+ @mixin remove-stack-page {
65
+ margin-top: calc(-1 * 32px);
66
+
67
+ @include breakpoint($nypl-breakpoint-large) {
68
+ margin-top: calc(-1 * 48px);
69
+ }
70
+
71
+ &--full {
72
+ margin-top: calc(-1 * 64px);
73
+
74
+ @include breakpoint($nypl-breakpoint-large) {
75
+ margin-top: calc(-1 * 96px);
76
+ }
77
+ }
78
+ }
79
+
80
+ @mixin get-space-stack($id) {
81
+ @if $id == "none" {
82
+ @include space-stack-none;
83
+ }
84
+
85
+ @if $id == "xxs" {
86
+ @include space-stack-xxs;
87
+ }
88
+
89
+ @if $id == "xs" {
90
+ @include space-stack-xs;
91
+ }
92
+
93
+ @if $id == "s" {
94
+ @include space-stack-s;
95
+ }
96
+
97
+ @if $id == "m" {
98
+ @include space-stack-m;
99
+ }
100
+
101
+ @if $id == "l" {
102
+ @include space-stack-l;
103
+ }
104
+
105
+ @if $id == "xl" {
106
+ @include space-stack-xl;
107
+ }
108
+
109
+ @if $id == "xxl" {
110
+ @include space-stack-xxl;
111
+ }
112
+
113
+ @if $id == "xxxl" {
114
+ @include space-stack-xxxl;
115
+ }
116
+ }