@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,441 @@
1
+ import { Box, SvgIcon } from '@mui/material';
2
+ import type { Meta, StoryObj } from '@storybook/react-vite';
3
+ import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
4
+
5
+ import { EmptyState } from './EmptyState';
6
+
7
+ // Test illustration component
8
+ const TestIcon = () => (
9
+ <SvgIcon sx={{ fontSize: 64 }} data-testid="empty-state-icon">
10
+ <svg viewBox="0 0 24 24">
11
+ <path
12
+ fill="currentColor"
13
+ d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
14
+ />
15
+ </svg>
16
+ </SvgIcon>
17
+ );
18
+
19
+ const meta: Meta<typeof EmptyState> = {
20
+ title: 'DataDisplay/AsyncStates/EmptyState/Tests',
21
+ component: EmptyState,
22
+ parameters: {
23
+ layout: 'centered',
24
+ chromatic: { disableSnapshot: false },
25
+ },
26
+ tags: ['autodocs', 'test', 'component:EmptyState'],
27
+ // Disable auto-action generation for onCreate/onRefresh to prevent them from
28
+ // being truthy when not explicitly passed (otherwise they get auto-mocked by
29
+ // the global argTypesRegex: '^on[A-Z].*' pattern)
30
+ argTypes: {
31
+ onCreate: { action: false },
32
+ onRefresh: { action: false },
33
+ },
34
+ };
35
+
36
+ export default meta;
37
+ export type Story = StoryObj<typeof meta>;
38
+
39
+ // Interaction Tests
40
+ export const BasicInteraction: Story = {
41
+ args: {
42
+ title: 'Basic Interaction Test',
43
+ description: 'Testing basic rendering and accessibility.',
44
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
45
+ onCreate: undefined,
46
+ onRefresh: undefined,
47
+ },
48
+ play: async ({ canvasElement }) => {
49
+ const canvas = within(canvasElement);
50
+
51
+ // Test component renders
52
+ const title = canvas.getByRole('heading', { name: 'Basic Interaction Test' });
53
+ await expect(title).toBeInTheDocument();
54
+
55
+ // Test region role
56
+ const region = canvas.getByRole('region');
57
+ await expect(region).toBeInTheDocument();
58
+
59
+ // Test aria-labelledby
60
+ await expect(region).toHaveAttribute('aria-labelledby', title.id);
61
+
62
+ // Test description
63
+ const description = canvas.getByText('Testing basic rendering and accessibility.');
64
+ await expect(description).toBeInTheDocument();
65
+ },
66
+ };
67
+
68
+ export const ActionInteraction: Story = {
69
+ args: {
70
+ title: 'Action Interaction Test',
71
+ description: 'Testing action button interactions.',
72
+ primaryAction: {
73
+ label: 'Primary Action',
74
+ onClick: fn(),
75
+ },
76
+ secondaryAction: {
77
+ label: 'Secondary Action',
78
+ onClick: fn(),
79
+ },
80
+ helpLink: {
81
+ label: 'Help Link',
82
+ href: '#help',
83
+ },
84
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
85
+ onCreate: undefined,
86
+ onRefresh: undefined,
87
+ },
88
+ play: async ({ canvasElement, args }) => {
89
+ const canvas = within(canvasElement);
90
+
91
+ // Test primary action click
92
+ const primaryButton = canvas.getByRole('button', { name: 'Primary Action' });
93
+ await expect(primaryButton).toBeInTheDocument();
94
+ await userEvent.click(primaryButton);
95
+ await expect(args.primaryAction?.onClick).toHaveBeenCalledTimes(1);
96
+
97
+ // Test secondary action click
98
+ const secondaryButton = canvas.getByRole('button', { name: 'Secondary Action' });
99
+ await expect(secondaryButton).toBeInTheDocument();
100
+ await userEvent.click(secondaryButton);
101
+ await expect(args.secondaryAction?.onClick).toHaveBeenCalledTimes(1);
102
+
103
+ // Test help link
104
+ const helpLink = canvas.getByRole('link', { name: 'Help Link' });
105
+ await expect(helpLink).toBeInTheDocument();
106
+ await expect(helpLink).toHaveAttribute('href', '#help');
107
+ },
108
+ };
109
+
110
+ export const KeyboardNavigation: Story = {
111
+ args: {
112
+ title: 'Keyboard Navigation Test',
113
+ description: 'Testing keyboard accessibility.',
114
+ primaryAction: {
115
+ label: 'Primary',
116
+ onClick: fn(),
117
+ },
118
+ secondaryAction: {
119
+ label: 'Secondary',
120
+ onClick: fn(),
121
+ },
122
+ helpLink: {
123
+ label: 'Help',
124
+ href: '#help',
125
+ },
126
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
127
+ onCreate: undefined,
128
+ onRefresh: undefined,
129
+ },
130
+ play: async ({ canvasElement, args }) => {
131
+ const canvas = within(canvasElement);
132
+
133
+ // Tab to primary button
134
+ await userEvent.tab();
135
+ const primaryButton = canvas.getByRole('button', { name: 'Primary' });
136
+ await expect(primaryButton).toHaveFocus();
137
+
138
+ // Press Enter to activate
139
+ await userEvent.keyboard('{Enter}');
140
+ await expect(args.primaryAction?.onClick).toHaveBeenCalledTimes(1);
141
+
142
+ // Tab to secondary button
143
+ await userEvent.tab();
144
+ const secondaryButton = canvas.getByRole('button', { name: 'Secondary' });
145
+ await expect(secondaryButton).toHaveFocus();
146
+
147
+ // Tab to help link
148
+ await userEvent.tab();
149
+ const helpLink = canvas.getByRole('link', { name: 'Help' });
150
+ await expect(helpLink).toHaveFocus();
151
+ },
152
+ };
153
+
154
+ export const ScreenReader: Story = {
155
+ args: {
156
+ title: 'Screen Reader Test',
157
+ description: 'Testing screen reader accessibility features.',
158
+ illustration: <TestIcon />,
159
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
160
+ onCreate: undefined,
161
+ onRefresh: undefined,
162
+ },
163
+ play: async ({ canvasElement }) => {
164
+ const canvas = within(canvasElement);
165
+
166
+ // Test region has proper labeling
167
+ const region = canvas.getByRole('region');
168
+ const heading = canvas.getByRole('heading');
169
+ await expect(region).toHaveAttribute('aria-labelledby', heading.id);
170
+
171
+ // Test heading structure
172
+ await expect(heading).toHaveAttribute('id');
173
+ await expect(heading.tagName).toBe('H3');
174
+
175
+ // Test illustration accessibility
176
+ const icon = canvas.getAllByTestId('empty-state-icon')[0];
177
+ await expect(icon).toBeInTheDocument();
178
+ },
179
+ };
180
+
181
+ export const FocusManagement: Story = {
182
+ args: {
183
+ title: 'Focus Management Test',
184
+ description: 'Testing focus behavior and management.',
185
+ primaryAction: {
186
+ label: 'Focus Test Button',
187
+ onClick: fn(),
188
+ },
189
+ helpLink: {
190
+ label: 'Focus Test Link',
191
+ href: '#focus',
192
+ },
193
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
194
+ onCreate: undefined,
195
+ onRefresh: undefined,
196
+ },
197
+ play: async ({ canvasElement }) => {
198
+ const canvas = within(canvasElement);
199
+
200
+ // Test initial focus state
201
+ const button = canvas.getByRole('button', { name: 'Focus Test Button' });
202
+ const link = canvas.getByRole('link', { name: 'Focus Test Link' });
203
+
204
+ // Test focus indicators are visible
205
+ await userEvent.tab();
206
+ await expect(button).toHaveFocus();
207
+
208
+ await userEvent.tab();
209
+ await expect(link).toHaveFocus();
210
+
211
+ // Test focus trap doesn't exist (buttons should be focusable)
212
+ await userEvent.tab();
213
+ await expect(link).not.toHaveFocus();
214
+ },
215
+ };
216
+
217
+ export const ResponsiveDesign: Story = {
218
+ args: {
219
+ title: 'Responsive Design Test',
220
+ description: 'Testing responsive behavior across viewport sizes.',
221
+ variant: 'action',
222
+ primaryAction: {
223
+ label: 'Primary',
224
+ onClick: fn(),
225
+ },
226
+ secondaryAction: {
227
+ label: 'Secondary',
228
+ onClick: fn(),
229
+ },
230
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
231
+ onCreate: undefined,
232
+ onRefresh: undefined,
233
+ },
234
+ parameters: {
235
+ viewport: {
236
+ viewports: {
237
+ mobile: { name: 'Mobile', styles: { width: '375px', height: '667px' } },
238
+ tablet: { name: 'Tablet', styles: { width: '768px', height: '1024px' } },
239
+ },
240
+ },
241
+ },
242
+ play: async ({ canvasElement }) => {
243
+ const canvas = within(canvasElement);
244
+
245
+ // Test buttons are present and accessible
246
+ const primaryButton = canvas.getByRole('button', { name: 'Primary' });
247
+ const secondaryButton = canvas.getByRole('button', { name: 'Secondary' });
248
+
249
+ await expect(primaryButton).toBeInTheDocument();
250
+ await expect(secondaryButton).toBeInTheDocument();
251
+
252
+ // Test responsive text wrapping
253
+ const title = canvas.getByRole('heading');
254
+ await expect(title).toBeInTheDocument();
255
+ },
256
+ };
257
+
258
+ export const ThemeVariations: Story = {
259
+ args: {
260
+ title: 'Theme Variations Test',
261
+ description: 'Testing theme compatibility and color contrast.',
262
+ illustration: <TestIcon />,
263
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
264
+ onCreate: undefined,
265
+ onRefresh: undefined,
266
+ },
267
+ parameters: {
268
+ backgrounds: {
269
+ default: 'dark',
270
+ values: [
271
+ { name: 'light', value: '#ffffff' },
272
+ { name: 'dark', value: '#1a1a1a' },
273
+ ],
274
+ },
275
+ },
276
+ play: async ({ canvasElement }) => {
277
+ const canvas = within(canvasElement);
278
+
279
+ // Test component renders in different themes
280
+ const title = canvas.getByRole('heading', { name: 'Theme Variations Test' });
281
+ await expect(title).toBeInTheDocument();
282
+
283
+ const description = canvas.getByText('Testing theme compatibility and color contrast.');
284
+ await expect(description).toBeInTheDocument();
285
+
286
+ // Test icon renders
287
+ const icon = canvas.getAllByTestId('empty-state-icon')[0];
288
+ await expect(icon).toBeInTheDocument();
289
+ },
290
+ };
291
+
292
+ export const VisualStates: Story = {
293
+ render: () => (
294
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
295
+ <EmptyState title="Default State" description="Default visual appearance." />
296
+ <EmptyState
297
+ variant="illustrated"
298
+ title="Illustrated State"
299
+ description="With illustration visual state."
300
+ illustration={<TestIcon />}
301
+ />
302
+ <EmptyState
303
+ variant="minimal"
304
+ title="Minimal State"
305
+ description="Minimal visual appearance."
306
+ />
307
+ <EmptyState
308
+ variant="action"
309
+ title="Action State"
310
+ description="With action buttons."
311
+ primaryAction={{
312
+ label: 'Primary',
313
+ onClick: () => {},
314
+ }}
315
+ />
316
+ </Box>
317
+ ),
318
+ play: async ({ canvasElement }) => {
319
+ const canvas = within(canvasElement);
320
+
321
+ // Test all visual states render
322
+ const states = ['Default State', 'Illustrated State', 'Minimal State', 'Action State'];
323
+
324
+ for (const stateName of states) {
325
+ const heading = canvas.getByRole('heading', { name: stateName });
326
+ await expect(heading).toBeInTheDocument();
327
+ }
328
+
329
+ // Test action button in action state
330
+ const actionButton = canvas.getByRole('button', { name: 'Primary' });
331
+ await expect(actionButton).toBeInTheDocument();
332
+ },
333
+ };
334
+
335
+ export const Performance: Story = {
336
+ args: {
337
+ title: 'Performance Test',
338
+ description: 'Testing component render performance.',
339
+ illustration: <TestIcon />,
340
+ primaryAction: {
341
+ label: 'Performance Action',
342
+ onClick: fn(),
343
+ },
344
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
345
+ onCreate: undefined,
346
+ onRefresh: undefined,
347
+ },
348
+ parameters: {
349
+ chromatic: { disableSnapshot: true },
350
+ },
351
+ play: async ({ canvasElement, args }) => {
352
+ const canvas = within(canvasElement);
353
+
354
+ // Test all key elements are present
355
+ const title = canvas.getByRole('heading', { name: 'Performance Test' });
356
+ const description = canvas.getByText('Testing component render performance.');
357
+ const icon = canvas.getAllByTestId('empty-state-icon')[0];
358
+ const button = canvas.getByRole('button', { name: 'Performance Action' });
359
+
360
+ await expect(title).toBeInTheDocument();
361
+ await expect(description).toBeInTheDocument();
362
+ await expect(icon).toBeInTheDocument();
363
+ await expect(button).toBeInTheDocument();
364
+
365
+ // Test interaction performance
366
+ await userEvent.click(button);
367
+ await waitFor(
368
+ () => expect(args.primaryAction?.onClick).toHaveBeenCalled(),
369
+ { timeout: 3000 }
370
+ );
371
+
372
+ // Verify click handler was called exactly once
373
+ await expect(args.primaryAction?.onClick).toHaveBeenCalledTimes(1);
374
+ },
375
+ };
376
+
377
+ export const EdgeCases: Story = {
378
+ args: {
379
+ title:
380
+ 'Very Long Title That Should Wrap Properly Even When It Exceeds The Maximum Width Of The Container And Continues To Be Very Long',
381
+ description:
382
+ 'Very long description text that should wrap properly and maintain readability even when it contains a lot of content and exceeds the normal expected length for description text in an empty state component. This should handle text overflow gracefully.',
383
+ helpLink: {
384
+ label: 'Very Long Help Link Text That Should Also Handle Overflow Gracefully',
385
+ href: '#very-long-url-that-might-cause-layout-issues-if-not-handled-properly',
386
+ external: true,
387
+ },
388
+ // Explicitly set to undefined to override auto-generated actions from argTypesRegex
389
+ onCreate: undefined,
390
+ onRefresh: undefined,
391
+ },
392
+ play: async ({ canvasElement }) => {
393
+ const canvas = within(canvasElement);
394
+
395
+ // Test long title renders and wraps
396
+ const title = canvas.getByRole('heading');
397
+ await expect(title).toBeInTheDocument();
398
+
399
+ // Test long description renders
400
+ const description = canvas.getByText(/Very long description text/);
401
+ await expect(description).toBeInTheDocument();
402
+
403
+ // Test long help link renders
404
+ const helpLink = canvas.getByRole('link');
405
+ await expect(helpLink).toBeInTheDocument();
406
+ await expect(helpLink).toHaveAttribute('target', '_blank');
407
+ await expect(helpLink).toHaveAttribute('rel', 'noopener noreferrer');
408
+ },
409
+ };
410
+
411
+ export const Integration: Story = {
412
+ render: () => (
413
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, p: 2, border: '1px solid #ddd' }}>
414
+ <Box sx={{ p: 2, bgcolor: 'background.paper', borderRadius: 1 }}>
415
+ <EmptyState
416
+ title="Integrated Empty State"
417
+ description="This empty state is integrated within other components."
418
+ primaryAction={{
419
+ label: 'Integrated Action',
420
+ onClick: fn(),
421
+ }}
422
+ />
423
+ </Box>
424
+ </Box>
425
+ ),
426
+ play: async ({ canvasElement }) => {
427
+ const canvas = within(canvasElement);
428
+
429
+ // Test integration within container
430
+ const title = canvas.getByRole('heading', { name: 'Integrated Empty State' });
431
+ await expect(title).toBeInTheDocument();
432
+
433
+ // Test integrated action works
434
+ const button = canvas.getByRole('button', { name: 'Integrated Action' });
435
+ await expect(button).toBeInTheDocument();
436
+
437
+ // Test container integration doesn't break functionality
438
+ const region = canvas.getByRole('region');
439
+ await expect(region).toBeInTheDocument();
440
+ },
441
+ };
@@ -0,0 +1,180 @@
1
+ import AddIcon from '@mui/icons-material/Add';
2
+ import RefreshIcon from '@mui/icons-material/Refresh';
3
+ import {
4
+ Box,
5
+ Button,
6
+ Link,
7
+ Stack,
8
+ Typography,
9
+ useTheme,
10
+ } from '@mui/material';
11
+ import React from 'react';
12
+
13
+ import type { EmptyStateProps } from './EmptyState.types';
14
+
15
+ export const EmptyState: React.FC<EmptyStateProps> = React.memo(({
16
+ variant = 'default',
17
+ title,
18
+ description,
19
+ illustration,
20
+ primaryAction,
21
+ secondaryAction,
22
+ helpLink,
23
+ onRefresh,
24
+ refreshLabel = 'Refresh',
25
+ onCreate,
26
+ createLabel = 'Create New',
27
+ className,
28
+ dataTestId,
29
+ }) => {
30
+ const theme = useTheme();
31
+ const titleId = React.useId();
32
+
33
+ return (
34
+ <Box
35
+ role="region"
36
+ aria-labelledby={titleId}
37
+ className={className}
38
+ data-testid={dataTestId || 'empty-state'}
39
+ sx={{
40
+ display: 'flex',
41
+ flexDirection: 'column',
42
+ alignItems: 'center',
43
+ justifyContent: 'center',
44
+ textAlign: 'center',
45
+ padding: theme.spacing(6),
46
+ minHeight: 200,
47
+ gap: theme.spacing(3),
48
+ }}
49
+ >
50
+ {/* Illustration */}
51
+ {illustration && (
52
+ <Box
53
+ data-testid={dataTestId ? `${dataTestId}-icon` : 'empty-state-icon'}
54
+ sx={{
55
+ maxWidth: variant === 'illustrated' ? 240 : 120,
56
+ width: '100%',
57
+ height: 'auto',
58
+ opacity: variant === 'minimal' ? 0.6 : 0.8,
59
+ display: variant === 'minimal' ? 'none' : 'block',
60
+ }}
61
+ >
62
+ {illustration}
63
+ </Box>
64
+ )}
65
+
66
+ {/* Content */}
67
+ <Stack spacing={2} alignItems="center">
68
+ <Typography
69
+ id={titleId}
70
+ variant="h6"
71
+ component="h3"
72
+ data-testid={dataTestId ? `${dataTestId}-title` : 'empty-state-title'}
73
+ sx={{
74
+ fontWeight: theme.typography.fontWeightMedium,
75
+ color: theme.palette.text.primary,
76
+ maxWidth: 400,
77
+ }}
78
+ >
79
+ {title}
80
+ </Typography>
81
+
82
+ {description && (
83
+ <Typography
84
+ variant="body2"
85
+ color="text.secondary"
86
+ data-testid={dataTestId ? `${dataTestId}-description` : 'empty-state-description'}
87
+ sx={{
88
+ maxWidth: 480,
89
+ lineHeight: 1.6,
90
+ }}
91
+ >
92
+ {description}
93
+ </Typography>
94
+ )}
95
+
96
+ {/* Actions */}
97
+ {(variant === 'action' || primaryAction || secondaryAction || onCreate || onRefresh) && (
98
+ <Stack
99
+ direction={{ xs: 'column', sm: 'row' }}
100
+ spacing={2}
101
+ alignItems="center"
102
+ sx={{ mt: theme.spacing(2) }}
103
+ >
104
+ {primaryAction && (
105
+ <Button
106
+ variant="contained"
107
+ onClick={primaryAction.onClick}
108
+ data-testid={dataTestId ? `${dataTestId}-primary-action` : 'empty-state-primary-action'}
109
+ sx={{ minWidth: 120 }}
110
+ >
111
+ {primaryAction.label}
112
+ </Button>
113
+ )}
114
+
115
+ {onCreate && (
116
+ <Button
117
+ variant="contained"
118
+ onClick={onCreate}
119
+ startIcon={<AddIcon />}
120
+ data-testid={dataTestId ? `${dataTestId}-create-button` : 'empty-state-create-button'}
121
+ sx={{ minWidth: 120 }}
122
+ >
123
+ {createLabel}
124
+ </Button>
125
+ )}
126
+
127
+ {secondaryAction && (
128
+ <Button
129
+ variant="outlined"
130
+ onClick={secondaryAction.onClick}
131
+ data-testid={dataTestId ? `${dataTestId}-secondary-action` : 'empty-state-secondary-action'}
132
+ sx={{ minWidth: 120 }}
133
+ >
134
+ {secondaryAction.label}
135
+ </Button>
136
+ )}
137
+
138
+ {onRefresh && (
139
+ <Button
140
+ variant="outlined"
141
+ onClick={onRefresh}
142
+ startIcon={<RefreshIcon />}
143
+ data-testid={dataTestId ? `${dataTestId}-refresh-button` : 'empty-state-refresh-button'}
144
+ sx={{ minWidth: 120 }}
145
+ >
146
+ {refreshLabel}
147
+ </Button>
148
+ )}
149
+
150
+ </Stack>
151
+ )}
152
+
153
+ {/* Help Link */}
154
+ {helpLink && (
155
+ <Link
156
+ href={helpLink.href}
157
+ target={helpLink.external ? '_blank' : undefined}
158
+ rel={helpLink.external ? 'noopener noreferrer' : undefined}
159
+ data-testid={dataTestId ? `${dataTestId}-help-link` : 'empty-state-help-link'}
160
+ sx={{
161
+ mt: theme.spacing(1),
162
+ color: theme.palette.primary.main,
163
+ textDecoration: 'none',
164
+ '&:hover': {
165
+ textDecoration: 'underline',
166
+ },
167
+ }}
168
+ >
169
+ {helpLink.label}
170
+ {helpLink.external && ' ↗'}
171
+ </Link>
172
+ )}
173
+ </Stack>
174
+ </Box>
175
+ );
176
+ });
177
+
178
+ EmptyState.displayName = 'EmptyState';
179
+
180
+ export default EmptyState;
@@ -0,0 +1,31 @@
1
+ export interface EmptyStateProps {
2
+ variant?: 'default' | 'illustrated' | 'minimal' | 'action';
3
+ title: string;
4
+ description?: string;
5
+ illustration?: React.ReactNode; // SVG/Lottie/etc
6
+ primaryAction?: { label: string; onClick: () => void };
7
+ secondaryAction?: { label: string; onClick: () => void };
8
+ helpLink?: { label: string; href: string; external?: boolean };
9
+ /**
10
+ * Callback for the refresh button
11
+ * Displays a refresh button in the action area when provided
12
+ */
13
+ onRefresh?: () => void;
14
+ /**
15
+ * Custom label for the refresh button
16
+ * @default 'Refresh'
17
+ */
18
+ refreshLabel?: string;
19
+ /**
20
+ * Callback for the create/add new button
21
+ * Displays a create button in the action area when provided
22
+ */
23
+ onCreate?: () => void;
24
+ /**
25
+ * Custom label for the create button
26
+ * @default 'Create New'
27
+ */
28
+ createLabel?: string;
29
+ className?: string;
30
+ dataTestId?: string;
31
+ }
@@ -0,0 +1,2 @@
1
+ export { default, EmptyState } from './EmptyState';
2
+ export type { EmptyStateProps } from './EmptyState.types';