@nypl/design-system-react-components 0.25.0 → 0.25.4

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 (392) hide show
  1. package/CHANGELOG.md +142 -1
  2. package/README.md +98 -50
  3. package/dist/components/Accordion/Accordion.d.ts +14 -14
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +15 -14
  5. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  6. package/dist/components/Button/Button.d.ts +13 -8
  7. package/dist/components/Button/ButtonTypes.d.ts +3 -1
  8. package/dist/components/Card/Card.d.ts +36 -52
  9. package/dist/components/Card/CardTypes.d.ts +2 -17
  10. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  11. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +45 -0
  12. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  13. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  14. package/dist/components/DatePicker/DatePicker.d.ts +37 -35
  15. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  16. package/dist/components/Form/Form.d.ts +13 -8
  17. package/dist/components/Form/FormTypes.d.ts +2 -8
  18. package/dist/components/Grid/GridTypes.d.ts +9 -0
  19. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  20. package/dist/components/Heading/Heading.d.ts +4 -4
  21. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  22. package/dist/components/Hero/Hero.d.ts +19 -14
  23. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  24. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  25. package/dist/components/Icons/Icon.d.ts +19 -14
  26. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  27. package/dist/components/Icons/IconTypes.d.ts +89 -64
  28. package/dist/components/Image/Image.d.ts +19 -9
  29. package/dist/components/Image/ImageTypes.d.ts +20 -0
  30. package/dist/components/Label/Label.d.ts +5 -17
  31. package/dist/components/Link/Link.d.ts +12 -12
  32. package/dist/components/List/List.d.ts +19 -14
  33. package/dist/components/Notification/Notification.d.ts +37 -16
  34. package/dist/components/Pagination/Pagination.d.ts +16 -13
  35. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  36. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  37. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  38. package/dist/components/Radio/Radio.d.ts +2 -0
  39. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  40. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  41. package/dist/components/Select/Select.d.ts +34 -35
  42. package/dist/components/Select/SelectTypes.d.ts +4 -0
  43. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  44. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  45. package/dist/components/Slider/Slider.d.ts +57 -0
  46. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  47. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  48. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  49. package/dist/components/Tabs/Tabs.d.ts +1 -1
  50. package/dist/components/Template/Template.d.ts +91 -0
  51. package/dist/components/Text/Text.d.ts +16 -0
  52. package/dist/components/Text/TextTypes.d.ts +6 -0
  53. package/dist/components/TextInput/TextInput.d.ts +44 -31
  54. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  55. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  56. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  57. package/dist/design-system-react-components.cjs.development.js +6473 -2630
  58. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  59. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  60. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  61. package/dist/design-system-react-components.esm.js +6463 -2631
  62. package/dist/design-system-react-components.esm.js.map +1 -1
  63. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  64. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  65. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  66. package/dist/hooks/useWindowSize.d.ts +10 -0
  67. package/dist/index.d.ts +19 -7
  68. package/dist/resources.scss +180 -170
  69. package/dist/styles.css +1 -1
  70. package/dist/theme/components/accordion.d.ts +25 -0
  71. package/dist/theme/components/breadcrumb.d.ts +90 -0
  72. package/dist/theme/components/button.d.ts +39 -15
  73. package/dist/theme/components/card.d.ts +168 -0
  74. package/dist/theme/components/checkbox.d.ts +12 -8
  75. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  76. package/dist/theme/components/componentWrapper.d.ts +11 -0
  77. package/dist/theme/components/datePicker.d.ts +16 -0
  78. package/dist/theme/components/fieldset.d.ts +27 -0
  79. package/dist/theme/components/global.d.ts +65 -0
  80. package/dist/theme/components/globalMixins.d.ts +23 -0
  81. package/dist/theme/components/heading.d.ts +55 -20
  82. package/dist/theme/components/helperErrorText.d.ts +10 -0
  83. package/dist/theme/components/hero.d.ts +493 -0
  84. package/dist/theme/components/horizontalRule.d.ts +14 -0
  85. package/dist/theme/components/icon.d.ts +13 -0
  86. package/dist/theme/components/image.d.ts +31 -0
  87. package/dist/theme/components/label.d.ts +18 -0
  88. package/dist/theme/components/link.d.ts +49 -0
  89. package/dist/theme/components/list.d.ts +89 -0
  90. package/dist/theme/components/notification.d.ts +75 -0
  91. package/dist/theme/components/pagination.d.ts +19 -0
  92. package/dist/theme/components/progressIndicator.d.ts +50 -0
  93. package/dist/theme/components/radio.d.ts +8 -7
  94. package/dist/theme/components/radioGroup.d.ts +12 -0
  95. package/dist/theme/components/searchBar.d.ts +20 -0
  96. package/dist/theme/components/select.d.ts +67 -0
  97. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  98. package/dist/theme/components/slider.d.ts +51 -0
  99. package/dist/theme/components/statusBadge.d.ts +25 -0
  100. package/dist/theme/components/tabs.d.ts +63 -12
  101. package/dist/theme/components/template.d.ts +105 -0
  102. package/dist/theme/components/text.d.ts +20 -0
  103. package/dist/theme/components/textInput.d.ts +112 -0
  104. package/dist/theme/components/videoPlayer.d.ts +40 -0
  105. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  106. package/dist/theme/foundations/global.d.ts +8 -0
  107. package/dist/theme/foundations/radii.d.ts +5 -0
  108. package/dist/theme/foundations/shadows.d.ts +4 -0
  109. package/dist/theme/foundations/spacing.d.ts +16 -16
  110. package/dist/utils/utils.d.ts +6 -0
  111. package/package.json +72 -82
  112. package/src/__tests__/setup.ts +2 -2
  113. package/src/components/Accordion/Accordion.stories.mdx +223 -34
  114. package/src/components/Accordion/Accordion.test.tsx +135 -19
  115. package/src/components/Accordion/Accordion.tsx +81 -56
  116. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -4
  117. package/src/components/Autosuggest/Autosuggest.stories.tsx +3 -2
  118. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  119. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +48 -50
  120. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +54 -25
  121. package/src/components/Breadcrumbs/Breadcrumbs.tsx +75 -73
  122. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  123. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +298 -0
  124. package/src/components/Button/Button.stories.mdx +45 -36
  125. package/src/components/Button/Button.test.tsx +37 -11
  126. package/src/components/Button/Button.tsx +22 -34
  127. package/src/components/Button/ButtonTypes.tsx +2 -0
  128. package/src/components/Button/__snapshots__/Button.test.tsx.snap +50 -8
  129. package/src/components/Card/Card.stories.mdx +314 -273
  130. package/src/components/Card/Card.test.tsx +157 -91
  131. package/src/components/Card/Card.tsx +195 -145
  132. package/src/components/Card/CardTypes.tsx +2 -19
  133. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  134. package/src/components/CardEdition/CardEdition.stories.tsx +26 -53
  135. package/src/components/CardEdition/CardEdition.test.tsx +23 -31
  136. package/src/components/CardEdition/_CardEdition.scss +22 -23
  137. package/src/components/Chakra/Box.stories.mdx +15 -16
  138. package/src/components/Chakra/Center.stories.mdx +56 -24
  139. package/src/components/Chakra/Grid.stories.mdx +92 -0
  140. package/src/components/Chakra/Stack.stories.mdx +38 -21
  141. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  142. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  143. package/src/components/Checkbox/Checkbox.tsx +44 -41
  144. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +92 -7
  145. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +329 -0
  146. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +372 -0
  147. package/src/components/CheckboxGroup/CheckboxGroup.tsx +152 -0
  148. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  149. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1326 -0
  150. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  151. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  152. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  153. package/src/components/DatePicker/DatePicker.tsx +165 -134
  154. package/src/components/DatePicker/_DatePicker.scss +33 -66
  155. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  156. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  157. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  158. package/src/components/Fieldset/Fieldset.tsx +52 -0
  159. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  160. package/src/components/Form/Form.stories.mdx +70 -27
  161. package/src/components/Form/Form.test.tsx +58 -45
  162. package/src/components/Form/Form.tsx +50 -21
  163. package/src/components/Form/FormTypes.tsx +3 -8
  164. package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
  165. package/src/components/Grid/GridTypes.tsx +9 -0
  166. package/src/components/Grid/SimpleGrid.stories.mdx +268 -0
  167. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  168. package/src/components/Grid/SimpleGrid.tsx +37 -0
  169. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  170. package/src/components/Heading/Heading.stories.mdx +3 -3
  171. package/src/components/Heading/Heading.tsx +12 -6
  172. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  173. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  174. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  175. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  176. package/src/components/Hero/Hero.stories.mdx +198 -121
  177. package/src/components/Hero/Hero.test.tsx +537 -107
  178. package/src/components/Hero/Hero.tsx +79 -92
  179. package/src/components/Hero/HeroTypes.tsx +18 -5
  180. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  181. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  182. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  183. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  184. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  185. package/src/components/Icons/Icon.stories.mdx +94 -77
  186. package/src/components/Icons/Icon.test.tsx +48 -22
  187. package/src/components/Icons/Icon.tsx +78 -61
  188. package/src/components/Icons/IconSvgs.tsx +22 -0
  189. package/src/components/Icons/IconTypes.tsx +91 -64
  190. package/src/components/Image/Image.stories.mdx +220 -0
  191. package/src/components/Image/Image.test.tsx +131 -29
  192. package/src/components/Image/Image.tsx +84 -56
  193. package/src/components/Image/ImageTypes.ts +22 -0
  194. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  195. package/src/components/Input/Input.stories.tsx +23 -67
  196. package/src/components/Input/Input.test.tsx +4 -4
  197. package/src/components/Input/_Input.scss +23 -14
  198. package/src/components/Label/Label.stories.mdx +28 -7
  199. package/src/components/Label/Label.test.tsx +43 -12
  200. package/src/components/Label/Label.tsx +21 -34
  201. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  202. package/src/components/Link/Link.stories.mdx +41 -41
  203. package/src/components/Link/Link.test.tsx +33 -44
  204. package/src/components/Link/Link.tsx +117 -100
  205. package/src/components/List/List.stories.mdx +124 -51
  206. package/src/components/List/List.test.tsx +142 -63
  207. package/src/components/List/List.tsx +89 -93
  208. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  209. package/src/components/Modal/Modal.stories.mdx +3 -3
  210. package/src/components/Modal/_Modal.scss +2 -2
  211. package/src/components/Notification/Notification.stories.mdx +119 -111
  212. package/src/components/Notification/Notification.test.tsx +102 -126
  213. package/src/components/Notification/Notification.tsx +157 -161
  214. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  215. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  216. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  217. package/src/components/Pagination/Pagination.test.tsx +276 -140
  218. package/src/components/Pagination/Pagination.tsx +174 -154
  219. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  220. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  221. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  222. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  223. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  224. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  225. package/src/components/Radio/Radio.test.tsx +20 -4
  226. package/src/components/Radio/Radio.tsx +6 -3
  227. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  228. package/src/components/RadioGroup/RadioGroup.stories.mdx +4 -5
  229. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  230. package/src/components/RadioGroup/RadioGroup.tsx +21 -29
  231. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  232. package/src/components/SearchBar/SearchBar.Test.tsx +170 -16
  233. package/src/components/SearchBar/SearchBar.stories.mdx +294 -219
  234. package/src/components/SearchBar/SearchBar.tsx +161 -46
  235. package/src/components/Select/Select.stories.mdx +188 -170
  236. package/src/components/Select/Select.test.tsx +132 -375
  237. package/src/components/Select/Select.tsx +121 -165
  238. package/src/components/Select/SelectTypes.tsx +5 -0
  239. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +33 -76
  240. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  241. package/src/components/SkeletonLoader/SkeletonLoader.tsx +75 -70
  242. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  243. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  244. package/src/components/Slider/Slider.stories.mdx +529 -0
  245. package/src/components/Slider/Slider.test.tsx +653 -0
  246. package/src/components/Slider/Slider.tsx +303 -0
  247. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  248. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  249. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  250. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  251. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  252. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  253. package/src/components/StyleGuide/Bidirectionality.stories.mdx +17 -17
  254. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  255. package/src/components/StyleGuide/Buttons.stories.mdx +102 -86
  256. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  257. package/src/components/StyleGuide/Colors.stories.mdx +196 -0
  258. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  259. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  260. package/src/components/StyleGuide/Iconography.stories.mdx +119 -127
  261. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  262. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  263. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  264. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  265. package/src/components/Tabs/Tabs.tsx +88 -67
  266. package/src/components/Template/Template.stories.mdx +572 -0
  267. package/src/components/Template/Template.test.tsx +124 -0
  268. package/src/components/Template/Template.tsx +226 -0
  269. package/src/components/Text/Text.stories.mdx +70 -0
  270. package/src/components/Text/Text.test.tsx +63 -0
  271. package/src/components/Text/Text.tsx +55 -0
  272. package/src/components/Text/TextTypes.tsx +6 -0
  273. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  274. package/src/components/TextInput/TextInput.stories.mdx +89 -90
  275. package/src/components/TextInput/TextInput.test.tsx +84 -85
  276. package/src/components/TextInput/TextInput.tsx +121 -95
  277. package/src/components/TextInput/TextInputTypes.tsx +8 -0
  278. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  279. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  280. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  281. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  282. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  283. package/src/docs/Chakra.stories.mdx +246 -65
  284. package/src/docs/Intro.stories.mdx +18 -13
  285. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  286. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  287. package/src/hooks/useCarouselStyles.ts +34 -0
  288. package/src/hooks/useNYPLTheme.ts +67 -0
  289. package/src/hooks/useWindowSize.ts +40 -0
  290. package/src/index.ts +39 -16
  291. package/src/resources.scss +5 -5
  292. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  293. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  294. package/src/styles/base/_03-base.scss +25 -0
  295. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  296. package/src/styles/base/_place-holder.scss +14 -3
  297. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  298. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  299. package/src/styles/space/_space-stack.scss +116 -0
  300. package/src/styles.scss +13 -62
  301. package/src/theme/components/accordion.ts +30 -0
  302. package/src/theme/components/breadcrumb.ts +77 -0
  303. package/src/theme/components/button.ts +91 -71
  304. package/src/theme/components/card.ts +174 -0
  305. package/src/theme/components/checkbox.ts +22 -29
  306. package/src/theme/components/checkboxGroup.ts +8 -0
  307. package/src/theme/components/componentWrapper.ts +10 -0
  308. package/src/theme/components/datePicker.ts +17 -0
  309. package/src/theme/components/fieldset.ts +18 -0
  310. package/src/theme/components/global.ts +82 -0
  311. package/src/theme/components/globalMixins.ts +24 -0
  312. package/src/theme/components/heading.ts +25 -13
  313. package/src/theme/components/helperErrorText.ts +9 -0
  314. package/src/theme/components/hero.ts +240 -0
  315. package/src/theme/components/horizontalRule.ts +13 -0
  316. package/src/theme/components/icon.ts +79 -0
  317. package/src/theme/components/image.ts +116 -0
  318. package/src/theme/components/label.ts +10 -0
  319. package/src/theme/components/link.ts +51 -0
  320. package/src/theme/components/list.ts +73 -0
  321. package/src/theme/components/notification.ts +93 -0
  322. package/src/theme/components/pagination.ts +20 -0
  323. package/src/theme/components/progressIndicator.ts +62 -0
  324. package/src/theme/components/radio.ts +22 -33
  325. package/src/theme/components/radioGroup.ts +8 -0
  326. package/src/theme/components/searchBar.ts +21 -0
  327. package/src/theme/components/select.ts +53 -0
  328. package/src/theme/components/skeletonLoader.ts +107 -0
  329. package/src/theme/components/slider.ts +79 -0
  330. package/src/theme/components/statusBadge.ts +26 -0
  331. package/src/theme/components/tabs.ts +102 -69
  332. package/src/theme/components/template.ts +114 -0
  333. package/src/theme/components/text.ts +31 -0
  334. package/src/theme/components/textInput.ts +62 -0
  335. package/src/theme/components/videoPlayer.ts +49 -0
  336. package/src/theme/foundations/breakpoints.ts +8 -8
  337. package/src/theme/foundations/colors.ts +29 -13
  338. package/src/theme/foundations/global.ts +8 -0
  339. package/src/theme/foundations/radii.ts +6 -0
  340. package/src/theme/foundations/shadows.ts +5 -0
  341. package/src/theme/foundations/spacing.ts +24 -24
  342. package/src/theme/index.ts +74 -13
  343. package/src/utils/componentCategories.ts +12 -5
  344. package/src/utils/utils.ts +13 -0
  345. package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
  346. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  347. package/dist/components/Image/Image.stories.d.ts +0 -18
  348. package/dist/components/List/List.stories.d.ts +0 -7
  349. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  350. package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
  351. package/dist/components/Template/Template.stories.d.ts +0 -30
  352. package/dist/theme/components/customRadioGroup.d.ts +0 -17
  353. package/src/components/Accordion/Accordion.stories.tsx +0 -66
  354. package/src/components/Accordion/_Accordion.scss +0 -81
  355. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  356. package/src/components/Button/_Button.scss +0 -56
  357. package/src/components/Card/_Card.scss +0 -308
  358. package/src/components/Form/_Form.scss +0 -67
  359. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  360. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  361. package/src/components/Hero/_Hero.scss +0 -256
  362. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  363. package/src/components/Icons/_Icons.scss +0 -116
  364. package/src/components/Image/Image.stories.tsx +0 -54
  365. package/src/components/Image/_Image.scss +0 -38
  366. package/src/components/Label/_Label.scss +0 -22
  367. package/src/components/Link/_Link.scss +0 -73
  368. package/src/components/List/List.stories.tsx +0 -139
  369. package/src/components/List/_List.scss +0 -76
  370. package/src/components/Notification/_Notification.scss +0 -110
  371. package/src/components/Pagination/_Pagination.scss +0 -40
  372. package/src/components/SearchBar/_SearchBar.scss +0 -16
  373. package/src/components/Select/_Select.scss +0 -82
  374. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  375. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
  376. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  377. package/src/components/StyleGuide/Colors.stories.tsx +0 -289
  378. package/src/components/Template/Template.stories.tsx +0 -86
  379. package/src/components/Template/_Template.scss +0 -63
  380. package/src/components/TextInput/_TextInput.scss +0 -59
  381. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  382. package/src/styles/01-colors/_colors-brand.scss +0 -56
  383. package/src/styles/01-colors/_colors-utility.scss +0 -65
  384. package/src/styles/02-typography/_type-scale.css +0 -11
  385. package/src/styles/02-typography/_type-weight.css +0 -7
  386. package/src/styles/02-typography/_typefaces.css +0 -4
  387. package/src/styles/03-space/_space-stack.scss +0 -116
  388. package/src/styles/03-space/_space.css +0 -30
  389. package/src/styles/base/_04-base.scss +0 -19
  390. package/src/styles/base/_card-grid.scss +0 -78
  391. package/src/styles/base/_typography.scss +0 -11
  392. package/src/theme/components/customRadioGroup.ts +0 -18
