@nypl/design-system-react-components 0.25.5 → 0.25.9

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 (275) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/README.md +1 -1
  3. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  4. package/dist/components/Button/Button.d.ts +6 -6
  5. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  6. package/dist/components/Card/Card.d.ts +6 -4
  7. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  11. package/dist/components/Form/Form.d.ts +2 -2
  12. package/dist/components/Heading/Heading.d.ts +7 -3
  13. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  16. package/dist/components/Icons/Icon.d.ts +4 -4
  17. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  18. package/dist/components/Icons/IconTypes.d.ts +1 -23
  19. package/dist/components/Image/Image.d.ts +11 -3
  20. package/dist/components/Image/ImageTypes.d.ts +3 -1
  21. package/dist/components/Link/LinkTypes.d.ts +1 -0
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  25. package/dist/components/Modal/Modal.d.ts +0 -4
  26. package/dist/components/Notification/Notification.d.ts +4 -2
  27. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  28. package/dist/components/Radio/Radio.d.ts +6 -5
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  31. package/dist/components/Select/Select.d.ts +5 -2
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  33. package/dist/components/Slider/Slider.d.ts +3 -2
  34. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  35. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  36. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  37. package/dist/components/Table/Table.d.ts +23 -0
  38. package/dist/components/Template/Template.d.ts +8 -3
  39. package/dist/components/Text/Text.d.ts +2 -2
  40. package/dist/components/TextInput/TextInput.d.ts +4 -3
  41. package/dist/components/Toggle/Toggle.d.ts +48 -0
  42. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  43. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  44. package/dist/design-system-react-components.cjs.development.js +5989 -5490
  45. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  48. package/dist/design-system-react-components.esm.js +6057 -5551
  49. package/dist/design-system-react-components.esm.js.map +1 -1
  50. package/dist/index.d.ts +11 -4
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +9 -0
  53. package/dist/theme/components/button.d.ts +0 -12
  54. package/dist/theme/components/card.d.ts +14 -2
  55. package/dist/theme/components/customTable.d.ts +47 -0
  56. package/dist/theme/components/fieldset.d.ts +2 -2
  57. package/dist/theme/components/global.d.ts +1 -1
  58. package/dist/theme/components/heading.d.ts +4 -0
  59. package/dist/theme/components/label.d.ts +1 -1
  60. package/dist/theme/components/link.d.ts +14 -1
  61. package/dist/theme/components/list.d.ts +0 -2
  62. package/dist/theme/components/logo.d.ts +4 -0
  63. package/dist/theme/components/notification.d.ts +8 -4
  64. package/dist/theme/components/searchBar.d.ts +7 -13
  65. package/dist/theme/components/select.d.ts +1 -0
  66. package/dist/theme/components/structuredContent.d.ts +33 -0
  67. package/dist/theme/components/template.d.ts +10 -10
  68. package/dist/theme/components/textInput.d.ts +2 -0
  69. package/dist/theme/components/toggle.d.ts +71 -0
  70. package/dist/theme/foundations/spacing.d.ts +2 -0
  71. package/dist/utils/utils.d.ts +10 -0
  72. package/package.json +2 -3
  73. package/src/__tests__/utils/utils.test.ts +23 -1
  74. package/src/components/Accordion/Accordion.stories.mdx +15 -14
  75. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  76. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  77. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  78. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +50 -14
  79. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +20 -0
  80. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  81. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +198 -0
  82. package/src/components/Button/Button.stories.mdx +93 -48
  83. package/src/components/Button/Button.test.tsx +0 -12
  84. package/src/components/Button/Button.tsx +7 -8
  85. package/src/components/Button/ButtonTypes.tsx +0 -1
  86. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  87. package/src/components/Card/Card.stories.mdx +246 -64
  88. package/src/components/Card/Card.test.tsx +45 -22
  89. package/src/components/Card/Card.tsx +26 -13
  90. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  91. package/src/components/Chakra/Box.stories.mdx +3 -3
  92. package/src/components/Chakra/Center.stories.mdx +5 -5
  93. package/src/components/Chakra/Grid.stories.mdx +14 -17
  94. package/src/components/Chakra/Stack.stories.mdx +2 -2
  95. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  96. package/src/components/Checkbox/Checkbox.tsx +13 -8
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  99. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  100. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  101. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  102. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  103. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  104. package/src/components/DatePicker/DatePicker.test.tsx +8 -6
  105. package/src/components/DatePicker/DatePicker.tsx +10 -6
  106. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  107. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  108. package/src/components/Form/Form.stories.mdx +49 -41
  109. package/src/components/Form/Form.tsx +5 -4
  110. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  111. package/src/components/Heading/Heading.stories.mdx +59 -23
  112. package/src/components/Heading/Heading.test.tsx +82 -18
  113. package/src/components/Heading/Heading.tsx +31 -31
  114. package/src/components/Heading/HeadingTypes.tsx +6 -6
  115. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  116. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  117. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  118. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  119. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  120. package/src/components/Hero/Hero.stories.mdx +72 -53
  121. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  122. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  123. package/src/components/Icons/Icon.stories.mdx +77 -75
  124. package/src/components/Icons/Icon.tsx +4 -5
  125. package/src/components/Icons/IconSvgs.tsx +2 -42
  126. package/src/components/Icons/IconTypes.tsx +1 -24
  127. package/src/components/Image/Image.stories.mdx +214 -104
  128. package/src/components/Image/Image.test.tsx +10 -0
  129. package/src/components/Image/Image.tsx +21 -10
  130. package/src/components/Image/ImageTypes.ts +2 -0
  131. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  132. package/src/components/Label/Label.stories.mdx +21 -20
  133. package/src/components/Link/Link.stories.mdx +103 -53
  134. package/src/components/Link/Link.test.tsx +108 -7
  135. package/src/components/Link/Link.tsx +58 -19
  136. package/src/components/Link/LinkTypes.tsx +1 -0
  137. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  138. package/src/components/List/List.stories.mdx +36 -24
  139. package/src/components/Logo/Logo.stories.mdx +220 -0
  140. package/src/components/Logo/Logo.test.tsx +98 -0
  141. package/src/components/Logo/Logo.tsx +97 -0
  142. package/src/components/Logo/LogoSvgs.tsx +34 -0
  143. package/src/components/Logo/LogoTypes.tsx +32 -0
  144. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  145. package/src/components/Modal/Modal.stories.mdx +20 -5
  146. package/src/components/Modal/Modal.tsx +2 -8
  147. package/src/components/Notification/Notification.stories.mdx +96 -40
  148. package/src/components/Notification/Notification.test.tsx +62 -16
  149. package/src/components/Notification/Notification.tsx +26 -9
  150. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  151. package/src/components/Pagination/Pagination.stories.mdx +18 -8
  152. package/src/components/Pagination/Pagination.tsx +1 -1
  153. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  154. package/src/components/Placeholder/Placeholder.tsx +7 -14
  155. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  156. package/src/components/Radio/Radio.stories.mdx +39 -19
  157. package/src/components/Radio/Radio.tsx +13 -9
  158. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  159. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  160. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  161. package/src/components/SearchBar/SearchBar.Test.tsx +114 -22
  162. package/src/components/SearchBar/SearchBar.stories.mdx +111 -33
  163. package/src/components/SearchBar/SearchBar.tsx +57 -33
  164. package/src/components/Select/Select.stories.mdx +177 -66
  165. package/src/components/Select/Select.test.tsx +2 -2
  166. package/src/components/Select/Select.tsx +22 -12
  167. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  168. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  169. package/src/components/Slider/Slider.stories.mdx +74 -23
  170. package/src/components/Slider/Slider.test.tsx +35 -0
  171. package/src/components/Slider/Slider.tsx +22 -11
  172. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  173. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  174. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  175. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  176. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  177. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  178. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  179. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  180. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  181. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  182. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  183. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  184. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  185. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  186. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  187. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  188. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  189. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  190. package/src/components/Table/Table.stories.mdx +66 -0
  191. package/src/components/Table/Table.test.tsx +60 -0
  192. package/src/components/Table/Table.tsx +116 -0
  193. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  194. package/src/components/Tabs/Tabs.test.tsx +1 -1
  195. package/src/components/Template/Template.stories.mdx +57 -49
  196. package/src/components/Template/Template.test.tsx +65 -5
  197. package/src/components/Template/Template.tsx +35 -5
  198. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  199. package/src/components/Text/Text.stories.mdx +33 -11
  200. package/src/components/Text/Text.tsx +2 -2
  201. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  202. package/src/components/TextInput/TextInput.test.tsx +96 -0
  203. package/src/components/TextInput/TextInput.tsx +12 -8
  204. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  205. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  206. package/src/components/Toggle/Toggle.test.tsx +140 -0
  207. package/src/components/Toggle/Toggle.tsx +123 -0
  208. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  209. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  210. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  211. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  212. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  213. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  214. package/src/docs/Chakra.stories.mdx +5 -8
  215. package/src/docs/Intro.stories.mdx +2 -2
  216. package/src/index.ts +13 -4
  217. package/src/styles/base/_03-base.scss +1 -1
  218. package/src/styles/base/_place-holder.scss +7 -7
  219. package/src/styles.scss +1 -5
  220. package/src/theme/components/breadcrumb.ts +14 -4
  221. package/src/theme/components/button.ts +5 -12
  222. package/src/theme/components/card.ts +9 -7
  223. package/src/theme/components/checkbox.ts +1 -1
  224. package/src/theme/components/customTable.ts +50 -0
  225. package/src/theme/components/datePicker.ts +1 -1
  226. package/src/theme/components/global.ts +7 -7
  227. package/src/theme/components/heading.ts +13 -11
  228. package/src/theme/components/helperErrorText.ts +1 -1
  229. package/src/theme/components/icon.ts +2 -2
  230. package/src/theme/components/image.ts +9 -1
  231. package/src/theme/components/link.ts +17 -5
  232. package/src/theme/components/list.ts +1 -3
  233. package/src/theme/components/logo.ts +54 -0
  234. package/src/theme/components/notification.ts +9 -7
  235. package/src/theme/components/searchBar.ts +7 -13
  236. package/src/theme/components/select.ts +1 -0
  237. package/src/theme/components/statusBadge.ts +1 -1
  238. package/src/theme/components/structuredContent.ts +54 -0
  239. package/src/theme/components/template.ts +10 -10
  240. package/src/theme/components/text.ts +6 -6
  241. package/src/theme/components/textInput.ts +1 -0
  242. package/src/theme/components/toggle.ts +69 -0
  243. package/src/theme/components/videoPlayer.ts +0 -2
  244. package/src/theme/foundations/global.ts +2 -2
  245. package/src/theme/foundations/spacing.ts +3 -0
  246. package/src/theme/foundations/typography.ts +84 -12
  247. package/src/theme/index.ts +8 -0
  248. package/src/utils/componentCategories.ts +4 -2
  249. package/src/utils/utils.ts +17 -0
  250. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  251. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  252. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  253. package/dist/components/Input/Input.d.ts +0 -36
  254. package/dist/components/Input/Input.stories.d.ts +0 -29
  255. package/dist/components/Input/InputTypes.d.ts +0 -6
  256. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  257. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  258. package/dist/helpers/getCSSVariable.d.ts +0 -1
  259. package/dist/interfaces.d.ts +0 -3
  260. package/dist/utils/bem.d.ts +0 -1
  261. package/src/__tests__/utils/bem.test.ts +0 -37
  262. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  263. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  264. package/src/components/CardEdition/CardEdition.tsx +0 -60
  265. package/src/components/CardEdition/_CardEdition.scss +0 -137
  266. package/src/components/Input/Input.stories.tsx +0 -133
  267. package/src/components/Input/Input.test.tsx +0 -266
  268. package/src/components/Input/Input.tsx +0 -81
  269. package/src/components/Input/InputTypes.tsx +0 -8
  270. package/src/components/Input/_Input.scss +0 -78
  271. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  272. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  273. package/src/helpers/getCSSVariable.tsx +0 -5
  274. package/src/interfaces.ts +0 -3
  275. package/src/utils/bem.ts +0 -44
