@nypl/design-system-react-components 0.23.4 → 0.25.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 (307) hide show
  1. package/CHANGELOG.md +98 -1
  2. package/README.md +46 -11
  3. package/dist/components/Accordion/Accordion.d.ts +14 -14
  4. package/dist/components/Autosuggest/Autosuggest.stories.d.ts +1 -0
  5. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
  6. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  7. package/dist/components/Button/Button.d.ts +6 -13
  8. package/dist/components/Button/ButtonTypes.d.ts +5 -3
  9. package/dist/components/Card/Card.d.ts +59 -10
  10. package/dist/components/Card/CardTypes.d.ts +19 -0
  11. package/dist/components/CardEdition/CardEdition.d.ts +21 -0
  12. package/dist/components/{StyleGuide/Colors.stories.d.ts → CardEdition/CardEdition.stories.d.ts} +5 -2
  13. package/dist/components/Checkbox/Checkbox.d.ts +21 -16
  14. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
  15. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  16. package/dist/components/DatePicker/DatePicker.d.ts +79 -0
  17. package/dist/components/DatePicker/DatePickerTypes.d.ts +5 -0
  18. package/dist/components/Form/Form.d.ts +16 -8
  19. package/dist/components/Form/FormTypes.d.ts +2 -0
  20. package/dist/components/Grid/GridTypes.d.ts +9 -0
  21. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  22. package/dist/components/Heading/Heading.d.ts +9 -11
  23. package/dist/components/Heading/{HeadingDisplaySizes.d.ts → HeadingTypes.d.ts} +8 -0
  24. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +2 -1
  25. package/dist/components/Hero/Hero.d.ts +19 -14
  26. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  27. package/dist/components/Icons/Icon.d.ts +13 -16
  28. package/dist/components/Icons/IconSvgs.d.ts +4 -0
  29. package/dist/components/Icons/IconTypes.d.ts +78 -60
  30. package/dist/components/Image/Image.stories.d.ts +2 -1
  31. package/dist/components/Label/Label.d.ts +10 -26
  32. package/dist/components/Link/Link.d.ts +8 -12
  33. package/dist/components/List/List.stories.d.ts +1 -0
  34. package/dist/components/Radio/Radio.d.ts +30 -24
  35. package/dist/components/RadioGroup/RadioGroup.d.ts +40 -0
  36. package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +4 -0
  37. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  38. package/dist/components/Select/Select.d.ts +34 -35
  39. package/dist/components/Select/SelectTypes.d.ts +4 -0
  40. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
  41. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  42. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  43. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  44. package/dist/components/Tabs/Tabs.d.ts +25 -0
  45. package/dist/components/Template/Template.d.ts +91 -0
  46. package/dist/components/Text/Text.d.ts +16 -0
  47. package/dist/components/Text/TextTypes.d.ts +6 -0
  48. package/dist/components/TextInput/TextInput.d.ts +37 -30
  49. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  50. package/dist/design-system-react-components.cjs.development.js +4102 -917
  51. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  52. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  53. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  54. package/dist/design-system-react-components.esm.js +4023 -920
  55. package/dist/design-system-react-components.esm.js.map +1 -1
  56. package/dist/index.d.ts +23 -5
  57. package/dist/resources.scss +133 -24
  58. package/dist/styles.css +1 -1
  59. package/dist/theme/components/accordion.d.ts +25 -0
  60. package/dist/theme/components/breadcrumb.d.ts +90 -0
  61. package/dist/theme/components/button.d.ts +109 -0
  62. package/dist/theme/components/checkbox.d.ts +91 -0
  63. package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
  64. package/dist/theme/components/customRadioGroup.d.ts +18 -0
  65. package/dist/theme/components/global.d.ts +55 -0
  66. package/dist/theme/components/globalMixins.d.ts +15 -0
  67. package/dist/theme/components/heading.d.ts +110 -0
  68. package/dist/theme/components/hero.d.ts +492 -0
  69. package/dist/theme/components/icon.d.ts +13 -0
  70. package/dist/theme/components/label.d.ts +16 -0
  71. package/dist/theme/components/link.d.ts +45 -0
  72. package/dist/theme/components/radio.d.ts +95 -0
  73. package/dist/theme/components/searchBar.d.ts +20 -0
  74. package/dist/theme/components/select.d.ts +58 -0
  75. package/dist/theme/components/statusBadge.d.ts +25 -0
  76. package/dist/theme/components/tabs.d.ts +85 -0
  77. package/dist/theme/components/template.d.ts +105 -0
  78. package/dist/theme/components/text.d.ts +20 -0
  79. package/dist/theme/components/textInput.d.ts +105 -0
  80. package/dist/theme/foundations/breakpoints.d.ts +23 -0
  81. package/dist/theme/foundations/colors.d.ts +3 -0
  82. package/dist/theme/foundations/global.d.ts +23 -0
  83. package/dist/theme/foundations/shadows.d.ts +4 -0
  84. package/dist/theme/foundations/spacing.d.ts +77 -0
  85. package/dist/theme/foundations/typography.d.ts +8 -0
  86. package/dist/theme/index.d.ts +20 -0
  87. package/dist/theme/provider.d.ts +5 -0
  88. package/dist/theme/types.d.ts +1 -0
  89. package/dist/utils/utils.d.ts +6 -0
  90. package/package.json +9 -2
  91. package/src/components/Accordion/Accordion.stories.mdx +233 -33
  92. package/src/components/Accordion/Accordion.test.tsx +135 -19
  93. package/src/components/Accordion/Accordion.tsx +81 -56
  94. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  95. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
  96. package/src/components/Autosuggest/_Autosuggest.scss +2 -2
  97. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +57 -56
  98. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
  99. package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
  100. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  101. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
  102. package/src/components/Button/Button.stories.mdx +125 -138
  103. package/src/components/Button/Button.test.tsx +65 -11
  104. package/src/components/Button/Button.tsx +72 -68
  105. package/src/components/Button/ButtonTypes.tsx +4 -2
  106. package/src/components/Button/_Button.scss +7 -92
  107. package/src/components/Button/__snapshots__/Button.test.tsx.snap +58 -3
  108. package/src/components/Card/Card.stories.mdx +694 -0
  109. package/src/components/Card/Card.test.tsx +97 -102
  110. package/src/components/Card/Card.tsx +182 -31
  111. package/src/components/Card/CardTypes.tsx +21 -0
  112. package/src/components/Card/_Card.scss +234 -49
  113. package/src/components/{Card/Card.stories.tsx → CardEdition/CardEdition.stories.tsx} +32 -22
  114. package/src/components/CardEdition/CardEdition.test.tsx +395 -0
  115. package/src/components/CardEdition/CardEdition.tsx +60 -0
  116. package/src/components/CardEdition/_CardEdition.scss +138 -0
  117. package/src/components/Chakra/Box.stories.mdx +57 -0
  118. package/src/components/Chakra/Center.stories.mdx +99 -0
  119. package/src/components/Chakra/Grid.stories.mdx +79 -0
  120. package/src/components/Chakra/Stack.stories.mdx +93 -0
  121. package/src/components/Checkbox/Checkbox.stories.mdx +57 -35
  122. package/src/components/Checkbox/Checkbox.test.tsx +117 -147
  123. package/src/components/Checkbox/Checkbox.tsx +76 -50
  124. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +325 -0
  125. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
  126. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
  127. package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
  128. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  129. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
  130. package/src/components/DatePicker/DatePicker.stories.mdx +284 -0
  131. package/src/components/DatePicker/DatePicker.test.tsx +657 -0
  132. package/src/components/DatePicker/DatePicker.tsx +396 -0
  133. package/src/components/DatePicker/DatePickerTypes.tsx +5 -0
  134. package/src/components/DatePicker/_DatePicker.scss +76 -0
  135. package/src/components/Form/Form.stories.mdx +130 -27
  136. package/src/components/Form/Form.test.tsx +78 -36
  137. package/src/components/Form/Form.tsx +53 -19
  138. package/src/components/Form/FormTypes.tsx +3 -0
  139. package/src/components/Form/__snapshots__/Form.test.tsx.snap +38 -0
  140. package/src/components/Grid/GridTypes.tsx +9 -0
  141. package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
  142. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  143. package/src/components/Grid/SimpleGrid.tsx +37 -0
  144. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  145. package/src/components/Heading/Heading.stories.mdx +63 -33
  146. package/src/components/Heading/Heading.test.tsx +24 -16
  147. package/src/components/Heading/Heading.tsx +54 -38
  148. package/src/components/Heading/{HeadingDisplaySizes.tsx → HeadingTypes.tsx} +9 -0
  149. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +2 -1
  150. package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
  151. package/src/components/Hero/Hero.stories.mdx +195 -85
  152. package/src/components/Hero/Hero.test.tsx +544 -113
  153. package/src/components/Hero/Hero.tsx +80 -93
  154. package/src/components/Hero/HeroTypes.tsx +17 -5
  155. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  156. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -1
  157. package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
  158. package/src/components/Icons/Icon.stories.mdx +89 -74
  159. package/src/components/Icons/Icon.test.tsx +30 -22
  160. package/src/components/Icons/Icon.tsx +63 -61
  161. package/src/components/Icons/IconSvgs.tsx +8 -0
  162. package/src/components/Icons/IconTypes.tsx +80 -60
  163. package/src/components/Image/Image.stories.tsx +2 -1
  164. package/src/components/Input/_Input.scss +2 -2
  165. package/src/components/Label/Label.stories.mdx +77 -0
  166. package/src/components/Label/Label.test.tsx +43 -12
  167. package/src/components/Label/Label.tsx +28 -45
  168. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  169. package/src/components/Link/Link.stories.mdx +47 -41
  170. package/src/components/Link/Link.test.tsx +33 -44
  171. package/src/components/Link/Link.tsx +114 -100
  172. package/src/components/List/List.stories.mdx +7 -3
  173. package/src/components/List/List.stories.tsx +14 -9
  174. package/src/components/List/List.test.tsx +12 -8
  175. package/src/components/List/List.tsx +9 -7
  176. package/src/components/List/_List.scss +3 -3
  177. package/src/components/Modal/Modal.stories.mdx +7 -3
  178. package/src/components/Modal/_Modal.scss +1 -1
  179. package/src/components/Notification/Notification.stories.mdx +99 -65
  180. package/src/components/Notification/Notification.test.tsx +3 -16
  181. package/src/components/Notification/Notification.tsx +12 -12
  182. package/src/components/Notification/_Notification.scss +5 -4
  183. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +1 -1
  184. package/src/components/Pagination/Pagination.stories.mdx +7 -1
  185. package/src/components/Pagination/Pagination.test.tsx +16 -10
  186. package/src/components/Radio/Radio.stories.mdx +57 -46
  187. package/src/components/Radio/Radio.test.tsx +92 -138
  188. package/src/components/Radio/Radio.tsx +70 -69
  189. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +250 -0
  190. package/src/components/RadioGroup/RadioGroup.stories.mdx +247 -0
  191. package/src/components/RadioGroup/RadioGroup.test.tsx +327 -0
  192. package/src/components/RadioGroup/RadioGroup.tsx +154 -0
  193. package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +4 -0
  194. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1101 -0
  195. package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
  196. package/src/components/SearchBar/SearchBar.stories.mdx +196 -224
  197. package/src/components/SearchBar/SearchBar.tsx +151 -46
  198. package/src/components/Select/Select.stories.mdx +193 -168
  199. package/src/components/Select/Select.test.tsx +129 -324
  200. package/src/components/Select/Select.tsx +120 -160
  201. package/src/components/Select/SelectTypes.tsx +4 -0
  202. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +18 -29
  203. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
  204. package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
  205. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  206. package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
  207. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  208. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  209. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  210. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  211. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  212. package/src/components/StyleGuide/Bidirectionality.stories.mdx +112 -90
  213. package/src/components/StyleGuide/Buttons.stories.mdx +98 -100
  214. package/src/components/StyleGuide/Colors.stories.mdx +336 -0
  215. package/src/components/StyleGuide/Forms.stories.mdx +85 -0
  216. package/src/components/StyleGuide/Iconography.stories.mdx +86 -93
  217. package/src/components/StyleGuide/Spacing.stories.mdx +0 -1
  218. package/src/components/StyleGuide/Typography.stories.mdx +164 -166
  219. package/src/components/StyleGuide/UIDocCard.tsx +4 -4
  220. package/src/components/Tabs/Tabs.stories.mdx +221 -0
  221. package/src/components/Tabs/Tabs.test.tsx +264 -0
  222. package/src/components/Tabs/Tabs.tsx +220 -0
  223. package/src/components/Template/Template.stories.mdx +574 -0
  224. package/src/components/Template/Template.test.tsx +124 -0
  225. package/src/components/Template/Template.tsx +226 -0
  226. package/src/components/Text/Text.stories.mdx +70 -0
  227. package/src/components/Text/Text.test.tsx +63 -0
  228. package/src/components/Text/Text.tsx +55 -0
  229. package/src/components/Text/TextTypes.tsx +6 -0
  230. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  231. package/src/components/TextInput/TextInput.stories.mdx +90 -90
  232. package/src/components/TextInput/TextInput.test.tsx +103 -83
  233. package/src/components/TextInput/TextInput.tsx +108 -91
  234. package/src/components/TextInput/TextInputTypes.tsx +6 -0
  235. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -1
  236. package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
  237. package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
  238. package/src/docs/Chakra.stories.mdx +341 -0
  239. package/src/docs/Intro.stories.mdx +31 -24
  240. package/src/index.ts +70 -5
  241. package/src/styles/01-colors/_colors-brand.scss +6 -4
  242. package/src/styles/01-colors/_colors-utility.scss +14 -15
  243. package/src/styles/03-space/_space-inline.scss +47 -7
  244. package/src/styles/03-space/_space-inset.scss +33 -5
  245. package/src/styles/03-space/_space-stack.scss +48 -8
  246. package/src/styles/base/_02-breakpoints.scss +5 -4
  247. package/src/styles/base/_04-base.scss +2 -1
  248. package/src/styles/base/_place-holder.scss +1 -1
  249. package/src/styles/base/_typography.scss +1 -29
  250. package/src/styles.scss +22 -25
  251. package/src/theme/components/accordion.ts +30 -0
  252. package/src/theme/components/breadcrumb.ts +77 -0
  253. package/src/theme/components/button.ts +125 -0
  254. package/src/theme/components/checkbox.ts +107 -0
  255. package/src/theme/components/customCheckboxGroup.ts +12 -0
  256. package/src/theme/components/customRadioGroup.ts +12 -0
  257. package/src/theme/components/global.ts +71 -0
  258. package/src/theme/components/globalMixins.ts +16 -0
  259. package/src/theme/components/heading.ts +72 -0
  260. package/src/theme/components/hero.ts +239 -0
  261. package/src/theme/components/icon.ts +79 -0
  262. package/src/theme/components/label.ts +17 -0
  263. package/src/theme/components/link.ts +47 -0
  264. package/src/theme/components/radio.ts +106 -0
  265. package/src/theme/components/searchBar.ts +21 -0
  266. package/src/theme/components/select.ts +50 -0
  267. package/src/theme/components/statusBadge.ts +27 -0
  268. package/src/theme/components/tabs.ts +79 -0
  269. package/src/theme/components/template.ts +114 -0
  270. package/src/theme/components/text.ts +31 -0
  271. package/src/theme/components/textInput.ts +61 -0
  272. package/src/theme/foundations/breakpoints.ts +24 -0
  273. package/src/theme/foundations/colors.ts +208 -0
  274. package/src/theme/foundations/global.ts +26 -0
  275. package/src/theme/foundations/shadows.ts +5 -0
  276. package/src/theme/foundations/spacing.ts +85 -0
  277. package/src/theme/foundations/typography.ts +35 -0
  278. package/src/theme/index.ts +88 -0
  279. package/src/theme/provider.tsx +9 -0
  280. package/src/theme/types.ts +1 -0
  281. package/src/utils/componentCategories.ts +56 -21
  282. package/src/utils/utils.ts +13 -0
  283. package/dist/components/Accordion/Accordion.stories.d.ts +0 -5
  284. package/dist/components/Card/Card.stories.d.ts +0 -27
  285. package/dist/components/Label/Label.stories.d.ts +0 -12
  286. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  287. package/dist/components/Template/Template.stories.d.ts +0 -29
  288. package/src/components/Accordion/Accordion.stories.tsx +0 -65
  289. package/src/components/Accordion/_Accordion.scss +0 -81
  290. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  291. package/src/components/Checkbox/_Checkbox.scss +0 -97
  292. package/src/components/Form/_Form.scss +0 -28
  293. package/src/components/Heading/_Heading.scss +0 -163
  294. package/src/components/Hero/_Hero.scss +0 -256
  295. package/src/components/Icons/_Icons.scss +0 -116
  296. package/src/components/Label/Label.stories.tsx +0 -30
  297. package/src/components/Label/_Label.scss +0 -22
  298. package/src/components/Link/_Link.scss +0 -73
  299. package/src/components/Radio/_Radio.scss +0 -84
  300. package/src/components/SearchBar/_SearchBar.scss +0 -16
  301. package/src/components/Select/_Select.scss +0 -82
  302. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -33
  303. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  304. package/src/components/StyleGuide/Colors.stories.tsx +0 -288
  305. package/src/components/Template/Template.stories.tsx +0 -85
  306. package/src/components/Template/_Template.scss +0 -63
  307. package/src/components/TextInput/_TextInput.scss +0 -59
