@nypl/design-system-react-components 0.25.12 → 0.26.1

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 (337) hide show
  1. package/CHANGELOG.md +131 -1
  2. package/README.md +10 -10
  3. package/dist/components/Accordion/Accordion.d.ts +6 -4
  4. package/dist/components/Accordion/AccordionTypes.d.ts +5 -0
  5. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -4
  6. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -1
  7. package/dist/components/Button/Button.d.ts +2 -2
  8. package/dist/components/Card/Card.d.ts +22 -29
  9. package/dist/components/Checkbox/Checkbox.d.ts +3 -3
  10. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +9 -6
  11. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
  12. package/dist/components/DatePicker/DatePicker.d.ts +5 -6
  13. package/dist/components/Fieldset/Fieldset.d.ts +5 -6
  14. package/dist/components/Form/Form.d.ts +6 -6
  15. package/dist/components/Grid/GridTypes.d.ts +7 -7
  16. package/dist/components/Grid/SimpleGrid.d.ts +1 -1
  17. package/dist/components/Heading/Heading.d.ts +5 -5
  18. package/dist/components/Heading/HeadingTypes.d.ts +1 -1
  19. package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
  20. package/dist/components/Hero/Hero.d.ts +9 -5
  21. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
  22. package/dist/components/Icons/Icon.d.ts +2 -1
  23. package/dist/components/Icons/IconTypes.d.ts +1 -0
  24. package/dist/components/Image/Image.d.ts +27 -9
  25. package/dist/components/Image/ImageTypes.d.ts +4 -4
  26. package/dist/components/Label/Label.d.ts +7 -4
  27. package/dist/components/Link/Link.d.ts +1 -1
  28. package/dist/components/List/List.d.ts +11 -11
  29. package/dist/components/List/ListTypes.d.ts +1 -1
  30. package/dist/components/Logo/Logo.d.ts +2 -1
  31. package/dist/components/Logo/LogoSvgs.d.ts +2 -0
  32. package/dist/components/Logo/LogoTypes.d.ts +4 -2
  33. package/dist/components/Notification/Notification.d.ts +7 -7
  34. package/dist/components/Pagination/Pagination.d.ts +2 -2
  35. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
  36. package/dist/components/Radio/Radio.d.ts +5 -7
  37. package/dist/components/RadioGroup/RadioGroup.d.ts +16 -8
  38. package/dist/components/SearchBar/SearchBar.d.ts +4 -4
  39. package/dist/components/Select/Select.d.ts +12 -8
  40. package/dist/components/Select/SelectTypes.d.ts +4 -0
  41. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -6
  42. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +0 -4
  43. package/dist/components/Slider/Slider.d.ts +6 -4
  44. package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
  45. package/dist/components/StructuredContent/StructuredContent.d.ts +10 -23
  46. package/dist/components/Table/Table.d.ts +1 -1
  47. package/dist/components/Tabs/Tabs.d.ts +7 -6
  48. package/dist/components/Template/Template.d.ts +17 -8
  49. package/dist/components/Text/Text.d.ts +4 -4
  50. package/dist/components/Text/TextTypes.d.ts +1 -1
  51. package/dist/components/TextInput/TextInput.d.ts +7 -7
  52. package/dist/components/Toggle/Toggle.d.ts +8 -10
  53. package/dist/components/Toggle/{ToggleSizes.d.ts → ToggleTypes.d.ts} +1 -1
  54. package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
  55. package/dist/design-system-react-components.cjs.development.js +2075 -1468
  56. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  57. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  58. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  59. package/dist/design-system-react-components.esm.js +2086 -1483
  60. package/dist/design-system-react-components.esm.js.map +1 -1
  61. package/dist/helpers/enums.d.ts +4 -0
  62. package/dist/hooks/useCarouselStyles.d.ts +3 -2
  63. package/dist/hooks/useNYPLTheme.d.ts +12 -0
  64. package/dist/index.d.ts +11 -9
  65. package/dist/styles.css +1 -1
  66. package/dist/theme/components/accordion.d.ts +7 -12
  67. package/dist/theme/components/breadcrumb.d.ts +3 -0
  68. package/dist/theme/components/button.d.ts +10 -2
  69. package/dist/theme/components/card.d.ts +44 -24
  70. package/dist/theme/components/checkbox.d.ts +6 -4
  71. package/dist/theme/components/checkboxGroup.d.ts +4 -2
  72. package/dist/theme/components/componentWrapper.d.ts +2 -2
  73. package/dist/theme/components/customTable.d.ts +84 -1
  74. package/dist/theme/components/fieldset.d.ts +4 -14
  75. package/dist/theme/components/global.d.ts +25 -18
  76. package/dist/theme/components/heading.d.ts +53 -0
  77. package/dist/theme/components/helperErrorText.d.ts +1 -0
  78. package/dist/theme/components/hero.d.ts +21 -15
  79. package/dist/theme/components/image.d.ts +1 -1
  80. package/dist/theme/components/label.d.ts +9 -10
  81. package/dist/theme/components/list.d.ts +99 -9
  82. package/dist/theme/components/notification.d.ts +4 -4
  83. package/dist/theme/components/pagination.d.ts +2 -5
  84. package/dist/theme/components/radio.d.ts +7 -4
  85. package/dist/theme/components/radioGroup.d.ts +4 -2
  86. package/dist/theme/components/select.d.ts +37 -5
  87. package/dist/theme/components/skeletonLoader.d.ts +2 -2
  88. package/dist/theme/components/slider.d.ts +6 -3
  89. package/dist/theme/components/structuredContent.d.ts +197 -0
  90. package/dist/theme/components/textInput.d.ts +18 -6
  91. package/dist/theme/components/toggle.d.ts +20 -5
  92. package/dist/theme/foundations/global.d.ts +2 -0
  93. package/dist/theme/foundations/radii.d.ts +1 -0
  94. package/dist/theme/foundations/spacing.d.ts +46 -43
  95. package/package.json +5 -6
  96. package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +34 -0
  97. package/src/components/Accordion/Accordion.stories.mdx +150 -66
  98. package/src/components/Accordion/Accordion.test.tsx +65 -17
  99. package/src/components/Accordion/Accordion.tsx +61 -27
  100. package/src/components/Accordion/AccordionTypes.tsx +5 -0
  101. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +505 -14
  102. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  103. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +37 -19
  104. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +57 -36
  105. package/src/components/Breadcrumbs/Breadcrumbs.tsx +14 -13
  106. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -1
  107. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
  108. package/src/components/Button/Button.stories.mdx +87 -23
  109. package/src/components/Button/Button.test.tsx +25 -0
  110. package/src/components/Button/Button.tsx +18 -7
  111. package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
  112. package/src/components/Card/Card.stories.mdx +493 -329
  113. package/src/components/Card/Card.test.tsx +138 -18
  114. package/src/components/Card/Card.tsx +151 -85
  115. package/src/components/Card/__snapshots__/Card.test.tsx.snap +221 -101
  116. package/src/components/Chakra/Center.stories.mdx +2 -2
  117. package/src/components/Chakra/Grid.stories.mdx +4 -4
  118. package/src/components/Checkbox/Checkbox.stories.mdx +73 -9
  119. package/src/components/Checkbox/Checkbox.test.tsx +89 -10
  120. package/src/components/Checkbox/Checkbox.tsx +26 -16
  121. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +209 -6
  122. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +135 -23
  123. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +216 -90
  124. package/src/components/CheckboxGroup/CheckboxGroup.tsx +39 -26
  125. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +493 -89
  126. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
  127. package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
  128. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
  129. package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
  130. package/src/components/DatePicker/DatePicker.test.tsx +94 -15
  131. package/src/components/DatePicker/DatePicker.tsx +67 -58
  132. package/src/components/DatePicker/_DatePicker.scss +71 -13
  133. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
  134. package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
  135. package/src/components/Fieldset/Fieldset.test.tsx +58 -28
  136. package/src/components/Fieldset/Fieldset.tsx +35 -30
  137. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
  138. package/src/components/Form/Form.stories.mdx +118 -47
  139. package/src/components/Form/Form.test.tsx +59 -16
  140. package/src/components/Form/Form.tsx +89 -65
  141. package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
  142. package/src/components/Grid/GridTypes.tsx +7 -7
  143. package/src/components/Grid/SimpleGrid.stories.mdx +87 -41
  144. package/src/components/Grid/SimpleGrid.test.tsx +24 -9
  145. package/src/components/Grid/SimpleGrid.tsx +29 -20
  146. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
  147. package/src/components/Heading/Heading.stories.mdx +56 -25
  148. package/src/components/Heading/Heading.test.tsx +17 -7
  149. package/src/components/Heading/Heading.tsx +60 -58
  150. package/src/components/Heading/HeadingTypes.tsx +1 -1
  151. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +27 -8
  152. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
  153. package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
  154. package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
  155. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
  156. package/src/components/Hero/Hero.stories.mdx +143 -113
  157. package/src/components/Hero/Hero.test.tsx +146 -58
  158. package/src/components/Hero/Hero.tsx +144 -112
  159. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
  160. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
  161. package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -17
  162. package/src/components/HorizontalRule/HorizontalRule.tsx +9 -25
  163. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
  164. package/src/components/Icons/Icon.stories.mdx +80 -23
  165. package/src/components/Icons/Icon.test.tsx +51 -2
  166. package/src/components/Icons/Icon.tsx +93 -71
  167. package/src/components/Icons/IconTypes.tsx +1 -0
  168. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  169. package/src/components/Image/Image.stories.mdx +160 -71
  170. package/src/components/Image/Image.test.tsx +40 -48
  171. package/src/components/Image/Image.tsx +80 -48
  172. package/src/components/Image/ImageTypes.ts +4 -4
  173. package/src/components/Image/__snapshots__/Image.test.tsx.snap +84 -21
  174. package/src/components/Label/Label.stories.mdx +42 -20
  175. package/src/components/Label/Label.test.tsx +42 -17
  176. package/src/components/Label/Label.tsx +22 -13
  177. package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
  178. package/src/components/Link/Link.stories.mdx +25 -1
  179. package/src/components/Link/Link.test.tsx +21 -0
  180. package/src/components/Link/Link.tsx +16 -9
  181. package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
  182. package/src/components/List/List.stories.mdx +75 -40
  183. package/src/components/List/List.test.tsx +73 -22
  184. package/src/components/List/List.tsx +44 -28
  185. package/src/components/List/ListTypes.tsx +1 -1
  186. package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
  187. package/src/components/Logo/Logo.stories.mdx +40 -16
  188. package/src/components/Logo/Logo.test.tsx +29 -2
  189. package/src/components/Logo/Logo.tsx +28 -11
  190. package/src/components/Logo/LogoSvgs.tsx +4 -0
  191. package/src/components/Logo/LogoTypes.tsx +3 -1
  192. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
  193. package/src/components/Modal/Modal.stories.mdx +13 -0
  194. package/src/components/Notification/Notification.stories.mdx +29 -5
  195. package/src/components/Notification/Notification.test.tsx +23 -0
  196. package/src/components/Notification/Notification.tsx +53 -51
  197. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
  198. package/src/components/Pagination/Pagination.stories.mdx +27 -6
  199. package/src/components/Pagination/Pagination.test.tsx +55 -2
  200. package/src/components/Pagination/Pagination.tsx +12 -9
  201. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
  202. package/src/components/Placeholder/Placeholder.tsx +3 -1
  203. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
  204. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +87 -13
  205. package/src/components/ProgressIndicator/ProgressIndicator.tsx +20 -10
  206. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
  207. package/src/components/Radio/Radio.stories.mdx +75 -11
  208. package/src/components/Radio/Radio.test.tsx +83 -9
  209. package/src/components/Radio/Radio.tsx +70 -62
  210. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +163 -5
  211. package/src/components/RadioGroup/RadioGroup.stories.mdx +293 -94
  212. package/src/components/RadioGroup/RadioGroup.test.tsx +193 -68
  213. package/src/components/RadioGroup/RadioGroup.tsx +110 -101
  214. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1258 -902
  215. package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
  216. package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
  217. package/src/components/SearchBar/SearchBar.tsx +20 -11
  218. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
  219. package/src/components/Select/Select.stories.mdx +151 -62
  220. package/src/components/Select/Select.test.tsx +56 -44
  221. package/src/components/Select/Select.tsx +125 -104
  222. package/src/components/Select/SelectTypes.tsx +5 -0
  223. package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
  224. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +53 -23
  225. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +14 -8
  226. package/src/components/SkeletonLoader/SkeletonLoader.tsx +80 -78
  227. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
  228. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
  229. package/src/components/Slider/Slider.stories.mdx +123 -41
  230. package/src/components/Slider/Slider.test.tsx +65 -17
  231. package/src/components/Slider/Slider.tsx +30 -23
  232. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
  233. package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
  234. package/src/components/StatusBadge/StatusBadge.test.tsx +19 -1
  235. package/src/components/StatusBadge/StatusBadge.tsx +25 -20
  236. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
  237. package/src/components/StructuredContent/StructuredContent.stories.mdx +229 -61
  238. package/src/components/StructuredContent/StructuredContent.test.tsx +162 -101
  239. package/src/components/StructuredContent/StructuredContent.tsx +98 -103
  240. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
  241. package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
  242. package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
  243. package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
  244. package/src/components/StyleGuide/ColorCard.tsx +4 -4
  245. package/src/components/StyleGuide/Colors.stories.mdx +1 -2
  246. package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
  247. package/src/components/StyleGuide/Forms.stories.mdx +27 -12
  248. package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
  249. package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
  250. package/src/components/StyleGuide/Typography.stories.mdx +47 -33
  251. package/src/components/Table/Table.stories.mdx +38 -11
  252. package/src/components/Table/Table.test.tsx +16 -1
  253. package/src/components/Table/Table.tsx +10 -8
  254. package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
  255. package/src/components/Tabs/Tabs.stories.mdx +59 -10
  256. package/src/components/Tabs/Tabs.test.tsx +29 -11
  257. package/src/components/Tabs/Tabs.tsx +28 -21
  258. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
  259. package/src/components/Template/Template.stories.mdx +73 -32
  260. package/src/components/Template/Template.test.tsx +68 -5
  261. package/src/components/Template/Template.tsx +89 -71
  262. package/src/components/Template/__snapshots__/Template.test.tsx.snap +195 -22
  263. package/src/components/Text/Text.stories.mdx +32 -15
  264. package/src/components/Text/Text.test.tsx +14 -11
  265. package/src/components/Text/Text.tsx +13 -16
  266. package/src/components/Text/TextTypes.tsx +1 -1
  267. package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
  268. package/src/components/TextInput/TextInput.stories.mdx +73 -27
  269. package/src/components/TextInput/TextInput.test.tsx +65 -50
  270. package/src/components/TextInput/TextInput.tsx +123 -115
  271. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
  272. package/src/components/Toggle/Toggle.stories.mdx +74 -26
  273. package/src/components/Toggle/Toggle.test.tsx +41 -10
  274. package/src/components/Toggle/Toggle.tsx +29 -26
  275. package/src/components/Toggle/{ToggleSizes.tsx → ToggleTypes.tsx} +1 -1
  276. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +191 -4
  277. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
  278. package/src/components/VideoPlayer/VideoPlayer.test.tsx +41 -6
  279. package/src/components/VideoPlayer/VideoPlayer.tsx +134 -120
  280. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
  281. package/src/docs/Chakra.stories.mdx +50 -9
  282. package/src/docs/Welcome.stories.mdx +168 -0
  283. package/src/{components/Card/CardTypes.tsx → helpers/enums.ts} +2 -2
  284. package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
  285. package/src/hooks/useCarouselStyles.stories.mdx +30 -0
  286. package/src/hooks/useCarouselStyles.ts +3 -2
  287. package/src/hooks/useNYPLTheme.stories.mdx +101 -0
  288. package/src/hooks/useNYPLTheme.ts +31 -7
  289. package/src/hooks/useWindowSize.stories.mdx +23 -0
  290. package/src/index.ts +11 -15
  291. package/src/styles/base/_place-holder.scss +1 -1
  292. package/src/theme/components/accordion.ts +7 -12
  293. package/src/theme/components/breadcrumb.ts +3 -0
  294. package/src/theme/components/button.ts +15 -7
  295. package/src/theme/components/card.ts +56 -36
  296. package/src/theme/components/checkbox.ts +10 -8
  297. package/src/theme/components/checkboxGroup.ts +4 -2
  298. package/src/theme/components/componentWrapper.ts +2 -2
  299. package/src/theme/components/customTable.ts +39 -31
  300. package/src/theme/components/fieldset.ts +1 -2
  301. package/src/theme/components/global.ts +29 -23
  302. package/src/theme/components/heading.ts +1 -1
  303. package/src/theme/components/helperErrorText.ts +1 -0
  304. package/src/theme/components/hero.ts +14 -16
  305. package/src/theme/components/icon.ts +5 -2
  306. package/src/theme/components/image.ts +1 -1
  307. package/src/theme/components/label.ts +4 -3
  308. package/src/theme/components/list.ts +73 -66
  309. package/src/theme/components/notification.ts +7 -7
  310. package/src/theme/components/pagination.ts +2 -5
  311. package/src/theme/components/progressIndicator.ts +3 -3
  312. package/src/theme/components/radio.ts +9 -9
  313. package/src/theme/components/radioGroup.ts +4 -2
  314. package/src/theme/components/select.ts +35 -16
  315. package/src/theme/components/skeletonLoader.ts +3 -3
  316. package/src/theme/components/slider.ts +8 -7
  317. package/src/theme/components/statusBadge.ts +2 -2
  318. package/src/theme/components/structuredContent.ts +66 -1
  319. package/src/theme/components/tabs.ts +2 -2
  320. package/src/theme/components/template.ts +9 -9
  321. package/src/theme/components/textInput.ts +13 -12
  322. package/src/theme/components/toggle.ts +43 -13
  323. package/src/theme/components/videoPlayer.ts +1 -1
  324. package/src/theme/foundations/colors.ts +1 -1
  325. package/src/theme/foundations/radii.ts +1 -0
  326. package/src/theme/foundations/spacing.ts +70 -22
  327. package/src/theme/foundations/typography.ts +2 -2
  328. package/src/utils/componentCategories.ts +28 -21
  329. package/dist/components/Card/CardTypes.d.ts +0 -4
  330. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +0 -4
  331. package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +0 -4
  332. package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
  333. package/dist/helpers/generateUUID.d.ts +0 -1
  334. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +0 -4
  335. package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +0 -4
  336. package/src/docs/Intro.stories.mdx +0 -53
  337. package/src/helpers/generateUUID.tsx +0 -5
