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

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 (250) hide show
  1. package/CHANGELOG.md +45 -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 +3 -2
  10. package/dist/components/Form/Form.d.ts +2 -2
  11. package/dist/components/Heading/Heading.d.ts +7 -3
  12. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  15. package/dist/components/Icons/Icon.d.ts +4 -4
  16. package/dist/components/Icons/IconSvgs.d.ts +0 -21
  17. package/dist/components/Icons/IconTypes.d.ts +0 -23
  18. package/dist/components/Image/Image.d.ts +11 -3
  19. package/dist/components/Logo/Logo.d.ts +28 -0
  20. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  21. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  22. package/dist/components/Modal/Modal.d.ts +0 -4
  23. package/dist/components/Notification/Notification.d.ts +2 -2
  24. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  25. package/dist/components/Radio/Radio.d.ts +6 -5
  26. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  27. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  28. package/dist/components/Select/Select.d.ts +3 -2
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  30. package/dist/components/Slider/Slider.d.ts +3 -2
  31. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  32. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  33. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  34. package/dist/components/Table/Table.d.ts +23 -0
  35. package/dist/components/Template/Template.d.ts +8 -3
  36. package/dist/components/Text/Text.d.ts +2 -2
  37. package/dist/components/TextInput/TextInput.d.ts +4 -3
  38. package/dist/components/Toggle/Toggle.d.ts +3 -2
  39. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  40. package/dist/design-system-react-components.cjs.development.js +5630 -5692
  41. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  43. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  44. package/dist/design-system-react-components.esm.js +4304 -4362
  45. package/dist/design-system-react-components.esm.js.map +1 -1
  46. package/dist/index.d.ts +6 -4
  47. package/dist/styles.css +2 -2
  48. package/dist/theme/components/button.d.ts +0 -12
  49. package/dist/theme/components/card.d.ts +14 -2
  50. package/dist/theme/components/customTable.d.ts +47 -0
  51. package/dist/theme/components/fieldset.d.ts +2 -2
  52. package/dist/theme/components/global.d.ts +1 -1
  53. package/dist/theme/components/heading.d.ts +4 -0
  54. package/dist/theme/components/label.d.ts +1 -1
  55. package/dist/theme/components/link.d.ts +14 -1
  56. package/dist/theme/components/list.d.ts +0 -2
  57. package/dist/theme/components/logo.d.ts +4 -0
  58. package/dist/theme/components/searchBar.d.ts +7 -13
  59. package/dist/theme/components/select.d.ts +1 -0
  60. package/dist/theme/components/structuredContent.d.ts +33 -0
  61. package/dist/theme/components/template.d.ts +10 -10
  62. package/dist/theme/components/textInput.d.ts +2 -0
  63. package/dist/theme/components/toggle.d.ts +8 -5
  64. package/dist/utils/utils.d.ts +10 -0
  65. package/package.json +1 -2
  66. package/src/__tests__/utils/utils.test.ts +23 -1
  67. package/src/components/Accordion/Accordion.stories.mdx +14 -12
  68. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  69. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  70. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  71. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +30 -11
  72. package/src/components/Button/Button.stories.mdx +93 -48
  73. package/src/components/Button/Button.test.tsx +0 -12
  74. package/src/components/Button/Button.tsx +7 -7
  75. package/src/components/Button/ButtonTypes.tsx +0 -1
  76. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  77. package/src/components/Card/Card.stories.mdx +186 -71
  78. package/src/components/Card/Card.test.tsx +45 -22
  79. package/src/components/Card/Card.tsx +17 -5
  80. package/src/components/Card/__snapshots__/Card.test.tsx.snap +8 -2
  81. package/src/components/Chakra/Box.stories.mdx +3 -3
  82. package/src/components/Chakra/Center.stories.mdx +5 -5
  83. package/src/components/Chakra/Grid.stories.mdx +3 -3
  84. package/src/components/Chakra/Stack.stories.mdx +2 -2
  85. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  86. package/src/components/Checkbox/Checkbox.tsx +13 -8
  87. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  88. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  89. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  90. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  91. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  92. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  93. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  94. package/src/components/DatePicker/DatePicker.tsx +10 -6
  95. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +36 -18
  96. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  97. package/src/components/Form/Form.stories.mdx +49 -41
  98. package/src/components/Form/Form.tsx +5 -4
  99. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  100. package/src/components/Heading/Heading.stories.mdx +59 -23
  101. package/src/components/Heading/Heading.test.tsx +82 -18
  102. package/src/components/Heading/Heading.tsx +31 -31
  103. package/src/components/Heading/HeadingTypes.tsx +6 -6
  104. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  105. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  106. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  107. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  108. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  109. package/src/components/Hero/Hero.stories.mdx +72 -53
  110. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  111. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  112. package/src/components/Icons/Icon.stories.mdx +77 -76
  113. package/src/components/Icons/Icon.tsx +4 -5
  114. package/src/components/Icons/IconSvgs.tsx +0 -42
  115. package/src/components/Icons/IconTypes.tsx +0 -24
  116. package/src/components/Image/Image.stories.mdx +66 -18
  117. package/src/components/Image/Image.tsx +21 -10
  118. package/src/components/Label/Label.stories.mdx +20 -19
  119. package/src/components/Link/Link.stories.mdx +102 -51
  120. package/src/components/Link/Link.test.tsx +38 -8
  121. package/src/components/Link/Link.tsx +19 -12
  122. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  123. package/src/components/List/List.stories.mdx +36 -24
  124. package/src/components/Logo/Logo.stories.mdx +220 -0
  125. package/src/components/Logo/Logo.test.tsx +98 -0
  126. package/src/components/Logo/Logo.tsx +97 -0
  127. package/src/components/Logo/LogoSvgs.tsx +34 -0
  128. package/src/components/Logo/LogoTypes.tsx +32 -0
  129. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  130. package/src/components/Modal/Modal.stories.mdx +20 -5
  131. package/src/components/Modal/Modal.tsx +2 -8
  132. package/src/components/Notification/Notification.stories.mdx +61 -38
  133. package/src/components/Notification/Notification.tsx +9 -4
  134. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  135. package/src/components/Pagination/Pagination.stories.mdx +17 -6
  136. package/src/components/Pagination/Pagination.tsx +1 -1
  137. package/src/components/Placeholder/Placeholder.tsx +7 -14
  138. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  139. package/src/components/Radio/Radio.stories.mdx +39 -19
  140. package/src/components/Radio/Radio.tsx +13 -9
  141. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  142. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  143. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  144. package/src/components/SearchBar/SearchBar.Test.tsx +58 -10
  145. package/src/components/SearchBar/SearchBar.stories.mdx +109 -30
  146. package/src/components/SearchBar/SearchBar.tsx +53 -32
  147. package/src/components/Select/Select.stories.mdx +48 -14
  148. package/src/components/Select/Select.tsx +16 -10
  149. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  150. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  151. package/src/components/Slider/Slider.stories.mdx +72 -22
  152. package/src/components/Slider/Slider.tsx +15 -10
  153. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  154. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  155. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  156. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  157. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  158. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  159. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  160. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  161. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  162. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  163. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  164. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  165. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  166. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  167. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  168. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  169. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  170. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  171. package/src/components/Table/Table.stories.mdx +66 -0
  172. package/src/components/Table/Table.test.tsx +60 -0
  173. package/src/components/Table/Table.tsx +116 -0
  174. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  175. package/src/components/Tabs/Tabs.test.tsx +1 -1
  176. package/src/components/Template/Template.stories.mdx +56 -47
  177. package/src/components/Template/Template.test.tsx +65 -5
  178. package/src/components/Template/Template.tsx +35 -5
  179. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  180. package/src/components/Text/Text.stories.mdx +33 -11
  181. package/src/components/Text/Text.tsx +2 -2
  182. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  183. package/src/components/TextInput/TextInput.test.tsx +96 -0
  184. package/src/components/TextInput/TextInput.tsx +12 -8
  185. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  186. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  187. package/src/components/Toggle/Toggle.tsx +14 -9
  188. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  189. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  190. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  191. package/src/docs/Chakra.stories.mdx +5 -8
  192. package/src/docs/Intro.stories.mdx +2 -2
  193. package/src/index.ts +5 -4
  194. package/src/styles/base/_03-base.scss +1 -1
  195. package/src/styles/base/_place-holder.scss +7 -7
  196. package/src/styles.scss +1 -5
  197. package/src/theme/components/breadcrumb.ts +3 -3
  198. package/src/theme/components/button.ts +5 -12
  199. package/src/theme/components/card.ts +5 -2
  200. package/src/theme/components/checkbox.ts +1 -1
  201. package/src/theme/components/customTable.ts +50 -0
  202. package/src/theme/components/datePicker.ts +1 -1
  203. package/src/theme/components/global.ts +6 -6
  204. package/src/theme/components/heading.ts +13 -11
  205. package/src/theme/components/helperErrorText.ts +1 -1
  206. package/src/theme/components/image.ts +1 -1
  207. package/src/theme/components/link.ts +17 -5
  208. package/src/theme/components/list.ts +1 -3
  209. package/src/theme/components/logo.ts +54 -0
  210. package/src/theme/components/notification.ts +1 -1
  211. package/src/theme/components/searchBar.ts +7 -13
  212. package/src/theme/components/select.ts +1 -0
  213. package/src/theme/components/statusBadge.ts +1 -1
  214. package/src/theme/components/structuredContent.ts +54 -0
  215. package/src/theme/components/template.ts +10 -10
  216. package/src/theme/components/text.ts +6 -6
  217. package/src/theme/components/textInput.ts +1 -0
  218. package/src/theme/components/toggle.ts +9 -5
  219. package/src/theme/components/videoPlayer.ts +0 -2
  220. package/src/theme/foundations/global.ts +2 -2
  221. package/src/theme/foundations/typography.ts +84 -12
  222. package/src/theme/index.ts +6 -0
  223. package/src/utils/componentCategories.ts +1 -1
  224. package/src/utils/utils.ts +17 -0
  225. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  226. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  227. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  228. package/dist/components/Input/Input.d.ts +0 -36
  229. package/dist/components/Input/Input.stories.d.ts +0 -29
  230. package/dist/components/Input/InputTypes.d.ts +0 -6
  231. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  232. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  233. package/dist/helpers/getCSSVariable.d.ts +0 -1
  234. package/dist/interfaces.d.ts +0 -3
  235. package/dist/utils/bem.d.ts +0 -1
  236. package/src/__tests__/utils/bem.test.ts +0 -37
  237. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  238. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  239. package/src/components/CardEdition/CardEdition.tsx +0 -60
  240. package/src/components/CardEdition/_CardEdition.scss +0 -137
  241. package/src/components/Input/Input.stories.tsx +0 -133
  242. package/src/components/Input/Input.test.tsx +0 -266
  243. package/src/components/Input/Input.tsx +0 -81
  244. package/src/components/Input/InputTypes.tsx +0 -8
  245. package/src/components/Input/_Input.scss +0 -78
  246. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  247. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  248. package/src/helpers/getCSSVariable.tsx +0 -5
  249. package/src/interfaces.ts +0 -3
  250. package/src/utils/bem.ts +0 -44
