@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
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
Story,
|
|
4
4
|
Canvas,
|
|
5
5
|
ArgsTable,
|
|
6
|
-
Preview,
|
|
7
6
|
Description,
|
|
8
7
|
} from "@storybook/addon-docs/blocks";
|
|
9
8
|
import { withDesign } from "storybook-addon-designs";
|
|
10
9
|
|
|
10
|
+
import DSProvider from "../../theme/provider";
|
|
11
11
|
import VideoPlayer from "./VideoPlayer";
|
|
12
12
|
import { VideoPlayerTypes } from "./VideoPlayerTypes";
|
|
13
13
|
import { action } from "@storybook/addon-actions";
|
|
@@ -37,7 +37,7 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
37
37
|
| Component Version | DS Version |
|
|
38
38
|
| ----------------- | ---------- |
|
|
39
39
|
| Added | `0.23.2` |
|
|
40
|
-
| Latest | `0.
|
|
40
|
+
| Latest | `0.25.2` |
|
|
41
41
|
|
|
42
42
|
<Description of={VideoPlayer} />
|
|
43
43
|
|
|
@@ -45,7 +45,7 @@ The `VideoPlayer` component is used to embed a `Vimeo` or `YouTube` video player
|
|
|
45
45
|
|
|
46
46
|
The `aspectRatio` prop is used to control the sizing of the space allotted for the video rendering. Ultimately, the `aspectRatio` prop should be set to match the aspect ratio of the video that is being rendered. The default aspect ratio is `16:9`.
|
|
47
47
|
|
|
48
|
-
<
|
|
48
|
+
<Canvas withToolbar>
|
|
49
49
|
<Story
|
|
50
50
|
name="VideoPlayer"
|
|
51
51
|
args={{
|
|
@@ -71,7 +71,7 @@ The `aspectRatio` prop is used to control the sizing of the space allotted for t
|
|
|
71
71
|
/>
|
|
72
72
|
)}
|
|
73
73
|
</Story>
|
|
74
|
-
</
|
|
74
|
+
</Canvas>
|
|
75
75
|
|
|
76
76
|
<ArgsTable story="VideoPlayer" />
|
|
77
77
|
|
|
@@ -93,3 +93,16 @@ https://vimeo.com/474719268
|
|
|
93
93
|
https://www.youtube.com/watch?v=[VIDEO_ID]
|
|
94
94
|
https://www.youtube.com/watch?v=nm-dD2tx6bk
|
|
95
95
|
```
|
|
96
|
+
|
|
97
|
+
## Errored
|
|
98
|
+
|
|
99
|
+
If the necessary props are not passed to the `VideoPlayer` component, the component UI will display an error message.
|
|
100
|
+
|
|
101
|
+
<Canvas>
|
|
102
|
+
<DSProvider>
|
|
103
|
+
<VideoPlayer
|
|
104
|
+
type={VideoPlayerTypes.Vimeo}
|
|
105
|
+
videoId="https://vimeo.com/474719268"
|
|
106
|
+
/>
|
|
107
|
+
</DSProvider>
|
|
108
|
+
</Canvas>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { render, screen } from "@testing-library/react";
|
|
3
3
|
import { axe } from "jest-axe";
|
|
4
|
+
import renderer from "react-test-renderer";
|
|
4
5
|
|
|
5
6
|
import VideoPlayer from "./VideoPlayer";
|
|
6
7
|
import { VideoPlayerAspectRatios, VideoPlayerTypes } from "./VideoPlayerTypes";
|
|
@@ -26,9 +27,7 @@ describe("VideoPlayer", () => {
|
|
|
26
27
|
});
|
|
27
28
|
|
|
28
29
|
it("Renders VideoPlayer container", () => {
|
|
29
|
-
expect(
|
|
30
|
-
utils.container.querySelector(".video-player")
|
|
31
|
-
).toBeInTheDocument();
|
|
30
|
+
expect(screen.getByTestId("video-player-component")).toBeInTheDocument();
|
|
32
31
|
});
|
|
33
32
|
|
|
34
33
|
it("Renders VideoPlayer iframe", () => {
|
|
@@ -45,7 +44,6 @@ describe("VideoPlayer", () => {
|
|
|
45
44
|
|
|
46
45
|
describe("Vimeo player", () => {
|
|
47
46
|
const videoId = "474719268";
|
|
48
|
-
let utils;
|
|
49
47
|
|
|
50
48
|
beforeEach(() => {
|
|
51
49
|
utils = render(
|
|
@@ -53,12 +51,6 @@ describe("VideoPlayer", () => {
|
|
|
53
51
|
);
|
|
54
52
|
});
|
|
55
53
|
|
|
56
|
-
it("Renders VideoPlayer container", () => {
|
|
57
|
-
expect(
|
|
58
|
-
utils.container.querySelector(".video-player")
|
|
59
|
-
).toBeInTheDocument();
|
|
60
|
-
});
|
|
61
|
-
|
|
62
54
|
it("Renders VideoPlayer iframe", () => {
|
|
63
55
|
expect(screen.getByTitle("Vimeo video player")).toBeInTheDocument();
|
|
64
56
|
});
|
|
@@ -97,6 +89,22 @@ describe("VideoPlayer", () => {
|
|
|
97
89
|
it("Renders HelperErrorText component", () => {
|
|
98
90
|
expect(screen.getByText("Video Player helper text.")).toBeInTheDocument();
|
|
99
91
|
});
|
|
92
|
+
|
|
93
|
+
it("does not render the helper text", () => {
|
|
94
|
+
utils.rerender(
|
|
95
|
+
<VideoPlayer
|
|
96
|
+
videoType={VideoPlayerTypes.YouTube}
|
|
97
|
+
videoId={videoId}
|
|
98
|
+
headingText="Video Player Heading"
|
|
99
|
+
descriptionText="Video Player description text."
|
|
100
|
+
helperText="Video Player helper text."
|
|
101
|
+
showHelperInvalidText={false}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
104
|
+
expect(
|
|
105
|
+
screen.queryByText("Video Player helper text.")
|
|
106
|
+
).not.toBeInTheDocument();
|
|
107
|
+
});
|
|
100
108
|
});
|
|
101
109
|
|
|
102
110
|
describe("custom iframe title", () => {
|
|
@@ -112,64 +120,57 @@ describe("VideoPlayer", () => {
|
|
|
112
120
|
});
|
|
113
121
|
});
|
|
114
122
|
|
|
115
|
-
describe("
|
|
116
|
-
it("
|
|
117
|
-
|
|
123
|
+
describe("prop validation", () => {
|
|
124
|
+
it("Throws error if videoId not formatted properly", () => {
|
|
125
|
+
render(
|
|
118
126
|
<VideoPlayer
|
|
119
127
|
videoType={VideoPlayerTypes.Vimeo}
|
|
120
|
-
videoId="474719268"
|
|
128
|
+
videoId="http://vimeo.com/474719268"
|
|
121
129
|
aspectRatio={VideoPlayerAspectRatios.FourByThree}
|
|
122
130
|
/>
|
|
123
131
|
);
|
|
124
|
-
expect(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
132
|
+
expect(
|
|
133
|
+
screen.getByText(
|
|
134
|
+
"This video player has not been configured properly. Please contact the site administrator."
|
|
135
|
+
)
|
|
136
|
+
).toBeInTheDocument();
|
|
128
137
|
});
|
|
138
|
+
});
|
|
129
139
|
|
|
130
|
-
|
|
131
|
-
|
|
140
|
+
it("renders the UI snapshot correctly", () => {
|
|
141
|
+
const videoPlayerWithoutText = renderer
|
|
142
|
+
.create(
|
|
132
143
|
<VideoPlayer
|
|
133
|
-
|
|
144
|
+
id="video-player-without-text"
|
|
134
145
|
videoId="474719268"
|
|
135
|
-
|
|
146
|
+
videoType={VideoPlayerTypes.Vimeo}
|
|
136
147
|
/>
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
);
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it("Renders with 1:1 aspect ratio", () => {
|
|
145
|
-
const utils = render(
|
|
148
|
+
)
|
|
149
|
+
.toJSON();
|
|
150
|
+
const videoPlayerWithText = renderer
|
|
151
|
+
.create(
|
|
146
152
|
<VideoPlayer
|
|
147
|
-
|
|
153
|
+
descriptionText="VideoPlayer description"
|
|
154
|
+
headingText="VideoPlayer Heading"
|
|
155
|
+
id="video-player-with-text"
|
|
156
|
+
helperText="VideoPlayer helper test."
|
|
148
157
|
videoId="474719268"
|
|
149
|
-
|
|
158
|
+
videoType={VideoPlayerTypes.Vimeo}
|
|
150
159
|
/>
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
"video-player video-player--square "
|
|
156
|
-
);
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
describe("prop validation", () => {
|
|
161
|
-
it("Throws error if videoId not formatted properly", () => {
|
|
162
|
-
const utils = render(
|
|
160
|
+
)
|
|
161
|
+
.toJSON();
|
|
162
|
+
const videoPlayerError = renderer
|
|
163
|
+
.create(
|
|
163
164
|
<VideoPlayer
|
|
165
|
+
id="video-player-error"
|
|
166
|
+
videoId="https://vimeo.com/474719268"
|
|
164
167
|
videoType={VideoPlayerTypes.Vimeo}
|
|
165
|
-
videoId="http://vimeo.com/474719268"
|
|
166
|
-
aspectRatio={VideoPlayerAspectRatios.FourByThree}
|
|
167
168
|
/>
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
169
|
+
)
|
|
170
|
+
.toJSON();
|
|
171
|
+
|
|
172
|
+
expect(videoPlayerWithoutText).toMatchSnapshot();
|
|
173
|
+
expect(videoPlayerWithText).toMatchSnapshot();
|
|
174
|
+
expect(videoPlayerError).toMatchSnapshot();
|
|
174
175
|
});
|
|
175
176
|
});
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import
|
|
2
|
+
import { Box, useMultiStyleConfig } from "@chakra-ui/react";
|
|
3
|
+
import ComponentWrapper from "../ComponentWrapper/ComponentWrapper";
|
|
4
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
5
|
+
import { getVariant } from "../../utils/utils";
|
|
3
6
|
import { VideoPlayerAspectRatios, VideoPlayerTypes } from "./VideoPlayerTypes";
|
|
4
|
-
import Heading from "../Heading/Heading";
|
|
5
|
-
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
6
|
-
import HelperErrorText from "../HelperErrorText/HelperErrorText";
|
|
7
7
|
|
|
8
8
|
export interface VideoPlayerProps {
|
|
9
9
|
/** Optional aspect ratio prop to control the sizing of the video player; if omitted, the video player defaults to `sixteen-by-nine` */
|
|
10
10
|
aspectRatio?: VideoPlayerAspectRatios;
|
|
11
|
-
/** Optional additional attributes passed to the video player iframe */
|
|
12
|
-
attributes?: { [key: string]: any };
|
|
13
11
|
/** Optional className you can add in addition to `video-player` */
|
|
14
12
|
className?: string;
|
|
15
13
|
/** Optional string to set the text for a video description */
|
|
16
14
|
descriptionText?: string;
|
|
15
|
+
/** Optional string to set the text for a `Heading` component */
|
|
16
|
+
headingText?: string;
|
|
17
17
|
/** Optional string to set the text for a `HelperErrorText` component */
|
|
18
18
|
helperText?: string;
|
|
19
|
+
/** ID that other components can cross reference for accessibility purposes */
|
|
20
|
+
id?: string;
|
|
19
21
|
/** Optional title to be added to the `<iframe>` element for improved accessibility; this title should describe in a few words the content of the video; if omitted, a generic title will be added */
|
|
20
22
|
iframeTitle?: string;
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
/** Optional string to set the text for a `Heading` component */
|
|
24
|
-
headingText?: string;
|
|
23
|
+
/** Offers the ability to hide the helper/invalid text. */
|
|
24
|
+
showHelperInvalidText?: boolean;
|
|
25
25
|
/** Required YouTube or Vimeo video ID. This value can be pulled from a video's YouTube or Vimeo URL. */
|
|
26
26
|
videoId: string;
|
|
27
27
|
/** Required. Used to specify which video service is being used. */
|
|
@@ -33,13 +33,13 @@ export default function VideoPlayer(
|
|
|
33
33
|
) {
|
|
34
34
|
const {
|
|
35
35
|
aspectRatio,
|
|
36
|
-
attributes = {},
|
|
37
36
|
className,
|
|
38
37
|
descriptionText,
|
|
38
|
+
headingText,
|
|
39
39
|
helperText,
|
|
40
|
+
id = generateUUID(),
|
|
40
41
|
iframeTitle,
|
|
41
|
-
|
|
42
|
-
headingText,
|
|
42
|
+
showHelperInvalidText = true,
|
|
43
43
|
videoId,
|
|
44
44
|
videoType,
|
|
45
45
|
} = props;
|
|
@@ -57,31 +57,16 @@ export default function VideoPlayer(
|
|
|
57
57
|
const errorMessage =
|
|
58
58
|
"<strong>Error:</strong> This video player has not been configured properly. Please contact the site administrator.";
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
aspectRatio && modifiers.push(aspectRatio);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const embedCode = (
|
|
65
|
-
<iframe
|
|
66
|
-
src={videoSrc}
|
|
67
|
-
title={iframeTitleFinal}
|
|
68
|
-
frameBorder="0"
|
|
69
|
-
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture"
|
|
70
|
-
allowFullScreen
|
|
71
|
-
{...attributes}
|
|
72
|
-
/>
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
let errored = false;
|
|
60
|
+
let isInvalid = false;
|
|
76
61
|
if (!videoType && !videoId) {
|
|
77
62
|
console.warn("VideoPlayer requires the `videoType` and `videoId` props");
|
|
78
|
-
|
|
63
|
+
isInvalid = true;
|
|
79
64
|
} else if (!videoType) {
|
|
80
65
|
console.warn("VideoPlayer requires the `videoType` prop");
|
|
81
|
-
|
|
66
|
+
isInvalid = true;
|
|
82
67
|
} else if (!videoId) {
|
|
83
68
|
console.warn("VideoPlayer requires the `videoId` prop");
|
|
84
|
-
|
|
69
|
+
isInvalid = true;
|
|
85
70
|
}
|
|
86
71
|
|
|
87
72
|
if (
|
|
@@ -92,31 +77,45 @@ export default function VideoPlayer(
|
|
|
92
77
|
videoId.includes("vimeo")
|
|
93
78
|
) {
|
|
94
79
|
console.warn("VideoPlayer `videoId` prop is not configured properly");
|
|
95
|
-
|
|
80
|
+
isInvalid = true;
|
|
96
81
|
}
|
|
97
82
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
83
|
+
const variant = isInvalid
|
|
84
|
+
? "invalid"
|
|
85
|
+
: getVariant(aspectRatio, VideoPlayerAspectRatios);
|
|
86
|
+
const styles = useMultiStyleConfig("VideoPlayer", { variant });
|
|
87
|
+
|
|
88
|
+
const embedCode = (
|
|
89
|
+
<Box
|
|
90
|
+
as="iframe"
|
|
91
|
+
src={videoSrc}
|
|
92
|
+
title={iframeTitleFinal}
|
|
93
|
+
frameBorder="0"
|
|
94
|
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture"
|
|
95
|
+
allowFullScreen
|
|
96
|
+
__css={styles.iframe}
|
|
97
|
+
/>
|
|
98
|
+
);
|
|
101
99
|
|
|
102
100
|
return (
|
|
103
|
-
<
|
|
104
|
-
{
|
|
101
|
+
<Box
|
|
102
|
+
className={className}
|
|
103
|
+
data-testid="video-player-component"
|
|
104
|
+
id={id}
|
|
105
|
+
__css={styles}
|
|
106
|
+
>
|
|
107
|
+
{isInvalid ? (
|
|
105
108
|
<span dangerouslySetInnerHTML={{ __html: errorMessage }} />
|
|
106
109
|
) : (
|
|
107
|
-
|
|
108
|
-
{headingText
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
{
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
{helperText && (
|
|
116
|
-
<HelperErrorText isError={false}>{helperText}</HelperErrorText>
|
|
117
|
-
)}
|
|
118
|
-
</>
|
|
110
|
+
<ComponentWrapper
|
|
111
|
+
headingText={headingText ? headingText : null}
|
|
112
|
+
descriptionText={descriptionText ? descriptionText : null}
|
|
113
|
+
helperText={helperText && showHelperInvalidText ? helperText : null}
|
|
114
|
+
id={`${id}-componentWrapper`}
|
|
115
|
+
>
|
|
116
|
+
<Box __css={styles.inside}>{embedCode}</Box>
|
|
117
|
+
</ComponentWrapper>
|
|
119
118
|
)}
|
|
120
|
-
</
|
|
119
|
+
</Box>
|
|
121
120
|
);
|
|
122
121
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`VideoPlayer renders the UI snapshot correctly 1`] = `
|
|
4
|
+
<div
|
|
5
|
+
className="css-0"
|
|
6
|
+
data-testid="video-player-component"
|
|
7
|
+
id="video-player-without-text"
|
|
8
|
+
>
|
|
9
|
+
<div
|
|
10
|
+
className="css-0"
|
|
11
|
+
>
|
|
12
|
+
<div
|
|
13
|
+
className="css-0"
|
|
14
|
+
>
|
|
15
|
+
<iframe
|
|
16
|
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture"
|
|
17
|
+
allowFullScreen={true}
|
|
18
|
+
className="css-0"
|
|
19
|
+
frameBorder="0"
|
|
20
|
+
src="https://player.vimeo.com/video/474719268?autoplay=0&loop=0"
|
|
21
|
+
title="Vimeo video player"
|
|
22
|
+
/>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
exports[`VideoPlayer renders the UI snapshot correctly 2`] = `
|
|
29
|
+
<div
|
|
30
|
+
className="css-0"
|
|
31
|
+
data-testid="video-player-component"
|
|
32
|
+
id="video-player-with-text"
|
|
33
|
+
>
|
|
34
|
+
<div
|
|
35
|
+
className="css-0"
|
|
36
|
+
>
|
|
37
|
+
<h2
|
|
38
|
+
className="chakra-heading css-0"
|
|
39
|
+
id="video-player-with-text-componentWrapper-heading"
|
|
40
|
+
>
|
|
41
|
+
VideoPlayer Heading
|
|
42
|
+
</h2>
|
|
43
|
+
<p
|
|
44
|
+
className="chakra-text css-0"
|
|
45
|
+
>
|
|
46
|
+
VideoPlayer description
|
|
47
|
+
</p>
|
|
48
|
+
<div
|
|
49
|
+
className="css-0"
|
|
50
|
+
>
|
|
51
|
+
<iframe
|
|
52
|
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture"
|
|
53
|
+
allowFullScreen={true}
|
|
54
|
+
className="css-0"
|
|
55
|
+
frameBorder="0"
|
|
56
|
+
src="https://player.vimeo.com/video/474719268?autoplay=0&loop=0"
|
|
57
|
+
title="Vimeo video player"
|
|
58
|
+
/>
|
|
59
|
+
</div>
|
|
60
|
+
<div
|
|
61
|
+
className="css-0"
|
|
62
|
+
>
|
|
63
|
+
<div
|
|
64
|
+
aria-atomic={true}
|
|
65
|
+
aria-live="off"
|
|
66
|
+
className=" css-0"
|
|
67
|
+
data-isinvalid={false}
|
|
68
|
+
id="video-player-with-text-componentWrapper-helperText"
|
|
69
|
+
>
|
|
70
|
+
VideoPlayer helper test.
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
`;
|
|
76
|
+
|
|
77
|
+
exports[`VideoPlayer renders the UI snapshot correctly 3`] = `
|
|
78
|
+
<div
|
|
79
|
+
className="css-0"
|
|
80
|
+
data-testid="video-player-component"
|
|
81
|
+
id="video-player-error"
|
|
82
|
+
>
|
|
83
|
+
<span
|
|
84
|
+
dangerouslySetInnerHTML={
|
|
85
|
+
Object {
|
|
86
|
+
"__html": "<strong>Error:</strong> This video player has not been configured properly. Please contact the site administrator.",
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
`;
|