@@ -9,10 +9,11 @@ import ReactDOMServer from "react-dom/server";
9
9
  import { withDesign } from "storybook-addon-designs";
10
10
 
11
11
  import Accordion from "./Accordion";
12
+ import { AccordionTypes } from "./AccordionTypes";
12
13
  import Card, { CardHeading, CardContent } from "../Card/Card";
13
- import { CardLayouts } from "../Card/CardTypes";
14
14
  import { HeadingLevels } from "../Heading/HeadingTypes";
15
15
  import { ImageRatios } from "../Image/ImageTypes";
16
+ import { LayoutTypes } from "../../helpers/enums";
16
17
  import { getCategory } from "../../utils/componentCategories";
17
18
 
18
19
  <Meta
@@ -27,7 +28,7 @@ import { getCategory } from "../../utils/componentCategories";
27
28
  jest: ["Accordion.test.tsx"],
28
29
  }}
29
30
  argTypes={{
30
- contentData: { control: false },
31
+ accordionData: { control: false },
31
32
  id: { control: false },
32
33
  isDefaultOpen: { table: { defaultValue: { summary: false } } },
33
34
  }}
@@ -38,37 +39,85 @@ import { getCategory } from "../../utils/componentCategories";
38
39
  | Component Version | DS Version |
39
40
  | ----------------- | ---------- |
