@nypl/design-system-react-components 0.25.5 → 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 +91 -1
- package/README.md +1 -1
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
- 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 +1 -21
- package/dist/components/Icons/IconTypes.d.ts +1 -23
- package/dist/components/Image/Image.d.ts +11 -3
- package/dist/components/Image/ImageTypes.d.ts +3 -1
- package/dist/components/Link/LinkTypes.d.ts +1 -0
- 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 +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 +3 -2
- package/dist/components/SearchBar/SearchBar.d.ts +10 -2
- package/dist/components/Select/Select.d.ts +5 -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 +48 -0
- package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
- package/dist/design-system-react-components.cjs.development.js +5989 -5490
- 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 +6057 -5551
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/styles.css +2 -2
- package/dist/theme/components/breadcrumb.d.ts +9 -0
- 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/notification.d.ts +8 -4
- 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 +71 -0
- package/dist/theme/foundations/spacing.d.ts +2 -0
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +2 -3
- package/src/__tests__/utils/utils.test.ts +23 -1
- package/src/components/Accordion/Accordion.stories.mdx +15 -14
- 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 +50 -14
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +20 -0
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +198 -0
- 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 -8
- 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 +246 -64
- package/src/components/Card/Card.test.tsx +45 -22
- package/src/components/Card/Card.tsx +26 -13
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
- 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 +14 -17
- 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 +8 -6
- package/src/components/DatePicker/DatePicker.tsx +10 -6
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
- 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 -75
- package/src/components/Icons/Icon.tsx +4 -5
- package/src/components/Icons/IconSvgs.tsx +2 -42
- package/src/components/Icons/IconTypes.tsx +1 -24
- package/src/components/Image/Image.stories.mdx +214 -104
- package/src/components/Image/Image.test.tsx +10 -0
- package/src/components/Image/Image.tsx +21 -10
- package/src/components/Image/ImageTypes.ts +2 -0
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
- package/src/components/Label/Label.stories.mdx +21 -20
- package/src/components/Link/Link.stories.mdx +103 -53
- package/src/components/Link/Link.test.tsx +108 -7
- package/src/components/Link/Link.tsx +58 -19
- package/src/components/Link/LinkTypes.tsx +1 -0
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -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 +96 -40
- package/src/components/Notification/Notification.test.tsx +62 -16
- package/src/components/Notification/Notification.tsx +26 -9
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
- package/src/components/Pagination/Pagination.stories.mdx +18 -8
- package/src/components/Pagination/Pagination.tsx +1 -1
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
- package/src/components/Placeholder/Placeholder.tsx +7 -14
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
- 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 +114 -22
- package/src/components/SearchBar/SearchBar.stories.mdx +111 -33
- package/src/components/SearchBar/SearchBar.tsx +57 -33
- package/src/components/Select/Select.stories.mdx +177 -66
- package/src/components/Select/Select.test.tsx +2 -2
- package/src/components/Select/Select.tsx +22 -12
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
- package/src/components/Slider/Slider.stories.mdx +74 -23
- package/src/components/Slider/Slider.test.tsx +35 -0
- package/src/components/Slider/Slider.tsx +22 -11
- 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 +57 -49
- 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 +200 -0
- package/src/components/Toggle/Toggle.test.tsx +140 -0
- package/src/components/Toggle/Toggle.tsx +123 -0
- package/src/components/Toggle/ToggleSizes.tsx +4 -0
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
- package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
- package/src/docs/Chakra.stories.mdx +5 -8
- package/src/docs/Intro.stories.mdx +2 -2
- package/src/index.ts +13 -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 +14 -4
- package/src/theme/components/button.ts +5 -12
- package/src/theme/components/card.ts +9 -7
- 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 +7 -7
- package/src/theme/components/heading.ts +13 -11
- package/src/theme/components/helperErrorText.ts +1 -1
- package/src/theme/components/icon.ts +2 -2
- package/src/theme/components/image.ts +9 -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 +9 -7
- 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 +69 -0
- package/src/theme/components/videoPlayer.ts +0 -2
- package/src/theme/foundations/global.ts +2 -2
- package/src/theme/foundations/spacing.ts +3 -0
- package/src/theme/foundations/typography.ts +84 -12
- package/src/theme/index.ts +8 -0
- package/src/utils/componentCategories.ts +4 -2
- 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,21 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Meta,
|
|
3
|
-
Story,
|
|
4
|
-
Canvas,
|
|
5
|
-
ArgsTable,
|
|
6
|
-
Description,
|
|
7
|
-
} from "@storybook/addon-docs/blocks";
|
|
8
|
-
import { withDesign } from "storybook-addon-designs";
|
|
9
1
|
import { Stack } from "@chakra-ui/react";
|
|
2
|
+
import { Canvas, Meta } from "@storybook/addon-docs";
|
|
3
|
+
import { withDesign } from "storybook-addon-designs";
|
|
10
4
|
|
|
11
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
12
5
|
import Icon from "../Icons/Icon";
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
IconSizes,
|
|
16
|
-
IconNames,
|
|
17
|
-
LogoNames,
|
|
18
|
-
} from "../Icons/IconTypes";
|
|
6
|
+
import { IconColors, IconSizes, IconNames } from "../Icons/IconTypes";
|
|
7
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
19
8
|
import DSProvider from "../../theme/provider";
|
|
20
9
|
|
|
21
10
|
<Meta
|
|
@@ -24,8 +13,7 @@ import DSProvider from "../../theme/provider";
|
|
|
24
13
|
parameters={{
|
|
25
14
|
design: {
|
|
26
15
|
type: "figma",
|
|
27
|
-
url:
|
|
28
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=10975%3A16",
|
|
16
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=10975%3A16",
|
|
29
17
|
},
|
|
30
18
|
}}
|
|
31
19
|
/>
|
|
@@ -44,16 +32,14 @@ import DSProvider from "../../theme/provider";
|
|
|
44
32
|
## General Information
|
|
45
33
|
|
|
46
34
|
Use the NYPL Design System [Icon](https://nypl.github.io/nypl-design-system/storybook-static/?path=/docs/icon--control-props)
|
|
47
|
-
component to render and control icons
|
|
48
|
-
consuming apps.
|
|
35
|
+
component to render and control icons as `<svg>` elements within consuming apps.
|
|
49
36
|
|
|
50
37
|
The DS utilizes the `Filled` icons available in the [Material UI Design System](https://material-ui.com/components/material-icons/).
|
|
51
38
|
|
|
52
39
|
## Icon Examples
|
|
53
40
|
|
|
54
|
-
The graphic of the `Icon` component is handled through the `IconNames`
|
|
55
|
-
|
|
56
|
-
[Icon](https://nypl.github.io/nypl-design-system/storybook-static/?path=/docs/icon--control-props)
|
|
41
|
+
The graphic of the `Icon` component is handled through the `IconNames` enum. To see all graphic options
|
|
42
|
+
for `Icon`, please refer to the [Icon](https://nypl.github.io/nypl-design-system/storybook-static/?path=/docs/icon--control-props)
|
|
57
43
|
Storybook page.
|
|
58
44
|
|
|
59
45
|
<Canvas>
|
|
@@ -79,16 +65,6 @@ Storybook page.
|
|
|
79
65
|
size={IconSizes.ExtraExtraExtraLarge}
|
|
80
66
|
name={IconNames.SpeakerNotes}
|
|
81
67
|
/>
|
|
82
|
-
<Icon
|
|
83
|
-
decorative
|
|
84
|
-
size={IconSizes.ExtraExtraExtraLarge}
|
|
85
|
-
name={LogoNames.LogoNypl}
|
|
86
|
-
/>
|
|
87
|
-
<Icon
|
|
88
|
-
decorative
|
|
89
|
-
size={IconSizes.ExtraExtraExtraLarge}
|
|
90
|
-
name={LogoNames.LogoBrooklyn}
|
|
91
|
-
/>
|
|
92
68
|
</Stack>
|
|
93
69
|
</DSProvider>
|
|
94
70
|
</Canvas>
|
|
@@ -99,8 +75,6 @@ Storybook page.
|
|
|
99
75
|
| `IconNames.Close` |
|
|
100
76
|
| `IconNames.ErrorOutline` |
|
|
101
77
|
| `IconNames.SpeakerNotes` |
|
|
102
|
-
| `LogoNames.LogoNypl` |
|
|
103
|
-
| `LogoNames.LogoBrooklyn` |
|
|
104
78
|
|
|
105
79
|
## Icon Sizes
|
|
106
80
|
|
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Meta,
|
|
3
|
-
Story,
|
|
4
|
-
Canvas,
|
|
5
|
-
ArgsTable,
|
|
6
|
-
Preview,
|
|
7
|
-
Description,
|
|
8
|
-
} from "@storybook/addon-docs/blocks";
|
|
1
|
+
import { Meta } from "@storybook/addon-docs";
|
|
9
2
|
import { withDesign } from "storybook-addon-designs";
|
|
10
3
|
|
|
11
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
12
|
-
import getCSSVariable from "../../helpers/getCSSVariable";
|
|
13
4
|
import Card from "../Card/Card";
|
|
14
5
|
import List from "../List/List";
|
|
15
6
|
import { ListTypes } from "../List/ListTypes";
|
|
7
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
16
8
|
import DSProvider from "../../theme/provider";
|
|
17
9
|
|
|
18
10
|
<Meta
|
|
@@ -21,8 +13,7 @@ import DSProvider from "../../theme/provider";
|
|
|
21
13
|
parameters={{
|
|
22
14
|
design: {
|
|
23
15
|
type: "figma",
|
|
24
|
-
url:
|
|
25
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=17249%3A13",
|
|
16
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=17249%3A13",
|
|
26
17
|
},
|
|
27
18
|
}}
|
|
28
19
|
/>
|
|
@@ -48,7 +39,6 @@ The DS spacing values are based on a root font size of `16px` (`1rem` = `16px`).
|
|
|
48
39
|
<DSProvider>
|
|
49
40
|
The following CSS variables are available through the DS.
|
|
50
41
|
|
|
51
|
-
|
|
52
42
|
| Variable Name | REM Equivalent | Pixel Equivalent | Visual Reference |
|
|
53
43
|
| ------------------- | -------------- | ---------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
54
44
|
| `--nypl-space-xxs` | `0.25rem` | `4px` | <div style={{ width: "var(--nypl-space-xxs)", backgroundColor: "var(--nypl-colors-ui-focus)" }}> </div> |
|
|
@@ -62,7 +52,6 @@ The following CSS variables are available through the DS.
|
|
|
62
52
|
|
|
63
53
|
</DSProvider>
|
|
64
54
|
|
|
65
|
-
|
|
66
55
|
## Section Spacing
|
|
67
56
|
|
|
68
57
|
In consuming apps, the major page sections should be separated vertically by `3rem` `(--nypl-space-xl`). This includes the space after the page global `header` and the space before the global `footer`.
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Meta,
|
|
3
|
-
Story,
|
|
4
|
-
Canvas,
|
|
5
|
-
ArgsTable,
|
|
6
|
-
Preview,
|
|
7
|
-
Description,
|
|
8
|
-
} from "@storybook/addon-docs/blocks";
|
|
1
|
+
import { Canvas, Meta } from "@storybook/addon-docs";
|
|
9
2
|
import { withDesign } from "storybook-addon-designs";
|
|
10
3
|
|
|
11
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
12
4
|
import Heading from "../Heading/Heading";
|
|
13
5
|
import { HeadingDisplaySizes, HeadingLevels } from "../Heading/HeadingTypes";
|
|
14
6
|
import List from "../List/List";
|
|
15
7
|
import { ListTypes } from "../List/ListTypes";
|
|
16
8
|
import Text from "../Text/Text";
|
|
17
9
|
import { TextDisplaySizes } from "../Text/TextTypes";
|
|
10
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
18
11
|
import DSProvider from "../../theme/provider";
|
|
19
12
|
|
|
20
13
|
<Meta
|
|
@@ -23,8 +16,7 @@ import DSProvider from "../../theme/provider";
|
|
|
23
16
|
parameters={{
|
|
24
17
|
design: {
|
|
25
18
|
type: "figma",
|
|
26
|
-
url:
|
|
27
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=10975%3A16",
|
|
19
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=10975%3A16",
|
|
28
20
|
},
|
|
29
21
|
}}
|
|
30
22
|
/>
|
|
@@ -67,52 +59,50 @@ Use the NYPL Design System [Heading](/docs/components-typography-styles-heading-
|
|
|
67
59
|
|
|
68
60
|
<DSProvider>
|
|
69
61
|
|
|
70
|
-
|
|
71
62
|
Each heading level has a default style and size, but those styles can be overridden using the `displaySize` prop. The display sizes are separate from semantic elements and may be used to override the default size and styling of the semantic HTML heading elements. For example, the `h1` element has the `Primary` style applied by default, but a new style can be applied through the `displaySize` prop. Any `displaySize` style can be applied to any `Heading` element.
|
|
72
63
|
|
|
73
64
|
<Heading level={HeadingLevels.One} displaySize={HeadingDisplaySizes.Primary}>
|
|
74
65
|
Primary Heading
|
|
75
66
|
</Heading>
|
|
76
67
|
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
68
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
69
|
+
| --------------- | --------- | ------------------------------- | ------------------------------------------------------ |
|
|
70
|
+
| **Font Size** | `2.25rem` | `fontSize: "heading.primary"` | `font-size: var(--nypl-fontSizes-heading-primary)` |
|
|
71
|
+
| **Font Weight** | `300` | `fontWeight: "heading.primary"` | `font-weight: var(--nypl-fontWeights-heading-primary)` |
|
|
72
|
+
| **Line Height** | `1.1` | n/a | n/a |
|
|
82
73
|
|
|
83
74
|
<Heading level={HeadingLevels.One} displaySize={HeadingDisplaySizes.Secondary}>
|
|
84
75
|
Secondary Heading
|
|
85
76
|
</Heading>
|
|
86
77
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
78
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
79
|
+
| --------------- | --------- | --------------------------------- | -------------------------------------------------------- |
|
|
80
|
+
| **Font Size** | `1.75rem` | `fontSize: "heading.secondary"` | `font-size: var(--nypl-fontSizes-heading-secondary)` |
|
|
81
|
+
| **Font Weight** | `500` | `fontWeight: "heading.secondary"` | `font-weight: var(--nypl-fontWeights-heading-secondary)` |
|
|
82
|
+
| **Line Height** | `1.25` | n/a | n/a |
|
|
92
83
|
|
|
93
84
|
<Heading level={HeadingLevels.One} displaySize={HeadingDisplaySizes.Tertiary}>
|
|
94
85
|
Tertiary Heading
|
|
95
86
|
</Heading>
|
|
96
87
|
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
|
|
|
88
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
89
|
+
| --------------- | ---------- | -------------------------------- | ------------------------------------------------------- |
|
|
90
|
+
| **Font Size** | `1.375rem` | `fontSize: "heading.tertiary"` | `font-size: var(--nypl-fontSizes-heading-tertiary)` |
|
|
91
|
+
| **Font Weight** | `500` | `fontWeight: "heading.tertiary"` | `font-weight: var(--nypl-fontWeights-heading-tertiary)` |
|
|
92
|
+
| **Line Height** | `1.25` | n/a | n/a |
|
|
102
93
|
|
|
103
94
|
<Heading level={HeadingLevels.One} displaySize={HeadingDisplaySizes.Callout}>
|
|
104
95
|
Callout Heading
|
|
105
96
|
</Heading>
|
|
106
97
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
111
|
-
|
|
|
98
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
99
|
+
| --------------- | --------- | ------------------------------- | ------------------------------------------------------ |
|
|
100
|
+
| **Font Size** | `1.25rem` | `fontSize: "heading.callout"` | `font-size: var(--nypl-fontSizes-heading-callout)` |
|
|
101
|
+
| **Font Weight** | `500` | `fontWeight: "heading.callout"` | `font-weight: var(--nypl-fontWeights-heading-callout)` |
|
|
102
|
+
| **Line Height** | `1.25` | n/a | n/a |
|
|
112
103
|
|
|
113
104
|
</DSProvider>
|
|
114
105
|
|
|
115
|
-
|
|
116
106
|
## Text Component
|
|
117
107
|
|
|
118
108
|
Use the NYPL Design System [Text](/docs/components-typography-styles-text--text) component to render a standard HTML `<p>` tag. The Text component is generally used for body copy, captions and secondary captions.
|
|
@@ -132,7 +122,6 @@ Use the NYPL Design System [Text](/docs/components-typography-styles-text--text)
|
|
|
132
122
|
|
|
133
123
|
<DSProvider>
|
|
134
124
|
|
|
135
|
-
|
|
136
125
|
The `displaySize` prop can be used to render a specific style from the DS default text styles.
|
|
137
126
|
|
|
138
127
|
- [Typography: Body Styles](https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10975%3A52)
|
|
@@ -140,39 +129,38 @@ The `displaySize` prop can be used to render a specific style from the DS defaul
|
|
|
140
129
|
|
|
141
130
|
<Text displaySize={TextDisplaySizes.Default}>Default</Text>
|
|
142
131
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
|
|
|
147
|
-
|
|
|
132
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
133
|
+
| --------------- | ------ | ---------------------------- | --------------------------------------------------- |
|
|
134
|
+
| **Font Size** | `1rem` | `fontSize: "text.default"` | `font-size: var(--nypl-fontSizes-text-default)` |
|
|
135
|
+
| **Font Weight** | `300` | `fontWeight: "text.default"` | `font-weight: var(--nypl-fontWeights-text-default)` |
|
|
136
|
+
| **Line Height** | `1.5` | `fontWeight: 1.5` | `font-weight: 1.5` |
|
|
148
137
|
|
|
149
138
|
<Text displaySize={TextDisplaySizes.Caption}>Caption</Text>
|
|
150
139
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
|
140
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
141
|
+
| --------------- | ---------- | ---------------------------- | --------------------------------------------------- |
|
|
142
|
+
| **Font Size** | `0.875rem` | `fontSize: "text.caption"` | `font-size: var(--nypl-fontSizes-text-caption)` |
|
|
143
|
+
| **Font Weight** | `300` | `fontWeight: "text.caption"` | `font-weight: var(--nypl-fontWeights-text-caption)` |
|
|
144
|
+
| **Line Height** | `1.25` | `fontWeight: 1.25` | `font-weight: 1.25` |
|
|
156
145
|
|
|
157
146
|
<Text displaySize={TextDisplaySizes.Tag}>Tag</Text>
|
|
158
147
|
|
|
159
|
-
|
|
|
160
|
-
|
|
|
161
|
-
|
|
|
162
|
-
|
|
|
163
|
-
|
|
|
148
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
149
|
+
| --------------- | --------- | ------------------------ | ----------------------------------------------- |
|
|
150
|
+
| **Font Size** | `0.75rem` | `fontSize: "text.tag"` | `font-size: var(--nypl-fontSizes-text-tag)` |
|
|
151
|
+
| **Font Weight** | `400` | `fontWeight: "text.tag"` | `font-weight: var(--nypl-fontWeights-text-tag)` |
|
|
152
|
+
| **Line Height** | `1.5` | `fontWeight: 1.5` | `font-weight: 1.5` |
|
|
164
153
|
|
|
165
154
|
<Text displaySize={TextDisplaySizes.Mini}>Mini</Text>
|
|
166
155
|
|
|
167
|
-
|
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
|
|
|
171
|
-
|
|
|
156
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
157
|
+
| --------------- | ---------- | ------------------------- | ------------------------------------------------ |
|
|
158
|
+
| **Font Size** | `0.625rem` | `fontSize: "text.mini"` | `font-size: var(--nypl-fontSizes-text-mini)` |
|
|
159
|
+
| **Font Weight** | `400` | `fontWeight: "text.mini"` | `font-weight: var(--nypl-fontWeights-text-mini)` |
|
|
160
|
+
| **Line Height** | `1.5` | `fontWeight: 1.5` | `font-weight: 1.5` |
|
|
172
161
|
|
|
173
162
|
</DSProvider>
|
|
174
163
|
|
|
175
|
-
|
|
176
164
|
## Font Family
|
|
177
165
|
|
|
178
166
|
With website accessibility in mind, font choices for the DS were made with an eye toward clarity and readability. Headings and body content use the following font family assignment:
|
|
@@ -225,7 +213,7 @@ The DS uses four font weights to render text. The default font-weight is 300.
|
|
|
225
213
|
fontFamily: "var(--nypl-fonts-body)",
|
|
226
214
|
}}
|
|
227
215
|
>
|
|
228
|
-
Light / 300
|
|
216
|
+
Light / 300 (default)
|
|
229
217
|
</p>
|
|
230
218
|
<p
|
|
231
219
|
style={{
|
|
@@ -257,14 +245,14 @@ The DS uses four font weights to render text. The default font-weight is 300.
|
|
|
257
245
|
</>
|
|
258
246
|
</Canvas>
|
|
259
247
|
|
|
260
|
-
The following
|
|
248
|
+
The following design tokens are available through the DS.
|
|
261
249
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
--nypl-fontWeights-
|
|
265
|
-
--nypl-fontWeights-
|
|
266
|
-
--nypl-fontWeights-
|
|
267
|
-
|
|
250
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
251
|
+
| ----------- | ----- | ----------------------- | ---------------------------------------------- |
|
|
252
|
+
| **Light** | `300` | `fontWeight: "light"` | `font-weight: var(--nypl-fontWeights-light)` |
|
|
253
|
+
| **Regular** | `400` | `fontWeight: "regular"` | `font-weight: var(--nypl-fontWeights-regular)` |
|
|
254
|
+
| **Medium** | `500` | `fontWeight: "medium"` | `font-weight: var(--nypl-fontWeights-medium)` |
|
|
255
|
+
| **Bold** | `700` | `fontWeight: "bold"` | `font-weight: var(--nypl-fontWeights-bold)` |
|
|
268
256
|
|
|
269
257
|
## Font Sizes
|
|
270
258
|
|
|
@@ -302,7 +290,7 @@ Font sizing is based on a root font size of 16px (1rem = 16px).
|
|
|
302
290
|
fontWeight: "var(--nypl-fontWeights-light)",
|
|
303
291
|
}}
|
|
304
292
|
>
|
|
305
|
-
Font size 0
|
|
293
|
+
Font size 0 (default)
|
|
306
294
|
</p>
|
|
307
295
|
<p
|
|
308
296
|
style={{
|
|
@@ -339,18 +327,18 @@ Font sizing is based on a root font size of 16px (1rem = 16px).
|
|
|
339
327
|
</>
|
|
340
328
|
</Canvas>
|
|
341
329
|
|
|
342
|
-
The following
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
--nypl-fontSizes--
|
|
347
|
-
--nypl-fontSizes--
|
|
348
|
-
|
|
349
|
-
--nypl-fontSizes-
|
|
350
|
-
--nypl-fontSizes-
|
|
351
|
-
--nypl-fontSizes-
|
|
352
|
-
--nypl-fontSizes-
|
|
353
|
-
|
|
330
|
+
The following font size design tokens are available through the DS.
|
|
331
|
+
|
|
332
|
+
| | Value | JS Theme Object | CSS Variable |
|
|
333
|
+
| ------ | ---------- | ---------------- | ------------------------------------- |
|
|
334
|
+
| **-3** | `0.625rem` | `fontSize: "-3"` | `font-size: var(--nypl-fontSizes--3)` |
|
|
335
|
+
| **-2** | `0.75rem` | `fontSize: "-2"` | `font-size: var(--nypl-fontSizes--2)` |
|
|
336
|
+
| **-1** | `0.875rem` | `fontSize: "-1"` | `font-size: var(--nypl-fontSizes--1)` |
|
|
337
|
+
| **0** | `1rem` | `fontSize: "0"` | `font-size: var(--nypl-fontSizes-0)` |
|
|
338
|
+
| **1** | `1.125rem` | `fontSize: "1"` | `font-size: var(--nypl-fontSizes-1)` |
|
|
339
|
+
| **2** | `1.375rem` | `fontSize: "2"` | `font-size: var(--nypl-fontSizes-2)` |
|
|
340
|
+
| **3** | `1.75rem` | `fontSize: "3"` | `font-size: var(--nypl-fontSizes-3)` |
|
|
341
|
+
| **4** | `2.25rem` | `fontSize: "4"` | `font-size: var(--nypl-fontSizes-4)` |
|
|
354
342
|
|
|
355
343
|
## Text Case
|
|
356
344
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Meta,
|
|
3
|
+
Story,
|
|
4
|
+
Canvas,
|
|
5
|
+
ArgsTable,
|
|
6
|
+
Description,
|
|
7
|
+
} from "@storybook/addon-docs/blocks";
|
|
8
|
+
import { withDesign } from "storybook-addon-designs";
|
|
9
|
+
|
|
10
|
+
import Table from "./Table";
|
|
11
|
+
import DSProvider from "../../theme/provider";
|
|
12
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
13
|
+
|
|
14
|
+
<Description of={Table} />
|
|
15
|
+
|
|
16
|
+
The `Table` component is used to organize and display tabular data in rows and columns.
|
|
17
|
+
|
|
18
|
+
<Meta
|
|
19
|
+
title={getCategory("Table")}
|
|
20
|
+
component={Table}
|
|
21
|
+
decorators={[withDesign]}
|
|
22
|
+
parameters={{
|
|
23
|
+
design: {
|
|
24
|
+
type: "figma",
|
|
25
|
+
url:
|
|
26
|
+
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=46780%3A27675",
|
|
27
|
+
},
|
|
28
|
+
jest: ["Table.test.tsx"],
|
|
29
|
+
}}
|
|
30
|
+
argTypes={{
|
|
31
|
+
columnHeaders: [],
|
|
32
|
+
columnHeadersBackgroundColor: { control: { type: "color" } },
|
|
33
|
+
columnHeadersTextColor: {control: {type: "color"}},
|
|
34
|
+
id: {control: false},
|
|
35
|
+
tableData: { control: false },
|
|
36
|
+
}}
|
|
37
|
+
/>
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Table
|
|
41
|
+
|
|
42
|
+
| Component Version | DS Version |
|
|
43
|
+
| ----------------- | ---------- |
|
|
44
|
+
| Added | `0.25.9` |
|
|
45
|
+
| Latest | `0.25.9` |
|
|
46
|
+
|
|
47
|
+
<Description of={Table} />
|
|
48
|
+
|
|
49
|
+
<Canvas withToolbar>
|
|
50
|
+
<Story
|
|
51
|
+
name="Table"
|
|
52
|
+
args={{
|
|
53
|
+
columnHeaders: ["First Name", "Last Name", "Nick Name", "Address1", "City", "Zipcode", "State"],
|
|
54
|
+
tableData: [ ["Tom", "Nook", "Tanukichi", "Main Street", "New York", "23458", "NY" ], [ "Isabelle", "-", "Shizue", "Walnut Street", "New York", "23458", "NY"], [ "K.K.", "Slider", "Totakeke", "Niper Place", "New York", "98765", "NY"], [ "Sonny", "Resetti", "Risetto san", "Village Road", "New York", "09873", "NY" ], ],
|
|
55
|
+
useRowHeaders: false,
|
|
56
|
+
showRowDividers: false,
|
|
57
|
+
}}
|
|
58
|
+
>
|
|
59
|
+
{(args) => (
|
|
60
|
+
<Table {...args}>
|
|
61
|
+
</Table>
|
|
62
|
+
)}
|
|
63
|
+
</Story>
|
|
64
|
+
</Canvas>
|
|
65
|
+
|
|
66
|
+
<ArgsTable story="Table" />
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { axe } from "jest-axe";
|
|
4
|
+
import Table from "./Table";
|
|
5
|
+
|
|
6
|
+
export const columnHeaders = [
|
|
7
|
+
"First Name",
|
|
8
|
+
"Last Name",
|
|
9
|
+
"Nick Name",
|
|
10
|
+
"Address1",
|
|
11
|
+
"City",
|
|
12
|
+
"Zipcode",
|
|
13
|
+
"State",
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
export const tableData = [
|
|
17
|
+
["Tom", "Nook", "Tanukichi", "Main Street", "New York", "23458", "NY"],
|
|
18
|
+
["Isabelle", "-", "Shizue", "Walnut Street", "New York", "23458", "NY"],
|
|
19
|
+
["K.K.", "Slider", "Totakeke", "Niper Place", "New York", "98765", "NY"],
|
|
20
|
+
[
|
|
21
|
+
"Sonny",
|
|
22
|
+
"Resetti",
|
|
23
|
+
"Risetto san",
|
|
24
|
+
"Village Road",
|
|
25
|
+
"New York",
|
|
26
|
+
"09873",
|
|
27
|
+
"NY",
|
|
28
|
+
],
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
describe("Table Accessibility", () => {
|
|
32
|
+
it("passes axe accessibility test with the columnHeaders and tableData prop", async () => {
|
|
33
|
+
const { container } = render(
|
|
34
|
+
<Table columnHeaders={columnHeaders} tableData={tableData} />
|
|
35
|
+
);
|
|
36
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("passes axe accessibility test with tableData prop", async () => {
|
|
40
|
+
const { container } = render(<Table tableData={tableData} />);
|
|
41
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe("Table", () => {
|
|
46
|
+
it("Renders table data", () => {
|
|
47
|
+
render(<Table tableData={tableData} columnHeaders={columnHeaders} />);
|
|
48
|
+
expect(screen.getByText("Tom")).toBeInTheDocument();
|
|
49
|
+
expect(screen.getByText("First Name")).toBeInTheDocument();
|
|
50
|
+
expect(screen.getByText("Village Road")).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("logs a warning when the `tableData` prop is an empty array", async () => {
|
|
54
|
+
const warn = jest.spyOn(console, "warn");
|
|
55
|
+
render(<Table tableData={[]} />);
|
|
56
|
+
expect(warn).toHaveBeenCalledWith(
|
|
57
|
+
"Table data should be two dimensional array."
|
|
58
|
+
);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import {
|
|
3
|
+
Table as ChakraTable,
|
|
4
|
+
Thead as ChakraTHead,
|
|
5
|
+
Tbody as ChakraTbody,
|
|
6
|
+
Tr as ChakraTr,
|
|
7
|
+
Th as ChakraTh,
|
|
8
|
+
Td as ChakraTd,
|
|
9
|
+
TableCaption as ChakraTableCaption,
|
|
10
|
+
useMultiStyleConfig,
|
|
11
|
+
} from "@chakra-ui/react";
|
|
12
|
+
|
|
13
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
14
|
+
|
|
15
|
+
export interface TableProps {
|
|
16
|
+
/** Additional class name for the `Table` component. */
|
|
17
|
+
className?: string;
|
|
18
|
+
/** Array of string values used to populate the `Table` column headers. */
|
|
19
|
+
columnHeaders?: string[];
|
|
20
|
+
/** Hex value to set the background color of the column headers. */
|
|
21
|
+
columnHeadersBackgroundColor?: string;
|
|
22
|
+
/** Hex value to set the text color of the column headers. */
|
|
23
|
+
columnHeadersTextColor?: string;
|
|
24
|
+
/** ID that other components can cross reference for accessibility purposes. */
|
|
25
|
+
id?: string;
|
|
26
|
+
/** If true, the first cell of each row in the `Table` component will be visually styled as a header. The default value is false */
|
|
27
|
+
useRowHeaders?: boolean;
|
|
28
|
+
/** If true, a border will be displayed between each row in the `Table` component. The default value is false. */
|
|
29
|
+
showRowDividers?: boolean;
|
|
30
|
+
/** Two-dimensional array used to populate the table rows. */
|
|
31
|
+
tableData: string[][];
|
|
32
|
+
/** Displays `Table` title element. */
|
|
33
|
+
titleText?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function Table(props: React.PropsWithChildren<TableProps>) {
|
|
37
|
+
const {
|
|
38
|
+
className,
|
|
39
|
+
columnHeaders,
|
|
40
|
+
columnHeadersBackgroundColor,
|
|
41
|
+
columnHeadersTextColor,
|
|
42
|
+
id = generateUUID(),
|
|
43
|
+
useRowHeaders = false,
|
|
44
|
+
showRowDividers = false,
|
|
45
|
+
tableData,
|
|
46
|
+
titleText,
|
|
47
|
+
} = props;
|
|
48
|
+
|
|
49
|
+
const customColors = {};
|
|
50
|
+
|
|
51
|
+
columnHeadersBackgroundColor &&
|
|
52
|
+
(customColors["backgroundColor"] = columnHeadersBackgroundColor);
|
|
53
|
+
columnHeadersTextColor && (customColors["color"] = columnHeadersTextColor);
|
|
54
|
+
|
|
55
|
+
const styles = useMultiStyleConfig("CustomTable", {
|
|
56
|
+
columnHeadersTextColor,
|
|
57
|
+
showRowDividers,
|
|
58
|
+
useRowHeaders,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const columnHeadersElems = columnHeaders && (
|
|
62
|
+
<ChakraTHead>
|
|
63
|
+
<ChakraTr>
|
|
64
|
+
{columnHeaders.map((child, key) => (
|
|
65
|
+
<ChakraTh scope="col" key={key} sx={customColors}>
|
|
66
|
+
{child}
|
|
67
|
+
</ChakraTh>
|
|
68
|
+
))}
|
|
69
|
+
</ChakraTr>
|
|
70
|
+
</ChakraTHead>
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const tableBodyElems = () => {
|
|
74
|
+
/** tableData value should be two dimensional array */
|
|
75
|
+
if (
|
|
76
|
+
!Array.isArray(tableData) ||
|
|
77
|
+
tableData.length <= 0 ||
|
|
78
|
+
tableData[0].constructor !== Array
|
|
79
|
+
) {
|
|
80
|
+
console.warn(`Table data should be two dimensional array.`);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<ChakraTbody>
|
|
86
|
+
{tableData.map((row, index) => (
|
|
87
|
+
<ChakraTr key={index}>
|
|
88
|
+
{row.map((column, key) =>
|
|
89
|
+
key === 0 && useRowHeaders ? (
|
|
90
|
+
<ChakraTh scope="row" key={key}>
|
|
91
|
+
{column}
|
|
92
|
+
</ChakraTh>
|
|
93
|
+
) : (
|
|
94
|
+
<ChakraTd key={key}>{column}</ChakraTd>
|
|
95
|
+
)
|
|
96
|
+
)}
|
|
97
|
+
</ChakraTr>
|
|
98
|
+
))}
|
|
99
|
+
</ChakraTbody>
|
|
100
|
+
);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const tableCaption = titleText && (
|
|
104
|
+
<ChakraTableCaption>{titleText}</ChakraTableCaption>
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<ChakraTable id={id} sx={styles} className={className}>
|
|
109
|
+
{tableCaption}
|
|
110
|
+
{columnHeadersElems}
|
|
111
|
+
{tableBodyElems()}
|
|
112
|
+
</ChakraTable>
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export default Table;
|