@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
@@ -1,21 +1,25 @@
1
1
  // MT-82, MT 225, etc
2
2
  import * as React from "react";
3
- import bem from "../../utils/bem";
4
- import { HeadingDisplaySizes } from "./HeadingDisplaySizes";
3
+ import {
4
+ Box,
5
+ Heading as ChakraHeading,
6
+ Link as ChakraLink,
7
+ useStyleConfig,
8
+ } from "@chakra-ui/react";
9
+
10
+ import { HeadingDisplaySizes, HeadingLevels } from "./HeadingTypes";
5
11
 
6
12
  export interface HeadingProps {
7
- /** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
8
- blockName?: string;
9
13
  /** Optional className that appears in addition to `heading` */
10
14
  className?: string;
11
15
  /** Optional size used to override the default styles of the semantic HTML `<h>` elements */
12
16
  displaySize?: HeadingDisplaySizes;
13
17
  /** Optional ID that other components can cross reference for accessibility purposes */
14
18
  id?: string;
15
- /** Number 1-6; used to create the `<h*>` tag */
16
- level: number;
17
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
18
- modifiers?: string[];
19
+ /** Optional number 1-6 used to create the `<h*>` tag; if prop is not passed, `Heading` will default to `<h2>` */
20
+ level?: HeadingLevels;
21
+ /** Optionally pass in additional Chakra-based styles. */
22
+ sx?: { [key: string]: any };
19
23
  /** Inner text of the `<h*>` element */
20
24
  text?: string;
21
25
  /** Optional URL that header points to; when `url` prop is passed to `Heading`, a child `<a>` element is created and the heading text becomes an active link */
@@ -24,24 +28,36 @@ export interface HeadingProps {
24
28
  urlClass?: string;
25
29
  }
26
30
 
27
- export default function Heading(props: React.PropsWithChildren<HeadingProps>) {
31
+ // Used to map between ButtonTypes enum values and Chakra variant options.
32
+ const variantMap = {};
33
+ for (const type in HeadingDisplaySizes) {
34
+ variantMap[HeadingDisplaySizes[type]] = HeadingDisplaySizes[type];
35
+ }
36
+
37
+ /**
38
+ * Map the HeadingDisplaySizes to the Heading Chakra theme variant object. If a wrong
39
+ * value is passed (typically in non-Typescript scenarios), then the default
40
+ * is "null" and displaySize is not envoked.
41
+ */
42
+ const getVariant = (displaySize) => variantMap[displaySize] || null;
43
+
44
+ function Heading(props: React.PropsWithChildren<HeadingProps>) {
28
45
  const {
29
- blockName,
30
46
  className,
31
47
  displaySize,
32
48
  id,
33
- level,
34
- modifiers = [],
49
+ level = HeadingLevels.Two,
50
+ sx = {},
35
51
  text,
36
52
  url,
37
53
  urlClass,
38
54
  } = props;
39
-
40
- const baseClass = "heading";
41
-
42
- if (displaySize) {
43
- modifiers.push(displaySize);
44
- }
55
+ const variant = displaySize ? getVariant(displaySize) : `h${level}`;
56
+ const styles = useStyleConfig("Heading", { variant });
57
+ // Combine native base styles with any additional styles.
58
+ // This is used only in the `Hero` component, for now.
59
+ const finalStyles = { ...styles, ...sx };
60
+ const asHeading: any = `h${level}`;
45
61
 
46
62
  if (level < 1 || level > 6) {
47
63
  throw new Error("Heading only supports levels 1-6");
@@ -62,25 +78,25 @@ export default function Heading(props: React.PropsWithChildren<HeadingProps>) {
62
78
  );
63
79
  }
64
80
 
65
- let content: string | React.ReactNode;
66
- if (props.children) {
67
- content = url
68
- ? React.createElement(
69
- "a",
70
- { href: url, className: urlClass },
71
- props.children
72
- )
73
- : props.children;
74
- } else {
75
- content = url
76
- ? React.createElement("a", { href: url, className: urlClass }, text)
77
- : text;
78
- }
81
+ const contentToRender = props.children ? props.children : text;
82
+ const content = url ? (
83
+ <Box as={ChakraLink} href={url} className={urlClass}>
84
+ {contentToRender}
85
+ </Box>
86
+ ) : (
87
+ contentToRender
88
+ );
79
89
 
80
- const headingProps = {
81
- className: bem(baseClass, modifiers, blockName, [className]),
82
- id: id,
83
- };
84
-
85
- return React.createElement("h" + level, headingProps, content);
90
+ return (
91
+ <ChakraHeading
92
+ id={id}
93
+ as={asHeading}
94
+ sx={finalStyles}
95
+ className={className}
96
+ >
97
+ {content}
98
+ </ChakraHeading>
99
+ );
86
100
  }
101
+
102
+ export default Heading;
@@ -4,3 +4,12 @@ export enum HeadingDisplaySizes {
4
4
  Tertiary = "tertiary",
5
5
  Callout = "callout",
6
6
  }
7
+
8
+ export enum HeadingLevels {
9
+ One = 1,
10
+ Two = 2,
11
+ Three = 3,
12
+ Four = 4,
13
+ Five = 5,
14
+ Six = 6,
15
+ }
@@ -2,9 +2,10 @@ import * as React from "react";
2
2
 
3
3
  import HelperErrorText from "./HelperErrorText";
4
4
  import { boolean } from "@storybook/addon-knobs";
5
+ import { getCategory } from "../../utils/componentCategories";
5
6
 
6
7
  export default {
7
- title: "HelperErrorText",
8
+ title: getCategory("HelperErrorText"),
8
9
  component: HelperErrorText,
9
10
  };
10
11
 
@@ -4,6 +4,6 @@
4
4
  font-size: var(--font-size--1);
5
5
 
6
6
  &--error {
7
- color: var(--ui-error);
7
+ color: var(--ui-error-primary);
8
8
  }
9
9
  }
@@ -3,20 +3,21 @@ import {
3
3
  Story,
4
4
  Canvas,
5
5
  ArgsTable,
6
- Preview,
7
6
  Description,
8
7
  } from "@storybook/addon-docs/blocks";
9
8
  import { withDesign } from "storybook-addon-designs";
9
+ import { Box, VStack } from "@chakra-ui/react";
10
10
 
11
11
  import Hero from "./Hero";
12
- import { HeroTypes } from "./HeroTypes";
12
+ import { HeroTypes, HeroSecondaryTypes } from "./HeroTypes";
13
13
  import Image from "../Image/Image";
14
14
  import Heading from "../Heading/Heading";
15
- import sections from "../../utils/siteSections";
16
- import { action } from "@storybook/addon-actions";
15
+ import { HeadingLevels } from "../Heading/HeadingTypes";
16
+ import { getCategory } from "../../utils/componentCategories";
17
+ import DSProvider from "../../theme/provider";
17
18
 
18
19
  <Meta
19
- title="Hero"
20
+ title={getCategory("Hero")}
20
21
  component={Hero}
21
22
  decorators={[withDesign]}
22
23
  parameters={{
@@ -28,32 +29,27 @@ import { action } from "@storybook/addon-actions";
28
29
  jest: ["Hero.test.tsx"],
29
30
  }}
30
31
  argTypes={{
31
- attributes: { table: { disable: true } },
32
- blockName: { table: { disable: true } },
33
- className: { table: { disable: true } },
32
+ backgroundColor: { table: { disable: true } },
33
+ foregroundColor: { table: { disable: true } },
34
34
  heading: { table: { disable: true } },
35
- modifiers: { table: { disable: true } },
36
- subHeaderText: { table: { disable: true } },
37
35
  image: { table: { disable: true } },
36
+ locationDetails: { table: { disable: true } },
37
+ subHeaderText: { table: { disable: true } },
38
38
  }}
39
39
  />
40
40
 
41
41
  export const secondarySubHeaderText = (
42
- <div className="hero__body-text">
42
+ <>
43
43
  Explore our collection of hundreds of online resources and databases. Use
44
44
  our free online content to help with your research, whether it's finding a
45
45
  single article, tracing a family tree, learning a new language, or anything
46
46
  in between.
47
- </div>
47
+ </>
48
48
  );
49
49
  export const otherSubHeaderText =
50
50
  "With 92 locations across the Bronx, Manhattan, and Staten Island, The New York Public Library is an essential part of neighborhoods across the city. Visit us today.";
51
- export const secondaryImage = (
52
- <Image
53
- src="https://placeimg.com/800/400/animals"
54
- blockName="hero"
55
- alt="Image example"
56
- />
51
+ export const image = (
52
+ <Image src="https://placeimg.com/800/400/animals" alt="Image example" />
57
53
  );
58
54
 
59
55
  # Hero
@@ -61,17 +57,19 @@ export const secondaryImage = (
61
57
  | Component Version | DS Version |
62
58
  | ----------------- | ---------- |
63
59
  | Added | `0.2.0` |
64
- | Latest | `0.23.4` |
60
+ | Latest | `0.25.1` |
65
61
 
66
62
  <Description of={Hero} />
67
63
 
68
- The `Hero` component is used to display a full width banner at the top of a page. The `Hero` will contain a required `h1` page title and may also include optional descriptive text and images.
64
+ The `Hero` component is used to display a full width banner at the top of a page.
65
+ The `Hero` will contain a required `h1` page title and may also include optional
66
+ descriptive text and images.
69
67
 
70
- <Preview withToolbar>
68
+ <Canvas withToolbar>
71
69
  <Story
72
70
  name="Hero Props"
73
71
  args={{
74
- heroType: HeroTypes.Primary,
72
+ heroType: HeroTypes.Campaign,
75
73
  }}
76
74
  >
77
75
  {(args) =>
@@ -79,32 +77,21 @@ The `Hero` component is used to display a full width banner at the top of a page
79
77
  <Hero
80
78
  {...args}
81
79
  heading={
82
- <Heading level={1} id="1" text="Hero Primary" blockName="hero" />
80
+ <Heading level={HeadingLevels.One} id="1" text="Hero Primary" />
83
81
  }
84
82
  subHeaderText="Example Subtitle"
85
83
  backgroundImageSrc="https://placeimg.com/2400/800/nature"
86
84
  />
87
85
  )) ||
88
- (args.heroType === HeroTypes.Secondary && (
89
- <div className={"nypl-ds nypl--books-and-more"}>
86
+ (HeroSecondaryTypes.includes(args.heroType) && (
87
+ <div className="nypl--books-and-more">
90
88
  <Hero
91
89
  {...args}
92
90
  heading={
93
- <Heading
94
- level={1}
95
- id="1"
96
- text="Hero Secondary"
97
- blockName="hero"
98
- />
91
+ <Heading level={HeadingLevels.One} id="1" text="Hero Secondary" />
99
92
  }
100
93
  subHeaderText={secondarySubHeaderText}
101
- image={
102
- <Image
103
- src="https://placeimg.com/800/400/animals"
104
- blockName="hero"
105
- alt="Image example"
106
- />
107
- }
94
+ image={image}
108
95
  />
109
96
  </div>
110
97
  )) ||
@@ -112,36 +99,34 @@ The `Hero` component is used to display a full width banner at the top of a page
112
99
  <Hero
113
100
  {...args}
114
101
  heading={
115
- <Heading level={1} id="1" text="Hero Tertiary" blockName="hero" />
102
+ <Heading level={HeadingLevels.One} id="1" text="Hero Tertiary" />
116
103
  }
117
104
  subHeaderText={otherSubHeaderText}
118
105
  />
119
106
  )) ||
120
- (args.heroType === HeroTypes.FiftyFifty && (
107
+ (args.heroType === HeroTypes.Campaign && (
121
108
  <Hero
122
109
  {...args}
110
+ heading={
111
+ <Heading level={HeadingLevels.One} id="1" text="Hero Campaign" />
112
+ }
123
113
  subHeaderText={otherSubHeaderText}
114
+ backgroundImageSrc="https://placeimg.com/2400/800/nature"
124
115
  image={
125
116
  <Image
126
- src="https://placeimg.com/600/200/animals"
127
- blockName="hero"
117
+ src="https://placeimg.com/800/400/animals"
128
118
  alt="Image example"
129
119
  />
130
120
  }
131
121
  />
132
122
  )) ||
133
- (args.heroType === HeroTypes.Campaign && (
123
+ (args.heroType === HeroTypes.FiftyFifty && (
134
124
  <Hero
135
125
  {...args}
136
- heading={
137
- <Heading level={1} id="1" text="Hero Campaign" blockName="hero" />
138
- }
139
126
  subHeaderText={otherSubHeaderText}
140
- backgroundImageSrc="https://placeimg.com/2400/800/nature/grayscale"
141
127
  image={
142
128
  <Image
143
- src="https://placeimg.com/800/400/animals"
144
- blockName="hero"
129
+ src="https://placeimg.com/600/200/animals"
145
130
  alt="Image example"
146
131
  />
147
132
  }
@@ -149,58 +134,183 @@ The `Hero` component is used to display a full width banner at the top of a page
149
134
  ))
150
135
  }
151
136
  </Story>
152
- </Preview>
137
+ </Canvas>
153
138
 
154
139
  <ArgsTable story="Hero Props" />
155
140
 
156
141
  ## Color Variations for Secondary Hero
157
142
 
158
- The background color for the title bar in `HeroTypes.Secondary` is determined by the placement of the `Hero` component within a comsuming app. The CSS for `Hero` is constructued to use classes of the `Hero` component's parent elements as a determinant for the title bar background color. Below are the four color variations available based on the consuming React app.
143
+ The background color for the title bar in "Secondary" types changes based on
144
+ variants for the `Secondary` main variant. Before, components relied on the
145
+ parent wrapper's CSS class name for background color updates. Now, the proper
146
+ `HeroType` must be passed in.
147
+
148
+ ```jsx
149
+ // Before
150
+ <div className="nypl--books-and-more">
151
+ <Hero {...props} />
152
+ </div>
153
+
154
+ // Now
155
+ <Hero heroType={HeroTypes.SecondaryBooksAndMore} {...props} />
156
+ ```
159
157
 
160
158
  <Canvas>
161
159
  <Story name="Color Variations for Secondary Hero">
162
- <div className={"nypl-ds nypl--books-and-more"}>
160
+ <VStack spacing={10} align="stretch">
161
+ <Heading
162
+ level={HeadingLevels.Two}
163
+ text="HeroTypes.SecondaryBooksAndMore"
164
+ id="books-heading"
165
+ />
166
+ <Hero
167
+ heroType={HeroTypes.SecondaryBooksAndMore}
168
+ heading={
169
+ <Heading
170
+ level={HeadingLevels.One}
171
+ id="books-hero"
172
+ text="Books and More"
173
+ />
174
+ }
175
+ subHeaderText={secondarySubHeaderText}
176
+ image={image}
177
+ />
178
+ <Heading
179
+ level={HeadingLevels.Two}
180
+ text="HeroTypes.SecondaryLocations"
181
+ id="location-heading"
182
+ />
183
+ <Hero
184
+ heroType={HeroTypes.SecondaryLocations}
185
+ heading={
186
+ <Heading
187
+ level={HeadingLevels.One}
188
+ id="locations-hero"
189
+ text="Locations"
190
+ />
191
+ }
192
+ subHeaderText={secondarySubHeaderText}
193
+ image={image}
194
+ />
195
+ <Heading
196
+ level={HeadingLevels.Two}
197
+ text="HeroTypes.SecondaryResearch"
198
+ id="research-heading"
199
+ />
163
200
  <Hero
164
- heroType={HeroTypes.Secondary}
201
+ heroType={HeroTypes.SecondaryResearch}
165
202
  heading={
166
- <Heading level={1} id="1" text={"Books and More"} blockName="hero" />
203
+ <Heading
204
+ level={HeadingLevels.One}
205
+ id="research-hero"
206
+ text="Research"
207
+ />
167
208
  }
168
209
  subHeaderText={secondarySubHeaderText}
169
- image={secondaryImage}
210
+ image={image}
170
211
  />
171
- </div>
212
+ <Heading
213
+ level={HeadingLevels.Two}
214
+ text="HeroTypes.SecondaryWhatsOn"
215
+ id="whats-on-heading"
216
+ />
217
+ <Hero
218
+ heroType={HeroTypes.SecondaryWhatsOn}
219
+ heading={
220
+ <Heading
221
+ level={HeadingLevels.One}
222
+ id="whats-on-hero"
223
+ text="What's On"
224
+ />
225
+ }
226
+ subHeaderText={secondarySubHeaderText}
227
+ image={image}
228
+ />
229
+ </VStack>
172
230
  </Story>
173
231
  </Canvas>
174
232
 
175
- <Canvas>
176
- <div className={"nypl-ds nypl--locations"}>
177
- <Hero
178
- heroType={HeroTypes.Secondary}
179
- heading={<Heading level={1} id="1" text={"Locations"} blockName="hero" />}
180
- subHeaderText={secondarySubHeaderText}
181
- image={secondaryImage}
182
- />
183
- </div>
184
- </Canvas>
185
-
186
- <Canvas>
187
- <div className={"nypl-ds nypl--research"}>
188
- <Hero
189
- heroType={HeroTypes.Secondary}
190
- heading={<Heading level={1} id="1" text={"Research"} blockName="hero" />}
191
- subHeaderText={secondarySubHeaderText}
192
- image={secondaryImage}
193
- />
194
- </div>
195
- </Canvas>
233
+ ## All Variations
196
234
 
197
235
  <Canvas>
198
- <div className={"nypl-ds nypl--whats-on"}>
199
- <Hero
200
- heroType={HeroTypes.Secondary}
201
- heading={<Heading level={1} id="1" text={"What's On"} blockName="hero" />}
202
- subHeaderText={secondarySubHeaderText}
203
- image={secondaryImage}
204
- />
205
- </div>
236
+ <DSProvider>
237
+ <VStack spacing={10} align="stretch">
238
+ <Heading level={HeadingLevels.Two} text="Primary" id="primary-heading" />
239
+ <Hero
240
+ heroType={HeroTypes.Primary}
241
+ heading={
242
+ <Heading
243
+ level={HeadingLevels.One}
244
+ id="primary-hero"
245
+ text="Hero Primary"
246
+ />
247
+ }
248
+ backgroundImageSrc="https://placeimg.com/1600/800/arch"
249
+ />
250
+ <Heading
251
+ level={HeadingLevels.Two}
252
+ text="Secondary"
253
+ id="secondary-heading"
254
+ />
255
+ <div className="nypl--locations">
256
+ <Hero
257
+ heroType={HeroTypes.Secondary}
258
+ heading={
259
+ <Heading
260
+ level={HeadingLevels.One}
261
+ id="secondary-hero"
262
+ text="Hero Secondary"
263
+ />
264
+ }
265
+ subHeaderText={secondarySubHeaderText}
266
+ image={image}
267
+ />
268
+ </div>
269
+ <Heading
270
+ level={HeadingLevels.Two}
271
+ text="Tertiary"
272
+ id="tertiary-heading"
273
+ />
274
+ <Hero
275
+ heroType={HeroTypes.Tertiary}
276
+ heading={
277
+ <Heading
278
+ level={HeadingLevels.One}
279
+ id="tertiary-hero"
280
+ text="Hero Tertiary"
281
+ />
282
+ }
283
+ subHeaderText={otherSubHeaderText}
284
+ />
285
+ <Heading
286
+ level={HeadingLevels.Two}
287
+ text="Campaign"
288
+ id="campaign-heading"
289
+ />
290
+ <Hero
291
+ heroType={HeroTypes.Campaign}
292
+ heading={
293
+ <Heading
294
+ level={HeadingLevels.One}
295
+ id="campaign-hero"
296
+ text="Hero Campaign"
297
+ />
298
+ }
299
+ subHeaderText={otherSubHeaderText}
300
+ backgroundImageSrc="https://placeimg.com/2400/800/nature/grayscale"
301
+ image={image}
302
+ />
303
+ <Box marginTop="30px" />
304
+ <Heading
305
+ level={HeadingLevels.Two}
306
+ text="FiftyFifty"
307
+ id="fiftyfifty-heading"
308
+ />
309
+ <Hero
310
+ heroType={HeroTypes.FiftyFifty}
311
+ subHeaderText={otherSubHeaderText}
312
+ image={image}
313
+ />
314
+ </VStack>
315
+ </DSProvider>
206
316
  </Canvas>