@nypl/design-system-react-components 1.0.2 → 1.0.3-beta
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/README.md +0 -2
- package/dist/components/Slider/Slider.d.ts +1 -2
- package/dist/components/TextInput/TextInput.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +33 -10
- 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 +33 -10
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/{tests → __tests__}/useCarouselStyles.test.d.ts +0 -0
- package/dist/theme/components/global.d.ts +1 -1
- package/dist/theme/components/radio.d.ts +8 -0
- package/dist/theme/components/template.d.ts +4 -1
- package/package.json +2 -3
- package/CHANGELOG.md +0 -1430
- package/src/__tests__/fileMock.ts +0 -6
- package/src/__tests__/setup.ts +0 -27
- package/src/__tests__/utils/utils.test.ts +0 -18
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +0 -42
- package/src/components/Accordion/Accordion.stories.mdx +0 -333
- package/src/components/Accordion/Accordion.test.tsx +0 -237
- package/src/components/Accordion/Accordion.tsx +0 -137
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +0 -734
- package/src/components/Autosuggest/Autosuggest.stories.mdx +0 -75
- package/src/components/Autosuggest/Autosuggest.stories.tsx +0 -211
- package/src/components/Autosuggest/_Autosuggest.scss +0 -51
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +0 -231
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -144
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -98
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +0 -695
- package/src/components/Button/Button.stories.mdx +0 -320
- package/src/components/Button/Button.test.tsx +0 -184
- package/src/components/Button/Button.tsx +0 -95
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -106
- package/src/components/ButtonGroup/ButtonGroup.stories.mdx +0 -178
- package/src/components/ButtonGroup/ButtonGroup.test.tsx +0 -141
- package/src/components/ButtonGroup/ButtonGroup.tsx +0 -100
- package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +0 -117
- package/src/components/Card/Card.stories.mdx +0 -1041
- package/src/components/Card/Card.test.tsx +0 -388
- package/src/components/Card/Card.tsx +0 -346
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +0 -568
- package/src/components/Chakra/Box.stories.mdx +0 -52
- package/src/components/Chakra/Center.stories.mdx +0 -96
- package/src/components/Chakra/Flex.stories.mdx +0 -111
- package/src/components/Chakra/Grid.stories.mdx +0 -89
- package/src/components/Chakra/Stack.stories.mdx +0 -109
- package/src/components/Checkbox/Checkbox.stories.mdx +0 -243
- package/src/components/Checkbox/Checkbox.test.tsx +0 -350
- package/src/components/Checkbox/Checkbox.tsx +0 -152
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +0 -661
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +0 -462
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +0 -492
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +0 -173
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +0 -1842
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +0 -163
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +0 -76
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +0 -103
- package/src/components/DatePicker/DatePicker.stories.mdx +0 -452
- package/src/components/DatePicker/DatePicker.test.tsx +0 -940
- package/src/components/DatePicker/DatePicker.tsx +0 -450
- package/src/components/DatePicker/_DatePicker.scss +0 -100
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -908
- package/src/components/Fieldset/Fieldset.stories.mdx +0 -96
- package/src/components/Fieldset/Fieldset.test.tsx +0 -155
- package/src/components/Fieldset/Fieldset.tsx +0 -55
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +0 -89
- package/src/components/Form/Form.stories.mdx +0 -426
- package/src/components/Form/Form.test.tsx +0 -234
- package/src/components/Form/Form.tsx +0 -124
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -115
- package/src/components/Grid/SimpleGrid.stories.mdx +0 -336
- package/src/components/Grid/SimpleGrid.test.tsx +0 -79
- package/src/components/Grid/SimpleGrid.tsx +0 -49
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +0 -23
- package/src/components/Heading/Heading.stories.mdx +0 -187
- package/src/components/Heading/Heading.test.tsx +0 -171
- package/src/components/Heading/Heading.tsx +0 -104
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +0 -90
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +0 -172
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +0 -114
- package/src/components/HelperErrorText/HelperErrorText.tsx +0 -62
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +0 -93
- package/src/components/Hero/Hero.stories.mdx +0 -378
- package/src/components/Hero/Hero.test.tsx +0 -611
- package/src/components/Hero/Hero.tsx +0 -203
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +0 -379
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +0 -73
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +0 -54
- package/src/components/HorizontalRule/HorizontalRule.tsx +0 -27
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +0 -44
- package/src/components/Icons/Icon.stories.mdx +0 -413
- package/src/components/Icons/Icon.test.tsx +0 -120
- package/src/components/Icons/Icon.tsx +0 -187
- package/src/components/Icons/IconSvgs.tsx +0 -64
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +0 -129
- package/src/components/Image/Image.stories.mdx +0 -332
- package/src/components/Image/Image.test.tsx +0 -155
- package/src/components/Image/Image.tsx +0 -171
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +0 -269
- package/src/components/Label/Label.stories.mdx +0 -100
- package/src/components/Label/Label.test.tsx +0 -116
- package/src/components/Label/Label.tsx +0 -55
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +0 -45
- package/src/components/Link/Link.stories.mdx +0 -249
- package/src/components/Link/Link.test.tsx +0 -224
- package/src/components/Link/Link.tsx +0 -178
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +0 -286
- package/src/components/List/List.stories.mdx +0 -393
- package/src/components/List/List.test.tsx +0 -265
- package/src/components/List/List.tsx +0 -156
- package/src/components/List/__snapshots__/List.test.tsx.snap +0 -213
- package/src/components/Logo/Logo.stories.mdx +0 -295
- package/src/components/Logo/Logo.test.tsx +0 -116
- package/src/components/Logo/Logo.tsx +0 -151
- package/src/components/Logo/LogoSvgs.tsx +0 -90
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +0 -142
- package/src/components/Modal/Modal.stories.mdx +0 -294
- package/src/components/Modal/Modal.test.tsx +0 -157
- package/src/components/Modal/Modal.tsx +0 -154
- package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +0 -25
- package/src/components/Notification/Notification.stories.mdx +0 -358
- package/src/components/Notification/Notification.test.tsx +0 -279
- package/src/components/Notification/Notification.tsx +0 -224
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +0 -525
- package/src/components/Pagination/Pagination.stories.mdx +0 -184
- package/src/components/Pagination/Pagination.test.tsx +0 -419
- package/src/components/Pagination/Pagination.tsx +0 -269
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -544
- package/src/components/Placeholder/Placeholder.tsx +0 -19
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +0 -360
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +0 -298
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +0 -132
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +0 -434
- package/src/components/Radio/Radio.stories.mdx +0 -216
- package/src/components/Radio/Radio.test.tsx +0 -247
- package/src/components/Radio/Radio.tsx +0 -119
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +0 -451
- package/src/components/RadioGroup/RadioGroup.stories.mdx +0 -479
- package/src/components/RadioGroup/RadioGroup.test.tsx +0 -471
- package/src/components/RadioGroup/RadioGroup.tsx +0 -171
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +0 -1550
- package/src/components/SearchBar/SearchBar.stories.mdx +0 -518
- package/src/components/SearchBar/SearchBar.test.tsx +0 -435
- package/src/components/SearchBar/SearchBar.tsx +0 -210
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +0 -1049
- package/src/components/Select/Select.stories.mdx +0 -439
- package/src/components/Select/Select.test.tsx +0 -358
- package/src/components/Select/Select.tsx +0 -183
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +0 -895
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +0 -142
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +0 -116
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +0 -123
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +0 -898
- package/src/components/SkipNavigation/SkipNavigation.stories.mdx +0 -90
- package/src/components/SkipNavigation/SkipNavigation.test.tsx +0 -63
- package/src/components/SkipNavigation/SkipNavigation.tsx +0 -51
- package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +0 -130
- package/src/components/Slider/Slider.stories.mdx +0 -628
- package/src/components/Slider/Slider.test.tsx +0 -736
- package/src/components/Slider/Slider.tsx +0 -322
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +0 -2186
- package/src/components/StatusBadge/StatusBadge.stories.mdx +0 -109
- package/src/components/StatusBadge/StatusBadge.test.tsx +0 -70
- package/src/components/StatusBadge/StatusBadge.tsx +0 -35
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +0 -47
- package/src/components/StructuredContent/StructuredContent.stories.mdx +0 -567
- package/src/components/StructuredContent/StructuredContent.test.tsx +0 -435
- package/src/components/StructuredContent/StructuredContent.tsx +0 -139
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +0 -368
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +0 -206
- package/src/components/StyleGuide/Breakpoints.stories.mdx +0 -55
- package/src/components/StyleGuide/Buttons.stories.mdx +0 -194
- package/src/components/StyleGuide/ColorCard.tsx +0 -43
- package/src/components/StyleGuide/Colors.stories.mdx +0 -201
- package/src/components/StyleGuide/DesignTokens.stories.mdx +0 -193
- package/src/components/StyleGuide/Forms.stories.mdx +0 -94
- package/src/components/StyleGuide/Iconography.stories.mdx +0 -142
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -116
- package/src/components/StyleGuide/Typography.stories.mdx +0 -419
- package/src/components/Table/Table.stories.mdx +0 -272
- package/src/components/Table/Table.test.tsx +0 -241
- package/src/components/Table/Table.tsx +0 -152
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +0 -1703
- package/src/components/Tabs/Tabs.stories.mdx +0 -338
- package/src/components/Tabs/Tabs.test.tsx +0 -298
- package/src/components/Tabs/Tabs.tsx +0 -264
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +0 -584
- package/src/components/Template/Template.stories.mdx +0 -695
- package/src/components/Template/Template.test.tsx +0 -309
- package/src/components/Template/Template.tsx +0 -326
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +0 -342
- package/src/components/Text/Text.stories.mdx +0 -103
- package/src/components/Text/Text.test.tsx +0 -63
- package/src/components/Text/Text.tsx +0 -50
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +0 -50
- package/src/components/TextInput/TextInput.stories.mdx +0 -268
- package/src/components/TextInput/TextInput.test.tsx +0 -451
- package/src/components/TextInput/TextInput.tsx +0 -240
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +0 -274
- package/src/components/Toggle/Toggle.stories.mdx +0 -237
- package/src/components/Toggle/Toggle.test.tsx +0 -170
- package/src/components/Toggle/Toggle.tsx +0 -128
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +0 -470
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +0 -212
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +0 -308
- package/src/components/VideoPlayer/VideoPlayer.tsx +0 -188
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +0 -192
- package/src/docs/Chakra.stories.mdx +0 -563
- package/src/docs/Welcome.stories.mdx +0 -148
- package/src/helpers/types.ts +0 -1
- package/src/hooks/tests/useCarouselStyles.test.ts +0 -140
- package/src/hooks/tests/useNYPLTheme.test.tsx +0 -36
- package/src/hooks/useCarouselStyles.stories.mdx +0 -30
- package/src/hooks/useCarouselStyles.ts +0 -35
- package/src/hooks/useNYPLTheme.stories.mdx +0 -98
- package/src/hooks/useNYPLTheme.ts +0 -91
- package/src/hooks/useWindowSize.stories.mdx +0 -23
- package/src/hooks/useWindowSize.ts +0 -40
- package/src/index.ts +0 -136
- package/src/resources.scss +0 -6
- package/src/styles/base/_01-breakpoints.scss +0 -27
- package/src/styles/base/_02-mixins.scss +0 -103
- package/src/styles/base/_place-holder.scss +0 -33
- package/src/styles/space/_space-inline.scss +0 -79
- package/src/styles/space/_space-inset.scss +0 -57
- package/src/styles/space/_space-stack.scss +0 -116
- package/src/styles.scss +0 -23
- package/src/theme/components/accordion.ts +0 -25
- package/src/theme/components/breadcrumb.ts +0 -94
- package/src/theme/components/button.ts +0 -133
- package/src/theme/components/buttonGroup.ts +0 -10
- package/src/theme/components/card.ts +0 -237
- package/src/theme/components/checkbox.ts +0 -110
- package/src/theme/components/checkboxGroup.ts +0 -10
- package/src/theme/components/componentWrapper.ts +0 -14
- package/src/theme/components/customTable.ts +0 -77
- package/src/theme/components/datePicker.ts +0 -17
- package/src/theme/components/fieldset.ts +0 -23
- package/src/theme/components/global.ts +0 -91
- package/src/theme/components/globalMixins.ts +0 -24
- package/src/theme/components/heading.ts +0 -79
- package/src/theme/components/helperErrorText.ts +0 -14
- package/src/theme/components/hero.ts +0 -238
- package/src/theme/components/horizontalRule.ts +0 -17
- package/src/theme/components/icon.ts +0 -88
- package/src/theme/components/image.ts +0 -136
- package/src/theme/components/label.ts +0 -15
- package/src/theme/components/link.ts +0 -63
- package/src/theme/components/list.ts +0 -88
- package/src/theme/components/logo.ts +0 -58
- package/src/theme/components/notification.ts +0 -132
- package/src/theme/components/pagination.ts +0 -17
- package/src/theme/components/progressIndicator.ts +0 -67
- package/src/theme/components/radio.ts +0 -103
- package/src/theme/components/radioGroup.ts +0 -10
- package/src/theme/components/searchBar.ts +0 -19
- package/src/theme/components/select.ts +0 -72
- package/src/theme/components/skeletonLoader.ts +0 -113
- package/src/theme/components/skipNavigation.ts +0 -29
- package/src/theme/components/slider.ts +0 -95
- package/src/theme/components/statusBadge.ts +0 -26
- package/src/theme/components/structuredContent.ts +0 -149
- package/src/theme/components/tabs.ts +0 -109
- package/src/theme/components/template.ts +0 -114
- package/src/theme/components/text.ts +0 -38
- package/src/theme/components/textInput.ts +0 -65
- package/src/theme/components/toggle.ts +0 -109
- package/src/theme/components/videoPlayer.ts +0 -47
- package/src/theme/foundations/breakpoints.ts +0 -24
- package/src/theme/foundations/colors.ts +0 -212
- package/src/theme/foundations/global.ts +0 -43
- package/src/theme/foundations/radii.ts +0 -7
- package/src/theme/foundations/shadows.ts +0 -5
- package/src/theme/foundations/spacing.ts +0 -136
- package/src/theme/foundations/typography.ts +0 -107
- package/src/theme/index.ts +0 -131
- package/src/theme/provider.tsx +0 -9
- package/src/theme/types.ts +0 -1
- package/src/utils/componentCategories.ts +0 -152
- package/src/utils/interfaces.ts +0 -5
- package/src/utils/utils.ts +0 -84
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Box,
|
|
3
|
-
chakra,
|
|
4
|
-
LinkBox as ChakraLinkBox,
|
|
5
|
-
LinkOverlay as ChakraLinkOverlay,
|
|
6
|
-
useMultiStyleConfig,
|
|
7
|
-
useStyleConfig,
|
|
8
|
-
} from "@chakra-ui/react";
|
|
9
|
-
import * as React from "react";
|
|
10
|
-
|
|
11
|
-
import { LayoutTypes } from "../../helpers/types";
|
|
12
|
-
import Heading from "../Heading/Heading";
|
|
13
|
-
import Image, {
|
|
14
|
-
ComponentImageProps,
|
|
15
|
-
ImageProps,
|
|
16
|
-
ImageSizes,
|
|
17
|
-
} from "../Image/Image";
|
|
18
|
-
import useWindowSize from "../../hooks/useWindowSize";
|
|
19
|
-
|
|
20
|
-
interface CustomColorProps {
|
|
21
|
-
backgroundColor?: string;
|
|
22
|
-
color?: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
interface CardBaseProps {
|
|
26
|
-
/** Optional value to control the alignment of the text and elements. */
|
|
27
|
-
isCentered?: boolean;
|
|
28
|
-
/** Optional value to render the layout in a row or column.
|
|
29
|
-
* Default is `"column"`. */
|
|
30
|
-
layout?: LayoutTypes;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
interface CardLinkBoxProps {
|
|
34
|
-
/** Main link to use when the full `Card` component should be clickable. */
|
|
35
|
-
mainActionLink?: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Used internally only for the `imageProps` prop for the `Card` component.
|
|
39
|
-
interface CardImageProps extends ComponentImageProps {
|
|
40
|
-
/** Optional boolean value to control the position of the `CardImage`. */
|
|
41
|
-
isAtEnd?: boolean;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
interface CardActionsProps extends CardBaseProps {
|
|
45
|
-
/** Optional boolean value to control visibility of border on the bottom edge
|
|
46
|
-
* of the card actions element */
|
|
47
|
-
bottomBorder?: boolean;
|
|
48
|
-
/** Optional boolean value to control visibility of border on the top edge of
|
|
49
|
-
* the card actions element */
|
|
50
|
-
topBorder?: boolean;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/** Used only internally for the `CardImage` component. */
|
|
54
|
-
interface CardImageComponentProps extends CardBaseProps, ImageProps {
|
|
55
|
-
/** Optional boolean value to control the position of the `CardImage`. */
|
|
56
|
-
isAtEnd?: boolean;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface CardProps extends CardBaseProps, CardLinkBoxProps {
|
|
60
|
-
/** Optional hex color value used to set the card background color. */
|
|
61
|
-
backgroundColor?: string;
|
|
62
|
-
/** Optional CSS class name to add. */
|
|
63
|
-
className?: string;
|
|
64
|
-
/** Optional hex color value used to override the default text color. */
|
|
65
|
-
foregroundColor?: string;
|
|
66
|
-
/** ID that other components can cross reference for accessibility purposes. */
|
|
67
|
-
id?: string;
|
|
68
|
-
/** Optional boolean value to control the visibility of a border around
|
|
69
|
-
* the card. */
|
|
70
|
-
isBordered?: boolean;
|
|
71
|
-
/** Object used to create and render the `Image` component. */
|
|
72
|
-
imageProps?: CardImageProps;
|
|
73
|
-
/** Set CardActions to the right content side. This only works in
|
|
74
|
-
* the row layout. */
|
|
75
|
-
isAlignedRightActions?: boolean;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* The CardImage component is used internally in the `Card` component. It
|
|
80
|
-
* renders an `Image` component but with overriding styles specific to the
|
|
81
|
-
* `Card` component.
|
|
82
|
-
*/
|
|
83
|
-
function CardImage(
|
|
84
|
-
props: React.ComponentProps<"img"> & CardImageComponentProps
|
|
85
|
-
) {
|
|
86
|
-
const {
|
|
87
|
-
alt,
|
|
88
|
-
aspectRatio,
|
|
89
|
-
caption,
|
|
90
|
-
component,
|
|
91
|
-
credit,
|
|
92
|
-
isAtEnd,
|
|
93
|
-
isCentered,
|
|
94
|
-
layout,
|
|
95
|
-
size,
|
|
96
|
-
src,
|
|
97
|
-
} = props;
|
|
98
|
-
// Additional styles to add to the `Image` component.
|
|
99
|
-
const styles = useStyleConfig("CardImage", {
|
|
100
|
-
imageIsAtEnd: isAtEnd,
|
|
101
|
-
isCentered,
|
|
102
|
-
layout,
|
|
103
|
-
size,
|
|
104
|
-
});
|
|
105
|
-
return (
|
|
106
|
-
<Box __css={styles}>
|
|
107
|
-
<Image
|
|
108
|
-
alt={alt}
|
|
109
|
-
caption={caption}
|
|
110
|
-
component={component}
|
|
111
|
-
credit={credit}
|
|
112
|
-
aspectRatio={aspectRatio}
|
|
113
|
-
size={size}
|
|
114
|
-
src={src}
|
|
115
|
-
/>
|
|
116
|
-
</Box>
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// CardHeading child-component
|
|
121
|
-
export const CardHeading = chakra(Heading);
|
|
122
|
-
|
|
123
|
-
// CardContent child-component
|
|
124
|
-
export const CardContent = chakra((props: React.PropsWithChildren<{}>) => {
|
|
125
|
-
const { children, ...rest } = props;
|
|
126
|
-
const styles = useStyleConfig("CardContent");
|
|
127
|
-
return children ? (
|
|
128
|
-
<Box __css={styles} {...rest}>
|
|
129
|
-
{children}
|
|
130
|
-
</Box>
|
|
131
|
-
) : null;
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
// CardActions child-component
|
|
135
|
-
export const CardActions = chakra(
|
|
136
|
-
(props: React.PropsWithChildren<CardActionsProps>) => {
|
|
137
|
-
const { bottomBorder, children, isCentered, layout, topBorder, ...rest } =
|
|
138
|
-
props;
|
|
139
|
-
const styles = useStyleConfig("CardActions", {
|
|
140
|
-
bottomBorder,
|
|
141
|
-
isCentered,
|
|
142
|
-
layout,
|
|
143
|
-
topBorder,
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
return children ? (
|
|
147
|
-
<Box __css={styles} {...rest}>
|
|
148
|
-
{children}
|
|
149
|
-
</Box>
|
|
150
|
-
) : null;
|
|
151
|
-
}
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* If `mainActionLink` is passed, then this adds Chakra's `LinkBox` wrapper
|
|
156
|
-
* component to the entire `Card` component. This works together with the
|
|
157
|
-
* `CardLinkOverlay` component to provide a clickable overlay.
|
|
158
|
-
*/
|
|
159
|
-
function CardLinkBox({
|
|
160
|
-
children,
|
|
161
|
-
mainActionLink,
|
|
162
|
-
}: React.PropsWithChildren<CardLinkBoxProps>) {
|
|
163
|
-
return mainActionLink ? (
|
|
164
|
-
<ChakraLinkBox>{children}</ChakraLinkBox>
|
|
165
|
-
) : (
|
|
166
|
-
<>{children}</>
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* If `mainActionLink` is passed, then this adds Chakra's `LinkOverlay` around
|
|
172
|
-
* text that should be linked, in this case the `CardHeading` text. This works
|
|
173
|
-
* together with the `CardLinkBox` component to provide a clickable overlay to
|
|
174
|
-
* the `Card` component while still allowing links in the `CardActions` to be
|
|
175
|
-
* clickable.
|
|
176
|
-
*/
|
|
177
|
-
function CardLinkOverlay({
|
|
178
|
-
children,
|
|
179
|
-
mainActionLink,
|
|
180
|
-
}: React.PropsWithChildren<CardLinkBoxProps>) {
|
|
181
|
-
return mainActionLink ? (
|
|
182
|
-
<ChakraLinkOverlay href={mainActionLink}>{children}</ChakraLinkOverlay>
|
|
183
|
-
) : (
|
|
184
|
-
<>{children}</>
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
export const Card = chakra((props: React.PropsWithChildren<CardProps>) => {
|
|
189
|
-
const {
|
|
190
|
-
backgroundColor,
|
|
191
|
-
children,
|
|
192
|
-
className,
|
|
193
|
-
foregroundColor,
|
|
194
|
-
id,
|
|
195
|
-
imageProps = {
|
|
196
|
-
alt: "",
|
|
197
|
-
aspectRatio: "square",
|
|
198
|
-
caption: undefined,
|
|
199
|
-
component: undefined,
|
|
200
|
-
credit: undefined,
|
|
201
|
-
isAtEnd: false,
|
|
202
|
-
size: "default",
|
|
203
|
-
src: "",
|
|
204
|
-
},
|
|
205
|
-
isAlignedRightActions = false,
|
|
206
|
-
isBordered,
|
|
207
|
-
isCentered = false,
|
|
208
|
-
layout = "column",
|
|
209
|
-
mainActionLink,
|
|
210
|
-
...rest
|
|
211
|
-
} = props;
|
|
212
|
-
const hasImage = imageProps.src || imageProps.component;
|
|
213
|
-
const [finalImageSize, setFinalImageSize] = React.useState<ImageSizes>(
|
|
214
|
-
imageProps.size || "default"
|
|
215
|
-
);
|
|
216
|
-
const finalImageAspectRatio = imageProps.component
|
|
217
|
-
? "original"
|
|
218
|
-
: imageProps.aspectRatio;
|
|
219
|
-
const customColors: CustomColorProps = {};
|
|
220
|
-
const cardContents: JSX.Element[] = [];
|
|
221
|
-
const cardRightContents: JSX.Element[] = [];
|
|
222
|
-
const windowDimensions = useWindowSize();
|
|
223
|
-
let cardHeadingCount = 0;
|
|
224
|
-
|
|
225
|
-
if (imageProps.component && imageProps.aspectRatio) {
|
|
226
|
-
console.warn(
|
|
227
|
-
"NYPL Reservoir Card: Both the `imageProps.component` and `imageProps.aspectRatio` " +
|
|
228
|
-
"props were set but `imageProps.aspectRatio` will be ignored in favor " +
|
|
229
|
-
"of the aspect ratio on `imageProps.component` prop."
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// The `Card`'s image should always display as 100% width on mobile. To
|
|
234
|
-
// achieve this, we set the size to `"default"` only when the
|
|
235
|
-
// viewport is less than "600px". Otherwise, we set the size to
|
|
236
|
-
// the value passed in via `imageSize`.
|
|
237
|
-
React.useEffect(() => {
|
|
238
|
-
if (windowDimensions.width < 600) {
|
|
239
|
-
setFinalImageSize("default");
|
|
240
|
-
} else {
|
|
241
|
-
setFinalImageSize(imageProps.size);
|
|
242
|
-
}
|
|
243
|
-
}, [windowDimensions.width, imageProps.size]);
|
|
244
|
-
|
|
245
|
-
backgroundColor && (customColors["backgroundColor"] = backgroundColor);
|
|
246
|
-
foregroundColor && (customColors["color"] = foregroundColor);
|
|
247
|
-
|
|
248
|
-
const styles = useMultiStyleConfig("Card", {
|
|
249
|
-
hasImage,
|
|
250
|
-
imageIsAtEnd: imageProps.isAtEnd,
|
|
251
|
-
isAlignedRightActions,
|
|
252
|
-
isBordered,
|
|
253
|
-
isCentered,
|
|
254
|
-
layout,
|
|
255
|
-
mainActionLink,
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
React.Children.map(
|
|
259
|
-
children as JSX.Element,
|
|
260
|
-
(child: React.ReactElement, key) => {
|
|
261
|
-
const isCardActions =
|
|
262
|
-
child.type === CardActions || child.props.mdxType === "CardActions";
|
|
263
|
-
if (child.type === CardHeading || child.props.mdxType === "CardHeading") {
|
|
264
|
-
// If the child is a `CardHeading` component, then we add the
|
|
265
|
-
// `CardLinkOverlay` inside of the `Heading` component and wrap its text.
|
|
266
|
-
// This allows other links in the `CardActions` to be clickable. This is
|
|
267
|
-
// only done for the first `CardHeading` component but does not affect
|
|
268
|
-
// the full-click feature.
|
|
269
|
-
const newChildren =
|
|
270
|
-
cardHeadingCount === 0 ? (
|
|
271
|
-
<CardLinkOverlay mainActionLink={mainActionLink}>
|
|
272
|
-
{child.props.children}
|
|
273
|
-
</CardLinkOverlay>
|
|
274
|
-
) : (
|
|
275
|
-
child.props.children
|
|
276
|
-
);
|
|
277
|
-
const elem = React.cloneElement(child, {
|
|
278
|
-
key,
|
|
279
|
-
// Override the child text with the potential `CardLinkOverlay`.
|
|
280
|
-
children: newChildren,
|
|
281
|
-
layout,
|
|
282
|
-
__css: styles.heading,
|
|
283
|
-
});
|
|
284
|
-
cardContents.push(elem);
|
|
285
|
-
cardHeadingCount++;
|
|
286
|
-
} else if (
|
|
287
|
-
child.type === CardContent ||
|
|
288
|
-
child.props.mdxType === "CardContent"
|
|
289
|
-
) {
|
|
290
|
-
const elem = React.cloneElement(child, { key });
|
|
291
|
-
cardContents.push(elem);
|
|
292
|
-
} else if (isCardActions) {
|
|
293
|
-
const elem = React.cloneElement(child, { key, isCentered, layout });
|
|
294
|
-
|
|
295
|
-
// Only allow `CardActions` to align to the right of the main
|
|
296
|
-
// `CardContent` component when in the row layout.
|
|
297
|
-
if (isAlignedRightActions && layout === "row") {
|
|
298
|
-
cardRightContents.push(elem);
|
|
299
|
-
} else {
|
|
300
|
-
cardContents.push(elem);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
);
|
|
305
|
-
|
|
306
|
-
return (
|
|
307
|
-
<CardLinkBox mainActionLink={mainActionLink}>
|
|
308
|
-
<Box
|
|
309
|
-
id={id}
|
|
310
|
-
className={className}
|
|
311
|
-
__css={{
|
|
312
|
-
...styles,
|
|
313
|
-
...customColors,
|
|
314
|
-
}}
|
|
315
|
-
{...rest}
|
|
316
|
-
>
|
|
317
|
-
{hasImage && (
|
|
318
|
-
<CardImage
|
|
319
|
-
alt={imageProps.alt}
|
|
320
|
-
aspectRatio={finalImageAspectRatio}
|
|
321
|
-
caption={imageProps.caption}
|
|
322
|
-
component={imageProps.component}
|
|
323
|
-
credit={imageProps.credit}
|
|
324
|
-
isAtEnd={imageProps.isAtEnd}
|
|
325
|
-
layout={layout}
|
|
326
|
-
size={finalImageSize}
|
|
327
|
-
src={imageProps.src ? imageProps.src : undefined}
|
|
328
|
-
/>
|
|
329
|
-
)}
|
|
330
|
-
<Box className="card-body" __css={styles.body}>
|
|
331
|
-
{cardContents}
|
|
332
|
-
</Box>
|
|
333
|
-
{cardRightContents.length ? (
|
|
334
|
-
<Box
|
|
335
|
-
className="card-right"
|
|
336
|
-
__css={{ ...styles.body, ...styles.actions }}
|
|
337
|
-
>
|
|
338
|
-
{cardRightContents}
|
|
339
|
-
</Box>
|
|
340
|
-
) : null}
|
|
341
|
-
</Box>
|
|
342
|
-
</CardLinkBox>
|
|
343
|
-
);
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
export default Card;
|