@@ -1,106 +1,127 @@
1
1
  import * as React from "react";
2
- import bem from "../../utils/bem";
3
- import { TextInputTypes, TextInputFormats } from "./TextInputTypes";
2
+ import {
3
+ Box,
4
+ Input as ChakraInput,
5
+ Textarea as ChakraTextarea,
6
+ useMultiStyleConfig,
7
+ } from "@chakra-ui/react";
8
+
9
+ import {
10
+ TextInputTypes,
11
+ TextInputFormats,
12
+ TextInputVariants,
13
+ } from "./TextInputTypes";
4
14
  import Label from "../Label/Label";
5
15
  import HelperErrorText from "../HelperErrorText/HelperErrorText";
6
16
  import generateUUID from "../../helpers/generateUUID";
7
17
 
8
18
  export interface InputProps {
9
- /** Additional attributes to pass to the `<input>` tag */
19
+ /** Optionally pass in additional Chakra-based styles. */
20
+ additionalStyles?: { [key: string]: any };
21
+ /** Additional attributes to pass to the `<input>` or `<textarea>` element */
10
22
  attributes?: { [key: string]: any };
11
- /** HTML Input types as defined by MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input */
12
- type?: TextInputTypes;
13
- /** Will add 'aria-required: true' to input */
14
- required?: boolean;
23
+ /** A class name for the TextInput parent div. */
24
+ className?: string;
25
+ /** The starting value of the input field. */
26
+ defaultValue?: string;
27
+ /** Populates the HelperErrorText for the standard state */
28
+ helperText?: string;
29
+ /** ID that other components can cross reference for accessibility purposes */
30
+ id?: string;
31
+ /** Populates the HelperErrorText for the error state */
32
+ invalidText?: string;
33
+ /** Adds the `disabled` and `aria-disabled` prop to the input when true */
34
+ isDisabled?: boolean;
35
+ /** Adds errored styling to the input/textarea and helper text elements */
36
+ isInvalid?: boolean;
37
+ /** Will add `required` and `aria-required` props to the input/textarea elements */
38
+ isRequired?: boolean;
15
39
  /** Provides text for a `Label` component if `showLabel` is set to true;
16
- * populates a `aria-label` sttribute if `showLabel` is set to false. */
40
+ * populates an `aria-label` attribute if `showLabel` is set to false. */
17
41
  labelText: string;
42
+ /** Used to reference the input element in forms. */
43
+ name?: string;
44
+ /** The action to perform on the `input`/`textarea`'s onChange function */
45
+ onChange?: (
46
+ event:
47
+ | React.ChangeEvent<HTMLInputElement>
48
+ | React.ChangeEvent<HTMLTextAreaElement>
49
+ ) => void;
50
+ /** Populates the placeholder for the input/textarea elements */
51
+ placeholder?: string;
52
+ /** Offers the ability to hide the helper/invalid text. */
53
+ showHelperInvalidText?: boolean;
18
54
  /** Offers the ability to show the label onscreen or hide it. Refer to the
19
55
  * `labelText` property for more information. */
20
56
  showLabel?: boolean;
21
57
  /** Offers the ability to show the "Required"/"Optional" label onscreen or
22
58
  * hide it. True by default. */
23
59
  showOptReqLabel?: boolean;
24
- /** Populates the HelperErrorText for standard state */
25
- helperText?: string;
26
- /** Populates the HelperErrorText for error state */
27
- invalidText?: string;
28
- /** Populates the placeholder of the input */
29
- placeholder?: string;
30
- /** Populates the value of the input */
60
+ /** The amount to increase or decrease when using the number type. */
61
+ step?: number;
62
+ /** HTML Input types as defined by MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input */
63
+ type?: TextInputTypes;
64
+ /** Populates the value of the input/textarea elements */
31
65
  value?: string;
32
- /** className you can add in addition to 'textinput' */
33
- className?: string;
34
- /** ID that other components can cross reference for accessibility purposes */
35
- id?: string;
36
- /** Helper for modifiers array; adds 'errored' styling */
37
- errored?: boolean;
38
- /** Adds the 'disabled' prop to the input when true */
39
- disabled?: boolean;
40
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM
41
- * here: http://getbem.com/introduction/ */
42
- modifiers?: string[];
43
- /** The action to perform on the `<input>`'s onChange function */
44
- onChange?: (
45
- event:
46
- | React.ChangeEvent<HTMLInputElement>
47
- | React.ChangeEvent<HTMLTextAreaElement>
48
- ) => void;
66
+ /** The variant to display. */
67
+ variantType?: TextInputVariants;
49
68
  }
