@nypl/design-system-react-components 0.25.0 → 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 (236) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/components/Accordion/Accordion.d.ts +14 -14
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
  4. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +1 -1
  7. package/dist/components/Card/CardTypes.d.ts +2 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
  9. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -3
  11. package/dist/components/Form/Form.d.ts +13 -8
  12. package/dist/components/Form/FormTypes.d.ts +2 -8
  13. package/dist/components/Grid/GridTypes.d.ts +9 -0
  14. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  15. package/dist/components/Heading/Heading.d.ts +4 -4
  16. package/dist/components/Hero/Hero.d.ts +19 -14
  17. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  18. package/dist/components/Icons/Icon.d.ts +13 -16
  19. package/dist/components/Icons/IconTypes.d.ts +78 -64
  20. package/dist/components/Label/Label.d.ts +5 -17
  21. package/dist/components/Link/Link.d.ts +8 -12
  22. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  23. package/dist/components/Select/Select.d.ts +32 -35
  24. package/dist/components/Select/SelectTypes.d.ts +4 -0
  25. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
  26. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  27. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  28. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  29. package/dist/components/Template/Template.d.ts +91 -0
  30. package/dist/components/Text/Text.d.ts +16 -0
  31. package/dist/components/Text/TextTypes.d.ts +6 -0
  32. package/dist/components/TextInput/TextInput.d.ts +32 -31
  33. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  34. package/dist/design-system-react-components.cjs.development.js +2597 -1170
  35. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  36. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  37. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  38. package/dist/design-system-react-components.esm.js +2580 -1173
  39. package/dist/design-system-react-components.esm.js.map +1 -1
  40. package/dist/index.d.ts +8 -1
  41. package/dist/styles.css +1 -1
  42. package/dist/theme/components/accordion.d.ts +25 -0
  43. package/dist/theme/components/breadcrumb.d.ts +90 -0
  44. package/dist/theme/components/button.d.ts +17 -7
  45. package/dist/theme/components/checkbox.d.ts +7 -7
  46. package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
  47. package/dist/theme/components/customRadioGroup.d.ts +4 -3
  48. package/dist/theme/components/global.d.ts +55 -0
  49. package/dist/theme/components/globalMixins.d.ts +15 -0
  50. package/dist/theme/components/heading.d.ts +50 -20
  51. package/dist/theme/components/hero.d.ts +492 -0
  52. package/dist/theme/components/icon.d.ts +13 -0
  53. package/dist/theme/components/label.d.ts +16 -0
  54. package/dist/theme/components/link.d.ts +45 -0
  55. package/dist/theme/components/radio.d.ts +8 -7
  56. package/dist/theme/components/searchBar.d.ts +20 -0
  57. package/dist/theme/components/select.d.ts +58 -0
  58. package/dist/theme/components/statusBadge.d.ts +25 -0
  59. package/dist/theme/components/tabs.d.ts +9 -9
  60. package/dist/theme/components/template.d.ts +105 -0
  61. package/dist/theme/components/text.d.ts +20 -0
  62. package/dist/theme/components/textInput.d.ts +105 -0
  63. package/dist/theme/foundations/global.d.ts +3 -0
  64. package/dist/theme/foundations/shadows.d.ts +4 -0
  65. package/dist/utils/utils.d.ts +6 -0
  66. package/package.json +3 -2
  67. package/src/components/Accordion/Accordion.stories.mdx +227 -33
  68. package/src/components/Accordion/Accordion.test.tsx +135 -19
  69. package/src/components/Accordion/Accordion.tsx +81 -56
  70. package/src/components/Autosuggest/Autosuggest.stories.mdx +1 -1
  71. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
  72. package/src/components/Autosuggest/_Autosuggest.scss +2 -2
  73. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +46 -52
  74. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
  75. package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
  76. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  77. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
  78. package/src/components/Button/Button.stories.mdx +31 -27
  79. package/src/components/Button/Button.test.tsx +17 -5
  80. package/src/components/Button/ButtonTypes.tsx +1 -0
  81. package/src/components/Button/_Button.scss +3 -27
  82. package/src/components/Button/__snapshots__/Button.test.tsx.snap +11 -0
  83. package/src/components/Card/Card.stories.mdx +24 -20
  84. package/src/components/Card/Card.test.tsx +13 -19
  85. package/src/components/Card/Card.tsx +1 -1
  86. package/src/components/Card/CardTypes.tsx +2 -2
  87. package/src/components/Card/_Card.scss +1 -1
  88. package/src/components/CardEdition/CardEdition.stories.tsx +11 -6
  89. package/src/components/CardEdition/CardEdition.test.tsx +23 -31
  90. package/src/components/CardEdition/_CardEdition.scss +2 -2
  91. package/src/components/Chakra/Center.stories.mdx +31 -14
  92. package/src/components/Chakra/Grid.stories.mdx +79 -0
  93. package/src/components/Chakra/Stack.stories.mdx +4 -4
  94. package/src/components/Checkbox/Checkbox.tsx +9 -12
  95. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +2 -5
  96. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
  97. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
  99. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  100. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
  101. package/src/components/DatePicker/DatePicker.test.tsx +4 -4
  102. package/src/components/DatePicker/DatePicker.tsx +13 -13
  103. package/src/components/DatePicker/_DatePicker.scss +1 -0
  104. package/src/components/Form/Form.stories.mdx +46 -21
  105. package/src/components/Form/Form.test.tsx +58 -45
  106. package/src/components/Form/Form.tsx +49 -21
  107. package/src/components/Form/FormTypes.tsx +3 -8
  108. package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
  109. package/src/components/Grid/GridTypes.tsx +9 -0
  110. package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
  111. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  112. package/src/components/Grid/SimpleGrid.tsx +37 -0
  113. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  114. package/src/components/Heading/Heading.stories.mdx +1 -0
  115. package/src/components/Heading/Heading.tsx +12 -6
  116. package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
  117. package/src/components/Hero/Hero.stories.mdx +188 -121
  118. package/src/components/Hero/Hero.test.tsx +537 -107
  119. package/src/components/Hero/Hero.tsx +79 -92
  120. package/src/components/Hero/HeroTypes.tsx +17 -5
  121. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  122. package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
  123. package/src/components/Icons/Icon.stories.mdx +83 -74
  124. package/src/components/Icons/Icon.test.tsx +30 -22
  125. package/src/components/Icons/Icon.tsx +63 -61
  126. package/src/components/Icons/IconTypes.tsx +80 -64
  127. package/src/components/Input/_Input.scss +2 -2
  128. package/src/components/Label/Label.stories.mdx +28 -7
  129. package/src/components/Label/Label.test.tsx +43 -12
  130. package/src/components/Label/Label.tsx +21 -34
  131. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  132. package/src/components/Link/Link.stories.mdx +41 -41
  133. package/src/components/Link/Link.test.tsx +33 -44
  134. package/src/components/Link/Link.tsx +114 -100
  135. package/src/components/List/List.stories.mdx +0 -2
  136. package/src/components/List/List.stories.tsx +5 -5
  137. package/src/components/List/_List.scss +3 -3
  138. package/src/components/Modal/_Modal.scss +1 -1
  139. package/src/components/Notification/Notification.stories.mdx +12 -1
  140. package/src/components/Notification/Notification.test.tsx +3 -16
  141. package/src/components/Notification/Notification.tsx +9 -10
  142. package/src/components/Notification/_Notification.scss +4 -4
  143. package/src/components/Pagination/Pagination.test.tsx +16 -10
  144. package/src/components/RadioGroup/RadioGroup.stories.mdx +1 -1
  145. package/src/components/RadioGroup/RadioGroup.tsx +2 -10
  146. package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
  147. package/src/components/SearchBar/SearchBar.stories.mdx +189 -219
  148. package/src/components/SearchBar/SearchBar.tsx +151 -46
  149. package/src/components/Select/Select.stories.mdx +188 -170
  150. package/src/components/Select/Select.test.tsx +125 -380
  151. package/src/components/Select/Select.tsx +118 -165
  152. package/src/components/Select/SelectTypes.tsx +4 -0
  153. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +13 -25
  154. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
  155. package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
  156. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  157. package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
  158. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  159. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  160. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  161. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  162. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  163. package/src/components/StyleGuide/Bidirectionality.stories.mdx +16 -16
  164. package/src/components/StyleGuide/Buttons.stories.mdx +15 -15
  165. package/src/components/StyleGuide/Colors.stories.mdx +336 -0
  166. package/src/components/StyleGuide/Iconography.stories.mdx +88 -90
  167. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  168. package/src/components/Tabs/Tabs.tsx +7 -9
  169. package/src/components/Template/Template.stories.mdx +574 -0
  170. package/src/components/Template/Template.test.tsx +124 -0
  171. package/src/components/Template/Template.tsx +226 -0
  172. package/src/components/Text/Text.stories.mdx +70 -0
  173. package/src/components/Text/Text.test.tsx +63 -0
  174. package/src/components/Text/Text.tsx +55 -0
  175. package/src/components/Text/TextTypes.tsx +6 -0
  176. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  177. package/src/components/TextInput/TextInput.stories.mdx +89 -90
  178. package/src/components/TextInput/TextInput.test.tsx +65 -86
  179. package/src/components/TextInput/TextInput.tsx +101 -95
  180. package/src/components/TextInput/TextInputTypes.tsx +6 -0
  181. package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
  182. package/src/docs/Chakra.stories.mdx +4 -4
  183. package/src/docs/Intro.stories.mdx +15 -13
  184. package/src/index.ts +20 -0
  185. package/src/styles/01-colors/_colors-brand.scss +6 -0
  186. package/src/styles/01-colors/_colors-utility.scss +14 -12
  187. package/src/styles/base/_04-base.scss +2 -1
  188. package/src/styles/base/_place-holder.scss +1 -1
  189. package/src/styles.scss +10 -12
  190. package/src/theme/components/accordion.ts +30 -0
  191. package/src/theme/components/breadcrumb.ts +77 -0
  192. package/src/theme/components/button.ts +77 -63
  193. package/src/theme/components/checkbox.ts +15 -27
  194. package/src/theme/components/customCheckboxGroup.ts +12 -0
  195. package/src/theme/components/customRadioGroup.ts +4 -10
  196. package/src/theme/components/global.ts +71 -0
  197. package/src/theme/components/globalMixins.ts +16 -0
  198. package/src/theme/components/heading.ts +15 -8
  199. package/src/theme/components/hero.ts +239 -0
  200. package/src/theme/components/icon.ts +79 -0
  201. package/src/theme/components/label.ts +17 -0
  202. package/src/theme/components/link.ts +47 -0
  203. package/src/theme/components/radio.ts +20 -31
  204. package/src/theme/components/searchBar.ts +21 -0
  205. package/src/theme/components/select.ts +50 -0
  206. package/src/theme/components/statusBadge.ts +27 -0
  207. package/src/theme/components/tabs.ts +72 -69
  208. package/src/theme/components/template.ts +114 -0
  209. package/src/theme/components/text.ts +31 -0
  210. package/src/theme/components/textInput.ts +61 -0
  211. package/src/theme/foundations/colors.ts +29 -13
  212. package/src/theme/foundations/global.ts +3 -0
  213. package/src/theme/foundations/shadows.ts +5 -0
  214. package/src/theme/index.ts +37 -7
  215. package/src/utils/componentCategories.ts +8 -2
  216. package/src/utils/utils.ts +13 -0
  217. package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
  218. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  219. package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
  220. package/dist/components/Template/Template.stories.d.ts +0 -30
  221. package/src/components/Accordion/Accordion.stories.tsx +0 -66
  222. package/src/components/Accordion/_Accordion.scss +0 -81
  223. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  224. package/src/components/Form/_Form.scss +0 -67
  225. package/src/components/Hero/_Hero.scss +0 -256
  226. package/src/components/Icons/_Icons.scss +0 -116
  227. package/src/components/Label/_Label.scss +0 -22
  228. package/src/components/Link/_Link.scss +0 -73
  229. package/src/components/SearchBar/_SearchBar.scss +0 -16
  230. package/src/components/Select/_Select.scss +0 -82
  231. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
  232. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  233. package/src/components/StyleGuide/Colors.stories.tsx +0 -289
  234. package/src/components/Template/Template.stories.tsx +0 -86
  235. package/src/components/Template/_Template.scss +0 -63
  236. package/src/components/TextInput/_TextInput.scss +0 -59
