@nypl/design-system-react-components 0.25.1 → 0.25.5
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 +118 -1
- package/README.md +98 -50
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
- package/dist/components/Button/Button.d.ts +13 -8
- package/dist/components/Button/ButtonTypes.d.ts +2 -1
- package/dist/components/Card/Card.d.ts +36 -52
- package/dist/components/Card/CardTypes.d.ts +0 -15
- package/dist/components/Checkbox/Checkbox.d.ts +17 -13
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -2
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
- package/dist/components/DatePicker/DatePicker.d.ts +36 -34
- package/dist/components/Fieldset/Fieldset.d.ts +25 -0
- package/dist/components/Heading/Heading.d.ts +4 -4
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
- package/dist/components/Icons/Icon.d.ts +8 -0
- package/dist/components/Icons/IconSvgs.d.ts +11 -0
- package/dist/components/Icons/IconTypes.d.ts +11 -0
- package/dist/components/Image/Image.d.ts +19 -9
- package/dist/components/Image/ImageTypes.d.ts +20 -0
- package/dist/components/Link/Link.d.ts +4 -0
- package/dist/components/List/List.d.ts +19 -14
- package/dist/components/Notification/Notification.d.ts +37 -16
- package/dist/components/Pagination/Pagination.d.ts +16 -13
- package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
- package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
- package/dist/components/Radio/Radio.d.ts +2 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
- package/dist/components/SearchBar/SearchBar.d.ts +3 -3
- package/dist/components/Select/Select.d.ts +2 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
- package/dist/components/Slider/Slider.d.ts +57 -0
- package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
- package/dist/components/Tabs/Tabs.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +12 -0
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
- package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
- package/dist/design-system-react-components.cjs.development.js +6131 -3715
- 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 +6124 -3699
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
- package/dist/hooks/useCarouselStyles.d.ts +16 -0
- package/dist/hooks/useNYPLTheme.d.ts +54 -0
- package/dist/hooks/useWindowSize.d.ts +10 -0
- package/dist/index.d.ts +13 -8
- package/dist/resources.scss +180 -170
- package/dist/styles.css +1 -1
- package/dist/theme/components/button.d.ts +22 -8
- package/dist/theme/components/card.d.ts +168 -0
- package/dist/theme/components/checkbox.d.ts +5 -1
- package/dist/theme/components/checkboxGroup.d.ts +12 -0
- package/dist/theme/components/componentWrapper.d.ts +11 -0
- package/dist/theme/components/datePicker.d.ts +16 -0
- package/dist/theme/components/fieldset.d.ts +27 -0
- package/dist/theme/components/global.d.ts +23 -13
- package/dist/theme/components/globalMixins.d.ts +9 -1
- package/dist/theme/components/heading.d.ts +5 -0
- package/dist/theme/components/helperErrorText.d.ts +10 -0
- package/dist/theme/components/hero.d.ts +1 -0
- package/dist/theme/components/horizontalRule.d.ts +14 -0
- package/dist/theme/components/image.d.ts +31 -0
- package/dist/theme/components/label.d.ts +5 -3
- package/dist/theme/components/link.d.ts +4 -0
- package/dist/theme/components/list.d.ts +89 -0
- package/dist/theme/components/notification.d.ts +75 -0
- package/dist/theme/components/pagination.d.ts +19 -0
- package/dist/theme/components/progressIndicator.d.ts +50 -0
- package/dist/theme/components/radioGroup.d.ts +12 -0
- package/dist/theme/components/select.d.ts +11 -2
- package/dist/theme/components/skeletonLoader.d.ts +98 -0
- package/dist/theme/components/slider.d.ts +51 -0
- package/dist/theme/components/tabs.d.ts +54 -3
- package/dist/theme/components/textInput.d.ts +8 -1
- package/dist/theme/components/videoPlayer.d.ts +40 -0
- package/dist/theme/foundations/breakpoints.d.ts +8 -8
- package/dist/theme/foundations/global.d.ts +6 -1
- package/dist/theme/foundations/radii.d.ts +5 -0
- package/dist/theme/foundations/spacing.d.ts +16 -16
- package/package.json +72 -83
- package/src/__tests__/setup.ts +2 -2
- package/src/components/Accordion/Accordion.stories.mdx +39 -44
- package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
- package/src/components/Autosuggest/Autosuggest.stories.tsx +2 -1
- package/src/components/Autosuggest/_Autosuggest.scss +5 -5
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +14 -10
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +23 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +199 -1
- package/src/components/Button/Button.stories.mdx +15 -10
- package/src/components/Button/Button.test.tsx +21 -7
- package/src/components/Button/Button.tsx +22 -34
- package/src/components/Button/ButtonTypes.tsx +1 -0
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
- package/src/components/Card/Card.stories.mdx +296 -259
- package/src/components/Card/Card.test.tsx +156 -84
- package/src/components/Card/Card.tsx +195 -145
- package/src/components/Card/CardTypes.tsx +0 -17
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
- package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
- package/src/components/CardEdition/_CardEdition.scss +22 -23
- package/src/components/Chakra/Box.stories.mdx +15 -16
- package/src/components/Chakra/Center.stories.mdx +31 -16
- package/src/components/Chakra/Grid.stories.mdx +28 -15
- package/src/components/Chakra/Stack.stories.mdx +35 -18
- package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
- package/src/components/Checkbox/Checkbox.test.tsx +47 -2
- package/src/components/Checkbox/Checkbox.tsx +39 -33
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +29 -2
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -18
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +47 -81
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
- package/src/components/DatePicker/DatePicker.test.tsx +264 -64
- package/src/components/DatePicker/DatePicker.tsx +159 -128
- package/src/components/DatePicker/_DatePicker.scss +33 -67
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
- package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
- package/src/components/Fieldset/Fieldset.test.tsx +125 -0
- package/src/components/Fieldset/Fieldset.tsx +52 -0
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
- package/src/components/Form/Form.stories.mdx +24 -6
- package/src/components/Form/Form.test.tsx +1 -1
- package/src/components/Form/Form.tsx +1 -0
- package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
- package/src/components/Grid/SimpleGrid.test.tsx +4 -4
- package/src/components/Heading/Heading.stories.mdx +3 -4
- package/src/components/Heading/Heading.tsx +5 -5
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
- package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
- package/src/components/Hero/Hero.stories.mdx +12 -2
- package/src/components/Hero/Hero.tsx +1 -1
- package/src/components/Hero/HeroTypes.tsx +1 -0
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
- package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
- package/src/components/Icons/Icon.stories.mdx +12 -4
- package/src/components/Icons/Icon.test.tsx +18 -0
- package/src/components/Icons/Icon.tsx +16 -1
- package/src/components/Icons/IconSvgs.tsx +22 -0
- package/src/components/Icons/IconTypes.tsx +11 -0
- package/src/components/Image/Image.stories.mdx +220 -0
- package/src/components/Image/Image.test.tsx +131 -29
- package/src/components/Image/Image.tsx +84 -56
- package/src/components/Image/ImageTypes.ts +22 -0
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
- package/src/components/Input/Input.stories.tsx +23 -67
- package/src/components/Input/Input.test.tsx +4 -4
- package/src/components/Input/_Input.scss +23 -14
- package/src/components/Link/Link.tsx +4 -1
- package/src/components/List/List.stories.mdx +124 -49
- package/src/components/List/List.test.tsx +142 -63
- package/src/components/List/List.tsx +89 -93
- package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
- package/src/components/Modal/Modal.stories.mdx +3 -3
- package/src/components/Modal/_Modal.scss +2 -2
- package/src/components/Notification/Notification.stories.mdx +109 -112
- package/src/components/Notification/Notification.test.tsx +99 -110
- package/src/components/Notification/Notification.tsx +156 -159
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
- package/src/components/Pagination/Pagination.stories.mdx +26 -27
- package/src/components/Pagination/Pagination.stories.tsx +11 -16
- package/src/components/Pagination/Pagination.test.tsx +276 -146
- package/src/components/Pagination/Pagination.tsx +174 -154
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
- package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
- package/src/components/Radio/Radio.test.tsx +20 -4
- package/src/components/Radio/Radio.tsx +6 -3
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
- package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
- package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
- package/src/components/RadioGroup/RadioGroup.tsx +19 -19
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
- package/src/components/SearchBar/SearchBar.Test.tsx +20 -1
- package/src/components/SearchBar/SearchBar.stories.mdx +113 -8
- package/src/components/SearchBar/SearchBar.tsx +20 -10
- package/src/components/Select/Select.test.tsx +12 -0
- package/src/components/Select/Select.tsx +5 -2
- package/src/components/Select/SelectTypes.tsx +1 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
- package/src/components/Slider/Slider.stories.mdx +529 -0
- package/src/components/Slider/Slider.test.tsx +653 -0
- package/src/components/Slider/Slider.tsx +303 -0
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
- package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
- package/src/components/StyleGuide/Buttons.stories.mdx +89 -73
- package/src/components/StyleGuide/ColorCard.tsx +46 -0
- package/src/components/StyleGuide/Colors.stories.mdx +171 -311
- package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
- package/src/components/StyleGuide/Forms.stories.mdx +9 -7
- package/src/components/StyleGuide/Iconography.stories.mdx +85 -91
- package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
- package/src/components/StyleGuide/Typography.stories.mdx +202 -189
- package/src/components/StyleGuide/UIDocCard.tsx +1 -1
- package/src/components/Tabs/Tabs.stories.mdx +73 -11
- package/src/components/Tabs/Tabs.tsx +87 -64
- package/src/components/Template/Template.stories.mdx +25 -27
- package/src/components/TextInput/TextInput.stories.mdx +1 -1
- package/src/components/TextInput/TextInput.test.tsx +22 -2
- package/src/components/TextInput/TextInput.tsx +28 -8
- package/src/components/TextInput/TextInputTypes.tsx +2 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
- package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
- package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
- package/src/docs/Chakra.stories.mdx +244 -63
- package/src/docs/Intro.stories.mdx +5 -2
- package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
- package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
- package/src/hooks/useCarouselStyles.ts +34 -0
- package/src/hooks/useNYPLTheme.ts +67 -0
- package/src/hooks/useWindowSize.ts +40 -0
- package/src/index.ts +22 -19
- package/src/resources.scss +5 -5
- package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
- package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
- package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
- package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
- package/src/styles/base/_place-holder.scss +14 -3
- package/src/styles/{03-space → space}/_space-inline.scss +14 -14
- package/src/styles/{03-space → space}/_space-inset.scss +10 -10
- package/src/styles/space/_space-stack.scss +116 -0
- package/src/styles.scss +13 -60
- package/src/theme/components/button.ts +21 -15
- package/src/theme/components/card.ts +174 -0
- package/src/theme/components/checkbox.ts +8 -3
- package/src/theme/components/checkboxGroup.ts +8 -0
- package/src/theme/components/componentWrapper.ts +10 -0
- package/src/theme/components/datePicker.ts +17 -0
- package/src/theme/components/fieldset.ts +18 -0
- package/src/theme/components/global.ts +26 -15
- package/src/theme/components/globalMixins.ts +9 -1
- package/src/theme/components/heading.ts +10 -5
- package/src/theme/components/helperErrorText.ts +9 -0
- package/src/theme/components/hero.ts +4 -3
- package/src/theme/components/horizontalRule.ts +13 -0
- package/src/theme/components/icon.ts +9 -9
- package/src/theme/components/image.ts +116 -0
- package/src/theme/components/label.ts +3 -10
- package/src/theme/components/link.ts +5 -1
- package/src/theme/components/list.ts +73 -0
- package/src/theme/components/notification.ts +93 -0
- package/src/theme/components/pagination.ts +20 -0
- package/src/theme/components/progressIndicator.ts +62 -0
- package/src/theme/components/radio.ts +2 -2
- package/src/theme/components/radioGroup.ts +8 -0
- package/src/theme/components/select.ts +6 -3
- package/src/theme/components/skeletonLoader.ts +107 -0
- package/src/theme/components/slider.ts +79 -0
- package/src/theme/components/statusBadge.ts +1 -2
- package/src/theme/components/tabs.ts +49 -19
- package/src/theme/components/template.ts +8 -8
- package/src/theme/components/textInput.ts +5 -4
- package/src/theme/components/videoPlayer.ts +49 -0
- package/src/theme/foundations/breakpoints.ts +8 -8
- package/src/theme/foundations/global.ts +6 -1
- package/src/theme/foundations/radii.ts +6 -0
- package/src/theme/foundations/spacing.ts +24 -24
- package/src/theme/index.ts +41 -10
- package/src/utils/componentCategories.ts +4 -3
- package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
- package/dist/components/Image/Image.stories.d.ts +0 -18
- package/dist/components/List/List.stories.d.ts +0 -7
- package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
- package/dist/theme/components/customRadioGroup.d.ts +0 -18
- package/src/components/Button/_Button.scss +0 -32
- package/src/components/Card/_Card.scss +0 -308
- package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
- package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
- package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
- package/src/components/Image/Image.stories.tsx +0 -54
- package/src/components/Image/_Image.scss +0 -38
- package/src/components/List/List.stories.tsx +0 -139
- package/src/components/List/_List.scss +0 -76
- package/src/components/Notification/_Notification.scss +0 -110
- package/src/components/Pagination/_Pagination.scss +0 -40
- package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
- package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
- package/src/styles/01-colors/_colors-brand.scss +0 -62
- package/src/styles/01-colors/_colors-utility.scss +0 -67
- package/src/styles/02-typography/_type-scale.css +0 -11
- package/src/styles/02-typography/_type-weight.css +0 -7
- package/src/styles/02-typography/_typefaces.css +0 -4
- package/src/styles/03-space/_space-stack.scss +0 -116
- package/src/styles/03-space/_space.css +0 -30
- package/src/styles/base/_card-grid.scss +0 -78
- package/src/styles/base/_typography.scss +0 -11
- package/src/theme/components/customCheckboxGroup.ts +0 -12
- package/src/theme/components/customRadioGroup.ts +0 -12
|
@@ -1,209 +1,259 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import
|
|
2
|
+
import {
|
|
3
|
+
Box,
|
|
4
|
+
LinkBox as ChakraLinkBox,
|
|
5
|
+
LinkOverlay as ChakraLinkOverlay,
|
|
6
|
+
useMultiStyleConfig,
|
|
7
|
+
useStyleConfig,
|
|
8
|
+
} from "@chakra-ui/react";
|
|
3
9
|
|
|
4
|
-
import {
|
|
10
|
+
import { CardLayouts } from "./CardTypes";
|
|
5
11
|
import Heading from "../Heading/Heading";
|
|
6
|
-
import Image from "../Image/Image";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
/** Optional value to control the aspect ratio of the cartd image; default value is `square` */
|
|
16
|
-
imageAspectRatio?: CardImageRatios;
|
|
17
|
-
/** Optional value to control the size of the card image */
|
|
18
|
-
imageSize?: CardImageSizes;
|
|
19
|
-
/** The src attribute is required, and contains the path to the image you want to embed. */
|
|
20
|
-
src: string;
|
|
12
|
+
import Image, { ImageProps } from "../Image/Image";
|
|
13
|
+
import { ImageRatios, ImageSizes } from "../Image/ImageTypes";
|
|
14
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
15
|
+
|
|
16
|
+
interface CardBaseProps {
|
|
17
|
+
/** Optional value to control the alignment of the text and elements. */
|
|
18
|
+
center?: boolean;
|
|
19
|
+
/** Optional value to render the layout in a row or column (default). */
|
|
20
|
+
layout?: CardLayouts;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
interface
|
|
24
|
-
/**
|
|
25
|
-
|
|
23
|
+
interface CardLinkBoxProps {
|
|
24
|
+
/** Main link to use when the full `Card` component should be clickable. */
|
|
25
|
+
mainActionLink?: string;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
interface CardActionsProps {
|
|
29
|
-
/** Optional boolean value to control visibility of border on the bottom edge
|
|
28
|
+
interface CardActionsProps extends CardBaseProps {
|
|
29
|
+
/** Optional boolean value to control visibility of border on the bottom edge
|
|
30
|
+
* of the card actions element */
|
|
30
31
|
bottomBorder?: boolean;
|
|
31
|
-
/** Optional
|
|
32
|
-
|
|
33
|
-
/** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
|
|
34
|
-
modifiers?: string[];
|
|
35
|
-
/** Optional boolean value to control visibility of border on the top edge of the card actions element */
|
|
32
|
+
/** Optional boolean value to control visibility of border on the top edge of
|
|
33
|
+
* the card actions element */
|
|
36
34
|
topBorder?: boolean;
|
|
37
35
|
}
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
/** Optional
|
|
37
|
+
interface CardImageProps extends CardBaseProps, ImageProps {
|
|
38
|
+
/** Optional boolean value to control the position of the `CardImage`. */
|
|
39
|
+
imageAtEnd?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface CardProps extends CardBaseProps, CardLinkBoxProps {
|
|
43
|
+
/** Optional hex color value used to set the card background color. */
|
|
41
44
|
backgroundColor?: string;
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
/** Optional boolean value to control the visibility of a border around the card */
|
|
45
|
+
/** Optional boolean value to control the visibility of a border around
|
|
46
|
+
* the card. */
|
|
45
47
|
border?: boolean;
|
|
46
|
-
/** Optional
|
|
47
|
-
center?: boolean;
|
|
48
|
-
/** ClassName that appears in addition to "card" */
|
|
48
|
+
/** Optional CSS class name to add. */
|
|
49
49
|
className?: string;
|
|
50
|
-
/** Optional hex color value used to override the default text color */
|
|
50
|
+
/** Optional hex color value used to override the default text color. */
|
|
51
51
|
foregroundColor?: string;
|
|
52
|
-
/** ID that other components can cross reference for accessibility purposes */
|
|
52
|
+
/** ID that other components can cross reference for accessibility purposes. */
|
|
53
53
|
id?: string;
|
|
54
|
-
/** Text description of the image; to follow best practices for accessibility,
|
|
54
|
+
/** Text description of the image; to follow best practices for accessibility,
|
|
55
|
+
* this prop should not be left blank if `imageSrc` is passed. */
|
|
55
56
|
imageAlt?: string;
|
|
56
|
-
/** Optional value to control the aspect ratio of the
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
/** Optional value to control the aspect ratio of the `CardIage`; default
|
|
58
|
+
* value is `square`. */
|
|
59
|
+
imageAspectRatio?: ImageRatios;
|
|
60
|
+
/** Optional boolean value to control the position of the `CardImage`. */
|
|
59
61
|
imageAtEnd?: boolean;
|
|
60
|
-
/** Custom image component used in place of DS `Image` component */
|
|
61
|
-
imageComponent?:
|
|
62
|
-
/** Optional value to control the size of the
|
|
63
|
-
imageSize?:
|
|
64
|
-
/** The path to the image displayed
|
|
62
|
+
/** Custom image component used in place of DS `Image` component. */
|
|
63
|
+
imageComponent?: JSX.Element;
|
|
64
|
+
/** Optional value to control the size of the `CardImage`. */
|
|
65
|
+
imageSize?: ImageSizes;
|
|
66
|
+
/** The path to the image displayed within the `Card` component. */
|
|
65
67
|
imageSrc?: string;
|
|
66
|
-
/** Optional value to control the position of the image placeholder; default value is `column` */
|
|
67
|
-
layout?: CardLayouts;
|
|
68
|
-
/** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
|
|
69
|
-
modifiers?: string[];
|
|
70
|
-
/** Optional padding value. This value should be entered with the same formatting as a CSS padding attribute (ex. `5%`, `20px`, `2rem`). If omitted, the Card will use the default padding. */
|
|
71
|
-
padding?: string;
|
|
72
68
|
}
|
|
73
69
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
70
|
+
/**
|
|
71
|
+
* The CardImage component is used internally in the `Card` component. It
|
|
72
|
+
* renders an `Image` component but with overriding styles specific to the
|
|
73
|
+
* `Card` component.
|
|
74
|
+
*/
|
|
75
|
+
function CardImage(props: React.ComponentProps<"img"> & CardImageProps) {
|
|
76
|
+
const {
|
|
77
|
+
alt,
|
|
78
|
+
center,
|
|
79
|
+
component,
|
|
80
|
+
imageSize,
|
|
81
|
+
imageAspectRatio,
|
|
82
|
+
src,
|
|
83
|
+
imageAtEnd,
|
|
84
|
+
layout,
|
|
85
|
+
} = props;
|
|
86
|
+
// Additional styles to add to the `Image` component.
|
|
87
|
+
const styles = useStyleConfig("CardImage", {
|
|
88
|
+
center,
|
|
89
|
+
imageAtEnd,
|
|
90
|
+
imageSize,
|
|
91
|
+
layout,
|
|
92
|
+
});
|
|
81
93
|
return (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
<Image className={className} src={src} alt={alt} />
|
|
91
|
-
)}
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
|
95
|
-
</>
|
|
96
|
-
)
|
|
94
|
+
<Image
|
|
95
|
+
alt={alt}
|
|
96
|
+
component={component}
|
|
97
|
+
imageAspectRatio={imageAspectRatio}
|
|
98
|
+
imageSize={imageSize}
|
|
99
|
+
src={src}
|
|
100
|
+
additionalStyles={styles}
|
|
101
|
+
/>
|
|
97
102
|
);
|
|
98
103
|
}
|
|
99
104
|
|
|
100
105
|
// CardHeading child-component
|
|
101
|
-
export const CardHeading =
|
|
106
|
+
export const CardHeading = Heading;
|
|
102
107
|
|
|
103
108
|
// CardContent child-component
|
|
104
|
-
export function CardContent(props: React.PropsWithChildren<
|
|
105
|
-
const { children
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
<div className={bem("card-content", [], "", [className])}>{children}</div>
|
|
109
|
-
)
|
|
110
|
-
);
|
|
109
|
+
export function CardContent(props: React.PropsWithChildren<{}>) {
|
|
110
|
+
const { children } = props;
|
|
111
|
+
const styles = useStyleConfig("CardContent");
|
|
112
|
+
return children && <Box __css={styles}>{children}</Box>;
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
// CardActions child-component
|
|
114
116
|
export function CardActions(props: React.PropsWithChildren<CardActionsProps>) {
|
|
115
|
-
const {
|
|
117
|
+
const { bottomBorder, children, topBorder, center, layout } = props;
|
|
118
|
+
const styles = useStyleConfig("CardActions", {
|
|
116
119
|
bottomBorder,
|
|
117
|
-
children,
|
|
118
|
-
className,
|
|
119
|
-
modifiers = [],
|
|
120
120
|
topBorder,
|
|
121
|
-
|
|
121
|
+
center,
|
|
122
|
+
layout,
|
|
123
|
+
});
|
|
122
124
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
return children && <Box __css={styles}>{children}</Box>;
|
|
126
|
+
}
|
|
125
127
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
/**
|
|
129
|
+
* If `mainActionLink` is passed, then this adds Chakra's `LinkBox` wrapper
|
|
130
|
+
* component to the entire `Card` component. This works together with the
|
|
131
|
+
* `CardLinkOverlay` component to provide a clickable overlay.
|
|
132
|
+
*/
|
|
133
|
+
function CardLinkBox({
|
|
134
|
+
children,
|
|
135
|
+
mainActionLink,
|
|
136
|
+
}: React.PropsWithChildren<CardLinkBoxProps>) {
|
|
137
|
+
return mainActionLink ? (
|
|
138
|
+
<ChakraLinkBox>{children}</ChakraLinkBox>
|
|
139
|
+
) : (
|
|
140
|
+
<>{children}</>
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* If `mainActionLink` is passed, then this adds Chakra's `LinkOverlay` around
|
|
146
|
+
* text that should be linked, in this case the `CardHeading` text. This works
|
|
147
|
+
* together with the `CardLinkBox` component to provide a clickable overlay to
|
|
148
|
+
* the `Card` component while still allowing links in the `CardActions` to be
|
|
149
|
+
* clickable.
|
|
150
|
+
*/
|
|
151
|
+
function CardLinkOverlay({
|
|
152
|
+
children,
|
|
153
|
+
mainActionLink,
|
|
154
|
+
}: React.PropsWithChildren<CardLinkBoxProps>) {
|
|
155
|
+
return mainActionLink ? (
|
|
156
|
+
<ChakraLinkOverlay href={mainActionLink}>{children}</ChakraLinkOverlay>
|
|
157
|
+
) : (
|
|
158
|
+
<>{children}</>
|
|
132
159
|
);
|
|
133
160
|
}
|
|
134
161
|
|
|
135
162
|
export default function Card(props: React.PropsWithChildren<CardProps>) {
|
|
136
163
|
const {
|
|
137
164
|
backgroundColor,
|
|
138
|
-
|
|
139
|
-
center,
|
|
165
|
+
border,
|
|
166
|
+
center = false,
|
|
140
167
|
children,
|
|
141
168
|
className,
|
|
142
169
|
foregroundColor,
|
|
143
|
-
id,
|
|
170
|
+
id = generateUUID(),
|
|
171
|
+
imageAlt = "",
|
|
172
|
+
imageAspectRatio = ImageRatios.Square,
|
|
144
173
|
imageAtEnd,
|
|
145
|
-
layout,
|
|
146
|
-
border,
|
|
147
|
-
padding,
|
|
148
|
-
modifiers = [],
|
|
149
|
-
imageAlt,
|
|
150
174
|
imageComponent,
|
|
151
|
-
|
|
152
|
-
imageSize,
|
|
175
|
+
imageSize = ImageSizes.Default,
|
|
153
176
|
imageSrc,
|
|
177
|
+
layout = CardLayouts.Column,
|
|
178
|
+
mainActionLink,
|
|
154
179
|
} = props;
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
const styles = {};
|
|
158
|
-
let imageCount = 0;
|
|
180
|
+
const hasImage = imageSrc || imageComponent;
|
|
181
|
+
const customColors = {};
|
|
159
182
|
const cardContents = [];
|
|
183
|
+
let cardHeadingCount = 0;
|
|
160
184
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
center && modifiers.push("center");
|
|
164
|
-
(imageSrc || imageComponent) && modifiers.push("has-image");
|
|
165
|
-
imageAtEnd && modifiers.push("at-end");
|
|
185
|
+
backgroundColor && (customColors["backgroundColor"] = backgroundColor);
|
|
186
|
+
foregroundColor && (customColors["color"] = foregroundColor);
|
|
166
187
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
188
|
+
const styles = useMultiStyleConfig("Card", {
|
|
189
|
+
border,
|
|
190
|
+
center,
|
|
191
|
+
hasImage,
|
|
192
|
+
imageAtEnd,
|
|
193
|
+
layout,
|
|
194
|
+
});
|
|
170
195
|
|
|
171
|
-
React.Children.map(children, (child: React.ReactElement) => {
|
|
172
|
-
if (
|
|
173
|
-
child
|
|
174
|
-
|
|
196
|
+
React.Children.map(children, (child: React.ReactElement, key) => {
|
|
197
|
+
if (child.type === CardHeading || child.props.mdxType === "CardHeading") {
|
|
198
|
+
// If the child is a `CardHeading` component, then we add the
|
|
199
|
+
// `CardLinkOverlay` inside of the `Heading` component and wrap its text.
|
|
200
|
+
// This allows other links in the `CardActions` to be clickable. This is
|
|
201
|
+
// only done for the first `CardHeading` component but does not affect
|
|
202
|
+
// the full-click feature.
|
|
203
|
+
const newChildren =
|
|
204
|
+
cardHeadingCount === 0 ? (
|
|
205
|
+
<CardLinkOverlay mainActionLink={mainActionLink}>
|
|
206
|
+
{child.props.children}
|
|
207
|
+
</CardLinkOverlay>
|
|
208
|
+
) : (
|
|
209
|
+
child.props.children
|
|
210
|
+
);
|
|
211
|
+
const elem = React.cloneElement(child, {
|
|
212
|
+
additionalStyles: styles.heading,
|
|
213
|
+
key,
|
|
214
|
+
center,
|
|
215
|
+
// Override the child text with the potential `CardLinkOverlay`.
|
|
216
|
+
children: newChildren,
|
|
217
|
+
layout,
|
|
218
|
+
});
|
|
219
|
+
cardContents.push(elem);
|
|
220
|
+
cardHeadingCount++;
|
|
221
|
+
} else if (
|
|
175
222
|
child.type === CardContent ||
|
|
176
223
|
child.props.mdxType === "CardContent" ||
|
|
177
224
|
child.type === CardActions ||
|
|
178
225
|
child.props.mdxType === "CardActions"
|
|
179
226
|
) {
|
|
180
|
-
|
|
227
|
+
const elem = React.cloneElement(child, { key, center, layout });
|
|
228
|
+
cardContents.push(elem);
|
|
181
229
|
}
|
|
182
230
|
});
|
|
183
231
|
|
|
184
|
-
if (imageCount > 1) {
|
|
185
|
-
console.error(`Only one CardIimage child component may be passed to Card.`);
|
|
186
|
-
cardContents.length = 0;
|
|
187
|
-
cardContents.push(
|
|
188
|
-
"Error: Only one CardImage child component may be passed to Card."
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
232
|
return (
|
|
192
|
-
<
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
233
|
+
<CardLinkBox mainActionLink={mainActionLink}>
|
|
234
|
+
<Box
|
|
235
|
+
id={id}
|
|
236
|
+
className={className}
|
|
237
|
+
__css={{
|
|
238
|
+
...styles,
|
|
239
|
+
...customColors,
|
|
240
|
+
}}
|
|
241
|
+
>
|
|
242
|
+
{hasImage && (
|
|
243
|
+
<CardImage
|
|
244
|
+
src={imageSrc ? imageSrc : null}
|
|
245
|
+
component={imageComponent}
|
|
246
|
+
alt={imageAlt}
|
|
247
|
+
imageSize={imageSize}
|
|
248
|
+
imageAspectRatio={imageAspectRatio}
|
|
249
|
+
imageAtEnd={imageAtEnd}
|
|
250
|
+
layout={layout}
|
|
251
|
+
/>
|
|
252
|
+
)}
|
|
253
|
+
<Box className="card-body" __css={styles.body}>
|
|
254
|
+
{cardContents}
|
|
255
|
+
</Box>
|
|
256
|
+
</Box>
|
|
257
|
+
</CardLinkBox>
|
|
208
258
|
);
|
|
209
259
|
}
|
|
@@ -2,20 +2,3 @@ export enum CardLayouts {
|
|
|
2
2
|
Row = "row",
|
|
3
3
|
Column = "column",
|
|
4
4
|
}
|
|
5
|
-
|
|
6
|
-
export enum CardImageRatios {
|
|
7
|
-
FourByThree = "four-by-three",
|
|
8
|
-
OneByTwo = "one-by-two",
|
|
9
|
-
Original = "original",
|
|
10
|
-
SixteenByNine = "sixteen-by-nine",
|
|
11
|
-
Square = "square",
|
|
12
|
-
ThreeByFour = "three-by-four",
|
|
13
|
-
ThreeByTwo = "three-by-two",
|
|
14
|
-
TwoByOne = "two-by-one",
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export enum CardImageSizes {
|
|
18
|
-
Large = "large",
|
|
19
|
-
Medium = "medium",
|
|
20
|
-
Small = "small",
|
|
21
|
-
}
|