@@ -0,0 +1,255 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Toggle Renders the UI snapshot correctly 1`] = `
4
+ <div
5
+ className="css-0"
6
+ >
7
+ <label
8
+ className="chakra-switch css-u8kezd"
9
+ onClick={[Function]}
10
+ >
11
+ <input
12
+ aria-disabled={false}
13
+ aria-invalid={false}
14
+ aria-label="Test Label"
15
+ checked={false}
16
+ className="chakra-switch__input"
17
+ disabled={false}
18
+ id="inputID"
19
+ name="default"
20
+ onBlur={[Function]}
21
+ onChange={[Function]}
22
+ onFocus={[Function]}
23
+ onKeyDown={[Function]}
24
+ onKeyUp={[Function]}
25
+ required={false}
26
+ style={
27
+ Object {
28
+ "border": "0px",
29
+ "clip": "rect(0px, 0px, 0px, 0px)",
30
+ "height": "1px",
31
+ "margin": "-1px",
32
+ "overflow": "hidden",
33
+ "padding": "0px",
34
+ "position": "absolute",
35
+ "whiteSpace": "nowrap",
36
+ "width": "1px",
37
+ }
38
+ }
39
+ type="checkbox"
40
+ />
41
+ <span
42
+ aria-hidden={true}
43
+ className="chakra-switch__track css-14qxnv8"
44
+ onMouseDown={[Function]}
45
+ onMouseEnter={[Function]}
46
+ onMouseLeave={[Function]}
47
+ onMouseUp={[Function]}
48
+ >
49
+ <span
50
+ className="chakra-switch__thumb css-0"
51
+ />
52
+ </span>
53
+ <span
54
+ className="chakra-switch__label css-1y8kf23"
55
+ onMouseDown={[Function]}
56
+ onTouchStart={[Function]}
57
+ >
58
+ Test Label
59
+ </span>
60
+ </label>
61
+ </div>
62
+ `;
63
+
64
+ exports[`Toggle Renders the UI snapshot correctly 2`] = `
65
+ <div
66
+ className="css-0"
67
+ >
68
+ <label
69
+ className="chakra-switch css-u8kezd"
70
+ data-checked=""
71
+ onClick={[Function]}
72
+ >
73
+ <input
74
+ aria-disabled={false}
75
+ aria-invalid={false}
76
+ aria-label="Test Label"
77
+ checked={true}
78
+ className="chakra-switch__input"
79
+ disabled={false}
80
+ id="Toggle-checked"
81
+ name="default"
82
+ onBlur={[Function]}
83
+ onChange={[Function]}
84
+ onFocus={[Function]}
85
+ onKeyDown={[Function]}
86
+ onKeyUp={[Function]}
87
+ required={false}
88
+ style={
89
+ Object {
90
+ "border": "0px",
91
+ "clip": "rect(0px, 0px, 0px, 0px)",
92
+ "height": "1px",
93
+ "margin": "-1px",
94
+ "overflow": "hidden",
95
+ "padding": "0px",
96
+ "position": "absolute",
97
+ "whiteSpace": "nowrap",
98
+ "width": "1px",
99
+ }
100
+ }
101
+ type="checkbox"
102
+ />
103
+ <span
104
+ aria-hidden={true}
105
+ className="chakra-switch__track css-14qxnv8"
106
+ data-checked=""
107
+ onMouseDown={[Function]}
108
+ onMouseEnter={[Function]}
109
+ onMouseLeave={[Function]}
110
+ onMouseUp={[Function]}
111
+ >
112
+ <span
113
+ className="chakra-switch__thumb css-0"
114
+ data-checked=""
115
+ />
116
+ </span>
117
+ <span
118
+ className="chakra-switch__label css-1y8kf23"
119
+ data-checked=""
120
+ onMouseDown={[Function]}
121
+ onTouchStart={[Function]}
122
+ >
123
+ Test Label
124
+ </span>
125
+ </label>
126
+ </div>
127
+ `;
128
+
129
+ exports[`Toggle Renders the UI snapshot correctly 3`] = `
130
+ <div
131
+ className="css-0"
132
+ >
133
+ <label
134
+ className="chakra-switch css-u8kezd"
135
+ data-invalid=""
136
+ onClick={[Function]}
137
+ >
138
+ <input
139
+ aria-disabled={false}
140
+ aria-invalid={true}
141
+ aria-label="Test Label"
142
+ checked={false}
143
+ className="chakra-switch__input"
144
+ disabled={false}
145
+ id="Toggle-invalid"
146
+ name="default"
147
+ onBlur={[Function]}
148
+ onChange={[Function]}
149
+ onFocus={[Function]}
150
+ onKeyDown={[Function]}
151
+ onKeyUp={[Function]}
152
+ required={false}
153
+ style={
154
+ Object {
155
+ "border": "0px",
156
+ "clip": "rect(0px, 0px, 0px, 0px)",
157
+ "height": "1px",
158
+ "margin": "-1px",
159
+ "overflow": "hidden",
160
+ "padding": "0px",
161
+ "position": "absolute",
162
+ "whiteSpace": "nowrap",
163
+ "width": "1px",
164
+ }
165
+ }
166
+ type="checkbox"
167
+ />
168
+ <span
169
+ aria-hidden={true}
170
+ className="chakra-switch__track css-14qxnv8"
171
+ data-invalid=""
172
+ onMouseDown={[Function]}
173
+ onMouseEnter={[Function]}
174
+ onMouseLeave={[Function]}
175
+ onMouseUp={[Function]}
176
+ >
177
+ <span
178
+ className="chakra-switch__thumb css-0"
179
+ />
180
+ </span>
181
+ <span
182
+ className="chakra-switch__label css-1y8kf23"
183
+ data-invalid=""
184
+ onMouseDown={[Function]}
185
+ onTouchStart={[Function]}
186
+ >
187
+ Test Label
188
+ </span>
189
+ </label>
190
+ </div>
191
+ `;
192
+
193
+ exports[`Toggle Renders the UI snapshot correctly 4`] = `
194
+ <div
195
+ className="css-0"
196
+ >
197
+ <label
198
+ className="chakra-switch css-u8kezd"
199
+ data-disabled=""
200
+ onClick={[Function]}
201
+ >
202
+ <input
203
+ aria-disabled={true}
204
+ aria-invalid={false}
205
+ aria-label="Test Label"
206
+ checked={false}
207
+ className="chakra-switch__input"
208
+ disabled={true}
209
+ id="Toggle-disabled"
210
+ name="default"
211
+ onBlur={[Function]}
212
+ onChange={[Function]}
213
+ onFocus={[Function]}
214
+ onKeyDown={[Function]}
215
+ onKeyUp={[Function]}
216
+ required={false}
217
+ style={
218
+ Object {
219
+ "border": "0px",
220
+ "clip": "rect(0px, 0px, 0px, 0px)",
221
+ "height": "1px",
222
+ "margin": "-1px",
223
+ "overflow": "hidden",
224
+ "padding": "0px",
225
+ "position": "absolute",
226
+ "whiteSpace": "nowrap",
227
+ "width": "1px",
228
+ }
229
+ }
230
+ type="checkbox"
231
+ />
232
+ <span
233
+ aria-hidden={true}
234
+ className="chakra-switch__track css-14qxnv8"
235
+ data-disabled=""
236
+ onMouseDown={[Function]}
237
+ onMouseEnter={[Function]}
238
+ onMouseLeave={[Function]}
239
+ onMouseUp={[Function]}
240
+ >
241
+ <span
242
+ className="chakra-switch__thumb css-0"
243
+ />
244
+ </span>
245
+ <span
246
+ className="chakra-switch__label css-1y8kf23"
247
+ data-disabled=""
248
+ onMouseDown={[Function]}
249
+ onTouchStart={[Function]}
250
+ >
251
+ Test Label
252
+ </span>
253
+ </label>
254
+ </div>
255
+ `;
@@ -1,17 +1,27 @@
1
+ import { action } from "@storybook/addon-actions";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
10
 
10
- import DSProvider from "../../theme/provider";
11
11
  import VideoPlayer from "./VideoPlayer";
12
- import { VideoPlayerTypes } from "./VideoPlayerTypes";
13
- import { action } from "@storybook/addon-actions";
12
+ import { VideoPlayerAspectRatios, VideoPlayerTypes } from "./VideoPlayerTypes";
14
13
  import { getCategory } from "../../utils/componentCategories";
14
+ import DSProvider from "../../theme/provider";
15
+ import { getStorybookEnumValues } from "../../utils/utils";
16
+
17
+ export const ratiosEnumValues = getStorybookEnumValues(
18
+ VideoPlayerAspectRatios,
19
+ "VideoPlayerAspectRatios"
20
+ );
21
+ export const typesEnumValues = getStorybookEnumValues(
22
+ VideoPlayerTypes,
23
+ "VideoPlayerTypes"
24
+ );
15
25
 
16
26
  <Meta
17
27
  title={getCategory("VideoPlayer")}
@@ -20,15 +30,27 @@ import { getCategory } from "../../utils/componentCategories";
20
30
  parameters={{
21
31
  design: {
22
32
  type: "figma",
23
- url:
24
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10968%3A3680",
33
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10968%3A3680",
25
34
  },
26
35
  jest: ["VideoPlayer.test.tsx"],
27
36
  }}
28
37
  argTypes={{
29
- attributes: { table: { disable: true } },
30
- className: { table: { disable: true } },
31
- modifiers: { table: { disable: true } },
38
+ aspectRatio: {
39
+ control: { type: "select" },
40
+ table: {
41
+ defaultValue: { summary: "VideoPlayerAspectRatios.SixteenByNine" },
42
+ },
43
+ options: ratiosEnumValues.options,
44
+ },
45
+ className: { control: false },
46
+ id: { control: false },
47
+ showHelperInvalidText: {
48
+ table: { defaultValue: { summary: true } },
49
+ },
50
+ videoType: {
51
+ control: { type: "select" },
52
+ options: typesEnumValues.options,
53
+ },
32
54
  }}
33
55
  />
34
56
 
@@ -37,11 +59,13 @@ import { getCategory } from "../../utils/componentCategories";
37
59
  | Component Version | DS Version |
38
60
  | ----------------- | ---------- |
39
61
  | Added | `0.23.2` |
40
- | Latest | `0.25.2` |
62
+ | Latest | `0.25.9` |
41
63
 
42
64
  <Description of={VideoPlayer} />
43
65
 
44
- The `VideoPlayer` component is used to embed a `Vimeo` or `YouTube` video player on a page. The component requires both the `videoType` and `videoId` props. You can extract the videoId from the video's URL. **IMPORTANT:** Do not try to enter the full video URL as the `videoId` value.
66
+ The `VideoPlayer` component is used to embed a `Vimeo` or `YouTube` video player on a page. The component requires the `embedCode` prop or both the `videoType` and `videoId` props. The component will not function properly if you try to set all of them.
67
+
68
+ You can extract the videoId from the video's URL. **IMPORTANT:** Do not try to enter the full video URL as the `videoId` value.
45
69
 
46
70
  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
71
 
@@ -49,25 +73,27 @@ The `aspectRatio` prop is used to control the sizing of the space allotted for t
49
73
  <Story
50
74
  name="VideoPlayer"
51
75
  args={{
52
- videoType: VideoPlayerTypes.Vimeo,
53
- videoId: "",
54
- headingText: "NYPL Video",
76
+ aspectRatio: "VideoPlayerAspectRatios.SixteenByNine",
77
+ className: undefined,
55
78
  descriptionText:
56
79
  "Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.",
80
+ embedCode: `<iframe src="https://player.vimeo.com/video/421404144?h=5467db7edd" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>`,
81
+ headingText: "NYPL Video",
57
82
  helperText:
58
83
  "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.",
84
+ id: "videoPlayer-id",
85
+ iframeTitle: undefined,
86
+ showHelperInvalidText: true,
87
+ videoId: undefined,
88
+ videoType: undefined,
59
89
  }}
60
90
  >
61
91
  {(args) => (
62
92
  <VideoPlayer
63
93
  {...args}
64
- videoType={args.videoType}
65
- videoId={
66
- args.videoType === "vimeo"
67
- ? args.videoId || "474719268"
68
- : args.videoId || "nm-dD2tx6bk"
69
- }
70
- aspectRatio={args.aspectRatio}
94
+ aspectRatio={ratiosEnumValues.getValue(args.aspectRatio)}
95
+ embedCode={args.embedCode}
96
+ videoType={args.videoType && typesEnumValues.getValue(args.videoType)}
71
97
  />
72
98
  )}
73
99
  </Story>
@@ -94,6 +120,37 @@ https://www.youtube.com/watch?v=[VIDEO_ID]
94
120
  https://www.youtube.com/watch?v=nm-dD2tx6bk
95
121
  ```
