@12-apps/ui 1.0.0

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 (633) hide show
  1. package/components-catalog.md +806 -0
  2. package/components-guidelines.md +347 -0
  3. package/dist/index.cjs +2 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +2 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -0
  9. package/eslint.config.js +77 -0
  10. package/package.json +247 -0
  11. package/src/__tests__/package-wiring.test.ts +37 -0
  12. package/src/__tests__/setup.ts +1 -0
  13. package/src/__tests__/social-login-button.test.tsx +186 -0
  14. package/src/__tests__/user-avatar.test.tsx +195 -0
  15. package/src/button.tsx +22 -0
  16. package/src/components/command/__tests__/command.test.tsx +112 -0
  17. package/src/components/data-display/Alert/Alert.md +209 -0
  18. package/src/components/data-display/Alert/Alert.stories.tsx +561 -0
  19. package/src/components/data-display/Alert/Alert.test.stories.tsx +709 -0
  20. package/src/components/data-display/Alert/Alert.tsx +449 -0
  21. package/src/components/data-display/Alert/Alert.types.ts +79 -0
  22. package/src/components/data-display/Alert/index.ts +2 -0
  23. package/src/components/data-display/AlertDialog/AlertDialog.md +408 -0
  24. package/src/components/data-display/AlertDialog/AlertDialog.stories.tsx +360 -0
  25. package/src/components/data-display/AlertDialog/AlertDialog.test.stories.tsx +753 -0
  26. package/src/components/data-display/AlertDialog/AlertDialog.tsx +273 -0
  27. package/src/components/data-display/AlertDialog/AlertDialog.types.ts +74 -0
  28. package/src/components/data-display/AlertDialog/index.ts +2 -0
  29. package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.stories.tsx +230 -0
  30. package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.test.stories.tsx +270 -0
  31. package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.tsx +116 -0
  32. package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.types.ts +70 -0
  33. package/src/components/data-display/AsyncStateContainer/index.ts +2 -0
  34. package/src/components/data-display/Avatar/Avatar.md +568 -0
  35. package/src/components/data-display/Avatar/Avatar.stories.tsx +718 -0
  36. package/src/components/data-display/Avatar/Avatar.test.stories.tsx +820 -0
  37. package/src/components/data-display/Avatar/Avatar.tsx +507 -0
  38. package/src/components/data-display/Avatar/Avatar.types.ts +88 -0
  39. package/src/components/data-display/Avatar/index.ts +2 -0
  40. package/src/components/data-display/Badge/Badge.md +469 -0
  41. package/src/components/data-display/Badge/Badge.stories.tsx +1136 -0
  42. package/src/components/data-display/Badge/Badge.test.stories.tsx +1193 -0
  43. package/src/components/data-display/Badge/Badge.tsx +606 -0
  44. package/src/components/data-display/Badge/Badge.types.ts +118 -0
  45. package/src/components/data-display/Badge/index.ts +2 -0
  46. package/src/components/data-display/Banner/Banner.stories.tsx +524 -0
  47. package/src/components/data-display/Banner/Banner.test.stories.tsx +503 -0
  48. package/src/components/data-display/Banner/Banner.tsx +350 -0
  49. package/src/components/data-display/Banner/Banner.types.ts +41 -0
  50. package/src/components/data-display/Banner/banner.md +141 -0
  51. package/src/components/data-display/Banner/index.ts +2 -0
  52. package/src/components/data-display/Carousel/Carousel.md +815 -0
  53. package/src/components/data-display/Carousel/Carousel.stories.tsx +607 -0
  54. package/src/components/data-display/Carousel/Carousel.test.stories.tsx +691 -0
  55. package/src/components/data-display/Carousel/Carousel.tsx +765 -0
  56. package/src/components/data-display/Carousel/Carousel.types.ts +79 -0
  57. package/src/components/data-display/Carousel/index.ts +8 -0
  58. package/src/components/data-display/Chart/Chart.md +352 -0
  59. package/src/components/data-display/Chart/Chart.stories.tsx +568 -0
  60. package/src/components/data-display/Chart/Chart.test.stories.tsx +174 -0
  61. package/src/components/data-display/Chart/Chart.tsx +520 -0
  62. package/src/components/data-display/Chart/Chart.types.ts +65 -0
  63. package/src/components/data-display/Chart/index.ts +2 -0
  64. package/src/components/data-display/Chip/Chip.stories.tsx +251 -0
  65. package/src/components/data-display/Chip/Chip.test.stories.tsx +263 -0
  66. package/src/components/data-display/Chip/Chip.tsx +134 -0
  67. package/src/components/data-display/Chip/Chip.types.ts +51 -0
  68. package/src/components/data-display/Chip/chip.md +395 -0
  69. package/src/components/data-display/Chip/index.ts +2 -0
  70. package/src/components/data-display/DataGrid/DataGrid.md +602 -0
  71. package/src/components/data-display/DataGrid/DataGrid.stories.tsx +515 -0
  72. package/src/components/data-display/DataGrid/DataGrid.test.stories.tsx +659 -0
  73. package/src/components/data-display/DataGrid/DataGrid.tsx +743 -0
  74. package/src/components/data-display/DataGrid/DataGrid.types.ts +171 -0
  75. package/src/components/data-display/DataGrid/index.ts +21 -0
  76. package/src/components/data-display/DateTimeDisplay/DateTimeDisplay.tsx +197 -0
  77. package/src/components/data-display/DateTimeDisplay/DateTimeDisplay.types.ts +46 -0
  78. package/src/components/data-display/DateTimeDisplay/index.ts +2 -0
  79. package/src/components/data-display/DescriptionItem/DescriptionItem.md +226 -0
  80. package/src/components/data-display/DescriptionItem/DescriptionItem.stories.tsx +254 -0
  81. package/src/components/data-display/DescriptionItem/DescriptionItem.tsx +100 -0
  82. package/src/components/data-display/DescriptionItem/DescriptionItem.types.ts +1 -0
  83. package/src/components/data-display/DescriptionItem/index.ts +2 -0
  84. package/src/components/data-display/EmptyState/EmptyState.md +265 -0
  85. package/src/components/data-display/EmptyState/EmptyState.stories.tsx +282 -0
  86. package/src/components/data-display/EmptyState/EmptyState.test.stories.tsx +441 -0
  87. package/src/components/data-display/EmptyState/EmptyState.tsx +180 -0
  88. package/src/components/data-display/EmptyState/EmptyState.types.ts +31 -0
  89. package/src/components/data-display/EmptyState/index.ts +2 -0
  90. package/src/components/data-display/ErrorState/ErrorState.stories.tsx +110 -0
  91. package/src/components/data-display/ErrorState/ErrorState.test.stories.tsx +133 -0
  92. package/src/components/data-display/ErrorState/ErrorState.tsx +118 -0
  93. package/src/components/data-display/ErrorState/ErrorState.types.ts +45 -0
  94. package/src/components/data-display/ErrorState/index.ts +2 -0
  95. package/src/components/data-display/HoverCard/HoverCard.md +389 -0
  96. package/src/components/data-display/HoverCard/HoverCard.stories.tsx +648 -0
  97. package/src/components/data-display/HoverCard/HoverCard.test.stories.tsx +929 -0
  98. package/src/components/data-display/HoverCard/HoverCard.tsx +657 -0
  99. package/src/components/data-display/HoverCard/HoverCard.types.ts +116 -0
  100. package/src/components/data-display/HoverCard/index.ts +2 -0
  101. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.md +532 -0
  102. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.stories.tsx +411 -0
  103. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.tsx +245 -0
  104. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.types.ts +64 -0
  105. package/src/components/data-display/InteractiveTooltip/index.ts +2 -0
  106. package/src/components/data-display/LazyImage/LazyImage.md +356 -0
  107. package/src/components/data-display/LazyImage/LazyImage.stories.tsx +387 -0
  108. package/src/components/data-display/LazyImage/LazyImage.tsx +323 -0
  109. package/src/components/data-display/LazyImage/LazyImage.types.ts +205 -0
  110. package/src/components/data-display/LazyImage/index.ts +2 -0
  111. package/src/components/data-display/Lightbox/Lightbox.stories.tsx +315 -0
  112. package/src/components/data-display/Lightbox/Lightbox.test.stories.tsx +605 -0
  113. package/src/components/data-display/Lightbox/Lightbox.tsx +666 -0
  114. package/src/components/data-display/Lightbox/Lightbox.types.ts +49 -0
  115. package/src/components/data-display/Lightbox/index.ts +2 -0
  116. package/src/components/data-display/Lightbox/lightbox.md +298 -0
  117. package/src/components/data-display/LoadingState/LoadingState.stories.tsx +124 -0
  118. package/src/components/data-display/LoadingState/LoadingState.test.stories.tsx +99 -0
  119. package/src/components/data-display/LoadingState/LoadingState.tsx +103 -0
  120. package/src/components/data-display/LoadingState/LoadingState.types.ts +37 -0
  121. package/src/components/data-display/LoadingState/index.ts +2 -0
  122. package/src/components/data-display/MapPreview/MapPreview.md +154 -0
  123. package/src/components/data-display/MapPreview/MapPreview.stories.tsx +458 -0
  124. package/src/components/data-display/MapPreview/MapPreview.test.stories.tsx +390 -0
  125. package/src/components/data-display/MapPreview/MapPreview.tsx +922 -0
  126. package/src/components/data-display/MapPreview/MapPreview.types.ts +56 -0
  127. package/src/components/data-display/MapPreview/index.ts +2 -0
  128. package/src/components/data-display/Popover/Popover.md +245 -0
  129. package/src/components/data-display/Popover/Popover.stories.tsx +295 -0
  130. package/src/components/data-display/Popover/Popover.test.stories.tsx +1168 -0
  131. package/src/components/data-display/Popover/Popover.tsx +132 -0
  132. package/src/components/data-display/Popover/Popover.types.ts +33 -0
  133. package/src/components/data-display/Popover/index.ts +2 -0
  134. package/src/components/data-display/Progress/Progress.md +450 -0
  135. package/src/components/data-display/Progress/Progress.stories.tsx +481 -0
  136. package/src/components/data-display/Progress/Progress.test.stories.tsx +2070 -0
  137. package/src/components/data-display/Progress/Progress.tsx +332 -0
  138. package/src/components/data-display/Progress/Progress.types.ts +61 -0
  139. package/src/components/data-display/Progress/index.ts +2 -0
  140. package/src/components/data-display/SectionOnboarding/SectionOnboarding.md +108 -0
  141. package/src/components/data-display/SectionOnboarding/SectionOnboarding.stories.tsx +160 -0
  142. package/src/components/data-display/SectionOnboarding/SectionOnboarding.test.stories.tsx +190 -0
  143. package/src/components/data-display/SectionOnboarding/SectionOnboarding.tsx +224 -0
  144. package/src/components/data-display/SectionOnboarding/SectionOnboarding.types.ts +101 -0
  145. package/src/components/data-display/SectionOnboarding/index.ts +7 -0
  146. package/src/components/data-display/Sheet/Sheet.md +475 -0
  147. package/src/components/data-display/Sheet/Sheet.stories.tsx +883 -0
  148. package/src/components/data-display/Sheet/Sheet.test.stories.tsx +1101 -0
  149. package/src/components/data-display/Sheet/Sheet.tsx +978 -0
  150. package/src/components/data-display/Sheet/Sheet.types.ts +93 -0
  151. package/src/components/data-display/Sheet/index.ts +8 -0
  152. package/src/components/data-display/Stepper/Stepper.md +542 -0
  153. package/src/components/data-display/Stepper/Stepper.stories.tsx +540 -0
  154. package/src/components/data-display/Stepper/Stepper.test.stories.tsx +607 -0
  155. package/src/components/data-display/Stepper/Stepper.tsx +328 -0
  156. package/src/components/data-display/Stepper/Stepper.types.ts +97 -0
  157. package/src/components/data-display/Stepper/index.ts +2 -0
  158. package/src/components/data-display/Table/Table.md +243 -0
  159. package/src/components/data-display/Table/Table.stories.tsx +801 -0
  160. package/src/components/data-display/Table/Table.test.stories.tsx +369 -0
  161. package/src/components/data-display/Table/Table.tsx +831 -0
  162. package/src/components/data-display/Table/Table.types.ts +335 -0
  163. package/src/components/data-display/Table/index.ts +2 -0
  164. package/src/components/data-display/Timeline/Timeline.md +201 -0
  165. package/src/components/data-display/Timeline/Timeline.stories.tsx +444 -0
  166. package/src/components/data-display/Timeline/Timeline.test.stories.tsx +944 -0
  167. package/src/components/data-display/Timeline/Timeline.tsx +348 -0
  168. package/src/components/data-display/Timeline/Timeline.types.ts +26 -0
  169. package/src/components/data-display/Timeline/index.ts +2 -0
  170. package/src/components/data-display/TimingDiagram/TimingDiagram.md +162 -0
  171. package/src/components/data-display/TimingDiagram/TimingDiagram.stories.tsx +475 -0
  172. package/src/components/data-display/TimingDiagram/TimingDiagram.test.stories.tsx +734 -0
  173. package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +399 -0
  174. package/src/components/data-display/TimingDiagram/TimingDiagram.types.ts +19 -0
  175. package/src/components/data-display/TimingDiagram/index.ts +2 -0
  176. package/src/components/data-display/Tooltip/Tooltip.md +397 -0
  177. package/src/components/data-display/Tooltip/Tooltip.stories.tsx +465 -0
  178. package/src/components/data-display/Tooltip/Tooltip.test.stories.tsx +1168 -0
  179. package/src/components/data-display/Tooltip/Tooltip.tsx +161 -0
  180. package/src/components/data-display/Tooltip/Tooltip.types.ts +33 -0
  181. package/src/components/data-display/Tooltip/index.ts +2 -0
  182. package/src/components/data-display/index.ts +29 -0
  183. package/src/components/feedback/Dialog/Dialog.md +527 -0
  184. package/src/components/feedback/Dialog/Dialog.stories.tsx +833 -0
  185. package/src/components/feedback/Dialog/Dialog.styles.ts +171 -0
  186. package/src/components/feedback/Dialog/Dialog.test.stories.tsx +955 -0
  187. package/src/components/feedback/Dialog/Dialog.tsx +256 -0
  188. package/src/components/feedback/Dialog/Dialog.types.ts +46 -0
  189. package/src/components/feedback/Dialog/index.ts +9 -0
  190. package/src/components/feedback/Modal/Modal.md +629 -0
  191. package/src/components/feedback/Modal/Modal.stories.tsx +765 -0
  192. package/src/components/feedback/Modal/Modal.test.stories.tsx +251 -0
  193. package/src/components/feedback/Modal/Modal.tsx +279 -0
  194. package/src/components/feedback/Modal/Modal.types.ts +26 -0
  195. package/src/components/feedback/Modal/index.ts +7 -0
  196. package/src/components/feedback/Sonner/Sonner.stories.tsx +698 -0
  197. package/src/components/feedback/Sonner/Sonner.test.stories.tsx +896 -0
  198. package/src/components/feedback/Sonner/Sonner.tsx +493 -0
  199. package/src/components/feedback/Sonner/Sonner.types.ts +65 -0
  200. package/src/components/feedback/Sonner/index.ts +8 -0
  201. package/src/components/feedback/StackedModal/StackedModal.md +273 -0
  202. package/src/components/feedback/StackedModal/StackedModal.stories.tsx +1785 -0
  203. package/src/components/feedback/StackedModal/StackedModal.test.stories.tsx +975 -0
  204. package/src/components/feedback/StackedModal/StackedModal.tsx +664 -0
  205. package/src/components/feedback/StackedModal/StackedModal.types.ts +70 -0
  206. package/src/components/feedback/StackedModal/index.ts +11 -0
  207. package/src/components/feedback/Toast/Toast.md +547 -0
  208. package/src/components/feedback/Toast/Toast.stories.tsx +548 -0
  209. package/src/components/feedback/Toast/Toast.test.stories.tsx +834 -0
  210. package/src/components/feedback/Toast/Toast.tsx +279 -0
  211. package/src/components/feedback/Toast/Toast.types.ts +59 -0
  212. package/src/components/feedback/Toast/index.ts +8 -0
  213. package/src/components/feedback/TutorialOverlay/TutorialOverlay.md +610 -0
  214. package/src/components/feedback/TutorialOverlay/TutorialOverlay.stories.tsx +691 -0
  215. package/src/components/feedback/TutorialOverlay/TutorialOverlay.test.stories.tsx +634 -0
  216. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +554 -0
  217. package/src/components/feedback/TutorialOverlay/TutorialOverlay.types.ts +30 -0
  218. package/src/components/feedback/TutorialOverlay/index.ts +2 -0
  219. package/src/components/feedback/index.ts +6 -0
  220. package/src/components/form/AddressAutocomplete/AddressAutocomplete.md +633 -0
  221. package/src/components/form/AddressAutocomplete/AddressAutocomplete.stories.tsx +663 -0
  222. package/src/components/form/AddressAutocomplete/AddressAutocomplete.test.stories.tsx +723 -0
  223. package/src/components/form/AddressAutocomplete/AddressAutocomplete.tsx +836 -0
  224. package/src/components/form/AddressAutocomplete/AddressAutocomplete.types.ts +37 -0
  225. package/src/components/form/AddressAutocomplete/index.ts +2 -0
  226. package/src/components/form/Autocomplete/Autocomplete.helpers.ts +115 -0
  227. package/src/components/form/Autocomplete/Autocomplete.keys.ts +134 -0
  228. package/src/components/form/Autocomplete/Autocomplete.parts.tsx +337 -0
  229. package/src/components/form/Autocomplete/Autocomplete.stories.tsx +715 -0
  230. package/src/components/form/Autocomplete/Autocomplete.test.stories.tsx +825 -0
  231. package/src/components/form/Autocomplete/Autocomplete.tsx +166 -0
  232. package/src/components/form/Autocomplete/Autocomplete.types.ts +116 -0
  233. package/src/components/form/Autocomplete/autocomplete.md +789 -0
  234. package/src/components/form/Autocomplete/index.ts +8 -0
  235. package/src/components/form/Autocomplete/useAutocomplete.ts +311 -0
  236. package/src/components/form/Button/Button.md +411 -0
  237. package/src/components/form/Button/Button.stories.tsx +362 -0
  238. package/src/components/form/Button/Button.test.stories.tsx +603 -0
  239. package/src/components/form/Button/Button.tsx +326 -0
  240. package/src/components/form/Button/Button.types.ts +74 -0
  241. package/src/components/form/Button/index.ts +2 -0
  242. package/src/components/form/Calendar/Calendar.md +807 -0
  243. package/src/components/form/Calendar/Calendar.stories.tsx +349 -0
  244. package/src/components/form/Calendar/Calendar.test.stories.tsx +465 -0
  245. package/src/components/form/Calendar/Calendar.tsx +571 -0
  246. package/src/components/form/Calendar/Calendar.types.ts +81 -0
  247. package/src/components/form/Calendar/index.ts +11 -0
  248. package/src/components/form/Checkbox/Checkbox.md +200 -0
  249. package/src/components/form/Checkbox/Checkbox.stories.tsx +265 -0
  250. package/src/components/form/Checkbox/Checkbox.test.stories.tsx +181 -0
  251. package/src/components/form/Checkbox/Checkbox.tsx +170 -0
  252. package/src/components/form/Checkbox/Checkbox.types.ts +20 -0
  253. package/src/components/form/Checkbox/index.ts +2 -0
  254. package/src/components/form/CodeEditor/CodeEditor.md +350 -0
  255. package/src/components/form/CodeEditor/CodeEditor.stories.tsx +871 -0
  256. package/src/components/form/CodeEditor/CodeEditor.test.stories.tsx +575 -0
  257. package/src/components/form/CodeEditor/CodeEditor.tsx +415 -0
  258. package/src/components/form/CodeEditor/CodeEditor.types.ts +38 -0
  259. package/src/components/form/CodeEditor/index.ts +2 -0
  260. package/src/components/form/Command/Command.md +468 -0
  261. package/src/components/form/Command/Command.stories.tsx +580 -0
  262. package/src/components/form/Command/Command.test.stories.tsx +215 -0
  263. package/src/components/form/Command/Command.tsx +545 -0
  264. package/src/components/form/Command/Command.types.ts +116 -0
  265. package/src/components/form/Command/index.ts +12 -0
  266. package/src/components/form/CreatableSelect/CreatableSelect.md +114 -0
  267. package/src/components/form/CreatableSelect/CreatableSelect.stories.tsx +112 -0
  268. package/src/components/form/CreatableSelect/CreatableSelect.test.stories.tsx +134 -0
  269. package/src/components/form/CreatableSelect/CreatableSelect.tsx +149 -0
  270. package/src/components/form/CreatableSelect/CreatableSelect.types.ts +37 -0
  271. package/src/components/form/CreatableSelect/index.ts +2 -0
  272. package/src/components/form/Form/Form.md +325 -0
  273. package/src/components/form/Form/Form.stories.tsx +687 -0
  274. package/src/components/form/Form/Form.test.stories.tsx +601 -0
  275. package/src/components/form/Form/Form.tsx +136 -0
  276. package/src/components/form/Form/Form.types.ts +42 -0
  277. package/src/components/form/Form/index.ts +8 -0
  278. package/src/components/form/Input/Input.md +252 -0
  279. package/src/components/form/Input/Input.stories.tsx +256 -0
  280. package/src/components/form/Input/Input.test.stories.tsx +1184 -0
  281. package/src/components/form/Input/Input.tsx +263 -0
  282. package/src/components/form/Input/Input.types.ts +24 -0
  283. package/src/components/form/Input/index.ts +2 -0
  284. package/src/components/form/InputOTP/InputOTP.md +419 -0
  285. package/src/components/form/InputOTP/InputOTP.stories.tsx +774 -0
  286. package/src/components/form/InputOTP/InputOTP.test.stories.tsx +596 -0
  287. package/src/components/form/InputOTP/InputOTP.tsx +231 -0
  288. package/src/components/form/InputOTP/InputOTP.types.ts +68 -0
  289. package/src/components/form/InputOTP/index.ts +2 -0
  290. package/src/components/form/Label/Label.md +426 -0
  291. package/src/components/form/Label/Label.stories.tsx +473 -0
  292. package/src/components/form/Label/Label.test.stories.tsx +909 -0
  293. package/src/components/form/Label/Label.tsx +367 -0
  294. package/src/components/form/Label/Label.types.ts +35 -0
  295. package/src/components/form/Label/index.ts +2 -0
  296. package/src/components/form/Menubar/Menubar.md +275 -0
  297. package/src/components/form/Menubar/Menubar.stories.tsx +472 -0
  298. package/src/components/form/Menubar/Menubar.test.stories.tsx +588 -0
  299. package/src/components/form/Menubar/Menubar.tsx +467 -0
  300. package/src/components/form/Menubar/Menubar.types.ts +71 -0
  301. package/src/components/form/Menubar/index.ts +8 -0
  302. package/src/components/form/PasswordStrength/PasswordStrength.md +139 -0
  303. package/src/components/form/PasswordStrength/PasswordStrength.stories.tsx +562 -0
  304. package/src/components/form/PasswordStrength/PasswordStrength.test.stories.tsx +327 -0
  305. package/src/components/form/PasswordStrength/PasswordStrength.tsx +419 -0
  306. package/src/components/form/PasswordStrength/PasswordStrength.types.ts +18 -0
  307. package/src/components/form/PasswordStrength/index.ts +2 -0
  308. package/src/components/form/PhoneInput/PhoneInput.md +578 -0
  309. package/src/components/form/PhoneInput/PhoneInput.stories.tsx +495 -0
  310. package/src/components/form/PhoneInput/PhoneInput.test.stories.tsx +666 -0
  311. package/src/components/form/PhoneInput/PhoneInput.tsx +376 -0
  312. package/src/components/form/PhoneInput/PhoneInput.types.ts +25 -0
  313. package/src/components/form/PhoneInput/index.ts +2 -0
  314. package/src/components/form/RadioGroup/RadioGroup.md +477 -0
  315. package/src/components/form/RadioGroup/RadioGroup.stories.tsx +518 -0
  316. package/src/components/form/RadioGroup/RadioGroup.test.stories.tsx +685 -0
  317. package/src/components/form/RadioGroup/RadioGroup.tsx +664 -0
  318. package/src/components/form/RadioGroup/RadioGroup.types.ts +82 -0
  319. package/src/components/form/RadioGroup/index.ts +2 -0
  320. package/src/components/form/RichTextEditor/RichTextEditor.md +710 -0
  321. package/src/components/form/RichTextEditor/RichTextEditor.stories.tsx +261 -0
  322. package/src/components/form/RichTextEditor/RichTextEditor.test.stories.tsx +498 -0
  323. package/src/components/form/RichTextEditor/RichTextEditor.tsx +468 -0
  324. package/src/components/form/RichTextEditor/RichTextEditor.types.ts +72 -0
  325. package/src/components/form/RichTextEditor/index.ts +2 -0
  326. package/src/components/form/SearchPalette/SearchPalette.md +69 -0
  327. package/src/components/form/SearchPalette/SearchPalette.parts.tsx +358 -0
  328. package/src/components/form/SearchPalette/SearchPalette.stories.tsx +135 -0
  329. package/src/components/form/SearchPalette/SearchPalette.tsx +141 -0
  330. package/src/components/form/SearchPalette/SearchPalette.types.ts +82 -0
  331. package/src/components/form/SearchPalette/index.ts +7 -0
  332. package/src/components/form/Select/Select.md +254 -0
  333. package/src/components/form/Select/Select.stories.tsx +364 -0
  334. package/src/components/form/Select/Select.test.stories.tsx +977 -0
  335. package/src/components/form/Select/Select.tsx +239 -0
  336. package/src/components/form/Select/Select.types.ts +57 -0
  337. package/src/components/form/Select/index.ts +2 -0
  338. package/src/components/form/Slider/Slider.md +326 -0
  339. package/src/components/form/Slider/Slider.stories.tsx +418 -0
  340. package/src/components/form/Slider/Slider.test.stories.tsx +1044 -0
  341. package/src/components/form/Slider/Slider.tsx +374 -0
  342. package/src/components/form/Slider/Slider.types.ts +113 -0
  343. package/src/components/form/Slider/index.ts +2 -0
  344. package/src/components/form/Switch/Switch.md +565 -0
  345. package/src/components/form/Switch/Switch.stories.tsx +697 -0
  346. package/src/components/form/Switch/Switch.test.stories.tsx +597 -0
  347. package/src/components/form/Switch/Switch.tsx +578 -0
  348. package/src/components/form/Switch/Switch.types.ts +130 -0
  349. package/src/components/form/Switch/index.ts +2 -0
  350. package/src/components/form/Textarea/Textarea.stories.tsx +473 -0
  351. package/src/components/form/Textarea/Textarea.test.stories.tsx +708 -0
  352. package/src/components/form/Textarea/Textarea.tsx +678 -0
  353. package/src/components/form/Textarea/Textarea.types.ts +84 -0
  354. package/src/components/form/Textarea/index.ts +2 -0
  355. package/src/components/form/Toggle/Toggle.md +234 -0
  356. package/src/components/form/Toggle/Toggle.stories.tsx +638 -0
  357. package/src/components/form/Toggle/Toggle.test.stories.tsx +1167 -0
  358. package/src/components/form/Toggle/Toggle.tsx +265 -0
  359. package/src/components/form/Toggle/Toggle.types.ts +79 -0
  360. package/src/components/form/Toggle/index.ts +2 -0
  361. package/src/components/form/ToggleGroup/ToggleGroup.md +329 -0
  362. package/src/components/form/ToggleGroup/ToggleGroup.stories.tsx +617 -0
  363. package/src/components/form/ToggleGroup/ToggleGroup.test.stories.tsx +918 -0
  364. package/src/components/form/ToggleGroup/ToggleGroup.tsx +129 -0
  365. package/src/components/form/ToggleGroup/ToggleGroup.types.ts +53 -0
  366. package/src/components/form/ToggleGroup/index.ts +2 -0
  367. package/src/components/form/UploadButton/UploadButton.md +44 -0
  368. package/src/components/form/UploadButton/UploadButton.stories.tsx +366 -0
  369. package/src/components/form/UploadButton/UploadButton.test.stories.tsx +454 -0
  370. package/src/components/form/UploadButton/UploadButton.tsx +312 -0
  371. package/src/components/form/UploadButton/UploadButton.types.ts +58 -0
  372. package/src/components/form/UploadButton/index.ts +2 -0
  373. package/src/components/form/index.ts +25 -0
  374. package/src/components/form/total-form/Fields/SelectField.tsx +57 -0
  375. package/src/components/form/total-form/Fields/TextField.tsx +58 -0
  376. package/src/components/form/total-form/Fields/index.ts +4 -0
  377. package/src/components/form/total-form/FormContainer.tsx +104 -0
  378. package/src/components/form/total-form/FormContext.tsx +38 -0
  379. package/src/components/form/total-form/FormErrorSnackbar.tsx +35 -0
  380. package/src/components/form/total-form/SubmitButton.tsx +27 -0
  381. package/src/components/form/total-form/index.ts +12 -0
  382. package/src/components/form/total-form/total-form.test.tsx +97 -0
  383. package/src/components/index.ts +7 -0
  384. package/src/components/layout/Accordion/Accordion.md +725 -0
  385. package/src/components/layout/Accordion/Accordion.stories.tsx +690 -0
  386. package/src/components/layout/Accordion/Accordion.test.stories.tsx +1362 -0
  387. package/src/components/layout/Accordion/Accordion.tsx +242 -0
  388. package/src/components/layout/Accordion/Accordion.types.ts +32 -0
  389. package/src/components/layout/Accordion/index.ts +8 -0
  390. package/src/components/layout/Card/Card.md +533 -0
  391. package/src/components/layout/Card/Card.stories.tsx +593 -0
  392. package/src/components/layout/Card/Card.test.stories.tsx +1134 -0
  393. package/src/components/layout/Card/Card.tsx +404 -0
  394. package/src/components/layout/Card/Card.types.ts +57 -0
  395. package/src/components/layout/Card/index.ts +8 -0
  396. package/src/components/layout/Collapsible/Collapsible.md +135 -0
  397. package/src/components/layout/Collapsible/Collapsible.stories.tsx +180 -0
  398. package/src/components/layout/Collapsible/Collapsible.test.stories.tsx +304 -0
  399. package/src/components/layout/Collapsible/Collapsible.tsx +198 -0
  400. package/src/components/layout/Collapsible/Collapsible.types.ts +35 -0
  401. package/src/components/layout/Collapsible/index.ts +6 -0
  402. package/src/components/layout/Container/Container.md +420 -0
  403. package/src/components/layout/Container/Container.stories.tsx +557 -0
  404. package/src/components/layout/Container/Container.test.stories.tsx +750 -0
  405. package/src/components/layout/Container/Container.tsx +72 -0
  406. package/src/components/layout/Container/Container.types.ts +11 -0
  407. package/src/components/layout/Container/index.ts +2 -0
  408. package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +99 -0
  409. package/src/components/layout/ContentToolbar/ContentToolbar.md +75 -0
  410. package/src/components/layout/ContentToolbar/ContentToolbar.stories.tsx +129 -0
  411. package/src/components/layout/ContentToolbar/ContentToolbar.test.stories.tsx +251 -0
  412. package/src/components/layout/ContentToolbar/ContentToolbar.tsx +108 -0
  413. package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +229 -0
  414. package/src/components/layout/ContentToolbar/FilterTrigger.tsx +71 -0
  415. package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +297 -0
  416. package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +334 -0
  417. package/src/components/layout/ContentToolbar/SortByDropdown.tsx +213 -0
  418. package/src/components/layout/ContentToolbar/ViewSelector.tsx +98 -0
  419. package/src/components/layout/ContentToolbar/__tests__/ColumnsMenu.test.tsx +39 -0
  420. package/src/components/layout/ContentToolbar/__tests__/MultiSelectDropdown.test.tsx +110 -0
  421. package/src/components/layout/ContentToolbar/__tests__/SavedViewsMenu.test.tsx +99 -0
  422. package/src/components/layout/ContentToolbar/index.ts +24 -0
  423. package/src/components/layout/ContentToolbar/tests.md +42 -0
  424. package/src/components/layout/ContentToolbar/track.md +41 -0
  425. package/src/components/layout/Dashboard/Dashboard.md +71 -0
  426. package/src/components/layout/Dashboard/Dashboard.stories.tsx +104 -0
  427. package/src/components/layout/Dashboard/Dashboard.test.stories.tsx +164 -0
  428. package/src/components/layout/Dashboard/Dashboard.tsx +297 -0
  429. package/src/components/layout/Dashboard/Dashboard.types.ts +157 -0
  430. package/src/components/layout/Dashboard/DashboardContext.tsx +47 -0
  431. package/src/components/layout/Dashboard/DashboardParts.tsx +216 -0
  432. package/src/components/layout/Dashboard/index.ts +18 -0
  433. package/src/components/layout/Dashboard/tests.md +46 -0
  434. package/src/components/layout/Dashboard/track.md +50 -0
  435. package/src/components/layout/Drawer/Drawer.md +479 -0
  436. package/src/components/layout/Drawer/Drawer.stories.tsx +660 -0
  437. package/src/components/layout/Drawer/Drawer.test.stories.tsx +1339 -0
  438. package/src/components/layout/Drawer/Drawer.tsx +150 -0
  439. package/src/components/layout/Drawer/Drawer.types.ts +34 -0
  440. package/src/components/layout/Drawer/index.ts +2 -0
  441. package/src/components/layout/Resizable/Resizable.md +308 -0
  442. package/src/components/layout/Resizable/Resizable.stories.tsx +1039 -0
  443. package/src/components/layout/Resizable/Resizable.test.stories.tsx +750 -0
  444. package/src/components/layout/Resizable/Resizable.tsx +190 -0
  445. package/src/components/layout/Resizable/Resizable.types.ts +34 -0
  446. package/src/components/layout/Resizable/index.ts +2 -0
  447. package/src/components/layout/ScrollArea/ScrollArea.md +122 -0
  448. package/src/components/layout/ScrollArea/ScrollArea.stories.tsx +651 -0
  449. package/src/components/layout/ScrollArea/ScrollArea.test.stories.tsx +619 -0
  450. package/src/components/layout/ScrollArea/ScrollArea.tsx +449 -0
  451. package/src/components/layout/ScrollArea/ScrollArea.types.ts +80 -0
  452. package/src/components/layout/ScrollArea/index.ts +7 -0
  453. package/src/components/layout/Separator/Separator.stories.tsx +563 -0
  454. package/src/components/layout/Separator/Separator.test.stories.tsx +527 -0
  455. package/src/components/layout/Separator/Separator.tsx +187 -0
  456. package/src/components/layout/Separator/Separator.types.ts +17 -0
  457. package/src/components/layout/Separator/index.ts +2 -0
  458. package/src/components/layout/SettingsLayout/SettingsLayout.md +139 -0
  459. package/src/components/layout/SettingsLayout/SettingsLayout.parts.tsx +357 -0
  460. package/src/components/layout/SettingsLayout/SettingsLayout.stories.tsx +194 -0
  461. package/src/components/layout/SettingsLayout/SettingsLayout.test.stories.tsx +175 -0
  462. package/src/components/layout/SettingsLayout/SettingsLayout.tsx +69 -0
  463. package/src/components/layout/SettingsLayout/SettingsLayout.types.ts +61 -0
  464. package/src/components/layout/SettingsLayout/index.ts +6 -0
  465. package/src/components/layout/Sidebar/Sidebar.md +367 -0
  466. package/src/components/layout/Sidebar/Sidebar.stories.tsx +611 -0
  467. package/src/components/layout/Sidebar/Sidebar.test.stories.tsx +1326 -0
  468. package/src/components/layout/Sidebar/Sidebar.tsx +131 -0
  469. package/src/components/layout/Sidebar/Sidebar.types.ts +30 -0
  470. package/src/components/layout/Sidebar/index.ts +7 -0
  471. package/src/components/layout/Skeleton/Skeleton.md +240 -0
  472. package/src/components/layout/Skeleton/Skeleton.stories.tsx +689 -0
  473. package/src/components/layout/Skeleton/Skeleton.test.stories.tsx +521 -0
  474. package/src/components/layout/Skeleton/Skeleton.tsx +166 -0
  475. package/src/components/layout/Skeleton/Skeleton.types.ts +19 -0
  476. package/src/components/layout/Skeleton/index.ts +2 -0
  477. package/src/components/layout/Spacer/Spacer.md +84 -0
  478. package/src/components/layout/Spacer/Spacer.stories.tsx +502 -0
  479. package/src/components/layout/Spacer/Spacer.test.stories.tsx +472 -0
  480. package/src/components/layout/Spacer/Spacer.tsx +68 -0
  481. package/src/components/layout/Spacer/Spacer.types.ts +12 -0
  482. package/src/components/layout/Spacer/index.ts +2 -0
  483. package/src/components/layout/TableFilter/TableFilter.md +55 -0
  484. package/src/components/layout/TableFilter/TableFilter.stories.tsx +82 -0
  485. package/src/components/layout/TableFilter/TableFilter.test.stories.tsx +87 -0
  486. package/src/components/layout/TableFilter/TableFilter.tsx +383 -0
  487. package/src/components/layout/TableFilter/TableFilter.types.ts +87 -0
  488. package/src/components/layout/TableFilter/TableFilterContext.tsx +29 -0
  489. package/src/components/layout/TableFilter/index.ts +15 -0
  490. package/src/components/layout/TableFilter/tests.md +37 -0
  491. package/src/components/layout/TableFilter/track.md +36 -0
  492. package/src/components/layout/index.ts +14 -0
  493. package/src/components/navigation/Breadcrumbs/Breadcrumbs.md +558 -0
  494. package/src/components/navigation/Breadcrumbs/Breadcrumbs.stories.tsx +640 -0
  495. package/src/components/navigation/Breadcrumbs/Breadcrumbs.test.stories.tsx +1007 -0
  496. package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +516 -0
  497. package/src/components/navigation/Breadcrumbs/Breadcrumbs.types.ts +132 -0
  498. package/src/components/navigation/Breadcrumbs/index.ts +2 -0
  499. package/src/components/navigation/CommandPalette/CommandPalette.md +201 -0
  500. package/src/components/navigation/CommandPalette/CommandPalette.stories.tsx +384 -0
  501. package/src/components/navigation/CommandPalette/CommandPalette.test.stories.tsx +437 -0
  502. package/src/components/navigation/CommandPalette/CommandPalette.tsx +434 -0
  503. package/src/components/navigation/CommandPalette/CommandPalette.types.ts +25 -0
  504. package/src/components/navigation/CommandPalette/index.ts +2 -0
  505. package/src/components/navigation/ContextMenu/ContextMenu.md +535 -0
  506. package/src/components/navigation/ContextMenu/ContextMenu.stories.tsx +611 -0
  507. package/src/components/navigation/ContextMenu/ContextMenu.test.stories.tsx +850 -0
  508. package/src/components/navigation/ContextMenu/ContextMenu.tsx +254 -0
  509. package/src/components/navigation/ContextMenu/ContextMenu.types.ts +96 -0
  510. package/src/components/navigation/ContextMenu/index.ts +2 -0
  511. package/src/components/navigation/DropdownMenu/DropdownMenu.md +514 -0
  512. package/src/components/navigation/DropdownMenu/DropdownMenu.stories.tsx +580 -0
  513. package/src/components/navigation/DropdownMenu/DropdownMenu.test.stories.tsx +660 -0
  514. package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +305 -0
  515. package/src/components/navigation/DropdownMenu/DropdownMenu.types.ts +116 -0
  516. package/src/components/navigation/DropdownMenu/index.ts +2 -0
  517. package/src/components/navigation/NavigationMenu/NavigationMenu.md +580 -0
  518. package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +874 -0
  519. package/src/components/navigation/NavigationMenu/NavigationMenu.types.ts +135 -0
  520. package/src/components/navigation/NavigationMenu/index.ts +2 -0
  521. package/src/components/navigation/NavigationMenu/stories/NavigationMenu.stories.tsx +518 -0
  522. package/src/components/navigation/NavigationMenu/stories/NavigationMenu.test.stories.tsx +931 -0
  523. package/src/components/navigation/NavigationMenu/stories/NavigationMenuHorizontal.stories.tsx +503 -0
  524. package/src/components/navigation/NavigationMenu/stories/NavigationMenuVertical.stories.tsx +455 -0
  525. package/src/components/navigation/Pagination/Pagination.md +699 -0
  526. package/src/components/navigation/Pagination/Pagination.stories.tsx +604 -0
  527. package/src/components/navigation/Pagination/Pagination.test.stories.tsx +520 -0
  528. package/src/components/navigation/Pagination/Pagination.tsx +356 -0
  529. package/src/components/navigation/Pagination/Pagination.types.ts +129 -0
  530. package/src/components/navigation/Pagination/index.ts +2 -0
  531. package/src/components/navigation/Tabs/Tabs.md +774 -0
  532. package/src/components/navigation/Tabs/Tabs.stories.tsx +1006 -0
  533. package/src/components/navigation/Tabs/Tabs.test.stories.tsx +1225 -0
  534. package/src/components/navigation/Tabs/Tabs.tsx +433 -0
  535. package/src/components/navigation/Tabs/Tabs.types.ts +239 -0
  536. package/src/components/navigation/Tabs/index.ts +2 -0
  537. package/src/components/navigation/index.ts +7 -0
  538. package/src/components/typography/Blockquote/Blockquote.md +130 -0
  539. package/src/components/typography/Blockquote/Blockquote.stories.tsx +359 -0
  540. package/src/components/typography/Blockquote/Blockquote.test.stories.tsx +432 -0
  541. package/src/components/typography/Blockquote/Blockquote.tsx +166 -0
  542. package/src/components/typography/Blockquote/Blockquote.types.ts +11 -0
  543. package/src/components/typography/Blockquote/index.ts +2 -0
  544. package/src/components/typography/Code/Code.md +182 -0
  545. package/src/components/typography/Code/Code.stories.tsx +686 -0
  546. package/src/components/typography/Code/Code.test.stories.tsx +703 -0
  547. package/src/components/typography/Code/Code.tsx +228 -0
  548. package/src/components/typography/Code/Code.types.ts +12 -0
  549. package/src/components/typography/Code/index.ts +2 -0
  550. package/src/components/typography/Heading/Heading.md +143 -0
  551. package/src/components/typography/Heading/Heading.stories.tsx +451 -0
  552. package/src/components/typography/Heading/Heading.test.stories.tsx +830 -0
  553. package/src/components/typography/Heading/Heading.tsx +178 -0
  554. package/src/components/typography/Heading/Heading.types.ts +11 -0
  555. package/src/components/typography/Heading/index.ts +2 -0
  556. package/src/components/typography/Paragraph/Paragraph.md +80 -0
  557. package/src/components/typography/Paragraph/Paragraph.stories.tsx +280 -0
  558. package/src/components/typography/Paragraph/Paragraph.test.stories.tsx +238 -0
  559. package/src/components/typography/Paragraph/Paragraph.tsx +99 -0
  560. package/src/components/typography/Paragraph/Paragraph.types.ts +10 -0
  561. package/src/components/typography/Paragraph/index.ts +2 -0
  562. package/src/components/typography/Text/Text.md +129 -0
  563. package/src/components/typography/Text/Text.stories.tsx +359 -0
  564. package/src/components/typography/Text/Text.test.stories.tsx +762 -0
  565. package/src/components/typography/Text/Text.tsx +159 -0
  566. package/src/components/typography/Text/Text.types.ts +15 -0
  567. package/src/components/typography/Text/index.ts +2 -0
  568. package/src/components/typography/index.ts +5 -0
  569. package/src/components/utility/AnimatedIcon/AnimatedIcon.md +359 -0
  570. package/src/components/utility/AnimatedIcon/AnimatedIcon.stories.tsx +947 -0
  571. package/src/components/utility/AnimatedIcon/AnimatedIcon.test.stories.tsx +596 -0
  572. package/src/components/utility/AnimatedIcon/AnimatedIcon.tsx +595 -0
  573. package/src/components/utility/AnimatedIcon/AnimatedIcon.types.ts +98 -0
  574. package/src/components/utility/AnimatedIcon/index.ts +2 -0
  575. package/src/components/utility/AspectRatio/AspectRatio.md +200 -0
  576. package/src/components/utility/AspectRatio/AspectRatio.stories.tsx +414 -0
  577. package/src/components/utility/AspectRatio/AspectRatio.test.stories.tsx +859 -0
  578. package/src/components/utility/AspectRatio/AspectRatio.tsx +76 -0
  579. package/src/components/utility/AspectRatio/AspectRatio.types.ts +13 -0
  580. package/src/components/utility/AspectRatio/index.ts +2 -0
  581. package/src/components/utility/InfiniteScroll/InfiniteScroll.md +531 -0
  582. package/src/components/utility/InfiniteScroll/InfiniteScroll.stories.tsx +620 -0
  583. package/src/components/utility/InfiniteScroll/InfiniteScroll.test.stories.tsx +358 -0
  584. package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +204 -0
  585. package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +39 -0
  586. package/src/components/utility/InfiniteScroll/index.ts +6 -0
  587. package/src/components/utility/Portal/Portal.button-container.example.tsx +99 -0
  588. package/src/components/utility/Portal/Portal.md +593 -0
  589. package/src/components/utility/Portal/Portal.stories.tsx +340 -0
  590. package/src/components/utility/Portal/Portal.test.stories.tsx +2086 -0
  591. package/src/components/utility/Portal/Portal.tsx +39 -0
  592. package/src/components/utility/Portal/Portal.types.ts +7 -0
  593. package/src/components/utility/Portal/index.ts +2 -0
  594. package/src/components/utility/Transition/Transition.md +684 -0
  595. package/src/components/utility/Transition/Transition.stories.tsx +493 -0
  596. package/src/components/utility/Transition/Transition.test.stories.tsx +854 -0
  597. package/src/components/utility/Transition/Transition.tsx +140 -0
  598. package/src/components/utility/Transition/Transition.types.ts +14 -0
  599. package/src/components/utility/Transition/index.ts +6 -0
  600. package/src/components/utility/VirtualList/VirtualList.md +520 -0
  601. package/src/components/utility/VirtualList/VirtualList.stories.tsx +1073 -0
  602. package/src/components/utility/VirtualList/VirtualList.test.stories.tsx +1074 -0
  603. package/src/components/utility/VirtualList/VirtualList.tsx +369 -0
  604. package/src/components/utility/VirtualList/VirtualList.types.ts +56 -0
  605. package/src/components/utility/VirtualList/index.ts +7 -0
  606. package/src/components/utility/WorkflowStep/WorkflowStep.md +187 -0
  607. package/src/components/utility/WorkflowStep/WorkflowStep.stories.tsx +433 -0
  608. package/src/components/utility/WorkflowStep/WorkflowStep.test.stories.tsx +364 -0
  609. package/src/components/utility/WorkflowStep/WorkflowStep.tsx +506 -0
  610. package/src/components/utility/WorkflowStep/WorkflowStep.types.ts +133 -0
  611. package/src/components/utility/WorkflowStep/index.ts +13 -0
  612. package/src/components/utility/index.ts +7 -0
  613. package/src/index.ts +17 -0
  614. package/src/mui/AppBar.ts +2 -0
  615. package/src/mui/Box.ts +2 -0
  616. package/src/mui/CssBaseline.ts +2 -0
  617. package/src/mui/FormControl.ts +2 -0
  618. package/src/mui/FormControlLabel.ts +2 -0
  619. package/src/mui/Grid2.ts +2 -0
  620. package/src/mui/InputLabel.ts +2 -0
  621. package/src/mui/List.ts +2 -0
  622. package/src/mui/ListItem.ts +2 -0
  623. package/src/mui/ListItemButton.ts +2 -0
  624. package/src/mui/ListItemText.ts +2 -0
  625. package/src/mui/Stack.ts +2 -0
  626. package/src/mui/SvgIcon.ts +2 -0
  627. package/src/mui/Toolbar.ts +2 -0
  628. package/src/mui/styles.ts +2 -0
  629. package/src/mui/useMediaQuery.ts +1 -0
  630. package/src/social-login-button.tsx +199 -0
  631. package/src/user-avatar.tsx +102 -0
  632. package/src/utils/cn.ts +9 -0
  633. package/src/utils/index.ts +1 -0
