@nypl/design-system-react-components 0.25.8 → 0.25.11

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 (282) hide show
  1. package/CHANGELOG.md +110 -1
  2. package/README.md +1 -1
  3. package/dist/components/Button/Button.d.ts +6 -6
  4. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  5. package/dist/components/Card/Card.d.ts +6 -4
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  7. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  8. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  9. package/dist/components/DatePicker/DatePicker.d.ts +4 -3
  10. package/dist/components/Fieldset/Fieldset.d.ts +1 -3
  11. package/dist/components/Form/Form.d.ts +15 -14
  12. package/dist/components/Form/FormTypes.d.ts +2 -2
  13. package/dist/components/Heading/Heading.d.ts +7 -3
  14. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  15. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  16. package/dist/components/HorizontalRule/HorizontalRule.d.ts +3 -3
  17. package/dist/components/Icons/Icon.d.ts +4 -4
  18. package/dist/components/Icons/IconSvgs.d.ts +0 -21
  19. package/dist/components/Icons/IconTypes.d.ts +0 -23
  20. package/dist/components/Image/Image.d.ts +11 -3
  21. package/dist/components/List/List.d.ts +1 -1
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +34 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +46 -0
  25. package/dist/components/Modal/Modal.d.ts +0 -4
  26. package/dist/components/Notification/Notification.d.ts +4 -2
  27. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  28. package/dist/components/Radio/Radio.d.ts +6 -5
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
  30. package/dist/components/SearchBar/SearchBar.d.ts +15 -7
  31. package/dist/components/Select/Select.d.ts +7 -2
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  33. package/dist/components/Slider/Slider.d.ts +3 -2
  34. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  35. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  36. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  37. package/dist/components/Table/Table.d.ts +29 -0
  38. package/dist/components/Template/Template.d.ts +30 -6
  39. package/dist/components/Text/Text.d.ts +2 -2
  40. package/dist/components/TextInput/TextInput.d.ts +4 -3
  41. package/dist/components/Toggle/Toggle.d.ts +3 -2
  42. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  43. package/dist/design-system-react-components.cjs.development.js +6721 -5777
  44. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  45. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  47. package/dist/design-system-react-components.esm.js +6774 -5839
  48. package/dist/design-system-react-components.esm.js.map +1 -1
  49. package/dist/index.d.ts +10 -8
  50. package/dist/resources.scss +0 -2
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +1 -1
  53. package/dist/theme/components/button.d.ts +0 -12
  54. package/dist/theme/components/card.d.ts +14 -2
  55. package/dist/theme/components/customTable.d.ts +56 -0
  56. package/dist/theme/components/fieldset.d.ts +2 -2
  57. package/dist/theme/components/global.d.ts +1 -1
  58. package/dist/theme/components/heading.d.ts +4 -0
  59. package/dist/theme/components/label.d.ts +1 -1
  60. package/dist/theme/components/link.d.ts +14 -1
  61. package/dist/theme/components/list.d.ts +0 -2
  62. package/dist/theme/components/logo.d.ts +4 -0
  63. package/dist/theme/components/notification.d.ts +13 -4
  64. package/dist/theme/components/searchBar.d.ts +9 -11
  65. package/dist/theme/components/select.d.ts +1 -0
  66. package/dist/theme/components/structuredContent.d.ts +33 -0
  67. package/dist/theme/components/template.d.ts +10 -10
  68. package/dist/theme/components/textInput.d.ts +4 -0
  69. package/dist/theme/components/toggle.d.ts +8 -5
  70. package/dist/utils/utils.d.ts +10 -0
  71. package/package.json +40 -37
  72. package/src/__tests__/utils/utils.test.ts +23 -1
  73. package/src/components/Accordion/Accordion.stories.mdx +15 -13
  74. package/src/components/Accordion/Accordion.test.tsx +45 -1
  75. package/src/components/Accordion/Accordion.tsx +20 -8
  76. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
  77. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  78. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  79. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  80. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
  81. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +15 -0
  82. package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
  83. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +5 -5
  84. package/src/components/Button/Button.stories.mdx +93 -48
  85. package/src/components/Button/Button.test.tsx +0 -12
  86. package/src/components/Button/Button.tsx +7 -7
  87. package/src/components/Button/ButtonTypes.tsx +0 -1
  88. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  89. package/src/components/Card/Card.stories.mdx +186 -71
  90. package/src/components/Card/Card.test.tsx +45 -22
  91. package/src/components/Card/Card.tsx +21 -6
  92. package/src/components/Card/__snapshots__/Card.test.tsx.snap +9 -3
  93. package/src/components/Chakra/Box.stories.mdx +3 -3
  94. package/src/components/Chakra/Center.stories.mdx +5 -5
  95. package/src/components/Chakra/Flex.stories.mdx +113 -0
  96. package/src/components/Chakra/Grid.stories.mdx +3 -3
  97. package/src/components/Chakra/Stack.stories.mdx +2 -2
  98. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  99. package/src/components/Checkbox/Checkbox.tsx +13 -8
  100. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  101. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  102. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  103. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  104. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  105. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  106. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  107. package/src/components/DatePicker/DatePicker.test.tsx +6 -6
  108. package/src/components/DatePicker/DatePicker.tsx +17 -11
  109. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +50 -24
  110. package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
  111. package/src/components/Fieldset/Fieldset.tsx +2 -4
  112. package/src/components/Form/Form.stories.mdx +75 -49
  113. package/src/components/Form/Form.test.tsx +92 -3
  114. package/src/components/Form/Form.tsx +28 -23
  115. package/src/components/Form/FormTypes.tsx +2 -2
  116. package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
  117. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  118. package/src/components/Heading/Heading.stories.mdx +59 -23
  119. package/src/components/Heading/Heading.test.tsx +82 -18
  120. package/src/components/Heading/Heading.tsx +31 -31
  121. package/src/components/Heading/HeadingTypes.tsx +6 -6
  122. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  123. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  124. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  125. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  126. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  127. package/src/components/Hero/Hero.stories.mdx +72 -53
  128. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
  129. package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
  130. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
  131. package/src/components/Icons/Icon.stories.mdx +78 -77
  132. package/src/components/Icons/Icon.test.tsx +1 -1
  133. package/src/components/Icons/Icon.tsx +5 -6
  134. package/src/components/Icons/IconSvgs.tsx +0 -42
  135. package/src/components/Icons/IconTypes.tsx +0 -24
  136. package/src/components/Image/Image.stories.mdx +66 -18
  137. package/src/components/Image/Image.tsx +21 -10
  138. package/src/components/Label/Label.stories.mdx +20 -19
  139. package/src/components/Link/Link.stories.mdx +102 -51
  140. package/src/components/Link/Link.test.tsx +38 -8
  141. package/src/components/Link/Link.tsx +19 -12
  142. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  143. package/src/components/List/List.stories.mdx +60 -29
  144. package/src/components/List/List.test.tsx +1 -1
  145. package/src/components/List/List.tsx +2 -2
  146. package/src/components/List/__snapshots__/List.test.tsx.snap +3 -1
  147. package/src/components/Logo/Logo.stories.mdx +222 -0
  148. package/src/components/Logo/Logo.test.tsx +98 -0
  149. package/src/components/Logo/Logo.tsx +97 -0
  150. package/src/components/Logo/LogoSvgs.tsx +66 -0
  151. package/src/components/Logo/LogoTypes.tsx +48 -0
  152. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  153. package/src/components/Modal/Modal.stories.mdx +20 -5
  154. package/src/components/Modal/Modal.tsx +2 -8
  155. package/src/components/Notification/Notification.stories.mdx +128 -38
  156. package/src/components/Notification/Notification.test.tsx +49 -1
  157. package/src/components/Notification/Notification.tsx +25 -12
  158. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  159. package/src/components/Pagination/Pagination.stories.mdx +18 -7
  160. package/src/components/Pagination/Pagination.tsx +3 -3
  161. package/src/components/Placeholder/Placeholder.tsx +7 -14
  162. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  163. package/src/components/Radio/Radio.stories.mdx +39 -19
  164. package/src/components/Radio/Radio.tsx +13 -9
  165. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
  166. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  167. package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
  168. package/src/components/RadioGroup/RadioGroup.tsx +97 -94
  169. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
  170. package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
  171. package/src/components/SearchBar/SearchBar.stories.mdx +115 -33
  172. package/src/components/SearchBar/SearchBar.tsx +72 -51
  173. package/src/components/Select/Select.stories.mdx +48 -14
  174. package/src/components/Select/Select.test.tsx +89 -0
  175. package/src/components/Select/Select.tsx +27 -12
  176. package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
  177. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  178. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  179. package/src/components/Slider/Slider.stories.mdx +72 -22
  180. package/src/components/Slider/Slider.tsx +15 -10
  181. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
  182. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  183. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  184. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  185. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  186. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  187. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  188. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  189. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  190. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  191. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  192. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  193. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  194. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  195. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  196. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  197. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  198. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  199. package/src/components/Table/Table.stories.mdx +165 -0
  200. package/src/components/Table/Table.test.tsx +137 -0
  201. package/src/components/Table/Table.tsx +126 -0
  202. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
  203. package/src/components/Tabs/Tabs.stories.mdx +20 -14
  204. package/src/components/Tabs/Tabs.test.tsx +21 -5
  205. package/src/components/Tabs/Tabs.tsx +35 -20
  206. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
  207. package/src/components/Template/Template.stories.mdx +132 -48
  208. package/src/components/Template/Template.test.tsx +128 -6
  209. package/src/components/Template/Template.tsx +93 -13
  210. package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
  211. package/src/components/Text/Text.stories.mdx +33 -11
  212. package/src/components/Text/Text.tsx +2 -2
  213. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  214. package/src/components/TextInput/TextInput.test.tsx +96 -0
  215. package/src/components/TextInput/TextInput.tsx +12 -8
  216. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  217. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  218. package/src/components/Toggle/Toggle.tsx +14 -9
  219. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +4 -4
  220. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  222. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  223. package/src/docs/Chakra.stories.mdx +5 -8
  224. package/src/docs/Intro.stories.mdx +2 -2
  225. package/src/index.ts +13 -6
  226. package/src/styles/base/_03-base.scss +1 -1
  227. package/src/styles/base/_place-holder.scss +7 -7
  228. package/src/styles.scss +1 -5
  229. package/src/theme/components/breadcrumb.ts +4 -4
  230. package/src/theme/components/button.ts +5 -12
  231. package/src/theme/components/card.ts +5 -2
  232. package/src/theme/components/checkbox.ts +1 -1
  233. package/src/theme/components/customTable.ts +63 -0
  234. package/src/theme/components/datePicker.ts +1 -1
  235. package/src/theme/components/global.ts +7 -7
  236. package/src/theme/components/heading.ts +13 -11
  237. package/src/theme/components/helperErrorText.ts +1 -1
  238. package/src/theme/components/image.ts +1 -1
  239. package/src/theme/components/link.ts +17 -5
  240. package/src/theme/components/list.ts +3 -5
  241. package/src/theme/components/logo.ts +54 -0
  242. package/src/theme/components/notification.ts +19 -9
  243. package/src/theme/components/searchBar.ts +11 -13
  244. package/src/theme/components/select.ts +1 -0
  245. package/src/theme/components/statusBadge.ts +1 -1
  246. package/src/theme/components/structuredContent.ts +74 -0
  247. package/src/theme/components/template.ts +10 -10
  248. package/src/theme/components/text.ts +6 -6
  249. package/src/theme/components/textInput.ts +2 -0
  250. package/src/theme/components/toggle.ts +10 -6
  251. package/src/theme/components/videoPlayer.ts +0 -2
  252. package/src/theme/foundations/global.ts +2 -2
  253. package/src/theme/foundations/typography.ts +84 -12
  254. package/src/theme/index.ts +6 -0
  255. package/src/utils/componentCategories.ts +2 -1
  256. package/src/utils/utils.ts +17 -0
  257. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  258. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  259. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  260. package/dist/components/Input/Input.d.ts +0 -36
  261. package/dist/components/Input/Input.stories.d.ts +0 -29
  262. package/dist/components/Input/InputTypes.d.ts +0 -6
  263. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  264. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  265. package/dist/helpers/getCSSVariable.d.ts +0 -1
  266. package/dist/interfaces.d.ts +0 -3
  267. package/dist/utils/bem.d.ts +0 -1
  268. package/src/__tests__/utils/bem.test.ts +0 -37
  269. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  270. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  271. package/src/components/CardEdition/CardEdition.tsx +0 -60
  272. package/src/components/CardEdition/_CardEdition.scss +0 -137
  273. package/src/components/Input/Input.stories.tsx +0 -133
  274. package/src/components/Input/Input.test.tsx +0 -266
  275. package/src/components/Input/Input.tsx +0 -81
  276. package/src/components/Input/InputTypes.tsx +0 -8
  277. package/src/components/Input/_Input.scss +0 -78
  278. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  279. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  280. package/src/helpers/getCSSVariable.tsx +0 -5
  281. package/src/interfaces.ts +0 -3
  282. package/src/utils/bem.ts +0 -44