@@ -1,31 +1,33 @@
1
+ import { action } from "@storybook/addon-actions";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
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 { getCategory } from "../../utils/componentCategories";
10
10
 
11
- import Form, { FormRow, FormField } from "./Form";
12
- import { FormSpacing } from "./FormTypes";
13
- import TextInput from "../TextInput/TextInput";
14
- import Radio from "../Radio/Radio";
15
- import RadioGroup from "../RadioGroup/RadioGroup";
11
+ import Button from "../Button/Button";
16
12
  import Checkbox from "../Checkbox/Checkbox";
17
13
  import CheckboxGroup from "../CheckboxGroup/CheckboxGroup";
18
- import Label from "../Label/Label";
19
- import Button from "../Button/Button";
20
- import Select from "../Select/Select";
14
+ import DatePicker from "../DatePicker/DatePicker";
15
+ import { DatePickerTypes } from "../DatePicker/DatePickerTypes";
16
+ import Form, { FormRow, FormField } from "./Form";
17
+ import { FormSpacing } from "./FormTypes";
21
18
  import Heading from "../Heading/Heading";
22
19
  import { HeadingLevels } from "../Heading/HeadingTypes";
23
20
  import HorizontalRule from "../HorizontalRule/HorizontalRule";
24
- import DatePicker from "../DatePicker/DatePicker";
25
- import { DatePickerTypes } from "../DatePicker/DatePickerTypes";
26
- import { action } from "@storybook/addon-actions";
27
-
21
+ import Label from "../Label/Label";
22
+ import Radio from "../Radio/Radio";
23
+ import RadioGroup from "../RadioGroup/RadioGroup";
24
+ import Select from "../Select/Select";
25
+ import TextInput from "../TextInput/TextInput";
26
+ import { getCategory } from "../../utils/componentCategories";
28
27
  import SimpleGrid from "../Grid/SimpleGrid";