@@ -0,0 +1,725 @@
1
+ # Accordion Component
2
+
3
+ A customizable collapsible panel component for organizing and displaying content in a space-efficient manner.
4
+
5
+ ## Overview
6
+
7
+ The Accordion component provides expandable/collapsible content sections with smooth animations and flexible styling options. It supports single or multiple panel expansion, keyboard navigation, and comprehensive accessibility features.
8
+
9
+ ## Props
10
+
11
+ ### Accordion Props
12
+
13
+ | Prop | Type | Default | Description |
14
+ |------|------|---------|-------------|
15
+ | `children` | ReactNode | - | The content of the accordion (AccordionSummary and AccordionDetails) |
16
+ | `defaultExpanded` | boolean | false | If true, the accordion is expanded by default |
17
+ | `disabled` | boolean | false | If true, the accordion is disabled |
18
+ | `expanded` | boolean | - | If true, the accordion is expanded (controlled) |
19
+ | `onChange` | function | - | Callback fired when the accordion state changes |
20
+ | `variant` | 'default' \| 'glass' \| 'bordered' \| 'separated' | 'default' | Visual style variant |
21
+ | `TransitionComponent` | elementType | Collapse | The component used for the collapse transition |
22
+ | `TransitionProps` | object | - | Props applied to the transition element |
23
+
24
+ ### AccordionSummary Props
25
+
26
+ | Prop | Type | Default | Description |
27
+ |------|------|---------|-------------|
28
+ | `children` | ReactNode | - | The content of the accordion summary |
29
+ | `expandIcon` | ReactNode | - | The icon to display as the expand indicator |
30
+ | `focusVisibleClassName` | string | - | Class applied when the summary is keyboard focused |
31
+ | `onClick` | function | - | Callback fired when the summary is clicked |
32
+
33
+ ### AccordionDetails Props
34
+
35
+ | Prop | Type | Default | Description |
36
+ |------|------|---------|-------------|
37
+ | `children` | ReactNode | - | The content of the accordion details |
38
+ | `sx` | object | - | System sx prop for custom styling |
39
+
40
+ ### AccordionActions Props
41
+
42
+ | Prop | Type | Default | Description |
43
+ |------|------|---------|-------------|
44
+ | `children` | ReactNode | - | Action buttons for the accordion |
45
+ | `disableSpacing` | boolean | false | If true, removes additional spacing between actions |
46
+
47
+ ## Usage
48
+
49
+ ### Basic Usage
50
+
51
+ ```tsx
52
+ import { Accordion, AccordionSummary, AccordionDetails } from '@mui/material';
53
+ import { ExpandMore } from '@mui/icons-material';
54
+
55
+ function BasicAccordion() {
56
+ return (
57
+ <Accordion>
58
+ <AccordionSummary expandIcon={<ExpandMore />}>
59
+ <Typography>Accordion Title</Typography>
60
+ </AccordionSummary>
61
+ <AccordionDetails>
62
+ <Typography>
63
+ Accordion content goes here.
64
+ </Typography>
65
+ </AccordionDetails>
66
+ </Accordion>
67
+ );
68
+ }
69
+ ```
70
+
71
+ ### Controlled Accordion
72
+
73
+ ```tsx
74
+ function ControlledAccordion() {
75
+ const [expanded, setExpanded] = useState(false);
76
+
77
+ const handleChange = (event, isExpanded) => {
78
+ setExpanded(isExpanded);
79
+ };
80
+
81
+ return (
82
+ <Accordion expanded={expanded} onChange={handleChange}>
83
+ <AccordionSummary expandIcon={<ExpandMore />}>
84
+ <Typography>Controlled Accordion</Typography>
85
+ </AccordionSummary>
86
+ <AccordionDetails>
87
+ <Typography>This accordion's state is controlled.</Typography>
88
+ </AccordionDetails>
89
+ </Accordion>
90
+ );
91
+ }
92
+ ```
93
+
94
+ ### Multiple Accordions with Exclusive Expansion
95
+
96
+ ```tsx
97
+ function ExclusiveAccordions() {
98
+ const [expanded, setExpanded] = useState(false);
99
+
100
+ const handleChange = (panel) => (event, isExpanded) => {
101
+ setExpanded(isExpanded ? panel : false);
102
+ };
103
+
104
+ return (
105
+ <>
106
+ <Accordion expanded={expanded === 'panel1'} onChange={handleChange('panel1')}>
107
+ <AccordionSummary expandIcon={<ExpandMore />}>
108
+ <Typography>Panel 1</Typography>
109
+ </AccordionSummary>
110
+ <AccordionDetails>
111
+ <Typography>Content for panel 1</Typography>
112
+ </AccordionDetails>
113
+ </Accordion>
114
+
115
+ <Accordion expanded={expanded === 'panel2'} onChange={handleChange('panel2')}>
116
+ <AccordionSummary expandIcon={<ExpandMore />}>
117
+ <Typography>Panel 2</Typography>
118
+ </AccordionSummary>
119
+ <AccordionDetails>
120
+ <Typography>Content for panel 2</Typography>
121
+ </AccordionDetails>
122
+ </Accordion>
123
+ </>
124
+ );
125
+ }
126
+ ```
127
+
128
+ ### With Actions
129
+
130
+ ```tsx
131
+ function AccordionWithActions() {
132
+ return (
133
+ <Accordion>
134
+ <AccordionSummary expandIcon={<ExpandMore />}>
135
+ <Typography>Settings</Typography>
136
+ </AccordionSummary>
137
+ <AccordionDetails>
138
+ <Typography>Configure your settings here.</Typography>
139
+ </AccordionDetails>
140
+ <AccordionActions>
141
+ <Button>Cancel</Button>
142
+ <Button variant="contained">Save</Button>
143
+ </AccordionActions>
144
+ </Accordion>
145
+ );
146
+ }
147
+ ```
148
+
149
+ ## Variants
150
+
151
+ ### Default
152
+ Standard Material-UI accordion styling.
153
+
154
+ ### Glass
155
+ Features a frosted glass effect with backdrop blur and transparency.
156
+
157
+ ### Bordered
158
+ Clean borders with rounded corners.
159
+
160
+ ### Separated
161
+ Elevated shadows with spacing between items.
162
+
163
+ ## Accessibility
164
+
165
+ - **ARIA Attributes**: Proper `aria-expanded`, `aria-controls`, and `aria-labelledby` attributes
166
+ - **Keyboard Navigation**:
167
+ - `Tab` - Navigate between accordion headers
168
+ - `Enter` or `Space` - Expand/collapse focused accordion
169
+ - `Arrow Keys` - Navigate between accordion items when focused
170
+ - **Screen Reader Support**: Announces expansion state changes
171
+ - **Focus Management**: Maintains proper focus flow and visual focus indicators
172
+
173
+ ## Best Practices
174
+
175
+ 1. **Use clear, descriptive headers** that indicate the content within each section
176
+ 2. **Keep content concise** to maintain a good user experience
177
+ 3. **Consider default expanded state** for important content that users should see immediately
178
+ 4. **Group related content** in the same accordion panel
179
+ 5. **Provide visual feedback** for hover and focus states
180
+ 6. **Test with keyboard navigation** to ensure accessibility
181
+
182
+ ## Performance Considerations
183
+
184
+ - Use `React.memo` for expensive child components to prevent unnecessary re-renders
185
+ - Consider lazy loading content for accordions with heavy content
186
+ - Limit the number of accordions on a single page for better performance
187
+ - Use the `TransitionProps` to customize animation duration for better perceived performance
188
+
189
+ ## Testing
190
+
191
+ ### Test IDs
192
+
193
+ This document describes all `data-testid` attributes available in the Accordion component for testing purposes.
194
+
195
+ #### Container Elements
196
+
197
+ ##### `accordion` (customizable)
198
+ - **Element:** Main Accordion container
199
+ - **Location:** Root MuiAccordion element
200
+ - **Usage:** Query the main accordion to verify it's rendered
201
+ - **Note:** This is the default value, but can be overridden via the `data-testid` prop
202
+ ```typescript
203
+ const accordion = await canvas.findByTestId('accordion');
204
+ expect(accordion).toBeInTheDocument();
205
+ ```
206
+
207
+ #### Header/Summary Elements
208
+
209
+ ##### `accordion-summary` (customizable)
210
+ - **Element:** Accordion header/summary that users click to expand/collapse
211
+ - **Location:** AccordionSummary component
212
+ - **Usage:** Query the clickable header element
213
+ - **Note:** This is the default value, but can be overridden via the `data-testid` prop
214
+ ```typescript
215
+ const summary = await canvas.findByTestId('accordion-summary');
216
+ await userEvent.click(summary);
217
+ ```
218
+
219
+ ##### `accordion-icon`
220
+ - **Element:** Expand/collapse icon (typically ExpandMore icon)
221
+ - **Location:** Icon element passed to AccordionSummary via `expandIcon` prop
222
+ - **Usage:** Query to verify the expand/collapse icon is rendered
223
+ - **Note:** Automatically added to any valid React element passed as `expandIcon`
224
+ ```typescript
225
+ const icon = await canvas.findByTestId('accordion-icon');
226
+ expect(icon).toBeInTheDocument();
227
+ ```
228
+
229
+ #### Content Elements
230
+
231
+ ##### `accordion-details` (customizable)
232
+ - **Element:** Accordion content panel that expands/collapses
233
+ - **Location:** AccordionDetails component
234
+ - **Usage:** Query the content area of the accordion
235
+ - **Note:** This is the default value, but can be overridden via the `data-testid` prop
236
+ ```typescript
237
+ const details = await canvas.findByTestId('accordion-details');
238
+ expect(details).toBeInTheDocument();
239
+ ```
240
+
241
+ ##### `accordion-actions` (customizable)
242
+ - **Element:** Optional actions footer (buttons, links, etc.)
243
+ - **Location:** AccordionActions component
244
+ - **Usage:** Query the actions area at the bottom of the accordion
245
+ - **Note:** This is the default value, but can be overridden via the `data-testid` prop
246
+ ```typescript
247
+ const actions = await canvas.findByTestId('accordion-actions');
248
+ const buttons = within(actions).getAllByRole('button');
249
+ expect(buttons).toHaveLength(2);
250
+ ```
251
+
252
+ ### Test Patterns
253
+
254
+ #### Wait for Accordion to Render
255
+ ```typescript
256
+ import { waitFor, within } from 'storybook/test';
257
+
258
+ // Wait for accordion
259
+ const accordion = await canvas.findByTestId('accordion');
260
+
261
+ // Wait for summary to be interactive
262
+ await waitFor(async () => {
263
+ const summary = await canvas.findByTestId('accordion-summary');
264
+ expect(summary).toBeEnabled();
265
+ }, { timeout: 3000 });
266
+ ```
267
+
268
+ #### Test Expand/Collapse Interaction
269
+ ```typescript
270
+ // Get summary element
271
+ const summary = await canvas.findByTestId('accordion-summary');
272
+
273
+ // Verify it's collapsed initially
274
+ const accordion = await canvas.findByTestId('accordion');
275
+ expect(accordion).not.toHaveClass('Mui-expanded');
276
+
277
+ // Click to expand
278
+ await userEvent.click(summary);
279
+
280
+ // Wait for expansion
281
+ await waitFor(() => {
282
+ expect(accordion).toHaveClass('Mui-expanded');
283
+ }, { timeout: 1000 });
284
+
285
+ // Verify content is visible
286
+ const details = await canvas.findByTestId('accordion-details');
287
+ expect(details).toBeVisible();
288
+ ```
289
+
290
+ #### Test Icon Rotation
291
+ ```typescript
292
+ const icon = await canvas.findByTestId('accordion-icon');
293
+ const summary = await canvas.findByTestId('accordion-summary');
294
+
295
+ // Get icon wrapper element
296
+ const iconWrapper = icon.closest('.MuiAccordionSummary-expandIconWrapper');
297
+
298
+ // Check initial state (not rotated)
299
+ expect(iconWrapper).not.toHaveClass('Mui-expanded');
300
+
301
+ // Expand accordion
302
+ await userEvent.click(summary);
303
+
304
+ // Verify icon rotated
305
+ await waitFor(() => {
306
+ expect(iconWrapper).toHaveClass('Mui-expanded');
307
+ });
308
+ ```
309
+
310
+ #### Test Multiple Accordions
311
+ ```typescript
312
+ // When using custom testIds in a list
313
+ const accordions = [
314
+ { testId: 'accordion-settings', label: 'Settings' },
315
+ { testId: 'accordion-security', label: 'Security' },
316
+ { testId: 'accordion-notifications', label: 'Notifications' },
317
+ ];
318
+
319
+ for (const { testId, label } of accordions) {
320
+ const accordion = await canvas.findByTestId(testId);
321
+ expect(accordion).toBeInTheDocument();
322
+
323
+ // Verify label is present
324
+ const text = await within(accordion).findByText(label);
325
+ expect(text).toBeInTheDocument();
326
+ }
327
+ ```
328
+
329
+ #### Test Controlled Accordion Behavior
330
+ ```typescript
331
+ // Expand first accordion
332
+ const summary1 = await canvas.findByTestId('accordion-1-summary');
333
+ await userEvent.click(summary1);
334
+
335
+ // Verify first is expanded
336
+ const accordion1 = await canvas.findByTestId('accordion-1');
337
+ expect(accordion1).toHaveClass('Mui-expanded');
338
+
339
+ // Expand second accordion (controlled - first should close)
340
+ const summary2 = await canvas.findByTestId('accordion-2-summary');
341
+ await userEvent.click(summary2);
342
+
343
+ // Wait for state change
344
+ await waitFor(() => {
345
+ expect(accordion1).not.toHaveClass('Mui-expanded');
346
+ const accordion2 = canvas.getByTestId('accordion-2');
347
+ expect(accordion2).toHaveClass('Mui-expanded');
348
+ });
349
+ ```
350
+
351
+ #### Test Accordion Actions
352
+ ```typescript
353
+ const actions = await canvas.findByTestId('accordion-actions');
354
+
355
+ // Find buttons within actions
356
+ const buttons = within(actions).getAllByRole('button');
357
+ expect(buttons).toHaveLength(2);
358
+
359
+ // Test button interactions
360
+ const saveButton = within(actions).getByText('Save');
361
+ await userEvent.click(saveButton);
362
+
363
+ // Verify callback was called
364
+ expect(args.onSave).toHaveBeenCalled();
365
+ ```
366
+
367
+ ### Props That Affect Test Behavior
368
+
369
+ #### `variant`
370
+ - **Values:** `'default' | 'glass' | 'bordered' | 'separated'`
371
+ - **Impact:**
372
+ - `default`: Standard Material-UI styling
373
+ - `glass`: Frosted glass effect with backdrop blur
374
+ - `bordered`: Clean borders with rounded corners
375
+ - `separated`: Elevated shadows with spacing between items
376
+
377
+ #### `disabled`
378
+ - **Values:** `boolean`
379
+ - **Impact:** Disables interaction with the accordion
380
+ - **Test Tip:** Use `toBeDisabled()` matcher
381
+ ```typescript
382
+ const accordion = await canvas.findByTestId('accordion');
383
+ expect(accordion).toBeDisabled();
384
+ ```
385
+
386
+ #### `defaultExpanded`
387
+ - **Values:** `boolean`
388
+ - **Impact:** Sets initial expanded state (uncontrolled)
389
+ - **Test Tip:** Check for `Mui-expanded` class on mount
390
+
391
+ #### `expanded`
392
+ - **Values:** `boolean | undefined`
393
+ - **Impact:** Controls expanded state (controlled mode)
394
+ - **Test Tip:** Accordion only changes when this prop changes
395
+
396
+ #### `onChange`
397
+ - **Values:** `(event: React.SyntheticEvent, expanded: boolean) => void`
398
+ - **Impact:** Callback fired when accordion state changes
399
+ - **Test Tip:** Use to create controlled accordion behavior
400
+
401
+ ### Common Test Scenarios
402
+
403
+ #### 1. Basic Rendering Test
404
+ ```typescript
405
+ play: async ({ canvasElement }) => {
406
+ const canvas = within(canvasElement);
407
+
408
+ // Wait for accordion to render
409
+ const accordion = await canvas.findByTestId('accordion');
410
+ expect(accordion).toBeInTheDocument();
411
+
412
+ // Verify summary is present
413
+ const summary = await canvas.findByTestId('accordion-summary');
414
+ expect(summary).toBeInTheDocument();
415
+ }
416
+ ```
417
+
418
+ #### 2. Expansion Test
419
+ ```typescript
420
+ play: async ({ canvasElement }) => {
421
+ const canvas = within(canvasElement);
422
+
423
+ // Get elements
424
+ const summary = await canvas.findByTestId('accordion-summary');
425
+ const accordion = await canvas.findByTestId('accordion');
426
+
427
+ // Initially collapsed
428
+ expect(accordion).not.toHaveClass('Mui-expanded');
429
+
430
+ // Click to expand
431
+ await userEvent.click(summary);
432
+
433
+ // Wait for expansion
434
+ await waitFor(() => {
435
+ expect(accordion).toHaveClass('Mui-expanded');
436
+ });
437
+
438
+ // Content should be visible
439
+ const details = await canvas.findByTestId('accordion-details');
440
+ expect(details).toBeVisible();
441
+ }
442
+ ```
443
+
444
+ #### 3. Icon Test
445
+ ```typescript
446
+ play: async ({ canvasElement }) => {
447
+ const canvas = within(canvasElement);
448
+
449
+ // Verify icon is present
450
+ const icon = await canvas.findByTestId('accordion-icon');
451
+ expect(icon).toBeInTheDocument();
452
+
453
+ // Get icon wrapper
454
+ const wrapper = icon.closest('.MuiAccordionSummary-expandIconWrapper');
455
+ expect(wrapper).toBeInTheDocument();
456
+ }
457
+ ```
458
+
459
+ #### 4. Actions Test
460
+ ```typescript
461
+ play: async ({ canvasElement, args }) => {
462
+ const canvas = within(canvasElement);
463
+
464
+ // Expand accordion first
465
+ const summary = await canvas.findByTestId('accordion-summary');
466
+ await userEvent.click(summary);
467
+
468
+ // Wait for actions to be visible
469
+ const actions = await canvas.findByTestId('accordion-actions');
470
+ expect(actions).toBeVisible();
471
+
472
+ // Test action buttons
473
+ const saveButton = within(actions).getByText('Save');
474
+ await userEvent.click(saveButton);
475
+ }
476
+ ```
477
+
478
+ #### 5. Disabled State Test
479
+ ```typescript
480
+ play: async ({ canvasElement }) => {
481
+ const canvas = within(canvasElement);
482
+
483
+ // Get disabled accordion
484
+ const accordion = await canvas.findByTestId('accordion');
485
+ expect(accordion).toHaveClass('Mui-disabled');
486
+
487
+ // Summary should not be clickable
488
+ const summary = await canvas.findByTestId('accordion-summary');
489
+
490
+ // Attempt to click (should not expand)
491
+ await userEvent.click(summary);
492
+
493
+ // Verify still collapsed
494
+ expect(accordion).not.toHaveClass('Mui-expanded');
495
+ }
496
+ ```
497
+
498
+ #### 6. Variant Styling Test
499
+ ```typescript
500
+ play: async ({ canvasElement, args }) => {
501
+ const canvas = within(canvasElement);
502
+
503
+ const accordion = await canvas.findByTestId('accordion');
504
+ const style = window.getComputedStyle(accordion);
505
+
506
+ // Test based on variant
507
+ if (args.variant === 'glass') {
508
+ expect(style.backdropFilter).toContain('blur');
509
+ } else if (args.variant === 'bordered') {
510
+ expect(style.border).not.toBe('none');
511
+ } else if (args.variant === 'separated') {
512
+ expect(style.boxShadow).not.toBe('none');
513
+ }
514
+ }
515
+ ```
516
+
517
+ #### 7. Keyboard Navigation Test
518
+ ```typescript
519
+ play: async ({ canvasElement }) => {
520
+ const canvas = within(canvasElement);
521
+
522
+ const summary = await canvas.findByTestId('accordion-summary');
523
+
524
+ // Focus the summary
525
+ summary.focus();
526
+ expect(summary).toHaveFocus();
527
+
528
+ // Press Enter to expand
529
+ await userEvent.keyboard('{Enter}');
530
+
531
+ // Wait for expansion
532
+ const accordion = await canvas.findByTestId('accordion');
533
+ await waitFor(() => {
534
+ expect(accordion).toHaveClass('Mui-expanded');
535
+ });
536
+
537
+ // Press Space to collapse
538
+ await userEvent.keyboard(' ');
539
+
540
+ // Wait for collapse
541
+ await waitFor(() => {
542
+ expect(accordion).not.toHaveClass('Mui-expanded');
543
+ });
544
+ }
545
+ ```
546
+
547
+ #### 8. Multiple Accordions Group Test
548
+ ```typescript
549
+ play: async ({ canvasElement }) => {
550
+ const canvas = within(canvasElement);
551
+
552
+ // Define accordion identifiers
553
+ const accordionIds = ['settings', 'security', 'notifications'];
554
+
555
+ // Test each accordion
556
+ for (const id of accordionIds) {
557
+ const summary = await canvas.findByTestId(`accordion-${id}-summary`);
558
+ const accordion = await canvas.findByTestId(`accordion-${id}`);
559
+
560
+ // Expand
561
+ await userEvent.click(summary);
562
+
563
+ // Verify expanded
564
+ await waitFor(() => {
565
+ expect(accordion).toHaveClass('Mui-expanded');
566
+ });
567
+
568
+ // Collapse
569
+ await userEvent.click(summary);
570
+
571
+ // Verify collapsed
572
+ await waitFor(() => {
573
+ expect(accordion).not.toHaveClass('Mui-expanded');
574
+ });
575
+ }
576
+ }
577
+ ```
578
+
579
+ ### Customizing Test IDs
580
+
581
+ All testIds can be customized via props:
582
+
583
+ ```typescript
584
+ <Accordion data-testid="custom-accordion">
585
+ <AccordionSummary
586
+ data-testid="custom-summary"
587
+ expandIcon={<ExpandMore />}
588
+ >
589
+ <Typography>Title</Typography>
590
+ </AccordionSummary>
591
+ <AccordionDetails data-testid="custom-details">
592
+ <Typography>Content</Typography>
593
+ </AccordionDetails>
594
+ <AccordionActions data-testid="custom-actions">
595
+ <Button>Save</Button>
596
+ </AccordionActions>
597
+ </Accordion>
598
+ ```
599
+
600
+ #### Testing with Custom IDs
601
+ ```typescript
602
+ const accordion = await canvas.findByTestId('custom-accordion');
603
+ const summary = await canvas.findByTestId('custom-summary');
604
+ const details = await canvas.findByTestId('custom-details');
605
+ const actions = await canvas.findByTestId('custom-actions');
606
+ ```
607
+
608
+ #### Dynamic Test IDs for Lists
609
+ ```typescript
610
+ // When rendering multiple accordions
611
+ {items.map((item, index) => (
612
+ <Accordion key={item.id} data-testid={`accordion-${index}`}>
613
+ <AccordionSummary data-testid={`accordion-summary-${index}`}>
614
+ <Typography>{item.title}</Typography>
615
+ </AccordionSummary>
616
+ <AccordionDetails data-testid={`accordion-details-${index}`}>
617
+ <Typography>{item.content}</Typography>
618
+ </AccordionDetails>
619
+ </Accordion>
620
+ ))}
621
+
622
+ // Testing
623
+ const firstAccordion = await canvas.findByTestId('accordion-0');
624
+ const firstSummary = await canvas.findByTestId('accordion-summary-0');
625
+ ```
626
+
627
+ ### Troubleshooting
628
+
629
+ #### Issue: "Unable to find element with testId X"
630
+
631
+ **Solution:** Always use `await` with `findByTestId`:
632
+ ```typescript
633
+ // Wrong - synchronous
634
+ const element = canvas.getByTestId('accordion');
635
+
636
+ // Correct - asynchronous
637
+ const element = await canvas.findByTestId('accordion');
638
+ ```
639
+
640
+ #### Issue: Test fails when checking if accordion is expanded
641
+
642
+ **Solution:** Use `waitFor` to handle animation timing:
643
+ ```typescript
644
+ await userEvent.click(summary);
645
+
646
+ // Wrong - may fail due to animation
647
+ expect(accordion).toHaveClass('Mui-expanded');
648
+
649
+ // Correct - waits for animation
650
+ await waitFor(() => {
651
+ expect(accordion).toHaveClass('Mui-expanded');
652
+ }, { timeout: 1000 });
653
+ ```
654
+
655
+ #### Issue: Can't click accordion summary
656
+
657
+ **Solution:** Ensure accordion is not disabled and element is in viewport:
658
+ ```typescript
659
+ const summary = await canvas.findByTestId('accordion-summary');
660
+
661
+ // Check if enabled
662
+ expect(summary).toBeEnabled();
663
+
664
+ // Scroll into view if needed
665
+ summary.scrollIntoView();
666
+
667
+ // Then click
668
+ await userEvent.click(summary);
669
+ ```
670
+
671
+ #### Issue: Content not visible after expanding
672
+
673
+ **Solution:** Wait for the content to become visible:
674
+ ```typescript
675
+ await userEvent.click(summary);
676
+
677
+ const details = await canvas.findByTestId('accordion-details');
678
+
679
+ await waitFor(() => {
680
+ expect(details).toBeVisible();
681
+ }, { timeout: 1000 });
682
+ ```
683
+
684
+ #### Issue: Icon testId not found
685
+
686
+ **Solution:** The icon testId is only added if a valid React element is passed as `expandIcon`:
687
+ ```typescript
688
+ // Will have testId
689
+ <AccordionSummary expandIcon={<ExpandMore />}>
690
+
691
+ // Won't have testId (null/undefined)
692
+ <AccordionSummary expandIcon={null}>
693
+
694
+ // Test with conditional check
695
+ const icon = canvas.queryByTestId('accordion-icon');
696
+ if (icon) {
697
+ expect(icon).toBeInTheDocument();
698
+ }
699
+ ```
700
+
701
+ ### Best Practices
702
+
703
+ 1. **Always use async/await** with testId queries in Storybook tests
704
+ 2. **Use `waitFor`** when testing expand/collapse animations
705
+ 3. **Scope queries** with `within()` when looking inside specific components
706
+ 4. **Use custom testIds** for multiple accordions to avoid conflicts
707
+ 5. **Add timeouts** for animation-heavy tests: `{ timeout: 1000 }`
708
+ 6. **Test keyboard navigation** in addition to mouse clicks
709
+ 7. **Check both expanded and collapsed states** in tests
710
+
711
+ ### Related Components
712
+
713
+ - **MuiAccordion:** The base Material-UI accordion component
714
+ - **MuiAccordionSummary:** Clickable header with expand icon
715
+ - **MuiAccordionDetails:** Expandable content area
716
+ - **MuiAccordionActions:** Optional footer with action buttons
717
+
718
+ ### Change Log
719
+
720
+ - **2025-10-08:** Initial testId implementation
721
+ - Added `accordion` (customizable via prop, default: 'accordion')
722
+ - Added `accordion-summary` (customizable via prop, default: 'accordion-summary')
723
+ - Added `accordion-icon` (automatically added to expandIcon)
724
+ - Added `accordion-details` (customizable via prop, default: 'accordion-details')
725
+ - Added `accordion-actions` (customizable via prop, default: 'accordion-actions')