96
122
 
123
+ ## Example Embed Code Snippets
124
+
125
+ The examples below are shown with precise HTML formatting. However, often the embed code snippets provided by 3rd party video services are delivered as one long string.
126
+
127
+ ### Vimeo
128
+
129
+ ```html
130
+ <iframe
131
+ src="https://player.vimeo.com/video/421404144?h=5467db7edd"
132
+ width="640"
133
+ height="360"
134
+ frameborder="0"
135
+ allow="autoplay; fullscreen; picture-in-picture"
136
+ allowfullscreen
137
+ ></iframe>
138
+ ```
139
+
140
+ ### YouTube
141
+
142
+ ```html
143
+ <iframe
144
+ width="560"
145
+ height="315"
146
+ src="https://www.youtube.com/embed/nm-dD2tx6bk"
147
+ title="YouTube video player"
148
+ frameborder="0"
149
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
150
+ allowfullscreen
151
+ ></iframe>
152
+ ```
153
+
97
154
  ## Errored
98
155
 
99
156
  If the necessary props are not passed to the `VideoPlayer` component, the component UI will display an error message.
@@ -101,8 +158,22 @@ If the necessary props are not passed to the `VideoPlayer` component, the compon
101
158
  <Canvas>
102
159
  <DSProvider>
103
160
  <VideoPlayer
