@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,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
|
+
`;
|
|
@@ -1,10 +1,10 @@
|
|
|
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 Heading from "../Heading/Heading";
|
|
@@ -15,6 +15,9 @@ import { LinkTypes } from "../Link/LinkTypes";
|
|
|
15
15
|
import List from "./List";
|
|
16
16
|
import { ListTypes } from "./ListTypes";
|
|
17
17
|
import { getCategory } from "../../utils/componentCategories";
|
|
18
|
+
import { getStorybookEnumValues } from "../../utils/utils";
|
|
19
|
+
|
|
20
|
+
export const enumValues = getStorybookEnumValues(ListTypes, "ListTypes");
|
|
18
21
|
|
|
19
22
|
<Meta
|
|
20
23
|
title={getCategory("List")}
|
|
@@ -23,21 +26,22 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
23
26
|
parameters={{
|
|
24
27
|
design: {
|
|
25
28
|
type: "figma",
|
|
26
|
-
url:
|
|
27
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=16115%3A304",
|
|
29
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=16115%3A304",
|
|
28
30
|
},
|
|
29
31
|
jest: ["List.test.tsx"],
|
|
30
32
|
}}
|
|
31
33
|
argTypes={{
|
|
34
|
+
additionalStyles: { control: false },
|
|
32
35
|
children: { table: { disable: true } },
|
|
33
|
-
className: {
|
|
34
|
-
id: {
|
|
35
|
-
|
|
36
|
+
className: { control: false },
|
|
37
|
+
id: { control: false },
|
|
38
|
+
inline: { table: { defaultValue: { summary: false } } },
|
|
39
|
+
listItems: { control: false },
|
|
40
|
+
noStyling: { table: { defaultValue: { summary: false } } },
|
|
36
41
|
type: {
|
|
37
|
-
control: {
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
-
options: Object.keys(ListTypes),
|
|
42
|
+
control: { type: "select" },
|
|
43
|
+
options: enumValues.options,
|
|
44
|
+
table: { defaultValue: { summary: "ListTypes.Unordered" } },
|
|
41
45
|
},
|
|
42
46
|
}}
|
|
43
47
|
/>
|
|
@@ -118,17 +122,21 @@ export const definitions = [
|
|
|
118
122
|
|
|
119
123
|
<Canvas withToolbar>
|
|
120
124
|
<Story
|
|
121
|
-
name="List"
|
|
125
|
+
name="List with Controls"
|
|
122
126
|
args={{
|
|
127
|
+
additionalStyles: undefined,
|
|
128
|
+
className: undefined,
|
|
123
129
|
id: "nypl-list",
|
|
130
|
+
inline: false,
|
|
131
|
+
listItems: undefined,
|
|
124
132
|
noStyling: false,
|
|
125
133
|
title: "Middle-Earth Peoples",
|
|
126
|
-
type: ListTypes.Unordered,
|
|
134
|
+
type: "ListTypes.Unordered",
|
|
127
135
|
}}
|
|
128
136
|
>
|
|
129
137
|
{(args) => (
|
|
130
|
-
<List {...args} type={
|
|
131
|
-
{
|
|
138
|
+
<List {...args} type={enumValues.getValue(args.type)}>
|
|
139
|
+
{args.type !== "ListTypes.Definition"
|
|
132
140
|
? itemGroups.map((item, i) => <li key={i}>{item}</li>)
|
|
133
141
|
: definitions.map((item, i) => [
|
|
134
142
|
<dt key={`dt_${i}`}>{item.term}</dt>,
|
|
@@ -139,7 +147,7 @@ export const definitions = [
|
|
|
139
147
|
</Story>
|
|
140
148
|
</Canvas>
|
|
141
149
|
|
|
142
|
-
<ArgsTable story="List" />
|
|
150
|
+
<ArgsTable story="List with Controls" />
|
|
143
151
|
|
|
144
152
|
## Definition List
|
|
145
153
|
|
|
@@ -163,13 +171,14 @@ This type of list renders `dt` and `dd` elements.
|
|
|
163
171
|
title: "Middle-Earth Peoples",
|
|
164
172
|
}}
|
|
165
173
|
argTypes={{
|
|
166
|
-
|
|
174
|
+
inline: { control: false },
|
|
175
|
+
noStyling: { control: false },
|
|
176
|
+
type: { control: false },
|
|
167
177
|
}}
|
|
168
178
|
parameters={{
|
|
169
179
|
design: {
|
|
170
180
|
type: "figma",
|
|
171
|
-
url:
|
|
172
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
181
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
173
182
|
},
|
|
174
183
|
}}
|
|
175
184
|
>
|
|
@@ -196,13 +205,14 @@ An example with HTML elements inside of the `dd` elements.
|
|
|
196
205
|
title: "Details",
|
|
197
206
|
}}
|
|
198
207
|
argTypes={{
|
|
208
|
+
inline: { control: false },
|
|
209
|
+
noStyling: { control: false },
|
|
199
210
|
type: { table: { disable: true } },
|
|
200
211
|
}}
|
|
201
212
|
parameters={{
|
|
202
213
|
design: {
|
|
203
214
|
type: "figma",
|
|
204
|
-
url:
|
|
205
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
215
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
206
216
|
},
|
|
207
217
|
}}
|
|
208
218
|
>
|
|
@@ -330,7 +340,9 @@ const fishDefinitions = [
|
|
|
330
340
|
title: "Animal Crossing Fish",
|
|
331
341
|
}}
|
|
332
342
|
argTypes={{
|
|
333
|
-
|
|
343
|
+
inline: { control: false },
|
|
344
|
+
noStyling: { control: false },
|
|
345
|
+
type: { control: false },
|
|
334
346
|
}}
|
|
335
347
|
>
|
|
336
348
|
{(args) => <List {...args} type={ListTypes.Definition} />}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ArgsTable,
|
|
3
|
+
Canvas,
|
|
4
|
+
Description,
|
|
5
|
+
Meta,
|
|
6
|
+
Story,
|
|
7
|
+
} from "@storybook/addon-docs";
|
|
8
|
+
import { withDesign } from "storybook-addon-designs";
|
|
9
|
+
|
|
10
|
+
import Logo from "./Logo";
|
|
11
|
+
import { LogoNames, LogoSizes } from "./LogoTypes";
|
|
12
|
+
import logoSvgs from "./LogoSvgs";
|
|
13
|
+
import Heading from "../Heading/Heading";
|
|
14
|
+
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
15
|
+
import List from "../List/List";
|
|
16
|
+
import { ListTypes } from "../List/ListTypes";
|
|
17
|
+
import SimpleGrid from "../Grid/SimpleGrid";
|
|
18
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
19
|
+
import { getStorybookEnumValues } from "../../utils/utils";
|
|
20
|
+
|
|
21
|
+
export const namesEnumValues = getStorybookEnumValues(LogoNames, "LogoNames");
|
|
22
|
+
export const sizesEnumValues = getStorybookEnumValues(LogoSizes, "LogoSizes");
|
|
23
|
+
|
|
24
|
+
<Meta
|
|
25
|
+
title={getCategory("Logo")}
|
|
26
|
+
component={Logo}
|
|
27
|
+
decorators={[withDesign]}
|
|
28
|
+
parameters={{
|
|
29
|
+
design: {
|
|
30
|
+
type: "figma",
|
|
31
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A3945",
|
|
32
|
+
},
|
|
33
|
+
jest: ["Logo.test.tsx"],
|
|
34
|
+
}}
|
|
35
|
+
argTypes={{
|
|
36
|
+
children: { table: { disable: true } },
|
|
37
|
+
className: { control: false },
|
|
38
|
+
id: { control: false },
|
|
39
|
+
name: {
|
|
40
|
+
control: { type: "select" },
|
|
41
|
+
options: namesEnumValues.options,
|
|
42
|
+
},
|
|
43
|
+
size: {
|
|
44
|
+
control: { type: "select" },
|
|
45
|
+
table: { defaultValue: { summary: "LogoSizes.Medium" } },
|
|
46
|
+
options: sizesEnumValues.options,
|
|
47
|
+
},
|
|
48
|
+
title: {
|
|
49
|
+
control: false,
|
|
50
|
+
table: { defaultValue: { summary: "`${name} logo`" } },
|
|
51
|
+
},
|
|
52
|
+
}}
|
|
53
|
+
/>
|
|
54
|
+
|
|
55
|
+
# Logo
|
|
56
|
+
|
|
57
|
+
| Component Version | DS Version |
|
|
58
|
+
| ----------------- | ---------- |
|
|
59
|
+
| Added | `0.25.9` |
|
|
60
|
+
| Latest | `0.25.9` |
|
|
61
|
+
|
|
62
|
+
<Description of={Logo} />
|
|
63
|
+
|
|
64
|
+
<Canvas withToolbar>
|
|
65
|
+
<Story
|
|
66
|
+
name="Logo with Controls"
|
|
67
|
+
args={{
|
|
68
|
+
additionalStyles: undefined,
|
|
69
|
+
className: undefined,
|
|
70
|
+
decorative: true,
|
|
71
|
+
id: "logo-id",
|
|
72
|
+
name: "LogoNames.NYPLBlack",
|
|
73
|
+
size: "LogoSizes.Large",
|
|
74
|
+
title: undefined,
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
{(args) => (
|
|
78
|
+
<div
|
|
79
|
+
style={
|
|
80
|
+
args.name.indexOf("White") !== -1
|
|
81
|
+
? {
|
|
82
|
+
backgroundColor: "var(--nypl-colors-ui-gray-xdark)",
|
|
83
|
+
display: "inline-block",
|
|
84
|
+
padding: "var(--nypl-space-l)",
|
|
85
|
+
}
|
|
86
|
+
: undefined
|
|
87
|
+
}
|
|
88
|
+
>
|
|
89
|
+
<Logo
|
|
90
|
+
name={namesEnumValues.getValue(args.name)}
|
|
91
|
+
size={sizesEnumValues.getValue(args.size)}
|
|
92
|
+
title={args.title}
|
|
93
|
+
/>
|
|
94
|
+
</div>
|
|
95
|
+
)}
|
|
96
|
+
</Story>
|
|
97
|
+
</Canvas>
|
|
98
|
+
|
|
99
|
+
<ArgsTable story="Logo with Controls" />
|
|
100
|
+
|
|
101
|
+
export const logoRow = (logo, opts = {}) => {
|
|
102
|
+
// We'll use this setup function to render all the logos in a list item.
|
|
103
|
+
// Some logos display better with a dark background.
|
|
104
|
+
const styles = { textAlign: "center" };
|
|
105
|
+
const { size = LogoSizes.Large, displayValue } = opts;
|
|
106
|
+
let key = logo;
|
|
107
|
+
if (logo.indexOf("White") !== -1) {
|
|
108
|
+
styles.backgroundColor = "var(--nypl-colors-ui-gray-xdark)";
|
|
109
|
+
styles.paddingBottom = "32px";
|
|
110
|
+
styles.paddingTop = "32px";
|
|
111
|
+
styles.color = "var(--nypl-colors-ui-white)";
|
|
112
|
+
}
|
|
113
|
+
if (size !== LogoSizes.Large) {
|
|
114
|
+
key += `-${size}`;
|
|
115
|
+
}
|
|
116
|
+
return (
|
|
117
|
+
<div style={styles} key={key}>
|
|
118
|
+
<Heading level={HeadingLevels.Four}>{displayValue}</Heading>
|
|
119
|
+
<Logo name={LogoNames[logo]} size={size} />
|
|
120
|
+
</div>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
export const logos = [];
|
|
124
|
+
export const sizes = [];
|
|
125
|
+
for (const logo in LogoNames) {
|
|
126
|
+
logos.push(logoRow(logo, { displayValue: `LogoNames.${logo}` }));
|
|
127
|
+
}
|
|
128
|
+
for (const logoSize in LogoSizes) {
|
|
129
|
+
sizes.push(
|
|
130
|
+
logoRow("NYPLBlack", {
|
|
131
|
+
displayValue: `LogoSizes.${logoSize}`,
|
|
132
|
+
size: LogoSizes[logoSize],
|
|
133
|
+
})
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export const allLogosGrid = (list) => (
|
|
138
|
+
<SimpleGrid columns={1}>{list}</SimpleGrid>
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
## Accessibility
|
|
142
|
+
|
|
143
|
+
For accessibility purposes, every DS `Logo` will render the `svg` element with
|
|
144
|
+
its `svg` file name in the `title` element. The default text in the `title` element
|
|
145
|
+
is the logo's code name. Pass in better descriptive text in the `title` prop
|
|
146
|
+
when using the `Logo` component in your application. This will give screenreaders
|
|
147
|
+
a better descriptive title for the `svg` graphic.
|
|
148
|
+
|
|
149
|
+
## All Logos
|
|
150
|
+
|
|
151
|
+
The `Logo` component contains the logos most commonly used by are listed available
|
|
152
|
+
logos are listed in the `LogoNames` enum in `src/components/Logos/LogoTypes.tsx`.
|
|
153
|
+
|
|
154
|
+
If you feel a necessary logo should be added to the `Logo` component, please reach out
|
|
155
|
+
to the DS team.
|
|
156
|
+
|
|
157
|
+
<Canvas withToolbar>
|
|
158
|
+
<Story name="All Logos">{allLogosGrid(logos)}</Story>
|
|
159
|
+
</Canvas>
|
|
160
|
+
|
|
161
|
+
## Logo Sizes
|
|
162
|
+
|
|
163
|
+
Update the size of the `Logo` component by passing the `size` prop with a value from
|
|
164
|
+
`LogoSizes`. The `LogoSizes` enum can be found in`src/components/Logo/LogoTypes.tsx`.
|
|
165
|
+
|
|
166
|
+
Note: `LogoSizes.Default` sets the width to `100%` and the logo will expand to
|
|
167
|
+
fill the full width of the parent element.
|
|
168
|
+
|
|
169
|
+
```jsx
|
|
170
|
+
// Example
|
|
171
|
+
<Logo name={LogoNames.NYPLBlack} size={LogoSizes.Large} />
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
<Canvas>
|
|
175
|
+
<Story name="Logo Sizes">{allLogosGrid(sizes)}</Story>
|
|
176
|
+
</Canvas>
|
|
177
|
+
|
|
178
|
+
## Custom Logos
|
|
179
|
+
|
|
180
|
+
If you'd like to pass a custom `svg` to your application, you can pass it a
|
|
181
|
+
child to the `Logo` component.
|
|
182
|
+
|
|
183
|
+
```jsx
|
|
184
|
+
<Logo {...props}>
|
|
185
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192.756 192.756">
|
|
186
|
+
<g fill-rule="evenodd" clip-rule="evenodd">
|
|
187
|
+
<path fill="#fff" d="M0 0h192.756v192.756H0V0z" />
|
|
188
|
+
<path
|
|
189
|
+
d="M59.73 117.578c-9.859-4.912-23.261-15.887-23.413-27.06C36.149 78.129 44.451 75.087 50 75.087c5.701 0 8.286 3.345 10.637 5.777 2.352-2.433 4.936-5.777 10.637-5.777 5.549 0 13.851 3.042 13.682 15.431-.151 11.173-13.553 22.148-23.412 27.06-.35.174-.629.262-.907.262s-.557-.088-.907-.262z"
|
|
190
|
+
fill="#c23c40"
|
|
191
|
+
/>
|
|
192
|
+
<path d="M184.252 78.225c-.027 1.111-.355 1.921-.799 2.399-.871.945-3.1 1.067-4.283.854-.668-.12-1.309-.167-1.66-.137-1.551.136-2.398 1.115-3.242 2.45l-10.377 16.423-.154 6.727c-.033 1.535.287 2.881 2.066 2.799l2.865-.135c1.725-.08 3.35 1.029 3.4 2.867.064 2.359-1.807 3.393-3.943 3.275-1.338-.072-2.559-.275-3.666-.477-2.355-.428-3.977-.279-6.332 0-2.189.262-3.879.43-5.055.4-1.895-.045-3.725-.988-3.91-2.957-.178-1.898 1.297-3.191 3.186-3.041l2.5.199c.963.076 2.232-.406 2.256-1.533l.152-7.555-10.803-17.373c-.588-.948-1.52-1.538-2.42-1.877-1.156-.435-2.35-.464-3.568-.309-.988.125-1.16.01-1.414-.001-2.166-.093-3.1-1.048-2.988-3.064.139-2.505 1.543-2.885 3.936-2.885.412 0 1.391.005 3.344.285 1.43.206 2.609.099 3.531.067 2.436-.083 4.973-.545 7.377-.479 1.334.037 2.285.338 2.943.667.92.459 1.506 1.161 1.473 2.348-.031 1.144-.484 2.161-1.139 2.645-.496.367-1.848.417-2.902.417-1.92-.046-1.844 1.094-1.24 1.651l7.008 11.204 7.336-11.487c.148-.59.916-1.602-1.146-1.365-.637.073-.715.087-1.48.064-1.1-.033-1.854-.247-2.266-.544-1.348-.974-1.18-1.916-.943-3.322.17-1.019.986-1.48 1.877-1.744.928-.275 1.896-.259 2.871-.267 1.105-.009 2.221.111 3.295.272 1.99.297 3.414.306 5.398.066 1.379-.167 3.006-.5 4.559-.488 1.062.008 2.092.056 2.984.551.867.484 1.4 1.278 1.373 2.41zM31.561 112.531c-.116 2.684-2.242 2.799-4.345 2.799-2.14 0-4.302-.387-6.455-.387-2.396 0-4.788.17-7.178.396-2.739.262-4.681-.342-4.576-2.869.07-1.703 1.047-2.818 3.117-2.814l2.783.004c1.497.002 2.085-1.572 2.082-2.721l-.098-23.305c-.004-1.258-.422-2.46-1.917-2.431l-3.169.064c-2.091.042-3.322-1.33-3.301-3.214.026-2.372 1.934-2.958 3.873-2.897.678.021 2.127.043 3.023.136 1.53.157 3.13.141 4.67.141 2.369 0 4.682-.372 7.012-.372 2.197 0 4.145.564 4.274 3.233.078 1.624-1.636 2.807-3.479 2.776l-2.155-.035c-1.634-.027-2.604 1.158-2.587 2.501l.294 23.462c.028 2.24 1.216 2.869 3.008 2.85l2.109-.025c1.58-.02 3.098.777 3.015 2.708zM135.311 78.065c-.084 2.73-1.73 3.344-4.244 3.344 0-.041-4.09-.461-4.09 1.686v26.908c0 3.244-1.57 6.314-5.01 6.314-2.217 0-4.641-1.143-5.557-3.271l-12.846-29.84-.061 23.363c-.004 1.895.496 2.963 2.393 2.908l2.344-.066c2.098-.061 3.543 1.082 3.482 3.266-.066 2.418-1.879 2.932-3.93 2.932-2.467 0-4.818-.783-7.248-.666-2.58.123-5.081.484-7.668.484-2.227 0-3.915-.693-3.915-3.283 0-2.166 1.352-2.596 3.254-2.637l2.58-.055c1.54-.031 2.489-.662 2.489-1.975V82.78c0-1.262-.493-1.895-2.204-1.835l-2.213.079c-2.608.092-3.612-.421-3.543-3.023.061-2.28 1.595-3.273 4.478-3.052 1.569.12 3.148.301 4.722.301 1.721 0 3.434-.042 5.148-.042 2.891 0 4.029 1.753 5.182 4.37l11.777 26.751V83.664c0-1.012-.412-1.794-.732-2.11-.322-.316-.822-.481-1.475-.478l-2.693.019c-1.971.012-3.658-.844-3.623-2.685.055-3.006 2.82-3.496 5.285-3.399 2.385.094 4.965.742 7.32.667 2.227-.071 4.461-.646 6.697-.533 2.885.147 3.951 1.244 3.901 2.92zM179.455 107.746c1.111 0 2.096.396 2.951 1.186.896.832 1.346 1.836 1.346 3.012 0 1.426-.506 2.523-1.518 3.297a4.258 4.258 0 0 1-2.643.902h-.211c-1.004 0-1.926-.42-2.766-1.26-.838-.84-1.258-1.791-1.258-2.852v-.174c0-1.16.398-2.135 1.197-2.926.801-.788 1.767-1.185 2.902-1.185zm.408 3.951c.346 0 .615-.082.809-.246.193-.166.291-.363.291-.594a.77.77 0 0 0-.266-.58c-.178-.164-.422-.246-.736-.246h-1.543v1.666h1.445zm-.308-3.345c-.814 0-1.576.279-2.283.84-.891.699-1.334 1.646-1.334 2.84 0 .914.359 1.742 1.08 2.486.721.746 1.533 1.117 2.438 1.117h.148c.906 0 1.723-.367 2.451-1.104s1.092-1.6 1.092-2.588c0-.971-.359-1.812-1.08-2.523-.719-.713-1.557-1.068-2.512-1.068zm-1.741 1.171h2.221c.504 0 .902.141 1.199.42.264.256.395.561.395.914 0 .338-.125.633-.377.883-.25.252-.6.377-1.043.377l-.174-.012 1.408 2.172h-.703l-1.359-2.074h-.963v2.074h-.604v-4.754z" />
|
|
193
|
+
</g>
|
|
194
|
+
</svg>
|
|
195
|
+
</Logo>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
<Canvas>
|
|
199
|
+
<Story
|
|
200
|
+
name="Custom Logos"
|
|
201
|
+
args={{
|
|
202
|
+
size: LogoSizes.Large,
|
|
203
|
+
}}
|
|
204
|
+
>
|
|
205
|
+
{(args) => (
|
|
206
|
+
<Logo {...args}>
|
|
207
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192.756 192.756">
|
|
208
|
+
<g fill-rule="evenodd" clip-rule="evenodd">
|
|
209
|
+
<path fill="#fff" d="M0 0h192.756v192.756H0V0z" />
|
|
210
|
+
<path
|
|
211
|
+
d="M59.73 117.578c-9.859-4.912-23.261-15.887-23.413-27.06C36.149 78.129 44.451 75.087 50 75.087c5.701 0 8.286 3.345 10.637 5.777 2.352-2.433 4.936-5.777 10.637-5.777 5.549 0 13.851 3.042 13.682 15.431-.151 11.173-13.553 22.148-23.412 27.06-.35.174-.629.262-.907.262s-.557-.088-.907-.262z"
|
|
212
|
+
fill="#c23c40"
|
|
213
|
+
/>
|
|
214
|
+
<path d="M184.252 78.225c-.027 1.111-.355 1.921-.799 2.399-.871.945-3.1 1.067-4.283.854-.668-.12-1.309-.167-1.66-.137-1.551.136-2.398 1.115-3.242 2.45l-10.377 16.423-.154 6.727c-.033 1.535.287 2.881 2.066 2.799l2.865-.135c1.725-.08 3.35 1.029 3.4 2.867.064 2.359-1.807 3.393-3.943 3.275-1.338-.072-2.559-.275-3.666-.477-2.355-.428-3.977-.279-6.332 0-2.189.262-3.879.43-5.055.4-1.895-.045-3.725-.988-3.91-2.957-.178-1.898 1.297-3.191 3.186-3.041l2.5.199c.963.076 2.232-.406 2.256-1.533l.152-7.555-10.803-17.373c-.588-.948-1.52-1.538-2.42-1.877-1.156-.435-2.35-.464-3.568-.309-.988.125-1.16.01-1.414-.001-2.166-.093-3.1-1.048-2.988-3.064.139-2.505 1.543-2.885 3.936-2.885.412 0 1.391.005 3.344.285 1.43.206 2.609.099 3.531.067 2.436-.083 4.973-.545 7.377-.479 1.334.037 2.285.338 2.943.667.92.459 1.506 1.161 1.473 2.348-.031 1.144-.484 2.161-1.139 2.645-.496.367-1.848.417-2.902.417-1.92-.046-1.844 1.094-1.24 1.651l7.008 11.204 7.336-11.487c.148-.59.916-1.602-1.146-1.365-.637.073-.715.087-1.48.064-1.1-.033-1.854-.247-2.266-.544-1.348-.974-1.18-1.916-.943-3.322.17-1.019.986-1.48 1.877-1.744.928-.275 1.896-.259 2.871-.267 1.105-.009 2.221.111 3.295.272 1.99.297 3.414.306 5.398.066 1.379-.167 3.006-.5 4.559-.488 1.062.008 2.092.056 2.984.551.867.484 1.4 1.278 1.373 2.41zM31.561 112.531c-.116 2.684-2.242 2.799-4.345 2.799-2.14 0-4.302-.387-6.455-.387-2.396 0-4.788.17-7.178.396-2.739.262-4.681-.342-4.576-2.869.07-1.703 1.047-2.818 3.117-2.814l2.783.004c1.497.002 2.085-1.572 2.082-2.721l-.098-23.305c-.004-1.258-.422-2.46-1.917-2.431l-3.169.064c-2.091.042-3.322-1.33-3.301-3.214.026-2.372 1.934-2.958 3.873-2.897.678.021 2.127.043 3.023.136 1.53.157 3.13.141 4.67.141 2.369 0 4.682-.372 7.012-.372 2.197 0 4.145.564 4.274 3.233.078 1.624-1.636 2.807-3.479 2.776l-2.155-.035c-1.634-.027-2.604 1.158-2.587 2.501l.294 23.462c.028 2.24 1.216 2.869 3.008 2.85l2.109-.025c1.58-.02 3.098.777 3.015 2.708zM135.311 78.065c-.084 2.73-1.73 3.344-4.244 3.344 0-.041-4.09-.461-4.09 1.686v26.908c0 3.244-1.57 6.314-5.01 6.314-2.217 0-4.641-1.143-5.557-3.271l-12.846-29.84-.061 23.363c-.004 1.895.496 2.963 2.393 2.908l2.344-.066c2.098-.061 3.543 1.082 3.482 3.266-.066 2.418-1.879 2.932-3.93 2.932-2.467 0-4.818-.783-7.248-.666-2.58.123-5.081.484-7.668.484-2.227 0-3.915-.693-3.915-3.283 0-2.166 1.352-2.596 3.254-2.637l2.58-.055c1.54-.031 2.489-.662 2.489-1.975V82.78c0-1.262-.493-1.895-2.204-1.835l-2.213.079c-2.608.092-3.612-.421-3.543-3.023.061-2.28 1.595-3.273 4.478-3.052 1.569.12 3.148.301 4.722.301 1.721 0 3.434-.042 5.148-.042 2.891 0 4.029 1.753 5.182 4.37l11.777 26.751V83.664c0-1.012-.412-1.794-.732-2.11-.322-.316-.822-.481-1.475-.478l-2.693.019c-1.971.012-3.658-.844-3.623-2.685.055-3.006 2.82-3.496 5.285-3.399 2.385.094 4.965.742 7.32.667 2.227-.071 4.461-.646 6.697-.533 2.885.147 3.951 1.244 3.901 2.92zM179.455 107.746c1.111 0 2.096.396 2.951 1.186.896.832 1.346 1.836 1.346 3.012 0 1.426-.506 2.523-1.518 3.297a4.258 4.258 0 0 1-2.643.902h-.211c-1.004 0-1.926-.42-2.766-1.26-.838-.84-1.258-1.791-1.258-2.852v-.174c0-1.16.398-2.135 1.197-2.926.801-.788 1.767-1.185 2.902-1.185zm.408 3.951c.346 0 .615-.082.809-.246.193-.166.291-.363.291-.594a.77.77 0 0 0-.266-.58c-.178-.164-.422-.246-.736-.246h-1.543v1.666h1.445zm-.308-3.345c-.814 0-1.576.279-2.283.84-.891.699-1.334 1.646-1.334 2.84 0 .914.359 1.742 1.08 2.486.721.746 1.533 1.117 2.438 1.117h.148c.906 0 1.723-.367 2.451-1.104s1.092-1.6 1.092-2.588c0-.971-.359-1.812-1.08-2.523-.719-.713-1.557-1.068-2.512-1.068zm-1.741 1.171h2.221c.504 0 .902.141 1.199.42.264.256.395.561.395.914 0 .338-.125.633-.377.883-.25.252-.6.377-1.043.377l-.174-.012 1.408 2.172h-.703l-1.359-2.074h-.963v2.074h-.604v-4.754z" />
|
|
215
|
+
</g>
|
|
216
|
+
</svg>
|
|
217
|
+
</Logo>
|
|
218
|
+
)}
|
|
219
|
+
</Story>
|
|
220
|
+
</Canvas>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { render } from "@testing-library/react";
|
|
3
|
+
import { axe } from "jest-axe";
|
|
4
|
+
import renderer from "react-test-renderer";
|
|
5
|
+
|
|
6
|
+
import Logo from "./Logo";
|
|
7
|
+
import { LogoNames, LogoSizes } from "./LogoTypes";
|
|
8
|
+
|
|
9
|
+
describe("Logo Accessibility", () => {
|
|
10
|
+
it("passes axe accessibility test", async () => {
|
|
11
|
+
const { container } = render(<Logo name={LogoNames.NYPLBlack} />);
|
|
12
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
describe("Logo", () => {
|
|
17
|
+
it("consoles a warning if both name and children are passed to Logo", () => {
|
|
18
|
+
const warn = jest.spyOn(console, "warn");
|
|
19
|
+
render(
|
|
20
|
+
<Logo name={LogoNames.NYPLBlack}>
|
|
21
|
+
<svg viewBox="0 0 24 14" xmlns="http://www.w3.org/2000/svg">
|
|
22
|
+
<path
|
|
23
|
+
fillRule="evenodd"
|
|
24
|
+
clipRule="evenodd"
|
|
25
|
+
d="M10.526 12.871L.263 1.676 1.737.324 12 11.52 22.263.324l1.474 1.352L13.474 12.87a2 2 0 01-2.948 0z"
|
|
26
|
+
/>
|
|
27
|
+
</svg>
|
|
28
|
+
</Logo>
|
|
29
|
+
);
|
|
30
|
+
expect(warn).toHaveBeenCalledWith(
|
|
31
|
+
"Logo accepts either a `name` prop or an `svg` element child. It can not accept both."
|
|
32
|
+
);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("consoles a warning if both name and children are not passed", () => {
|
|
36
|
+
const warn = jest.spyOn(console, "warn");
|
|
37
|
+
render(<Logo />);
|
|
38
|
+
expect(warn).toHaveBeenCalledWith(
|
|
39
|
+
"Pass a logo `name` prop or an SVG child to `Logo` to ensure a logo appears."
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("renders a logo based on the logo `name` prop", () => {
|
|
44
|
+
const { container } = render(<Logo name={LogoNames.NYPLBlack} />);
|
|
45
|
+
expect(container.querySelector("svg")).toBeInTheDocument();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// NOTE: the svg logo is dynamically generated by the "svgr" package. At build
|
|
49
|
+
// time, it generate the `title` element but it doesn't generate it for tests.
|
|
50
|
+
// In order to test this, we can check the `title` attribute in the svg
|
|
51
|
+
// element itself. Inspect the `Logo` in Storybook to see the `title` element.
|
|
52
|
+
it("renders a title element", () => {
|
|
53
|
+
const { container, rerender } = render(<Logo name={LogoNames.NYPLBlack} />);
|
|
54
|
+
expect(container.querySelector("svg")).toHaveAttribute(
|
|
55
|
+
"title",
|
|
56
|
+
"logo_nypl_full_black logo"
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
rerender(<Logo name={LogoNames.NYPLBlack} title="title content" />);
|
|
60
|
+
expect(container.querySelector("svg")).toHaveAttribute(
|
|
61
|
+
"title",
|
|
62
|
+
"title content"
|
|
63
|
+
);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("renders a logo based on the child", () => {
|
|
67
|
+
const { container } = render(
|
|
68
|
+
<Logo>
|
|
69
|
+
<svg viewBox="0 0 24 14" xmlns="http://www.w3.org/2000/svg">
|
|
70
|
+
<path
|
|
71
|
+
fillRule="evenodd"
|
|
72
|
+
clipRule="evenodd"
|
|
73
|
+
d="M10.526 12.871L.263 1.676 1.737.324 12 11.52 22.263.324l1.474 1.352L13.474 12.87a2 2 0 01-2.948 0z"
|
|
74
|
+
/>
|
|
75
|
+
</svg>
|
|
76
|
+
</Logo>
|
|
77
|
+
);
|
|
78
|
+
expect(container.querySelector("svg")).toBeInTheDocument();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("renders the UI snapshot correctly", () => {
|
|
82
|
+
const standard = renderer
|
|
83
|
+
.create(<Logo id="test-logo" name={LogoNames.NYPLBlack} />)
|
|
84
|
+
.toJSON();
|
|
85
|
+
const withCustomSize = renderer
|
|
86
|
+
.create(
|
|
87
|
+
<Logo
|
|
88
|
+
id="test-logo-size"
|
|
89
|
+
name={LogoNames.NYPLBlack}
|
|
90
|
+
size={LogoSizes.Large}
|
|
91
|
+
/>
|
|
92
|
+
)
|
|
93
|
+
.toJSON();
|
|
94
|
+
|
|
95
|
+
expect(standard).toMatchSnapshot();
|
|
96
|
+
expect(withCustomSize).toMatchSnapshot();
|
|
97
|
+
});
|
|
98
|
+
});
|