@@ -2,13 +2,27 @@ import * as React from "react";
2
2
  import { Box, useStyleConfig } from "@chakra-ui/react";
3
3
 
4
4
  export interface TemplateProps {}
5
+ export interface TemplateHeaderProps {
6
+ /** Flag to render an HTML header element. True by default. */
7
+ renderHeaderElement?: boolean;
8
+ }
9
+ export interface TemplateFooterProps {
10
+ /** Flag to render an HTML footer element. True by default. */
11
+ renderFooterElement?: boolean;
12
+ }
5
13
  export interface TemplateSidebarProps {
6
14
  /** Renders the `TemplateContentSidebar` component either on the left or
7
15
  * right side of the `TemplateContentPrimary` component. */
8
16
  sidebar?: "none" | "left" | "right";
9
17
  }
10
18
  export interface TemplateContentProps extends TemplateSidebarProps {}
11
- export interface TemplateAppContainerProps extends TemplateSidebarProps {
19
+ export interface TemplateAppContainerProps
20
+ extends TemplateFooterProps,
21
+ TemplateHeaderProps,
22
+ TemplateSidebarProps {
23
+ /** DOM that will be rendered before the rest of the components in
24
+ * `TemplateAppContainer` and immediately before the `TemplateHeader` component. */
25
+ aboveHeader?: React.ReactElement;
12
26
  /** DOM that will be rendered in the `TemplateBreakout` component section. */
13
27
  breakout?: React.ReactElement;
14
28
  /** DOM that will be rendered in the `TemplateContentPrimary` component section. */
@@ -36,17 +50,52 @@ const Template = (props: React.PropsWithChildren<TemplateProps>) => {
36
50
  );
37
51
  };
38
52
 
53
+ /**
54
+ * This optional component renders its children from edge-to-edge and should
55
+ * be used for alerts or notifications that are typically site-wide. This must
56
+ * be rendered immediately before the `TemplateHeader` component. This is meant
57
+ * for components that render an `aside` HTML element or HTML element with the
58
+ * `role="complementary"` attribute. These elements should *not* be rendered
59
+ * in the `header` HTML section since that's an accessibility violation.
60
+ */
61
+ const TemplateAboveHeader = (props: React.PropsWithChildren<TemplateProps>) => {
62
+ const styles = useStyleConfig("TemplateBreakout", {});
63
+ return <Box __css={styles}>{props.children}</Box>;
64
+ };
65
+
39
66
  /**
40
67
  * This optional component should be the first child of the `Template`
41
- * component. This is rendered as an HTML `<header>` element.
68
+ * component. This is rendered as an HTML `<header>` element. If an HTML
69
+ * `<header>` element is already passed in a custom component as the children,
70
+ * set `renderFooterElement` to `false`. Otherwise, the parent wrapper will
71
+ * render an HTML `<header>` element.
42
72
  */
43
- const TemplateHeader = (props: React.PropsWithChildren<TemplateProps>) => {
73
+ const TemplateHeader = ({
74
+ children,
75
+ renderHeaderElement = true,
76
+ }: React.PropsWithChildren<TemplateHeaderProps>) => {
44
77
  const styles = useStyleConfig("TemplateHeader", {});
45
- return (
46
- <Box as="header" __css={styles}>
47
- {props.children}
48
- </Box>
49
- );
78
+ let headerElement = <Box __css={styles}>{children}</Box>;
79
+
80
+ // The user wants to render the `header` HTML element.
81
+ if (renderHeaderElement) {
82
+ // But if they passed in a component that renders an HTML `<header>`,
83
+ // then log a warning.
84
+ React.Children.map(children, (child: React.ReactElement) => {
85
+ if (child?.type === "header" || child?.props?.mdxType === "header") {
86
+ console.warn(
87
+ "`TemplateHeader`: An HTML `header` element was passed in. Set " +
88
+ "`renderHeaderElement` to `false` to avoid nested HTML `header` elements."
89
+ );
90
+ }
91
+ });
92
+ headerElement = (
93
+ <Box as="header" __css={styles}>
94
+ {children}
95
+ </Box>
96
+ );
97
+ }
98
+ return headerElement;
50
99
  };
51
100
 
52
101
  /**
@@ -152,10 +201,29 @@ const TemplateContentSidebar = (
152
201
  /**
153
202
  * This optional component should be the last child of the `Template`
154
203
  * component. This is rendered as an HTML `<footer>` element and spans the full
155
- * width of the page.
204
+ * width of the page. If an HTML `<footer>` element is already passed in a
205
+ * custom component, set `renderFooterElement` to `false`.
156
206
  */
157
- const TemplateFooter = (props: React.PropsWithChildren<TemplateProps>) => {
158
- return <Box as="footer">{props.children}</Box>;
207
+ const TemplateFooter = ({
208
+ children,
209
+ renderFooterElement = true,
210
+ }: React.PropsWithChildren<TemplateFooterProps>) => {
211
+ let footerElement = <>{children}</>;
212
+
213
+ // The user wants to render the `footer` HTML element.
214
+ if (renderFooterElement) {
215
+ // But give a warning if one was passed.
216
+ React.Children.map(children, (child: React.ReactElement) => {
217
+ if (child?.type === "footer" || child?.props?.mdxType === "footer") {
218
+ console.warn(
219
+ "`TemplateFooter`: An HTML `footer` element was passed in. Set " +
220
+ "`renderFooterElement` to `false` to avoid nested HTML `footer` elements."
221
+ );
222
+ }
223
+ });
224
+ footerElement = <Box as="footer">{children}</Box>;
225
+ }
226
+ return footerElement;
159
227
  };
160
228
 
161
229
  /**
@@ -169,6 +237,7 @@ const TemplateAppContainer = (
169
237
  props: React.PropsWithChildren<TemplateAppContainerProps>
170
238
  ) => {
171
239
  const {
240
+ aboveHeader,
172
241
  breakout,
173
242
  contentPrimary,
174
243
  contentSidebar,
@@ -176,7 +245,12 @@ const TemplateAppContainer = (
176
245
  footer,
177
246
  header,
178
247
  sidebar = "none",
248
+ renderFooterElement = true,
249
+ renderHeaderElement = true,
179
250
  } = props;
251
+ const aboveHeaderElem = aboveHeader && (
252
+ <TemplateAboveHeader>{aboveHeader}</TemplateAboveHeader>
253
+ );
180
254
  const breakoutElem = breakout && (
181
255
  <TemplateBreakout>{breakout}</TemplateBreakout>
182
256
  );
@@ -191,8 +265,9 @@ const TemplateAppContainer = (
191
265
  );
192
266
  return (
193
267
  <Template>
268
+ {aboveHeaderElem}
194
269
  {(header || breakoutElem) && (
195
- <TemplateHeader>
270
+ <TemplateHeader renderHeaderElement={renderHeaderElement}>
196
271
  {header}
197
272
  {breakoutElem}
198
273
  </TemplateHeader>
@@ -208,7 +283,11 @@ const TemplateAppContainer = (
208
283
 
209
284
  {sidebar === "right" && contentSidebarElem}
210
285
  </TemplateContent>
211
- {footer && <TemplateFooter>{footer}</TemplateFooter>}
286
+ {footer && (
287
+ <TemplateFooter renderFooterElement={renderFooterElement}>
288
+ {footer}
289
+ </TemplateFooter>
290
+ )}
212
291
  </Template>
213
292
  );
214
293
  };
@@ -216,6 +295,7 @@ const TemplateAppContainer = (
216
295
  export {
217
296
  TemplateAppContainer,
218
297
  Template,
298
+ TemplateAboveHeader,
219
299
  TemplateHeader,
220
300
  TemplateBreakout,
221
301
  TemplateContent,
@@ -0,0 +1,169 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Template components Renders the UI snapshot correctly 1`] = `
4
+ <div
5
+ className="nypl-ds css-0"
6
+ >
7
+ <div
8
+ className="css-0"
9
+ >
10
+ <div
11
+ className="placeholder placeholder-short"
12
+ >
13
+ Above Header
14
+ </div>
15
+ </div>
16
+ <header
17
+ className="css-0"
18
+ >
19
+ <div
20
+ className="placeholder placeholder-short"
21
+ >
22
+ NYPL Header
23
+ </div>
24
+ <div
25
+ className="css-0"
26
+ >
27
+ <div
28
+ className="placeholder placeholder-short"
29
+ >
30
+ Breadcrumbs
31
+ </div>
32
+ <div
33
+ className="placeholder placeholder-short"
34
+ >
35
+ Hero
36
+ </div>
37
+ </div>
38
+ </header>
39
+ <main
40
+ className="css-0"
41
+ >
42
+ <div
43
+ className="css-0"
44
+ >
45
+ <div
46
+ className="placeholder placeholder-undefined"
47
+ >
48
+ Content Top
49
+ </div>
50
+ </div>
51
+ <div
52
+ className="css-0"
53
+ >
54
+ <div
55
+ className="placeholder placeholder-undefined"
56
+ >
57
+ Left Sidebar
58
+ </div>
59
+ </div>
60
+ <div
61
+ className="css-0"
62
+ >
63
+ <div
64
+ className="placeholder placeholder-undefined"
65
+ >
66
+ Main Content
67
+ </div>
68
+ <div
69
+ className="placeholder placeholder-short"
70
+ >
71
+ More Content
72
+ </div>
73
+ </div>
74
+ </main>
75
+ <footer
76
+ className="css-0"
77
+ >
78
+ <div
79
+ className="placeholder placeholder-short"
80
+ >
81
+ Footer
82
+ </div>
83
+ </footer>
84
+ </div>
85
+ `;
86
+
87
+ exports[`Template components Renders the UI snapshot correctly 2`] = `
88
+ <div
89
+ className="nypl-ds css-0"
90
+ >
91
+ <div
92
+ className="css-0"
93
+ >
94
+ <div
95
+ className="placeholder placeholder-short"
96
+ >
97
+ Above Header
98
+ </div>
99
+ </div>
100
+ <header
101
+ className="css-0"
102
+ >
103
+ <div
104
+ className="placeholder placeholder-short"
105
+ >
106
+ NYPL Header
107
+ </div>
108
+ <div
109
+ className="css-0"
110
+ >
111
+ <div
112
+ className="placeholder placeholder-short"
113
+ >
114
+ Breadcrumbs
115
+ </div>
116
+ <div
117
+ className="placeholder placeholder-short"
118
+ >
119
+ Hero
120
+ </div>
121
+ </div>
122
+ </header>
123
+ <main
124
+ className="css-0"
125
+ >
126
+ <div
127
+ className="css-0"
128
+ >
129
+ <div
130
+ className="placeholder placeholder-undefined"
131
+ >
132
+ Content Top
133
+ </div>
134
+ </div>
135
+ <div
136
+ className="css-0"
137
+ >
138
+ <div
139
+ className="placeholder placeholder-undefined"
140
+ >
141
+ Left Sidebar
142
+ </div>
143
+ </div>
144
+ <div
145
+ className="css-0"
146
+ >
147
+ <div
148
+ className="placeholder placeholder-undefined"
149
+ >
150
+ Main Content
151
+ </div>
152
+ <div
153
+ className="placeholder placeholder-short"
154
+ >
155
+ More Content
156
+ </div>
157
+ </div>
158
+ </main>
159
+ <footer
160
+ className="css-0"
161
+ >
162
+ <div
163
+ className="placeholder placeholder-short"
164
+ >
165
+ Footer
166
+ </div>
167
+ </footer>
168
+ </div>
169
+ `;
@@ -1,14 +1,21 @@
1
1
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
2
  ArgsTable,
3
+ Canvas,
6
4
  Description,
7
- } from "@storybook/addon-docs/blocks";
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
8
8
  import { withDesign } from "storybook-addon-designs";
9
9
 
10
10
  import Text from "./Text";
11
+ import { TextDisplaySizes } from "./TextTypes";
11
12
  import { getCategory } from "../../utils/componentCategories";
13
+ import { getStorybookEnumValues } from "../../utils/utils";
14
+
15
+ export const enumValues = getStorybookEnumValues(
16
+ TextDisplaySizes,
17
+ "TextDisplaySizes"
18
+ );
12
19
 
13
20
  <Meta
14
21
  title={getCategory("Text")}
@@ -17,13 +24,19 @@ import { getCategory } from "../../utils/componentCategories";
17
24
  parameters={{
18
25
  design: {
19
26
  type: "figma",
20
- url:
21
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/?node-id=10733%3A56919",
27
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/?node-id=10733%3A56919",
22
28
  },
23
29
  }}
24
30
  argTypes={{
25
- displaySize: { table: { disable: false } },
26
- className: { table: { disable: true } },
31
+ className: { control: false },
32
+ displaySize: {
33
+ control: { type: "select" },
34
+ options: enumValues.options,
35
+ table: { defaultValue: { summary: "TextDisplaySizes.Default" } },
36
+ },
37
+ isBold: { table: { defaultValue: { summary: false } } },
38
+ isItalic: { table: { defaultValue: { summary: false } } },
39
+ noSpace: { table: { defaultValue: { summary: false } } },
27
40
  }}
28
41
  />
29
42
 
@@ -39,10 +52,19 @@ import { getCategory } from "../../utils/componentCategories";
39
52
  The `Text` component renders a basic `<p>` element. As its name indicates, the `displaySize` prop controls the size of the text rendered in the component.
40
53
 
41
54
  <Canvas withToolbar>
42
- <Story name="Text" args={{}}>
55
+ <Story
56
+ name="Text"
57
+ args={{
58
+ className: undefined,
59
+ displaySize: "TextDisplaySizes.Default",
60
+ isBold: false,
61
+ isItalic: false,
62
+ noSpace: false,
63
+ }}
64
+ >
43
65
  {(args) => (
44
66
  <>
45
- <Text {...args}>
67
+ <Text {...args} displaySize={enumValues.getValue(args.displaySize)}>
46
68
  Animal Crossing[a] is a social simulation video game series developed
47
69
  and published by Nintendo. The series was conceptualized and created
48
70
  by Katsuya Eguchi and Hisashi Nogami. In Animal Crossing, the player
@@ -52,7 +74,7 @@ The `Text` component renders a basic `<p>` element. As its name indicates, the `
52
74
  open-ended gameplay and use of the video game console's internal clock
53
75
  and calendar to simulate real passage of time.
54
76
  </Text>
55
- <Text {...args}>
77
+ <Text {...args} displaySize={enumValues.getValue(args.displaySize)}>
56
78
  Since its initial release in 2001, five Animal Crossing games have
57
79
  been released worldwide, one each for the Nintendo 64/iQue Player
58
80
  (enhanced and reissued for the GameCube), Nintendo DS, Wii, Nintendo
@@ -6,14 +6,14 @@ import { getVariant } from "../../utils/utils";
6
6
  export interface TextProps {
7
7
  /** Additional class name to render in the `Text` component. */
8
8
  className?: string;
9
+ /** Optional prop to control the text styling */
10
+ displaySize?: TextDisplaySizes;
9
11
  /** Optional prop used to show bolded text */
10
12
  isBold?: boolean;
11
13
  /** Optional prop used to show itlicized text */
12
14
  isItalic?: boolean;
13
15
  /** Optional prop used to remove default spacing */
14
16
  noSpace?: boolean;
15
- /** Optional prop to control the text styling */
16
- displaySize?: TextDisplaySizes;
17
17
  }
18
18
 
19
19
  function Text(props: React.PropsWithChildren<TextProps>) {
@@ -1,17 +1,23 @@
1
+ import { VStack } from "@chakra-ui/react";
1
2
  import {
2
- Meta,
3
- Story,
4
3
  ArgsTable,
5
4
  Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
- import { VStack } from "@chakra-ui/react";
10
10
 
11
11
  import TextInput from "./TextInput";
12
- import { TextInputTypes } from "./TextInputTypes";
12
+ import { TextInputTypes, TextInputVariants } from "./TextInputTypes";
13
13
  import { getCategory } from "../../utils/componentCategories";
14
14
  import DSProvider from "../../theme/provider";
15
+ import { getStorybookEnumValues } from "../../utils/utils";
16
+
17
+ export const enumValues = getStorybookEnumValues(
18
+ TextInputTypes,
19
+ "TextInputTypes"
20
+ );
15
21
 
16
22
  <Meta
17
23
  title={getCategory("TextInput")}
@@ -20,16 +26,33 @@ import DSProvider from "../../theme/provider";
20
26
  parameters={{
21
27
  design: {
22
28
  type: "figma",
23
- url:
24
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
29
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
25
30
  },
26
31
  jest: ["TextInput.test.tsx"],
27
32
  }}
28
33
  argTypes={{
29
- attributes: { table: { disable: true } },
30
- id: { table: { disable: true } },
31
- onChange: { table: { disable: true } },
32
- value: { table: { disable: true } },
34
+ attributes: { control: false },
35
+ id: { control: false },
36
+ isDisabled: { table: { defaultValue: { summary: false } } },
37
+ isInvalid: { table: { defaultValue: { summary: false } } },
38
+ isRequired: { table: { defaultValue: { summary: false } } },
39
+ key: { table: { disable: true } },
40
+ onChange: { control: false },
41
+ ref: { table: { disable: true } },
42
+ showHelperInvalidText: { table: { defaultValue: { summary: true } } },
43
+ showLabel: { table: { defaultValue: { summary: true } } },
44
+ showOptReqLabel: { table: { defaultValue: { summary: true } } },
45
+ step: { table: { defaultValue: { summary: 1 } } },
46
+ type: {
47
+ control: { type: "select" },
48
+ table: { defaultValue: { summary: "TextInputTypes.text" } },
49
+ options: enumValues.options,
50
+ },
51
+ value: { control: false },
52
+ variantType: {
53
+ control: false,
54
+ table: { defaultValue: { summary: "TextInputVariants.Default" } },
55
+ },
33
56
  }}
34
57
  />
35
58
 
@@ -38,7 +61,7 @@ import DSProvider from "../../theme/provider";
38
61
  | Component Version | DS Version |
39
62
  | ----------------- | ---------- |
40
63
  | Added | `0.22.0` |
41
- | Latest | `0.25.4` |
64
+ | Latest | `0.25.11` |
42
65
 
43
66
  <Description of={TextInput} />
44
67
 
@@ -50,26 +73,36 @@ is left blank, a value will be generated for you.
50
73
 
51
74
  <Canvas withToolbar>
52
75
  <Story
53
- name="TextInput"
76
+ name="TextInput with Controls"
54
77
  args={{
78
+ additionalStyles: undefined,
79
+ attributes: undefined,
80
+ className: undefined,
81
+ defaultValue: undefined,
55
82
  helperText: "Choose wisely.",
56
- id: "myTextInput",
83
+ id: "textInput-id",
57
84
  invalidText: "This is error text :(",
58
85
  isDisabled: false,
59
86
  isInvalid: false,
60
87
  isRequired: true,
61
88
  labelText: "What is your favorite color?",
89
+ name: undefined,
90
+ onChange: undefined,
62
91
  placeholder: "e.g. blue, green, etc.",
92
+ showHelperInvalidText: true,
63
93
  showLabel: true,
64
94
  showOptReqLabel: true,
65
- type: TextInputTypes.text,
95
+ step: 1,
96
+ type: "TextInputTypes.text",
97
+ value: undefined,
98
+ variantType: TextInputVariants.Default,
66
99
  }}
67
100
  >
68
- {(args) => <TextInput {...args} />}
101
+ {(args) => <TextInput {...args} type={enumValues.getValue(args.type)} />}
69
102
  </Story>
70
103
  </Canvas>
71
104
 
72
- <ArgsTable story="TextInput" />
105
+ <ArgsTable story="TextInput with Controls" />
73
106
 
74
107
  ## Labelling Variations
75
108
 
@@ -140,6 +173,36 @@ text within the `label` element.
140
173
  </DSProvider>
141
174
  </Canvas>
142
175
 
176
+ ## HTML in Helper Text
177
+
178
+ HTML can be passed into the `helperText` prop as a string or HTML.
179
+
180
+ ```jsx
181
+ helperText="Choose <b>wisely!</b>"
182
+ // or
183
+ helperText={<>Choose <b>wisely!</b></>}
184
+ ```
185
+
186
+ <Canvas>
187
+ <DSProvider>
188
+ <TextInput
189
+ labelText="What is your favorite color?"
190
+ placeholder="i.e. blue, green, etc."
191
+ helperText="Choose <b>wisely!</b>"
192
+ />
193
+ <br />
194
+ <TextInput
195
+ labelText="What is your favorite color?"
196
+ placeholder="i.e. blue, green, etc."
197
+ helperText={
198
+ <>
199
+ Choose <b>wisely!</b>
200
+ </>
201
+ }
202
+ />
203
+ </DSProvider>
204
+ </Canvas>
205
+
143
206
  ## Textarea
144
207
 
145
208
  The TextInput component includes a multiline `textarea` form field. To render a
@@ -161,6 +224,10 @@ variations described above are available for the `textarea` option.
161
224
  showOptReqLabel: true,
162
225
  type: TextInputTypes.textarea,
163
226
  }}
227
+ argTypes={{
228
+ type: { control: false },
229
+ variantType: { control: false },
230
+ }}
164
231
  >
165
232
  {(args) => <TextInput {...args} />}
166
233
  </Story>