@@ -0,0 +1,114 @@
1
+ // From @mixin breakout:
2
+ // Used for elements that should be edge-to-edge.
3
+ const breakout = {
4
+ marginLeft: "calc(-50vw + 50%)",
5
+ marginRight: "calc(-50vw + 50%)",
6
+ };
7
+ // From the `wrapper` SCSS mixin.
8
+ // TODO: Eventually we may be able to put shared JS style objects
9
+ // into a utils file for other mixins that are shared.
10
+ const wrapperStyles = {
11
+ marginY: 0,
12
+ marginX: "auto",
13
+ maxWidth: "1280px",
14
+ paddingTop: 0,
15
+ paddingBottom: 0,
16
+ paddingRight: 0,
17
+ paddingLeft: 0,
18
+ width: "100%",
19
+ };
20
+
21
+ const Template = {
22
+ baseStyle: {
23
+ boxSizing: "border-box",
24
+ color: "ui.black",
25
+ // Users with non-overlay scrollbars have a small horizontal scrollbar from
26
+ // our breakout mixin. Fix identified here: https://cloudfour.com/thinks/breaking-out-with-viewport-units-and-calc/#one-big-dumb-caveat
27
+ overflowX: "hidden",
28
+ "*": { boxSizing: "inherit" },
29
+ "*::after": { boxSizing: "inherit" },
30
+ "*::before": { boxSizing: "inherit" },
31
+ },
32
+ sizes: {},
33
+ defaultProps: {},
34
+ };
35
+ const TemplateHeader = {
36
+ baseStyle: {
37
+ marginBottom: 8, // --space-l
38
+ },
39
+ };
40
+ const TemplateBreakout = {
41
+ baseStyle: {
42
+ ...breakout,
43
+ width: "100vw",
44
+ marginBottom: 8, // --space-l
45
+ },
46
+ };
47
+ const TemplateContent = {
48
+ baseStyle: {
49
+ ...wrapperStyles,
50
+ display: "block",
51
+ marginBottom: 8, // --space-l
52
+ },
53
+ variants: {
54
+ sidebar: {
55
+ display: "flex",
56
+ flexFlow: {
57
+ base: "column nowrap",
58
+ md: "row wrap",
59
+ },
60
+ },
61
+ },
62
+ };
63
+ const TemplateContentTop = {
64
+ baseStyle: {
65
+ flex: "1 0 100%",
66
+ marginBottom: 8, // --space-l
67
+ },
68
+ };
69
+ const TemplateContentPrimary = {
70
+ baseStyle: {
71
+ flex: "1 1",
72
+ marginBottom: 8, // --space-l
73
+ },
74
+ variants: {
75
+ left: {
76
+ display: "flex",
77
+ flexFlow: "column nowrap",
78
+ order: "1",
79
+ marginRight: { md: 0 },
80
+ minWidth: { md: 0 },
81
+ },
82
+ },
83
+ };
84
+ const TemplateContentSidebar = {
85
+ baseStyle: {
86
+ flex: "0 0 255px",
87
+ order: { md: "1" },
88
+ marginBottom: 8, // --space-l
89
+ },
90
+ variants: {
91
+ left: {
92
+ marginRight: {
93
+ base: 0,
94
+ md: 12, // --space-xl
95
+ },
96
+ },
97
+ right: {
98
+ marginLeft: {
99
+ base: 0,
100
+ md: 12, // --space-xl
101
+ },
102
+ },
103
+ },
104
+ };
105
+
106
+ export default {
107
+ Template,
108
+ TemplateHeader,
109
+ TemplateBreakout,
110
+ TemplateContent,
111
+ TemplateContentTop,
112
+ TemplateContentPrimary,
113
+ TemplateContentSidebar,
114
+ };
@@ -0,0 +1,31 @@
1
+ const variants = {
2
+ default: {},
3
+ caption: {
4
+ fontSize: "-1",
5
+ },
6
+ tag: {
7
+ fontSize: "-2",
8
+ },
9
+ mini: {
10
+ fontSize: "-3",
11
+ },
12
+ };
13
+ const Text = {
14
+ baseStyle: (props) => {
15
+ const fontWeight = props.isBold
16
+ ? "bold"
17
+ : props.variant === "tag" || props.variant === "min"
18
+ ? "regular"
19
+ : null;
20
+ const fontStyle = props.isItalic ? "italic" : null;
21
+
22
+ return {
23
+ fontStyle: fontStyle,
24
+ fontWeight: fontWeight,
25
+ marginBottom: props.noSpace ? "0 !important" : null,
26
+ };
27
+ },
28
+ variants,
29
+ };
30
+
31
+ export default Text;
@@ -0,0 +1,61 @@
1
+ import { activeFocus, helperTextMargin } from "./global";
2
+
3
+ const input = {
4
+ border: "1px solid",
5
+ borderColor: "ui.gray.medium",
6
+ borderRadius: "2px",
7
+ py: "xs",
8
+ px: "s",
9
+ _hover: {
10
+ borderColor: "ui.gray.dark",
11
+ },
12
+ _disabled: {
13
+ bgColor: "ui.gray.xx-light-cool",
14
+ color: "ui.gray.xdark",
15
+ opacity: "1",
16
+ },
17
+ _active: activeFocus,
18
+ _focus: activeFocus,
19
+ _placeholder: {
20
+ color: "ui.gray.dark",
21
+ fontStyle: "italic",
22
+ lineHeight: "21px",
23
+ },
24
+ _invalid: {
25
+ border: "1px solid",
26
+ borderColor: "ui.error.primary",
27
+ boxShadow: "none",
28
+ },
29
+ };
30
+
31
+ const TextInput = {
32
+ parts: ["helper", "input", "textarea"],
33
+ baseStyle: {
34
+ marginBottom: "xs",
35
+ helper: {
36
+ ...helperTextMargin,
37
+ },
38
+ input,
39
+ textarea: {
40
+ ...input,
41
+ lineheight: "1.5",
42
+ minHeight: "xxl",
43
+ },
44
+ },
45
+ variants: {
46
+ searchBar: {
47
+ flex: "1 1 80%",
48
+ input: {
49
+ borderRightRadius: "0",
50
+ },
51
+ },
52
+ searchBarSelect: {
53
+ flex: "1 1 80%",
54
+ input: {
55
+ borderRadius: "0",
56
+ },
57
+ },
58
+ },
59
+ };
60
+
61
+ export default TextInput;
@@ -0,0 +1,24 @@
1
+ import { createBreakpoints } from "@chakra-ui/theme-tools";
2
+
3
+ /**
4
+ * Breakpoints from "src/styles/base/_02-breakpoints.scss"
5
+ * How to use Chakra responsive styles: https://chakra-ui.com/docs/features/responsive-styles
6
+ *
7
+ * Chakra Value | DS Variable | EM/PX value
8
+ * --------------------------------------------------
9
+ * sm | --breakpoint-small | 20em/320px
10
+ * md | --breakpoint-medium | 38em/600px
11
+ * lg | --breakpoint-large | 60em/960px
12
+ * xl | --breakpoint-xl | 80em/1280px
13
+ * 2xl | N/A | 96em/1536px
14
+ *
15
+ * @Note Chakra provides a 2xl option while the DS does not. We don't
16
+ * recommend using this value until further notice.
17
+ */
18
+ export default createBreakpoints({
19
+ sm: "20em",
20
+ md: "38em",
21
+ lg: "60em",
22
+ xl: "80em",
23
+ "2xl": "96em",
24
+ });
@@ -0,0 +1,208 @@
1
+ import { Colors } from "@chakra-ui/react";
2
+
3
+ /**
4
+ * Colors taken from "../../styles/01-colors/*.scss"
5
+ *
6
+ * All UI colors can be found in Storybook:
7
+ * https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/documentation-style-guide-colors--colors-utility
8
+ * and in Figma:
9
+ * https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=14989%3A37
10
+ *
11
+ * All Brand colors can be found in Storybook:
12
+ * https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/documentation-style-guide-colors--colors-brand
13
+ * and in Figma:
14
+ * https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=15454%3A47007
15
+ *
16
+ * At the end of this file, there are objects that extend Chakra's default
17
+ * color shade palette for individual colors. WE DO NOT RECOMMEND to use them
18
+ * and only recommend to use the colors defined by the Design System such as the
19
+ * following "ui", "brand", and "section" colors below.
20
+ */
21
+
22
+ // Reusable variables:
23
+ const grayLightCool = "#E0E0E0";
24
+ const grayxxLightCool = "#FAFAFA";
25
+ const grayMedium = "#BDBDBD";
26
+ const brandPrimary = "#C60917";
27
+ const brandSecondary = "#760000";
28
+ const brandObj = {
29
+ primary: brandPrimary,
30
+ secondary: brandSecondary,
31
+ };
32
+
33
+ const colors: Colors = {
34
+ transparent: "transparent",
35
+
36
+ // ui fills
37
+ ui: {
38
+ black: "#000",
39
+ white: "#fff",
40
+ /// State and link utilities
41
+ disabled: {
42
+ primary: grayLightCool,
43
+ secondary: grayxxLightCool,
44
+ },
45
+ error: {
46
+ primary: "#97272C",
47
+ secondary: "#6F0106",
48
+ },
49
+ focus: "#4181F1",
50
+ link: {
51
+ primary: "#0576D3",
52
+ secondary: "#004B98",
53
+ },
54
+ status: {
55
+ primary: "#F9E08E",
56
+ secondary: "#FBE7E1",
57
+ },
58
+ success: {
59
+ primary: "#077719",
60
+ secondary: "#095212",
61
+ },
62
+ test: "#FF6347",
63
+ warning: {
64
+ primary: "#F0974E",
65
+ secondary: "#EC7B1F",
66
+ },
67
+ // Grayscale
68
+ gray: {
69
+ xdark: "#424242",
70
+ dark: "#616161",
71
+ medium: grayMedium,
72
+ "light-cool": grayLightCool,
73
+ "light-warm": "#EFEDEB",
74
+ "x-light-cool": "#F5F5F5",
75
+ "x-light-warm": "#F8F8F7",
76
+ "xx-light-cool": grayxxLightCool,
77
+ },
78
+ },
79
+
80
+ /** Brand fills are the NYPL primary and secondary colors. */
81
+ brand: brandObj,
82
+
83
+ /** Brand fills for sections on NYPL pages. */
84
+ section: {
85
+ /** What's On is used for Exhibitions & Events. */
86
+ "whats-on": {
87
+ primary: "#242424",
88
+ secondary: "#000000",
89
+ },
90
+
91
+ /** Books and More is used for the Catalog, Staff Picks, Recommendations,
92
+ * New Arrivals, and E-Book Central. */
93
+ "books-and-more": brandObj,
94
+
95
+ /** Research is used for the Research Catalog and SCC. */
96
+ research: {
97
+ primary: "#00838a",
98
+ secondary: "#006166",
99
+ },
100
+
101
+ /** Locations is used for Location Finder and all branch pages with
102
+ * the exceptions of some research libraries. */
103
+ locations: brandObj,
104
+
105
+ /** Blogs is used for the Blogs section. */
106
+ blogs: {
107
+ primary: grayLightCool,
108
+ secondary: grayMedium,
109
+ },
110
+
111
+ /** Research libraries with specific brand colors to adhere to. */
112
+ "research-library": {
113
+ lpa: "#005d53",
114
+ schomburg: "#a03e31",
115
+ schwartzman: brandSecondary,
116
+ },
117
+ },
118
+
119
+ /**
120
+ * The following color scales are useful for color edge cases where a
121
+ * distinct named ui or brand color doesn't quite work. These are used by
122
+ * Chakra and have been generated through https://themera.vercel.app/.
123
+ * While these colors are available, WE DO NOT RECOMMEND using them. Stick
124
+ * with the utility colors declared above.
125
+ * @Note If you do need to use a color variant, please contant the DS team.
126
+ */
127
+
128
+ /** based on ui.gray.medium = #DBDBDB */
129
+ gray: {
130
+ 50: "#F2F2F2",
131
+ 100: "#DBDBDB",
132
+ 200: "#C4C4C4",
133
+ 300: "#ADADAD",
134
+ 400: "#969696",
135
+ 500: "#808080",
136
+ 600: "#666666",
137
+ 700: "#4D4D4D",
138
+ 800: "#333333",
139
+ 900: "#1A1A1A",
140
+ },
141
+ /** based on ui.brand.primary = #C60917 */
142
+ red: {
143
+ 50: "#FEE7E8",
144
+ 100: "#FCBBC0",
145
+ 200: "#FA8F97",
146
+ 300: "#F8636E",
147
+ 400: "#F63745",
148
+ 500: "#F40B1C",
149
+ 600: "#C30917",
150
+ 700: "#920711",
151
+ 800: "#62040B",
152
+ 900: "#310206",
153
+ },
154
+ /** based on ui.warning.secondary = #F0974E */
155
+ orange: {
156
+ 50: "#FDF1E7",
157
+ 100: "#F9D8BD",
158
+ 200: "#F6BF93",
159
+ 300: "#F2A769",
160
+ 400: "#EF8E3E",
161
+ 500: "#EB7514",
162
+ 600: "#BC5E10",
163
+ 700: "#8D460C",
164
+ 800: "#5E2F08",
165
+ 900: "#2F1704",
166
+ },
167
+ /** based on ui.status.primary = #F9E08E */
168
+ yellow: {
169
+ 50: "#FEF8E7",
170
+ 100: "#FBECBB",
171
+ 200: "#F9E090",
172
+ 300: "#F7D464",
173
+ 400: "#F4C938",
174
+ 500: "#F2BD0D",
175
+ 600: "#C2970A",
176
+ 700: "#917108",
177
+ 800: "#614B05",
178
+ 900: "#302603",
179
+ },
180
+ /** based on ui.success.primary = #077719 */
181
+ green: {
182
+ 50: "#E7FEEB",
183
+ 100: "#BCFBC6",
184
+ 200: "#90F8A1",
185
+ 300: "#65F67C",
186
+ 400: "#3AF357",
187
+ 500: "#0EF133",
188
+ 600: "#0BC128",
189
+ 700: "#08911E",
190
+ 800: "#066014",
191
+ 900: "#03300A",
192
+ },
193
+ /** based on ui.link.primary = #0576D3 */
194
+ blue: {
195
+ 50: "#E6F3FE",
196
+ 100: "#B9DFFD",
197
+ 200: "#8CCAFC",
198
+ 300: "#60B5FB",
199
+ 400: "#33A0FA",
200
+ 500: "#068BF9",
201
+ 600: "#056FC7",
202
+ 700: "#045495",
203
+ 800: "#023864",
204
+ 900: "#011C32",
205
+ },
206
+ };
207
+
208
+ export default colors;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * These rules affect all the global elements on the `body` element of the
3
+ * page when the `DSProvider` component is used. This means that even if the
4
+ * `nypl-ds` CSS class name is not used in a consuming application, these
5
+ * rules will still take effect.
6
+ */
7
+ const global = {
8
+ // styles for the `body` element
9
+ body: {
10
+ bg: "ui.white",
11
+ color: "ui.black",
12
+ fontFamily: "body",
13
+ fontSize: 0,
14
+ fontWeight: "300",
15
+ lineHeight: "1.5",
16
+ },
17
+ // styles for the `a` element
18
+ a: {
19
+ color: "ui.link.primary",
20
+ },
21
+ svg: {
22
+ display: "inline",
23
+ },
24
+ };
25
+
26
+ export default global;
@@ -0,0 +1,5 @@
1
+ const shadows = {
2
+ outline: "none",
3
+ };
4
+
5
+ export default shadows;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * This is based on:
3
+ * root size of 16px or 1rem
4
+ * 1 spacing unit is 4px or 0.25rem
5
+ *
6
+ * Chakra's mental model: If you need a spacing of 40px, divide it by 4.
7
+ * That'll give you 10. Then use it in your component.
8
+ *
9
+ * The DS uses eight CSS variables/values found in "src/styles/03-space/_space.css":
10
+ * --space-xxs = 4px or 0.25rem
11
+ * --space-xs = 8px or 0.5rem
12
+ * --space-s = 16px or 1rem
13
+ * --space-m = 24px or 1.5rem
14
+ * --space-l = 32px or 2rem
15
+ * --space-xl = 48px or 3rem
16
+ * --space-xxl = 64px or 4rem
17
+ * --space-xxxl = 96px or 6rem
18
+ *
19
+ * @note Even though all the following values are available through Chakra,
20
+ * we recommend to only use the spacing values that map to the DS values
21
+ * declared above.
22
+ *
23
+ * Chakra Number Value | Chakra Name value | DS Variable
24
+ * ------------------- | ----------------- | -----------------
25
+ * 1 | xxs | --space-xxs
26
+ * 2 | xs | --space-xs
27
+ * 4 | s | --space-s
28
+ * 6 | m | --space-m
29
+ * 8 | l | --space-l
30
+ * 12 | xl | --space-xl
31
+ * 16 | xxl | --space-xxl
32
+ * 24 | xxxl | --space-xxxl
33
+ */
34
+ export const spacing = {
35
+ px: "1px",
36
+ 0: "0",
37
+ 0.5: "0.125rem",
38
+ // --space-xxs = 4px
39
+ xxs: "0.25rem",
40
+ 1: "0.25rem",
41
+ 1.5: "0.375rem",
42
+ // --space-xs = 8px
43
+ xs: "0.5rem",
44
+ 2: "0.5rem",
45
+ 2.5: "0.625rem",
46
+ 3: "0.75rem",
47
+ 3.5: "0.875rem",
48
+ // --space-s = 16px
49
+ s: "1rem",
50
+ 4: "1rem",
51
+ 5: "1.25rem",
52
+ // --space-m = 24px
53
+ m: "1.5rem",
54
+ 6: "1.5rem",
55
+ 7: "1.75rem",
56
+ // --space-l = 32px
57
+ l: "2rem",
58
+ 8: "2rem",
59
+ 9: "2.25rem",
60
+ 10: "2.5rem",
61
+ // --space-xl = 48px
62
+ xl: "3rem",
63
+ 12: "3rem",
64
+ 14: "3.5rem",
65
+ // --space-xxl = 64px
66
+ xxl: "4rem",
67
+ 16: "4rem",
68
+ 20: "5rem",
69
+ // --space-xxxl = 96px
70
+ xxxl: "6rem",
71
+ 24: "6rem",
72
+ 28: "7rem",
73
+ 32: "8rem",
74
+ 36: "9rem",
75
+ 40: "10rem",
76
+ 44: "11rem",
77
+ 48: "12rem",
78
+ 52: "13rem",
79
+ 56: "14rem",
80
+ 60: "15rem",
81
+ 64: "16rem",
82
+ 72: "18rem",
83
+ 80: "20rem",
84
+ 96: "24rem",
85
+ };
@@ -0,0 +1,35 @@
1
+ import { Dict } from "../types";
2
+
3
+ type Typography = {
4
+ fonts: Dict;
5
+ fontSizes: Dict;
6
+ fontWeights: Dict;
7
+ };
8
+
9
+ const typography: Typography = {
10
+ // Values from "src/styles/02-typography/_typeface.css"
11
+ fonts: {
12
+ body: "-apple-system, BlinkMacSystemFont, system-ui, sans-serif",
13
+ heading: "-apple-system, BlinkMacSystemFont, system-ui, sans-seri",
14
+ },
15
+ // Values from "src/styles/02-typography/_type-scale.css"
16
+ fontSizes: {
17
+ "-3": "0.625rem",
18
+ "-2": "0.75rem",
19
+ "-1": "0.875rem",
20
+ "0": "1rem",
21
+ "1": "1.125rem",
22
+ "2": "1.375rem",
23
+ "3": "1.75rem",
24
+ "4": "2.25rem",
25
+ },
26
+ // Values from "src/styles/02-typography/_type-weight.css"
27
+ fontWeights: {
28
+ light: 300,
29
+ regular: 400,
30
+ medium: 500,
31
+ bold: 700,
32
+ },
33
+ };
34
+
35
+ export default typography;
@@ -0,0 +1,88 @@
1
+ import { extendTheme } from "@chakra-ui/react";
2
+ /** Global theme styles */
3
+ import global from "./foundations/global";
4
+ import breakpoints from "./foundations/breakpoints";
5
+ import colors from "./foundations/colors";
6
+ import shadows from "./foundations/shadows";
7
+ import { spacing } from "./foundations/spacing";
8
+ import typography from "./foundations/typography";
9
+ /** Component styles */
10
+ import Accordion from "./components/accordion";
11
+ import Breadcrumb from "./components/breadcrumb";
12
+ import Button from "./components/button";
13
+ import Checkbox from "./components/checkbox";
14
+ import CustomCheckboxGroup from "./components/customCheckboxGroup";
15
+ import CustomRadioGroup from "./components/customRadioGroup";
16
+ import CustomSelect from "./components/select";
17
+ import Heading from "./components/heading";
18
+ import Hero from "./components/hero";
19
+ import Icon from "./components/icon";
20
+ import Label from "./components/label";
21
+ import Link from "./components/link";
22
+ import Radio from "./components/radio";
23
+ import SearchBar from "./components/searchBar";
24
+ import StatusBadge from "./components/statusBadge";
25
+ import Tabs from "./components/tabs";
26
+ import TemplateStyles from "./components/template";
27
+ import Text from "./components/text";
28
+ import TextInput from "./components/textInput";
29
+
30
+ /**
31
+ * See Chakra default theme for shape of theme object:
32
+ * https://github.com/chakra-ui/chakra-ui/tree/main/packages/theme
33
+ *
34
+ * The following are using the default configuration from Chakra:
35
+ * - z-indices
36
+ * - radii
37
+ * - blur
38
+ * - shadows
39
+ * - borders
40
+ * - transitions
41
+ *
42
+ * Theme extensions exist for:
43
+ * - breakpoints
44
+ * - colors
45
+ * - typography (font, font size, font weight)
46
+ * - spacing
47
+ */
48
+ const theme = extendTheme({
49
+ styles: { global },
50
+ breakpoints,
51
+ colors,
52
+ shadows,
53
+ space: spacing,
54
+ ...typography,
55
+ /**
56
+ * Chakra documentation on component styles:
57
+ * https://chakra-ui.com/docs/theming/component-style
58
+ */
59
+ components: {
60
+ Accordion,
61
+ Breadcrumb,
62
+ Button,
63
+ Checkbox,
64
+ CustomCheckboxGroup,
65
+ CustomRadioGroup,
66
+ CustomSelect,
67
+ Heading,
68
+ Hero,
69
+ Icon,
70
+ Label,
71
+ Link,
72
+ Radio,
73
+ SearchBar,
74
+ StatusBadge,
75
+ Tabs,
76
+ ...TemplateStyles,
77
+ Text,
78
+ TextInput,
79
+ },
80
+ // Chakra prefixes its own CSS variables with `--chakra` by default but this
81
+ // can be updated to be anything we want. This can be "nypl" to have the
82
+ // `--nypl` prefix or even "" to have no prefix.
83
+ // config: {
84
+ // cssVarPrefix: "nypl",
85
+ // },
86
+ });
87
+
88
+ export default theme;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { ChakraProvider } from "@chakra-ui/react";
3
+ import theme from "./index";
4
+
5
+ const DSProvider = ({ children }) => (
6
+ <ChakraProvider theme={theme}>{children}</ChakraProvider>
7
+ );
8
+
9
+ export default DSProvider;
@@ -0,0 +1 @@
1
+ export type Dict<T = any> = Record<string, T>;