@@ -0,0 +1,226 @@
1
+ import * as React from "react";
2
+ import { Box, useStyleConfig } from "@chakra-ui/react";
3
+
4
+ export interface TemplateProps {}
5
+ export interface TemplateSidebarProps {
6
+ /** Renders the `TemplateContentSidebar` component either on the left or
7
+ * right side of the `TemplateContentPrimary` component. */
8
+ sidebar?: "none" | "left" | "right";
9
+ }
10
+ export interface TemplateContentProps extends TemplateSidebarProps {}
11
+ export interface TemplateAppContainerProps extends TemplateSidebarProps {
12
+ /** DOM that will be rendered in the `TemplateBreakout` component section. */
13
+ breakout?: React.ReactElement;
14
+ /** DOM that will be rendered in the `TemplateContentPrimary` component section. */
15
+ contentPrimary?: React.ReactElement;
16
+ /** DOM that will be rendered in the `TemplateContentSidebar` component section. */
17
+ contentSidebar?: React.ReactElement;
18
+ /** DOM that will be rendered in the `TemplateContentTop` component section. */
19
+ contentTop?: React.ReactElement;
20
+ /** DOM that will be rendered in the `TemplateFooter` component section. */
21
+ footer?: React.ReactElement;
22
+ /** DOM that will be rendered in the `TemplateHeader` component section. */
23
+ header?: React.ReactElement;
24
+ }
25
+
26
+ /**
27
+ * The main top-level parent component that wraps all template-related
28
+ * components. For backwards compatibility, this renders a `nypl-ds` CSS class.
29
+ */
30
+ const Template = (props: React.PropsWithChildren<TemplateProps>) => {
31
+ const styles = useStyleConfig("Template", {});
32
+ return (
33
+ <Box __css={styles} className="nypl-ds">
34
+ {props.children}
35
+ </Box>
36
+ );
37
+ };
38
+
39
+ /**
40
+ * This optional component should be the first child of the `Template`
41
+ * component. This is rendered as an HTML `<header>` element.
42
+ */
43
+ const TemplateHeader = (props: React.PropsWithChildren<TemplateProps>) => {
44
+ const styles = useStyleConfig("TemplateHeader", {});
45
+ return (
46
+ <Box as="header" __css={styles}>
47
+ {props.children}
48
+ </Box>
49
+ );
50
+ };
51
+
52
+ /**
53
+ * This optional component should be used inside the `TemplateHeader` component.
54
+ * This is meant to render its children from edge to edge and is most useful
55
+ * for the `Breadcrumbs` and `Hero` components, and other banner-like components.
56
+ */
57
+ const TemplateBreakout = (props: React.PropsWithChildren<TemplateProps>) => {
58
+ const styles = useStyleConfig("TemplateBreakout", {});
59
+ return <Box __css={styles}>{props.children}</Box>;
60
+ };
61
+
62
+ /**
63
+ * This component is most useful to render content on the page. This renders an
64
+ * HTML `<main>` element and takes a `sidebar` prop with optional "left" or
65
+ * "right" values. This will set the correct styling needed for the
66
+ * `TemplateContentPrimary` and `TemplateContentSidebar` components. Note that
67
+ * `TemplateContentPrimary` and `TemplateContentSidebar` must be ordered
68
+ * correctly as children elements for the appropriate styles to take effect.
69
+ */
70
+ const TemplateContent = (
71
+ props: React.PropsWithChildren<TemplateContentProps>
72
+ ) => {
73
+ const { sidebar = "none", children } = props;
74
+ const styles = useStyleConfig("TemplateContent", {
75
+ variant: sidebar !== "none" ? "sidebar" : null,
76
+ });
77
+ // Manually pass in the `sidebar` prop to the `TemplateContentPrimary` and
78
+ // `TemplateContentSidebar` components.
79
+ const newChildren = React.Children.map(
80
+ children,
81
+ (child: React.ReactElement) => {
82
+ let newChild = child;
83
+ if (
84
+ (child && child?.type === TemplateContentPrimary) ||
85
+ (child?.props && child.props?.mdxType === "TemplateContentPrimary") ||
86
+ child?.type === TemplateContentSidebar ||
87
+ (child?.props && child.props?.mdxType === "TemplateContentSidebar")
88
+ ) {
89
+ newChild = React.cloneElement(child, { sidebar });
90
+ }
91
+
92
+ return newChild;
93
+ }
94
+ );
95
+
96
+ return (
97
+ <Box as="main" __css={styles}>
98
+ {newChildren}
99
+ </Box>
100
+ );
101
+ };
102
+
103
+ /**
104
+ * This optional component must be used inside the `TemplateContent` component.
105
+ * This renders content in the main width of the container and will always render
106
+ * above the primary component and the sidebar component (if any).
107
+ */
108
+ const TemplateContentTop = (props: React.PropsWithChildren<TemplateProps>) => {
109
+ const styles = useStyleConfig("TemplateContentTop", {});
110
+ return <Box __css={styles}>{props.children}</Box>;
111
+ };
112
+
113
+ /**
114
+ * This component is used to render content in a column when there must be a
115
+ * sidebar component on either its left or right side. It must go inside the
116
+ * `TemplateContent` component. An optional `sidebar` prop value of "left" or
117
+ * "right" can be passed to render the correct CSS styles. If the `sidebar`
118
+ * prop is used in the `TemplateContent` component, there is no need to pass
119
+ * the `sidebar` prop to this component -- `TemplateContent` will handle it.
120
+ */
121
+ const TemplateContentPrimary = (
122
+ props: React.PropsWithChildren<TemplateContentProps>
123
+ ) => {
124
+ const { sidebar } = props;
125
+ const styles = useStyleConfig("TemplateContentPrimary", {
126
+ variant: sidebar,
127
+ });
128
+ return <Box __css={styles}>{props.children}</Box>;
129
+ };
130
+
131
+ /**
132
+ * This component is used to render content in a sidebar column. It must go
133
+ * inside the `TemplateContent` component and must be paired with the
134
+ * `TemplateContentPrimary` component. If this is a left sidebar, it needs to be
135
+ * rendered before the `TemplateContentPrimary` component. If this is a right
136
+ * sidebar, it needs to be rendered after the `TemplateContentPrimary` component.
137
+ * An optional `sidebar` prop value of "left" or "right" can be passed to render
138
+ * the correct CSS styles. If the `sidebar` prop is used in the `TemplateContent`
139
+ * component, there is no need to pass the `sidebar` prop to this component --
140
+ * `TemplateContent` will handle it.
141
+ */
142
+ const TemplateContentSidebar = (
143
+ props: React.PropsWithChildren<TemplateContentProps>
144
+ ) => {
145
+ const { sidebar } = props;
146
+ const styles = useStyleConfig("TemplateContentSidebar", {
147
+ variant: sidebar,
148
+ });
149
+ return <Box __css={styles}>{props.children}</Box>;
150
+ };
151
+
152
+ /**
153
+ * This optional component should be the last child of the `Template`
154
+ * component. This is rendered as an HTML `<footer>` element and spans the full
155
+ * width of the page.
156
+ */
157
+ const TemplateFooter = (props: React.PropsWithChildren<TemplateProps>) => {
158
+ return <Box as="footer">{props.children}</Box>;
159
+ };
160
+
161
+ /**
162
+ * This single component can be used instead of all the individual template
163
+ * components. Instead of importing and rendering the needed "template"
164
+ * components, each section is passed as a prop to the section where it should
165
+ * be rendered. For example, if you want to render content in the
166
+ * `TemplateContentPrimary` section, then pass it as a prop to `contentPrimary`.
167
+ */
168
+ const TemplateAppContainer = (
169
+ props: React.PropsWithChildren<TemplateAppContainerProps>
170
+ ) => {
171
+ const {
172
+ breakout,
173
+ contentPrimary,
174
+ contentSidebar,
175
+ contentTop,
176
+ footer,
177
+ header,
178
+ sidebar = "none",
179
+ } = props;
180
+ const breakoutElem = breakout && (
181
+ <TemplateBreakout>{breakout}</TemplateBreakout>
182
+ );
183
+ const contentTopElem = contentTop && (
184
+ <TemplateContentTop>{contentTop}</TemplateContentTop>
185
+ );
186
+ const contentPrimaryElem = contentPrimary && (
187
+ <TemplateContentPrimary>{contentPrimary}</TemplateContentPrimary>
188
+ );
189
+ const contentSidebarElem = contentSidebar && (
190
+ <TemplateContentSidebar>{contentSidebar}</TemplateContentSidebar>
191
+ );
192
+ return (
193
+ <Template>
194
+ {(header || breakoutElem) && (
195
+ <TemplateHeader>
196
+ {header}
197
+ {breakoutElem}
198
+ </TemplateHeader>
199
+ )}
200
+ {/* Note that setting `sidebar` as a prop here affects the
201
+ TemplateContentSidebar and TemplateContentPrimary components. */}
202
+ <TemplateContent sidebar={sidebar}>
203
+ {contentTopElem}
204
+
205
+ {sidebar === "left" && contentSidebarElem}
206
+
207
+ {contentPrimaryElem}
208
+
209
+ {sidebar === "right" && contentSidebarElem}
210
+ </TemplateContent>
211
+ {footer && <TemplateFooter>{footer}</TemplateFooter>}
212
+ </Template>
213
+ );
214
+ };
215
+
216
+ export {
217
+ TemplateAppContainer,
218
+ Template,
219
+ TemplateHeader,
220
+ TemplateBreakout,
221
+ TemplateContent,
222
+ TemplateContentTop,
223
+ TemplateContentPrimary,
224
+ TemplateContentSidebar,
225
+ TemplateFooter,
226
+ };
@@ -0,0 +1,70 @@
1
+ import {
2
+ Meta,
3
+ Story,
4
+ Canvas,
5
+ ArgsTable,
6
+ Description,
7
+ } from "@storybook/addon-docs/blocks";
8
+ import { withDesign } from "storybook-addon-designs";
9
+
10
+ import Text from "./Text";
11
+ import { getCategory } from "../../utils/componentCategories";
12
+
13
+ <Meta
14
+ title={getCategory("Text")}
15
+ component={Text}
16
+ decorators={[withDesign]}
17
+ parameters={{
18
+ design: {
19
+ type: "figma",
20
+ url:
21
+ "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/?node-id=10733%3A56919",
22
+ },
23
+ }}
24
+ argTypes={{
25
+ displaySize: { table: { disable: false } },
26
+ className: { table: { disable: true } },
27
+ }}
28
+ />
29
+
30
+ # Text
31
+
32
+ | Component Version | DS Version |
33
+ | ----------------- | ---------- |
34
+ | Added | `0.25.1` |
35
+ | Latest | `0.25.1` |
36
+
37
+ <Description of={Text} />
38
+
39
+ 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
+
41
+ <Canvas withToolbar>
42
+ <Story name="Text" args={{}}>
43
+ {(args) => (
44
+ <>
45
+ <Text {...args}>
46
+ Animal Crossing[a] is a social simulation video game series developed
47
+ and published by Nintendo. The series was conceptualized and created
48
+ by Katsuya Eguchi and Hisashi Nogami. In Animal Crossing, the player
49
+ character is a human who lives in a village inhabited by various
50
+ anthropomorphic animals and can do various activities like fishing,
51
+ bug catching, and fossil hunting. The series is notable for its
52
+ open-ended gameplay and use of the video game console's internal clock
53
+ and calendar to simulate real passage of time.
54
+ </Text>
55
+ <Text {...args}>
56
+ Since its initial release in 2001, five Animal Crossing games have
57
+ been released worldwide, one each for the Nintendo 64/iQue Player
58
+ (enhanced and reissued for the GameCube), Nintendo DS, Wii, Nintendo
59
+ 3DS and Nintendo Switch. The series has been both critically and
60
+ commercially successful and has sold over 60 million units worldwide.
61
+ Three spin-off games have also been released: Animal Crossing: Happy
62
+ Home Designer for Nintendo 3DS, Animal Crossing: Amiibo Festival for
63
+ Wii U, and Animal Crossing: Pocket Camp for mobile devices.
64
+ </Text>
65
+ </>
66
+ )}
67
+ </Story>
68
+ </Canvas>
69
+
70
+ <ArgsTable story="Text" />
@@ -0,0 +1,63 @@
1
+ import * as React from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
5
+
6
+ import Text from "./Text";
7
+ import { TextDisplaySizes } from "./TextTypes";
8
+
9
+ describe("Text Accessibility", () => {
10
+ it("passes axe accessibility test", async () => {
11
+ const { container } = render(<Text>Animal Crossing is all that!</Text>);
12
+ expect(await axe(container)).toHaveNoViolations();
13
+ });
14
+ });
15
+
16
+ describe("Text", () => {
17
+ it("renders a <p> tag and text", () => {
18
+ render(<Text>Animal Crossing is all that!</Text>);
19
+ expect(
20
+ screen.getByText("Animal Crossing is all that!")
21
+ ).toBeInTheDocument();
22
+ });
23
+
24
+ it("throws a warning when no children are passed", () => {
25
+ const warn = jest.spyOn(console, "warn");
26
+ render(<Text></Text>);
27
+ expect(warn).toHaveBeenCalledWith(
28
+ "The Text component has no children and will not render correctly."
29
+ );
30
+ });
31
+
32
+ it("renders the UI snapshot correctly", () => {
33
+ const defaultText = renderer
34
+ .create(<Text>Animal Crossing is all that!</Text>)
35
+ .toJSON();
36
+ const caption = renderer
37
+ .create(
38
+ <Text displaySize={TextDisplaySizes.Caption}>
39
+ Animal Crossing is all that!
40
+ </Text>
41
+ )
42
+ .toJSON();
43
+ const tag = renderer
44
+ .create(
45
+ <Text displaySize={TextDisplaySizes.Tag}>
46
+ Animal Crossing is all that!
47
+ </Text>
48
+ )
49
+ .toJSON();
50
+ const mini = renderer
51
+ .create(
52
+ <Text displaySize={TextDisplaySizes.Mini}>
53
+ Animal Crossing is all that!
54
+ </Text>
55
+ )
56
+ .toJSON();
57
+
58
+ expect(defaultText).toMatchSnapshot();
59
+ expect(caption).toMatchSnapshot();
60
+ expect(tag).toMatchSnapshot();
61
+ expect(mini).toMatchSnapshot();
62
+ });
63
+ });
@@ -0,0 +1,55 @@
1
+ import * as React from "react";
2
+ import { Text as ChakraText, useStyleConfig } from "@chakra-ui/react";
3
+ import { TextDisplaySizes } from "./TextTypes";
4
+ import { getVariant } from "../../utils/utils";
5
+
6
+ export interface TextProps {
7
+ /** Additional class name to render in the `Text` component. */
8
+ className?: string;
9
+ /** Optional prop used to show bolded text */
10
+ isBold?: boolean;
11
+ /** Optional prop used to show itlicized text */
12
+ isItalic?: boolean;
13
+ /** Optional prop used to remove default spacing */
14
+ noSpace?: boolean;
15
+ /** Optional prop to control the text styling */
16
+ displaySize?: TextDisplaySizes;
17
+ }
18
+
19
+ function Text(props: React.PropsWithChildren<TextProps>) {
20
+ const {
21
+ children,
22
+ className = "",
23
+ displaySize = TextDisplaySizes.Default,
24
+ isBold,
25
+ isItalic,
26
+ noSpace,
27
+ } = props;
28
+
29
+ let variant = getVariant(
30
+ displaySize,
31
+ TextDisplaySizes,
32
+ TextDisplaySizes.Default
33
+ );
34
+
35
+ const styles = useStyleConfig("Text", {
36
+ variant,
37
+ isBold,
38
+ isItalic,
39
+ noSpace,
40
+ });
41
+
42
+ if (!children) {
43
+ console.warn(
44
+ "The Text component has no children and will not render correctly."
45
+ );
46
+ }
47
+
48
+ return (
49
+ <ChakraText className={className} sx={styles}>
50
+ {children}
51
+ </ChakraText>
52
+ );
53
+ }
54
+
55
+ export default Text;
@@ -0,0 +1,6 @@
1
+ export enum TextDisplaySizes {
2
+ Default = "default",
3
+ Caption = "caption",
4
+ Tag = "tag",
5
+ Mini = "mini",
6
+ }
@@ -0,0 +1,33 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Text renders the UI snapshot correctly 1`] = `
4
+ <p
5
+ className="chakra-text css-0"
6
+ >
7
+ Animal Crossing is all that!
8
+ </p>
9
+ `;
10
+
11
+ exports[`Text renders the UI snapshot correctly 2`] = `
12
+ <p
13
+ className="chakra-text css-0"
14
+ >
15
+ Animal Crossing is all that!
16
+ </p>
17
+ `;
18
+
19
+ exports[`Text renders the UI snapshot correctly 3`] = `
20
+ <p
21
+ className="chakra-text css-0"
22
+ >
23
+ Animal Crossing is all that!
24
+ </p>
25
+ `;
26
+
27
+ exports[`Text renders the UI snapshot correctly 4`] = `
28
+ <p
29
+ className="chakra-text css-0"
30
+ >
31
+ Animal Crossing is all that!
32
+ </p>
33
+ `;