@nypl/design-system-react-components 0.25.8 → 0.25.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +110 -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 +4 -3
- package/dist/components/Fieldset/Fieldset.d.ts +1 -3
- package/dist/components/Form/Form.d.ts +15 -14
- package/dist/components/Form/FormTypes.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 +3 -3
- 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/List/List.d.ts +1 -1
- package/dist/components/Logo/Logo.d.ts +28 -0
- package/dist/components/Logo/LogoSvgs.d.ts +34 -0
- package/dist/components/Logo/LogoTypes.d.ts +46 -0
- package/dist/components/Modal/Modal.d.ts +0 -4
- package/dist/components/Notification/Notification.d.ts +4 -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 +6 -5
- package/dist/components/SearchBar/SearchBar.d.ts +15 -7
- package/dist/components/Select/Select.d.ts +7 -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 +29 -0
- package/dist/components/Template/Template.d.ts +30 -6
- 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 +6721 -5777
- 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 +6774 -5839
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +10 -8
- package/dist/resources.scss +0 -2
- package/dist/styles.css +2 -2
- package/dist/theme/components/breadcrumb.d.ts +1 -1
- 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 +56 -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/notification.d.ts +13 -4
- package/dist/theme/components/searchBar.d.ts +9 -11
- 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 +4 -0
- package/dist/theme/components/toggle.d.ts +8 -5
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +40 -37
- package/src/__tests__/utils/utils.test.ts +23 -1
- package/src/components/Accordion/Accordion.stories.mdx +15 -13
- package/src/components/Accordion/Accordion.test.tsx +45 -1
- package/src/components/Accordion/Accordion.tsx +20 -8
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
- 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 +43 -13
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +15 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +5 -5
- 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 +21 -6
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +9 -3
- package/src/components/Chakra/Box.stories.mdx +3 -3
- package/src/components/Chakra/Center.stories.mdx +5 -5
- package/src/components/Chakra/Flex.stories.mdx +113 -0
- 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.test.tsx +6 -6
- package/src/components/DatePicker/DatePicker.tsx +17 -11
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +50 -24
- package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
- package/src/components/Fieldset/Fieldset.tsx +2 -4
- package/src/components/Form/Form.stories.mdx +75 -49
- package/src/components/Form/Form.test.tsx +92 -3
- package/src/components/Form/Form.tsx +28 -23
- package/src/components/Form/FormTypes.tsx +2 -2
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
- 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 +11 -9
- package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
- package/src/components/Icons/Icon.stories.mdx +78 -77
- package/src/components/Icons/Icon.test.tsx +1 -1
- package/src/components/Icons/Icon.tsx +5 -6
- 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 +60 -29
- package/src/components/List/List.test.tsx +1 -1
- package/src/components/List/List.tsx +2 -2
- package/src/components/List/__snapshots__/List.test.tsx.snap +3 -1
- package/src/components/Logo/Logo.stories.mdx +222 -0
- package/src/components/Logo/Logo.test.tsx +98 -0
- package/src/components/Logo/Logo.tsx +97 -0
- package/src/components/Logo/LogoSvgs.tsx +66 -0
- package/src/components/Logo/LogoTypes.tsx +48 -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 +128 -38
- package/src/components/Notification/Notification.test.tsx +49 -1
- package/src/components/Notification/Notification.tsx +25 -12
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
- package/src/components/Pagination/Pagination.stories.mdx +18 -7
- package/src/components/Pagination/Pagination.tsx +3 -3
- 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/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
- package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
- package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
- package/src/components/RadioGroup/RadioGroup.tsx +97 -94
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
- package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
- package/src/components/SearchBar/SearchBar.stories.mdx +115 -33
- package/src/components/SearchBar/SearchBar.tsx +72 -51
- package/src/components/Select/Select.stories.mdx +48 -14
- package/src/components/Select/Select.test.tsx +89 -0
- package/src/components/Select/Select.tsx +27 -12
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
- 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 +67 -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 +165 -0
- package/src/components/Table/Table.test.tsx +137 -0
- package/src/components/Table/Table.tsx +126 -0
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
- package/src/components/Tabs/Tabs.stories.mdx +20 -14
- package/src/components/Tabs/Tabs.test.tsx +21 -5
- package/src/components/Tabs/Tabs.tsx +35 -20
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
- package/src/components/Template/Template.stories.mdx +132 -48
- package/src/components/Template/Template.test.tsx +128 -6
- package/src/components/Template/Template.tsx +93 -13
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -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/Toggle/__snapshots__/Toggle.test.tsx.snap +4 -4
- 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 +13 -6
- 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 +4 -4
- 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 +63 -0
- package/src/theme/components/datePicker.ts +1 -1
- package/src/theme/components/global.ts +7 -7
- 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 +3 -5
- package/src/theme/components/logo.ts +54 -0
- package/src/theme/components/notification.ts +19 -9
- package/src/theme/components/searchBar.ts +11 -13
- package/src/theme/components/select.ts +1 -0
- package/src/theme/components/statusBadge.ts +1 -1
- package/src/theme/components/structuredContent.ts +74 -0
- package/src/theme/components/template.ts +10 -10
- package/src/theme/components/text.ts +6 -6
- package/src/theme/components/textInput.ts +2 -0
- package/src/theme/components/toggle.ts +10 -6
- 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 +2 -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,11 +1,11 @@
|
|
|
1
|
+
import { Box } from "@chakra-ui/react";
|
|
1
2
|
import {
|
|
2
|
-
Meta,
|
|
3
|
-
Story,
|
|
4
|
-
Canvas,
|
|
5
3
|
ArgsTable,
|
|
4
|
+
Canvas,
|
|
6
5
|
Description,
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
Meta,
|
|
7
|
+
Story,
|
|
8
|
+
} from "@storybook/addon-docs";
|
|
9
9
|
|
|
10
10
|
import Label from "./Label";
|
|
11
11
|
import { getCategory } from "../../utils/componentCategories";
|
|
@@ -17,8 +17,15 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
17
17
|
jest: ["Label.test.tsx"],
|
|
18
18
|
}}
|
|
19
19
|
argTypes={{
|
|
20
|
-
className: {
|
|
21
|
-
id: {
|
|
20
|
+
className: { control: false },
|
|
21
|
+
id: { control: false },
|
|
22
|
+
optReqFlag: {
|
|
23
|
+
control: { type: "select" },
|
|
24
|
+
options: ["Required", "Optional", ""],
|
|
25
|
+
},
|
|
26
|
+
text: {
|
|
27
|
+
description: "Only used for Storybook",
|
|
28
|
+
},
|
|
22
29
|
}}
|
|
23
30
|
/>
|
|
24
31
|
|
|
@@ -33,26 +40,20 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
33
40
|
|
|
34
41
|
<Canvas>
|
|
35
42
|
<Story
|
|
36
|
-
name="Label"
|
|
43
|
+
name="Label with Controls"
|
|
37
44
|
args={{
|
|
38
|
-
|
|
39
|
-
optReqFlag: "Required",
|
|
45
|
+
className: undefined,
|
|
40
46
|
htmlFor: "id-of-input-element",
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
control: {
|
|
45
|
-
type: "select",
|
|
46
|
-
},
|
|
47
|
-
options: ["Required", "Optional", ""],
|
|
48
|
-
},
|
|
47
|
+
id: "label-id",
|
|
48
|
+
optReqFlag: "Required",
|
|
49
|
+
text: "A label for a villager.",
|
|
49
50
|
}}
|
|
50
51
|
>
|
|
51
52
|
{(args) => <Label {...args}>{args.text}</Label>}
|
|
52
53
|
</Story>
|
|
53
54
|
</Canvas>
|
|
54
55
|
|
|
55
|
-
<ArgsTable story="Label" />
|
|
56
|
+
<ArgsTable story="Label with Controls" />
|
|
56
57
|
|
|
57
58
|
## Required/Optional helper text
|
|
58
59
|
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
+
import { VStack } from "@chakra-ui/react";
|
|
1
2
|
import {
|
|
2
|
-
Meta,
|
|
3
|
-
Story,
|
|
4
|
-
Canvas,
|
|
5
3
|
ArgsTable,
|
|
4
|
+
Canvas,
|
|
6
5
|
Description,
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
Meta,
|
|
7
|
+
Story,
|
|
8
|
+
} from "@storybook/addon-docs";
|
|
9
9
|
import {
|
|
10
10
|
BrowserRouter as Router,
|
|
11
11
|
Link as ReactRouterLink,
|
|
12
12
|
} from "react-router-dom";
|
|
13
|
-
import {
|
|
13
|
+
import { withDesign } from "storybook-addon-designs";
|
|
14
14
|
|
|
15
15
|
import Link from "./Link";
|
|
16
16
|
import { LinkTypes } from "./LinkTypes";
|
|
17
17
|
import Icon from "../Icons/Icon";
|
|
18
|
-
import { IconAlign, IconSizes } from "../Icons/IconTypes";
|
|
18
|
+
import { IconAlign, IconNames, IconSizes } from "../Icons/IconTypes";
|
|
19
19
|
import { getCategory } from "../../utils/componentCategories";
|
|
20
20
|
import DSProvider from "../../theme/provider";
|
|
21
|
+
import { getStorybookEnumValues } from "../../utils/utils";
|
|
22
|
+
|
|
23
|
+
export const enumValues = getStorybookEnumValues(LinkTypes, "LinkTypes");
|
|
21
24
|
|
|
22
25
|
<Meta
|
|
23
26
|
title={getCategory("Link")}
|
|
@@ -31,13 +34,15 @@ import DSProvider from "../../theme/provider";
|
|
|
31
34
|
jest: ["Link.test.tsx"],
|
|
32
35
|
}}
|
|
33
36
|
argTypes={{
|
|
34
|
-
|
|
37
|
+
additionalStyles: { control: false },
|
|
38
|
+
attributes: { control: false },
|
|
35
39
|
children: { table: { disable: true } },
|
|
40
|
+
key: { table: { disable: true } },
|
|
41
|
+
ref: { table: { disable: true } },
|
|
36
42
|
type: {
|
|
37
|
-
control: {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
options: LinkTypes,
|
|
43
|
+
control: { type: "select" },
|
|
44
|
+
table: { defaultValue: { summary: "LinkTypes.Default" } },
|
|
45
|
+
options: enumValues.options,
|
|
41
46
|
},
|
|
42
47
|
}}
|
|
43
48
|
/>
|
|
@@ -47,29 +52,34 @@ import DSProvider from "../../theme/provider";
|
|
|
47
52
|
| Component Version | DS Version |
|
|
48
53
|
| ----------------- | ---------- |
|
|
49
54
|
| Added | `0.0.4` |
|
|
50
|
-
| Latest | `0.25.
|
|
55
|
+
| Latest | `0.25.9` |
|
|
51
56
|
|
|
52
57
|
<Description of={Link} />
|
|
53
58
|
|
|
54
59
|
<Canvas withToolbar>
|
|
55
60
|
<Story
|
|
56
|
-
name="
|
|
61
|
+
name="Link with Controls"
|
|
57
62
|
args={{
|
|
58
|
-
|
|
59
|
-
type: LinkTypes.Action,
|
|
60
|
-
href: "https://nypl.org",
|
|
61
|
-
className: "custom-class",
|
|
63
|
+
additionalStyles: undefined,
|
|
62
64
|
attributes: {
|
|
63
65
|
rel: "nofollow",
|
|
64
66
|
onClick: (e) => e.preventDefault(),
|
|
65
67
|
},
|
|
68
|
+
className: "custom-class",
|
|
69
|
+
href: "https://nypl.org",
|
|
70
|
+
id: "nypl-link",
|
|
71
|
+
type: "LinkTypes.Action",
|
|
66
72
|
}}
|
|
67
73
|
>
|
|
68
|
-
{(args) =>
|
|
74
|
+
{(args) => (
|
|
75
|
+
<Link {...args} type={enumValues.getValue(args.type)}>
|
|
76
|
+
Link
|
|
77
|
+
</Link>
|
|
78
|
+
)}
|
|
69
79
|
</Story>
|
|
70
80
|
</Canvas>
|
|
71
81
|
|
|
72
|
-
<ArgsTable story="
|
|
82
|
+
<ArgsTable story="Link with Controls" />
|
|
73
83
|
|
|
74
84
|
## Links With Icons
|
|
75
85
|
|
|
@@ -89,12 +99,20 @@ links with icons. Icons can be rendered to the left or right of the link text.
|
|
|
89
99
|
Clock Link
|
|
90
100
|
</Link>
|
|
91
101
|
<Link type={LinkTypes.Action} href="#passed-in-link">
|
|
92
|
-
<Icon
|
|
102
|
+
<Icon
|
|
103
|
+
name={IconNames.Check}
|
|
104
|
+
align={IconAlign.Left}
|
|
105
|
+
size={IconSizes.Small}
|
|
106
|
+
/>
|
|
93
107
|
Check Link
|
|
94
108
|
</Link>
|
|
95
109
|
<Link type={LinkTypes.Action} href="#passed-in-link-right">
|
|
96
110
|
Check Link Right
|
|
97
|
-
<Icon
|
|
111
|
+
<Icon
|
|
112
|
+
name={IconNames.Check}
|
|
113
|
+
align={IconAlign.Right}
|
|
114
|
+
size={IconSizes.Small}
|
|
115
|
+
/>
|
|
98
116
|
</Link>
|
|
99
117
|
</VStack>
|
|
100
118
|
</Story>
|
|
@@ -102,8 +120,29 @@ links with icons. Icons can be rendered to the left or right of the link text.
|
|
|
102
120
|
|
|
103
121
|
## Anchor Element Rendering
|
|
104
122
|
|
|
105
|
-
`Link` can wrap an existing `<a>`
|
|
106
|
-
an `<a>`
|
|
123
|
+
`Link` can wrap an existing `<a>` element (and `Icon` component) or it
|
|
124
|
+
can use the `href` prop to generate an `<a>` element.
|
|
125
|
+
|
|
126
|
+
```jsx
|
|
127
|
+
// Existing anchor element
|
|
128
|
+
<Link type={LinkTypes.Action}>
|
|
129
|
+
<a href="#existing-anchor-tag">link</a>
|
|
130
|
+
</Link>
|
|
131
|
+
|
|
132
|
+
// Also works with an icon component. Make sure to wrap the icon and anchor
|
|
133
|
+
// in a single element for this pattern.
|
|
134
|
+
<Link type={LinkTypes.Action}>
|
|
135
|
+
<>
|
|
136
|
+
<Icon name={IconNames.Check} align={IconAlign.Left} size={IconSizes.Small} />
|
|
137
|
+
<a href="#existing-anchor-tag">check link</a>
|
|
138
|
+
</>
|
|
139
|
+
</Link>
|
|
140
|
+
|
|
141
|
+
// Otherwise, the `href` prop will generate an `<a>` tag.
|
|
142
|
+
<Link type={LinkTypes.Action} href="#passed-in-link">
|
|
143
|
+
link
|
|
144
|
+
</Link>
|
|
145
|
+
```
|
|
107
146
|
|
|
108
147
|
<Canvas>
|
|
109
148
|
<Story name="Anchor Element Rendering">
|
|
@@ -112,11 +151,23 @@ an `<a>` tag.
|
|
|
112
151
|
<Link type={LinkTypes.Action}>
|
|
113
152
|
<a href="#existing-anchor-tag">link</a>
|
|
114
153
|
</Link>{" "}
|
|
115
|
-
with the <a>
|
|
154
|
+
with the <a> element as a child of the `Link` component. This is a{" "}
|
|
116
155
|
<Link type={LinkTypes.Action} href="#passed-in-link">
|
|
117
156
|
link
|
|
118
157
|
</Link>{" "}
|
|
119
|
-
where the Link component uses the `href` prop and has a string-only
|
|
158
|
+
where the `Link` component uses the `href` prop and has a string-only
|
|
159
|
+
child. Finally, this is a{" "}
|
|
160
|
+
<Link type={LinkTypes.Action}>
|
|
161
|
+
<>
|
|
162
|
+
<Icon
|
|
163
|
+
name={IconNames.Check}
|
|
164
|
+
align={IconAlign.Left}
|
|
165
|
+
size={IconSizes.Small}
|
|
166
|
+
/>
|
|
167
|
+
<a href="#existing-anchor-tag">link</a>
|
|
168
|
+
</>
|
|
169
|
+
</Link>{" "}
|
|
170
|
+
with a check icon.
|
|
120
171
|
</>
|
|
121
172
|
</Story>
|
|
122
173
|
</Canvas>
|
|
@@ -144,9 +195,11 @@ an `<a>` tag.
|
|
|
144
195
|
|
|
145
196
|
The Design System's `Link` component should wrap around `react-router`'s own
|
|
146
197
|
`Link` component. To avoid name conflicts, rename either the Design System's
|
|
147
|
-
or `react-router`'s `Link` component.
|
|
198
|
+
or `react-router`'s `Link` component. Any of the following patterns are valid.
|
|
148
199
|
|
|
149
200
|
```jsx
|
|
201
|
+
// In this first example, React Router's `Link` component
|
|
202
|
+
// is renamed as `ReactRouterLink`.
|
|
150
203
|
import {
|
|
151
204
|
BrowserRouter as Router,
|
|
152
205
|
Link as ReactRouterLink,
|
|
@@ -157,8 +210,9 @@ import { Link, LinkTypes } from "@nypl/design-system-react-components";
|
|
|
157
210
|
<ReactRouterLink to="#">Next Page</ReactRouterLink>
|
|
158
211
|
</Link>;
|
|
159
212
|
|
|
160
|
-
//
|
|
161
|
-
|
|
213
|
+
// In this second example, React Router's `Link` component
|
|
214
|
+
// is not renamed but the DS's `Link` component is renamed
|
|
215
|
+
// to `DSLink`.
|
|
162
216
|
import { BrowserRouter, Link } from "react-router-dom";
|
|
163
217
|
import {
|
|
164
218
|
Link as DSLink,
|
|
@@ -169,8 +223,9 @@ import {
|
|
|
169
223
|
<Link to="#">Next Page</Link>
|
|
170
224
|
</DSLink>;
|
|
171
225
|
|
|
172
|
-
//
|
|
173
|
-
|
|
226
|
+
// In this third example, React Router's `Link` component
|
|
227
|
+
// is not renamed and the DS's `Link` component is
|
|
228
|
+
// imported and rendered as `DS.Link`.
|
|
174
229
|
import { BrowserRouter, Link } from "react-router-dom";
|
|
175
230
|
import DS from "@nypl/design-system-react-components";
|
|
176
231
|
|
|
@@ -200,34 +255,30 @@ pages in a NextJS app.
|
|
|
200
255
|
```jsx
|
|
201
256
|
import { Link, LinkTypes } from "@nypl/design-system-react-components";
|
|
202
257
|
|
|
203
|
-
|
|
258
|
+
/**
|
|
259
|
+
* This is just an example wrapper that works similarly to NextJS' `Link`
|
|
204
260
|
* component. In real life, NextJS's `Link` component will pass down the
|
|
205
261
|
* `href` and `passHref` props and a `ref` to make routing functional.
|
|
206
262
|
*/
|
|
207
|
-
export const NextJsLink = (props: HTMLAnchorElement) =>
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
);
|
|
216
|
-
|
|
263
|
+
export const NextJsLink = (props: HTMLAnchorElement) =>
|
|
264
|
+
React.cloneElement(
|
|
265
|
+
props.children,
|
|
266
|
+
{ ...props },
|
|
267
|
+
props.children.props.children
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
// Note that NextJS' `href` and `passHref` props are required.
|
|
217
271
|
<NextJsLink href="#" passHref>
|
|
218
272
|
<Link type={LinkTypes.Action}>Next Page</Link>
|
|
219
273
|
</NextJsLink>;
|
|
220
274
|
```
|
|
221
275
|
|
|
222
|
-
export const NextJsLink = (props) =>
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
)}
|
|
229
|
-
</div>
|
|
230
|
-
);
|
|
276
|
+
export const NextJsLink = (props) =>
|
|
277
|
+
React.cloneElement(
|
|
278
|
+
props.children,
|
|
279
|
+
{ ...props },
|
|
280
|
+
props.children.props.children
|
|
281
|
+
);
|
|
231
282
|
|
|
232
283
|
<Canvas>
|
|
233
284
|
<DSProvider>
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import { render, screen } from "@testing-library/react";
|
|
3
2
|
import { axe } from "jest-axe";
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
import Link from "./Link";
|
|
7
|
-
import { LinkTypes } from "./LinkTypes";
|
|
3
|
+
import * as React from "react";
|
|
8
4
|
import {
|
|
9
5
|
BrowserRouter as Router,
|
|
10
6
|
Link as ReactRouterLink,
|
|
11
7
|
} from "react-router-dom";
|
|
8
|
+
import renderer from "react-test-renderer";
|
|
9
|
+
|
|
10
|
+
import Link from "./Link";
|
|
11
|
+
import { LinkTypes } from "./LinkTypes";
|
|
12
12
|
import Icon from "../Icons/Icon";
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
IconAlign,
|
|
15
|
+
IconNames,
|
|
16
|
+
IconRotationTypes,
|
|
17
|
+
IconSizes,
|
|
18
|
+
} from "../Icons/IconTypes";
|
|
14
19
|
|
|
15
20
|
describe("Link Accessibility", () => {
|
|
16
21
|
it("passes axe accessibility test for children component", async () => {
|
|
@@ -121,11 +126,11 @@ describe("Link", () => {
|
|
|
121
126
|
|
|
122
127
|
it("throws an error if text is passed but no url is passed", () => {
|
|
123
128
|
expect(() => render(<Link>Test</Link>)).toThrowError(
|
|
124
|
-
"Link needs
|
|
129
|
+
"`Link` needs the `href` prop."
|
|
125
130
|
);
|
|
126
131
|
});
|
|
127
132
|
|
|
128
|
-
it("throws an error if more than one child is passed", () => {
|
|
133
|
+
it("throws an error if more than one child element is passed", () => {
|
|
129
134
|
expect(() =>
|
|
130
135
|
render(
|
|
131
136
|
<Link>
|
|
@@ -202,12 +207,37 @@ describe("Link", () => {
|
|
|
202
207
|
</Link>
|
|
203
208
|
)
|
|
204
209
|
.toJSON();
|
|
210
|
+
const withAchorChild = renderer
|
|
211
|
+
.create(
|
|
212
|
+
<Link id="anchor-link" type={LinkTypes.Action}>
|
|
213
|
+
<a href="#existing-anchor-tag">check link</a>
|
|
214
|
+
</Link>
|
|
215
|
+
)
|
|
216
|
+
.toJSON();
|
|
217
|
+
const withAchorChildAndIcon = renderer
|
|
218
|
+
.create(
|
|
219
|
+
<Link id="anchor-icon-link" type={LinkTypes.Action}>
|
|
220
|
+
<>
|
|
221
|
+
<Icon
|
|
222
|
+
align={IconAlign.Left}
|
|
223
|
+
id="link-icon"
|
|
224
|
+
name={IconNames.Check}
|
|
225
|
+
size={IconSizes.Small}
|
|
226
|
+
/>
|
|
227
|
+
<a href="#existing-anchor-tag">check link</a>
|
|
228
|
+
</>
|
|
229
|
+
</Link>
|
|
230
|
+
)
|
|
231
|
+
.toJSON();
|
|
232
|
+
|
|
205
233
|
expect(standard).toMatchSnapshot();
|
|
206
234
|
expect(typeForwards).toMatchSnapshot();
|
|
207
235
|
expect(typeBackwards).toMatchSnapshot();
|
|
208
236
|
expect(typeExternal).toMatchSnapshot();
|
|
209
237
|
expect(typeButton).toMatchSnapshot();
|
|
210
238
|
expect(withIconChild).toMatchSnapshot();
|
|
239
|
+
expect(withAchorChild).toMatchSnapshot();
|
|
240
|
+
expect(withAchorChildAndIcon).toMatchSnapshot();
|
|
211
241
|
});
|
|
212
242
|
|
|
213
243
|
// TODO:
|
|
@@ -109,7 +109,7 @@ const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
|
|
|
109
109
|
let variant = "link";
|
|
110
110
|
|
|
111
111
|
if (typeof children === "string" && !href) {
|
|
112
|
-
throw new Error("Link needs
|
|
112
|
+
throw new Error("`Link` needs the `href` prop.");
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
if (
|
|
@@ -144,17 +144,24 @@ const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
|
|
|
144
144
|
}
|
|
145
145
|
const childrenToClone: any = children[0] ? children[0] : children;
|
|
146
146
|
const childProps = childrenToClone.props;
|
|
147
|
-
return
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
147
|
+
return (
|
|
148
|
+
<Box as="span" __css={style}>
|
|
149
|
+
{React.cloneElement(
|
|
150
|
+
childrenToClone,
|
|
151
|
+
{
|
|
152
|
+
className,
|
|
153
|
+
...linkProps,
|
|
154
|
+
...childProps,
|
|
155
|
+
ref,
|
|
156
|
+
rel,
|
|
157
|
+
target,
|
|
158
|
+
// Useful if more styles are needed for the custom
|
|
159
|
+
// anchor element or link component.
|
|
160
|
+
style: additionalStyles,
|
|
161
|
+
},
|
|
162
|
+
[childrenToClone.props.children]
|
|
163
|
+
)}
|
|
164
|
+
</Box>
|
|
158
165
|
);
|
|
159
166
|
} else {
|
|
160
167
|
return (
|
|
@@ -199,3 +199,63 @@ exports[`Link renders the UI snapshot correctly 6`] = `
|
|
|
199
199
|
Download
|
|
200
200
|
</a>
|
|
201
201
|
`;
|
|
202
|
+
|
|
203
|
+
exports[`Link renders the UI snapshot correctly 7`] = `
|
|
204
|
+
<span
|
|
205
|
+
className="css-0"
|
|
206
|
+
>
|
|
207
|
+
<a
|
|
208
|
+
href="#existing-anchor-tag"
|
|
209
|
+
id="anchor-link"
|
|
210
|
+
rel={null}
|
|
211
|
+
style={Object {}}
|
|
212
|
+
target={null}
|
|
213
|
+
>
|
|
214
|
+
check link
|
|
215
|
+
</a>
|
|
216
|
+
</span>
|
|
217
|
+
`;
|
|
218
|
+
|
|
219
|
+
exports[`Link renders the UI snapshot correctly 8`] = `
|
|
220
|
+
<span
|
|
221
|
+
className="css-0"
|
|
222
|
+
>
|
|
223
|
+
<svg
|
|
224
|
+
aria-hidden={true}
|
|
225
|
+
className="chakra-icon css-onkibi"
|
|
226
|
+
focusable={false}
|
|
227
|
+
id="link-icon"
|
|
228
|
+
role="img"
|
|
229
|
+
title="check icon"
|
|
230
|
+
viewBox="0 0 24 24"
|
|
231
|
+
>
|
|
232
|
+
<g
|
|
233
|
+
stroke="currentColor"
|
|
234
|
+
strokeWidth="1.5"
|
|
235
|
+
>
|
|
236
|
+
<path
|
|
237
|
+
d="M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"
|
|
238
|
+
fill="none"
|
|
239
|
+
strokeLinecap="round"
|
|
240
|
+
/>
|
|
241
|
+
<path
|
|
242
|
+
d="M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"
|
|
243
|
+
fill="currentColor"
|
|
244
|
+
strokeLinecap="round"
|
|
245
|
+
/>
|
|
246
|
+
<circle
|
|
247
|
+
cx="12"
|
|
248
|
+
cy="12"
|
|
249
|
+
fill="none"
|
|
250
|
+
r="11.25"
|
|
251
|
+
strokeMiterlimit="10"
|
|
252
|
+
/>
|
|
253
|
+
</g>
|
|
254
|
+
</svg>
|
|
255
|
+
<a
|
|
256
|
+
href="#existing-anchor-tag"
|
|
257
|
+
>
|
|
258
|
+
check link
|
|
259
|
+
</a>
|
|
260
|
+
</span>
|
|
261
|
+
`;
|