@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.
Files changed (307) hide show
  1. package/CHANGELOG.md +118 -1
  2. package/README.md +98 -50
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Button/Button.d.ts +13 -8
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +36 -52
  7. package/dist/components/Card/CardTypes.d.ts +0 -15
  8. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  9. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -2
  10. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -34
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/Heading/Heading.d.ts +4 -4
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  16. package/dist/components/Icons/Icon.d.ts +8 -0
  17. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  18. package/dist/components/Icons/IconTypes.d.ts +11 -0
  19. package/dist/components/Image/Image.d.ts +19 -9
  20. package/dist/components/Image/ImageTypes.d.ts +20 -0
  21. package/dist/components/Link/Link.d.ts +4 -0
  22. package/dist/components/List/List.d.ts +19 -14
  23. package/dist/components/Notification/Notification.d.ts +37 -16
  24. package/dist/components/Pagination/Pagination.d.ts +16 -13
  25. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  27. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  28. package/dist/components/Radio/Radio.d.ts +2 -0
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  31. package/dist/components/Select/Select.d.ts +2 -0
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  33. package/dist/components/Slider/Slider.d.ts +57 -0
  34. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  35. package/dist/components/Tabs/Tabs.d.ts +1 -1
  36. package/dist/components/TextInput/TextInput.d.ts +12 -0
  37. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  38. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  39. package/dist/design-system-react-components.cjs.development.js +6131 -3715
  40. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  41. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  43. package/dist/design-system-react-components.esm.js +6124 -3699
  44. package/dist/design-system-react-components.esm.js.map +1 -1
  45. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  46. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  47. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  48. package/dist/hooks/useWindowSize.d.ts +10 -0
  49. package/dist/index.d.ts +13 -8
  50. package/dist/resources.scss +180 -170
  51. package/dist/styles.css +1 -1
  52. package/dist/theme/components/button.d.ts +22 -8
  53. package/dist/theme/components/card.d.ts +168 -0
  54. package/dist/theme/components/checkbox.d.ts +5 -1
  55. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  56. package/dist/theme/components/componentWrapper.d.ts +11 -0
  57. package/dist/theme/components/datePicker.d.ts +16 -0
  58. package/dist/theme/components/fieldset.d.ts +27 -0
  59. package/dist/theme/components/global.d.ts +23 -13
  60. package/dist/theme/components/globalMixins.d.ts +9 -1
  61. package/dist/theme/components/heading.d.ts +5 -0
  62. package/dist/theme/components/helperErrorText.d.ts +10 -0
  63. package/dist/theme/components/hero.d.ts +1 -0
  64. package/dist/theme/components/horizontalRule.d.ts +14 -0
  65. package/dist/theme/components/image.d.ts +31 -0
  66. package/dist/theme/components/label.d.ts +5 -3
  67. package/dist/theme/components/link.d.ts +4 -0
  68. package/dist/theme/components/list.d.ts +89 -0
  69. package/dist/theme/components/notification.d.ts +75 -0
  70. package/dist/theme/components/pagination.d.ts +19 -0
  71. package/dist/theme/components/progressIndicator.d.ts +50 -0
  72. package/dist/theme/components/radioGroup.d.ts +12 -0
  73. package/dist/theme/components/select.d.ts +11 -2
  74. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  75. package/dist/theme/components/slider.d.ts +51 -0
  76. package/dist/theme/components/tabs.d.ts +54 -3
  77. package/dist/theme/components/textInput.d.ts +8 -1
  78. package/dist/theme/components/videoPlayer.d.ts +40 -0
  79. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  80. package/dist/theme/foundations/global.d.ts +6 -1
  81. package/dist/theme/foundations/radii.d.ts +5 -0
  82. package/dist/theme/foundations/spacing.d.ts +16 -16
  83. package/package.json +72 -83
  84. package/src/__tests__/setup.ts +2 -2
  85. package/src/components/Accordion/Accordion.stories.mdx +39 -44
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  87. package/src/components/Autosuggest/Autosuggest.stories.tsx +2 -1
  88. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  89. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +14 -10
  90. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +23 -0
  91. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  92. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +199 -1
  93. package/src/components/Button/Button.stories.mdx +15 -10
  94. package/src/components/Button/Button.test.tsx +21 -7
  95. package/src/components/Button/Button.tsx +22 -34
  96. package/src/components/Button/ButtonTypes.tsx +1 -0
  97. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  98. package/src/components/Card/Card.stories.mdx +296 -259
  99. package/src/components/Card/Card.test.tsx +156 -84
  100. package/src/components/Card/Card.tsx +195 -145
  101. package/src/components/Card/CardTypes.tsx +0 -17
  102. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  103. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  104. package/src/components/CardEdition/_CardEdition.scss +22 -23
  105. package/src/components/Chakra/Box.stories.mdx +15 -16
  106. package/src/components/Chakra/Center.stories.mdx +31 -16
  107. package/src/components/Chakra/Grid.stories.mdx +28 -15
  108. package/src/components/Chakra/Stack.stories.mdx +35 -18
  109. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  110. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  111. package/src/components/Checkbox/Checkbox.tsx +39 -33
  112. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  113. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  114. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +29 -2
  115. package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -18
  116. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +47 -81
  117. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  118. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  119. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  120. package/src/components/DatePicker/DatePicker.tsx +159 -128
  121. package/src/components/DatePicker/_DatePicker.scss +33 -67
  122. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  123. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  124. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  125. package/src/components/Fieldset/Fieldset.tsx +52 -0
  126. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  127. package/src/components/Form/Form.stories.mdx +24 -6
  128. package/src/components/Form/Form.test.tsx +1 -1
  129. package/src/components/Form/Form.tsx +1 -0
  130. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  131. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  132. package/src/components/Heading/Heading.stories.mdx +3 -4
  133. package/src/components/Heading/Heading.tsx +5 -5
  134. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  135. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  136. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  137. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  138. package/src/components/Hero/Hero.stories.mdx +12 -2
  139. package/src/components/Hero/Hero.tsx +1 -1
  140. package/src/components/Hero/HeroTypes.tsx +1 -0
  141. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  142. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  143. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  144. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  145. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  146. package/src/components/Icons/Icon.stories.mdx +12 -4
  147. package/src/components/Icons/Icon.test.tsx +18 -0
  148. package/src/components/Icons/Icon.tsx +16 -1
  149. package/src/components/Icons/IconSvgs.tsx +22 -0
  150. package/src/components/Icons/IconTypes.tsx +11 -0
  151. package/src/components/Image/Image.stories.mdx +220 -0
  152. package/src/components/Image/Image.test.tsx +131 -29
  153. package/src/components/Image/Image.tsx +84 -56
  154. package/src/components/Image/ImageTypes.ts +22 -0
  155. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  156. package/src/components/Input/Input.stories.tsx +23 -67
  157. package/src/components/Input/Input.test.tsx +4 -4
  158. package/src/components/Input/_Input.scss +23 -14
  159. package/src/components/Link/Link.tsx +4 -1
  160. package/src/components/List/List.stories.mdx +124 -49
  161. package/src/components/List/List.test.tsx +142 -63
  162. package/src/components/List/List.tsx +89 -93
  163. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  164. package/src/components/Modal/Modal.stories.mdx +3 -3
  165. package/src/components/Modal/_Modal.scss +2 -2
  166. package/src/components/Notification/Notification.stories.mdx +109 -112
  167. package/src/components/Notification/Notification.test.tsx +99 -110
  168. package/src/components/Notification/Notification.tsx +156 -159
  169. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  170. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  171. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  172. package/src/components/Pagination/Pagination.test.tsx +276 -146
  173. package/src/components/Pagination/Pagination.tsx +174 -154
  174. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  175. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  176. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  177. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  178. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  179. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  180. package/src/components/Radio/Radio.test.tsx +20 -4
  181. package/src/components/Radio/Radio.tsx +6 -3
  182. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  183. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  184. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  185. package/src/components/RadioGroup/RadioGroup.tsx +19 -19
  186. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  187. package/src/components/SearchBar/SearchBar.Test.tsx +20 -1
  188. package/src/components/SearchBar/SearchBar.stories.mdx +113 -8
  189. package/src/components/SearchBar/SearchBar.tsx +20 -10
  190. package/src/components/Select/Select.test.tsx +12 -0
  191. package/src/components/Select/Select.tsx +5 -2
  192. package/src/components/Select/SelectTypes.tsx +1 -0
  193. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  194. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  195. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  196. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  197. package/src/components/Slider/Slider.stories.mdx +529 -0
  198. package/src/components/Slider/Slider.test.tsx +653 -0
  199. package/src/components/Slider/Slider.tsx +303 -0
  200. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  201. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  202. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  203. package/src/components/StyleGuide/Buttons.stories.mdx +89 -73
  204. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  205. package/src/components/StyleGuide/Colors.stories.mdx +171 -311
  206. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  207. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  208. package/src/components/StyleGuide/Iconography.stories.mdx +85 -91
  209. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  210. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  211. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  212. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  213. package/src/components/Tabs/Tabs.tsx +87 -64
  214. package/src/components/Template/Template.stories.mdx +25 -27
  215. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  216. package/src/components/TextInput/TextInput.test.tsx +22 -2
  217. package/src/components/TextInput/TextInput.tsx +28 -8
  218. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  219. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  220. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  222. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  223. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  224. package/src/docs/Chakra.stories.mdx +244 -63
  225. package/src/docs/Intro.stories.mdx +5 -2
  226. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  227. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  228. package/src/hooks/useCarouselStyles.ts +34 -0
  229. package/src/hooks/useNYPLTheme.ts +67 -0
  230. package/src/hooks/useWindowSize.ts +40 -0
  231. package/src/index.ts +22 -19
  232. package/src/resources.scss +5 -5
  233. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  234. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  235. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  236. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  237. package/src/styles/base/_place-holder.scss +14 -3
  238. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  239. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  240. package/src/styles/space/_space-stack.scss +116 -0
  241. package/src/styles.scss +13 -60
  242. package/src/theme/components/button.ts +21 -15
  243. package/src/theme/components/card.ts +174 -0
  244. package/src/theme/components/checkbox.ts +8 -3
  245. package/src/theme/components/checkboxGroup.ts +8 -0
  246. package/src/theme/components/componentWrapper.ts +10 -0
  247. package/src/theme/components/datePicker.ts +17 -0
  248. package/src/theme/components/fieldset.ts +18 -0
  249. package/src/theme/components/global.ts +26 -15
  250. package/src/theme/components/globalMixins.ts +9 -1
  251. package/src/theme/components/heading.ts +10 -5
  252. package/src/theme/components/helperErrorText.ts +9 -0
  253. package/src/theme/components/hero.ts +4 -3
  254. package/src/theme/components/horizontalRule.ts +13 -0
  255. package/src/theme/components/icon.ts +9 -9
  256. package/src/theme/components/image.ts +116 -0
  257. package/src/theme/components/label.ts +3 -10
  258. package/src/theme/components/link.ts +5 -1
  259. package/src/theme/components/list.ts +73 -0
  260. package/src/theme/components/notification.ts +93 -0
  261. package/src/theme/components/pagination.ts +20 -0
  262. package/src/theme/components/progressIndicator.ts +62 -0
  263. package/src/theme/components/radio.ts +2 -2
  264. package/src/theme/components/radioGroup.ts +8 -0
  265. package/src/theme/components/select.ts +6 -3
  266. package/src/theme/components/skeletonLoader.ts +107 -0
  267. package/src/theme/components/slider.ts +79 -0
  268. package/src/theme/components/statusBadge.ts +1 -2
  269. package/src/theme/components/tabs.ts +49 -19
  270. package/src/theme/components/template.ts +8 -8
  271. package/src/theme/components/textInput.ts +5 -4
  272. package/src/theme/components/videoPlayer.ts +49 -0
  273. package/src/theme/foundations/breakpoints.ts +8 -8
  274. package/src/theme/foundations/global.ts +6 -1
  275. package/src/theme/foundations/radii.ts +6 -0
  276. package/src/theme/foundations/spacing.ts +24 -24
  277. package/src/theme/index.ts +41 -10
  278. package/src/utils/componentCategories.ts +4 -3
  279. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  280. package/dist/components/Image/Image.stories.d.ts +0 -18
  281. package/dist/components/List/List.stories.d.ts +0 -7
  282. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  283. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  284. package/src/components/Button/_Button.scss +0 -32
  285. package/src/components/Card/_Card.scss +0 -308
  286. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  287. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  288. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  289. package/src/components/Image/Image.stories.tsx +0 -54
  290. package/src/components/Image/_Image.scss +0 -38
  291. package/src/components/List/List.stories.tsx +0 -139
  292. package/src/components/List/_List.scss +0 -76
  293. package/src/components/Notification/_Notification.scss +0 -110
  294. package/src/components/Pagination/_Pagination.scss +0 -40
  295. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  296. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  297. package/src/styles/01-colors/_colors-brand.scss +0 -62
  298. package/src/styles/01-colors/_colors-utility.scss +0 -67
  299. package/src/styles/02-typography/_type-scale.css +0 -11
  300. package/src/styles/02-typography/_type-weight.css +0 -7
  301. package/src/styles/02-typography/_typefaces.css +0 -4
  302. package/src/styles/03-space/_space-stack.scss +0 -116
  303. package/src/styles/03-space/_space.css +0 -30
  304. package/src/styles/base/_card-grid.scss +0 -78
  305. package/src/styles/base/_typography.scss +0 -11
  306. package/src/theme/components/customCheckboxGroup.ts +0 -12
  307. 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.23.4` |
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
- <Preview withToolbar>
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
- </Preview>
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("aspect ratio", () => {
116
- it("Renders with 4:3 aspect ratio", () => {
117
- const utils = render(
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(utils.container.querySelector(".video-player")).toHaveAttribute(
125
- "class",
126
- "video-player video-player--four-by-three "
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
- it("Renders with 16:9 aspect ratio", () => {
131
- const utils = render(
140
+ it("renders the UI snapshot correctly", () => {
141
+ const videoPlayerWithoutText = renderer
142
+ .create(
132
143
  <VideoPlayer
133
- videoType={VideoPlayerTypes.Vimeo}
144
+ id="video-player-without-text"
134
145
  videoId="474719268"
135
- aspectRatio={VideoPlayerAspectRatios.SixteenByNine}
146
+ videoType={VideoPlayerTypes.Vimeo}
136
147
  />
137
- );
138
- expect(utils.container.querySelector(".video-player")).toHaveAttribute(
139
- "class",
140
- "video-player video-player--sixteen-by-nine "
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
- videoType={VideoPlayerTypes.Vimeo}
153
+ descriptionText="VideoPlayer description"
154
+ headingText="VideoPlayer Heading"
155
+ id="video-player-with-text"
156
+ helperText="VideoPlayer helper test."
148
157
  videoId="474719268"
149
- aspectRatio={VideoPlayerAspectRatios.Square}
158
+ videoType={VideoPlayerTypes.Vimeo}
150
159
  />
151
- );
152
-
153
- expect(utils.container.querySelector(".video-player")).toHaveAttribute(
154
- "class",
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
- expect(utils.container.querySelector(".video-player")).toHaveAttribute(
170
- "class",
171
- "video-player video-player--four-by-three video-player--errored "
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 bem from "../../utils/bem";
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
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
22
- modifiers?: string[];
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
- modifiers = [],
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
- errored = true;
63
+ isInvalid = true;
79
64
  } else if (!videoType) {
80
65
  console.warn("VideoPlayer requires the `videoType` prop");
81
- errored = true;
66
+ isInvalid = true;
82
67
  } else if (!videoId) {
83
68
  console.warn("VideoPlayer requires the `videoId` prop");
84
- errored = true;
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
- errored = true;
80
+ isInvalid = true;
96
81
  }
97
82
 
98
- {
99
- errored && modifiers.push("errored");
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
- <div className={bem("video-player", modifiers, "", [className])}>
104
- {errored ? (
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
- <Heading level={HeadingLevels.Two} text={headingText} />
110
- )}
111
- {descriptionText && <p>{descriptionText}</p>}
112
- <div className={bem("video-player__inside", modifiers, "", [])}>
113
- {embedCode}
114
- </div>
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
- </div>
119
+ </Box>
121
120
  );
122
121
  }
@@ -4,7 +4,7 @@ export enum VideoPlayerTypes {
4
4
  }
5
5
 
6
6
  export enum VideoPlayerAspectRatios {
7
- FourByThree = "four-by-three",
8
- SixteenByNine = "sixteen-by-nine",
7
+ FourByThree = "fourByThree",
8
+ SixteenByNine = "sixteenByNine",
9
9
  Square = "square",
10
10
  }
@@ -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
+ `;