28
+ import { getStorybookEnumValues } from "../../utils/utils";
29
+
30
+ export const enumValues = getStorybookEnumValues(FormSpacing, "FormSpacing");
29
31
 
30
32
  <Meta
31
33
  title={getCategory("Form")}
@@ -34,11 +36,23 @@ import SimpleGrid from "../Grid/SimpleGrid";
34
36
  parameters={{
35
37
  design: {
36
38
  type: "figma",
37
- url:
38
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
39
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
39
40
  },
40
41
  jest: ["Form.test.tsx"],
41
42
  }}
43
+ argTypes={{
44
+ action: { control: false },
45
+ id: { control: false },
46
+ method: {
47
+ control: { type: "radio" },
48
+ options: ["get", "post"],
49
+ },
50
+ spacing: {
51
+ control: { type: "select" },
52
+ table: { defaultValue: { summary: "FormSpacing.Large" } },
53
+ options: enumValues.options,
54
+ },
55
+ }}
42
56
  />
43
57
 
44
58
  # Form
@@ -58,23 +72,17 @@ The `Form` component renders a standard `<form>` element and should be used to h
58
72
 
59
73
  <Canvas withToolbar>
60
74
  <Story
61
- name="Form"
75
+ name="Form with Controls"
62
76
  args={{
63
77
  action: "/end/point",
64
- id: "custom-form-id",
78
+ className: undefined,
79
+ id: "form-id",
65
80
  method: "get",
66
- }}
67
- argTypes={{
68
- method: {
69
- control: {
70
- type: "radio",
71
- options: ["get", "post"],
72
- },
73
- },
81
+ spacing: "FormSpacing.Large",
74
82
  }}