50
69
 
51
- /** The type used for `ref`s. We want to extend both `input` and `textarea`
70
+ /**
71
+ * The type used for `ref`s. We want to extend both `input` and `textarea`
52
72
  * since both are available to create through `TextInput`.
53
73
  */
54
74
  export type TextInputRefType = HTMLInputElement & HTMLTextAreaElement;
55
75
 
56
- /** Renders either an `input` element with a specified type or a `textarea`
57
- * element. All types will render an accessible Label component and an optional
58
- * HelperErrorText component.
76
+ /**
77
+ * Renders either an `input` element with a specified type or a `textarea`
78
+ * element. All types will render an accessible `Label` component and an
79
+ * optional `HelperErrorText` component.
59
80
  */
60
81
  const TextInput = React.forwardRef<TextInputRefType, InputProps>(
61
82
  (props, ref: React.Ref<TextInputRefType>) => {
62
83
  const {
84
+ additionalStyles = {},
63
85
  attributes = {},
64
- type = TextInputTypes.text,
65
- required,
66
- labelText,
67
- showLabel = true,
68
- showOptReqLabel = true,
86
+ className,
87
+ defaultValue,
69
88
  helperText,
89
+ id = generateUUID(),
70
90
  invalidText,
91
+ isDisabled = false,
92
+ isInvalid = false,
93
+ isRequired = false,
94
+ labelText,
95
+ name,
96
+ onChange,
71
97
  placeholder,
98
+ showHelperInvalidText = true,
99
+ showLabel = true,
100
+ showOptReqLabel = true,
101
+ step = 1,
102
+ type = TextInputTypes.text,
72
103
  value,
73
- className,
74
- disabled,
75
- errored,
76
- onChange,
77
- modifiers = [],
78
- id = generateUUID(),
104
+ variantType = TextInputVariants.Default,
79
105
  } = props;
80
-
106
+ const styles = useMultiStyleConfig("TextInput", { variant: variantType });
107
+ const finalStyles = { ...styles, ...additionalStyles };
81
108
  const isTextArea = type === TextInputTypes.textarea;
82
109
  const isHidden = type === TextInputTypes.hidden;
83
- const optReqFlag = required ? "Required" : "Optional";
84
- const errorOutput = invalidText
110
+ const optReqFlag = isRequired ? "Required" : "Optional";
111
+ const finalInvalidText = invalidText
85
112
  ? invalidText
86
113
  : "There is an error related to this field.";
87
- let footnote;
114
+ let footnote: string | React.ReactNode = isInvalid
115
+ ? finalInvalidText
116
+ : helperText;
117
+ let fieldOutput;
88
118
  let options;
89
119
 
90
- if (!showLabel) attributes["aria-label"] = labelText;
91
- if (helperText) attributes["aria-describedby"] = helperText;
92
-
93
- if (errored) {
94
- modifiers.push("error");
95
- }
96
- if (isTextArea) {
97
- modifiers.push("textarea");
98
- }
99
-
100
- if (errored) {
101
- footnote = errorOutput;
102
- } else {
103
- footnote = helperText;
120
+ if (!showLabel) {
121
+ attributes["aria-label"] =
122
+ labelText && footnote ? `${labelText} - ${footnote}` : labelText;
123
+ } else if (helperText) {
124
+ attributes["aria-describedby"] = `${id}-helperText`;
104
125
  }
105
126
 
106
127
  if (
@@ -118,54 +139,59 @@ const TextInput = React.forwardRef<TextInputRefType, InputProps>(
118
139
  );
119
140
  }
120
141
 
121
- options = {
122
- id,
123
- className: bem("inputfield", modifiers, "", [className]),
124
- "aria-required": required,
125
- "aria-hidden": isHidden,
126
- disabled,
127
- required,
128
- placeholder,
129
- onChange,
130
- ref,
131
- ...attributes,
132
- };
142
+ // When the type is "hidden", the input element needs fewer attributes.
143
+ options = isHidden
144
+ ? { id, "aria-hidden": isHidden, name, onChange, ref }
145
+ : {
146
+ "aria-required": isRequired,
147
+ defaultValue,
148
+ id,
149
+ isDisabled,
150
+ isRequired,
151
+ isInvalid,
152
+ placeholder,
153
+ name,
154
+ onChange,
155
+ ref,
156
+ // The `step` attribute is useful for the number type.
157
+ step: type === TextInputTypes.number ? step : null,
158
+ ...attributes,
159
+ };
133
160
  // For `input` and `textarea`, all attributes are the same but `input`
134
161
  // also needs `type` and `value` to render correctly.
135
162
  if (!isTextArea) {
136
163
  options = { type, value, ...options } as any;
164
+ fieldOutput = <ChakraInput {...options} __css={finalStyles.input} />;
165
+ } else {
166
+ fieldOutput = (
167
+ <ChakraTextarea {...options} __css={finalStyles.textarea}>
168
+ {value}
169
+ </ChakraTextarea>
170
+ );
137
171
  }
138
172
 
139
- const fieldOutput = React.createElement(
140
- isTextArea ? "textarea" : "input",
141
- options,
142
- isTextArea ? value : null
143
- );
144
-
145
- const transformedInput = (
146
- <div className="textinput">
173
+ return (
174
+ <Box __css={finalStyles} className={className}>
147
175
  {labelText && showLabel && !isHidden && (
148
176
  <Label
149
177
  htmlFor={id}
150
178
  optReqFlag={showOptReqLabel && optReqFlag}
151
- id={id + `-label`}
179
+ id={`${id}-label`}
152
180
  >
153
181
  {labelText}
154
182
  </Label>
155
183
  )}
156
184
  {fieldOutput}
157
- {((helperText && !isHidden) || errored) && (
158
- <HelperErrorText isError={errored} id={id + `-helperText`}>
159
- {footnote}
160
- </HelperErrorText>
185
+ {footnote && showHelperInvalidText && !isHidden && (
186
+ <Box __css={finalStyles.helper} aria-disabled={isDisabled}>
187
+ <HelperErrorText isInvalid={isInvalid} id={`${id}-helperText`}>
188
+ {footnote}
189
+ </HelperErrorText>
190
+ </Box>
161
191
  )}
162
- </div>
192
+ </Box>
163
193
  );
164
-
165
- return transformedInput;
166
194
  }
167
195
  );
168
196
 
169
- TextInput.displayName = "TextInput";
170
-
171
197
  export default TextInput;
@@ -11,6 +11,7 @@ export enum TextInputTypes {
11
11
  url = "url",
12
12
  }
13
13
 
14
+ // Only used internally in `TextInput`.
14
15
  export enum TextInputFormats {
15
16
  email = "jdoe@domain.com",
16
17
  hidden = "",
@@ -23,6 +24,13 @@ export enum TextInputFormats {
23
24
  url = "https://domain.com",
24
25
  }
25
26
 
27
+ // Only used internally in `TextInput` and `SearchBar`.
28
+ export enum TextInputVariants {
29
+ Default = "default",
30
+ SearchBar = "searchBar",
31
+ SearchBarSelect = "searchBarSelect",
32
+ }
33
+
26
34
  /*
27
35
  export enum TextInputPatterns {
28
36
  // eslint-disable-next-line prettier/prettier
@@ -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
  }