104
- type={VideoPlayerTypes.Vimeo}
105
161
  videoId="https://vimeo.com/474719268"
162
+ videoType={VideoPlayerTypes.Vimeo}
163
+ />
164
+ </DSProvider>
165
+ </Canvas>
166
+
167
+ ## HTML in Helper Text
168
+
169
+ It's possible to include HTML in the `helperText` prop.
170
+
171
+ <Canvas>
172
+ <DSProvider>
173
+ <VideoPlayer
174
+ helperText="This helper text <b>contains HTML</b>."
175
+ videoId="474719268"
176
+ videoType={VideoPlayerTypes.Vimeo}
106
177
  />
107
178
  </DSProvider>
108
179
  </Canvas>
@@ -63,6 +63,46 @@ describe("VideoPlayer", () => {
63
63
  });
64
64
  });
65
65
 
66
+ describe("using embedCode prop", () => {
67
+ const embedCode = `<iframe src="https://player.vimeo.com/video/421404144?h=5467db7edd" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>`;
68
+ const embedCodeWithTitle = `<iframe title="Pre-Existing iFrame Title" src="https://player.vimeo.com/video/421404144?h=5467db7edd" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>`;
69
+
70
+ it("Renders custom embed code", () => {
71
+ render(<VideoPlayer embedCode={embedCode} />);
72
+ expect(screen.getByTitle("Video player")).toBeInTheDocument();
73
+ expect(screen.getByTitle("Video player")).toHaveAttribute(
74
+ "src",
75
+ `https://player.vimeo.com/video/421404144?h=5467db7edd`
76
+ );
77
+ });
78
+
79
+ it("Renders custom embed code with custom iframe title", () => {
80
+ render(
81
+ <VideoPlayer embedCode={embedCode} iframeTitle="Custom iFrame Title" />
82
+ );
83
+ expect(screen.getByTitle("Custom iFrame Title")).toBeInTheDocument();
84
+ });
85
+
86
+ it("Renders custom embed code with pre-existing title", () => {
87
+ render(<VideoPlayer embedCode={embedCodeWithTitle} />);
88
+ expect(
89
+ screen.getByTitle("Pre-Existing iFrame Title")
90
+ ).toBeInTheDocument();
91
+ });
92
+
93
+ it("Renders custom embed code with pre-existing title and ignores `iframeTitle` prop", () => {
94
+ render(
95
+ <VideoPlayer
96
+ embedCode={embedCodeWithTitle}
97
+ iframeTitle="Custom iFrame Title"
98
+ />
99
+ );
100
+ expect(
101
+ screen.getByTitle("Pre-Existing iFrame Title")
102
+ ).toBeInTheDocument();
103
+ });
104
+ });
105
+
66
106
  describe("text elements", () => {
67
107
  beforeEach(() => {
68
108
  utils = render(
@@ -121,7 +161,7 @@ describe("VideoPlayer", () => {
121
161
  });
122
162
 
123
163
  describe("prop validation", () => {
124
- it("Throws error if videoId not formatted properly", () => {
164
+ it("Throws error if the videoId prop not is formatted properly", () => {
125
165
  render(
126
166
  <VideoPlayer
127
167
  videoType={VideoPlayerTypes.Vimeo}
@@ -135,6 +175,56 @@ describe("VideoPlayer", () => {
135
175
  )
136
176
  ).toBeInTheDocument();
137
177
  });
178
+
179
+ it("Throws appropriate error if VideoPlayer props are not configured properly", () => {
180
+ const warn = jest.spyOn(console, "warn");
181
+
182
+ render(<VideoPlayer />);
183
+ expect(warn).toHaveBeenCalledWith(
184
+ "VideoPlayer requires either the `embedCode` prop or both the `videoType` and `videoId` props."
185
+ );
186
+
187
+ render(<VideoPlayer videoId="http://vimeo.com/474719268" />);
188
+ expect(warn).toHaveBeenCalledWith(
189
+ "VideoPlayer also requires the `videoType` prop. You have only set the `videoId` prop."
190
+ );
191
+
192
+ render(<VideoPlayer videoType={VideoPlayerTypes.Vimeo} />);
193
+ expect(warn).toHaveBeenCalledWith(
194
+ "VideoPlayer also requires the `videoId` prop. You have only set the `videoType` prop."
195
+ );
196
+
197
+ render(
198
+ <VideoPlayer
199
+ embedCode="<iframe src='https://player.vimeo.com/video/421404144?h=5467db7edd' width='640' height='360' frameborder='0' allow='autoplay; fullscreen; picture-in-picture' allowfullscreen></iframe>"
200
+ videoType={VideoPlayerTypes.Vimeo}
201
+ videoId="http://vimeo.com/474719268"
202
+ />
203
+ );
204
+ expect(warn).toHaveBeenCalledWith(
205
+ "VideoPlayer can accept the `embedCode` prop or the `videoType` and `videoId` props. You have set both."
206
+ );
207
+
208
+ render(
209
+ <VideoPlayer
210
+ embedCode="<iframe src='https://player.vimeo.com/video/421404144?h=5467db7edd' width='640' height='360' frameborder='0' allow='autoplay; fullscreen; picture-in-picture' allowfullscreen></iframe>"
211
+ videoType={VideoPlayerTypes.Vimeo}
212
+ />
213
+ );
214
+ expect(warn).toHaveBeenCalledWith(
215
+ "VideoPlayer can accept the `embedCode` prop or the `videoType` and `videoId` props. You have set both."
216
+ );
217
+
218
+ render(
219
+ <VideoPlayer
220
+ embedCode="<iframe src='https://player.vimeo.com/video/421404144?h=5467db7edd' width='640' height='360' frameborder='0' allow='autoplay; fullscreen; picture-in-picture' allowfullscreen></iframe>"
221
+ videoId="http://vimeo.com/474719268"
222
+ />
223
+ );
224
+ expect(warn).toHaveBeenCalledWith(
225
+ "VideoPlayer can accept the `embedCode` prop or the `videoType` and `videoId` props. You have set both."
226
+ );
227
+ });
138
228
  });
139
229
 
140
230
  it("renders the UI snapshot correctly", () => {
@@ -159,6 +249,17 @@ describe("VideoPlayer", () => {
159
249
  />
160
250
  )
161
251
  .toJSON();
252
+ const videoPlayerUsingEmbedCode = renderer
253
+ .create(
254
+ <VideoPlayer
255
+ descriptionText="VideoPlayer description"
256
+ embedCode="<iframe src='https://player.vimeo.com/video/421404144?h=5467db7edd' width='640' height='360' frameborder='0' allow='autoplay; fullscreen; picture-in-picture' allowfullscreen></iframe>"
257
+ headingText="VideoPlayer Heading"
258
+ id="video-player-with-text"
259
+ helperText="VideoPlayer helper test."
260
+ />
261
+ )
262
+ .toJSON();
162
263
  const videoPlayerError = renderer
163
264
  .create(
164
265
  <VideoPlayer
@@ -171,6 +272,7 @@ describe("VideoPlayer", () => {
171
272
 
172
273
  expect(videoPlayerWithoutText).toMatchSnapshot();
173
274
  expect(videoPlayerWithText).toMatchSnapshot();
275
+ expect(videoPlayerUsingEmbedCode).toMatchSnapshot();
174
276
  expect(videoPlayerError).toMatchSnapshot();
175
277
  });
176
278
  });