40
41
  | Added | `0.1.0` |
41
- | Latest | `0.25.10` |
42
+ | Latest | `0.26.0` |
43
+
44
+ ## Table of Contents
45
+
46
+ - [Overview](#overview)
47
+ - [Component Props](#component-props)
48
+ - [Accessibility](#accessibility)
49
+ - [FAQ Example](#faq-example)
50
+
51
+ ## Overview
42
52
 
43
53
  <Description of={Accordion} />
44
54
 
45
55
  The `Accordion` component displays a list of high-level options that can
46
- expand/collapse to reveal associated sections of content. This component pushes
47
- existing content on the page down. Each accordion item is self contained but
48
- when multiple are rendered together, they render in a "FAQ" style. When multiple
49
- accordions are rendered together, they can each open and close independent of
50
- each other.
56
+ expand and collapse to reveal associated sections of content. This component
57
+ pushes existing content on the page down. Each accordion item is self contained,
58
+ but when the data for multiple accordions is passed in through the `accordionData`
59
+ prop, the `Accordion` components are grouped together and rendered under a single
60
+ element. When grouped like this, each `Accordion` component still opens and
61
+ closes independent from the others in the group.
51
62
 
52
63
  The only way to render an `Accordion` component is to pass in an array of objects
53
- with `label` and `panel` properties for each accordion item. Note that you can
54
- pass in a string or DOM elements into the `panel` property in each object. This
55
- approach is needed because, internally, we deal with the logic to render the
56
- necessary icon, Chakra components, and styles.
64
+ with `label`, `panel`, and optional `accordionType` properties for each accordion item.
65
+ Note that you can pass in a string or DOM elements into the `panel` property in each
66
+ object. This approach is needed because, internally, we deal with the logic to render
67
+ the necessary icon, Chakra components, and styles. Additionally, the `accordionType`
68
+ prop can be used to change the accordion button's background color. It takes a value
69
+ from the AccordionTypes enum: AccordionTypes.Default is `ui.white`, AccordionTypes.Warning
70
+ is `ui.status.primary`, and AccordionTypes.Error is `ui.status.secondary`.
71
+
72
+ ```jsx
73
+ const accordionData = [
74
+ {
75
+ label: "Tom Nook",
76
+ panel: (
77
+ <Card
78
+ layout={CardLayouts.Row}
79
+ center
80
+ imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
81
+ imageAlt="Alt text"
82
+ imageAspectRatio={ImageRatios.TwoByOne}
83
+ >
84
+ <CardHeading level={HeadingLevels.Four} id="heading1">
85
+ Tom Nook
86
+ </CardHeading>
87
+ <CardContent>
88
+ Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
89
+ character in the Animal Crossing series who operates the
90
+ village store.
91
+ </CardContent>
92
+ </Card>
93
+ ),
94
+ },
95
+ ];
96
+
97
+ ...
98
+
99
+ <Accordion accordionData={accordionData} />
100
+ ```
101
+
102
+ ## Component Props
57
103
 
58
104
  <Canvas withToolbar>
59
105
  <Story
60
106
  name="Accordion with Controls"
61
107
  args={{
62
- contentData: [
108
+ accordionData: [
63
109
  {
110
+ accordionType: AccordionTypes.Default,
64
111
  label: "Tom Nook",
65
112
  panel: (
66
113
  <Card
67
- layout={CardLayouts.Row}
68
- center
69
- imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
70
- imageAlt="Alt text"
71
- imageAspectRatio={ImageRatios.TwoByOne}
114
+ imageProps={{
115
+ alt: "Alt text",
116
+ aspectRatio: ImageRatios.TwoByOne,
117
+ src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
118
+ }}
119
+ isCentered
120
+ layout={LayoutTypes.Row}
72
121
  >
73
122
  <CardHeading level={HeadingLevels.Four} id="heading1">
74
123
  Tom Nook
@@ -90,50 +139,70 @@ necessary icon, Chakra components, and styles.
90
139
  </Story>
91
140
  </Canvas>
92
141
 
142
+ <ArgsTable story="Accordion with Controls" />
143
+
93
144
  ```jsx
94
- const contentData = [
145
+ const accordionData = [
95
146
  {
147
+ accordionType: AccordionTypes.Default,
96
148
  label: "Tom Nook",
97
149
  panel: (
98
150
  <Card
99
- layout={CardLayouts.Row}
100
- center
101
- imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
102
- imageAlt="Alt text"
103
- imageAspectRatio={ImageRatios.TwoByOne}
151
+ imageProps={{
152
+ alt: "Alt text",
153
+ aspectRatio: ImageRatios.TwoByOne,
154
+ src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
155
+ }}
156
+ isCentered
157
+ layout={LayoutTypes.Row}
104
158
  >
105
159
  <CardHeading level={HeadingLevels.Four} id="heading1">
106
160
  Tom Nook
107
161
  </CardHeading>
108
162
  <CardContent>
109
- Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
110
- character in the Animal Crossing series who operates the
111
- village store.
163
+ Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
164
+ in the Animal Crossing series who operates the village store.
112
165
  </CardContent>
113
166
  </Card>
114
167
  ),
115
168
  },
116
169
  ];
170
+ ```
117
171
 
118
- ...
172
+ ## Accessibility
119
173
 
120
- <Accordion contentData={contentData} />
121
- ```
174
+ - Follows [U.S. Web Design System (USWDS)](https://designsystem.digital.gov/components/accordion/)
175
+ guidelines:
176
+ - Use the `button` HTML element for screenreaders and keyboards.
177
+ - Use the `aria-expanded` attribute to indicate whether the `Accordion` is
178
+ expanded (`true`) or collapsed (`false`).
179
+ - Use the `aria-controls` attribute to associate the control with the panel.
180
+ - Deviates from USWDS in that the user can open multiple panels. Opening one,
181
+ does not collapse already expanded panel.
182
+ - The open and close icons are decorative (`aria-hidden` is `true`).
183
+ - Visible focus goes around full button and full button is clickable
122
184
 
123
- <ArgsTable story="Accordion with Controls" />
185
+ Resources:
124
186
 
125
- ## FAQ example
187
+ - [W3C WAI-Aria Practices - Accordion](https://www.w3.org/TR/wai-aria-practices-1.1/#accordion)
188
+ - [USWDS Accordion](https://designsystem.digital.gov/components/accordion/)
189
+ - [Chakra Accordion](https://chakra-ui.com/docs/components/disclosure/accordion)
190
+
191
+ ## FAQ Example
126
192
 
127
193
  export const faqContent = [
128
194
  {
195
+ accordionType: AccordionTypes.Default,
129
196
  label: "Tom Nook",
130
197
  panel: (
131
198
  <Card
132
- layout={CardLayouts.Row}
133
- center
134
- imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
135
- imageAlt="Alt text"
136
- imageAspectRatio={ImageRatios.TwoByOne}
199
+ imageProps={{
200
+ alt: "Alt text",
201
+ aspectRatio: ImageRatios.TwoByOne,
202
+ src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
203
+ }}
204
+ isCentered
205
+ layout={LayoutTypes.Row}
137
206
  >
138
207
  <CardHeading level={HeadingLevels.Four} id="heading1-tom">
139
208
  Tom Nook
@@ -146,14 +215,17 @@ export const faqContent = [
146
215
  ),
147
216
  },
148
217
  {
218
+ accordionType: AccordionTypes.Warning,
149
219
  label: "Isabelle",
150
220
  panel: (
151
221
  <Card
152
- layout={CardLayouts.Row}
153
- center
154
- imageSrc="https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
155
- imageAlt="Alt text"
156
- imageAspectRatio={ImageRatios.TwoByOne}
222
+ imageProps={{
223
+ alt: "Alt text",
224
+ aspectRatio: ImageRatios.TwoByOne,
225
+ src: "https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
226
+ }}
227
+ isCentered
228
+ layout={LayoutTypes.Row}
157
229
  >
158
230
  <CardHeading level={HeadingLevels.Four} id="heading1-isabelle">
159
231
  Isabelle
@@ -168,14 +240,17 @@ export const faqContent = [
168
240
  ),
169
241
  },
170
242
  {
243
+ accordionType: AccordionTypes.Error,
171
244
  label: "K.K. Slider",
172
245
  panel: (
173
246
  <Card
174
- layout={CardLayouts.Row}
175
- center
176
- imageSrc="https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
177
- imageAlt="Alt text"
178
- imageAspectRatio={ImageRatios.TwoByOne}
247
+ imageProps={{
248
+ alt: "Alt text",
249
+ aspectRatio: ImageRatios.TwoByOne,
250
+ src: "https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
251
+ }}
252
+ isCentered
253
+ layout={LayoutTypes.Row}
179
254
  >
180
255
  <CardHeading level={HeadingLevels.Four} id="heading1-kkslider">
181
256
  K.K. Slider
@@ -194,25 +269,28 @@ export const faqContent = [
194
269
  ];
195
270
 
196
271
  Building out FAQ-like accordions happens automatically when there are more than
197
- one object in the array passed into the `contentData` prop.
272
+ one object in the array passed into the `accordionData` prop.
198
273
 
199
274
  <Canvas withToolbar>
200
- <Story name="FAQ">
201
- <Accordion contentData={faqContent} />
275
+ <Story name="FAQ Example">
276
+ <Accordion accordionData={faqContent} />
202
277
  </Story>
203
278
  </Canvas>
204
279
 
205
280
  ```jsx
206
281
  export const faqContent = [
207
282
  {
283
+ accordionType: AccordionTypes.Default,
208
284
  label: "Tom Nook",
209
285
  panel: (
210
286
  <Card
211
- layout={CardLayouts.Row}
212
- center
213
- imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
214
- imageAlt="Alt text"
215
- imageAspectRatio={ImageRatios.TwoByOne}
287
+ imageProps={{
288
+ alt: "Alt text",
289
+ aspectRatio: ImageRatios.TwoByOne,
290
+ src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
291
+ }}
292
+ isCentered
293
+ layout={LayoutTypes.Row}
216
294
  >
217
295
  <CardHeading level={HeadingLevels.Four} id="heading1-tom">
218
296
  Tom Nook
@@ -225,14 +303,17 @@ export const faqContent = [
225
303
  ),
226
304
  },
227
305
  {
306
+ accordionType: AccordionTypes.Warning,
228
307
  label: "Isabelle",
229
308
  panel: (
230
309
  <Card
231
- layout={CardLayouts.Row}
232
- center
233
- imageSrc="https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
234
- imageAlt="Alt text"
235
- imageAspectRatio={ImageRatios.TwoByOne}
310
+ imageProps={{
311
+ alt: "Alt text",
312
+ aspectRatio: ImageRatios.TwoByOne,
313
+ src: "https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
314
+ }}
315
+ isCentered
316
+ layout={LayoutTypes.Row}
236
317
  >
237
318
  <CardHeading level={HeadingLevels.Four} id="heading1-isabelle">
238
319
  Isabelle
@@ -247,14 +328,17 @@ export const faqContent = [
247
328
  ),
248
329
  },
249
330
  {
331
+ accordionType: AccordionTypes.Error,
250
332
  label: "K.K. Slider",
251
333
  panel: (
252
334
  <Card
253
- layout={CardLayouts.Row}
254
- center
255
- imageSrc="https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
256
- imageAlt="Alt text"
257
- imageAspectRatio={ImageRatios.TwoByOne}
335
+ imageProps={{
336
+ alt: "Alt text",
337
+ aspectRatio: ImageRatios.TwoByOne,
338
+ src: "https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
339
+ }}
340
+ isCentered
341
+ layout={LayoutTypes.Row}
258
342
  >
259
343
  <CardHeading level={HeadingLevels.Four} id="heading1-kkslider">
260
344
  K.K. Slider
@@ -274,5 +358,5 @@ export const faqContent = [
274
358
 
275
359
  ...
276
360
 
277
- <Accordion contentData={faqContent} />
361
+ <Accordion accordionData={faqContent} />
278
362
  ```
@@ -5,16 +5,17 @@ import renderer from "react-test-renderer";
5
5
  import userEvent from "@testing-library/user-event";
6
6
 
7
7
  import Accordion from "./Accordion";
8
+ import { AccordionTypes } from "./AccordionTypes";
8
9
  import Card, { CardContent, CardHeading } from "../Card/Card";
9
- import { CardLayouts } from "../Card/CardTypes";
10
10
  import { HeadingLevels } from "../Heading/HeadingTypes";
11
11
  import { ImageRatios } from "../Image/ImageTypes";
12
+ import { LayoutTypes } from "../../helpers/enums";
12
13
 
13
14
  describe("Accordion Accessibility", () => {
14
15
  it("passes axe accessibility test for one item", async () => {
15
16
  const { container } = render(
16
17
  <Accordion
17
- contentData={[
18
+ accordionData={[
18
19
  {
19
20
  label: "Tom Nook",
20
21
  panel: (
@@ -34,7 +35,7 @@ describe("Accordion Accessibility", () => {
34
35
  it("passes axe accessibility test for multiple items", async () => {
35
36
  const { container } = render(
36
37
  <Accordion
37
- contentData={[
38
+ accordionData={[
38
39
  {
39
40
  label: "Tom Nook",
40
41
  panel: (
@@ -60,7 +61,7 @@ describe("Accordion Accessibility", () => {
60
61
  });
61
62
  });
62
63
 
63
- export const contentData = [
64
+ export const accordionData = [
64
65
  {
65
66
  label: "Tom Nook",
66
67
  panel: (
@@ -90,7 +91,7 @@ export const contentData = [
90
91
 
91
92
  describe("Accordion", () => {
92
93
  it("renders a visible button with a label to click on", () => {
93
- render(<Accordion contentData={[contentData[0]]} />);
94
+ render(<Accordion accordionData={[accordionData[0]]} />);
94
95
  const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
95
96
 
96
97
  expect(accordionLabel).toBeInTheDocument();
@@ -100,7 +101,7 @@ describe("Accordion", () => {
100
101
  });
101
102
 
102
103
  it("opens the panel by default with isDefaultOpen passed", () => {
103
- render(<Accordion isDefaultOpen contentData={[contentData[0]]} />);
104
+ render(<Accordion isDefaultOpen accordionData={[accordionData[0]]} />);
104
105
  const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
105
106
 
106
107
  expect(accordionLabel).toBeInTheDocument();
@@ -108,7 +109,7 @@ describe("Accordion", () => {
108
109
  });
109
110
 
110
111
  it("opens the accordion when the label is clicked", () => {
111
- render(<Accordion contentData={[contentData[0]]} />);
112
+ render(<Accordion accordionData={[accordionData[0]]} />);
112
113
 
113
114
  const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
114
115
  expect(accordionLabel).toHaveAttribute("aria-expanded", "false");
@@ -117,7 +118,7 @@ describe("Accordion", () => {
117
118
  });
118
119
 
119
120
  it("renders multiple accordion items grouped together", () => {
120
- render(<Accordion contentData={contentData} />);
121
+ render(<Accordion accordionData={accordionData} />);
121
122
 
122
123
  const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
123
124
  const accordion2 = screen.getByRole("button", { name: "Isabelle" });
@@ -129,7 +130,7 @@ describe("Accordion", () => {
129
130
  });
130
131
 
131
132
  it("opens each accordion item independently of each other", () => {
132
- render(<Accordion contentData={contentData} />);
133
+ render(<Accordion accordionData={accordionData} />);
133
134
 
134
135
  const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
135
136
  const accordion2 = screen.getByRole("button", { name: "Isabelle" });
@@ -157,17 +158,19 @@ describe("Accordion", () => {
157
158
  });
158
159
 
159
160
  it("Renders the UI snapshot correctly", () => {
160
- const contentData = [
161
+ const accordionData = [
161
162
  {
162
163
  label: "Gerry Kellman",
163
164
  panel: (
164
165
  <Card
165
- center
166
166
  id="card"
167
- imageAlt="Alt text"
168
- imageAspectRatio={ImageRatios.TwoByOne}
169
- imageSrc={`https://cdn.onebauer.media/one/media/6176/76fd/405b/ab5f/f20f/2d52/gerri-1500-1.jpg?format=jpg&quality=80&width=850&ratio=1-1&resize=aspectfit`}
170
- layout={CardLayouts.Row}
167
+ imageProps={{
168
+ alt: "Alt text",
169
+ aspectRatio: ImageRatios.TwoByOne,
170
+ src: "https://cdn.onebauer.media/one/media/6176/76fd/405b/ab5f/f20f/2d52/gerri-1500-1.jpg?format=jpg&quality=80&width=850&ratio=1-1&resize=aspectfit",
171
+ }}
172
+ isCentered
173
+ layout={LayoutTypes.Row}
171
174
  >
172
175
  <CardHeading id="heading1" level={HeadingLevels.Four}>
173
176
  Gerry Kellman
@@ -183,15 +186,60 @@ describe("Accordion", () => {
183
186
  ];
184
187
 
185
188
  const primary = renderer
186
- .create(<Accordion contentData={contentData} id="accordian" />)
189
+ .create(<Accordion accordionData={accordionData} id="accordian" />)
187
190
  .toJSON();
188
191
  const defaultOpen = renderer
189
192
  .create(
190
- <Accordion contentData={contentData} id="accordian" isDefaultOpen />
193
+ <Accordion accordionData={accordionData} id="accordian" isDefaultOpen />
194
+ )
195
+ .toJSON();
196
+ const withError = renderer
197
+ .create(
198
+ <Accordion
199
+ accordionData={[
200
+ { ...accordionData[0], accordionType: AccordionTypes.Error },
201
+ ]}
202
+ id="accordian"
203
+ isDefaultOpen
204
+ />
205
+ )
206
+ .toJSON();
207
+ const withWarning = renderer
208
+ .create(
209
+ <Accordion
210
+ accordionData={[
211
+ { ...accordionData[0], accordionType: AccordionTypes.Warning },
212
+ ]}
213
+ id="accordian"
214
+ isDefaultOpen
215
+ />
216
+ )
217
+ .toJSON();
218
+ const withChakraProps = renderer
219
+ .create(
220
+ <Accordion
221
+ accordionData={accordionData}
222
+ id="accordian"
223
+ p="s"
224
+ color="ui.error.primary"
225
+ />
226
+ )
227
+ .toJSON();
228
+ const withOtherProps = renderer
229
+ .create(
230
+ <Accordion
231
+ accordionData={accordionData}
232
+ id="accordian"
233
+ data-testid="testid"
234
+ />
191
235
  )
192
236
  .toJSON();
193
237
 
194
238
  expect(primary).toMatchSnapshot();
195
239
  expect(defaultOpen).toMatchSnapshot();
240
+ expect(withChakraProps).toMatchSnapshot();
241
+ expect(withOtherProps).toMatchSnapshot();
242
+ expect(withError).toMatchSnapshot();
243
+ expect(withWarning).toMatchSnapshot();
196
244
  });
197
245
  });
@@ -1,24 +1,25 @@
1
- import * as React from "react";
2
1
  import {
3
- Box,
4
2
  Accordion as ChakraAccordion,
5
3
  AccordionItem,
6
4
  AccordionButton,
7
5
  AccordionPanel,
6
+ Box,
7
+ chakra,
8
8
  } from "@chakra-ui/react";
9
+ import * as React from "react";
9
10
 
11
+ import { AccordionTypes } from "./AccordionTypes";
10
12
  import Icon from "../Icons/Icon";
11
13
  import { IconNames, IconSizes } from "../Icons/IconTypes";
12
- import generateUUID from "../../helpers/generateUUID";
13
-
14
- export interface AccordionContentDataProps {
14
+ export interface AccordionDataProps {
15
+ accordionType?: AccordionTypes;
15
16
  label: string;
16
17
  panel: string | React.ReactNode;
17
18
  }
18
19
 
19
20
  export interface AccordionProps {
20
- /** Array of data to display */
21
- contentData: AccordionContentDataProps[];
21
+ /** Array of data to display, and an optional accordionType */
22
+ accordionData: AccordionDataProps[];
22
23
  /** ID that other components can cross reference for accessibility purposes */
23
24
  id?: string;
24
25
  /** Whether the accordion is open by default only on its initial rendering */
@@ -45,7 +46,12 @@ const getIcon = (isExpanded = false, index, id) => {
45
46
  * array. This automatically creates the `AccordionButton` and `AccordionPanel`
46
47
  * combination that is required for the Chakra `Accordion` component.
47
48
  */
48
- const getElementsFromContentData = (data = [], id) => {
49
+ const getElementsFromData = (data = [], id) => {
50
+ const colorMap = {
51
+ [AccordionTypes.Default]: "ui.white",
52
+ [AccordionTypes.Warning]: "ui.status.primary",
53
+ [AccordionTypes.Error]: "ui.status.secondary",
54
+ };
49
55
  // For FAQ-style multiple accordions, the button should be bigger.
50
56
  // Otherwise, use the default.
51
57
  const multiplePadding = data?.length > 1 ? 4 : null;
@@ -68,20 +74,43 @@ const getElementsFromContentData = (data = [], id) => {
68
74
  return (
69
75
  <AccordionItem id={`${id}-item-${index}`} key={index}>
70
76
  {/* Get the current state to render the correct icon. */}
71
- {({ isExpanded }) => (
72
- <>
73
- <AccordionButton
74
- id={`${id}-button-${index}`}
75
- padding={multiplePadding}
76
- >
77
- <Box flex="1" textAlign="left">
78
- {content.label}
79
- </Box>
80
- {getIcon(isExpanded, index, id)}
81
- </AccordionButton>
82
- {panel}
83
- </>
84
- )}
77
+ {({ isExpanded }) => {
78
+ const bgColorByAccordionType = colorMap[content.accordionType];
79
+ return (
80
+ <>
81
+ <AccordionButton
82
+ id={`${id}-button-${index}`}
83
+ padding={multiplePadding}
84
+ bg={
85
+ !content.accordionType
86
+ ? colorMap.default
87
+ : bgColorByAccordionType
88
+ }
89
+ _expanded={{
90
+ bg:
91
+ !content.accordionType ||
92
+ content.accordionType === "default"
93
+ ? "ui.gray.light-cool"
94
+ : bgColorByAccordionType,
95
+ }}
96
+ _hover={{
97
+ bg:
98
+ !content.accordionType ||
99
+ content.accordionType === "default"
100
+ ? "transparent"
101
+ : bgColorByAccordionType,
102
+ borderColor: "ui.gray.dark",
103
+ }}
104
+ >
105
+ <Box flex="1" textAlign="left">
106
+ {content.label}
107
+ </Box>
108
+ {getIcon(isExpanded, index, id)}
109
+ </AccordionButton>
110
+ {panel}
111
+ </>
112
+ );
113
+ }}
85
114
  </AccordionItem>
86
115
  );
87
116
  });
@@ -91,16 +120,21 @@ const getElementsFromContentData = (data = [], id) => {
91
120
  * Accordion component that shows content on toggle. Can be used to display
92
121
  * multiple accordion items together.
93
122
  */
94
- function Accordion(props: React.PropsWithChildren<AccordionProps>) {
95
- const { contentData, id = generateUUID(), isDefaultOpen = false } = props;
123
+ export const Accordion = chakra((props: AccordionProps) => {
124
+ const { accordionData, id, isDefaultOpen = false, ...rest } = props;
96
125
 
97
126
  // Pass `0` to open the first accordion in the 0-index based array.
98
127
  const openFirstAccordion = isDefaultOpen ? 0 : undefined;
99
128
  return (
100
- <ChakraAccordion id={id} defaultIndex={[openFirstAccordion]} allowMultiple>
101
- {getElementsFromContentData(contentData, id)}
129
+ <ChakraAccordion
130
+ id={id}
131
+ defaultIndex={[openFirstAccordion]}
132
+ allowMultiple
133
+ {...rest}
134
+ >
135
+ {getElementsFromData(accordionData, id)}
102
136
  </ChakraAccordion>
103
137
  );
104
- }
138
+ });
105
139
 
106
140
  export default Accordion;
@@ -0,0 +1,5 @@
1
+ export enum AccordionTypes {
2
+ Default = "default",
3
+ Warning = "warning",
4
+ Error = "error",
5
+ }