@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,684 @@
1
+ # Transition Component
2
+
3
+ A flexible and comprehensive transition wrapper component that provides smooth animations for UI elements using Material-UI's transition components.
4
+
5
+ ## Overview
6
+
7
+ The Transition component wraps content and applies various animation effects when elements enter or leave the DOM. It supports multiple transition variants including fade, slide, scale, collapse, grow, and zoom, with customizable timing, easing, and directional options.
8
+
9
+ ## Features
10
+
11
+ - **Multiple Transition Variants**: Choose from fade, slide, scale, collapse, grow, or zoom animations
12
+ - **Directional Control**: Slide transitions support up, down, left, and right directions
13
+ - **Customizable Timing**: Configure duration and delay for precise control
14
+ - **Theme Integration**: Automatically uses Material-UI theme values for consistent animations
15
+ - **Intelligent Defaults**: Each variant has optimized default timing and easing values
16
+ - **Flexible Configuration**: Supports both simple number values and complex enter/exit objects
17
+
18
+ ## Usage
19
+
20
+ ### Basic Usage
21
+
22
+ ```tsx
23
+ import { Transition } from '@procurement/ui';
24
+
25
+ // Simple fade transition
26
+ <Transition variant="fade" in={show}>
27
+ <Card>Your content here</Card>
28
+ </Transition>;
29
+ ```
30
+
31
+ ### With Direction (Slide)
32
+
33
+ ```tsx
34
+ <Transition variant="slide" direction="up" in={show}>
35
+ <Card>Slides up from bottom</Card>
36
+ </Transition>
37
+ ```
38
+
39
+ ### Custom Timing
40
+
41
+ ```tsx
42
+ <Transition
43
+ variant="fade"
44
+ in={show}
45
+ duration={500} // 500ms duration
46
+ delay={200} // 200ms delay before starting
47
+ >
48
+ <Card>Custom timing</Card>
49
+ </Transition>
50
+ ```
51
+
52
+ ### Complex Duration/Easing
53
+
54
+ ```tsx
55
+ <Transition
56
+ variant="scale"
57
+ in={show}
58
+ duration={{ enter: 300, exit: 200 }}
59
+ easing={{ enter: 'ease-out', exit: 'ease-in' }}
60
+ >
61
+ <Card>Different enter/exit timing</Card>
62
+ </Transition>
63
+ ```
64
+
65
+ ## Props
66
+
67
+ | Prop | Type | Default | Description |
68
+ | ----------- | ---------------------------------------------------------------- | ------------- | ---------------------------------- |
69
+ | `children` | `ReactNode` | - | Content to animate |
70
+ | `variant` | `'fade' \| 'slide' \| 'scale' \| 'collapse' \| 'grow' \| 'zoom'` | `'fade'` | Type of transition animation |
71
+ | `in` | `boolean` | - | Controls whether content is shown |
72
+ | `direction` | `'up' \| 'down' \| 'left' \| 'right'` | `'up'` | Direction for slide transitions |
73
+ | `duration` | `number \| { enter: number, exit: number }` | Theme default | Animation duration in milliseconds |
74
+ | `delay` | `number` | `0` | Delay before animation starts |
75
+ | `easing` | `string \| { enter: string, exit: string }` | Theme default | CSS easing function |
76
+
77
+ ## Transition Variants
78
+
79
+ ### Fade
80
+
81
+ Smoothly transitions opacity from 0 to 1. Best for subtle entrances and exits.
82
+
83
+ ### Slide
84
+
85
+ Slides content in from a specified direction. Perfect for panels, drawers, and directional reveals.
86
+
87
+ ### Scale/Grow
88
+
89
+ Scales content from 0 to full size from the center point. Great for popups and emphasis.
90
+
91
+ ### Collapse
92
+
93
+ Animates height from 0 to auto. Ideal for expandable sections and accordions.
94
+
95
+ ### Zoom
96
+
97
+ Sharp zoom effect with scaling transform. Good for dramatic entrances.
98
+
99
+ ## Accessibility
100
+
101
+ - Respects user's motion preferences via `prefers-reduced-motion`
102
+ - Properly manages focus during transitions
103
+ - Maintains ARIA attributes on wrapped content
104
+ - Supports keyboard navigation through transitioned elements
105
+
106
+ ## Best Practices
107
+
108
+ 1. **Choose Appropriate Variants**: Use fade for subtle changes, slide for directional movement, and scale/zoom for emphasis
109
+ 2. **Consistent Timing**: Use theme-based durations for consistency across your app
110
+ 3. **Performance**: Avoid transitioning too many elements simultaneously
111
+ 4. **Mobile Considerations**: Test transitions on lower-powered devices
112
+ 5. **Accessibility**: Provide options to disable animations for users who prefer reduced motion
113
+
114
+ ## Examples
115
+
116
+ ### Notification Banner
117
+
118
+ ```tsx
119
+ <Transition variant="slide" direction="down" in={showNotification}>
120
+ <Alert severity="info">New message received!</Alert>
121
+ </Transition>
122
+ ```
123
+
124
+ ### Modal Overlay
125
+
126
+ ```tsx
127
+ <Transition variant="fade" in={modalOpen} duration={300}>
128
+ <Backdrop />
129
+ </Transition>
130
+ <Transition variant="scale" in={modalOpen} delay={100}>
131
+ <Modal>Content</Modal>
132
+ </Transition>
133
+ ```
134
+
135
+ ### Collapsible FAQ
136
+
137
+ ```tsx
138
+ <Transition variant="collapse" in={expanded}>
139
+ <Box>
140
+ <Typography>Answer content that expands/collapses</Typography>
141
+ </Box>
142
+ </Transition>
143
+ ```
144
+
145
+ ## Related Components
146
+
147
+ - [Portal](../Portal) - For rendering content outside the DOM hierarchy
148
+ - [Modal](../../feedback/Modal) - Uses transitions for overlay effects
149
+ - [Drawer](../../layout/Drawer) - Implements slide transitions
150
+ - [Accordion](../../layout/Accordion) - Uses collapse transitions
151
+
152
+ ## Testing
153
+
154
+ This section describes all `data-testid` attributes available in the Transition component for testing purposes. The Transition component wraps Material-UI transition components (Fade, Slide, Grow, Collapse, Zoom) with consistent test IDs.
155
+
156
+ ### Test IDs
157
+
158
+ #### Container Elements
159
+
160
+ ##### `transition-wrapper`
161
+ - **Element:** MUI Transition component wrapper (Fade, Slide, Grow, Collapse, or Zoom)
162
+ - **Location:** Root transition component that handles animation
163
+ - **Usage:** Query the main transition wrapper to verify component is rendered and check transition state
164
+ ```typescript
165
+ const wrapper = await canvas.findByTestId('transition-wrapper');
166
+ expect(wrapper).toBeInTheDocument();
167
+
168
+ // Check if transition is active (in prop)
169
+ const style = window.getComputedStyle(wrapper);
170
+ expect(style.visibility).toBe('visible'); // When in=true
171
+ ```
172
+
173
+ ##### `transition-element`
174
+ - **Element:** Inner div that receives the transition effects
175
+ - **Location:** Direct child of the transition wrapper, contains the content
176
+ - **Usage:** Query the element being transitioned to check animation properties
177
+ ```typescript
178
+ const element = await canvas.findByTestId('transition-element');
179
+ expect(element).toBeInTheDocument();
180
+
181
+ // Check opacity during fade transition
182
+ const style = window.getComputedStyle(element);
183
+ expect(parseFloat(style.opacity)).toBeGreaterThan(0);
184
+ ```
185
+
186
+ ##### `transition-content`
187
+ - **Element:** Content container div
188
+ - **Location:** Innermost div that wraps the actual children content
189
+ - **Usage:** Query the content container to access child elements
190
+ ```typescript
191
+ const content = await canvas.findByTestId('transition-content');
192
+ const childText = within(content).getByText('Expected content');
193
+ expect(childText).toBeInTheDocument();
194
+ ```
195
+
196
+ ### Test Patterns
197
+
198
+ #### Wait for Transition to Complete
199
+
200
+ ##### Fade Transition
201
+ ```typescript
202
+ import { waitFor, within } from 'storybook/test';
203
+
204
+ // Wait for element to fade in
205
+ const element = await canvas.findByTestId('transition-element');
206
+
207
+ await waitFor(() => {
208
+ const style = window.getComputedStyle(element);
209
+ expect(parseFloat(style.opacity)).toBe(1);
210
+ }, { timeout: 3000 });
211
+ ```
212
+
213
+ ##### Slide Transition
214
+ ```typescript
215
+ // Wait for slide transition to complete
216
+ const element = await canvas.findByTestId('transition-element');
217
+
218
+ await waitFor(() => {
219
+ const style = window.getComputedStyle(element);
220
+ const transform = style.transform;
221
+ // Check that transform is identity matrix (no translation)
222
+ expect(transform).toBe('none') || expect(transform).toContain('matrix(1, 0, 0, 1, 0, 0)');
223
+ }, { timeout: 3000 });
224
+ ```
225
+
226
+ ##### Grow/Scale Transition
227
+ ```typescript
228
+ // Wait for scale transition to complete
229
+ const element = await canvas.findByTestId('transition-element');
230
+
231
+ await waitFor(() => {
232
+ const style = window.getComputedStyle(element);
233
+ const transform = style.transform;
234
+ // Check that scale is 1 (fully grown)
235
+ expect(transform).toContain('scale(1)') || expect(transform).toBe('none');
236
+ }, { timeout: 3000 });
237
+ ```
238
+
239
+ ##### Collapse Transition
240
+ ```typescript
241
+ // Wait for collapse/expand transition to complete
242
+ const element = await canvas.findByTestId('transition-element');
243
+
244
+ await waitFor(() => {
245
+ const style = window.getComputedStyle(element);
246
+ // When expanded, height should be auto or specific value
247
+ expect(parseInt(style.height)).toBeGreaterThan(0);
248
+ }, { timeout: 3000 });
249
+ ```
250
+
251
+ ##### Zoom Transition
252
+ ```typescript
253
+ // Wait for zoom transition to complete
254
+ const element = await canvas.findByTestId('transition-element');
255
+
256
+ await waitFor(() => {
257
+ const style = window.getComputedStyle(element);
258
+ expect(parseFloat(style.opacity)).toBe(1);
259
+ const transform = style.transform;
260
+ expect(transform).toBe('none') || expect(transform).toContain('scale(1)');
261
+ }, { timeout: 3000 });
262
+ ```
263
+
264
+ #### Testing Animation States
265
+
266
+ ##### Check if Transition is Entering
267
+ ```typescript
268
+ // Immediately after triggering in=true
269
+ const wrapper = await canvas.findByTestId('transition-wrapper');
270
+
271
+ // Element should be visible but possibly not fully transitioned
272
+ expect(wrapper).toBeVisible();
273
+
274
+ // Check intermediate state (opacity between 0 and 1 for fade)
275
+ const element = await canvas.findByTestId('transition-element');
276
+ const style = window.getComputedStyle(element);
277
+ const opacity = parseFloat(style.opacity);
278
+ expect(opacity).toBeGreaterThanOrEqual(0);
279
+ expect(opacity).toBeLessThanOrEqual(1);
280
+ ```
281
+
282
+ ##### Check if Transition is Exiting
283
+ ```typescript
284
+ // After setting in=false
285
+ const element = await canvas.findByTestId('transition-element');
286
+
287
+ // For fade: opacity should be decreasing
288
+ await waitFor(() => {
289
+ const style = window.getComputedStyle(element);
290
+ expect(parseFloat(style.opacity)).toBeLessThan(1);
291
+ }, { timeout: 1000 });
292
+ ```
293
+
294
+ ##### Check if Transition is Fully Entered
295
+ ```typescript
296
+ // Wait for transition to complete
297
+ const element = await canvas.findByTestId('transition-element');
298
+
299
+ await waitFor(() => {
300
+ const style = window.getComputedStyle(element);
301
+ // For fade: opacity should be 1
302
+ expect(parseFloat(style.opacity)).toBe(1);
303
+ // Element should be fully visible
304
+ expect(element).toBeVisible();
305
+ }, { timeout: 3000 });
306
+ ```
307
+
308
+ #### Testing CSS Properties During Transitions
309
+
310
+ ##### Opacity (Fade/Zoom)
311
+ ```typescript
312
+ const element = await canvas.findByTestId('transition-element');
313
+ const style = window.getComputedStyle(element);
314
+ const opacity = parseFloat(style.opacity);
315
+
316
+ // During enter: 0 -> 1
317
+ expect(opacity).toBeGreaterThanOrEqual(0);
318
+ expect(opacity).toBeLessThanOrEqual(1);
319
+
320
+ // After enter complete
321
+ await waitFor(() => {
322
+ const currentStyle = window.getComputedStyle(element);
323
+ expect(parseFloat(currentStyle.opacity)).toBe(1);
324
+ }, { timeout: 3000 });
325
+ ```
326
+
327
+ ##### Transform (Slide/Grow/Zoom)
328
+ ```typescript
329
+ const element = await canvas.findByTestId('transition-element');
330
+ const style = window.getComputedStyle(element);
331
+ const transform = style.transform;
332
+
333
+ // Check transform property exists during transition
334
+ expect(transform).not.toBe('none');
335
+
336
+ // Wait for transform to complete (identity matrix)
337
+ await waitFor(() => {
338
+ const currentStyle = window.getComputedStyle(element);
339
+ const currentTransform = currentStyle.transform;
340
+ expect(currentTransform === 'none' ||
341
+ currentTransform.includes('matrix(1, 0, 0, 1, 0, 0)')).toBe(true);
342
+ }, { timeout: 3000 });
343
+ ```
344
+
345
+ ##### Height (Collapse)
346
+ ```typescript
347
+ const element = await canvas.findByTestId('transition-element');
348
+
349
+ // When collapsed
350
+ let style = window.getComputedStyle(element);
351
+ expect(parseInt(style.height)).toBe(0);
352
+
353
+ // Wait for expansion
354
+ await waitFor(() => {
355
+ const currentStyle = window.getComputedStyle(element);
356
+ expect(parseInt(currentStyle.height)).toBeGreaterThan(0);
357
+ }, { timeout: 3000 });
358
+ ```
359
+
360
+ ##### Visibility
361
+ ```typescript
362
+ const wrapper = await canvas.findByTestId('transition-wrapper');
363
+ const style = window.getComputedStyle(wrapper);
364
+
365
+ // When in=true
366
+ expect(style.visibility).toBe('visible');
367
+
368
+ // When in=false (after exit complete)
369
+ expect(style.visibility).toBe('hidden');
370
+ ```
371
+
372
+ ##### Transition Duration
373
+ ```typescript
374
+ const element = await canvas.findByTestId('transition-element');
375
+ const style = window.getComputedStyle(element);
376
+
377
+ // Check transition duration is set
378
+ const transitionDuration = style.transitionDuration;
379
+ expect(transitionDuration).not.toBe('0s');
380
+
381
+ // Check transition delay (if delay prop is set)
382
+ const transitionDelay = style.transitionDelay;
383
+ if (delay > 0) {
384
+ expect(transitionDelay).toBe(`${delay}ms`);
385
+ }
386
+ ```
387
+
388
+ ### Props That Affect Test Behavior
389
+
390
+ #### `variant`
391
+ - **Values:** `'fade' | 'slide' | 'scale' | 'grow' | 'zoom' | 'collapse'`
392
+ - **Impact:** Determines which MUI transition component is used
393
+ - `fade`: Opacity transition
394
+ - `slide`: Translate/position transition
395
+ - `scale`/`grow`: Transform scale transition
396
+ - `zoom`: Combined opacity and scale
397
+ - `collapse`: Height transition
398
+ - **Test Tip:** Different variants require different CSS property checks
399
+
400
+ #### `in`
401
+ - **Values:** `boolean`
402
+ - **Impact:** Controls transition state (entering vs exiting)
403
+ - **Test Tip:** Toggle this prop to test enter/exit transitions
404
+
405
+ #### `direction`
406
+ - **Values:** `'up' | 'down' | 'left' | 'right'`
407
+ - **Impact:** Direction of slide transition
408
+ - **Test Tip:** Only affects `slide` variant
409
+
410
+ #### `duration`
411
+ - **Values:** `number | { enter: number, exit: number }`
412
+ - **Impact:** Transition duration in milliseconds
413
+ - **Test Tip:** Adjust `waitFor` timeout based on duration
414
+
415
+ #### `delay`
416
+ - **Values:** `number` (milliseconds)
417
+ - **Impact:** Adds `transitionDelay` style
418
+ - **Test Tip:** Account for delay when testing transition start
419
+
420
+ #### `easing`
421
+ - **Values:** `string | { enter: string, exit: string }`
422
+ - **Impact:** CSS easing function for transition
423
+ - **Test Tip:** Check `transitionTimingFunction` style property
424
+
425
+ ### Common Test Scenarios
426
+
427
+ #### 1. Basic Rendering Test
428
+ ```typescript
429
+ play: async ({ canvasElement }) => {
430
+ const canvas = within(canvasElement);
431
+
432
+ // Wait for transition wrapper
433
+ const wrapper = await canvas.findByTestId('transition-wrapper');
434
+ expect(wrapper).toBeInTheDocument();
435
+
436
+ // Verify nested structure
437
+ const element = await canvas.findByTestId('transition-element');
438
+ expect(element).toBeInTheDocument();
439
+
440
+ const content = await canvas.findByTestId('transition-content');
441
+ expect(content).toBeInTheDocument();
442
+ }
443
+ ```
444
+
445
+ #### 2. Enter Transition Test
446
+ ```typescript
447
+ play: async ({ canvasElement, args }) => {
448
+ const canvas = within(canvasElement);
449
+
450
+ // Initial state (in=false)
451
+ const wrapper = await canvas.findByTestId('transition-wrapper');
452
+
453
+ // Trigger transition (in=true)
454
+ args.in = true;
455
+
456
+ // Wait for transition to complete
457
+ const element = await canvas.findByTestId('transition-element');
458
+ await waitFor(() => {
459
+ const style = window.getComputedStyle(element);
460
+ expect(parseFloat(style.opacity)).toBe(1);
461
+ }, { timeout: 3000 });
462
+ }
463
+ ```
464
+
465
+ #### 3. Exit Transition Test
466
+ ```typescript
467
+ play: async ({ canvasElement, args }) => {
468
+ const canvas = within(canvasElement);
469
+
470
+ // Start with in=true
471
+ expect(args.in).toBe(true);
472
+
473
+ const element = await canvas.findByTestId('transition-element');
474
+
475
+ // Verify element is visible
476
+ await waitFor(() => {
477
+ expect(element).toBeVisible();
478
+ }, { timeout: 2000 });
479
+
480
+ // Trigger exit (in=false)
481
+ args.in = false;
482
+
483
+ // Wait for exit transition
484
+ await waitFor(() => {
485
+ const style = window.getComputedStyle(element);
486
+ expect(parseFloat(style.opacity)).toBeLessThan(1);
487
+ }, { timeout: 3000 });
488
+ }
489
+ ```
490
+
491
+ #### 4. Content Access Test
492
+ ```typescript
493
+ play: async ({ canvasElement }) => {
494
+ const canvas = within(canvasElement);
495
+
496
+ // Access content through transition layers
497
+ const content = await canvas.findByTestId('transition-content');
498
+
499
+ // Query child elements
500
+ const childElement = within(content).getByText('Expected Text');
501
+ expect(childElement).toBeInTheDocument();
502
+ }
503
+ ```
504
+
505
+ #### 5. Variant-Specific Test (Slide)
506
+ ```typescript
507
+ play: async ({ canvasElement, args }) => {
508
+ const canvas = within(canvasElement);
509
+
510
+ expect(args.variant).toBe('slide');
511
+ expect(args.direction).toBe('up');
512
+
513
+ const element = await canvas.findByTestId('transition-element');
514
+
515
+ // Wait for slide to complete
516
+ await waitFor(() => {
517
+ const style = window.getComputedStyle(element);
518
+ const transform = style.transform;
519
+ // No vertical translation (translateY = 0)
520
+ expect(transform === 'none' || !transform.includes('translateY')).toBe(true);
521
+ }, { timeout: 3000 });
522
+ }
523
+ ```
524
+
525
+ #### 6. Duration and Delay Test
526
+ ```typescript
527
+ play: async ({ canvasElement, args }) => {
528
+ const canvas = within(canvasElement);
529
+
530
+ const duration = 500;
531
+ const delay = 200;
532
+
533
+ expect(args.duration).toBe(duration);
534
+ expect(args.delay).toBe(delay);
535
+
536
+ const element = await canvas.findByTestId('transition-element');
537
+ const style = window.getComputedStyle(element);
538
+
539
+ // Verify delay is applied
540
+ expect(style.transitionDelay).toBe(`${delay}ms`);
541
+
542
+ // Total time = duration + delay
543
+ await waitFor(() => {
544
+ const currentStyle = window.getComputedStyle(element);
545
+ expect(parseFloat(currentStyle.opacity)).toBe(1);
546
+ }, { timeout: duration + delay + 500 }); // Add buffer
547
+ }
548
+ ```
549
+
550
+ #### 7. Multiple Transitions Test
551
+ ```typescript
552
+ play: async ({ canvasElement }) => {
553
+ const canvas = within(canvasElement);
554
+
555
+ // Test multiple transition instances
556
+ const wrappers = await canvas.findAllByTestId('transition-wrapper');
557
+ expect(wrappers.length).toBeGreaterThan(1);
558
+
559
+ // Each should have complete structure
560
+ for (const wrapper of wrappers) {
561
+ const element = within(wrapper).getByTestId('transition-element');
562
+ const content = within(element).getByTestId('transition-content');
563
+
564
+ expect(element).toBeInTheDocument();
565
+ expect(content).toBeInTheDocument();
566
+ }
567
+ }
568
+ ```
569
+
570
+ ### Troubleshooting
571
+
572
+ #### Issue: "Unable to find element with testId transition-wrapper"
573
+
574
+ **Solution:** Always use `await` with `findByTestId` and ensure `in` prop is true:
575
+ ```typescript
576
+ // ❌ Wrong - synchronous query
577
+ const wrapper = canvas.getByTestId('transition-wrapper');
578
+
579
+ // ✅ Correct - asynchronous query
580
+ const wrapper = await canvas.findByTestId('transition-wrapper');
581
+ ```
582
+
583
+ #### Issue: Test fails intermittently during transitions
584
+
585
+ **Solution:** Use `waitFor` with appropriate timeout based on duration + delay:
586
+ ```typescript
587
+ const duration = args.duration || 300;
588
+ const delay = args.delay || 0;
589
+ const totalTime = duration + delay;
590
+
591
+ await waitFor(async () => {
592
+ const element = await canvas.findByTestId('transition-element');
593
+ const style = window.getComputedStyle(element);
594
+ expect(parseFloat(style.opacity)).toBe(1);
595
+ }, { timeout: totalTime + 1000 }); // Add 1s buffer
596
+ ```
597
+
598
+ #### Issue: CSS properties show unexpected values
599
+
600
+ **Solution:** Remember that MUI transitions apply styles to different elements:
601
+ ```typescript
602
+ // ❌ Wrong - checking wrapper for opacity
603
+ const wrapper = await canvas.findByTestId('transition-wrapper');
604
+ const style = window.getComputedStyle(wrapper);
605
+ expect(style.opacity).toBe('1'); // May not work
606
+
607
+ // ✅ Correct - check transition-element for most properties
608
+ const element = await canvas.findByTestId('transition-element');
609
+ const style = window.getComputedStyle(element);
610
+ expect(parseFloat(style.opacity)).toBe(1);
611
+ ```
612
+
613
+ #### Issue: Transform matrix is hard to interpret
614
+
615
+ **Solution:** Use helper functions or check for 'none':
616
+ ```typescript
617
+ const element = await canvas.findByTestId('transition-element');
618
+ const style = window.getComputedStyle(element);
619
+ const transform = style.transform;
620
+
621
+ // Simple check: either 'none' or identity matrix
622
+ const isComplete = transform === 'none' ||
623
+ transform.includes('matrix(1, 0, 0, 1, 0, 0)');
624
+ expect(isComplete).toBe(true);
625
+ ```
626
+
627
+ #### Issue: Collapse height is 'auto' instead of pixel value
628
+
629
+ **Solution:** Check for non-zero height instead of specific value:
630
+ ```typescript
631
+ const element = await canvas.findByTestId('transition-element');
632
+ const style = window.getComputedStyle(element);
633
+ const height = style.height;
634
+
635
+ // Accept 'auto' or any positive pixel value
636
+ expect(height === 'auto' || parseInt(height) > 0).toBe(true);
637
+ ```
638
+
639
+ #### Issue: Content not accessible through testId
640
+
641
+ **Solution:** Use `within` to scope queries:
642
+ ```typescript
643
+ // ❌ Wrong - direct query may fail if multiple transitions exist
644
+ const content = await canvas.findByTestId('transition-content');
645
+
646
+ // ✅ Correct - scope to specific wrapper
647
+ const wrapper = await canvas.findByTestId('transition-wrapper');
648
+ const content = await within(wrapper).findByTestId('transition-content');
649
+ ```
650
+
651
+ ### Best Practices
652
+
653
+ 1. **Always use async/await** with testId queries in Storybook tests
654
+ 2. **Use `waitFor`** when testing transitions - they take time to complete
655
+ 3. **Account for duration + delay** in timeout values
656
+ 4. **Scope queries with `within()`** when testing multiple transition instances
657
+ 5. **Check computed styles** for transition properties (opacity, transform, etc.)
658
+ 6. **Parse numeric values** from CSS strings: `parseFloat(style.opacity)`
659
+ 7. **Test both enter and exit** transitions for complete coverage
660
+ 8. **Use variant-specific assertions** for different transition types
661
+ 9. **Add buffer time** to timeouts (e.g., duration + 500ms)
662
+ 10. **Test visibility states** to ensure proper show/hide behavior
663
+
664
+ ### Variant-Specific CSS Properties
665
+
666
+ #### Fade
667
+ - **Primary:** `opacity` (0 → 1)
668
+ - **Check:** `parseFloat(style.opacity) === 1`
669
+
670
+ #### Slide
671
+ - **Primary:** `transform: translateX/Y`
672
+ - **Check:** `transform === 'none'` or identity matrix
673
+
674
+ #### Grow/Scale
675
+ - **Primary:** `transform: scale`
676
+ - **Check:** `transform.includes('scale(1)')`
677
+
678
+ #### Zoom
679
+ - **Primary:** `opacity` + `transform: scale`
680
+ - **Check:** Both opacity and scale
681
+
682
+ #### Collapse
683
+ - **Primary:** `height` (0 → auto/pixels)
684
+ - **Check:** `parseInt(style.height) > 0`