@nypl/design-system-react-components 0.25.11 → 0.26.0
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 +151 -0
- package/README.md +14 -26
- package/dist/components/Accordion/Accordion.d.ts +6 -4
- package/dist/components/Accordion/AccordionTypes.d.ts +5 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -4
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +2 -1
- package/dist/components/Button/Button.d.ts +2 -2
- package/dist/components/Card/Card.d.ts +22 -29
- package/dist/components/Checkbox/Checkbox.d.ts +3 -3
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +9 -6
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +5 -6
- package/dist/components/Fieldset/Fieldset.d.ts +5 -6
- package/dist/components/Form/Form.d.ts +6 -6
- package/dist/components/Grid/GridTypes.d.ts +7 -7
- package/dist/components/Grid/SimpleGrid.d.ts +1 -1
- package/dist/components/Heading/Heading.d.ts +5 -5
- package/dist/components/Heading/HeadingTypes.d.ts +1 -1
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
- package/dist/components/Hero/Hero.d.ts +9 -5
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
- package/dist/components/Icons/Icon.d.ts +2 -1
- package/dist/components/Icons/IconTypes.d.ts +10 -7
- package/dist/components/Image/Image.d.ts +27 -9
- package/dist/components/Image/ImageTypes.d.ts +4 -4
- package/dist/components/Label/Label.d.ts +7 -4
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/List/List.d.ts +11 -11
- package/dist/components/List/ListTypes.d.ts +1 -1
- package/dist/components/Logo/Logo.d.ts +2 -1
- package/dist/components/Logo/LogoSvgs.d.ts +8 -0
- package/dist/components/Logo/LogoTypes.d.ts +10 -2
- package/dist/components/Notification/Notification.d.ts +7 -7
- package/dist/components/Pagination/Pagination.d.ts +8 -4
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
- package/dist/components/Radio/Radio.d.ts +5 -7
- package/dist/components/RadioGroup/RadioGroup.d.ts +16 -8
- package/dist/components/SearchBar/SearchBar.d.ts +5 -5
- package/dist/components/Select/Select.d.ts +12 -8
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -6
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +0 -4
- package/dist/components/Slider/Slider.d.ts +6 -4
- package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
- package/dist/components/StructuredContent/StructuredContent.d.ts +10 -23
- package/dist/components/Table/Table.d.ts +1 -1
- package/dist/components/Tabs/Tabs.d.ts +7 -6
- package/dist/components/Template/Template.d.ts +18 -9
- package/dist/components/Text/Text.d.ts +4 -4
- package/dist/components/Text/TextTypes.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +7 -7
- package/dist/components/Toggle/Toggle.d.ts +8 -10
- package/dist/components/Toggle/{ToggleSizes.d.ts → ToggleTypes.d.ts} +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +2802 -1686
- 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 +2811 -1699
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/helpers/enums.d.ts +4 -0
- package/dist/hooks/useCarouselStyles.d.ts +3 -2
- package/dist/hooks/useNYPLTheme.d.ts +12 -0
- package/dist/index.d.ts +11 -9
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +7 -12
- package/dist/theme/components/breadcrumb.d.ts +6 -0
- package/dist/theme/components/button.d.ts +10 -2
- package/dist/theme/components/card.d.ts +44 -24
- package/dist/theme/components/checkbox.d.ts +6 -6
- package/dist/theme/components/checkboxGroup.d.ts +4 -2
- package/dist/theme/components/componentWrapper.d.ts +2 -2
- package/dist/theme/components/customTable.d.ts +84 -1
- package/dist/theme/components/fieldset.d.ts +6 -14
- package/dist/theme/components/global.d.ts +37 -29
- package/dist/theme/components/globalMixins.d.ts +8 -8
- package/dist/theme/components/heading.d.ts +53 -0
- package/dist/theme/components/helperErrorText.d.ts +1 -0
- package/dist/theme/components/hero.d.ts +21 -15
- package/dist/theme/components/image.d.ts +1 -1
- package/dist/theme/components/label.d.ts +9 -10
- package/dist/theme/components/list.d.ts +105 -9
- package/dist/theme/components/notification.d.ts +7 -4
- package/dist/theme/components/pagination.d.ts +2 -5
- package/dist/theme/components/radio.d.ts +10 -6
- package/dist/theme/components/radioGroup.d.ts +4 -2
- package/dist/theme/components/select.d.ts +38 -13
- package/dist/theme/components/skeletonLoader.d.ts +2 -2
- package/dist/theme/components/slider.d.ts +14 -7
- package/dist/theme/components/structuredContent.d.ts +197 -0
- package/dist/theme/components/textInput.d.ts +22 -14
- package/dist/theme/components/toggle.d.ts +25 -6
- package/dist/theme/foundations/global.d.ts +33 -3
- package/dist/theme/foundations/radii.d.ts +1 -0
- package/dist/theme/foundations/spacing.d.ts +46 -43
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +5 -6
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +34 -0
- package/src/components/Accordion/Accordion.stories.mdx +150 -66
- package/src/components/Accordion/Accordion.test.tsx +65 -17
- package/src/components/Accordion/Accordion.tsx +61 -27
- package/src/components/Accordion/AccordionTypes.tsx +5 -0
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +505 -14
- package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +53 -18
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +66 -35
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +14 -13
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +2 -1
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +308 -10
- package/src/components/Button/Button.stories.mdx +87 -23
- package/src/components/Button/Button.test.tsx +25 -0
- package/src/components/Button/Button.tsx +18 -7
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
- package/src/components/Card/Card.stories.mdx +493 -329
- package/src/components/Card/Card.test.tsx +138 -18
- package/src/components/Card/Card.tsx +151 -85
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +220 -100
- package/src/components/Chakra/Center.stories.mdx +2 -2
- package/src/components/Chakra/Grid.stories.mdx +4 -4
- package/src/components/Checkbox/Checkbox.stories.mdx +73 -9
- package/src/components/Checkbox/Checkbox.test.tsx +89 -10
- package/src/components/Checkbox/Checkbox.tsx +27 -16
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +209 -6
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +135 -23
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +216 -90
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +39 -26
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +493 -89
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
- package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
- package/src/components/DatePicker/DatePicker.test.tsx +94 -15
- package/src/components/DatePicker/DatePicker.tsx +67 -58
- package/src/components/DatePicker/_DatePicker.scss +71 -13
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
- package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
- package/src/components/Fieldset/Fieldset.test.tsx +58 -28
- package/src/components/Fieldset/Fieldset.tsx +35 -30
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
- package/src/components/Form/Form.stories.mdx +118 -47
- package/src/components/Form/Form.test.tsx +59 -16
- package/src/components/Form/Form.tsx +89 -65
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
- package/src/components/Grid/GridTypes.tsx +7 -7
- package/src/components/Grid/SimpleGrid.stories.mdx +87 -41
- package/src/components/Grid/SimpleGrid.test.tsx +24 -9
- package/src/components/Grid/SimpleGrid.tsx +29 -20
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
- package/src/components/Heading/Heading.stories.mdx +56 -25
- package/src/components/Heading/Heading.test.tsx +17 -7
- package/src/components/Heading/Heading.tsx +60 -58
- package/src/components/Heading/HeadingTypes.tsx +1 -1
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +27 -8
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
- package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
- package/src/components/Hero/Hero.stories.mdx +143 -113
- package/src/components/Hero/Hero.test.tsx +146 -58
- package/src/components/Hero/Hero.tsx +144 -112
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -17
- package/src/components/HorizontalRule/HorizontalRule.tsx +9 -25
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
- package/src/components/Icons/Icon.stories.mdx +80 -23
- package/src/components/Icons/Icon.test.tsx +51 -2
- package/src/components/Icons/Icon.tsx +93 -71
- package/src/components/Icons/IconTypes.tsx +9 -6
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
- package/src/components/Image/Image.stories.mdx +160 -71
- package/src/components/Image/Image.test.tsx +40 -48
- package/src/components/Image/Image.tsx +80 -48
- package/src/components/Image/ImageTypes.ts +4 -4
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +84 -21
- package/src/components/Label/Label.stories.mdx +42 -20
- package/src/components/Label/Label.test.tsx +42 -17
- package/src/components/Label/Label.tsx +22 -13
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
- package/src/components/Link/Link.stories.mdx +25 -1
- package/src/components/Link/Link.test.tsx +21 -0
- package/src/components/Link/Link.tsx +16 -9
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
- package/src/components/List/List.stories.mdx +75 -40
- package/src/components/List/List.test.tsx +73 -22
- package/src/components/List/List.tsx +44 -28
- package/src/components/List/ListTypes.tsx +1 -1
- package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
- package/src/components/Logo/Logo.stories.mdx +40 -16
- package/src/components/Logo/Logo.test.tsx +29 -2
- package/src/components/Logo/Logo.tsx +28 -11
- package/src/components/Logo/LogoSvgs.tsx +16 -0
- package/src/components/Logo/LogoTypes.tsx +9 -1
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
- package/src/components/Modal/Modal.stories.mdx +13 -0
- package/src/components/Notification/Notification.stories.mdx +34 -5
- package/src/components/Notification/Notification.test.tsx +43 -9
- package/src/components/Notification/Notification.tsx +59 -55
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +256 -32
- package/src/components/Pagination/Pagination.stories.mdx +76 -13
- package/src/components/Pagination/Pagination.test.tsx +116 -5
- package/src/components/Pagination/Pagination.tsx +54 -29
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +247 -30
- package/src/components/Placeholder/Placeholder.tsx +3 -1
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +87 -13
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +20 -10
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
- package/src/components/Radio/Radio.stories.mdx +75 -11
- package/src/components/Radio/Radio.test.tsx +83 -9
- package/src/components/Radio/Radio.tsx +70 -61
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +168 -10
- package/src/components/RadioGroup/RadioGroup.stories.mdx +293 -94
- package/src/components/RadioGroup/RadioGroup.test.tsx +193 -68
- package/src/components/RadioGroup/RadioGroup.tsx +110 -101
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1258 -902
- package/src/components/SearchBar/SearchBar.stories.mdx +104 -39
- package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +66 -6
- package/src/components/SearchBar/SearchBar.tsx +23 -13
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
- package/src/components/Select/Select.stories.mdx +151 -62
- package/src/components/Select/Select.test.tsx +56 -44
- package/src/components/Select/Select.tsx +125 -104
- package/src/components/Select/SelectTypes.tsx +5 -0
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +53 -23
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +14 -8
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +80 -78
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
- package/src/components/Slider/Slider.stories.mdx +123 -41
- package/src/components/Slider/Slider.test.tsx +65 -17
- package/src/components/Slider/Slider.tsx +34 -24
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
- package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
- package/src/components/StatusBadge/StatusBadge.test.tsx +19 -1
- package/src/components/StatusBadge/StatusBadge.tsx +25 -20
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
- package/src/components/StructuredContent/StructuredContent.stories.mdx +229 -61
- package/src/components/StructuredContent/StructuredContent.test.tsx +162 -101
- package/src/components/StructuredContent/StructuredContent.tsx +98 -103
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +9 -9
- package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
- package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
- package/src/components/StyleGuide/ColorCard.tsx +4 -4
- package/src/components/StyleGuide/Colors.stories.mdx +34 -20
- package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
- package/src/components/StyleGuide/Forms.stories.mdx +27 -12
- package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
- package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
- package/src/components/StyleGuide/Typography.stories.mdx +47 -33
- package/src/components/Table/Table.stories.mdx +38 -11
- package/src/components/Table/Table.test.tsx +16 -1
- package/src/components/Table/Table.tsx +10 -8
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
- package/src/components/Tabs/Tabs.stories.mdx +59 -10
- package/src/components/Tabs/Tabs.test.tsx +29 -11
- package/src/components/Tabs/Tabs.tsx +28 -21
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
- package/src/components/Template/Template.stories.mdx +73 -32
- package/src/components/Template/Template.test.tsx +68 -5
- package/src/components/Template/Template.tsx +86 -72
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +195 -22
- package/src/components/Text/Text.stories.mdx +32 -15
- package/src/components/Text/Text.test.tsx +14 -11
- package/src/components/Text/Text.tsx +13 -16
- package/src/components/Text/TextTypes.tsx +1 -1
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
- package/src/components/TextInput/TextInput.stories.mdx +73 -27
- package/src/components/TextInput/TextInput.test.tsx +65 -50
- package/src/components/TextInput/TextInput.tsx +123 -115
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
- package/src/components/Toggle/Toggle.stories.mdx +74 -26
- package/src/components/Toggle/Toggle.test.tsx +41 -10
- package/src/components/Toggle/Toggle.tsx +31 -27
- package/src/components/Toggle/{ToggleSizes.tsx → ToggleTypes.tsx} +1 -1
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +195 -8
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +41 -6
- package/src/components/VideoPlayer/VideoPlayer.tsx +134 -120
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
- package/src/docs/Chakra.stories.mdx +51 -10
- package/src/docs/Welcome.stories.mdx +168 -0
- package/src/{components/Card/CardTypes.tsx → helpers/enums.ts} +2 -2
- package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
- package/src/hooks/useCarouselStyles.stories.mdx +30 -0
- package/src/hooks/useCarouselStyles.ts +3 -2
- package/src/hooks/useNYPLTheme.stories.mdx +101 -0
- package/src/hooks/useNYPLTheme.ts +31 -7
- package/src/hooks/useWindowSize.stories.mdx +23 -0
- package/src/index.ts +11 -15
- package/src/styles/base/_place-holder.scss +3 -1
- package/src/styles.scss +0 -2
- package/src/theme/components/accordion.ts +7 -12
- package/src/theme/components/breadcrumb.ts +7 -0
- package/src/theme/components/button.ts +15 -7
- package/src/theme/components/card.ts +56 -36
- package/src/theme/components/checkbox.ts +12 -14
- package/src/theme/components/checkboxGroup.ts +4 -2
- package/src/theme/components/componentWrapper.ts +2 -2
- package/src/theme/components/customTable.ts +39 -31
- package/src/theme/components/fieldset.ts +3 -2
- package/src/theme/components/global.ts +42 -33
- package/src/theme/components/globalMixins.ts +8 -8
- package/src/theme/components/heading.ts +1 -1
- package/src/theme/components/helperErrorText.ts +1 -0
- package/src/theme/components/hero.ts +14 -16
- package/src/theme/components/icon.ts +5 -2
- package/src/theme/components/image.ts +1 -1
- package/src/theme/components/label.ts +4 -3
- package/src/theme/components/list.ts +76 -65
- package/src/theme/components/notification.ts +10 -7
- package/src/theme/components/pagination.ts +2 -5
- package/src/theme/components/progressIndicator.ts +3 -3
- package/src/theme/components/radio.ts +11 -14
- package/src/theme/components/radioGroup.ts +4 -2
- package/src/theme/components/select.ts +37 -18
- package/src/theme/components/skeletonLoader.ts +3 -3
- package/src/theme/components/slider.ts +19 -15
- package/src/theme/components/statusBadge.ts +2 -2
- package/src/theme/components/structuredContent.ts +66 -1
- package/src/theme/components/tabs.ts +2 -2
- package/src/theme/components/template.ts +9 -9
- package/src/theme/components/textInput.ts +13 -12
- package/src/theme/components/toggle.ts +76 -42
- package/src/theme/components/videoPlayer.ts +1 -1
- package/src/theme/foundations/colors.ts +20 -13
- package/src/theme/foundations/global.ts +17 -5
- package/src/theme/foundations/radii.ts +1 -0
- package/src/theme/foundations/spacing.ts +70 -22
- package/src/theme/foundations/typography.ts +3 -3
- package/src/utils/componentCategories.ts +28 -21
- package/src/utils/utils.ts +28 -0
- package/dist/components/Card/CardTypes.d.ts +0 -4
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +0 -4
- package/dist/components/Pagination/Pagination.stories.d.ts +0 -13
- package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +0 -4
- package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
- package/dist/helpers/generateUUID.d.ts +0 -1
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +0 -4
- package/src/components/Pagination/Pagination.stories.tsx +0 -54
- package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +0 -4
- package/src/docs/Intro.stories.mdx +0 -53
- package/src/helpers/generateUUID.tsx +0 -5
- package/src/styles/base/_03-base.scss +0 -25
- package/src/styles/base/_04-focus.scss +0 -22
|
@@ -83,16 +83,18 @@ describe("StructuredContent Accessibility", () => {
|
|
|
83
83
|
it("passes axe accessibility for HTML string text content", async () => {
|
|
84
84
|
const { container } = render(
|
|
85
85
|
<StructuredContent
|
|
86
|
+
bodyContent={htmlStringBodyContent}
|
|
86
87
|
calloutText="This is the callout text"
|
|
87
88
|
headingText="Heading text"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
imageProps={{
|
|
90
|
+
alt: "Image alt text",
|
|
91
|
+
aspectRatio: ImageRatios.Original,
|
|
92
|
+
caption: "Image caption",
|
|
93
|
+
credit: "Image credit",
|
|
94
|
+
position: StructuredContentImagePosition.Left,
|
|
95
|
+
size: ImageSizes.Medium,
|
|
96
|
+
src: "https://placeimg.com/400/300/animals",
|
|
97
|
+
}}
|
|
96
98
|
/>
|
|
97
99
|
);
|
|
98
100
|
expect(await axe(container)).toHaveNoViolations();
|
|
@@ -101,16 +103,18 @@ describe("StructuredContent Accessibility", () => {
|
|
|
101
103
|
it("passes axe accessibility for HTML DOM text content", async () => {
|
|
102
104
|
const { container } = render(
|
|
103
105
|
<StructuredContent
|
|
106
|
+
bodyContent={htmlDOMBodyContent}
|
|
104
107
|
calloutText="This is the callout text"
|
|
105
108
|
headingText="Heading text"
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
imageProps={{
|
|
110
|
+
alt: "Image alt text",
|
|
111
|
+
aspectRatio: ImageRatios.Original,
|
|
112
|
+
caption: "Image caption",
|
|
113
|
+
credit: "Image credit",
|
|
114
|
+
position: StructuredContentImagePosition.Left,
|
|
115
|
+
size: ImageSizes.Medium,
|
|
116
|
+
src: "https://placeimg.com/400/300/animals",
|
|
117
|
+
}}
|
|
114
118
|
/>
|
|
115
119
|
);
|
|
116
120
|
expect(await axe(container)).toHaveNoViolations();
|
|
@@ -119,9 +123,9 @@ describe("StructuredContent Accessibility", () => {
|
|
|
119
123
|
it("passes axe accessibility without an image", async () => {
|
|
120
124
|
const { container } = render(
|
|
121
125
|
<StructuredContent
|
|
126
|
+
bodyContent={htmlStringBodyContent}
|
|
122
127
|
calloutText="This is the callout text"
|
|
123
128
|
headingText="Heading text"
|
|
124
|
-
bodyContent={htmlStringBodyContent}
|
|
125
129
|
/>
|
|
126
130
|
);
|
|
127
131
|
expect(await axe(container)).toHaveNoViolations();
|
|
@@ -132,16 +136,18 @@ describe("StructuredContent", () => {
|
|
|
132
136
|
it("renders two headings, an image, and body text", () => {
|
|
133
137
|
render(
|
|
134
138
|
<StructuredContent
|
|
139
|
+
bodyContent={htmlStringBodyContent}
|
|
135
140
|
calloutText="This is the callout text"
|
|
136
141
|
headingText="Heading text"
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
imageProps={{
|
|
143
|
+
alt: "Image alt text",
|
|
144
|
+
aspectRatio: ImageRatios.Original,
|
|
145
|
+
caption: "Image caption",
|
|
146
|
+
credit: "Image credit",
|
|
147
|
+
position: StructuredContentImagePosition.Left,
|
|
148
|
+
size: ImageSizes.Medium,
|
|
149
|
+
src: "https://placeimg.com/400/300/animals",
|
|
150
|
+
}}
|
|
145
151
|
/>
|
|
146
152
|
);
|
|
147
153
|
const mainHeading = screen.getByRole("heading", { level: 2 });
|
|
@@ -156,14 +162,16 @@ describe("StructuredContent", () => {
|
|
|
156
162
|
it("optionally renders without the headings", () => {
|
|
157
163
|
render(
|
|
158
164
|
<StructuredContent
|
|
159
|
-
imageAlt="Image alt text"
|
|
160
|
-
imageAspectRatio={ImageRatios.Original}
|
|
161
|
-
imageCaption="Image caption"
|
|
162
|
-
imageCredit="Image credit"
|
|
163
|
-
imagePosition={StructuredContentImagePosition.Left}
|
|
164
|
-
imageSize={ImageSizes.Medium}
|
|
165
|
-
imageSrc="https://placeimg.com/400/300/animals"
|
|
166
165
|
bodyContent={htmlStringBodyContent}
|
|
166
|
+
imageProps={{
|
|
167
|
+
alt: "Image alt text",
|
|
168
|
+
aspectRatio: ImageRatios.Original,
|
|
169
|
+
caption: "Image caption",
|
|
170
|
+
credit: "Image credit",
|
|
171
|
+
position: StructuredContentImagePosition.Left,
|
|
172
|
+
size: ImageSizes.Medium,
|
|
173
|
+
src: "https://placeimg.com/400/300/animals",
|
|
174
|
+
}}
|
|
167
175
|
/>
|
|
168
176
|
);
|
|
169
177
|
const mainHeading = screen.queryByRole("heading", { level: 2 });
|
|
@@ -178,9 +186,9 @@ describe("StructuredContent", () => {
|
|
|
178
186
|
it("optionally renders without the image", () => {
|
|
179
187
|
render(
|
|
180
188
|
<StructuredContent
|
|
189
|
+
bodyContent={htmlStringBodyContent}
|
|
181
190
|
calloutText="This is the callout text"
|
|
182
191
|
headingText="Heading text"
|
|
183
|
-
bodyContent={htmlStringBodyContent}
|
|
184
192
|
/>
|
|
185
193
|
);
|
|
186
194
|
const mainHeading = screen.getByRole("heading", { level: 2 });
|
|
@@ -192,24 +200,27 @@ describe("StructuredContent", () => {
|
|
|
192
200
|
expect(screen.getByText(/Lorem ipsum dolor sit amet/i)).toBeInTheDocument();
|
|
193
201
|
});
|
|
194
202
|
|
|
195
|
-
it("logs a warning when an image is used but no alt text is passed to `
|
|
203
|
+
it("logs a warning when an image is used but no alt text is passed to `imageProps.alt`", () => {
|
|
196
204
|
const warn = jest.spyOn(console, "warn");
|
|
197
205
|
render(
|
|
198
206
|
<StructuredContent
|
|
207
|
+
bodyContent={htmlStringBodyContent}
|
|
199
208
|
calloutText="This is the callout text"
|
|
200
209
|
headingText="Heading text"
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
210
|
+
imageProps={{
|
|
211
|
+
aspectRatio: ImageRatios.Original,
|
|
212
|
+
caption: "Image caption",
|
|
213
|
+
credit: "Image credit",
|
|
214
|
+
position: StructuredContentImagePosition.Left,
|
|
215
|
+
size: ImageSizes.Medium,
|
|
216
|
+
src: "https://placeimg.com/400/300/animals",
|
|
217
|
+
}}
|
|
208
218
|
/>
|
|
209
219
|
);
|
|
210
220
|
|
|
211
221
|
expect(warn).toHaveBeenCalledWith(
|
|
212
|
-
"StructuredContent: `
|
|
222
|
+
"NYPL Reservoir StructuredContent: The `imageProps.alt` prop is required " +
|
|
223
|
+
"when using an image."
|
|
213
224
|
);
|
|
214
225
|
expect(screen.getByRole("img")).toBeInTheDocument();
|
|
215
226
|
});
|
|
@@ -217,16 +228,18 @@ describe("StructuredContent", () => {
|
|
|
217
228
|
it("renders an image wrapped in figure when provided an image caption or credit", () => {
|
|
218
229
|
const { rerender } = render(
|
|
219
230
|
<StructuredContent
|
|
231
|
+
bodyContent={htmlStringBodyContent}
|
|
220
232
|
calloutText="This is the callout text"
|
|
221
233
|
headingText="Heading text"
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
234
|
+
imageProps={{
|
|
235
|
+
alt: "Image alt text",
|
|
236
|
+
aspectRatio: ImageRatios.Original,
|
|
237
|
+
caption: "Image caption",
|
|
238
|
+
credit: "Image credit",
|
|
239
|
+
position: StructuredContentImagePosition.Left,
|
|
240
|
+
size: ImageSizes.Medium,
|
|
241
|
+
src: "https://placeimg.com/400/300/animals",
|
|
242
|
+
}}
|
|
230
243
|
/>
|
|
231
244
|
);
|
|
232
245
|
expect(screen.getByRole("img")).toBeInTheDocument();
|
|
@@ -237,15 +250,17 @@ describe("StructuredContent", () => {
|
|
|
237
250
|
// Not passing in the image's caption
|
|
238
251
|
rerender(
|
|
239
252
|
<StructuredContent
|
|
253
|
+
bodyContent={htmlStringBodyContent}
|
|
240
254
|
calloutText="This is the callout text"
|
|
241
255
|
headingText="Heading text"
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
256
|
+
imageProps={{
|
|
257
|
+
alt: "Image alt text",
|
|
258
|
+
aspectRatio: ImageRatios.Original,
|
|
259
|
+
credit: "Image credit",
|
|
260
|
+
position: StructuredContentImagePosition.Left,
|
|
261
|
+
size: ImageSizes.Medium,
|
|
262
|
+
src: "https://placeimg.com/400/300/animals",
|
|
263
|
+
}}
|
|
249
264
|
/>
|
|
250
265
|
);
|
|
251
266
|
expect(screen.getByRole("img")).toBeInTheDocument();
|
|
@@ -257,14 +272,16 @@ describe("StructuredContent", () => {
|
|
|
257
272
|
it("renders a simple image element when no image caption or credit are provided", () => {
|
|
258
273
|
render(
|
|
259
274
|
<StructuredContent
|
|
275
|
+
bodyContent={htmlStringBodyContent}
|
|
260
276
|
calloutText="This is the callout text"
|
|
261
277
|
headingText="Heading text"
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
278
|
+
imageProps={{
|
|
279
|
+
alt: "Image alt text",
|
|
280
|
+
aspectRatio: ImageRatios.Original,
|
|
281
|
+
position: StructuredContentImagePosition.Left,
|
|
282
|
+
size: ImageSizes.Medium,
|
|
283
|
+
src: "https://placeimg.com/400/300/animals",
|
|
284
|
+
}}
|
|
268
285
|
/>
|
|
269
286
|
);
|
|
270
287
|
expect(screen.getByRole("img")).toBeInTheDocument();
|
|
@@ -277,91 +294,133 @@ describe("StructuredContent", () => {
|
|
|
277
294
|
const withHTMLStringContent = renderer
|
|
278
295
|
.create(
|
|
279
296
|
<StructuredContent
|
|
297
|
+
bodyContent={htmlStringBodyContent}
|
|
280
298
|
calloutText="This is the callout text"
|
|
281
299
|
headingText="Heading text"
|
|
282
300
|
id="withHTMLStringContent"
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
301
|
+
imageProps={{
|
|
302
|
+
alt: "Image alt text",
|
|
303
|
+
aspectRatio: ImageRatios.Original,
|
|
304
|
+
caption: "Image caption",
|
|
305
|
+
credit: "Image credit",
|
|
306
|
+
position: StructuredContentImagePosition.Left,
|
|
307
|
+
size: ImageSizes.Medium,
|
|
308
|
+
src: "https://placeimg.com/400/300/animals",
|
|
309
|
+
}}
|
|
291
310
|
/>
|
|
292
311
|
)
|
|
293
312
|
.toJSON();
|
|
294
313
|
const withHTMLDOMContent = renderer
|
|
295
314
|
.create(
|
|
296
315
|
<StructuredContent
|
|
316
|
+
bodyContent={htmlDOMBodyContent}
|
|
297
317
|
calloutText="This is the callout text"
|
|
298
318
|
headingText="Heading text"
|
|
299
319
|
id="withHTMLDOMContent"
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
320
|
+
imageProps={{
|
|
321
|
+
alt: "Image alt text",
|
|
322
|
+
aspectRatio: ImageRatios.Original,
|
|
323
|
+
caption: "Image caption",
|
|
324
|
+
credit: "Image credit",
|
|
325
|
+
position: StructuredContentImagePosition.Left,
|
|
326
|
+
size: ImageSizes.Medium,
|
|
327
|
+
src: "https://placeimg.com/400/300/animals",
|
|
328
|
+
}}
|
|
308
329
|
/>
|
|
309
330
|
)
|
|
310
331
|
.toJSON();
|
|
311
332
|
const withoutAnImage = renderer
|
|
312
333
|
.create(
|
|
313
334
|
<StructuredContent
|
|
335
|
+
bodyContent={htmlStringBodyContent}
|
|
314
336
|
calloutText="This is the callout text"
|
|
315
337
|
headingText="Heading text"
|
|
316
338
|
id="withoutAnImage"
|
|
317
|
-
bodyContent={htmlStringBodyContent}
|
|
318
339
|
/>
|
|
319
340
|
)
|
|
320
341
|
.toJSON();
|
|
321
342
|
const withImageWithoutCaptionOrCredit = renderer
|
|
322
343
|
.create(
|
|
323
344
|
<StructuredContent
|
|
345
|
+
bodyContent={htmlStringBodyContent}
|
|
324
346
|
calloutText="This is the callout text"
|
|
325
347
|
headingText="Heading text"
|
|
326
348
|
id="withImageWithoutCaptionOrCredit"
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
349
|
+
imageProps={{
|
|
350
|
+
alt: "Image alt text",
|
|
351
|
+
aspectRatio: ImageRatios.Original,
|
|
352
|
+
position: StructuredContentImagePosition.Left,
|
|
353
|
+
size: ImageSizes.Medium,
|
|
354
|
+
src: "https://placeimg.com/400/300/animals",
|
|
355
|
+
}}
|
|
333
356
|
/>
|
|
334
357
|
)
|
|
335
358
|
.toJSON();
|
|
336
359
|
const withoutHeading = renderer
|
|
337
360
|
.create(
|
|
338
361
|
<StructuredContent
|
|
362
|
+
bodyContent={htmlStringBodyContent}
|
|
339
363
|
calloutText="This is the callout text"
|
|
340
364
|
id="withoutHeading"
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
365
|
+
imageProps={{
|
|
366
|
+
alt: "Image alt text",
|
|
367
|
+
aspectRatio: ImageRatios.Original,
|
|
368
|
+
caption: "Image caption",
|
|
369
|
+
credit: "Image credit",
|
|
370
|
+
position: StructuredContentImagePosition.Left,
|
|
371
|
+
size: ImageSizes.Medium,
|
|
372
|
+
src: "https://placeimg.com/400/300/animals",
|
|
373
|
+
}}
|
|
349
374
|
/>
|
|
350
375
|
)
|
|
351
376
|
.toJSON();
|
|
352
377
|
const withoutCalloutText = renderer
|
|
353
378
|
.create(
|
|
354
379
|
<StructuredContent
|
|
380
|
+
bodyContent={htmlStringBodyContent}
|
|
355
381
|
headingText="Heading text"
|
|
356
382
|
id="withoutCalloutText"
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
383
|
+
/>
|
|
384
|
+
)
|
|
385
|
+
.toJSON();
|
|
386
|
+
const withChakraProps = renderer
|
|
387
|
+
.create(
|
|
388
|
+
<StructuredContent
|
|
389
|
+
calloutText="This is the callout text"
|
|
390
|
+
headingText="Heading text"
|
|
391
|
+
id="withChakraProps"
|
|
392
|
+
imageProps={{
|
|
393
|
+
alt: "Image alt text",
|
|
394
|
+
aspectRatio: ImageRatios.Original,
|
|
395
|
+
caption: "Image caption",
|
|
396
|
+
credit: "Image credit",
|
|
397
|
+
position: StructuredContentImagePosition.Left,
|
|
398
|
+
size: ImageSizes.Medium,
|
|
399
|
+
src: "https://placeimg.com/400/300/animals",
|
|
400
|
+
}}
|
|
401
|
+
bodyContent={htmlStringBodyContent}
|
|
402
|
+
p="20px"
|
|
403
|
+
color="ui.error.primary"
|
|
404
|
+
/>
|
|
405
|
+
)
|
|
406
|
+
.toJSON();
|
|
407
|
+
const withOtherProps = renderer
|
|
408
|
+
.create(
|
|
409
|
+
<StructuredContent
|
|
410
|
+
calloutText="This is the callout text"
|
|
411
|
+
headingText="Heading text"
|
|
412
|
+
id="withOtherProps"
|
|
413
|
+
imageProps={{
|
|
414
|
+
alt: "Image alt text",
|
|
415
|
+
aspectRatio: ImageRatios.Original,
|
|
416
|
+
caption: "Image caption",
|
|
417
|
+
credit: "Image credit",
|
|
418
|
+
position: StructuredContentImagePosition.Left,
|
|
419
|
+
size: ImageSizes.Medium,
|
|
420
|
+
src: "https://placeimg.com/400/300/animals",
|
|
421
|
+
}}
|
|
364
422
|
bodyContent={htmlStringBodyContent}
|
|
423
|
+
data-testid="props"
|
|
365
424
|
/>
|
|
366
425
|
)
|
|
367
426
|
.toJSON();
|
|
@@ -372,5 +431,7 @@ describe("StructuredContent", () => {
|
|
|
372
431
|
expect(withImageWithoutCaptionOrCredit).toMatchSnapshot();
|
|
373
432
|
expect(withoutHeading).toMatchSnapshot();
|
|
374
433
|
expect(withoutCalloutText).toMatchSnapshot();
|
|
434
|
+
expect(withChakraProps).toMatchSnapshot();
|
|
435
|
+
expect(withOtherProps).toMatchSnapshot();
|
|
375
436
|
});
|
|
376
437
|
});
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { Box, chakra, useMultiStyleConfig } from "@chakra-ui/react";
|
|
1
2
|
import * as React from "react";
|
|
2
|
-
import { Box, useMultiStyleConfig } from "@chakra-ui/react";
|
|
3
3
|
|
|
4
4
|
import Heading from "../Heading/Heading";
|
|
5
|
-
import {
|
|
6
|
-
import Image, { ImageProps } from "../Image/Image";
|
|
5
|
+
import { HeadingSizes, HeadingLevels } from "../Heading/HeadingTypes";
|
|
6
|
+
import Image, { ComponentImageProps, ImageProps } from "../Image/Image";
|
|
7
7
|
import { ImageRatios, ImageSizes } from "../Image/ImageTypes";
|
|
8
8
|
import { StructuredContentImagePosition } from "./StructuredContentTypes";
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
interface StructuredContentImageProps extends ComponentImageProps {
|
|
11
|
+
/** Optional value to control the positioning of the internal `Image` component.
|
|
12
|
+
* Defaults to `StructuredContentImagePosition.Left`. */
|
|
13
|
+
position?: StructuredContentImagePosition;
|
|
14
|
+
}
|
|
10
15
|
|
|
11
16
|
export interface StructuredContentProps {
|
|
12
17
|
/** Optional value to set the text for the callout heading text. */
|
|
@@ -17,27 +22,8 @@ export interface StructuredContentProps {
|
|
|
17
22
|
headingText?: string;
|
|
18
23
|
/** ID that other components can cross reference for accessibility purposes. */
|
|
19
24
|
id?: string;
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
imageAlt?: string;
|
|
23
|
-
/** Optional value to control the aspect ratio of the internal `Image` component.
|
|
24
|
-
* Defaults to `ImageRatios.Square`. */
|
|
25
|
-
imageAspectRatio?: ImageRatios;
|
|
26
|
-
/** Optional value to render as a caption for the internal `Image` component. */
|
|
27
|
-
imageCaption?: string;
|
|
28
|
-
/** Optional DOM element to use instead of the DS `Image` component. */
|
|
29
|
-
imageComponent?: JSX.Element;
|
|
30
|
-
/** Optional value to render as a credit for the internal `Image` component. */
|
|
31
|
-
imageCredit?: string;
|
|
32
|
-
/** Optional value to control the positioning of the internal `Image` component.
|
|
33
|
-
* Defaults to `StructuredContentImagePosition.Left`. */
|
|
34
|
-
imagePosition?: StructuredContentImagePosition;
|
|
35
|
-
/** Optional value to control the size of the internal `Image` component.
|
|
36
|
-
* Defaults to `ImageSizes.Medium`. */
|
|
37
|
-
imageSize?: ImageSizes;
|
|
38
|
-
/** Optional value that contains the path to an image. If omitted, the internal
|
|
39
|
-
* DS `Image` component will not render. */
|
|
40
|
-
imageSrc?: string;
|
|
25
|
+
/** Object used to create and render the `Image` component. */
|
|
26
|
+
imageProps?: StructuredContentImageProps;
|
|
41
27
|
/** Required value to set the text for the body content. */
|
|
42
28
|
bodyContent: string | JSX.Element;
|
|
43
29
|
}
|
|
@@ -46,17 +32,17 @@ export interface StructuredContentProps {
|
|
|
46
32
|
* Internal component used in the `StructuredContent` component
|
|
47
33
|
* that renders the DS `Image` component.
|
|
48
34
|
*/
|
|
49
|
-
|
|
35
|
+
const StructuredContentImage = chakra((props: ImageProps) => {
|
|
50
36
|
const {
|
|
51
37
|
additionalFigureStyles,
|
|
52
38
|
additionalImageStyles,
|
|
53
39
|
additionalWrapperStyles,
|
|
54
40
|
alt,
|
|
41
|
+
aspectRatio,
|
|
42
|
+
caption,
|
|
55
43
|
component,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
imageCredit,
|
|
59
|
-
imageSize,
|
|
44
|
+
credit,
|
|
45
|
+
size,
|
|
60
46
|
src,
|
|
61
47
|
} = props;
|
|
62
48
|
return (
|
|
@@ -66,88 +52,97 @@ function StructuredContentImage(props: ImageProps) {
|
|
|
66
52
|
additionalWrapperStyles={additionalWrapperStyles}
|
|
67
53
|
alt={alt}
|
|
68
54
|
component={component}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
55
|
+
aspectRatio={aspectRatio}
|
|
56
|
+
size={size}
|
|
57
|
+
caption={caption}
|
|
58
|
+
credit={credit}
|
|
73
59
|
src={src}
|
|
74
60
|
/>
|
|
75
61
|
);
|
|
76
|
-
}
|
|
62
|
+
});
|
|
77
63
|
|
|
78
64
|
/**
|
|
79
65
|
* The `StructuredContent` component that displays a heading, callout content,
|
|
80
66
|
* an image, and body content. All are optional except for body content.
|
|
81
67
|
*/
|
|
82
|
-
export
|
|
83
|
-
props: React.PropsWithChildren<StructuredContentProps>
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
hasFigureImage
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
68
|
+
export const StructuredContent = chakra(
|
|
69
|
+
(props: React.PropsWithChildren<StructuredContentProps>) => {
|
|
70
|
+
const {
|
|
71
|
+
calloutText,
|
|
72
|
+
className,
|
|
73
|
+
headingText,
|
|
74
|
+
id,
|
|
75
|
+
imageProps = {
|
|
76
|
+
alt: "",
|
|
77
|
+
aspectRatio: ImageRatios.Square,
|
|
78
|
+
caption: undefined,
|
|
79
|
+
component: undefined,
|
|
80
|
+
credit: undefined,
|
|
81
|
+
position: StructuredContentImagePosition.Left,
|
|
82
|
+
size: ImageSizes.Medium,
|
|
83
|
+
src: "",
|
|
84
|
+
},
|
|
85
|
+
bodyContent,
|
|
86
|
+
...rest
|
|
87
|
+
} = props;
|
|
88
|
+
const hasImage = imageProps.src || imageProps.component;
|
|
89
|
+
const hasFigureImage = imageProps.caption || imageProps.credit;
|
|
90
|
+
const styles = useMultiStyleConfig("StructuredContent", {
|
|
91
|
+
hasFigureImage,
|
|
92
|
+
imageAspectRatio: imageProps.aspectRatio,
|
|
93
|
+
imagePosition: imageProps.position,
|
|
94
|
+
});
|
|
95
|
+
const finalBodyContent =
|
|
96
|
+
typeof bodyContent === "string" ? (
|
|
97
|
+
<div
|
|
98
|
+
className="structuredcontent-body"
|
|
99
|
+
dangerouslySetInnerHTML={{ __html: bodyContent }}
|
|
100
|
+
/>
|
|
101
|
+
) : (
|
|
102
|
+
<Box className="structuredcontent-body">{bodyContent}</Box>
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
if (hasImage && !imageProps.alt) {
|
|
106
|
+
console.warn(
|
|
107
|
+
"NYPL Reservoir StructuredContent: The `imageProps.alt` prop is required " +
|
|
108
|
+
"when using an image."
|
|
109
|
+
);
|
|
110
|
+
}
|
|
113
111
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
return (
|
|
113
|
+
<Box id={id} className={className} __css={styles} {...rest}>
|
|
114
|
+
{headingText && (
|
|
115
|
+
<Heading id={`${id}-heading`} level={HeadingLevels.Two}>
|
|
116
|
+
{headingText}
|
|
117
|
+
</Heading>
|
|
118
|
+
)}
|
|
119
|
+
{calloutText && (
|
|
120
|
+
<Heading
|
|
121
|
+
id={`${id}-callout`}
|
|
122
|
+
level={HeadingLevels.Three}
|
|
123
|
+
size={HeadingSizes.Callout}
|
|
124
|
+
>
|
|
125
|
+
{calloutText}
|
|
126
|
+
</Heading>
|
|
127
|
+
)}
|
|
128
|
+
{hasImage && (
|
|
129
|
+
<StructuredContentImage
|
|
130
|
+
additionalFigureStyles={styles.imageFigure}
|
|
131
|
+
additionalImageStyles={styles.image}
|
|
132
|
+
additionalWrapperStyles={styles.imageWrapper}
|
|
133
|
+
alt={imageProps.alt}
|
|
134
|
+
component={imageProps.component}
|
|
135
|
+
aspectRatio={imageProps.aspectRatio}
|
|
136
|
+
caption={imageProps.caption}
|
|
137
|
+
credit={imageProps.credit}
|
|
138
|
+
size={imageProps.size}
|
|
139
|
+
src={imageProps.src ? imageProps.src : null}
|
|
140
|
+
/>
|
|
141
|
+
)}
|
|
142
|
+
{finalBodyContent}
|
|
143
|
+
</Box>
|
|
117
144
|
);
|
|
118
145
|
}
|
|
146
|
+
);
|
|
119
147
|
|
|
120
|
-
|
|
121
|
-
<Box id={id} className={className} __css={styles}>
|
|
122
|
-
{headingText && (
|
|
123
|
-
<Heading id={`${id}-heading`} level={HeadingLevels.Two}>
|
|
124
|
-
{headingText}
|
|
125
|
-
</Heading>
|
|
126
|
-
)}
|
|
127
|
-
{calloutText && (
|
|
128
|
-
<Heading
|
|
129
|
-
displaySize={HeadingDisplaySizes.Callout}
|
|
130
|
-
id={`${id}-callout`}
|
|
131
|
-
level={HeadingLevels.Three}
|
|
132
|
-
>
|
|
133
|
-
{calloutText}
|
|
134
|
-
</Heading>
|
|
135
|
-
)}
|
|
136
|
-
{hasImage && (
|
|
137
|
-
<StructuredContentImage
|
|
138
|
-
additionalFigureStyles={styles.imageFigure}
|
|
139
|
-
additionalImageStyles={styles.image}
|
|
140
|
-
additionalWrapperStyles={styles.imageWrapper}
|
|
141
|
-
alt={imageAlt}
|
|
142
|
-
component={imageComponent}
|
|
143
|
-
imageAspectRatio={imageAspectRatio}
|
|
144
|
-
imageCaption={imageCaption}
|
|
145
|
-
imageCredit={imageCredit}
|
|
146
|
-
imageSize={imageSize}
|
|
147
|
-
src={imageSrc ? imageSrc : null}
|
|
148
|
-
/>
|
|
149
|
-
)}
|
|
150
|
-
{finalBodyContent}
|
|
151
|
-
</Box>
|
|
152
|
-
);
|
|
153
|
-
}
|
|
148
|
+
export default StructuredContent;
|