75
83
  >
76
84
  {(args) => (
77
- <Form {...args}>
85
+ <Form {...args} spacing={enumValues.getValue(args.spacing)}>
78
86
  <FormRow>
79
87
  <FormField>
80
88
  <TextInput
@@ -95,15 +103,15 @@ The `Form` component renders a standard `<form>` element and should be used to h
95
103
  id="date-range"
96
104
  dateType={DatePickerTypes.Full}
97
105
  dateFormat="yyyy-MM-dd"
98
- dateRange={true}
99
- minDate="1/1/2021"
100
- maxDate="1/1/2022"
101
- labelText="Select the date range you want to visit NYPL"
102
- nameFrom="visit-dates"
103
106
  helperTextFrom="From this date."
104
107
  helperTextTo="To this date."
105
108
  helperText="Select a valid date range."
106
109
  invalidText="Please select a valid date range."
110
+ isDateRange
111
+ labelText="Select the date range you want to visit NYPL"
112
+ minDate="1/1/2021"
113
+ maxDate="1/1/2022"
114
+ nameFrom="visit-dates"
107
115
  showLabel={false}
108
116
  />
109
117
  </FormField>
@@ -188,14 +196,14 @@ The `Form` component renders a standard `<form>` element and should be used to h
188
196
  </Story>
189
197
  </Canvas>
190
198
 
191
- <ArgsTable story="Form" />
199
+ <ArgsTable story="Form with Controls" />
192
200
 
193
201
  ## Spacing Variants
194
202
 
195
- export const formRow = (size) => {
196
- const labelText = `Size: ${size}`;
203
+ export const formRow = (nameString, size) => {
204
+ const labelText = `Size: ${nameString} (${size})`;
197
205
  return (
198
- <li>
206
+ <li key={size}>
199
207
  <Heading level={HeadingLevels.Three}>{labelText}</Heading>
200
208
  <Form spacing={size}>
201
209
  <FormRow>
@@ -243,7 +251,7 @@ export const formRow = (size) => {
243
251
  };
244
252
  export const sizes = [];
245
253
  for (const formSpacing in FormSpacing) {
246
- sizes.push(formRow(FormSpacing[formSpacing]));
254
+ sizes.push(formRow(`FormSpacing.${formSpacing}`, FormSpacing[formSpacing]));
247
255
  }
248
256
  export const getForms = (list) => <ul style={{ listStyle: "none" }}>{list}</ul>;
249
257
 
@@ -269,7 +277,7 @@ Below are the spacing variants available with the `FormSpacing` enum.
269
277
  <Story name="Example Code" />
270
278
 
271
279
  ```jsx
272
- <Form action="/end/point" method="get">
280
+ <Form action="/end/point" method="get" spacing={FormSpacing.Large}>
273
281
  <FormField>
274
282
  <TextInput
275
283
  labelText="Username"
@@ -1,7 +1,8 @@
1
+ import { Box } from "@chakra-ui/react";
1
2
  import * as React from "react";
3
+
2
4
  import { FormSpacing } from "./FormTypes";
3
5
  import SimpleGrid from "../Grid/SimpleGrid";
4
- import { Box } from "@chakra-ui/react";
5
6
  import generateUUID from "../../helpers/generateUUID";
6
7
 
7
8
  export interface FormChildProps {
@@ -54,15 +55,15 @@ export function FormField(props: React.PropsWithChildren<FormChildProps>) {
54
55
  );
55
56
  }
56
57
 
57
- /** main Form component */
58
- export default function Form(props: React.ComponentProps<"form"> & FormProps) {
58
+ /** Main Form component */
59
+ export default function Form(props: React.PropsWithChildren<FormProps>) {
59
60
  const {
60
61
  action,
61
62
  children,
62
63
  className,
63
64
  id = generateUUID(),
64
65
  method,
65
- spacing,
66
+ spacing = FormSpacing.Large,
66
67
  } = props;
67
68
 
68
69
  let attributes = {};
@@ -1,13 +1,14 @@
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 SimpleGrid from "./SimpleGrid";
11
+ import { GridGaps } from "./GridTypes";
11
12
  import Card, { CardHeading, CardContent, CardActions } from "../Card/Card";
12
13
  import { CardLayouts } from "../Card/CardTypes";
13
14
  import { HeadingDisplaySizes, HeadingLevels } from "../Heading/HeadingTypes";
@@ -20,9 +21,11 @@ import {
20
21
  } from "../Icons/IconTypes";
21
22
  import Image from "../Image/Image";
22
23
  import { ImageRatios } from "../Image/ImageTypes";
23
-
24
24
  import { getCategory } from "../../utils/componentCategories";
25
25
  import DSProvider from "../../theme/provider";
26
+ import { getStorybookEnumValues } from "../../utils/utils";
27
+
28
+ export const enumValues = getStorybookEnumValues(GridGaps, "GridGaps");
26
29
 
27
30
  <Meta
28
31
  title={getCategory("SimpleGrid")}
@@ -31,32 +34,21 @@ import DSProvider from "../../theme/provider";
31
34
  parameters={{
32
35
  design: {
33
36
  type: "figma",
34
- url:
35
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36835%3A26613",
37
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36835%3A26613",
36
38
  },
37
39
  jest: ["SimpleGrid.test.tsx"],
38
40
  }}
39
41
  argTypes={{
42
+ className: { control: false },
40
43
  columns: {
41
- control: {
42
- type: "number",
43
- min: 2,
44
- },
45
- table: {
46
- defaultValue: {
47
- summary: 3,
48
- },
49
- },
44
+ control: { min: 2, type: "number" },
50
45
  },
51
46
  gap: {
52
- table: {
53
- defaultValue: {
54
- summary: "l",
55
- },
56
- },
47
+ control: { type: "select" },
48
+ options: enumValues.options,
49
+ table: { defaultValue: { summary: "GridGaps.Large" } },
57
50
  },
58
- className: { table: { disable: true } },
59
- id: { table: { disable: true } },
51
+ id: { control: false },
60
52
  }}
61
53
  />
62
54
 
@@ -74,9 +66,17 @@ The `SimpleGrid` component is used to render UI elements in a uniform grid layou
74
66
  The NYPL standards for the items per row in a grid is `3` for desktop, `2` for tablet and `1` for mobile. By default, the `SimpleGrid` component uses these standards and the `columns` prop is optional. If the `columns` prop is used, the tablet breakpoint will be dropped and only the mobile breakpoint (1 item per row) will be triggered.
75
67
 
76
68
  <Canvas withToolbar>
77
- <Story name="SimpleGrid Props">
69
+ <Story
70
+ name="SimpleGrid with Controls"
71
+ args={{
72
+ className: undefined,
73
+ columns: undefined,
74
+ gap: "GridGaps.Large",
75
+ id: "simpleGrid-id",
76
+ }}
77
+ >
78
78
  {(args) => (
79
- <SimpleGrid {...args}>
79
+ <SimpleGrid {...args} gap={enumValues.getValue(args.gap)}>
80
80
  <Card
81
81
  imageSrc="https://placeimg.com/400/220/animals"
82
82
  imageAlt="Alt text"
@@ -148,7 +148,7 @@ The NYPL standards for the items per row in a grid is `3` for desktop, `2` for t
148
148
  </Story>
149
149
  </Canvas>
150
150
 
151
- <ArgsTable story="SimpleGrid Props" />
151
+ <ArgsTable story="SimpleGrid with Controls" />
152
152
 
153
153
  ## Other SimpleGrid Examples
154
154
 
@@ -1,16 +1,25 @@
1
1
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
2
  ArgsTable,
6
- Preview,
3
+ Canvas,
7
4
  Description,
8
- } from "@storybook/addon-docs/blocks";
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
9
8
  import { withDesign } from "storybook-addon-designs";
10
9
 
11
10
  import Heading from "./Heading";
12
11
  import { HeadingDisplaySizes, HeadingLevels } from "./HeadingTypes";
13
12
  import { getCategory } from "../../utils/componentCategories";
13
+ import { getStorybookEnumValues } from "../../utils/utils";
14
+
15
+ export const sizesEnumValues = getStorybookEnumValues(
16
+ HeadingDisplaySizes,
17
+ "HeadingDisplaySizes"
18
+ );
19
+ export const levelsEnumValues = getStorybookEnumValues(
20
+ HeadingLevels,
21
+ "HeadingLevels"
22
+ );
14
23
 
15
24
  <Meta
16
25
  title={getCategory("Heading")}
@@ -19,15 +28,23 @@ import { getCategory } from "../../utils/componentCategories";
19
28
  parameters={{
20
29
  design: {
21
30
  type: "figma",
22
- url:
23
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=10975%3A16",
31
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=10975%3A16",
24
32
  },
25
33
  jest: ["Heading.test.tsx"],
26
34
  }}
27
35
  argTypes={{
28
- additionalStyles: { table: { disable: true } },
29
- className: { table: { disable: true } },
30
- id: { table: { disable: true } },
36
+ additionalStyles: { control: false },
37
+ className: { control: false },
38
+ displaySize: {
39
+ control: { type: "select" },
40
+ options: sizesEnumValues.options,
41
+ },
42
+ id: { control: false },
43
+ level: {
44
+ control: { type: "select" },
45
+ options: levelsEnumValues.options,
46
+ table: { defaultValue: { summary: "HeadingLevels.Two" } },
47
+ },
31
48
  }}
32
49
  />
33
50
 
@@ -36,25 +53,41 @@ import { getCategory } from "../../utils/componentCategories";
36
53
  | Component Version | DS Version |
37
54
  | ----------------- | ---------- |
38
55
  | Added | `0.0.4` |
39
- | Latest | `0.25.2` |
56
+ | Latest | `0.25.9` |
40
57
 
41
58
  <Description of={Heading} />
42
59
 
43
- A `Heading` component will render a standard HTML `<h>` tag (1-6). The heading's text can be passed in through a `text` prop or as a child. Default styles for semantic elements can be overwritten using the `displaySize` prop.
60
+ A `Heading` component will render a standard HTML `<h>` tag (1-6). The heading's
61
+ text can be passed in through a `text` prop or as a child. Default styles for
62
+ semantic elements can be overwritten using the `displaySize` prop.
44
63
 
45
64
  <Canvas withToolbar>
46
65
  <Story
47
- name="Heading Props"
66
+ name="Heading with Controls"
48
67
  args={{
49
- id: "default-heading",
68
+ additionalStyles: undefined,
69
+ className: undefined,
70
+ displaySize: undefined,
71
+ id: "heading-id",
72
+ level: "HeadingLevels.Two",
50
73
  text: "Default Heading",
74
+ url: undefined,
75
+ urlClass: undefined,
51
76
  }}
52
77
  >
53
- {(args) => <Heading {...args} />}
78
+ {(args) => (
79
+ <Heading
80
+ {...args}
81
+ displaySize={
82
+ args.displaySize && sizesEnumValues.getValue(args.displaySize)
83
+ }
84
+ level={levelsEnumValues.getValue(args.level)}
85
+ />
86
+ )}
54
87
  </Story>
55
88
  </Canvas>
56
89
 
57
- <ArgsTable story="Heading Props" />
90
+ <ArgsTable story="Heading with Controls" />
58
91
 
59
92
  ## Default Heading Styles
60
93
 
@@ -64,32 +97,32 @@ A `Heading` component will render a standard HTML `<h>` tag (1-6). The heading's
64
97
  <Heading
65
98
  id="heading-one"
66
99
  level={HeadingLevels.One}
67
- text="<h1> Heading 1"
100
+ text="<h1> Heading 1 - HeadingLevels.One"
68
101
  />
69
102
  <Heading
70
103
  id="heading-two"
71
104
  level={HeadingLevels.Two}
72
- text="<h2> Heading 2"
105
+ text="<h2> Heading 2 - HeadingLevels.Two"
73
106
  />
74
107
  <Heading
75
108
  id="heading-three"
76
109
  level={HeadingLevels.Three}
77
- text="<h3> Heading 3"
110
+ text="<h3> Heading 3 - HeadingLevels.Three"
78
111
  />
79
112
  <Heading
80
113
  id="heading-four"
81
114
  level={HeadingLevels.Four}
82
- text="<h4> Heading 4"
115
+ text="<h4> Heading 4 - HeadingLevels.Four"
83
116
  />
84
117
  <Heading
85
118
  id="heading-five"
86
119
  level={HeadingLevels.Five}
87
- text="<h5> Heading 5"
120
+ text="<h5> Heading 5 - HeadingLevels.Five"
88
121
  />
89
122
  <Heading
90
123
  id="heading-six"
91
124
  level={HeadingLevels.Six}
92
- text="<h6> Heading 6"
125
+ text="<h6> Heading 6 - HeadingLevels.Six"
93
126
  />
94
127
  </div>
95
128
  </Story>
@@ -97,6 +130,9 @@ A `Heading` component will render a standard HTML `<h>` tag (1-6). The heading's
97
130
 
98
131
  ## DisplaySize Styles
99
132
 
133
+ Note: The `level` prop for the `Heading`s in the next example are all set to
134
+ `level={HeadingLevels.One}`.
135
+
100
136
  <Canvas>
101
137
  <Story name="DisplaySize Styles">
102
138
  <div>
@@ -155,7 +191,7 @@ When the `url` prop is passed to `Heading`, a child `<a>` element is created and
155
191
  />
156
192
  <Heading id="heading-with-link-child" level={HeadingLevels.Two}>
157
193
  <>
158
- Heading with a Word <a href="hello">Link</a>
194
+ Heading with a Word <a href="#hello">Link</a>
159
195
  </>
160
196
  </Heading>
161
197
  </Story>
@@ -1,6 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
4
5
 
5
6
  import Heading from "./Heading";
6
7
  import { HeadingDisplaySizes, HeadingLevels } from "./HeadingTypes";
@@ -15,12 +16,13 @@ describe("Heading Accessibility", () => {
15
16
  });
16
17
 
17
18
  describe("Heading", () => {
18
- it("Shows heading", () => {
19
+ it("renders and HTML heading element with the correct level", () => {
19
20
  render(<Heading id="h1" level={HeadingLevels.One} text="Heading 1" />);
20
21
  expect(screen.getByRole("heading", { level: 1 })).toBeInTheDocument();
21
22
  expect(screen.getByText("Heading 1")).toBeInTheDocument();
22
23
  });
23
- it("Can pass heading content as child", () => {
24
+
25
+ it("can pass heading content as child", () => {
24
26
  render(
25
27
  <Heading id="h1" level={HeadingLevels.Two}>
26
28
  Heading 2
@@ -30,13 +32,18 @@ describe("Heading", () => {
30
32
  expect(screen.getByText("Heading 2")).toBeInTheDocument();
31
33
  });
32
34
 
35
+ it("renders the default level two if no `level` prop is passed", () => {
36
+ render(<Heading id="h2">Heading 2</Heading>);
37
+ expect(screen.getByRole("heading", { level: 2 })).toBeInTheDocument();
38
+ });
39
+
33
40
  // TODO: check that header children are links
34
41
  // it("Throws error when invalid heading is passed as child", () => {
35
42
  // expect(() => render(<Heading id="h1" level={HeadingLevels.Three}><span>oh no</span></Heading>))
36
43
  // .to.throw("Headings can only be plain text or bold");
37
44
  // });
38
45
 
39
- it("Can pass heading content as child span", () => {
46
+ it("can pass a span element as a child", () => {
40
47
  render(
41
48
  <Heading id="h1" level={HeadingLevels.One}>
42
49
  <span>
@@ -47,7 +54,7 @@ describe("Heading", () => {
47
54
  expect(screen.getByText(/Text/i)).toBeInTheDocument();
48
55
  });
49
56
 
50
- it("uses child when both child and the text prop are passed", () => {
57
+ it("prioritizes the child when both child and the text prop are passed", () => {
51
58
  render(
52
59
  <Heading id="h1" level={HeadingLevels.One} text="prop text">
53
60
  child text
@@ -56,20 +63,20 @@ describe("Heading", () => {
56
63
  expect(screen.getByText("child text")).toBeInTheDocument();
57
64
  });
58
65
 
59
- it("Has <a> tag when passed URL", () => {
66
+ it("renders an anchor element when the `url` prop is passed", () => {
60
67
  render(
61
68
  <Heading
62
69
  id="h1"
63
70
  level={HeadingLevels.One}
64
- url="fake-url"
65
71
  text="Heading 1"
72
+ url="fake-url"
66
73
  />
67
74
  );
68
75
 
69
76
  expect(screen.getByRole("link")).toBeInTheDocument();
70
77
  });
71
78
 
72
- it("<a> has class when passed urlClass", () => {
79
+ it("adds the `urlClass` prop to the anchor element as its class name", () => {
73
80
  render(
74
81
  <Heading
75
82
  id="h1"
@@ -84,19 +91,13 @@ describe("Heading", () => {
84
91
  );
85
92
  });
86
93
 
87
- it("Throws error when invalid heading number passed", () => {
88
- expect(() =>
89
- render(<Heading id="h1" level={9} text="Heading 9" />)
90
- ).toThrow("Heading only supports levels 1-6");
91
- });
92
-
93
- it("Throws error when neither child nor text is passed", () => {
94
- expect(() => render(<Heading id="h1" level={9} />)).toThrow(
95
- "Heading only supports levels 1-6"
94
+ it("throws error when neither child nor text is passed", () => {
95
+ expect(() => render(<Heading id="h1" level={HeadingLevels.One} />)).toThrow(
96
+ "Heading has no children, please pass prop: text"
96
97
  );
97
98
  });
98
99
 
99
- it("Throws error when heading with many children is passed", () => {
100
+ it("throws error when heading with many children is passed", () => {
100
101
  expect(() =>
101
102
  render(
102
103
  <Heading id="h1" level={HeadingLevels.Four}>
@@ -107,7 +108,7 @@ describe("Heading", () => {
107
108
  ).toThrow("Please only pass one child into Heading, got span, span");
108
109
  });
109
110
 
110
- it("Uses custom display size", () => {
111
+ it("uses custom display size", () => {
111
112
  render(
112
113
  <Heading
113
114
  id="h1"
@@ -120,4 +121,67 @@ describe("Heading", () => {
120
121
  "font-size": "2em",
121
122
  });
122
123
  });
124
+
125
+ it("renders the UI snapshot correctly", () => {
126
+ const basic = renderer
127
+ .create(
128
+ <Heading id="basic" level={HeadingLevels.One} text="Heading text" />
129
+ )
130
+ .toJSON();
131
+ const basicWithChildText = renderer
132
+ .create(
133
+ <Heading id="basicWithChildText" level={HeadingLevels.One}>
134
+ Heading text
135
+ </Heading>
136
+ )
137
+ .toJSON();
138
+ const customDisplaySize = renderer
139
+ .create(
140
+ <Heading
141
+ id="customDisplaySize"
142
+ level={HeadingLevels.One}
143
+ text="Heading with Secondary displaySize"
144
+ displaySize={HeadingDisplaySizes.Secondary}
145
+ />
146
+ )
147
+ .toJSON();
148
+ const otherLevel = renderer
149
+ .create(
150
+ <Heading
151
+ id="otherLevel"
152
+ level={HeadingLevels.Six}
153
+ text="Heading level six"
154
+ />
155
+ )
156
+ .toJSON();
157
+ const withLink = renderer
158
+ .create(
159
+ <Heading
160
+ id="withLink"
161
+ level={HeadingLevels.One}
162
+ text="Heading text is a link"
163
+ url="fake-url"
164
+ />
165
+ )
166
+ .toJSON();
167
+ const withCustomLink = renderer
168
+ .create(
169
+ <Heading id="withCustomLink" level={HeadingLevels.One}>
170
+ <>
171
+ Part of the heading text is
172
+ <a href="fake-url" className="custom-link">
173
+ <span>a link</span>
174
+ </a>
175
+ </>
176
+ </Heading>
177
+ )
178
+ .toJSON();
179
+
180
+ expect(basic).toMatchSnapshot();
181
+ expect(basicWithChildText).toMatchSnapshot();
182
+ expect(customDisplaySize).toMatchSnapshot();
183
+ expect(otherLevel).toMatchSnapshot();
184
+ expect(withLink).toMatchSnapshot();
185
+ expect(withCustomLink).toMatchSnapshot();
186
+ });
123
187
  });