@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,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
|
/>
|
|
@@ -47,7 +51,7 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
47
51
|
| Component Version | DS Version |
|
|
48
52
|
| ----------------- | ---------- |
|
|
49
53
|
| Added | `0.7.0` |
|
|
50
|
-
| Latest | `0.25.
|
|
54
|
+
| Latest | `0.25.11` |
|
|
51
55
|
|
|
52
56
|
<Description of={List} />
|
|
53
57
|
|
|
@@ -59,8 +63,15 @@ export const animalCrossingDefinitions = [
|
|
|
59
63
|
},
|
|
60
64
|
{
|
|
61
65
|
term: "Golden trout",
|
|
62
|
-
definition:
|
|
63
|
-
|
|
66
|
+
definition: (
|
|
67
|
+
<p>
|
|
68
|
+
The golden trout is a <b>beautifully</b> colored fish that can only live
|
|
69
|
+
in very clean waters. They are difficult to come across since they are
|
|
70
|
+
found only in high mountain streams. As a side note, I find it much
|
|
71
|
+
easier to appreciate fish that aren't such prima donnas about
|
|
72
|
+
everything.
|
|
73
|
+
</p>
|
|
74
|
+
),
|
|
64
75
|
},
|
|
65
76
|
{
|
|
66
77
|
term: "Rainbowfish",
|
|
@@ -69,8 +80,20 @@ export const animalCrossingDefinitions = [
|
|
|
69
80
|
},
|
|
70
81
|
{
|
|
71
82
|
term: "Suckerfish",
|
|
72
|
-
definition:
|
|
73
|
-
|
|
83
|
+
definition: (
|
|
84
|
+
<p>
|
|
85
|
+
The{" "}
|
|
86
|
+
<Link href="https://animalcrossing.fandom.com/wiki/Suckerfish">
|
|
87
|
+
suckerfish
|
|
88
|
+
</Link>{" "}
|
|
89
|
+
is a curious fish that likes to attach itself with its sucker mouth to
|
|
90
|
+
larger marine animals. The benefit to the suckerfish is that it gets to
|
|
91
|
+
eat smaller parasites and dead skin off the host's body. Amusingly, some
|
|
92
|
+
people have used suckerfish on cords to catch large turtles with the
|
|
93
|
+
fish's own suction! I imagine this practice is the cause of some awkward
|
|
94
|
+
conversations between fish and turtle, eh wot?
|
|
95
|
+
</p>
|
|
96
|
+
),
|
|
74
97
|
},
|
|
75
98
|
];
|
|
76
99
|
export const itemGroups = [
|
|
@@ -118,17 +141,21 @@ export const definitions = [
|
|
|
118
141
|
|
|
119
142
|
<Canvas withToolbar>
|
|
120
143
|
<Story
|
|
121
|
-
name="List"
|
|
144
|
+
name="List with Controls"
|
|
122
145
|
args={{
|
|
146
|
+
additionalStyles: undefined,
|
|
147
|
+
className: undefined,
|
|
123
148
|
id: "nypl-list",
|
|
149
|
+
inline: false,
|
|
150
|
+
listItems: undefined,
|
|
124
151
|
noStyling: false,
|
|
125
152
|
title: "Middle-Earth Peoples",
|
|
126
|
-
type: ListTypes.Unordered,
|
|
153
|
+
type: "ListTypes.Unordered",
|
|
127
154
|
}}
|
|
128
155
|
>
|
|
129
156
|
{(args) => (
|
|
130
|
-
<List {...args} type={
|
|
131
|
-
{
|
|
157
|
+
<List {...args} type={enumValues.getValue(args.type)}>
|
|
158
|
+
{args.type !== "ListTypes.Definition"
|
|
132
159
|
? itemGroups.map((item, i) => <li key={i}>{item}</li>)
|
|
133
160
|
: definitions.map((item, i) => [
|
|
134
161
|
<dt key={`dt_${i}`}>{item.term}</dt>,
|
|
@@ -139,7 +166,7 @@ export const definitions = [
|
|
|
139
166
|
</Story>
|
|
140
167
|
</Canvas>
|
|
141
168
|
|
|
142
|
-
<ArgsTable story="List" />
|
|
169
|
+
<ArgsTable story="List with Controls" />
|
|
143
170
|
|
|
144
171
|
## Definition List
|
|
145
172
|
|
|
@@ -163,13 +190,14 @@ This type of list renders `dt` and `dd` elements.
|
|
|
163
190
|
title: "Middle-Earth Peoples",
|
|
164
191
|
}}
|
|
165
192
|
argTypes={{
|
|
166
|
-
|
|
193
|
+
inline: { control: false },
|
|
194
|
+
noStyling: { control: false },
|
|
195
|
+
type: { control: false },
|
|
167
196
|
}}
|
|
168
197
|
parameters={{
|
|
169
198
|
design: {
|
|
170
199
|
type: "figma",
|
|
171
|
-
url:
|
|
172
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
200
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
173
201
|
},
|
|
174
202
|
}}
|
|
175
203
|
>
|
|
@@ -196,13 +224,14 @@ An example with HTML elements inside of the `dd` elements.
|
|
|
196
224
|
title: "Details",
|
|
197
225
|
}}
|
|
198
226
|
argTypes={{
|
|
227
|
+
inline: { control: false },
|
|
228
|
+
noStyling: { control: false },
|
|
199
229
|
type: { table: { disable: true } },
|
|
200
230
|
}}
|
|
201
231
|
parameters={{
|
|
202
232
|
design: {
|
|
203
233
|
type: "figma",
|
|
204
|
-
url:
|
|
205
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
234
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A5178",
|
|
206
235
|
},
|
|
207
236
|
}}
|
|
208
237
|
>
|
|
@@ -330,7 +359,9 @@ const fishDefinitions = [
|
|
|
330
359
|
title: "Animal Crossing Fish",
|
|
331
360
|
}}
|
|
332
361
|
argTypes={{
|
|
333
|
-
|
|
362
|
+
inline: { control: false },
|
|
363
|
+
noStyling: { control: false },
|
|
364
|
+
type: { control: false },
|
|
334
365
|
}}
|
|
335
366
|
>
|
|
336
367
|
{(args) => <List {...args} type={ListTypes.Definition} />}
|
|
@@ -10,7 +10,7 @@ const fishArray = ["Mahi-mahi", "Golden trout", "Rainbowfish", "Suckerfish"];
|
|
|
10
10
|
const fishDefinitions = [
|
|
11
11
|
{
|
|
12
12
|
term: "Mahi-mahi",
|
|
13
|
-
definition:
|
|
13
|
+
definition: <p>The mahi-mahi is an ocean fish known...</p>,
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
term: "Golden trout",
|
|
@@ -8,7 +8,7 @@ import generateUUID from "../../helpers/generateUUID";
|
|
|
8
8
|
|
|
9
9
|
interface DefinitionProps {
|
|
10
10
|
term: string;
|
|
11
|
-
definition: string;
|
|
11
|
+
definition: string | JSX.Element;
|
|
12
12
|
}
|
|
13
13
|
export interface ListProps {
|
|
14
14
|
/** Optionally pass in additional Chakra-based styles. */
|
|
@@ -98,7 +98,7 @@ export default function List(props: React.PropsWithChildren<ListProps>) {
|
|
|
98
98
|
*/
|
|
99
99
|
const checkListChildrenError = (listType: ListTypes) => {
|
|
100
100
|
React.Children.map(children, (child: React.ReactElement) => {
|
|
101
|
-
if (child?.type !== "li" && child?.props?.mdxType !== "li") {
|
|
101
|
+
if (child && child?.type !== "li" && child?.props?.mdxType !== "li") {
|
|
102
102
|
console.warn(
|
|
103
103
|
`Direct children of \`List\` (${listType}) should be \`<li>\`s.`
|
|
104
104
|
);
|
|
@@ -0,0 +1,222 @@
|
|
|
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.11` |
|
|
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
|
+
args.name.indexOf("Negative") !== -1
|
|
82
|
+
? {
|
|
83
|
+
backgroundColor: "var(--nypl-colors-ui-gray-xdark)",
|
|
84
|
+
display: "inline-block",
|
|
85
|
+
padding: "var(--nypl-space-l)",
|
|
86
|
+
width: "100%",
|
|
87
|
+
}
|
|
88
|
+
: undefined
|
|
89
|
+
}
|
|
90
|
+
>
|
|
91
|
+
<Logo
|
|
92
|
+
name={namesEnumValues.getValue(args.name)}
|
|
93
|
+
size={sizesEnumValues.getValue(args.size)}
|
|
94
|
+
title={args.title}
|
|
95
|
+
/>
|
|
96
|
+
</div>
|
|
97
|
+
)}
|
|
98
|
+
</Story>
|
|
99
|
+
</Canvas>
|
|
100
|
+
|
|
101
|
+
<ArgsTable story="Logo with Controls" />
|
|
102
|
+
|
|
103
|
+
export const logoRow = (logo, opts = {}) => {
|
|
104
|
+
// We'll use this setup function to render all the logos in a list item.
|
|
105
|
+
// Some logos display better with a dark background.
|
|
106
|
+
const styles = { textAlign: "center" };
|
|
107
|
+
const { size = LogoSizes.Large, displayValue } = opts;
|
|
108
|
+
let key = logo;
|
|
109
|
+
if (logo.indexOf("White") !== -1 || logo.indexOf("Negative") !== -1) {
|
|
110
|
+
styles.backgroundColor = "var(--nypl-colors-ui-gray-xdark)";
|
|
111
|
+
styles.color = "var(--nypl-colors-ui-white)";
|
|
112
|
+
styles.paddingBottom = "var(--nypl-space-l)";
|
|
113
|
+
styles.paddingTop = "var(--nypl-space-l)";
|
|
114
|
+
}
|
|
115
|
+
if (size !== LogoSizes.Large) {
|
|
116
|
+
key += `-${size}`;
|
|
117
|
+
}
|
|
118
|
+
return (
|
|
119
|
+
<div style={styles} key={key}>
|
|
120
|
+
<Heading level={HeadingLevels.Four}>{displayValue}</Heading>
|
|
121
|
+
<Logo name={LogoNames[logo]} size={size} />
|
|
122
|
+
</div>
|
|
123
|
+
);
|
|
124
|
+
};
|
|
125
|
+
export const logos = [];
|
|
126
|
+
export const sizes = [];
|
|
127
|
+
for (const logo in LogoNames) {
|
|
128
|
+
logos.push(logoRow(logo, { displayValue: `LogoNames.${logo}` }));
|
|
129
|
+
}
|
|
130
|
+
for (const logoSize in LogoSizes) {
|
|
131
|
+
sizes.push(
|
|
132
|
+
logoRow("NYPLBlack", {
|
|
133
|
+
displayValue: `LogoSizes.${logoSize}`,
|
|
134
|
+
size: LogoSizes[logoSize],
|
|
135
|
+
})
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export const allLogosGrid = (list) => (
|
|
140
|
+
<SimpleGrid columns={1}>{list}</SimpleGrid>
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
## Accessibility
|
|
144
|
+
|
|
145
|
+
For accessibility purposes, every DS `Logo` will render the `svg` element with
|
|
146
|
+
its `svg` file name in the `title` element. The default text in the `title` element
|
|
147
|
+
is the logo's code name. Pass in better descriptive text in the `title` prop
|
|
148
|
+
when using the `Logo` component in your application. This will give screenreaders
|
|
149
|
+
a better descriptive title for the `svg` graphic.
|
|
150
|
+
|
|
151
|
+
## All Logos
|
|
152
|
+
|
|
153
|
+
The `Logo` component contains the logos most commonly used by are listed available
|
|
154
|
+
logos are listed in the `LogoNames` enum in `src/components/Logos/LogoTypes.tsx`.
|
|
155
|
+
|
|
156
|
+
If you feel a necessary logo should be added to the `Logo` component, please reach out
|
|
157
|
+
to the DS team.
|
|
158
|
+
|
|
159
|
+
<Canvas withToolbar>
|
|
160
|
+
<Story name="All Logos">{allLogosGrid(logos)}</Story>
|
|
161
|
+
</Canvas>
|
|
162
|
+
|
|
163
|
+
## Logo Sizes
|
|
164
|
+
|
|
165
|
+
Update the size of the `Logo` component by passing the `size` prop with a value from
|
|
166
|
+
`LogoSizes`. The `LogoSizes` enum can be found in`src/components/Logo/LogoTypes.tsx`.
|
|
167
|
+
|
|
168
|
+
Note: `LogoSizes.Default` sets the width to `100%` and the logo will expand to
|
|
169
|
+
fill the full width of the parent element.
|
|
170
|
+
|
|
171
|
+
```jsx
|
|
172
|
+
// Example
|
|
173
|
+
<Logo name={LogoNames.NYPLBlack} size={LogoSizes.Large} />
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
<Canvas>
|
|
177
|
+
<Story name="Logo Sizes">{allLogosGrid(sizes)}</Story>
|
|
178
|
+
</Canvas>
|
|
179
|
+
|
|
180
|
+
## Custom Logos
|
|
181
|
+
|
|
182
|
+
If you'd like to pass a custom `svg` to your application, you can pass it a
|
|
183
|
+
child to the `Logo` component.
|
|
184
|
+
|
|
185
|
+
```jsx
|
|
186
|
+
<Logo {...props}>
|
|
187
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192.756 192.756">
|
|
188
|
+
<g fill-rule="evenodd" clip-rule="evenodd">
|
|
189
|
+
<path fill="#fff" d="M0 0h192.756v192.756H0V0z" />
|
|
190
|
+
<path
|
|
191
|
+
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"
|
|
192
|
+
fill="#c23c40"
|
|
193
|
+
/>
|
|
194
|
+
<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" />
|
|
195
|
+
</g>
|
|
196
|
+
</svg>
|
|
197
|
+
</Logo>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
<Canvas>
|
|
201
|
+
<Story
|
|
202
|
+
name="Custom Logos"
|
|
203
|
+
args={{
|
|
204
|
+
size: LogoSizes.Large,
|
|
205
|
+
}}
|
|
206
|
+
>
|
|
207
|
+
{(args) => (
|
|
208
|
+
<Logo {...args}>
|
|
209
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192.756 192.756">
|
|
210
|
+
<g fill-rule="evenodd" clip-rule="evenodd">
|
|
211
|
+
<path fill="#fff" d="M0 0h192.756v192.756H0V0z" />
|
|
212
|
+
<path
|
|
213
|
+
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"
|
|
214
|
+
fill="#c23c40"
|
|
215
|
+
/>
|
|
216
|
+
<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" />
|
|
217
|
+
</g>
|
|
218
|
+
</svg>
|
|
219
|
+
</Logo>
|
|
220
|
+
)}
|
|
221
|
+
</Story>
|
|
222
|
+
</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
|
+
});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Icon as ChakraIcon, Box, useStyleConfig } from "@chakra-ui/react";
|
|
3
|
+
|
|
4
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
5
|
+
import { LogoNames, LogoSizes } from "./LogoTypes";
|
|
6
|
+
import logoSvgs from "./LogoSvgs";
|
|
7
|
+
|
|
8
|
+
export interface LogoProps {
|
|
9
|
+
/** Optionally pass in additional Chakra-based styles. */
|
|
10
|
+
additionalStyles?: { [key: string]: any };
|
|
11
|
+
/** Optional className that will be added to the parent element */
|
|
12
|
+
className?: string;
|
|
13
|
+
/** Logos designated as decorative will be ignored by screenreaders. False
|
|
14
|
+
* by default. */
|
|
15
|
+
decorative?: boolean;
|
|
16
|
+
/** ID that other components can cross reference for accessibility purposes */
|
|
17
|
+
id?: string;
|
|
18
|
+
/** The name of the logo you want to use. */
|
|
19
|
+
name?: LogoNames;
|
|
20
|
+
/** Sets the logo size. */
|
|
21
|
+
size?: LogoSizes;
|
|
22
|
+
/** For accessibility purposes, the text passed in the `title` prop gets
|
|
23
|
+
* rendered in a `title` element in the SVG. This descriptive text is not
|
|
24
|
+
* visible but is needed for screenreaders to describe the graphic. */
|
|
25
|
+
title?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The `Logo` component renders SVG-based logos and color variants that are
|
|
30
|
+
* commonly used by the New York Public Library.
|
|
31
|
+
*/
|
|
32
|
+
export default function Logo(props: React.PropsWithChildren<LogoProps>) {
|
|
33
|
+
const {
|
|
34
|
+
additionalStyles = {},
|
|
35
|
+
children,
|
|
36
|
+
className,
|
|
37
|
+
decorative = false,
|
|
38
|
+
id = generateUUID(),
|
|
39
|
+
name,
|
|
40
|
+
size = LogoSizes.Medium,
|
|
41
|
+
title = `${name} logo`,
|
|
42
|
+
} = props;
|
|
43
|
+
const styles = useStyleConfig("Logo", {
|
|
44
|
+
size,
|
|
45
|
+
});
|
|
46
|
+
const logoProps = {
|
|
47
|
+
"aria-hidden": decorative,
|
|
48
|
+
className,
|
|
49
|
+
id,
|
|
50
|
+
role: "img",
|
|
51
|
+
title,
|
|
52
|
+
};
|
|
53
|
+
let childSVG = null;
|
|
54
|
+
|
|
55
|
+
// Component prop validation
|
|
56
|
+
if (name && children) {
|
|
57
|
+
console.warn(
|
|
58
|
+
"Logo accepts either a `name` prop or an `svg` element child. It can not accept both."
|
|
59
|
+
);
|
|
60
|
+
return null;
|
|
61
|
+
} else if (!name && !children) {
|
|
62
|
+
console.warn(
|
|
63
|
+
"Pass a logo `name` prop or an SVG child to `Logo` to ensure a logo appears."
|
|
64
|
+
);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// The user wants to render an existing logo. Load the logo and render it
|
|
69
|
+
// as a component through Chakra's Icon component. Otherwise, we're going to
|
|
70
|
+
// render the SVG child with NYPL-theme styling.
|
|
71
|
+
if (name) {
|
|
72
|
+
const SvgComponent: any = logoSvgs[name];
|
|
73
|
+
return (
|
|
74
|
+
<ChakraIcon
|
|
75
|
+
as={SvgComponent}
|
|
76
|
+
{...logoProps}
|
|
77
|
+
__css={{ ...styles, ...additionalStyles }}
|
|
78
|
+
/>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// If no `name` prop was passed, we expect a child SVG element to be passed.
|
|
83
|
+
// Apply logo props to the SVG child.
|
|
84
|
+
if (
|
|
85
|
+
(children as JSX.Element).type === "svg" ||
|
|
86
|
+
(children as JSX.Element).props.type === "svg" ||
|
|
87
|
+
(children as JSX.Element).props.mdxType === "svg"
|
|
88
|
+
) {
|
|
89
|
+
childSVG = React.cloneElement(children as JSX.Element, {
|
|
90
|
+
...logoProps,
|
|
91
|
+
});
|
|
92
|
+
} else {
|
|
93
|
+
console.warn("You must pass an `svg` element to the `Logo` component.");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return <Box __css={styles}>{childSVG}</Box>;
|
|
97
|
+
}
|