@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.
- package/CHANGELOG.md +45 -1
- package/README.md +1 -1
- package/dist/components/Button/Button.d.ts +6 -6
- package/dist/components/Button/ButtonTypes.d.ts +0 -1
- package/dist/components/Card/Card.d.ts +6 -4
- package/dist/components/Checkbox/Checkbox.d.ts +3 -2
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
- package/dist/components/DatePicker/DatePicker.d.ts +3 -2
- package/dist/components/Form/Form.d.ts +2 -2
- package/dist/components/Heading/Heading.d.ts +7 -3
- package/dist/components/Heading/HeadingTypes.d.ts +6 -6
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
- package/dist/components/Icons/Icon.d.ts +4 -4
- package/dist/components/Icons/IconSvgs.d.ts +0 -21
- package/dist/components/Icons/IconTypes.d.ts +0 -23
- package/dist/components/Image/Image.d.ts +11 -3
- package/dist/components/Logo/Logo.d.ts +28 -0
- package/dist/components/Logo/LogoSvgs.d.ts +18 -0
- package/dist/components/Logo/LogoTypes.d.ts +30 -0
- package/dist/components/Modal/Modal.d.ts +0 -4
- package/dist/components/Notification/Notification.d.ts +2 -2
- package/dist/components/Placeholder/Placeholder.d.ts +3 -5
- package/dist/components/Radio/Radio.d.ts +6 -5
- package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
- package/dist/components/SearchBar/SearchBar.d.ts +10 -2
- package/dist/components/Select/Select.d.ts +3 -2
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
- package/dist/components/Slider/Slider.d.ts +3 -2
- package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
- package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
- package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
- package/dist/components/Table/Table.d.ts +23 -0
- package/dist/components/Template/Template.d.ts +8 -3
- package/dist/components/Text/Text.d.ts +2 -2
- package/dist/components/TextInput/TextInput.d.ts +4 -3
- package/dist/components/Toggle/Toggle.d.ts +3 -2
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
- package/dist/design-system-react-components.cjs.development.js +5630 -5692
- package/dist/design-system-react-components.cjs.development.js.map +1 -1
- package/dist/design-system-react-components.cjs.production.min.js +1 -1
- package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
- package/dist/design-system-react-components.esm.js +4304 -4362
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/styles.css +2 -2
- package/dist/theme/components/button.d.ts +0 -12
- package/dist/theme/components/card.d.ts +14 -2
- package/dist/theme/components/customTable.d.ts +47 -0
- package/dist/theme/components/fieldset.d.ts +2 -2
- package/dist/theme/components/global.d.ts +1 -1
- package/dist/theme/components/heading.d.ts +4 -0
- package/dist/theme/components/label.d.ts +1 -1
- package/dist/theme/components/link.d.ts +14 -1
- package/dist/theme/components/list.d.ts +0 -2
- package/dist/theme/components/logo.d.ts +4 -0
- package/dist/theme/components/searchBar.d.ts +7 -13
- package/dist/theme/components/select.d.ts +1 -0
- package/dist/theme/components/structuredContent.d.ts +33 -0
- package/dist/theme/components/template.d.ts +10 -10
- package/dist/theme/components/textInput.d.ts +2 -0
- package/dist/theme/components/toggle.d.ts +8 -5
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +1 -2
- package/src/__tests__/utils/utils.test.ts +23 -1
- package/src/components/Accordion/Accordion.stories.mdx +14 -12
- package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
- package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
- package/src/components/Autosuggest/_Autosuggest.scss +2 -6
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +30 -11
- package/src/components/Button/Button.stories.mdx +93 -48
- package/src/components/Button/Button.test.tsx +0 -12
- package/src/components/Button/Button.tsx +7 -7
- package/src/components/Button/ButtonTypes.tsx +0 -1
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
- package/src/components/Card/Card.stories.mdx +186 -71
- package/src/components/Card/Card.test.tsx +45 -22
- package/src/components/Card/Card.tsx +17 -5
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +8 -2
- package/src/components/Chakra/Box.stories.mdx +3 -3
- package/src/components/Chakra/Center.stories.mdx +5 -5
- package/src/components/Chakra/Grid.stories.mdx +3 -3
- package/src/components/Chakra/Stack.stories.mdx +2 -2
- package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
- package/src/components/Checkbox/Checkbox.tsx +13 -8
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
- package/src/components/DatePicker/DatePicker.tsx +10 -6
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +36 -18
- package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
- package/src/components/Form/Form.stories.mdx +49 -41
- package/src/components/Form/Form.tsx +5 -4
- package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
- package/src/components/Heading/Heading.stories.mdx +59 -23
- package/src/components/Heading/Heading.test.tsx +82 -18
- package/src/components/Heading/Heading.tsx +31 -31
- package/src/components/Heading/HeadingTypes.tsx +6 -6
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
- package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
- package/src/components/Hero/Hero.stories.mdx +72 -53
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
- package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
- package/src/components/Icons/Icon.stories.mdx +77 -76
- package/src/components/Icons/Icon.tsx +4 -5
- package/src/components/Icons/IconSvgs.tsx +0 -42
- package/src/components/Icons/IconTypes.tsx +0 -24
- package/src/components/Image/Image.stories.mdx +66 -18
- package/src/components/Image/Image.tsx +21 -10
- package/src/components/Label/Label.stories.mdx +20 -19
- package/src/components/Link/Link.stories.mdx +102 -51
- package/src/components/Link/Link.test.tsx +38 -8
- package/src/components/Link/Link.tsx +19 -12
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
- package/src/components/List/List.stories.mdx +36 -24
- package/src/components/Logo/Logo.stories.mdx +220 -0
- package/src/components/Logo/Logo.test.tsx +98 -0
- package/src/components/Logo/Logo.tsx +97 -0
- package/src/components/Logo/LogoSvgs.tsx +34 -0
- package/src/components/Logo/LogoTypes.tsx +32 -0
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
- package/src/components/Modal/Modal.stories.mdx +20 -5
- package/src/components/Modal/Modal.tsx +2 -8
- package/src/components/Notification/Notification.stories.mdx +61 -38
- package/src/components/Notification/Notification.tsx +9 -4
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
- package/src/components/Pagination/Pagination.stories.mdx +17 -6
- package/src/components/Pagination/Pagination.tsx +1 -1
- package/src/components/Placeholder/Placeholder.tsx +7 -14
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
- package/src/components/Radio/Radio.stories.mdx +39 -19
- package/src/components/Radio/Radio.tsx +13 -9
- package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
- package/src/components/RadioGroup/RadioGroup.tsx +15 -11
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
- package/src/components/SearchBar/SearchBar.Test.tsx +58 -10
- package/src/components/SearchBar/SearchBar.stories.mdx +109 -30
- package/src/components/SearchBar/SearchBar.tsx +53 -32
- package/src/components/Select/Select.stories.mdx +48 -14
- package/src/components/Select/Select.tsx +16 -10
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
- package/src/components/Slider/Slider.stories.mdx +72 -22
- package/src/components/Slider/Slider.tsx +15 -10
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
- package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
- package/src/components/StatusBadge/StatusBadge.tsx +2 -1
- package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
- package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
- package/src/components/StructuredContent/StructuredContent.tsx +153 -0
- package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
- package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
- package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
- package/src/components/StyleGuide/ColorCard.tsx +1 -2
- package/src/components/StyleGuide/Colors.stories.mdx +3 -11
- package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
- package/src/components/StyleGuide/Forms.stories.mdx +2 -10
- package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
- package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
- package/src/components/StyleGuide/Typography.stories.mdx +64 -76
- package/src/components/Table/Table.stories.mdx +66 -0
- package/src/components/Table/Table.test.tsx +60 -0
- package/src/components/Table/Table.tsx +116 -0
- package/src/components/Tabs/Tabs.stories.mdx +19 -13
- package/src/components/Tabs/Tabs.test.tsx +1 -1
- package/src/components/Template/Template.stories.mdx +56 -47
- package/src/components/Template/Template.test.tsx +65 -5
- package/src/components/Template/Template.tsx +35 -5
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
- package/src/components/Text/Text.stories.mdx +33 -11
- package/src/components/Text/Text.tsx +2 -2
- package/src/components/TextInput/TextInput.stories.mdx +84 -17
- package/src/components/TextInput/TextInput.test.tsx +96 -0
- package/src/components/TextInput/TextInput.tsx +12 -8
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
- package/src/components/Toggle/Toggle.stories.mdx +33 -9
- package/src/components/Toggle/Toggle.tsx +14 -9
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
- package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
- package/src/docs/Chakra.stories.mdx +5 -8
- package/src/docs/Intro.stories.mdx +2 -2
- package/src/index.ts +5 -4
- package/src/styles/base/_03-base.scss +1 -1
- package/src/styles/base/_place-holder.scss +7 -7
- package/src/styles.scss +1 -5
- package/src/theme/components/breadcrumb.ts +3 -3
- package/src/theme/components/button.ts +5 -12
- package/src/theme/components/card.ts +5 -2
- package/src/theme/components/checkbox.ts +1 -1
- package/src/theme/components/customTable.ts +50 -0
- package/src/theme/components/datePicker.ts +1 -1
- package/src/theme/components/global.ts +6 -6
- package/src/theme/components/heading.ts +13 -11
- package/src/theme/components/helperErrorText.ts +1 -1
- package/src/theme/components/image.ts +1 -1
- package/src/theme/components/link.ts +17 -5
- package/src/theme/components/list.ts +1 -3
- package/src/theme/components/logo.ts +54 -0
- package/src/theme/components/notification.ts +1 -1
- package/src/theme/components/searchBar.ts +7 -13
- package/src/theme/components/select.ts +1 -0
- package/src/theme/components/statusBadge.ts +1 -1
- package/src/theme/components/structuredContent.ts +54 -0
- package/src/theme/components/template.ts +10 -10
- package/src/theme/components/text.ts +6 -6
- package/src/theme/components/textInput.ts +1 -0
- package/src/theme/components/toggle.ts +9 -5
- package/src/theme/components/videoPlayer.ts +0 -2
- package/src/theme/foundations/global.ts +2 -2
- package/src/theme/foundations/typography.ts +84 -12
- package/src/theme/index.ts +6 -0
- package/src/utils/componentCategories.ts +1 -1
- package/src/utils/utils.ts +17 -0
- package/dist/__tests__/utils/bem.test.d.ts +0 -1
- package/dist/components/CardEdition/CardEdition.d.ts +0 -21
- package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
- package/dist/components/Input/Input.d.ts +0 -36
- package/dist/components/Input/Input.stories.d.ts +0 -29
- package/dist/components/Input/InputTypes.d.ts +0 -6
- package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
- package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
- package/dist/helpers/getCSSVariable.d.ts +0 -1
- package/dist/interfaces.d.ts +0 -3
- package/dist/utils/bem.d.ts +0 -1
- package/src/__tests__/utils/bem.test.ts +0 -37
- package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
- package/src/components/CardEdition/CardEdition.test.tsx +0 -395
- package/src/components/CardEdition/CardEdition.tsx +0 -60
- package/src/components/CardEdition/_CardEdition.scss +0 -137
- package/src/components/Input/Input.stories.tsx +0 -133
- package/src/components/Input/Input.test.tsx +0 -266
- package/src/components/Input/Input.tsx +0 -81
- package/src/components/Input/InputTypes.tsx +0 -8
- package/src/components/Input/_Input.scss +0 -78
- package/src/components/StyleGuide/UIDocCard.tsx +0 -36
- package/src/helpers/CSSVariablesHelper.tsx +0 -34
- package/src/helpers/getCSSVariable.tsx +0 -5
- package/src/interfaces.ts +0 -3
- 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
|
-
|
|
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
|
|
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
|
|
19
|
-
import
|
|
20
|
-
import
|
|
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
|
|
25
|
-
import
|
|
26
|
-
import
|
|
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
|
-
|
|
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
|
-
/**
|
|
58
|
-
export default function Form(props: React.
|
|
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
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
},
|
|
56
|
-
},
|
|
47
|
+
control: { type: "select" },
|
|
48
|
+
options: enumValues.options,
|
|
49
|
+
table: { defaultValue: { summary: "GridGaps.Large" } },
|
|
57
50
|
},
|
|
58
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
3
|
+
Canvas,
|
|
7
4
|
Description,
|
|
8
|
-
|
|
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: {
|
|
29
|
-
className: {
|
|
30
|
-
|
|
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.
|
|
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
|
|
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
|
|
66
|
+
name="Heading with Controls"
|
|
48
67
|
args={{
|
|
49
|
-
|
|
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) =>
|
|
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
|
|
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("
|
|
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
|
-
|
|
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("
|
|
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("
|
|
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("
|
|
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("
|
|
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("
|
|
88
|
-
expect(() =>
|
|
89
|
-
|
|
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("
|
|
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("
|
|
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
|
});
|