@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,171 @@
1
+ import type React from 'react';
2
+
3
+ export type GridSizeMode = 'auto' | 'fixed' | 'fill';
4
+ export type GridDensity = 'compact' | 'comfortable' | 'spacious';
5
+ export type SortDirection = 'asc' | 'desc' | null;
6
+ export type GridSelectionMode = 'none' | 'single' | 'multi';
7
+ export type PaginationMode = 'client' | 'server';
8
+ export type SortMode = 'client' | 'server';
9
+ export type FilterMode = 'client' | 'server';
10
+ export type EditMode = 'none' | 'cell' | 'row';
11
+
12
+ export interface GridColumn<T = Record<string, unknown>> {
13
+ /** Unique column id (stable across renders) */
14
+ id: string;
15
+ /** Column header label (string or node) */
16
+ header: React.ReactNode;
17
+ /** Accessor: key or function to derive value from row */
18
+ accessor?: keyof T | ((row: T) => unknown);
19
+ /** Column type influences default formatting and editors */
20
+ type?: 'text' | 'number' | 'date' | 'datetime' | 'boolean' | 'currency' | 'actions';
21
+ /** Width hints (px) and min/max constraints */
22
+ width?: number;
23
+ minWidth?: number;
24
+ maxWidth?: number;
25
+ /** Column is initially hidden */
26
+ hidden?: boolean;
27
+ /** Pin to left/right (sticky) */
28
+ pin?: 'left' | 'right';
29
+ /** Enable/disable sort, filter, resize, reorder, edit per column */
30
+ enableSort?: boolean;
31
+ enableFilter?: boolean;
32
+ enableResize?: boolean;
33
+ enableReorder?: boolean;
34
+ enableEdit?: boolean;
35
+ /** Custom renderers */
36
+ cell?: (ctx: { value: unknown; row: T; rowIndex: number; col: GridColumn<T> }) => React.ReactNode;
37
+ headerCell?: (col: GridColumn<T>) => React.ReactNode;
38
+ /** Cell editor renderer (edit mode) */
39
+ editor?: (ctx: {
40
+ value: unknown;
41
+ row: T;
42
+ onChange: (next: unknown) => void;
43
+ commit: () => void;
44
+ cancel: () => void;
45
+ }) => React.ReactNode;
46
+ /** Column-specific filter UI and predicate (client mode) */
47
+ filterComponent?: (ctx: {
48
+ value: unknown;
49
+ setValue: (next: unknown) => void;
50
+ col: GridColumn<T>;
51
+ }) => React.ReactNode;
52
+ filterPredicate?: (value: unknown, filterValue: unknown, row: T) => boolean;
53
+ /** Accessibility label for header button controls */
54
+ ariaLabel?: string;
55
+ }
56
+
57
+ export interface GridSort {
58
+ id: string; // column id
59
+ dir: SortDirection; // asc | desc | null
60
+ }
61
+
62
+ export interface GridFilter {
63
+ id: string; // column id
64
+ value: unknown; // opaque filter value per column type
65
+ }
66
+
67
+ export interface GridRowExpansion<T = Record<string, unknown>> {
68
+ /** Render expanded content */
69
+ render: (row: T, rowIndex: number) => React.ReactNode;
70
+ /** Controlled expanded row ids */
71
+ expandedRowIds?: Array<string | number>;
72
+ /** Uncontrolled defaults */
73
+ defaultExpandedRowIds?: Array<string | number>;
74
+ /** Row id equality uses `getRowId` */
75
+ onChangeExpanded?: (ids: Array<string | number>) => void;
76
+ }
77
+
78
+ export interface GridSelection {
79
+ mode?: GridSelectionMode; // none | single | multi
80
+ selectedRowIds?: Array<string | number>; // controlled
81
+ defaultSelectedRowIds?: Array<string | number>;
82
+ onChangeSelected?: (ids: Array<string | number>) => void;
83
+ }
84
+
85
+ export interface GridPagination {
86
+ mode?: PaginationMode; // client | server
87
+ pageIndex?: number; // controlled, 0-based
88
+ pageSize?: number; // rows per page
89
+ rowCount?: number; // total rows (server)
90
+ onChangePage?: (nextIndex: number) => void;
91
+ onChangePageSize?: (nextSize: number) => void;
92
+ }
93
+
94
+ export interface GridSorting {
95
+ mode?: SortMode; // client | server
96
+ sortBy?: GridSort[]; // controlled
97
+ defaultSortBy?: GridSort[];
98
+ onChangeSortBy?: (next: GridSort[]) => void;
99
+ }
100
+
101
+ export interface GridFiltering {
102
+ mode?: FilterMode; // client | server
103
+ filters?: GridFilter[]; // controlled
104
+ defaultFilters?: GridFilter[];
105
+ onChangeFilters?: (next: GridFilter[]) => void;
106
+ }
107
+
108
+ export interface GridEditing<T = Record<string, unknown>> {
109
+ mode?: EditMode; // none | cell | row
110
+ /** Called when a cell (or row) attempts to commit a value */
111
+ onEditCommit?: (ctx: {
112
+ rowId: string | number;
113
+ colId: string;
114
+ value: unknown;
115
+ row: T;
116
+ }) => Promise<void> | void;
117
+ /** Validation error message per cell (controlled) */
118
+ getCellError?: (rowId: string | number, colId: string) => string | undefined;
119
+ }
120
+
121
+ export interface DataGridProps<T = Record<string, unknown>> extends React.HTMLAttributes<HTMLElement> {
122
+ /** Dataset (client mode uses this array; server mode renders current page) */
123
+ rows: T[];
124
+ /** Stable row id accessor */
125
+ getRowId?: (row: T, index: number) => string | number;
126
+ /** Column definitions */
127
+ columns: GridColumn<T>[];
128
+
129
+ /** Sizing, density, and layout */
130
+ sizeMode?: GridSizeMode; // auto | fixed | fill
131
+ density?: GridDensity; // compact | comfortable | spacious
132
+ rowHeight?: number; // default row height (px)
133
+ headerHeight?: number; // default header height (px)
134
+ footerHeight?: number; // optional
135
+
136
+ /** Interaction features */
137
+ selection?: GridSelection;
138
+ pagination?: GridPagination;
139
+ sorting?: GridSorting;
140
+ filtering?: GridFiltering;
141
+ expansion?: GridRowExpansion<T>;
142
+ editing?: GridEditing<T>;
143
+
144
+ /** Virtualization toggles */
145
+ virtualizeRows?: boolean; // default: true for large datasets
146
+ virtualizeColumns?: boolean; // optional; default: false
147
+
148
+ /** Sticky headers/footers and pinned columns */
149
+ stickyHeader?: boolean;
150
+ stickyFooter?: boolean;
151
+
152
+ /** Empty/loading/error states */
153
+ loading?: boolean;
154
+ error?: React.ReactNode; // message or node for error state
155
+ emptyState?: React.ReactNode; // custom empty component
156
+
157
+ /** Server-fetch hooks (used by server modes) */
158
+ onRequestData?: (params: {
159
+ pageIndex?: number;
160
+ pageSize?: number;
161
+ sortBy?: GridSort[];
162
+ filters?: GridFilter[];
163
+ }) => void;
164
+
165
+ /** Accessibility */
166
+ ariaLabel?: string; // label for entire grid region
167
+ ariaDescription?: string;
168
+
169
+ /** Testing id passthrough */
170
+ 'data-testid'?: string;
171
+ }
@@ -0,0 +1,21 @@
1
+ export { DataGrid } from './DataGrid';
2
+ export type {
3
+ DataGridProps,
4
+ EditMode,
5
+ FilterMode,
6
+ GridColumn,
7
+ GridDensity,
8
+ GridEditing,
9
+ GridFilter,
10
+ GridFiltering,
11
+ GridPagination,
12
+ GridRowExpansion,
13
+ GridSelection,
14
+ GridSelectionMode,
15
+ GridSizeMode,
16
+ GridSort,
17
+ GridSorting,
18
+ PaginationMode,
19
+ SortDirection,
20
+ SortMode,
21
+ } from './DataGrid.types';
@@ -0,0 +1,197 @@
1
+ import { Box, Tooltip, Typography } from '@mui/material';
2
+ import { forwardRef, useMemo } from 'react';
3
+
4
+ import type { DateTimeDisplayProps } from './DateTimeDisplay.types';
5
+
6
+ /**
7
+ * Format a date for display
8
+ */
9
+ function formatDatePart(date: Date, format: 'short' | 'long' | 'numeric'): string {
10
+ const options: Intl.DateTimeFormatOptions = {
11
+ year: 'numeric',
12
+ month: format === 'numeric' ? '2-digit' : format === 'short' ? 'short' : 'long',
13
+ day: format === 'numeric' ? '2-digit' : 'numeric',
14
+ };
15
+ return date.toLocaleDateString(undefined, options);
16
+ }
17
+
18
+ /**
19
+ * Format time for display
20
+ */
21
+ function formatTimePart(
22
+ date: Date,
23
+ timeFormat: '12h' | '24h',
24
+ showTimezone: boolean,
25
+ ): string {
26
+ const options: Intl.DateTimeFormatOptions = {
27
+ hour: 'numeric',
28
+ minute: '2-digit',
29
+ hour12: timeFormat === '12h',
30
+ ...(showTimezone && { timeZoneName: 'short' }),
31
+ };
32
+ return date.toLocaleTimeString(undefined, options);
33
+ }
34
+
35
+ /**
36
+ * Get font sizes based on size prop
37
+ */
38
+ function getFontSizes(size: 'small' | 'medium' | 'large') {
39
+ switch (size) {
40
+ case 'small':
41
+ return { date: '0.75rem', time: '0.65rem' };
42
+ case 'large':
43
+ return { date: '1rem', time: '0.875rem' };
44
+ case 'medium':
45
+ default:
46
+ return { date: '0.875rem', time: '0.75rem' };
47
+ }
48
+ }
49
+
50
+ /**
51
+ * DateTimeDisplay component - displays date and time in a stacked format
52
+ * with date on one line and time on another.
53
+ */
54
+ export const DateTimeDisplay = forwardRef<HTMLSpanElement, DateTimeDisplayProps>(
55
+ (
56
+ {
57
+ date,
58
+ dateFormat = 'short',
59
+ timeFormat = '12h',
60
+ showTimezone = false,
61
+ size = 'medium',
62
+ showTooltip = true,
63
+ tooltipContent,
64
+ sx,
65
+ dataTestId,
66
+ },
67
+ ref,
68
+ ) => {
69
+ const dateObj = useMemo(() => {
70
+ if (!date) return null;
71
+ return date instanceof Date ? date : new Date(date);
72
+ }, [date]);
73
+
74
+ // Auto-detect if time is midnight (no meaningful time)
75
+ const hasTime = useMemo(() => {
76
+ if (!dateObj || isNaN(dateObj.getTime())) return false;
77
+ // If time is midnight (ignoring milliseconds), assume no time was provided
78
+ const hours = dateObj.getHours();
79
+ const minutes = dateObj.getMinutes();
80
+ const seconds = dateObj.getSeconds();
81
+ // Check if time is midnight (00:00:00) - ignore milliseconds
82
+ const isMidnight = hours === 0 && minutes === 0 && seconds === 0;
83
+ return !isMidnight;
84
+ }, [dateObj]);
85
+
86
+
87
+ const formattedDate = useMemo(() => {
88
+ if (!dateObj || isNaN(dateObj.getTime())) return null;
89
+ return formatDatePart(dateObj, dateFormat);
90
+ }, [dateObj, dateFormat]);
91
+
92
+ const formattedTime = useMemo(() => {
93
+ if (!dateObj || isNaN(dateObj.getTime()) || !hasTime) return null;
94
+ return formatTimePart(dateObj, timeFormat, showTimezone);
95
+ }, [dateObj, hasTime, timeFormat, showTimezone]);
96
+
97
+ const fullDateTime = useMemo(() => {
98
+ if (!dateObj || isNaN(dateObj.getTime())) return null;
99
+
100
+ // If no time to show, only show date in tooltip
101
+ if (!hasTime) {
102
+ return dateObj.toLocaleDateString(undefined, {
103
+ weekday: 'long',
104
+ year: 'numeric',
105
+ month: 'long',
106
+ day: 'numeric',
107
+ });
108
+ }
109
+
110
+ return dateObj.toLocaleString(undefined, {
111
+ weekday: 'long',
112
+ year: 'numeric',
113
+ month: 'long',
114
+ day: 'numeric',
115
+ hour: 'numeric',
116
+ minute: '2-digit',
117
+ second: '2-digit',
118
+ timeZoneName: 'short',
119
+ });
120
+ }, [dateObj, hasTime]);
121
+
122
+ const fontSizes = getFontSizes(size);
123
+
124
+ // Handle invalid or missing date
125
+ if (!dateObj || isNaN(dateObj.getTime())) {
126
+ return (
127
+ <Box
128
+ component="span"
129
+ ref={ref}
130
+ data-testid={dataTestId}
131
+ sx={{ color: 'text.disabled', ...sx }}
132
+ >
133
+ <Typography variant="caption">-</Typography>
134
+ </Box>
135
+ );
136
+ }
137
+
138
+ const content = (
139
+ <Box
140
+ component="span"
141
+ ref={ref}
142
+ data-testid={dataTestId}
143
+ sx={{
144
+ display: 'inline-flex',
145
+ flexDirection: 'column',
146
+ lineHeight: 1.3,
147
+ cursor: showTooltip ? 'help' : 'default',
148
+ ...sx,
149
+ }}
150
+ >
151
+ <Typography
152
+ component="span"
153
+ sx={{
154
+ fontWeight: 500,
155
+ fontSize: fontSizes.date,
156
+ }}
157
+ data-testid={dataTestId ? `${dataTestId}-date` : undefined}
158
+ >
159
+ {formattedDate}
160
+ </Typography>
161
+ {formattedTime && (
162
+ <Typography
163
+ component="span"
164
+ sx={{
165
+ fontSize: fontSizes.time,
166
+ color: 'text.secondary',
167
+ }}
168
+ data-testid={dataTestId ? `${dataTestId}-time` : undefined}
169
+ >
170
+ {formattedTime}
171
+ </Typography>
172
+ )}
173
+ </Box>
174
+ );
175
+
176
+ if (!showTooltip) {
177
+ return content;
178
+ }
179
+
180
+ return (
181
+ <Tooltip
182
+ title={tooltipContent || fullDateTime}
183
+ arrow
184
+ placement="top"
185
+ slotProps={{
186
+ tooltip: {
187
+ sx: { px: 2, py: 1 },
188
+ },
189
+ }}
190
+ >
191
+ {content}
192
+ </Tooltip>
193
+ );
194
+ },
195
+ );
196
+
197
+ DateTimeDisplay.displayName = 'DateTimeDisplay';
@@ -0,0 +1,46 @@
1
+ import type { SxProps, Theme } from '@mui/material';
2
+
3
+ export interface DateTimeDisplayProps {
4
+ /**
5
+ * The date to display. Can be a Date object or ISO string.
6
+ * Time is auto-detected: if time is midnight (00:00:00), only date is shown.
7
+ */
8
+ date: Date | string;
9
+ /**
10
+ * Date format for the date line
11
+ * @default 'short' - "Dec 16, 2024"
12
+ */
13
+ dateFormat?: 'short' | 'long' | 'numeric';
14
+ /**
15
+ * Time format
16
+ * @default '12h' - "3:45 PM"
17
+ */
18
+ timeFormat?: '12h' | '24h';
19
+ /**
20
+ * Whether to show timezone abbreviation in time
21
+ * @default false
22
+ */
23
+ showTimezone?: boolean;
24
+ /**
25
+ * Size variant
26
+ * @default 'medium'
27
+ */
28
+ size?: 'small' | 'medium' | 'large';
29
+ /**
30
+ * Whether to show a tooltip with full date/time
31
+ * @default true
32
+ */
33
+ showTooltip?: boolean;
34
+ /**
35
+ * Custom tooltip content
36
+ */
37
+ tooltipContent?: React.ReactNode;
38
+ /**
39
+ * Additional styles
40
+ */
41
+ sx?: SxProps<Theme>;
42
+ /**
43
+ * Test ID for testing
44
+ */
45
+ dataTestId?: string;
46
+ }
@@ -0,0 +1,2 @@
1
+ export { DateTimeDisplay } from './DateTimeDisplay';
2
+ export type { DateTimeDisplayProps } from './DateTimeDisplay.types';
@@ -0,0 +1,226 @@
1
+ # DescriptionItem
2
+
3
+ A label-value pair component for displaying read-only information in a consistent vertical layout.
4
+
5
+ ## Features
6
+
7
+ - **Two Orientations**: Vertical (label above value) or horizontal (label beside value)
8
+ - **Clear Visual Hierarchy**: Label displayed with distinct styling
9
+ - **Flexible Values**: Supports text, numbers, or any React node as the value
10
+ - **Uppercase Labels**: Labels are automatically styled in uppercase for consistency
11
+ - **Custom Content**: Can render custom components like chips, buttons, or complex layouts
12
+ - **Responsive**: Works well in grid or stack layouts
13
+ - **Accessible**: Proper semantic HTML with data-testid support
14
+
15
+ ## Usage
16
+
17
+ ### Basic Usage
18
+
19
+ ```tsx
20
+ import { DescriptionItem } from '@app-services-monitoring/ui';
21
+
22
+ function MyComponent() {
23
+ return (
24
+ <DescriptionItem
25
+ label="Incident ID"
26
+ value="INC-12345"
27
+ />
28
+ );
29
+ }
30
+ ```
31
+
32
+ ### With Number Value
33
+
34
+ ```tsx
35
+ <DescriptionItem
36
+ label="Services Affected"
37
+ value={42}
38
+ />
39
+ ```
40
+
41
+ ### With Custom Component
42
+
43
+ ```tsx
44
+ <DescriptionItem
45
+ label="Status"
46
+ value={<Chip label="Active" color="success" />}
47
+ />
48
+ ```
49
+
50
+ ### Horizontal Orientation
51
+
52
+ ```tsx
53
+ <DescriptionItem
54
+ label="Name"
55
+ value="John Doe"
56
+ orientation="horizontal"
57
+ />
58
+ ```
59
+
60
+ ### Vertical Orientation (Default)
61
+
62
+ ```tsx
63
+ <DescriptionItem
64
+ label="Name"
65
+ value="John Doe"
66
+ orientation="vertical"
67
+ />
68
+ ```
69
+
70
+ ### Copyable Value
71
+
72
+ ```tsx
73
+ <DescriptionItem
74
+ label="Incident ID"
75
+ value={
76
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>
77
+ <Text variant="body" size="sm" weight="semibold">
78
+ INC-12345
79
+ </Text>
80
+ <Button
81
+ variant="ghost"
82
+ size="sm"
83
+ onClick={() => navigator.clipboard.writeText('INC-12345')}
84
+ aria-label="Copy incident ID"
85
+ >
86
+ <ContentCopyIcon sx={{ fontSize: 16 }} />
87
+ </Button>
88
+ </Box>
89
+ }
90
+ />
91
+ ```
92
+
93
+ ### Grid Layout
94
+
95
+ ```tsx
96
+ <Box
97
+ sx={{
98
+ display: 'grid',
99
+ gridTemplateColumns: { xs: '1fr', sm: 'repeat(2, 1fr)', md: 'repeat(4, 1fr)' },
100
+ gap: 3,
101
+ }}
102
+ >
103
+ <DescriptionItem label="Incident ID" value="INC-12345" />
104
+ <DescriptionItem label="Started" value="2 hours ago" />
105
+ <DescriptionItem label="Duration" value="Ongoing" />
106
+ <DescriptionItem label="Services Affected" value={5} />
107
+ </Box>
108
+ ```
109
+
110
+ ### Vertical Stack (Vertical Orientation)
111
+
112
+ ```tsx
113
+ <Stack spacing={3}>
114
+ <DescriptionItem label="Name" value="John Doe" />
115
+ <DescriptionItem label="Email" value="john.doe@example.com" />
116
+ <DescriptionItem label="Department" value="Engineering" />
117
+ </Stack>
118
+ ```
119
+
120
+ ### List Layout (Horizontal Orientation)
121
+
122
+ ```tsx
123
+ <Stack spacing={2}>
124
+ <DescriptionItem label="Name" value="John Doe" orientation="horizontal" />
125
+ <DescriptionItem label="Email" value="john.doe@example.com" orientation="horizontal" />
126
+ <DescriptionItem label="Department" value="Engineering" orientation="horizontal" />
127
+ <DescriptionItem label="Role" value={<Chip label="Admin" />} orientation="horizontal" />
128
+ </Stack>
129
+ ```
130
+
131
+ ## Props
132
+
133
+ | Prop | Type | Default | Description |
134
+ |------|------|---------|-------------|
135
+ | `label` | `string` | Required | The label text to display |
136
+ | `value` | `ReactNode` | Required | The value to display - can be text, number, or any React node |
137
+ | `orientation` | `'vertical' \| 'horizontal'` | `'vertical'` | Layout orientation: vertical (label above) or horizontal (label beside) |
138
+ | `className` | `string` | - | Optional CSS class name |
139
+ | `data-testid` | `string` | `'description-item'` | Test ID for testing purposes |
140
+
141
+ ## Styling
142
+
143
+ The component uses the following styling:
144
+ - **Label**: Uppercase text, secondary color, extra-small size
145
+ - **Value**: Semibold text for string/number values, small size
146
+ - **Layout**:
147
+ - Vertical: Flex column layout with label on top, 0.25rem gap
148
+ - Horizontal: Flex row layout with label beside value, 1rem gap, center-aligned
149
+ - **Label Width**: In horizontal mode, label has `fit-content` width and doesn't shrink
150
+
151
+ ## Value Rendering
152
+
153
+ The component intelligently renders values:
154
+ - **String/Number**: Automatically wrapped in `<Text>` component with semibold weight
155
+ - **React Node**: Rendered as-is, allowing full customization
156
+
157
+ ## Common Patterns
158
+
159
+ ### Detail View
160
+
161
+ ```tsx
162
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 3 }}>
163
+ <DescriptionItem label="Order ID" value="ORD-001" />
164
+ <DescriptionItem label="Customer" value="Acme Corp" />
165
+ <DescriptionItem label="Total" value="$1,234.56" />
166
+ <DescriptionItem label="Status" value={<Chip label="Completed" />} />
167
+ </Box>
168
+ ```
169
+
170
+ ### Profile Information
171
+
172
+ ```tsx
173
+ <Stack spacing={3}>
174
+ <DescriptionItem label="Full Name" value="Jane Smith" />
175
+ <DescriptionItem label="Position" value="Senior Engineer" />
176
+ <DescriptionItem label="Department" value="Platform Engineering" />
177
+ <DescriptionItem label="Location" value="San Francisco, CA" />
178
+ </Stack>
179
+ ```
180
+
181
+ ### Incident Metadata
182
+
183
+ ```tsx
184
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 3 }}>
185
+ <DescriptionItem
186
+ label="Incident ID"
187
+ value={
188
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>
189
+ <Text>INC-12345</Text>
190
+ <Button variant="ghost" size="sm"><CopyIcon /></Button>
191
+ </Box>
192
+ }
193
+ />
194
+ <DescriptionItem label="Started" value="2 hours ago" />
195
+ <DescriptionItem label="Duration" value="Ongoing" />
196
+ <DescriptionItem label="Services" value={3} />
197
+ </Box>
198
+ ```
199
+
200
+ ## Accessibility
201
+
202
+ - Semantic HTML structure
203
+ - Proper text hierarchy
204
+ - Support for `data-testid` on container, label, and value elements
205
+ - Works with screen readers
206
+ - Supports `aria-label` on custom content
207
+
208
+ ## Best Practices
209
+
210
+ 1. **Use Clear Labels**: Keep labels concise and descriptive
211
+ 2. **Consistent Formatting**: Use consistent value formatting across related items
212
+ 3. **Choose Right Orientation**:
213
+ - Use **vertical** for grid layouts with multiple columns
214
+ - Use **horizontal** for list/stack layouts or narrow containers
215
+ 4. **Grid Layouts**: Use CSS Grid with vertical orientation for multi-column displays
216
+ 5. **List Layouts**: Use Stack with horizontal orientation for single-column lists
217
+ 6. **Empty Values**: Show "N/A" or "-" for missing/empty values
218
+ 7. **Interactive Elements**: When adding buttons/links, ensure proper accessibility
219
+ 8. **Custom Components**: Use appropriate components (Chip, Badge) for status indicators
220
+
221
+ ## Related Components
222
+
223
+ - **Text**: For custom value rendering
224
+ - **Chip**: For status/tag values
225
+ - **Badge**: For count indicators
226
+ - **Button**: For interactive actions in values