@nypl/design-system-react-components 0.25.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/dist/components/Accordion/Accordion.d.ts +14 -14
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
- package/dist/components/Button/ButtonTypes.d.ts +2 -1
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Card/CardTypes.d.ts +2 -2
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
- package/dist/components/DatePicker/DatePicker.d.ts +3 -3
- package/dist/components/Form/Form.d.ts +13 -8
- package/dist/components/Form/FormTypes.d.ts +2 -8
- package/dist/components/Grid/GridTypes.d.ts +9 -0
- package/dist/components/Grid/SimpleGrid.d.ts +14 -0
- package/dist/components/Heading/Heading.d.ts +4 -4
- package/dist/components/Hero/Hero.d.ts +19 -14
- package/dist/components/Hero/HeroTypes.d.ts +10 -5
- package/dist/components/Icons/Icon.d.ts +13 -16
- package/dist/components/Icons/IconTypes.d.ts +78 -64
- package/dist/components/Label/Label.d.ts +5 -17
- package/dist/components/Link/Link.d.ts +8 -12
- package/dist/components/SearchBar/SearchBar.d.ts +45 -27
- package/dist/components/Select/Select.d.ts +32 -35
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
- package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
- package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
- package/dist/components/Template/Template.d.ts +91 -0
- package/dist/components/Text/Text.d.ts +16 -0
- package/dist/components/Text/TextTypes.d.ts +6 -0
- package/dist/components/TextInput/TextInput.d.ts +32 -31
- package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
- package/dist/design-system-react-components.cjs.development.js +2597 -1170
- 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 +2580 -1173
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +25 -0
- package/dist/theme/components/breadcrumb.d.ts +90 -0
- package/dist/theme/components/button.d.ts +17 -7
- package/dist/theme/components/checkbox.d.ts +7 -7
- package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
- package/dist/theme/components/customRadioGroup.d.ts +4 -3
- package/dist/theme/components/global.d.ts +55 -0
- package/dist/theme/components/globalMixins.d.ts +15 -0
- package/dist/theme/components/heading.d.ts +50 -20
- package/dist/theme/components/hero.d.ts +492 -0
- package/dist/theme/components/icon.d.ts +13 -0
- package/dist/theme/components/label.d.ts +16 -0
- package/dist/theme/components/link.d.ts +45 -0
- package/dist/theme/components/radio.d.ts +8 -7
- package/dist/theme/components/searchBar.d.ts +20 -0
- package/dist/theme/components/select.d.ts +58 -0
- package/dist/theme/components/statusBadge.d.ts +25 -0
- package/dist/theme/components/tabs.d.ts +9 -9
- package/dist/theme/components/template.d.ts +105 -0
- package/dist/theme/components/text.d.ts +20 -0
- package/dist/theme/components/textInput.d.ts +105 -0
- package/dist/theme/foundations/global.d.ts +3 -0
- package/dist/theme/foundations/shadows.d.ts +4 -0
- package/dist/utils/utils.d.ts +6 -0
- package/package.json +3 -2
- package/src/components/Accordion/Accordion.stories.mdx +227 -33
- package/src/components/Accordion/Accordion.test.tsx +135 -19
- package/src/components/Accordion/Accordion.tsx +81 -56
- package/src/components/Autosuggest/Autosuggest.stories.mdx +1 -1
- package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
- package/src/components/Autosuggest/_Autosuggest.scss +2 -2
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +46 -52
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
- package/src/components/Button/Button.stories.mdx +31 -27
- package/src/components/Button/Button.test.tsx +17 -5
- package/src/components/Button/ButtonTypes.tsx +1 -0
- package/src/components/Button/_Button.scss +3 -27
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +11 -0
- package/src/components/Card/Card.stories.mdx +24 -20
- package/src/components/Card/Card.test.tsx +13 -19
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/Card/CardTypes.tsx +2 -2
- package/src/components/Card/_Card.scss +1 -1
- package/src/components/CardEdition/CardEdition.stories.tsx +11 -6
- package/src/components/CardEdition/CardEdition.test.tsx +23 -31
- package/src/components/CardEdition/_CardEdition.scss +2 -2
- package/src/components/Chakra/Center.stories.mdx +31 -14
- package/src/components/Chakra/Grid.stories.mdx +79 -0
- package/src/components/Chakra/Stack.stories.mdx +4 -4
- package/src/components/Checkbox/Checkbox.tsx +9 -12
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +2 -5
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
- package/src/components/DatePicker/DatePicker.test.tsx +4 -4
- package/src/components/DatePicker/DatePicker.tsx +13 -13
- package/src/components/DatePicker/_DatePicker.scss +1 -0
- package/src/components/Form/Form.stories.mdx +46 -21
- package/src/components/Form/Form.test.tsx +58 -45
- package/src/components/Form/Form.tsx +49 -21
- package/src/components/Form/FormTypes.tsx +3 -8
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
- package/src/components/Grid/GridTypes.tsx +9 -0
- package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
- package/src/components/Grid/SimpleGrid.test.tsx +66 -0
- package/src/components/Grid/SimpleGrid.tsx +37 -0
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
- package/src/components/Heading/Heading.stories.mdx +1 -0
- package/src/components/Heading/Heading.tsx +12 -6
- package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
- package/src/components/Hero/Hero.stories.mdx +188 -121
- package/src/components/Hero/Hero.test.tsx +537 -107
- package/src/components/Hero/Hero.tsx +79 -92
- package/src/components/Hero/HeroTypes.tsx +17 -5
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
- package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
- package/src/components/Icons/Icon.stories.mdx +83 -74
- package/src/components/Icons/Icon.test.tsx +30 -22
- package/src/components/Icons/Icon.tsx +63 -61
- package/src/components/Icons/IconTypes.tsx +80 -64
- package/src/components/Input/_Input.scss +2 -2
- package/src/components/Label/Label.stories.mdx +28 -7
- package/src/components/Label/Label.test.tsx +43 -12
- package/src/components/Label/Label.tsx +21 -34
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
- package/src/components/Link/Link.stories.mdx +41 -41
- package/src/components/Link/Link.test.tsx +33 -44
- package/src/components/Link/Link.tsx +114 -100
- package/src/components/List/List.stories.mdx +0 -2
- package/src/components/List/List.stories.tsx +5 -5
- package/src/components/List/_List.scss +3 -3
- package/src/components/Modal/_Modal.scss +1 -1
- package/src/components/Notification/Notification.stories.mdx +12 -1
- package/src/components/Notification/Notification.test.tsx +3 -16
- package/src/components/Notification/Notification.tsx +9 -10
- package/src/components/Notification/_Notification.scss +4 -4
- package/src/components/Pagination/Pagination.test.tsx +16 -10
- package/src/components/RadioGroup/RadioGroup.stories.mdx +1 -1
- package/src/components/RadioGroup/RadioGroup.tsx +2 -10
- package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
- package/src/components/SearchBar/SearchBar.stories.mdx +189 -219
- package/src/components/SearchBar/SearchBar.tsx +151 -46
- package/src/components/Select/Select.stories.mdx +188 -170
- package/src/components/Select/Select.test.tsx +125 -380
- package/src/components/Select/Select.tsx +118 -165
- package/src/components/Select/SelectTypes.tsx +4 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +13 -25
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
- package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
- package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
- package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
- package/src/components/StatusBadge/StatusBadge.tsx +24 -25
- package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +16 -16
- package/src/components/StyleGuide/Buttons.stories.mdx +15 -15
- package/src/components/StyleGuide/Colors.stories.mdx +336 -0
- package/src/components/StyleGuide/Iconography.stories.mdx +88 -90
- package/src/components/StyleGuide/UIDocCard.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +7 -9
- package/src/components/Template/Template.stories.mdx +574 -0
- package/src/components/Template/Template.test.tsx +124 -0
- package/src/components/Template/Template.tsx +226 -0
- package/src/components/Text/Text.stories.mdx +70 -0
- package/src/components/Text/Text.test.tsx +63 -0
- package/src/components/Text/Text.tsx +55 -0
- package/src/components/Text/TextTypes.tsx +6 -0
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
- package/src/components/TextInput/TextInput.stories.mdx +89 -90
- package/src/components/TextInput/TextInput.test.tsx +65 -86
- package/src/components/TextInput/TextInput.tsx +101 -95
- package/src/components/TextInput/TextInputTypes.tsx +6 -0
- package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
- package/src/docs/Chakra.stories.mdx +4 -4
- package/src/docs/Intro.stories.mdx +15 -13
- package/src/index.ts +20 -0
- package/src/styles/01-colors/_colors-brand.scss +6 -0
- package/src/styles/01-colors/_colors-utility.scss +14 -12
- package/src/styles/base/_04-base.scss +2 -1
- package/src/styles/base/_place-holder.scss +1 -1
- package/src/styles.scss +10 -12
- package/src/theme/components/accordion.ts +30 -0
- package/src/theme/components/breadcrumb.ts +77 -0
- package/src/theme/components/button.ts +77 -63
- package/src/theme/components/checkbox.ts +15 -27
- package/src/theme/components/customCheckboxGroup.ts +12 -0
- package/src/theme/components/customRadioGroup.ts +4 -10
- package/src/theme/components/global.ts +71 -0
- package/src/theme/components/globalMixins.ts +16 -0
- package/src/theme/components/heading.ts +15 -8
- package/src/theme/components/hero.ts +239 -0
- package/src/theme/components/icon.ts +79 -0
- package/src/theme/components/label.ts +17 -0
- package/src/theme/components/link.ts +47 -0
- package/src/theme/components/radio.ts +20 -31
- package/src/theme/components/searchBar.ts +21 -0
- package/src/theme/components/select.ts +50 -0
- package/src/theme/components/statusBadge.ts +27 -0
- package/src/theme/components/tabs.ts +72 -69
- package/src/theme/components/template.ts +114 -0
- package/src/theme/components/text.ts +31 -0
- package/src/theme/components/textInput.ts +61 -0
- package/src/theme/foundations/colors.ts +29 -13
- package/src/theme/foundations/global.ts +3 -0
- package/src/theme/foundations/shadows.ts +5 -0
- package/src/theme/index.ts +37 -7
- package/src/utils/componentCategories.ts +8 -2
- package/src/utils/utils.ts +13 -0
- package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
- package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
- package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
- package/dist/components/Template/Template.stories.d.ts +0 -30
- package/src/components/Accordion/Accordion.stories.tsx +0 -66
- package/src/components/Accordion/_Accordion.scss +0 -81
- package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
- package/src/components/Form/_Form.scss +0 -67
- package/src/components/Hero/_Hero.scss +0 -256
- package/src/components/Icons/_Icons.scss +0 -116
- package/src/components/Label/_Label.scss +0 -22
- package/src/components/Link/_Link.scss +0 -73
- package/src/components/SearchBar/_SearchBar.scss +0 -16
- package/src/components/Select/_Select.scss +0 -82
- package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
- package/src/components/StatusBadge/_StatusBadge.scss +0 -23
- package/src/components/StyleGuide/Colors.stories.tsx +0 -289
- package/src/components/Template/Template.stories.tsx +0 -86
- package/src/components/Template/_Template.scss +0 -63
- package/src/components/TextInput/_TextInput.scss +0 -59
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
Link as ReactRouterLink,
|
|
10
10
|
} from "react-router-dom";
|
|
11
11
|
import Icon from "../Icons/Icon";
|
|
12
|
-
import { IconRotationTypes, IconNames } from "../Icons/IconTypes";
|
|
12
|
+
import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
|
|
13
13
|
|
|
14
14
|
describe("Link Accessibility", () => {
|
|
15
|
-
it("passes axe accessibility test", async () => {
|
|
15
|
+
it("passes axe accessibility test for children component", async () => {
|
|
16
16
|
const { container } = render(
|
|
17
17
|
<Link>
|
|
18
18
|
<a href="#test">Test</a>
|
|
@@ -20,26 +20,28 @@ describe("Link Accessibility", () => {
|
|
|
20
20
|
);
|
|
21
21
|
expect(await axe(container)).toHaveNoViolations();
|
|
22
22
|
});
|
|
23
|
+
|
|
24
|
+
it("passes axe accessibility test for href prop", async () => {
|
|
25
|
+
const { container } = render(<Link href="#test">Test</Link>);
|
|
26
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
27
|
+
});
|
|
23
28
|
});
|
|
24
29
|
|
|
25
30
|
describe("Link", () => {
|
|
26
|
-
it("Can pass in icon
|
|
31
|
+
it("Can pass in an icon and text as children and url as prop", () => {
|
|
27
32
|
const utils = render(
|
|
28
33
|
<Link href="#passed-in-link" type={LinkTypes.Action}>
|
|
29
34
|
<Icon
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
iconRotation={IconRotationTypes.rotate0}
|
|
35
|
+
className="more-link"
|
|
36
|
+
name={IconNames.Download}
|
|
37
|
+
align={IconAlign.Left}
|
|
38
|
+
iconRotation={IconRotationTypes.Rotate0}
|
|
35
39
|
/>
|
|
36
40
|
Download
|
|
37
41
|
</Link>
|
|
38
42
|
);
|
|
39
43
|
expect(screen.getByRole("link")).toBeInTheDocument();
|
|
40
|
-
expect(
|
|
41
|
-
utils.container.querySelector(".more-link__icon")
|
|
42
|
-
).toBeInTheDocument();
|
|
44
|
+
expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
|
|
43
45
|
});
|
|
44
46
|
|
|
45
47
|
it("Can pass a link with <a> tag", () => {
|
|
@@ -56,20 +58,17 @@ describe("Link", () => {
|
|
|
56
58
|
<Link type={LinkTypes.Action}>
|
|
57
59
|
<a href="#test2">
|
|
58
60
|
<Icon
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
iconRotation={IconRotationTypes.rotate0}
|
|
61
|
+
className="more-link"
|
|
62
|
+
name={IconNames.Download}
|
|
63
|
+
align={IconAlign.Left}
|
|
64
|
+
iconRotation={IconRotationTypes.Rotate0}
|
|
64
65
|
/>
|
|
65
66
|
Test
|
|
66
67
|
</a>
|
|
67
68
|
</Link>
|
|
68
69
|
);
|
|
69
70
|
expect(screen.getByRole("link")).toBeInTheDocument();
|
|
70
|
-
expect(
|
|
71
|
-
utils.container.querySelector(".more-link__icon")
|
|
72
|
-
).toBeInTheDocument();
|
|
71
|
+
expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
|
|
73
72
|
});
|
|
74
73
|
|
|
75
74
|
it("Generated back link has icon", () => {
|
|
@@ -78,13 +77,10 @@ describe("Link", () => {
|
|
|
78
77
|
content
|
|
79
78
|
</Link>
|
|
80
79
|
);
|
|
80
|
+
expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
|
|
81
81
|
expect(
|
|
82
|
-
utils.container.querySelector(".more-
|
|
83
|
-
).
|
|
84
|
-
expect(utils.container.querySelector(".more-link__icon")).toHaveAttribute(
|
|
85
|
-
"class",
|
|
86
|
-
"more-link__icon more-link__icon--left more-link__icon--rotate-90 "
|
|
87
|
-
);
|
|
82
|
+
utils.container.querySelector(".more-link").getAttribute("class")
|
|
83
|
+
).toContain("chakra-icon more-link");
|
|
88
84
|
});
|
|
89
85
|
|
|
90
86
|
it("Generated forwards link has icon", () => {
|
|
@@ -93,13 +89,10 @@ describe("Link", () => {
|
|
|
93
89
|
content
|
|
94
90
|
</Link>
|
|
95
91
|
);
|
|
92
|
+
expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
|
|
96
93
|
expect(
|
|
97
|
-
utils.container.querySelector(".more-
|
|
98
|
-
).
|
|
99
|
-
expect(utils.container.querySelector(".more-link__icon")).toHaveAttribute(
|
|
100
|
-
"class",
|
|
101
|
-
"more-link__icon more-link__icon--right more-link__icon--rotate-270 "
|
|
102
|
-
);
|
|
94
|
+
utils.container.querySelector(".more-link").getAttribute("class")
|
|
95
|
+
).toContain("chakra-icon more-link");
|
|
103
96
|
});
|
|
104
97
|
|
|
105
98
|
it("Can pass in text as child and url as props", () => {
|
|
@@ -113,12 +106,10 @@ describe("Link", () => {
|
|
|
113
106
|
<Link type={LinkTypes.Action}>
|
|
114
107
|
<ReactRouterLink to="#">
|
|
115
108
|
<Icon
|
|
116
|
-
name={IconNames.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
iconRotation={IconRotationTypes.rotate0}
|
|
121
|
-
></Icon>
|
|
109
|
+
name={IconNames.Download}
|
|
110
|
+
align={IconAlign.Left}
|
|
111
|
+
iconRotation={IconRotationTypes.Rotate0}
|
|
112
|
+
/>
|
|
122
113
|
Download
|
|
123
114
|
</ReactRouterLink>
|
|
124
115
|
</Link>
|
|
@@ -138,16 +129,14 @@ describe("Link", () => {
|
|
|
138
129
|
render(
|
|
139
130
|
<Link>
|
|
140
131
|
<Icon
|
|
141
|
-
name={IconNames.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
iconRotation={IconRotationTypes.rotate0}
|
|
146
|
-
></Icon>
|
|
132
|
+
name={IconNames.Download}
|
|
133
|
+
align={IconAlign.Left}
|
|
134
|
+
iconRotation={IconRotationTypes.Rotate0}
|
|
135
|
+
/>
|
|
147
136
|
<a href="#test">Test</a>
|
|
148
137
|
</Link>
|
|
149
138
|
)
|
|
150
|
-
).toThrowError("Please pass only one child into Link");
|
|
139
|
+
).toThrowError("Please pass only one child into `Link`.");
|
|
151
140
|
});
|
|
152
141
|
|
|
153
142
|
// TODO:
|
|
@@ -1,128 +1,142 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import
|
|
2
|
+
import { Box, useStyleConfig } from "@chakra-ui/react";
|
|
3
|
+
|
|
3
4
|
import { LinkTypes } from "./LinkTypes";
|
|
4
|
-
import Icon
|
|
5
|
-
import { IconRotationTypes, IconNames } from "../Icons/IconTypes";
|
|
5
|
+
import Icon from "../Icons/Icon";
|
|
6
|
+
import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
|
|
7
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
6
8
|
|
|
7
9
|
export interface LinkProps {
|
|
8
10
|
/** Additional attributes, such as `rel=nofollow`, to pass to the `<a>` tag. */
|
|
9
11
|
attributes?: { [key: string]: any };
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
/**
|
|
12
|
+
/** Any child node passed to the component. */
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
/** Additional class name to render in the `Link` component. */
|
|
13
15
|
className?: string;
|
|
14
|
-
/**
|
|
16
|
+
/** The `href` attribute for the anchor element. */
|
|
15
17
|
href?: string;
|
|
16
|
-
/** ID */
|
|
18
|
+
/** ID used for accessibility purposes. */
|
|
17
19
|
id?: string;
|
|
18
|
-
/** Controls the link visuals
|
|
20
|
+
/** Controls the link visuals: action, button, backwards, forwards, or default. */
|
|
19
21
|
type?: LinkTypes;
|
|
20
|
-
/** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
|
|
21
|
-
modifiers?: string[];
|
|
22
|
-
/** Any child node passed to the component. */
|
|
23
|
-
children: React.ReactNode;
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
25
|
+
* Renders the `Link` children components with a direction arrow icon based
|
|
26
|
+
* on the `Backwards` or `Forwards` `LinkTypes` type.
|
|
29
27
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
className,
|
|
35
|
-
href,
|
|
36
|
-
id,
|
|
37
|
-
type = LinkTypes.Default,
|
|
38
|
-
modifiers = [],
|
|
39
|
-
children,
|
|
40
|
-
} = props;
|
|
41
|
-
|
|
42
|
-
// Merge the necessary props alongside any extra props for the
|
|
43
|
-
// anchor element.
|
|
44
|
-
const linkProps = {
|
|
45
|
-
id,
|
|
46
|
-
href,
|
|
47
|
-
...attributes,
|
|
48
|
-
};
|
|
49
|
-
let baseClass = "link";
|
|
50
|
-
|
|
51
|
-
let childProps = {};
|
|
28
|
+
function getWithDirectionIcon(children, type: LinkTypes) {
|
|
29
|
+
let iconRotation;
|
|
30
|
+
let iconAlign;
|
|
31
|
+
let icon = null;
|
|
52
32
|
|
|
53
|
-
if (typeof children === "string" && !href) {
|
|
54
|
-
throw new Error("Link needs prop 'href'");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (
|
|
58
|
-
type === LinkTypes.Action ||
|
|
59
|
-
type === LinkTypes.Forwards ||
|
|
60
|
-
type === LinkTypes.Backwards
|
|
61
|
-
) {
|
|
62
|
-
baseClass = "more-link";
|
|
63
|
-
} else if (type === LinkTypes.Button) {
|
|
64
|
-
baseClass = "button";
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
let iconRotation, iconPosition, iconLeft, iconRight;
|
|
68
33
|
// An icon needs a position in order for it to be created and
|
|
69
34
|
// rendered in the link.
|
|
70
35
|
if (type === LinkTypes.Backwards) {
|
|
71
|
-
iconRotation = IconRotationTypes.
|
|
72
|
-
|
|
36
|
+
iconRotation = IconRotationTypes.Rotate90;
|
|
37
|
+
iconAlign = IconAlign.Left;
|
|
73
38
|
} else if (type === LinkTypes.Forwards) {
|
|
74
|
-
iconRotation = IconRotationTypes.
|
|
75
|
-
|
|
39
|
+
iconRotation = IconRotationTypes.Rotate270;
|
|
40
|
+
iconAlign = IconAlign.Right;
|
|
76
41
|
}
|
|
77
42
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
43
|
+
icon = (
|
|
44
|
+
<Icon
|
|
45
|
+
name={IconNames.Arrow}
|
|
46
|
+
align={iconAlign}
|
|
47
|
+
iconRotation={iconRotation}
|
|
48
|
+
className="more-link"
|
|
49
|
+
/>
|
|
50
|
+
);
|
|
84
51
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
52
|
+
return (
|
|
53
|
+
<>
|
|
54
|
+
{type === LinkTypes.Backwards && icon}
|
|
55
|
+
{children}
|
|
56
|
+
{type === LinkTypes.Forwards && icon}
|
|
57
|
+
</>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A component that uses an `href` prop or a child anchor element, to create
|
|
63
|
+
* an anchor element with added styling and conventions.
|
|
64
|
+
*/
|
|
65
|
+
const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
|
|
66
|
+
(props, ref: any) => {
|
|
67
|
+
const {
|
|
68
|
+
attributes,
|
|
69
|
+
children,
|
|
70
|
+
className,
|
|
71
|
+
href,
|
|
72
|
+
id = generateUUID(),
|
|
73
|
+
type = LinkTypes.Default,
|
|
74
|
+
} = props;
|
|
91
75
|
|
|
92
|
-
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
76
|
+
// Merge the necessary props alongside any extra props for the
|
|
77
|
+
// anchor element.
|
|
78
|
+
const linkProps = {
|
|
79
|
+
id,
|
|
80
|
+
href,
|
|
81
|
+
...attributes,
|
|
82
|
+
};
|
|
83
|
+
// The LinkTypes.Default type.
|
|
84
|
+
let variant = "link";
|
|
85
|
+
|
|
86
|
+
if (typeof children === "string" && !href) {
|
|
87
|
+
throw new Error("Link needs prop 'href'");
|
|
97
88
|
}
|
|
98
|
-
const children = props.children[0] ? props.children[0] : props.children;
|
|
99
|
-
childProps = children.props;
|
|
100
89
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
ref,
|
|
118
|
-
},
|
|
119
|
-
iconLeft,
|
|
120
|
-
props.children,
|
|
121
|
-
iconRight
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
90
|
+
if (
|
|
91
|
+
type === LinkTypes.Action ||
|
|
92
|
+
type === LinkTypes.Forwards ||
|
|
93
|
+
type === LinkTypes.Backwards
|
|
94
|
+
) {
|
|
95
|
+
variant = "moreLink";
|
|
96
|
+
} else if (type === LinkTypes.Button) {
|
|
97
|
+
variant = "button";
|
|
98
|
+
}
|
|
99
|
+
const style = useStyleConfig("Link", { variant });
|
|
100
|
+
// Render with specific direction arrows only if the type
|
|
101
|
+
// is Forwards or Backwards.
|
|
102
|
+
const newChildren =
|
|
103
|
+
type === LinkTypes.Forwards || type === LinkTypes.Backwards
|
|
104
|
+
? getWithDirectionIcon(children, type)
|
|
105
|
+
: children;
|
|
125
106
|
|
|
126
|
-
|
|
107
|
+
if (!href) {
|
|
108
|
+
// React Types error makes this fail:
|
|
109
|
+
// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/32832
|
|
110
|
+
// let children = React.Children.only(children);
|
|
111
|
+
if (React.Children.count(children) > 1) {
|
|
112
|
+
throw new Error("Please pass only one child into `Link`.");
|
|
113
|
+
}
|
|
114
|
+
const childrenToClone: any = children[0] ? children[0] : children;
|
|
115
|
+
const childProps = childrenToClone.props;
|
|
116
|
+
return React.cloneElement(
|
|
117
|
+
childrenToClone,
|
|
118
|
+
{
|
|
119
|
+
className,
|
|
120
|
+
...linkProps,
|
|
121
|
+
...childProps,
|
|
122
|
+
ref,
|
|
123
|
+
},
|
|
124
|
+
[childrenToClone.props.children]
|
|
125
|
+
);
|
|
126
|
+
} else {
|
|
127
|
+
return (
|
|
128
|
+
<Box
|
|
129
|
+
as="a"
|
|
130
|
+
className={className}
|
|
131
|
+
ref={ref}
|
|
132
|
+
{...linkProps}
|
|
133
|
+
__css={style}
|
|
134
|
+
>
|
|
135
|
+
{newChildren}
|
|
136
|
+
</Box>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
);
|
|
127
141
|
|
|
128
142
|
export default Link;
|
|
@@ -9,8 +9,6 @@ import {
|
|
|
9
9
|
import { withDesign } from "storybook-addon-designs";
|
|
10
10
|
import Card from "../Card/Card";
|
|
11
11
|
import Heading from "../Heading/Heading";
|
|
12
|
-
import Icon from "../Icons/Icon";
|
|
13
|
-
import { IconNames, IconRotationTypes } from "../Icons/IconTypes";
|
|
14
12
|
import Image from "../Image/Image";
|
|
15
13
|
import Link from "../Link/Link";
|
|
16
14
|
import { LinkTypes } from "../Link/LinkTypes";
|
|
@@ -4,7 +4,7 @@ import CardEdition from "../CardEdition/CardEdition";
|
|
|
4
4
|
import Heading from "../Heading/Heading";
|
|
5
5
|
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
6
6
|
import Icon from "../Icons/Icon";
|
|
7
|
-
import { IconNames } from "../Icons/IconTypes";
|
|
7
|
+
import { IconAlign, IconNames, IconSizes } from "../Icons/IconTypes";
|
|
8
8
|
import Image from "../Image/Image";
|
|
9
9
|
import Link from "../Link/Link";
|
|
10
10
|
import { LinkTypes } from "../Link/LinkTypes";
|
|
@@ -118,10 +118,10 @@ const exampleCard = (
|
|
|
118
118
|
</div>
|
|
119
119
|
<div className="book__filetype">
|
|
120
120
|
<Icon
|
|
121
|
-
name={IconNames.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
name={IconNames.Headset}
|
|
122
|
+
align={IconAlign.Left}
|
|
123
|
+
size={IconSizes.Small}
|
|
124
|
+
/>
|
|
125
125
|
Audiobook
|
|
126
126
|
</div>
|
|
127
127
|
<div className="book__description">
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
margin: unset; // browser automatically applies margin
|
|
12
12
|
|
|
13
13
|
&__definition-list {
|
|
14
|
-
border-bottom: 1px solid var(--ui-gray-light);
|
|
14
|
+
border-bottom: 1px solid var(--ui-gray-light-cool);
|
|
15
15
|
|
|
16
16
|
h2 {
|
|
17
17
|
border-top: 3px solid var(--section-research-primary);
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
margin: var(--space-xs) 0 0;
|
|
27
27
|
|
|
28
28
|
dt {
|
|
29
|
-
border-top: 1px solid var(--ui-gray-light);
|
|
29
|
+
border-top: 1px solid var(--ui-gray-light-cool);
|
|
30
30
|
font-size: var(--font-size-0);
|
|
31
31
|
font-weight: bold;
|
|
32
32
|
padding-bottom: 0;
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
padding-bottom: var(--space-s);
|
|
46
46
|
|
|
47
47
|
@include breakpoint($breakpoint-medium) {
|
|
48
|
-
border-top: 1px solid var(--ui-gray-light);
|
|
48
|
+
border-top: 1px solid var(--ui-gray-light-cool);
|
|
49
49
|
padding-top: var(--space-s);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -15,6 +15,12 @@ import Notification, {
|
|
|
15
15
|
} from "./Notification";
|
|
16
16
|
import { NotificationTypes } from "./NotificationTypes";
|
|
17
17
|
import Icon from "../Icons/Icon";
|
|
18
|
+
import {
|
|
19
|
+
IconSizes,
|
|
20
|
+
IconColors,
|
|
21
|
+
IconNames,
|
|
22
|
+
IconAlign,
|
|
23
|
+
} from "../Icons/IconTypes";
|
|
18
24
|
import { getCategory } from "../../utils/componentCategories";
|
|
19
25
|
import DSProvider from "../../theme/provider";
|
|
20
26
|
|
|
@@ -183,7 +189,12 @@ The default icon can be overridden by using the `icon` prop to pass a custom `Ic
|
|
|
183
189
|
{(args) => (
|
|
184
190
|
<Notification
|
|
185
191
|
icon={
|
|
186
|
-
<Icon
|
|
192
|
+
<Icon
|
|
193
|
+
align={IconAlign.Left}
|
|
194
|
+
name={IconNames.Check}
|
|
195
|
+
size={IconSizes.Large}
|
|
196
|
+
color={IconColors.SectionResearchSecondary}
|
|
197
|
+
/>
|
|
187
198
|
}
|
|
188
199
|
>
|
|
189
200
|
<NotificationHeading>Custom Icon</NotificationHeading>
|
|
@@ -86,13 +86,6 @@ describe("Notification: check for Announcement Notification", () => {
|
|
|
86
86
|
utils.container.querySelector(".notification--announcement")
|
|
87
87
|
).toBeInTheDocument();
|
|
88
88
|
});
|
|
89
|
-
it("Renders Icon with proper color", () => {
|
|
90
|
-
expect(
|
|
91
|
-
utils.container.querySelector(
|
|
92
|
-
".notification-icon.icon--section-research-secondary"
|
|
93
|
-
)
|
|
94
|
-
).toBeInTheDocument();
|
|
95
|
-
});
|
|
96
89
|
});
|
|
97
90
|
|
|
98
91
|
describe("Notification: check for Warning Notification", () => {
|
|
@@ -114,12 +107,6 @@ describe("Notification: check for Warning Notification", () => {
|
|
|
114
107
|
utils.container.querySelector(".notification--warning")
|
|
115
108
|
).toBeInTheDocument();
|
|
116
109
|
});
|
|
117
|
-
|
|
118
|
-
it("Renders Icon with proper color", () => {
|
|
119
|
-
expect(
|
|
120
|
-
utils.container.querySelector(".notification-icon.icon--brand-primary")
|
|
121
|
-
).toBeInTheDocument();
|
|
122
|
-
});
|
|
123
110
|
});
|
|
124
111
|
|
|
125
112
|
describe("Notification: check for custom Icon", () => {
|
|
@@ -130,9 +117,9 @@ describe("Notification: check for custom Icon", () => {
|
|
|
130
117
|
id="notificationID"
|
|
131
118
|
icon={
|
|
132
119
|
<Icon
|
|
133
|
-
name={IconNames.
|
|
134
|
-
size={IconSizes.
|
|
135
|
-
color={IconColors.
|
|
120
|
+
name={IconNames.Check}
|
|
121
|
+
size={IconSizes.Large}
|
|
122
|
+
color={IconColors.BrandPrimary}
|
|
136
123
|
className="custom-icon"
|
|
137
124
|
/>
|
|
138
125
|
}
|
|
@@ -6,7 +6,7 @@ import { ButtonTypes } from "../Button/ButtonTypes";
|
|
|
6
6
|
import Heading from "../Heading/Heading";
|
|
7
7
|
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
8
8
|
import Icon from "../Icons/Icon";
|
|
9
|
-
import { IconColors, IconNames } from "../Icons/IconTypes";
|
|
9
|
+
import { IconColors, IconNames, IconSizes } from "../Icons/IconTypes";
|
|
10
10
|
import { NotificationTypes } from "./NotificationTypes";
|
|
11
11
|
|
|
12
12
|
export interface NotificationProps {
|
|
@@ -95,9 +95,9 @@ export default function Notification(
|
|
|
95
95
|
<Icon
|
|
96
96
|
decorative={false}
|
|
97
97
|
className="notification-icon"
|
|
98
|
-
name={IconNames.
|
|
99
|
-
color={IconColors.
|
|
100
|
-
|
|
98
|
+
name={IconNames.SpeakerNotes}
|
|
99
|
+
color={IconColors.SectionResearchSecondary}
|
|
100
|
+
size={IconSizes.Large}
|
|
101
101
|
/>
|
|
102
102
|
);
|
|
103
103
|
case "warning":
|
|
@@ -105,9 +105,9 @@ export default function Notification(
|
|
|
105
105
|
<Icon
|
|
106
106
|
decorative={false}
|
|
107
107
|
className="notification-icon"
|
|
108
|
-
name={IconNames.
|
|
109
|
-
color={IconColors.
|
|
110
|
-
|
|
108
|
+
name={IconNames.ErrorFilled}
|
|
109
|
+
color={IconColors.BrandPrimary}
|
|
110
|
+
size={IconSizes.Large}
|
|
111
111
|
/>
|
|
112
112
|
);
|
|
113
113
|
default:
|
|
@@ -190,10 +190,9 @@ export default function Notification(
|
|
|
190
190
|
onClick={handleClose}
|
|
191
191
|
>
|
|
192
192
|
<Icon
|
|
193
|
-
modifiers={["medium"]}
|
|
194
193
|
decorative={false}
|
|
195
|
-
name={IconNames.
|
|
196
|
-
|
|
194
|
+
name={IconNames.Close}
|
|
195
|
+
size={IconSizes.Large}
|
|
197
196
|
/>
|
|
198
197
|
</Button>
|
|
199
198
|
) : null}
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
&--announcement {
|
|
48
|
-
background-color: var(--ui-gray-light);
|
|
48
|
+
background-color: var(--ui-gray-light-cool);
|
|
49
49
|
|
|
50
50
|
.notification-heading {
|
|
51
51
|
color: var(--section-research-secondary);
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
&--warning {
|
|
56
|
-
background-color: var(--ui-gray-
|
|
56
|
+
background-color: var(--ui-gray-xx-light-cool);
|
|
57
57
|
|
|
58
58
|
.notification-heading {
|
|
59
59
|
color: var(--brand-primary);
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
.icon {
|
|
82
|
+
.chakra-icon {
|
|
83
83
|
flex-shrink: 0;
|
|
84
84
|
margin-right: var(--space-s);
|
|
85
85
|
}
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
width: var(--space-m);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
.icon {
|
|
104
|
+
.chakra-icon {
|
|
105
105
|
height: var(--space-m);
|
|
106
106
|
margin-right: 0;
|
|
107
107
|
width: var(--space-m);
|