@etus/ui 0.1.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 (1075) hide show
  1. package/dist/chunk-HRNDJU7D.js +11 -0
  2. package/dist/chunk-HRNDJU7D.js.map +1 -0
  3. package/dist/index.d.ts +21250 -0
  4. package/dist/index.js +44886 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/utils.d.ts +5 -0
  7. package/dist/lib/utils.js +7 -0
  8. package/dist/lib/utils.js.map +1 -0
  9. package/package.json +145 -0
  10. package/src/components/CLAUDE.md +66 -0
  11. package/src/components/advanced/AssetManager/AssetManager.test.tsx +624 -0
  12. package/src/components/advanced/AssetManager/AssetManager.tsx +928 -0
  13. package/src/components/advanced/AssetManager/AssetManager.types.ts +248 -0
  14. package/src/components/advanced/AssetManager/AssetManager.variants.ts +284 -0
  15. package/src/components/advanced/AssetManager/README.md +246 -0
  16. package/src/components/advanced/AssetManager/index.ts +4 -0
  17. package/src/components/advanced/CLAUDE.md +77 -0
  18. package/src/components/advanced/Calendar/Calendar.test.tsx +718 -0
  19. package/src/components/advanced/Calendar/Calendar.tsx +264 -0
  20. package/src/components/advanced/Calendar/Calendar.types.ts +62 -0
  21. package/src/components/advanced/Calendar/Calendar.variants.ts +154 -0
  22. package/src/components/advanced/Calendar/README.md +389 -0
  23. package/src/components/advanced/Calendar/index.ts +3 -0
  24. package/src/components/advanced/Command/Command.test.tsx +1014 -0
  25. package/src/components/advanced/Command/Command.tsx +330 -0
  26. package/src/components/advanced/Command/Command.types.ts +238 -0
  27. package/src/components/advanced/Command/Command.variants.ts +300 -0
  28. package/src/components/advanced/Command/README.md +1259 -0
  29. package/src/components/advanced/Command/index.ts +45 -0
  30. package/src/components/advanced/DragAndDrop/DragAndDrop.test.tsx +573 -0
  31. package/src/components/advanced/DragAndDrop/DragAndDrop.tsx +495 -0
  32. package/src/components/advanced/DragAndDrop/DragAndDrop.types.ts +237 -0
  33. package/src/components/advanced/DragAndDrop/DragAndDrop.variants.ts +156 -0
  34. package/src/components/advanced/DragAndDrop/README.md +284 -0
  35. package/src/components/advanced/DragAndDrop/index.ts +4 -0
  36. package/src/components/advanced/ErrorBoundary/ErrorBoundary.test.tsx +372 -0
  37. package/src/components/advanced/ErrorBoundary/ErrorBoundary.tsx +184 -0
  38. package/src/components/advanced/ErrorBoundary/ErrorBoundary.types.ts +73 -0
  39. package/src/components/advanced/ErrorBoundary/ErrorBoundary.variants.ts +153 -0
  40. package/src/components/advanced/ErrorBoundary/README.md +296 -0
  41. package/src/components/advanced/ErrorBoundary/index.ts +18 -0
  42. package/src/components/advanced/EventCalendar/EventCalendar.test.tsx +535 -0
  43. package/src/components/advanced/EventCalendar/EventCalendar.tsx +1066 -0
  44. package/src/components/advanced/EventCalendar/EventCalendar.types.ts +232 -0
  45. package/src/components/advanced/EventCalendar/EventCalendar.variants.ts +222 -0
  46. package/src/components/advanced/EventCalendar/README.md +330 -0
  47. package/src/components/advanced/EventCalendar/index.ts +35 -0
  48. package/src/components/advanced/FileDropzone/FileDropzone.test.tsx +344 -0
  49. package/src/components/advanced/FileDropzone/FileDropzone.tsx +188 -0
  50. package/src/components/advanced/FileDropzone/FileDropzone.types.ts +47 -0
  51. package/src/components/advanced/FileDropzone/FileDropzone.variants.ts +46 -0
  52. package/src/components/advanced/FileDropzone/README.md +359 -0
  53. package/src/components/advanced/FileDropzone/index.ts +7 -0
  54. package/src/components/advanced/FilePreview/FilePreview.test.tsx +503 -0
  55. package/src/components/advanced/FilePreview/FilePreview.tsx +385 -0
  56. package/src/components/advanced/FilePreview/FilePreview.types.ts +90 -0
  57. package/src/components/advanced/FilePreview/FilePreview.variants.ts +234 -0
  58. package/src/components/advanced/FilePreview/README.md +318 -0
  59. package/src/components/advanced/FilePreview/index.ts +25 -0
  60. package/src/components/advanced/FileUpload/FileUpload.test.tsx +676 -0
  61. package/src/components/advanced/FileUpload/FileUpload.tsx +845 -0
  62. package/src/components/advanced/FileUpload/FileUpload.types.ts +270 -0
  63. package/src/components/advanced/FileUpload/FileUpload.variants.ts +216 -0
  64. package/src/components/advanced/FileUpload/README.md +380 -0
  65. package/src/components/advanced/FileUpload/index.ts +39 -0
  66. package/src/components/advanced/FilterBuilder/FilterBuilder.test.tsx +644 -0
  67. package/src/components/advanced/FilterBuilder/FilterBuilder.tsx +881 -0
  68. package/src/components/advanced/FilterBuilder/FilterBuilder.types.ts +249 -0
  69. package/src/components/advanced/FilterBuilder/FilterBuilder.variants.ts +307 -0
  70. package/src/components/advanced/FilterBuilder/README.md +383 -0
  71. package/src/components/advanced/FilterBuilder/index.ts +48 -0
  72. package/src/components/advanced/MarkdownEditor/MarkdownEditor.test.tsx +468 -0
  73. package/src/components/advanced/MarkdownEditor/MarkdownEditor.tsx +556 -0
  74. package/src/components/advanced/MarkdownEditor/MarkdownEditor.types.ts +108 -0
  75. package/src/components/advanced/MarkdownEditor/MarkdownEditor.variants.ts +62 -0
  76. package/src/components/advanced/MarkdownEditor/README.md +352 -0
  77. package/src/components/advanced/MarkdownEditor/index.ts +15 -0
  78. package/src/components/advanced/Portal/Portal.test.tsx +406 -0
  79. package/src/components/advanced/Portal/Portal.tsx +77 -0
  80. package/src/components/advanced/Portal/Portal.types.ts +28 -0
  81. package/src/components/advanced/Portal/Portal.variants.ts +95 -0
  82. package/src/components/advanced/Portal/README.md +326 -0
  83. package/src/components/advanced/Portal/index.ts +9 -0
  84. package/src/components/advanced/RichTextEditor/README.md +383 -0
  85. package/src/components/advanced/RichTextEditor/RichTextEditor.test.tsx +394 -0
  86. package/src/components/advanced/RichTextEditor/RichTextEditor.tsx +651 -0
  87. package/src/components/advanced/RichTextEditor/RichTextEditor.types.ts +77 -0
  88. package/src/components/advanced/RichTextEditor/RichTextEditor.variants.ts +151 -0
  89. package/src/components/advanced/RichTextEditor/index.ts +24 -0
  90. package/src/components/advanced/Search/README.md +391 -0
  91. package/src/components/advanced/Search/Search.test.tsx +567 -0
  92. package/src/components/advanced/Search/Search.tsx +829 -0
  93. package/src/components/advanced/Search/Search.types.ts +243 -0
  94. package/src/components/advanced/Search/Search.variants.ts +358 -0
  95. package/src/components/advanced/Search/index.ts +52 -0
  96. package/src/components/advanced/SortableList/README.md +448 -0
  97. package/src/components/advanced/SortableList/SortableList.test.tsx +317 -0
  98. package/src/components/advanced/SortableList/SortableList.tsx +392 -0
  99. package/src/components/advanced/SortableList/SortableList.types.ts +122 -0
  100. package/src/components/advanced/SortableList/SortableList.variants.ts +141 -0
  101. package/src/components/advanced/SortableList/index.ts +33 -0
  102. package/src/components/advanced/VersionControl/README.md +440 -0
  103. package/src/components/advanced/VersionControl/VersionControl.test.tsx +517 -0
  104. package/src/components/advanced/VersionControl/VersionControl.tsx +758 -0
  105. package/src/components/advanced/VersionControl/VersionControl.types.ts +176 -0
  106. package/src/components/advanced/VersionControl/VersionControl.variants.ts +203 -0
  107. package/src/components/advanced/VersionControl/index.ts +33 -0
  108. package/src/components/advanced/index.ts +17 -0
  109. package/src/components/data-display/Accordion/Accordion.test.tsx +519 -0
  110. package/src/components/data-display/Accordion/Accordion.tsx +164 -0
  111. package/src/components/data-display/Accordion/Accordion.types.ts +37 -0
  112. package/src/components/data-display/Accordion/Accordion.variants.ts +112 -0
  113. package/src/components/data-display/Accordion/README.md +976 -0
  114. package/src/components/data-display/Accordion/index.ts +31 -0
  115. package/src/components/data-display/AreaChart/AreaChart.test.tsx +529 -0
  116. package/src/components/data-display/AreaChart/AreaChart.tsx +318 -0
  117. package/src/components/data-display/AreaChart/AreaChart.types.ts +169 -0
  118. package/src/components/data-display/AreaChart/AreaChart.variants.ts +45 -0
  119. package/src/components/data-display/AreaChart/README.md +229 -0
  120. package/src/components/data-display/AreaChart/index.ts +2 -0
  121. package/src/components/data-display/Banner/Banner.test.tsx +648 -0
  122. package/src/components/data-display/Banner/Banner.tsx +111 -0
  123. package/src/components/data-display/Banner/Banner.types.ts +51 -0
  124. package/src/components/data-display/Banner/Banner.variants.ts +37 -0
  125. package/src/components/data-display/Banner/README.md +351 -0
  126. package/src/components/data-display/Banner/index.ts +2 -0
  127. package/src/components/data-display/BarChart/BarChart.test.tsx +536 -0
  128. package/src/components/data-display/BarChart/BarChart.tsx +305 -0
  129. package/src/components/data-display/BarChart/BarChart.types.ts +145 -0
  130. package/src/components/data-display/BarChart/BarChart.variants.ts +61 -0
  131. package/src/components/data-display/BarChart/README.md +205 -0
  132. package/src/components/data-display/BarChart/index.ts +2 -0
  133. package/src/components/data-display/BarList/BarList.tsx +172 -0
  134. package/src/components/data-display/BarList/BarList.types.ts +69 -0
  135. package/src/components/data-display/BarList/BarList.variants.ts +63 -0
  136. package/src/components/data-display/BarList/index.ts +2 -0
  137. package/src/components/data-display/CLAUDE.md +90 -0
  138. package/src/components/data-display/Callout/Callout.test.tsx +516 -0
  139. package/src/components/data-display/Callout/Callout.tsx +112 -0
  140. package/src/components/data-display/Callout/Callout.types.ts +37 -0
  141. package/src/components/data-display/Callout/Callout.variants.ts +48 -0
  142. package/src/components/data-display/Callout/README.md +341 -0
  143. package/src/components/data-display/Callout/index.ts +2 -0
  144. package/src/components/data-display/Carousel/Carousel.test.tsx +386 -0
  145. package/src/components/data-display/Carousel/Carousel.tsx +241 -0
  146. package/src/components/data-display/Carousel/Carousel.types.ts +20 -0
  147. package/src/components/data-display/Carousel/Carousel.variants.ts +125 -0
  148. package/src/components/data-display/Carousel/README.md +711 -0
  149. package/src/components/data-display/Carousel/index.ts +1 -0
  150. package/src/components/data-display/CategoryBar/CategoryBar.tsx +220 -0
  151. package/src/components/data-display/CategoryBar/CategoryBar.types.ts +80 -0
  152. package/src/components/data-display/CategoryBar/CategoryBar.variants.ts +85 -0
  153. package/src/components/data-display/CategoryBar/index.ts +2 -0
  154. package/src/components/data-display/Chart/Chart.test.tsx +432 -0
  155. package/src/components/data-display/Chart/Chart.tsx +476 -0
  156. package/src/components/data-display/Chart/Chart.types.ts +24 -0
  157. package/src/components/data-display/Chart/Chart.variants.ts +106 -0
  158. package/src/components/data-display/Chart/README.md +674 -0
  159. package/src/components/data-display/Chart/index.ts +1 -0
  160. package/src/components/data-display/ChartCard/ChartCard.test.tsx +327 -0
  161. package/src/components/data-display/ChartCard/ChartCard.tsx +201 -0
  162. package/src/components/data-display/ChartCard/ChartCard.types.ts +68 -0
  163. package/src/components/data-display/ChartCard/ChartCard.variants.ts +63 -0
  164. package/src/components/data-display/ChartCard/index.ts +17 -0
  165. package/src/components/data-display/ChartLegend/ChartLegend.test.tsx +165 -0
  166. package/src/components/data-display/ChartLegend/ChartLegend.types.ts +88 -0
  167. package/src/components/data-display/ChartLegend/README.md +317 -0
  168. package/src/components/data-display/ChartLegend/index.ts +22 -0
  169. package/src/components/data-display/ComboChart/ComboChart.tsx +380 -0
  170. package/src/components/data-display/ComboChart/ComboChart.types.ts +224 -0
  171. package/src/components/data-display/ComboChart/index.ts +2 -0
  172. package/src/components/data-display/DashboardCard/DashboardCard.test.tsx +289 -0
  173. package/src/components/data-display/DashboardCard/DashboardCard.tsx +285 -0
  174. package/src/components/data-display/DashboardCard/DashboardCard.types.ts +74 -0
  175. package/src/components/data-display/DashboardCard/DashboardCard.variants.ts +67 -0
  176. package/src/components/data-display/DashboardCard/index.ts +25 -0
  177. package/src/components/data-display/DashboardFilterbar/DashboardFilterbar.tsx +151 -0
  178. package/src/components/data-display/DashboardFilterbar/DashboardFilterbar.types.ts +39 -0
  179. package/src/components/data-display/DashboardFilterbar/DashboardFilterbar.variants.ts +30 -0
  180. package/src/components/data-display/DashboardFilterbar/index.ts +10 -0
  181. package/src/components/data-display/DataTable/DataTable.test.tsx +654 -0
  182. package/src/components/data-display/DataTable/DataTable.tsx +529 -0
  183. package/src/components/data-display/DataTable/DataTable.types.ts +190 -0
  184. package/src/components/data-display/DataTable/DataTable.variants.ts +79 -0
  185. package/src/components/data-display/DataTable/README.md +447 -0
  186. package/src/components/data-display/DataTable/index.ts +2 -0
  187. package/src/components/data-display/DeltaBar/DeltaBar.tsx +100 -0
  188. package/src/components/data-display/DeltaBar/DeltaBar.types.ts +57 -0
  189. package/src/components/data-display/DeltaBar/DeltaBar.variants.ts +40 -0
  190. package/src/components/data-display/DeltaBar/index.ts +2 -0
  191. package/src/components/data-display/EmptyState/EmptyState.test.tsx +368 -0
  192. package/src/components/data-display/EmptyState/EmptyState.tsx +91 -0
  193. package/src/components/data-display/EmptyState/EmptyState.types.ts +9 -0
  194. package/src/components/data-display/EmptyState/EmptyState.variants.ts +28 -0
  195. package/src/components/data-display/EmptyState/README.md +746 -0
  196. package/src/components/data-display/EmptyState/index.ts +1 -0
  197. package/src/components/data-display/Feed/Feed.test.tsx +668 -0
  198. package/src/components/data-display/Feed/Feed.tsx +290 -0
  199. package/src/components/data-display/Feed/Feed.types.ts +104 -0
  200. package/src/components/data-display/Feed/Feed.variants.ts +64 -0
  201. package/src/components/data-display/Feed/README.md +326 -0
  202. package/src/components/data-display/Feed/index.ts +17 -0
  203. package/src/components/data-display/FunnelChart/FunnelChart.tsx +177 -0
  204. package/src/components/data-display/FunnelChart/FunnelChart.types.ts +145 -0
  205. package/src/components/data-display/FunnelChart/index.ts +2 -0
  206. package/src/components/data-display/GaugeChart/GaugeChart.test.tsx +129 -0
  207. package/src/components/data-display/GaugeChart/GaugeChart.tsx +332 -0
  208. package/src/components/data-display/GaugeChart/GaugeChart.types.ts +53 -0
  209. package/src/components/data-display/GaugeChart/GaugeChart.variants.ts +56 -0
  210. package/src/components/data-display/GaugeChart/README.md +305 -0
  211. package/src/components/data-display/GaugeChart/index.ts +3 -0
  212. package/src/components/data-display/Heatmap/Heatmap.test.tsx +630 -0
  213. package/src/components/data-display/Heatmap/Heatmap.tsx +569 -0
  214. package/src/components/data-display/Heatmap/Heatmap.types.ts +120 -0
  215. package/src/components/data-display/Heatmap/Heatmap.variants.ts +72 -0
  216. package/src/components/data-display/Heatmap/README.md +321 -0
  217. package/src/components/data-display/Heatmap/index.ts +2 -0
  218. package/src/components/data-display/HoverCard/HoverCard.test.tsx +314 -0
  219. package/src/components/data-display/HoverCard/HoverCard.tsx +40 -0
  220. package/src/components/data-display/HoverCard/HoverCard.types.ts +21 -0
  221. package/src/components/data-display/HoverCard/HoverCard.variants.ts +29 -0
  222. package/src/components/data-display/HoverCard/README.md +624 -0
  223. package/src/components/data-display/HoverCard/index.ts +1 -0
  224. package/src/components/data-display/ImageGallery/ImageGallery.test.tsx +519 -0
  225. package/src/components/data-display/ImageGallery/ImageGallery.tsx +733 -0
  226. package/src/components/data-display/ImageGallery/ImageGallery.types.ts +109 -0
  227. package/src/components/data-display/ImageGallery/ImageGallery.variants.ts +58 -0
  228. package/src/components/data-display/ImageGallery/README.md +352 -0
  229. package/src/components/data-display/ImageGallery/index.ts +9 -0
  230. package/src/components/data-display/Item/Item.test.tsx +476 -0
  231. package/src/components/data-display/Item/Item.tsx +195 -0
  232. package/src/components/data-display/Item/Item.types.ts +23 -0
  233. package/src/components/data-display/Item/Item.variants.ts +51 -0
  234. package/src/components/data-display/Item/README.md +759 -0
  235. package/src/components/data-display/Item/index.ts +1 -0
  236. package/src/components/data-display/KPICard/KPICard.test.tsx +445 -0
  237. package/src/components/data-display/KPICard/KPICard.tsx +203 -0
  238. package/src/components/data-display/KPICard/KPICard.types.ts +32 -0
  239. package/src/components/data-display/KPICard/KPICard.variants.ts +64 -0
  240. package/src/components/data-display/KPICard/README.md +380 -0
  241. package/src/components/data-display/KPICard/index.ts +7 -0
  242. package/src/components/data-display/Lightbox/Lightbox.test.tsx +574 -0
  243. package/src/components/data-display/Lightbox/Lightbox.tsx +466 -0
  244. package/src/components/data-display/Lightbox/Lightbox.types.ts +53 -0
  245. package/src/components/data-display/Lightbox/Lightbox.variants.ts +99 -0
  246. package/src/components/data-display/Lightbox/README.md +397 -0
  247. package/src/components/data-display/Lightbox/index.ts +2 -0
  248. package/src/components/data-display/LineChart/LineChart.test.tsx +654 -0
  249. package/src/components/data-display/LineChart/LineChart.tsx +295 -0
  250. package/src/components/data-display/LineChart/LineChart.types.ts +168 -0
  251. package/src/components/data-display/LineChart/LineChart.variants.ts +52 -0
  252. package/src/components/data-display/LineChart/README.md +242 -0
  253. package/src/components/data-display/LineChart/index.ts +8 -0
  254. package/src/components/data-display/List/List.test.tsx +756 -0
  255. package/src/components/data-display/List/List.tsx +455 -0
  256. package/src/components/data-display/List/List.types.ts +67 -0
  257. package/src/components/data-display/List/List.variants.ts +69 -0
  258. package/src/components/data-display/List/README.md +374 -0
  259. package/src/components/data-display/List/index.ts +9 -0
  260. package/src/components/data-display/MarkerBar/MarkerBar.tsx +130 -0
  261. package/src/components/data-display/MarkerBar/MarkerBar.types.ts +67 -0
  262. package/src/components/data-display/MarkerBar/MarkerBar.variants.ts +75 -0
  263. package/src/components/data-display/MarkerBar/index.ts +3 -0
  264. package/src/components/data-display/PieChart/PieChart.test.tsx +655 -0
  265. package/src/components/data-display/PieChart/PieChart.tsx +327 -0
  266. package/src/components/data-display/PieChart/PieChart.types.ts +134 -0
  267. package/src/components/data-display/PieChart/PieChart.variants.ts +49 -0
  268. package/src/components/data-display/PieChart/README.md +261 -0
  269. package/src/components/data-display/PieChart/index.ts +2 -0
  270. package/src/components/data-display/ScatterChart/ScatterChart.tsx +310 -0
  271. package/src/components/data-display/ScatterChart/ScatterChart.types.ts +272 -0
  272. package/src/components/data-display/ScatterChart/index.ts +2 -0
  273. package/src/components/data-display/SingleStat/README.md +363 -0
  274. package/src/components/data-display/SingleStat/SingleStat.test.tsx +223 -0
  275. package/src/components/data-display/SingleStat/SingleStat.tsx +251 -0
  276. package/src/components/data-display/SingleStat/SingleStat.types.ts +71 -0
  277. package/src/components/data-display/SingleStat/SingleStat.variants.ts +51 -0
  278. package/src/components/data-display/SingleStat/index.ts +6 -0
  279. package/src/components/data-display/Sparkline/README.md +321 -0
  280. package/src/components/data-display/Sparkline/Sparkline.test.tsx +276 -0
  281. package/src/components/data-display/Sparkline/Sparkline.tsx +971 -0
  282. package/src/components/data-display/Sparkline/Sparkline.types.ts +147 -0
  283. package/src/components/data-display/Sparkline/Sparkline.variants.ts +52 -0
  284. package/src/components/data-display/Sparkline/index.ts +9 -0
  285. package/src/components/data-display/Table/README.md +821 -0
  286. package/src/components/data-display/Table/Table.test.tsx +732 -0
  287. package/src/components/data-display/Table/Table.tsx +123 -0
  288. package/src/components/data-display/Table/Table.types.ts +20 -0
  289. package/src/components/data-display/Table/Table.variants.ts +123 -0
  290. package/src/components/data-display/Table/index.ts +1 -0
  291. package/src/components/data-display/Timeline/README.md +366 -0
  292. package/src/components/data-display/Timeline/Timeline.test.tsx +701 -0
  293. package/src/components/data-display/Timeline/Timeline.tsx +328 -0
  294. package/src/components/data-display/Timeline/Timeline.types.ts +59 -0
  295. package/src/components/data-display/Timeline/Timeline.variants.ts +152 -0
  296. package/src/components/data-display/Timeline/index.ts +15 -0
  297. package/src/components/data-display/Tracker/Tracker.tsx +105 -0
  298. package/src/components/data-display/Tracker/Tracker.types.ts +45 -0
  299. package/src/components/data-display/Tracker/Tracker.variants.ts +24 -0
  300. package/src/components/data-display/Tracker/index.ts +2 -0
  301. package/src/components/data-display/VirtualTable/README.md +383 -0
  302. package/src/components/data-display/VirtualTable/VirtualTable.test.tsx +295 -0
  303. package/src/components/data-display/VirtualTable/VirtualTable.tsx +354 -0
  304. package/src/components/data-display/VirtualTable/VirtualTable.types.ts +62 -0
  305. package/src/components/data-display/VirtualTable/VirtualTable.variants.ts +61 -0
  306. package/src/components/data-display/VirtualTable/index.ts +2 -0
  307. package/src/components/data-display/index.ts +35 -0
  308. package/src/components/feedback/Alert/Alert.test.tsx +614 -0
  309. package/src/components/feedback/Alert/Alert.tsx +48 -0
  310. package/src/components/feedback/Alert/Alert.types.ts +42 -0
  311. package/src/components/feedback/Alert/Alert.variants.ts +20 -0
  312. package/src/components/feedback/Alert/README.md +522 -0
  313. package/src/components/feedback/Alert/index.ts +3 -0
  314. package/src/components/feedback/AlertDialog/AlertDialog.test.tsx +1237 -0
  315. package/src/components/feedback/AlertDialog/AlertDialog.tsx +160 -0
  316. package/src/components/feedback/AlertDialog/AlertDialog.types.ts +139 -0
  317. package/src/components/feedback/AlertDialog/README.md +723 -0
  318. package/src/components/feedback/AlertDialog/index.ts +2 -0
  319. package/src/components/feedback/CLAUDE.md +87 -0
  320. package/src/components/feedback/ConfirmModal/ConfirmModal.test.tsx +404 -0
  321. package/src/components/feedback/ConfirmModal/ConfirmModal.tsx +139 -0
  322. package/src/components/feedback/ConfirmModal/ConfirmModal.types.ts +117 -0
  323. package/src/components/feedback/ConfirmModal/README.md +546 -0
  324. package/src/components/feedback/ConfirmModal/index.ts +2 -0
  325. package/src/components/feedback/Dialog/Dialog.test.tsx +1070 -0
  326. package/src/components/feedback/Dialog/Dialog.tsx +137 -0
  327. package/src/components/feedback/Dialog/Dialog.types.ts +119 -0
  328. package/src/components/feedback/Dialog/README.md +770 -0
  329. package/src/components/feedback/Dialog/index.ts +2 -0
  330. package/src/components/feedback/ErrorPage/ErrorPage.test.tsx +338 -0
  331. package/src/components/feedback/ErrorPage/ErrorPage.tsx +232 -0
  332. package/src/components/feedback/ErrorPage/ErrorPage.types.ts +95 -0
  333. package/src/components/feedback/ErrorPage/README.md +573 -0
  334. package/src/components/feedback/ErrorPage/index.ts +6 -0
  335. package/src/components/feedback/FocusTrap/FocusTrap.test.tsx +378 -0
  336. package/src/components/feedback/FocusTrap/FocusTrap.tsx +115 -0
  337. package/src/components/feedback/FocusTrap/FocusTrap.types.ts +119 -0
  338. package/src/components/feedback/FocusTrap/README.md +571 -0
  339. package/src/components/feedback/FocusTrap/index.ts +2 -0
  340. package/src/components/feedback/Message/Message.test.tsx +143 -0
  341. package/src/components/feedback/Message/Message.tsx +66 -0
  342. package/src/components/feedback/Message/Message.types.ts +44 -0
  343. package/src/components/feedback/Message/Message.variants.ts +24 -0
  344. package/src/components/feedback/Message/README.md +522 -0
  345. package/src/components/feedback/Message/index.ts +2 -0
  346. package/src/components/feedback/Modal/Modal.test.tsx +475 -0
  347. package/src/components/feedback/Modal/Modal.tsx +168 -0
  348. package/src/components/feedback/Modal/Modal.types.ts +91 -0
  349. package/src/components/feedback/Modal/README.md +517 -0
  350. package/src/components/feedback/Modal/index.ts +2 -0
  351. package/src/components/feedback/Notification/Notification.test.tsx +908 -0
  352. package/src/components/feedback/Notification/Notification.tsx +222 -0
  353. package/src/components/feedback/Notification/Notification.types.ts +90 -0
  354. package/src/components/feedback/Notification/Notification.variants.ts +54 -0
  355. package/src/components/feedback/Notification/README.md +602 -0
  356. package/src/components/feedback/Notification/index.ts +11 -0
  357. package/src/components/feedback/Popover/Popover.test.tsx +901 -0
  358. package/src/components/feedback/Popover/Popover.tsx +60 -0
  359. package/src/components/feedback/Popover/Popover.types.ts +158 -0
  360. package/src/components/feedback/Popover/Popover.variants.ts +27 -0
  361. package/src/components/feedback/Popover/README.md +700 -0
  362. package/src/components/feedback/Popover/index.ts +2 -0
  363. package/src/components/feedback/Toast/README.md +613 -0
  364. package/src/components/feedback/Toast/Toast.test.tsx +1116 -0
  365. package/src/components/feedback/Toast/Toast.tsx +44 -0
  366. package/src/components/feedback/Toast/Toast.types.ts +156 -0
  367. package/src/components/feedback/Toast/index.ts +1 -0
  368. package/src/components/feedback/Tooltip/README.md +671 -0
  369. package/src/components/feedback/Tooltip/Tooltip.test.tsx +413 -0
  370. package/src/components/feedback/Tooltip/Tooltip.tsx +110 -0
  371. package/src/components/feedback/Tooltip/Tooltip.types.ts +138 -0
  372. package/src/components/feedback/Tooltip/Tooltip.variants.ts +54 -0
  373. package/src/components/feedback/Tooltip/index.ts +3 -0
  374. package/src/components/feedback/index.ts +13 -0
  375. package/src/components/forms/Autocomplete/Autocomplete.test.tsx +2351 -0
  376. package/src/components/forms/Autocomplete/Autocomplete.tsx +696 -0
  377. package/src/components/forms/Autocomplete/Autocomplete.types.ts +211 -0
  378. package/src/components/forms/Autocomplete/Autocomplete.variants.ts +154 -0
  379. package/src/components/forms/Autocomplete/README.md +919 -0
  380. package/src/components/forms/Autocomplete/index.ts +7 -0
  381. package/src/components/forms/CLAUDE.md +124 -0
  382. package/src/components/forms/Checkbox/Checkbox.test.tsx +475 -0
  383. package/src/components/forms/Checkbox/Checkbox.tsx +35 -0
  384. package/src/components/forms/Checkbox/Checkbox.types.ts +24 -0
  385. package/src/components/forms/Checkbox/Checkbox.variants.ts +46 -0
  386. package/src/components/forms/Checkbox/README.md +861 -0
  387. package/src/components/forms/Checkbox/index.ts +3 -0
  388. package/src/components/forms/CheckboxGroup/CheckboxGroup.test.tsx +338 -0
  389. package/src/components/forms/CheckboxGroup/CheckboxGroup.tsx +212 -0
  390. package/src/components/forms/CheckboxGroup/CheckboxGroup.types.ts +150 -0
  391. package/src/components/forms/CheckboxGroup/CheckboxGroup.variants.ts +85 -0
  392. package/src/components/forms/CheckboxGroup/README.md +124 -0
  393. package/src/components/forms/CheckboxGroup/index.ts +21 -0
  394. package/src/components/forms/ColorPicker/ColorPicker.test.tsx +916 -0
  395. package/src/components/forms/ColorPicker/ColorPicker.tsx +282 -0
  396. package/src/components/forms/ColorPicker/ColorPicker.types.ts +99 -0
  397. package/src/components/forms/ColorPicker/ColorPicker.variants.ts +84 -0
  398. package/src/components/forms/ColorPicker/README.md +809 -0
  399. package/src/components/forms/ColorPicker/index.ts +14 -0
  400. package/src/components/forms/Combobox/Combobox.test.tsx +975 -0
  401. package/src/components/forms/Combobox/Combobox.tsx +194 -0
  402. package/src/components/forms/Combobox/Combobox.types.ts +113 -0
  403. package/src/components/forms/Combobox/Combobox.variants.ts +108 -0
  404. package/src/components/forms/Combobox/README.md +923 -0
  405. package/src/components/forms/Combobox/index.ts +7 -0
  406. package/src/components/forms/DatePicker/DatePicker.test.tsx +1181 -0
  407. package/src/components/forms/DatePicker/DatePicker.tsx +503 -0
  408. package/src/components/forms/DatePicker/DatePicker.types.ts +196 -0
  409. package/src/components/forms/DatePicker/DatePicker.variants.ts +38 -0
  410. package/src/components/forms/DatePicker/README.md +821 -0
  411. package/src/components/forms/DatePicker/index.ts +8 -0
  412. package/src/components/forms/DateRangePicker/DateRangeInput.tsx +139 -0
  413. package/src/components/forms/DateRangePicker/DateRangePicker.test.tsx +1684 -0
  414. package/src/components/forms/DateRangePicker/DateRangePicker.tsx +375 -0
  415. package/src/components/forms/DateRangePicker/DateRangePicker.types.ts +145 -0
  416. package/src/components/forms/DateRangePicker/DateRangePicker.variants.ts +133 -0
  417. package/src/components/forms/DateRangePicker/DateRangePresets.tsx +44 -0
  418. package/src/components/forms/DateRangePicker/index.ts +25 -0
  419. package/src/components/forms/DateRangePicker/presets.ts +104 -0
  420. package/src/components/forms/EmailInput/EmailInput.test.tsx +562 -0
  421. package/src/components/forms/EmailInput/EmailInput.tsx +59 -0
  422. package/src/components/forms/EmailInput/EmailInput.types.ts +46 -0
  423. package/src/components/forms/EmailInput/EmailInput.variants.ts +30 -0
  424. package/src/components/forms/EmailInput/README.md +708 -0
  425. package/src/components/forms/EmailInput/index.ts +6 -0
  426. package/src/components/forms/ErrorMessage/ErrorMessage.test.tsx +457 -0
  427. package/src/components/forms/ErrorMessage/ErrorMessage.tsx +128 -0
  428. package/src/components/forms/ErrorMessage/ErrorMessage.types.ts +54 -0
  429. package/src/components/forms/ErrorMessage/ErrorMessage.variants.ts +78 -0
  430. package/src/components/forms/ErrorMessage/README.md +855 -0
  431. package/src/components/forms/ErrorMessage/index.ts +4 -0
  432. package/src/components/forms/Field/Field.test.tsx +811 -0
  433. package/src/components/forms/Field/Field.tsx +195 -0
  434. package/src/components/forms/Field/Field.types.ts +94 -0
  435. package/src/components/forms/Field/Field.variants.ts +114 -0
  436. package/src/components/forms/Field/README.md +931 -0
  437. package/src/components/forms/Field/index.ts +3 -0
  438. package/src/components/forms/FloatLabel/FloatLabel.test.tsx +248 -0
  439. package/src/components/forms/FloatLabel/FloatLabel.tsx +110 -0
  440. package/src/components/forms/FloatLabel/FloatLabel.types.ts +37 -0
  441. package/src/components/forms/FloatLabel/index.ts +2 -0
  442. package/src/components/forms/Form/Form.test.tsx +1167 -0
  443. package/src/components/forms/Form/Form.tsx +170 -0
  444. package/src/components/forms/Form/Form.types.ts +126 -0
  445. package/src/components/forms/Form/Form.variants.ts +81 -0
  446. package/src/components/forms/Form/README.md +787 -0
  447. package/src/components/forms/Form/index.ts +3 -0
  448. package/src/components/forms/FormValidation/FormValidation.test.tsx +376 -0
  449. package/src/components/forms/FormValidation/FormValidation.tsx +99 -0
  450. package/src/components/forms/FormValidation/FormValidation.types.ts +37 -0
  451. package/src/components/forms/FormValidation/FormValidation.variants.ts +24 -0
  452. package/src/components/forms/FormValidation/README.md +592 -0
  453. package/src/components/forms/FormValidation/index.ts +4 -0
  454. package/src/components/forms/HelpText/HelpText.test.tsx +558 -0
  455. package/src/components/forms/HelpText/HelpText.tsx +111 -0
  456. package/src/components/forms/HelpText/HelpText.types.ts +51 -0
  457. package/src/components/forms/HelpText/HelpText.variants.ts +54 -0
  458. package/src/components/forms/HelpText/README.md +739 -0
  459. package/src/components/forms/HelpText/index.ts +4 -0
  460. package/src/components/forms/IftaLabel/IftaLabel.test.tsx +193 -0
  461. package/src/components/forms/IftaLabel/IftaLabel.tsx +72 -0
  462. package/src/components/forms/IftaLabel/IftaLabel.types.ts +18 -0
  463. package/src/components/forms/IftaLabel/index.ts +2 -0
  464. package/src/components/forms/InputGroup/InputGroup.test.tsx +782 -0
  465. package/src/components/forms/InputGroup/InputGroup.tsx +128 -0
  466. package/src/components/forms/InputGroup/InputGroup.types.ts +66 -0
  467. package/src/components/forms/InputGroup/InputGroup.variants.ts +102 -0
  468. package/src/components/forms/InputGroup/README.md +845 -0
  469. package/src/components/forms/InputGroup/index.ts +24 -0
  470. package/src/components/forms/InputOTP/InputOTP.test.tsx +793 -0
  471. package/src/components/forms/InputOTP/InputOTP.tsx +90 -0
  472. package/src/components/forms/InputOTP/InputOTP.types.ts +74 -0
  473. package/src/components/forms/InputOTP/InputOTP.variants.ts +64 -0
  474. package/src/components/forms/InputOTP/README.md +1149 -0
  475. package/src/components/forms/InputOTP/index.ts +18 -0
  476. package/src/components/forms/InputOTPField/InputOTPField.test.tsx +220 -0
  477. package/src/components/forms/InputOTPField/InputOTPField.tsx +148 -0
  478. package/src/components/forms/InputOTPField/InputOTPField.types.ts +91 -0
  479. package/src/components/forms/InputOTPField/InputOTPField.variants.ts +83 -0
  480. package/src/components/forms/InputOTPField/README.md +195 -0
  481. package/src/components/forms/InputOTPField/index.ts +12 -0
  482. package/src/components/forms/MultiSelect/MultiSelect.test.tsx +1036 -0
  483. package/src/components/forms/MultiSelect/MultiSelect.tsx +291 -0
  484. package/src/components/forms/MultiSelect/MultiSelect.types.ts +147 -0
  485. package/src/components/forms/MultiSelect/MultiSelect.variants.ts +132 -0
  486. package/src/components/forms/MultiSelect/README.md +897 -0
  487. package/src/components/forms/MultiSelect/index.ts +7 -0
  488. package/src/components/forms/NativeSelect/NativeSelect.test.tsx +856 -0
  489. package/src/components/forms/NativeSelect/NativeSelect.tsx +75 -0
  490. package/src/components/forms/NativeSelect/NativeSelect.types.ts +17 -0
  491. package/src/components/forms/NativeSelect/NativeSelect.variants.ts +106 -0
  492. package/src/components/forms/NativeSelect/README.md +1033 -0
  493. package/src/components/forms/NativeSelect/index.ts +3 -0
  494. package/src/components/forms/NumberInput/NumberInput.test.tsx +636 -0
  495. package/src/components/forms/NumberInput/NumberInput.tsx +131 -0
  496. package/src/components/forms/NumberInput/NumberInput.types.ts +45 -0
  497. package/src/components/forms/NumberInput/NumberInput.variants.ts +85 -0
  498. package/src/components/forms/NumberInput/README.md +766 -0
  499. package/src/components/forms/NumberInput/index.ts +9 -0
  500. package/src/components/forms/PasswordInput/PasswordInput.test.tsx +525 -0
  501. package/src/components/forms/PasswordInput/PasswordInput.tsx +67 -0
  502. package/src/components/forms/PasswordInput/PasswordInput.types.ts +35 -0
  503. package/src/components/forms/PasswordInput/PasswordInput.variants.ts +34 -0
  504. package/src/components/forms/PasswordInput/README.md +698 -0
  505. package/src/components/forms/PasswordInput/index.ts +6 -0
  506. package/src/components/forms/PaymentInput/PaymentInput.test.tsx +252 -0
  507. package/src/components/forms/PaymentInput/PaymentInput.tsx +178 -0
  508. package/src/components/forms/PaymentInput/PaymentInput.types.ts +69 -0
  509. package/src/components/forms/PaymentInput/PaymentInput.variants.ts +81 -0
  510. package/src/components/forms/PaymentInput/README.md +263 -0
  511. package/src/components/forms/PaymentInput/card-utils.ts +219 -0
  512. package/src/components/forms/PaymentInput/index.ts +23 -0
  513. package/src/components/forms/PhoneInput/PhoneInput.test.tsx +270 -0
  514. package/src/components/forms/PhoneInput/PhoneInput.tsx +215 -0
  515. package/src/components/forms/PhoneInput/PhoneInput.types.ts +74 -0
  516. package/src/components/forms/PhoneInput/PhoneInput.variants.ts +103 -0
  517. package/src/components/forms/PhoneInput/README.md +258 -0
  518. package/src/components/forms/PhoneInput/countries.ts +134 -0
  519. package/src/components/forms/PhoneInput/index.ts +22 -0
  520. package/src/components/forms/RadioButton/README.md +832 -0
  521. package/src/components/forms/RadioButton/RadioButton.test.tsx +583 -0
  522. package/src/components/forms/RadioButton/RadioButton.tsx +82 -0
  523. package/src/components/forms/RadioButton/RadioButton.types.ts +23 -0
  524. package/src/components/forms/RadioButton/RadioButton.variants.ts +80 -0
  525. package/src/components/forms/RadioButton/index.ts +15 -0
  526. package/src/components/forms/RadioCardGroup/RadioCardGroup.tsx +130 -0
  527. package/src/components/forms/RadioCardGroup/RadioCardGroup.types.ts +66 -0
  528. package/src/components/forms/RadioCardGroup/RadioCardGroup.variants.ts +131 -0
  529. package/src/components/forms/RadioCardGroup/index.ts +3 -0
  530. package/src/components/forms/RadioGroup/README.md +908 -0
  531. package/src/components/forms/RadioGroup/RadioGroup.test.tsx +764 -0
  532. package/src/components/forms/RadioGroup/RadioGroup.tsx +75 -0
  533. package/src/components/forms/RadioGroup/RadioGroup.types.ts +36 -0
  534. package/src/components/forms/RadioGroup/RadioGroup.variants.ts +58 -0
  535. package/src/components/forms/RadioGroup/index.ts +15 -0
  536. package/src/components/forms/Rating/README.md +729 -0
  537. package/src/components/forms/Rating/Rating.test.tsx +729 -0
  538. package/src/components/forms/Rating/Rating.tsx +258 -0
  539. package/src/components/forms/Rating/Rating.types.ts +89 -0
  540. package/src/components/forms/Rating/Rating.variants.ts +56 -0
  541. package/src/components/forms/Rating/index.ts +8 -0
  542. package/src/components/forms/SearchInput/README.md +729 -0
  543. package/src/components/forms/SearchInput/SearchInput.test.tsx +579 -0
  544. package/src/components/forms/SearchInput/SearchInput.tsx +103 -0
  545. package/src/components/forms/SearchInput/SearchInput.types.ts +40 -0
  546. package/src/components/forms/SearchInput/SearchInput.variants.ts +51 -0
  547. package/src/components/forms/SearchInput/index.ts +8 -0
  548. package/src/components/forms/Select/README.md +1286 -0
  549. package/src/components/forms/Select/Select.test.tsx +1136 -0
  550. package/src/components/forms/Select/Select.tsx +170 -0
  551. package/src/components/forms/Select/Select.types.ts +75 -0
  552. package/src/components/forms/Select/Select.variants.ts +133 -0
  553. package/src/components/forms/Select/index.ts +3 -0
  554. package/src/components/forms/Slider/README.md +1246 -0
  555. package/src/components/forms/Slider/Slider.test.tsx +731 -0
  556. package/src/components/forms/Slider/Slider.tsx +235 -0
  557. package/src/components/forms/Slider/Slider.types.ts +90 -0
  558. package/src/components/forms/Slider/Slider.variants.ts +239 -0
  559. package/src/components/forms/Slider/index.ts +34 -0
  560. package/src/components/forms/SuccessMessage/README.md +534 -0
  561. package/src/components/forms/SuccessMessage/SuccessMessage.test.tsx +257 -0
  562. package/src/components/forms/SuccessMessage/SuccessMessage.tsx +43 -0
  563. package/src/components/forms/SuccessMessage/SuccessMessage.types.ts +11 -0
  564. package/src/components/forms/SuccessMessage/SuccessMessage.variants.ts +15 -0
  565. package/src/components/forms/SuccessMessage/index.ts +4 -0
  566. package/src/components/forms/Switch/README.md +785 -0
  567. package/src/components/forms/Switch/Switch.test.tsx +636 -0
  568. package/src/components/forms/Switch/Switch.tsx +28 -0
  569. package/src/components/forms/Switch/Switch.types.ts +24 -0
  570. package/src/components/forms/Switch/Switch.variants.ts +49 -0
  571. package/src/components/forms/Switch/index.ts +3 -0
  572. package/src/components/forms/TagsInput/README.md +216 -0
  573. package/src/components/forms/TagsInput/TagsInput.test.tsx +308 -0
  574. package/src/components/forms/TagsInput/TagsInput.tsx +189 -0
  575. package/src/components/forms/TagsInput/TagsInput.types.ts +85 -0
  576. package/src/components/forms/TagsInput/TagsInput.variants.ts +58 -0
  577. package/src/components/forms/TagsInput/index.ts +12 -0
  578. package/src/components/forms/TextInput/README.md +871 -0
  579. package/src/components/forms/TextInput/TextInput.test.tsx +484 -0
  580. package/src/components/forms/TextInput/TextInput.tsx +76 -0
  581. package/src/components/forms/TextInput/TextInput.types.ts +61 -0
  582. package/src/components/forms/TextInput/TextInput.variants.ts +117 -0
  583. package/src/components/forms/TextInput/index.ts +14 -0
  584. package/src/components/forms/Textarea/README.md +905 -0
  585. package/src/components/forms/Textarea/Textarea.test.tsx +482 -0
  586. package/src/components/forms/Textarea/Textarea.tsx +24 -0
  587. package/src/components/forms/Textarea/Textarea.types.ts +39 -0
  588. package/src/components/forms/Textarea/Textarea.variants.ts +48 -0
  589. package/src/components/forms/Textarea/index.ts +3 -0
  590. package/src/components/forms/TextareaField/README.md +172 -0
  591. package/src/components/forms/TextareaField/TextareaField.test.tsx +260 -0
  592. package/src/components/forms/TextareaField/TextareaField.tsx +73 -0
  593. package/src/components/forms/TextareaField/TextareaField.types.ts +37 -0
  594. package/src/components/forms/TextareaField/TextareaField.variants.ts +83 -0
  595. package/src/components/forms/TextareaField/index.ts +12 -0
  596. package/src/components/forms/TimePicker/README.md +750 -0
  597. package/src/components/forms/TimePicker/TimePicker.test.tsx +780 -0
  598. package/src/components/forms/TimePicker/TimePicker.tsx +383 -0
  599. package/src/components/forms/TimePicker/TimePicker.types.ts +94 -0
  600. package/src/components/forms/TimePicker/TimePicker.variants.ts +83 -0
  601. package/src/components/forms/TimePicker/index.ts +14 -0
  602. package/src/components/forms/ToggleGroup/README.md +870 -0
  603. package/src/components/forms/ToggleGroup/ToggleGroup.test.tsx +941 -0
  604. package/src/components/forms/ToggleGroup/ToggleGroup.tsx +5 -0
  605. package/src/components/forms/ToggleGroup/ToggleGroup.types.ts +17 -0
  606. package/src/components/forms/ToggleGroup/ToggleGroup.variants.ts +42 -0
  607. package/src/components/forms/ToggleGroup/index.ts +9 -0
  608. package/src/components/forms/URLInput/README.md +701 -0
  609. package/src/components/forms/URLInput/URLInput.test.tsx +602 -0
  610. package/src/components/forms/URLInput/URLInput.tsx +71 -0
  611. package/src/components/forms/URLInput/URLInput.types.ts +51 -0
  612. package/src/components/forms/URLInput/URLInput.variants.ts +52 -0
  613. package/src/components/forms/URLInput/index.ts +8 -0
  614. package/src/components/forms/index.ts +44 -0
  615. package/src/components/index.ts +26 -0
  616. package/src/components/layout/AppContent/AppContent.test.tsx +34 -0
  617. package/src/components/layout/AppContent/AppContent.tsx +23 -0
  618. package/src/components/layout/AppContent/AppContent.variants.ts +23 -0
  619. package/src/components/layout/AppContent/index.ts +2 -0
  620. package/src/components/layout/AppHeader/AppHeader.test.tsx +26 -0
  621. package/src/components/layout/AppHeader/AppHeader.tsx +17 -0
  622. package/src/components/layout/AppHeader/AppHeader.variants.ts +21 -0
  623. package/src/components/layout/AppHeader/AppHeaderActions.tsx +13 -0
  624. package/src/components/layout/AppHeader/AppHeaderNav.tsx +13 -0
  625. package/src/components/layout/AppHeader/AppHeaderTitle.tsx +13 -0
  626. package/src/components/layout/AppHeader/index.ts +5 -0
  627. package/src/components/layout/AppRail/AppRail.test.tsx +50 -0
  628. package/src/components/layout/AppRail/AppRail.tsx +24 -0
  629. package/src/components/layout/AppRail/AppRail.variants.ts +31 -0
  630. package/src/components/layout/AppRail/AppRailFooter.tsx +13 -0
  631. package/src/components/layout/AppRail/AppRailGroup.tsx +13 -0
  632. package/src/components/layout/AppRail/AppRailHeader.tsx +13 -0
  633. package/src/components/layout/AppRail/AppRailItem.tsx +57 -0
  634. package/src/components/layout/AppRail/index.ts +5 -0
  635. package/src/components/layout/AppShell/AppShell.context.tsx +34 -0
  636. package/src/components/layout/AppShell/AppShell.test.tsx +61 -0
  637. package/src/components/layout/AppShell/AppShell.tsx +91 -0
  638. package/src/components/layout/AppShell/AppShell.variants.ts +21 -0
  639. package/src/components/layout/AppShell/index.ts +2 -0
  640. package/src/components/layout/AppSidebar/AppSidebar.test.tsx +69 -0
  641. package/src/components/layout/AppSidebar/AppSidebar.tsx +58 -0
  642. package/src/components/layout/AppSidebar/AppSidebar.variants.ts +41 -0
  643. package/src/components/layout/AppSidebar/AppSidebarContent.tsx +18 -0
  644. package/src/components/layout/AppSidebar/AppSidebarFooter.tsx +13 -0
  645. package/src/components/layout/AppSidebar/AppSidebarGroup.tsx +22 -0
  646. package/src/components/layout/AppSidebar/AppSidebarHeader.tsx +13 -0
  647. package/src/components/layout/AppSidebar/AppSidebarItem.tsx +54 -0
  648. package/src/components/layout/AppSidebar/AppSidebarTrigger.tsx +25 -0
  649. package/src/components/layout/AppSidebar/index.ts +7 -0
  650. package/src/components/layout/CLAUDE.md +112 -0
  651. package/src/components/layout/Card/Card.test.tsx +339 -0
  652. package/src/components/layout/Card/Card.tsx +102 -0
  653. package/src/components/layout/Card/Card.types.ts +52 -0
  654. package/src/components/layout/Card/Card.variants.ts +85 -0
  655. package/src/components/layout/Card/README.md +994 -0
  656. package/src/components/layout/Card/index.ts +3 -0
  657. package/src/components/layout/Collapsible/Collapsible.test.tsx +491 -0
  658. package/src/components/layout/Collapsible/Collapsible.tsx +50 -0
  659. package/src/components/layout/Collapsible/Collapsible.types.ts +26 -0
  660. package/src/components/layout/Collapsible/Collapsible.variants.ts +52 -0
  661. package/src/components/layout/Collapsible/README.md +885 -0
  662. package/src/components/layout/Collapsible/index.ts +3 -0
  663. package/src/components/layout/Container/Container.test.tsx +283 -0
  664. package/src/components/layout/Container/Container.tsx +25 -0
  665. package/src/components/layout/Container/Container.types.ts +36 -0
  666. package/src/components/layout/Container/Container.variants.ts +59 -0
  667. package/src/components/layout/Container/README.md +700 -0
  668. package/src/components/layout/Container/index.ts +3 -0
  669. package/src/components/layout/Flex/Flex.test.tsx +545 -0
  670. package/src/components/layout/Flex/Flex.tsx +52 -0
  671. package/src/components/layout/Flex/Flex.types.ts +61 -0
  672. package/src/components/layout/Flex/Flex.variants.ts +98 -0
  673. package/src/components/layout/Flex/README.md +812 -0
  674. package/src/components/layout/Flex/index.ts +3 -0
  675. package/src/components/layout/Grid/Grid.test.tsx +601 -0
  676. package/src/components/layout/Grid/Grid.tsx +61 -0
  677. package/src/components/layout/Grid/Grid.types.ts +47 -0
  678. package/src/components/layout/Grid/Grid.variants.ts +100 -0
  679. package/src/components/layout/Grid/README.md +762 -0
  680. package/src/components/layout/Grid/index.ts +3 -0
  681. package/src/components/layout/PageContent/PageContent.tsx +13 -0
  682. package/src/components/layout/PageContent/index.ts +1 -0
  683. package/src/components/layout/PageHeader/PageHeader.tsx +43 -0
  684. package/src/components/layout/PageHeader/index.ts +1 -0
  685. package/src/components/layout/PageSection/PageSection.tsx +28 -0
  686. package/src/components/layout/PageSection/index.ts +1 -0
  687. package/src/components/layout/Panel/Panel.test.tsx +427 -0
  688. package/src/components/layout/Panel/Panel.tsx +75 -0
  689. package/src/components/layout/Panel/Panel.types.ts +59 -0
  690. package/src/components/layout/Panel/Panel.variants.ts +94 -0
  691. package/src/components/layout/Panel/README.md +861 -0
  692. package/src/components/layout/Panel/index.ts +3 -0
  693. package/src/components/layout/ResizablePanels/README.md +369 -0
  694. package/src/components/layout/ResizablePanels/ResizablePanels.test.tsx +506 -0
  695. package/src/components/layout/ResizablePanels/ResizablePanels.tsx +64 -0
  696. package/src/components/layout/ResizablePanels/ResizablePanels.types.ts +41 -0
  697. package/src/components/layout/ResizablePanels/ResizablePanels.variants.ts +67 -0
  698. package/src/components/layout/ResizablePanels/index.ts +3 -0
  699. package/src/components/layout/ResponsiveContainer/README.md +267 -0
  700. package/src/components/layout/ResponsiveContainer/ResponsiveContainer.test.tsx +386 -0
  701. package/src/components/layout/ResponsiveContainer/ResponsiveContainer.tsx +54 -0
  702. package/src/components/layout/ResponsiveContainer/ResponsiveContainer.types.ts +43 -0
  703. package/src/components/layout/ResponsiveContainer/ResponsiveContainer.variants.ts +106 -0
  704. package/src/components/layout/ResponsiveContainer/index.ts +3 -0
  705. package/src/components/layout/ScrollArea/README.md +278 -0
  706. package/src/components/layout/ScrollArea/ScrollArea.test.tsx +352 -0
  707. package/src/components/layout/ScrollArea/ScrollArea.tsx +61 -0
  708. package/src/components/layout/ScrollArea/ScrollArea.types.ts +36 -0
  709. package/src/components/layout/ScrollArea/ScrollArea.variants.ts +85 -0
  710. package/src/components/layout/ScrollArea/index.ts +3 -0
  711. package/src/components/layout/Section/README.md +315 -0
  712. package/src/components/layout/Section/Section.test.tsx +293 -0
  713. package/src/components/layout/Section/Section.tsx +60 -0
  714. package/src/components/layout/Section/Section.types.ts +38 -0
  715. package/src/components/layout/Section/Section.variants.ts +45 -0
  716. package/src/components/layout/Section/index.ts +3 -0
  717. package/src/components/layout/Sheet/README.md +533 -0
  718. package/src/components/layout/Sheet/Sheet.test.tsx +702 -0
  719. package/src/components/layout/Sheet/Sheet.tsx +142 -0
  720. package/src/components/layout/Sheet/Sheet.types.ts +92 -0
  721. package/src/components/layout/Sheet/Sheet.variants.ts +98 -0
  722. package/src/components/layout/Sheet/index.ts +3 -0
  723. package/src/components/layout/Stack/README.md +346 -0
  724. package/src/components/layout/Stack/Stack.test.tsx +492 -0
  725. package/src/components/layout/Stack/Stack.tsx +58 -0
  726. package/src/components/layout/Stack/Stack.types.ts +58 -0
  727. package/src/components/layout/Stack/Stack.variants.ts +77 -0
  728. package/src/components/layout/Stack/index.ts +3 -0
  729. package/src/components/layout/index.ts +21 -0
  730. package/src/components/navigation/Breadcrumb/Breadcrumb.test.tsx +875 -0
  731. package/src/components/navigation/Breadcrumb/Breadcrumb.tsx +183 -0
  732. package/src/components/navigation/Breadcrumb/Breadcrumb.types.ts +49 -0
  733. package/src/components/navigation/Breadcrumb/Breadcrumb.variants.ts +63 -0
  734. package/src/components/navigation/Breadcrumb/README.md +608 -0
  735. package/src/components/navigation/Breadcrumb/index.ts +24 -0
  736. package/src/components/navigation/CLAUDE.md +118 -0
  737. package/src/components/navigation/ContextMenu/ContextMenu.test.tsx +881 -0
  738. package/src/components/navigation/ContextMenu/ContextMenu.tsx +304 -0
  739. package/src/components/navigation/ContextMenu/ContextMenu.types.ts +119 -0
  740. package/src/components/navigation/ContextMenu/ContextMenu.variants.ts +167 -0
  741. package/src/components/navigation/ContextMenu/README.md +660 -0
  742. package/src/components/navigation/ContextMenu/index.ts +34 -0
  743. package/src/components/navigation/Drawer/Drawer.test.tsx +721 -0
  744. package/src/components/navigation/Drawer/Drawer.tsx +178 -0
  745. package/src/components/navigation/Drawer/Drawer.types.ts +66 -0
  746. package/src/components/navigation/Drawer/Drawer.variants.ts +121 -0
  747. package/src/components/navigation/Drawer/README.md +723 -0
  748. package/src/components/navigation/Drawer/index.ts +24 -0
  749. package/src/components/navigation/DropdownMenu/DropdownMenu.test.tsx +881 -0
  750. package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +305 -0
  751. package/src/components/navigation/DropdownMenu/DropdownMenu.types.ts +98 -0
  752. package/src/components/navigation/DropdownMenu/DropdownMenu.variants.ts +168 -0
  753. package/src/components/navigation/DropdownMenu/README.md +676 -0
  754. package/src/components/navigation/DropdownMenu/index.ts +33 -0
  755. package/src/components/navigation/Header/Header.test.tsx +418 -0
  756. package/src/components/navigation/Header/Header.tsx +133 -0
  757. package/src/components/navigation/Header/Header.types.ts +41 -0
  758. package/src/components/navigation/Header/Header.variants.ts +91 -0
  759. package/src/components/navigation/Header/README.md +567 -0
  760. package/src/components/navigation/Header/index.ts +14 -0
  761. package/src/components/navigation/Menu/Menu.test.tsx +658 -0
  762. package/src/components/navigation/Menu/Menu.tsx +247 -0
  763. package/src/components/navigation/Menu/Menu.types.ts +51 -0
  764. package/src/components/navigation/Menu/Menu.variants.ts +105 -0
  765. package/src/components/navigation/Menu/README.md +599 -0
  766. package/src/components/navigation/Menu/index.ts +17 -0
  767. package/src/components/navigation/Menubar/Menubar.test.tsx +1028 -0
  768. package/src/components/navigation/Menubar/Menubar.tsx +308 -0
  769. package/src/components/navigation/Menubar/Menubar.types.ts +104 -0
  770. package/src/components/navigation/Menubar/Menubar.variants.ts +182 -0
  771. package/src/components/navigation/Menubar/README.md +641 -0
  772. package/src/components/navigation/Menubar/index.ts +36 -0
  773. package/src/components/navigation/MobileSidebar/MobileSidebar.test.tsx +255 -0
  774. package/src/components/navigation/MobileSidebar/MobileSidebar.tsx +187 -0
  775. package/src/components/navigation/MobileSidebar/MobileSidebar.types.ts +62 -0
  776. package/src/components/navigation/MobileSidebar/MobileSidebar.variants.ts +79 -0
  777. package/src/components/navigation/MobileSidebar/index.ts +17 -0
  778. package/src/components/navigation/Navbar/Navbar.test.tsx +621 -0
  779. package/src/components/navigation/Navbar/Navbar.tsx +238 -0
  780. package/src/components/navigation/Navbar/Navbar.types.ts +69 -0
  781. package/src/components/navigation/Navbar/Navbar.variants.ts +176 -0
  782. package/src/components/navigation/Navbar/README.md +670 -0
  783. package/src/components/navigation/Navbar/index.ts +20 -0
  784. package/src/components/navigation/NavigationMenu/NavigationMenu.test.tsx +701 -0
  785. package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +211 -0
  786. package/src/components/navigation/NavigationMenu/NavigationMenu.types.ts +52 -0
  787. package/src/components/navigation/NavigationMenu/NavigationMenu.variants.ts +122 -0
  788. package/src/components/navigation/NavigationMenu/README.md +697 -0
  789. package/src/components/navigation/NavigationMenu/index.ts +23 -0
  790. package/src/components/navigation/Pagination/Pagination.test.tsx +619 -0
  791. package/src/components/navigation/Pagination/Pagination.tsx +185 -0
  792. package/src/components/navigation/Pagination/Pagination.types.ts +42 -0
  793. package/src/components/navigation/Pagination/Pagination.variants.ts +36 -0
  794. package/src/components/navigation/Pagination/README.md +635 -0
  795. package/src/components/navigation/Pagination/index.ts +17 -0
  796. package/src/components/navigation/Sidebar/README.md +628 -0
  797. package/src/components/navigation/Sidebar/Sidebar.test.tsx +1169 -0
  798. package/src/components/navigation/Sidebar/Sidebar.tsx +761 -0
  799. package/src/components/navigation/Sidebar/Sidebar.types.ts +168 -0
  800. package/src/components/navigation/Sidebar/Sidebar.variants.ts +302 -0
  801. package/src/components/navigation/Sidebar/index.ts +59 -0
  802. package/src/components/navigation/SkipLinks/README.md +512 -0
  803. package/src/components/navigation/SkipLinks/SkipLinks.test.tsx +445 -0
  804. package/src/components/navigation/SkipLinks/SkipLinks.tsx +103 -0
  805. package/src/components/navigation/SkipLinks/SkipLinks.types.ts +39 -0
  806. package/src/components/navigation/SkipLinks/SkipLinks.variants.ts +102 -0
  807. package/src/components/navigation/SkipLinks/index.ts +12 -0
  808. package/src/components/navigation/TabNavigation/TabNavigation.tsx +196 -0
  809. package/src/components/navigation/TabNavigation/TabNavigation.types.ts +85 -0
  810. package/src/components/navigation/TabNavigation/TabNavigation.variants.ts +95 -0
  811. package/src/components/navigation/TabNavigation/index.ts +10 -0
  812. package/src/components/navigation/TabPanel/README.md +437 -0
  813. package/src/components/navigation/TabPanel/TabPanel.test.tsx +566 -0
  814. package/src/components/navigation/TabPanel/TabPanel.tsx +95 -0
  815. package/src/components/navigation/TabPanel/TabPanel.types.ts +29 -0
  816. package/src/components/navigation/TabPanel/TabPanel.variants.ts +61 -0
  817. package/src/components/navigation/TabPanel/index.ts +13 -0
  818. package/src/components/navigation/Tabs/README.md +669 -0
  819. package/src/components/navigation/Tabs/Tabs.test.tsx +500 -0
  820. package/src/components/navigation/Tabs/Tabs.tsx +112 -0
  821. package/src/components/navigation/Tabs/Tabs.types.ts +38 -0
  822. package/src/components/navigation/Tabs/Tabs.variants.ts +80 -0
  823. package/src/components/navigation/Tabs/index.ts +14 -0
  824. package/src/components/navigation/Toolbar/README.md +650 -0
  825. package/src/components/navigation/Toolbar/Toolbar.test.tsx +620 -0
  826. package/src/components/navigation/Toolbar/Toolbar.tsx +133 -0
  827. package/src/components/navigation/Toolbar/Toolbar.types.ts +42 -0
  828. package/src/components/navigation/Toolbar/Toolbar.variants.ts +95 -0
  829. package/src/components/navigation/Toolbar/index.ts +17 -0
  830. package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.test.tsx +257 -0
  831. package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.tsx +267 -0
  832. package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.types.ts +84 -0
  833. package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.variants.ts +77 -0
  834. package/src/components/navigation/UserProfileDropdown/index.ts +17 -0
  835. package/src/components/navigation/WorkspaceDropdown/WorkspaceDropdown.tsx +190 -0
  836. package/src/components/navigation/WorkspaceDropdown/WorkspaceDropdown.types.ts +56 -0
  837. package/src/components/navigation/WorkspaceDropdown/WorkspaceDropdown.variants.ts +82 -0
  838. package/src/components/navigation/WorkspaceDropdown/index.ts +20 -0
  839. package/src/components/navigation/index.ts +17 -0
  840. package/src/components/primitives/ArrowAnimated/ArrowAnimated.test.tsx +240 -0
  841. package/src/components/primitives/ArrowAnimated/ArrowAnimated.tsx +96 -0
  842. package/src/components/primitives/ArrowAnimated/ArrowAnimated.types.ts +16 -0
  843. package/src/components/primitives/ArrowAnimated/ArrowAnimated.variants.ts +43 -0
  844. package/src/components/primitives/ArrowAnimated/index.ts +9 -0
  845. package/src/components/primitives/AspectRatio/AspectRatio.test.tsx +306 -0
  846. package/src/components/primitives/AspectRatio/AspectRatio.tsx +11 -0
  847. package/src/components/primitives/AspectRatio/AspectRatio.types.ts +57 -0
  848. package/src/components/primitives/AspectRatio/AspectRatio.variants.ts +110 -0
  849. package/src/components/primitives/AspectRatio/README.md +914 -0
  850. package/src/components/primitives/AspectRatio/index.ts +7 -0
  851. package/src/components/primitives/Avatar/Avatar.test.tsx +1311 -0
  852. package/src/components/primitives/Avatar/Avatar.tsx +159 -0
  853. package/src/components/primitives/Avatar/Avatar.types.ts +70 -0
  854. package/src/components/primitives/Avatar/AvatarAddButton.tsx +59 -0
  855. package/src/components/primitives/Avatar/AvatarBadge.tsx +84 -0
  856. package/src/components/primitives/Avatar/AvatarGroup.test.tsx +1377 -0
  857. package/src/components/primitives/Avatar/AvatarGroup.tsx +101 -0
  858. package/src/components/primitives/Avatar/AvatarLabelGroup.tsx +160 -0
  859. package/src/components/primitives/Avatar/AvatarSkeleton.tsx +76 -0
  860. package/src/components/primitives/Avatar/AvatarStatus.tsx +71 -0
  861. package/src/components/primitives/Avatar/README.md +1174 -0
  862. package/src/components/primitives/Avatar/index.ts +8 -0
  863. package/src/components/primitives/Badge/Badge.test.tsx +1146 -0
  864. package/src/components/primitives/Badge/Badge.tsx +389 -0
  865. package/src/components/primitives/Badge/Badge.types.ts +102 -0
  866. package/src/components/primitives/Badge/README.md +814 -0
  867. package/src/components/primitives/Badge/index.ts +2 -0
  868. package/src/components/primitives/Button/Button.test.tsx +626 -0
  869. package/src/components/primitives/Button/Button.tsx +299 -0
  870. package/src/components/primitives/Button/Button.types.ts +137 -0
  871. package/src/components/primitives/Button/README.md +1112 -0
  872. package/src/components/primitives/Button/index.ts +8 -0
  873. package/src/components/primitives/ButtonGroup/ButtonGroup.test.tsx +945 -0
  874. package/src/components/primitives/ButtonGroup/ButtonGroup.tsx +224 -0
  875. package/src/components/primitives/ButtonGroup/ButtonGroup.types.ts +133 -0
  876. package/src/components/primitives/ButtonGroup/README.md +945 -0
  877. package/src/components/primitives/ButtonGroup/index.ts +12 -0
  878. package/src/components/primitives/CLAUDE.md +108 -0
  879. package/src/components/primitives/ConfirmButton/ConfirmButton.test.tsx +929 -0
  880. package/src/components/primitives/ConfirmButton/ConfirmButton.tsx +298 -0
  881. package/src/components/primitives/ConfirmButton/ConfirmButton.types.ts +116 -0
  882. package/src/components/primitives/ConfirmButton/README.md +1059 -0
  883. package/src/components/primitives/ConfirmButton/index.ts +6 -0
  884. package/src/components/primitives/Divider/Divider.test.tsx +304 -0
  885. package/src/components/primitives/Divider/Divider.tsx +209 -0
  886. package/src/components/primitives/Divider/Divider.types.ts +74 -0
  887. package/src/components/primitives/Divider/README.md +839 -0
  888. package/src/components/primitives/Divider/index.ts +8 -0
  889. package/src/components/primitives/Heading/Heading.test.tsx +611 -0
  890. package/src/components/primitives/Heading/Heading.tsx +120 -0
  891. package/src/components/primitives/Heading/Heading.types.ts +61 -0
  892. package/src/components/primitives/Heading/README.md +820 -0
  893. package/src/components/primitives/Heading/index.ts +2 -0
  894. package/src/components/primitives/Icon/Icon.test.tsx +466 -0
  895. package/src/components/primitives/Icon/Icon.tsx +74 -0
  896. package/src/components/primitives/Icon/Icon.types.ts +61 -0
  897. package/src/components/primitives/Icon/README.md +759 -0
  898. package/src/components/primitives/Icon/index.ts +8 -0
  899. package/src/components/primitives/Image/Image.test.tsx +734 -0
  900. package/src/components/primitives/Image/Image.tsx +239 -0
  901. package/src/components/primitives/Image/Image.types.ts +75 -0
  902. package/src/components/primitives/Image/README.md +863 -0
  903. package/src/components/primitives/Image/index.ts +8 -0
  904. package/src/components/primitives/Kbd/Kbd.test.tsx +432 -0
  905. package/src/components/primitives/Kbd/Kbd.tsx +53 -0
  906. package/src/components/primitives/Kbd/Kbd.types.ts +55 -0
  907. package/src/components/primitives/Kbd/Kbd.variants.ts +33 -0
  908. package/src/components/primitives/Kbd/README.md +659 -0
  909. package/src/components/primitives/Kbd/index.ts +3 -0
  910. package/src/components/primitives/Label/Label.test.tsx +311 -0
  911. package/src/components/primitives/Label/Label.tsx +46 -0
  912. package/src/components/primitives/Label/Label.types.ts +28 -0
  913. package/src/components/primitives/Label/README.md +816 -0
  914. package/src/components/primitives/Label/index.ts +2 -0
  915. package/src/components/primitives/Link/Link.test.tsx +764 -0
  916. package/src/components/primitives/Link/Link.tsx +143 -0
  917. package/src/components/primitives/Link/Link.types.ts +85 -0
  918. package/src/components/primitives/Link/README.md +954 -0
  919. package/src/components/primitives/Link/index.ts +8 -0
  920. package/src/components/primitives/Paragraph/Paragraph.test.tsx +463 -0
  921. package/src/components/primitives/Paragraph/Paragraph.tsx +119 -0
  922. package/src/components/primitives/Paragraph/Paragraph.types.ts +81 -0
  923. package/src/components/primitives/Paragraph/README.md +812 -0
  924. package/src/components/primitives/Paragraph/index.ts +2 -0
  925. package/src/components/primitives/ProgressBar/ProgressBar.test.tsx +598 -0
  926. package/src/components/primitives/ProgressBar/ProgressBar.tsx +268 -0
  927. package/src/components/primitives/ProgressBar/ProgressBar.types.ts +127 -0
  928. package/src/components/primitives/ProgressBar/ProgressBar.variants.ts +111 -0
  929. package/src/components/primitives/ProgressBar/README.md +772 -0
  930. package/src/components/primitives/ProgressBar/index.ts +3 -0
  931. package/src/components/primitives/ProgressCircle/ProgressCircle.test.tsx +219 -0
  932. package/src/components/primitives/ProgressCircle/ProgressCircle.tsx +264 -0
  933. package/src/components/primitives/ProgressCircle/ProgressCircle.types.ts +152 -0
  934. package/src/components/primitives/ProgressCircle/ProgressCircle.variants.ts +140 -0
  935. package/src/components/primitives/ProgressCircle/README.md +763 -0
  936. package/src/components/primitives/ProgressCircle/index.ts +3 -0
  937. package/src/components/primitives/SkeletonLoader/README.md +792 -0
  938. package/src/components/primitives/SkeletonLoader/SkeletonLoader.test.tsx +382 -0
  939. package/src/components/primitives/SkeletonLoader/SkeletonLoader.tsx +45 -0
  940. package/src/components/primitives/SkeletonLoader/SkeletonLoader.types.ts +56 -0
  941. package/src/components/primitives/SkeletonLoader/SkeletonLoader.variants.ts +87 -0
  942. package/src/components/primitives/SkeletonLoader/index.ts +3 -0
  943. package/src/components/primitives/Spacer/README.md +804 -0
  944. package/src/components/primitives/Spacer/Spacer.test.tsx +363 -0
  945. package/src/components/primitives/Spacer/Spacer.tsx +147 -0
  946. package/src/components/primitives/Spacer/Spacer.types.ts +72 -0
  947. package/src/components/primitives/Spacer/index.ts +9 -0
  948. package/src/components/primitives/Spinner/README.md +767 -0
  949. package/src/components/primitives/Spinner/Spinner.test.tsx +289 -0
  950. package/src/components/primitives/Spinner/Spinner.tsx +101 -0
  951. package/src/components/primitives/Spinner/Spinner.types.ts +62 -0
  952. package/src/components/primitives/Spinner/Spinner.variants.ts +50 -0
  953. package/src/components/primitives/Spinner/index.ts +3 -0
  954. package/src/components/primitives/SplitButton/README.md +1142 -0
  955. package/src/components/primitives/SplitButton/SplitButton.test.tsx +1020 -0
  956. package/src/components/primitives/SplitButton/SplitButton.tsx +215 -0
  957. package/src/components/primitives/SplitButton/SplitButton.types.ts +114 -0
  958. package/src/components/primitives/SplitButton/index.ts +8 -0
  959. package/src/components/primitives/StatusIndicator/README.md +730 -0
  960. package/src/components/primitives/StatusIndicator/StatusIndicator.test.tsx +446 -0
  961. package/src/components/primitives/StatusIndicator/StatusIndicator.tsx +100 -0
  962. package/src/components/primitives/StatusIndicator/StatusIndicator.types.ts +39 -0
  963. package/src/components/primitives/StatusIndicator/index.ts +2 -0
  964. package/src/components/primitives/Tag/README.md +793 -0
  965. package/src/components/primitives/Tag/Tag.test.tsx +410 -0
  966. package/src/components/primitives/Tag/Tag.tsx +302 -0
  967. package/src/components/primitives/Tag/Tag.types.ts +112 -0
  968. package/src/components/primitives/Tag/Tag.variants.ts +144 -0
  969. package/src/components/primitives/Tag/TagGroup.tsx +89 -0
  970. package/src/components/primitives/Tag/index.ts +15 -0
  971. package/src/components/primitives/Text/README.md +849 -0
  972. package/src/components/primitives/Text/Text.test.tsx +371 -0
  973. package/src/components/primitives/Text/Text.tsx +89 -0
  974. package/src/components/primitives/Text/Text.types.ts +21 -0
  975. package/src/components/primitives/Text/index.ts +2 -0
  976. package/src/components/primitives/Thumbnail/README.md +800 -0
  977. package/src/components/primitives/Thumbnail/Thumbnail.test.tsx +657 -0
  978. package/src/components/primitives/Thumbnail/Thumbnail.tsx +141 -0
  979. package/src/components/primitives/Thumbnail/Thumbnail.types.ts +102 -0
  980. package/src/components/primitives/Thumbnail/index.ts +9 -0
  981. package/src/components/primitives/Toggle/README.md +232 -0
  982. package/src/components/primitives/Toggle/Toggle.test.tsx +630 -0
  983. package/src/components/primitives/Toggle/Toggle.tsx +174 -0
  984. package/src/components/primitives/Toggle/Toggle.types.ts +161 -0
  985. package/src/components/primitives/Toggle/index.ts +2 -0
  986. package/src/components/primitives/index.ts +26 -0
  987. package/src/components/workflow/ApprovalFlow/ApprovalFlow.test.tsx +607 -0
  988. package/src/components/workflow/ApprovalFlow/ApprovalFlow.tsx +522 -0
  989. package/src/components/workflow/ApprovalFlow/ApprovalFlow.types.ts +233 -0
  990. package/src/components/workflow/ApprovalFlow/ApprovalFlow.variants.ts +207 -0
  991. package/src/components/workflow/ApprovalFlow/README.md +450 -0
  992. package/src/components/workflow/ApprovalFlow/index.ts +38 -0
  993. package/src/components/workflow/ApprovalStatus/ApprovalStatus.test.tsx +316 -0
  994. package/src/components/workflow/ApprovalStatus/ApprovalStatus.tsx +342 -0
  995. package/src/components/workflow/ApprovalStatus/ApprovalStatus.types.ts +68 -0
  996. package/src/components/workflow/ApprovalStatus/ApprovalStatus.variants.ts +60 -0
  997. package/src/components/workflow/ApprovalStatus/README.md +359 -0
  998. package/src/components/workflow/ApprovalStatus/index.ts +7 -0
  999. package/src/components/workflow/CLAUDE.md +118 -0
  1000. package/src/components/workflow/CommentSystem/CommentSystem.test.tsx +901 -0
  1001. package/src/components/workflow/CommentSystem/CommentSystem.tsx +1014 -0
  1002. package/src/components/workflow/CommentSystem/CommentSystem.types.ts +290 -0
  1003. package/src/components/workflow/CommentSystem/CommentSystem.variants.ts +307 -0
  1004. package/src/components/workflow/CommentSystem/README.md +478 -0
  1005. package/src/components/workflow/CommentSystem/index.ts +37 -0
  1006. package/src/components/workflow/Dashboard/Dashboard.test.tsx +586 -0
  1007. package/src/components/workflow/Dashboard/Dashboard.tsx +447 -0
  1008. package/src/components/workflow/Dashboard/Dashboard.types.ts +232 -0
  1009. package/src/components/workflow/Dashboard/Dashboard.variants.ts +241 -0
  1010. package/src/components/workflow/Dashboard/README.md +445 -0
  1011. package/src/components/workflow/Dashboard/index.ts +39 -0
  1012. package/src/components/workflow/DashboardBuilder/DashboardBuilder.test.tsx +460 -0
  1013. package/src/components/workflow/DashboardBuilder/DashboardBuilder.tsx +944 -0
  1014. package/src/components/workflow/DashboardBuilder/DashboardBuilder.types.ts +389 -0
  1015. package/src/components/workflow/DashboardBuilder/DashboardBuilder.variants.ts +264 -0
  1016. package/src/components/workflow/DashboardBuilder/README.md +489 -0
  1017. package/src/components/workflow/DashboardBuilder/index.ts +61 -0
  1018. package/src/components/workflow/KanbanBoard/KanbanBoard.test.tsx +445 -0
  1019. package/src/components/workflow/KanbanBoard/KanbanBoard.tsx +806 -0
  1020. package/src/components/workflow/KanbanBoard/KanbanBoard.types.ts +183 -0
  1021. package/src/components/workflow/KanbanBoard/KanbanBoard.variants.ts +311 -0
  1022. package/src/components/workflow/KanbanBoard/README.md +495 -0
  1023. package/src/components/workflow/KanbanBoard/index.ts +40 -0
  1024. package/src/components/workflow/ProgressSteps/ProgressSteps.test.tsx +318 -0
  1025. package/src/components/workflow/ProgressSteps/ProgressSteps.tsx +350 -0
  1026. package/src/components/workflow/ProgressSteps/ProgressSteps.types.ts +84 -0
  1027. package/src/components/workflow/ProgressSteps/ProgressSteps.variants.ts +315 -0
  1028. package/src/components/workflow/ProgressSteps/README.md +412 -0
  1029. package/src/components/workflow/ProgressSteps/index.ts +20 -0
  1030. package/src/components/workflow/ReportGenerator/README.md +530 -0
  1031. package/src/components/workflow/ReportGenerator/ReportGenerator.test.tsx +723 -0
  1032. package/src/components/workflow/ReportGenerator/ReportGenerator.tsx +889 -0
  1033. package/src/components/workflow/ReportGenerator/ReportGenerator.types.ts +321 -0
  1034. package/src/components/workflow/ReportGenerator/ReportGenerator.variants.ts +378 -0
  1035. package/src/components/workflow/ReportGenerator/index.ts +44 -0
  1036. package/src/components/workflow/Stepper/README.md +390 -0
  1037. package/src/components/workflow/Stepper/Stepper.test.tsx +376 -0
  1038. package/src/components/workflow/Stepper/Stepper.tsx +301 -0
  1039. package/src/components/workflow/Stepper/Stepper.types.ts +73 -0
  1040. package/src/components/workflow/Stepper/Stepper.variants.ts +194 -0
  1041. package/src/components/workflow/Stepper/index.ts +16 -0
  1042. package/src/components/workflow/TaskCard/README.md +343 -0
  1043. package/src/components/workflow/TaskCard/TaskCard.test.tsx +375 -0
  1044. package/src/components/workflow/TaskCard/TaskCard.tsx +312 -0
  1045. package/src/components/workflow/TaskCard/TaskCard.types.ts +55 -0
  1046. package/src/components/workflow/TaskCard/TaskCard.variants.ts +64 -0
  1047. package/src/components/workflow/TaskCard/index.ts +14 -0
  1048. package/src/components/workflow/TaskList/README.md +317 -0
  1049. package/src/components/workflow/TaskList/TaskList.test.tsx +318 -0
  1050. package/src/components/workflow/TaskList/TaskList.tsx +556 -0
  1051. package/src/components/workflow/TaskList/TaskList.types.ts +78 -0
  1052. package/src/components/workflow/TaskList/TaskList.variants.ts +143 -0
  1053. package/src/components/workflow/TaskList/index.ts +19 -0
  1054. package/src/components/workflow/TaskStatus/README.md +358 -0
  1055. package/src/components/workflow/TaskStatus/TaskStatus.test.tsx +299 -0
  1056. package/src/components/workflow/TaskStatus/TaskStatus.tsx +246 -0
  1057. package/src/components/workflow/TaskStatus/TaskStatus.types.ts +65 -0
  1058. package/src/components/workflow/TaskStatus/TaskStatus.variants.ts +145 -0
  1059. package/src/components/workflow/TaskStatus/index.ts +24 -0
  1060. package/src/components/workflow/Wizard/README.md +440 -0
  1061. package/src/components/workflow/Wizard/Wizard.test.tsx +432 -0
  1062. package/src/components/workflow/Wizard/Wizard.tsx +279 -0
  1063. package/src/components/workflow/Wizard/Wizard.types.ts +61 -0
  1064. package/src/components/workflow/Wizard/Wizard.variants.ts +105 -0
  1065. package/src/components/workflow/Wizard/index.ts +9 -0
  1066. package/src/components/workflow/index.ts +14 -0
  1067. package/src/hooks/index.ts +4 -0
  1068. package/src/hooks/use-media-query.ts +24 -0
  1069. package/src/hooks/use-mobile.ts +30 -0
  1070. package/src/hooks/use-on-window-resize.ts +27 -0
  1071. package/src/index.ts +22 -0
  1072. package/src/lib/chart-colors.ts +195 -0
  1073. package/src/lib/utils.ts +6 -0
  1074. package/src/test/setup.ts +125 -0
  1075. package/src/test/vitest.d.ts +13 -0
@@ -0,0 +1,1174 @@
1
+ # Avatar
2
+
3
+ ## Visão Geral
4
+
5
+ O **Avatar** e um componente compound do Design System ETUS usado para representar usuarios, entidades ou objetos atraves de imagens ou iniciais. Como elemento atomico, serve de base para composicoes como listas de usuarios, cabecalhos de perfil e indicadores de presenca.
6
+
7
+ ### Casos de Uso
8
+
9
+ - Representacao visual de usuarios em listas e comentarios
10
+ - Cabecalhos de perfil e menus de conta
11
+ - Indicadores de autoria em cards e posts
12
+ - Grupos de colaboradores (avatar stacks)
13
+ - Placeholders enquanto imagens carregam
14
+
15
+ ### Classificacao
16
+
17
+ **Categoria:** Atom (Primitivo)
18
+ **Dependencias:** `@radix-ui/react-avatar`
19
+
20
+ ---
21
+
22
+ ## Design Specs
23
+
24
+ ### Estrutura Compound
25
+
26
+ O Avatar utiliza o padrao compound component com multiplas partes:
27
+
28
+ | Componente | Slot | Descricao |
29
+ | ------------------ | -------------------- | --------------------------------------------------- |
30
+ | `Avatar` | `avatar` | Container raiz, define tamanho e forma |
31
+ | `AvatarImage` | `avatar-image` | Imagem do avatar, carrega assincronamente |
32
+ | `AvatarFallback` | `avatar-fallback` | Conteudo exibido enquanto imagem carrega ou em erro |
33
+ | `AvatarStatus` | `avatar-status` | Indicador de presenca (online/offline/busy/away) |
34
+ | `AvatarBadge` | `avatar-badge` | Badge de verificacao (company/verified) |
35
+ | `AvatarGroup` | `avatar-group` | Agrupa multiplos avatares com overlap |
36
+ | `AvatarLabelGroup` | `avatar-label-group` | Avatar com nome e descricao |
37
+ | `AvatarAddButton` | `avatar-add-button` | Botao para adicionar usuarios |
38
+
39
+ ### Tamanhos (via prop `size`)
40
+
41
+ O componente suporta tamanhos pre-definidos via prop `size`:
42
+
43
+ | Tamanho | Prop | Dimensao | Uso |
44
+ | ----------- | ---------------- | -------- | ------------------------- |
45
+ | Extra Small | `size="xs"` | 24px | Listas compactas, badges |
46
+ | Small | `size="sm"` | 32px | Comentarios |
47
+ | Default | `size="default"` | 40px | **Padrao**, cards, listas |
48
+ | Large | `size="lg"` | 48px | Headers de perfil |
49
+ | Extra Large | `size="xl"` | 56px | Paginas de perfil |
50
+ | 2X Large | `size="2xl"` | 64px | Hero sections |
51
+
52
+ ### Formas (via prop `shape`)
53
+
54
+ | Forma | Prop | Uso |
55
+ | ------ | ---------------- | -------------------- |
56
+ | Circle | `shape="circle"` | **Padrao**, usuarios |
57
+ | Square | `shape="square"` | Organizacoes, apps |
58
+
59
+ ### Variantes
60
+
61
+ | Variante | Prop | Descricao |
62
+ | --------------- | ---------------- | ---------------------------------------------------------------- |
63
+ | Bordered | `bordered` | Borda branca (ring-2 ring-background) para grupos |
64
+ | Interactive | `interactive` | Hover scale + focus ring para avatares clicaveis |
65
+ | Contrast Border | `contrastBorder` | Borda sutil (0.5-0.75px) para definir bordas em fundos similares |
66
+
67
+ ### Estados
68
+
69
+ | Estado | Comportamento | Implementacao |
70
+ | -------- | -------------- | --------------------- |
71
+ | Loading | Exibe Fallback | Automatico via Radix |
72
+ | Loaded | Exibe Image | Transicao suave |
73
+ | Error | Exibe Fallback | Automatico via Radix |
74
+ | Fallback | Iniciais/Icone | Conteudo customizavel |
75
+
76
+ ### Padrão de Tokens com Tailwind v4
77
+
78
+ O Avatar usa tokens de componente definidos em `@etus/tokens`. Estes tokens são CSS custom properties que devem ser usadas com a sintaxe correta do Tailwind v4.
79
+
80
+ #### Tokens Disponíveis
81
+
82
+ | Token | Valor | Uso |
83
+ | ---------------------------------- | ---------------- | --------------------------- |
84
+ | `--avatar-size-xs` | 24px | Tamanho extra pequeno |
85
+ | `--avatar-size-sm` | 32px | Tamanho pequeno |
86
+ | `--avatar-size-default` | 40px | Tamanho padrão |
87
+ | `--avatar-size-lg` | 48px | Tamanho grande |
88
+ | `--avatar-size-xl` | 56px | Tamanho extra grande |
89
+ | `--avatar-size-2xl` | 64px | Tamanho 2x grande |
90
+ | `--avatar-text-xs` | 0.75rem | Fonte para xs |
91
+ | `--avatar-text-sm` | 0.875rem | Fonte para sm |
92
+ | `--avatar-text-default` | 1rem | Fonte para default |
93
+ | `--avatar-text-lg` | 1.125rem | Fonte para lg |
94
+ | `--avatar-text-xl` | 1.25rem | Fonte para xl |
95
+ | `--avatar-text-2xl` | 1.5rem | Fonte para 2xl |
96
+ | `--avatar-radius-circle` | 9999px | Raio circular |
97
+ | `--avatar-radius-square` | 0.375rem | Raio quadrado |
98
+ | `--avatar-border-contrast` | rgba(0,0,0,0.08) | Borda de contraste |
99
+ | `--avatar-fallback-bg-default` | OKLCH | Fundo fallback default |
100
+ | `--avatar-fallback-bg-primary` | OKLCH | Fundo fallback primary |
101
+ | `--avatar-fallback-bg-secondary` | OKLCH | Fundo fallback secondary |
102
+ | `--avatar-fallback-bg-success` | OKLCH | Fundo fallback success |
103
+ | `--avatar-fallback-bg-warning` | OKLCH | Fundo fallback warning |
104
+ | `--avatar-fallback-bg-destructive` | OKLCH | Fundo fallback destructive |
105
+ | `--avatar-fallback-text-*` | OKLCH | Texto para cada colorScheme |
106
+
107
+ #### Sintaxe Tailwind v4
108
+
109
+ ```tsx
110
+ // ✅ CORRETO - Dimensões (não precisam de type hint)
111
+ size-[var(--avatar-size-xs)]
112
+ rounded-[var(--avatar-radius-circle)]
113
+
114
+ // ✅ CORRETO - Font-size (precisa de length:)
115
+ text-[length:var(--avatar-text-sm)]
116
+
117
+ // ✅ CORRETO - Cores (precisam de color:)
118
+ bg-[color:var(--avatar-fallback-bg-default)]
119
+ text-[color:var(--avatar-fallback-text-default)]
120
+ border-[color:var(--avatar-border-contrast)]
121
+
122
+ // ❌ INCORRETO - Cores sem type hint
123
+ bg-[var(--avatar-fallback-bg-default)]
124
+ text-[var(--avatar-fallback-text-default)]
125
+
126
+ // ❌ INCORRETO - Nunca usar hsl() com OKLCH
127
+ bg-[hsl(var(--avatar-fallback-bg-default))]
128
+ ```
129
+
130
+ #### Por que usar `color:` para cores?
131
+
132
+ No Tailwind CSS v4, quando você usa valores arbitrários com CSS variables:
133
+
134
+ 1. **Dimensões** (`h-`, `w-`, `p-`, `m-`, `rounded-`, `size-`) funcionam sem type hint
135
+ 2. **Font-size** (`text-[length:...]`) precisa de `length:` para diferenciar de cor
136
+ 3. **Cores** (`bg-`, `text-` para cor, `border-`) precisam de `color:` para que o Tailwind interprete corretamente
137
+
138
+ Os tokens de cor do Seven usam OKLCH e são valores completos, não precisam de função wrapper.
139
+
140
+ ### Tokens Semânticos (Status e Badge)
141
+
142
+ Para componentes compostos como AvatarStatus e AvatarBadge, use tokens semânticos:
143
+
144
+ ```css
145
+ /* Status */
146
+ --success /* Status online (verde) */
147
+ --destructive /* Status busy (vermelho) */
148
+ --warning /* Status away (amarelo) */
149
+ --muted /* Status offline (cinza) */
150
+
151
+ /* Badge */
152
+ --brius-500 /* Badge company (roxo brand) */
153
+ --sevends-blue-600 /* Badge verified (azul brand) */
154
+ ```
155
+
156
+ > **IMPORTANTE:** Nunca use cores hardcoded como `bg-green-500` ou `bg-blue-500`. Sempre use tokens para garantir consistência com o design system.
157
+
158
+ ### data-slot
159
+
160
+ ```html
161
+ <span data-slot="avatar">
162
+ <img data-slot="avatar-image" />
163
+ <span data-slot="avatar-fallback">AB</span>
164
+ </span>
165
+ ```
166
+
167
+ ---
168
+
169
+ ## API
170
+
171
+ ### Props - Avatar (Root)
172
+
173
+ | Prop | Tipo | Padrao | Descricao |
174
+ | ----------- | ----------- | ------ | ------------------------------- |
175
+ | `className` | `string` | - | Classes CSS adicionais |
176
+ | `children` | `ReactNode` | - | AvatarImage e/ou AvatarFallback |
177
+
178
+ > Herda todas as props de `React.ComponentProps<typeof AvatarPrimitive.Root>`
179
+
180
+ ### Props - AvatarImage
181
+
182
+ | Prop | Tipo | Padrao | Descricao |
183
+ | ----------------------- | -------------------------------------------------------------- | ------ | ----------------------------------------- |
184
+ | `src` | `string` | - | URL da imagem |
185
+ | `alt` | `string` | - | Texto alternativo (obrigatorio para a11y) |
186
+ | `className` | `string` | - | Classes CSS adicionais |
187
+ | `onLoadingStatusChange` | `(status: 'idle' \| 'loading' \| 'loaded' \| 'error') => void` | - | Callback de status |
188
+
189
+ > Herda todas as props de `React.ComponentProps<typeof AvatarPrimitive.Image>`
190
+
191
+ ### Props - AvatarFallback
192
+
193
+ | Prop | Tipo | Padrao | Descricao |
194
+ | ----------- | ----------- | ------ | -------------------------------------- |
195
+ | `delayMs` | `number` | - | Delay antes de exibir fallback |
196
+ | `className` | `string` | - | Classes CSS adicionais |
197
+ | `children` | `ReactNode` | - | Conteudo do fallback (iniciais, icone) |
198
+
199
+ > Herda todas as props de `React.ComponentProps<typeof AvatarPrimitive.Fallback>`
200
+
201
+ ### Callbacks
202
+
203
+ | Callback | Componente | Tipo | Descricao |
204
+ | ----------------------- | ----------- | ------------------ | --------------------------------- |
205
+ | `onLoadingStatusChange` | AvatarImage | `(status) => void` | Notifica mudancas no carregamento |
206
+
207
+ ### TypeScript
208
+
209
+ ```typescript
210
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
211
+
212
+ // Props dos componentes
213
+ type AvatarProps = React.ComponentProps<typeof AvatarPrimitive.Root>;
214
+ type AvatarImageProps = React.ComponentProps<typeof AvatarPrimitive.Image>;
215
+ type AvatarFallbackProps = React.ComponentProps<
216
+ typeof AvatarPrimitive.Fallback
217
+ >;
218
+
219
+ // Tipo para status de carregamento
220
+ type ImageLoadingStatus = "idle" | "loading" | "loaded" | "error";
221
+ ```
222
+
223
+ ### Comparativo com Design Systems de Referencia
224
+
225
+ #### Matriz de Features (14 Design Systems)
226
+
227
+ | Feature | ETUS | Shadcn | Radix | React Aria | Chakra | MUI | Mantine | AntD | NextUI | Headless | Ariakit | Fluent | Carbon | Blueprint |
228
+ | ----------------- | :--: | :----: | :---: | :--------: | :----: | :-: | :-----: | :--: | :----: | :------: | :-----: | :----: | :----: | :-------: |
229
+ | **Compound** | ✓ | ✓ | ✓ | - | - | - | - | - | - | - | - | - | - | - |
230
+ | **Fallback auto** | ✓ | ✓ | ✓ | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | ✓ | ✓ | - |
231
+ | **Sizes prop** | ✓ | - | - | - | ✓ | - | ✓ | ✓ | ✓ | - | - | ✓ | ✓ | - |
232
+ | **Shape/radius** | ✓ | ~ | - | - | - | ✓ | ✓ | ✓ | ✓ | - | - | ✓ | - | - |
233
+ | **Badge/Status** | ✓ | - | - | - | - | - | ✓ | ✓ | - | - | - | ✓ | - | - |
234
+ | **AvatarGroup** | ✓ | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | ✓ | - | - |
235
+ | **Loading state** | ✓ | ✓ | ✓ | - | - | - | - | ✓ | ✓ | - | - | - | ✓ | - |
236
+ | **Initials auto** | ✓ | - | - | - | ✓ | - | - | - | ✓ | - | - | ✓ | ✓ | - |
237
+ | **Color scheme** | - | - | - | - | ✓ | - | ✓ | - | ✓ | - | - | ✓ | - | - |
238
+ | **data-slot** | ✓ | ✓ | - | - | - | - | - | - | ✓ | - | - | - | - | - |
239
+ | **Bordered** | ✓ | - | - | - | - | - | - | - | ✓ | - | - | - | - | - |
240
+ | **Interactive** | ✓ | - | - | - | - | - | - | - | ✓ | - | - | - | - | - |
241
+
242
+ **Legenda:** ✓ = Suporte completo | ~ = Via className | - = Nao suportado
243
+
244
+ #### Comparativo de Props por Design System
245
+
246
+ | Prop | ETUS | Chakra | MUI | Mantine | AntD | NextUI | Fluent |
247
+ | -------------- | :-------: | :----: | :-------: | :-----: | :-----: | :----: | :-----: |
248
+ | `src` | Image | ✓ | ✓ | ✓ | ✓ | ✓ | `image` |
249
+ | `alt` | Image | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
250
+ | `name` | - | ✓ | - | - | - | ✓ | ✓ |
251
+ | `size` | className | ✓ | - | ✓ | ✓ | ✓ | ✓ |
252
+ | `radius` | className | - | `variant` | ✓ | `shape` | ✓ | `shape` |
253
+ | `color` | className | ✓ | - | ✓ | - | ✓ | ✓ |
254
+ | `bordered` | className | - | - | - | - | ✓ | - |
255
+ | `fallback` | children | ✓ | ✓ | ✓ | `icon` | ✓ | ✓ |
256
+ | `showFallback` | - | - | - | - | - | ✓ | - |
257
+ | `getInitials` | - | ✓ | - | - | - | ✓ | - |
258
+
259
+ #### Abordagens por Categoria
260
+
261
+ **Headless/Primitivos (maxima flexibilidade):**
262
+
263
+ - **Radix UI** - Compound component, loading states automaticos, zero estilos
264
+ - **Headless UI** - Nao possui Avatar dedicado
265
+ - **React Aria** - Nao possui Avatar dedicado
266
+
267
+ **Styled/Opinionated (produtividade):**
268
+
269
+ - **Chakra UI** - `name` prop gera iniciais, `colorScheme` automatico
270
+ - **MUI** - Variantes `circular`/`rounded`/`square`, integracao com Badge
271
+ - **Mantine** - `radius` e `color` granulares, `Avatar.Group` built-in
272
+ - **Ant Design** - `shape`, `icon`, integracao com Badge e Tooltip
273
+
274
+ **Hybrid (meio-termo):**
275
+
276
+ - **Shadcn/ui** - Compound pattern, customizacao via className
277
+ - **NextUI** - Props ergonomicas + Tailwind, `isBordered`, `isZoomed`
278
+ - **ETUS** - Baseado em Shadcn, compound pattern, data-slot
279
+
280
+ **Enterprise:**
281
+
282
+ - **Fluent UI** - `presence` indicator, `activeAppearance`, tokens Microsoft
283
+ - **Carbon** - IBM design, skeleton loading, focus states
284
+
285
+ ---
286
+
287
+ ## Acessibilidade (A11y)
288
+
289
+ ### ARIA Attributes
290
+
291
+ | Atributo | Uso | Implementacao |
292
+ | ------------- | ------------------------- | ------------------------------ |
293
+ | `role="img"` | Implicito no `<img>` | Automatico |
294
+ | `alt` | Descricao da imagem | **Obrigatorio** em AvatarImage |
295
+ | `aria-label` | Quando sem imagem | Usar no Avatar root |
296
+ | `aria-hidden` | Para avatares decorativos | `aria-hidden="true"` |
297
+
298
+ ### Texto Alternativo (alt)
299
+
300
+ ```tsx
301
+ // ✓ CORRETO: Alt descritivo
302
+ <AvatarImage src={url} alt="Foto de perfil de Maria Silva" />
303
+
304
+ // ✓ CORRETO: Avatar decorativo
305
+ <Avatar aria-hidden="true">
306
+ <AvatarImage src={url} alt="" />
307
+ </Avatar>
308
+
309
+ // ✗ INCORRETO: Alt generico
310
+ <AvatarImage src={url} alt="avatar" />
311
+ <AvatarImage src={url} alt="user" />
312
+ ```
313
+
314
+ ### Suporte a Teclado
315
+
316
+ O Avatar nao e interativo por padrao. Quando usado como botao:
317
+
318
+ | Tecla | Acao |
319
+ | ------- | -------------------------------------- |
320
+ | `Tab` | Move foco para o avatar (se focusable) |
321
+ | `Enter` | Ativa a acao (se botao) |
322
+ | `Space` | Ativa a acao (se botao) |
323
+
324
+ ### Focus Management
325
+
326
+ ```tsx
327
+ // Avatar como botao - adicionar focus styles
328
+ <button className="rounded-full focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2">
329
+ <Avatar>
330
+ <AvatarImage src={url} alt="Abrir perfil de Maria" />
331
+ <AvatarFallback>MS</AvatarFallback>
332
+ </Avatar>
333
+ </button>
334
+ ```
335
+
336
+ ### Contraste de Cores
337
+
338
+ | Elemento | Foreground | Background | Ratio Minimo |
339
+ | ------------- | -------------------- | ---------- | ------------ |
340
+ | Fallback text | `--foreground` | `--muted` | >= 4.5:1 |
341
+ | Fallback icon | `--muted-foreground` | `--muted` | >= 3:1 |
342
+
343
+ ### Screen Readers
344
+
345
+ - Sempre fornecer `alt` descritivo para AvatarImage
346
+ - Usar `aria-label` no container quando necessario contexto adicional
347
+ - Fallback com texto deve ser legivel (iniciais claras)
348
+ - Anunciar status de presenca se implementado
349
+
350
+ ### Comparativo A11y (14 Design Systems)
351
+
352
+ | Feature | ETUS | React Aria | Radix | Chakra | MUI | Mantine | AntD | NextUI | Fluent | Carbon |
353
+ | ------------------- | :--: | :--------: | :---: | :----: | :-: | :-----: | :--: | :----: | :----: | :----: |
354
+ | **alt obrigatorio** | ~ | - | ~ | ✓ | ~ | ~ | ~ | ~ | ✓ | ✓ |
355
+ | **aria-label** | ~ | - | ~ | ✓ | ~ | ~ | ~ | ✓ | ✓ | ✓ |
356
+ | **role="img"** | ✓ | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
357
+ | **Focus visible** | ~ | - | - | ✓ | ✓ | ✓ | - | ✓ | ✓ | ✓ |
358
+ | **High contrast** | - | - | - | - | - | - | - | - | ✓ | ✓ |
359
+
360
+ **Legenda:** ✓ = Built-in | ~ = Manual/Via props | - = Nao aplicavel
361
+
362
+ ---
363
+
364
+ ## Exemplos
365
+
366
+ ### Uso Basico
367
+
368
+ ```tsx
369
+ import { Avatar, AvatarImage, AvatarFallback } from "@etus/ui";
370
+
371
+ function Example() {
372
+ return (
373
+ <Avatar>
374
+ <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
375
+ <AvatarFallback>CN</AvatarFallback>
376
+ </Avatar>
377
+ );
378
+ }
379
+ ```
380
+
381
+ ### Tamanhos
382
+
383
+ ```tsx
384
+ // Extra small (24px)
385
+ <Avatar className="size-6">
386
+ <AvatarImage src={url} alt="Usuario" />
387
+ <AvatarFallback className="text-xs">AB</AvatarFallback>
388
+ </Avatar>
389
+
390
+ // Small (32px) - Padrao
391
+ <Avatar>
392
+ <AvatarImage src={url} alt="Usuario" />
393
+ <AvatarFallback>AB</AvatarFallback>
394
+ </Avatar>
395
+
396
+ // Medium (40px)
397
+ <Avatar className="size-10">
398
+ <AvatarImage src={url} alt="Usuario" />
399
+ <AvatarFallback>AB</AvatarFallback>
400
+ </Avatar>
401
+
402
+ // Large (48px)
403
+ <Avatar className="size-12">
404
+ <AvatarImage src={url} alt="Usuario" />
405
+ <AvatarFallback className="text-lg">AB</AvatarFallback>
406
+ </Avatar>
407
+
408
+ // Extra large (64px)
409
+ <Avatar className="size-16">
410
+ <AvatarImage src={url} alt="Usuario" />
411
+ <AvatarFallback className="text-xl">AB</AvatarFallback>
412
+ </Avatar>
413
+ ```
414
+
415
+ ### Formas
416
+
417
+ ```tsx
418
+ // Circular (padrao)
419
+ <Avatar>
420
+ <AvatarImage src={url} alt="Usuario" />
421
+ <AvatarFallback>AB</AvatarFallback>
422
+ </Avatar>
423
+
424
+ // Quadrado com bordas arredondadas
425
+ <Avatar className="rounded-md">
426
+ <AvatarImage src={url} alt="Organizacao" />
427
+ <AvatarFallback className="rounded-md">ORG</AvatarFallback>
428
+ </Avatar>
429
+
430
+ // Quadrado
431
+ <Avatar className="rounded-none">
432
+ <AvatarImage src={url} alt="App" />
433
+ <AvatarFallback className="rounded-none">APP</AvatarFallback>
434
+ </Avatar>
435
+ ```
436
+
437
+ ### Fallback com Icone
438
+
439
+ ```tsx
440
+ import { User } from "lucide-react";
441
+
442
+ <Avatar>
443
+ <AvatarImage src={url} alt="Usuario" />
444
+ <AvatarFallback>
445
+ <User className="size-4" />
446
+ </AvatarFallback>
447
+ </Avatar>;
448
+ ```
449
+
450
+ ### Fallback com Iniciais Customizadas
451
+
452
+ ```tsx
453
+ function getInitials(name: string): string {
454
+ return name
455
+ .split(' ')
456
+ .map(word => word[0])
457
+ .join('')
458
+ .toUpperCase()
459
+ .slice(0, 2)
460
+ }
461
+
462
+ function UserAvatar({ name, src }: { name: string; src?: string }) {
463
+ return (
464
+ <Avatar>
465
+ <AvatarImage src={src} alt={`Foto de ${name}`} />
466
+ <AvatarFallback>{getInitials(name)}</AvatarFallback>
467
+ </Avatar>
468
+ )
469
+ }
470
+
471
+ // Uso
472
+ <UserAvatar name="Maria Silva" src={url} /> // Fallback: "MS"
473
+ <UserAvatar name="Joao" /> // Fallback: "JO"
474
+ ```
475
+
476
+ ### Com Borda
477
+
478
+ ```tsx
479
+ <Avatar className="ring-2 ring-primary ring-offset-2 ring-offset-background">
480
+ <AvatarImage src={url} alt="Usuario" />
481
+ <AvatarFallback>AB</AvatarFallback>
482
+ </Avatar>
483
+ ```
484
+
485
+ ### Avatar Group (Stack)
486
+
487
+ ```tsx
488
+ function AvatarGroup({ users, max = 4 }: { users: User[]; max?: number }) {
489
+ const visible = users.slice(0, max);
490
+ const remaining = users.length - max;
491
+
492
+ return (
493
+ <div className="flex -space-x-3">
494
+ {visible.map((user) => (
495
+ <Avatar key={user.id} className="ring-2 ring-background">
496
+ <AvatarImage src={user.avatar} alt={user.name} />
497
+ <AvatarFallback>{user.initials}</AvatarFallback>
498
+ </Avatar>
499
+ ))}
500
+ {remaining > 0 && (
501
+ <Avatar className="ring-2 ring-background">
502
+ <AvatarFallback className="bg-muted text-muted-foreground text-xs">
503
+ +{remaining}
504
+ </AvatarFallback>
505
+ </Avatar>
506
+ )}
507
+ </div>
508
+ );
509
+ }
510
+ ```
511
+
512
+ ### Com Status/Presenca
513
+
514
+ ```tsx
515
+ // Usando o componente AvatarStatus (recomendado)
516
+ import { Avatar, AvatarImage, AvatarFallback, AvatarStatus } from "@etus/ui";
517
+
518
+ <div className="relative">
519
+ <Avatar>
520
+ <AvatarImage src={url} alt="Usuario" />
521
+ <AvatarFallback>AB</AvatarFallback>
522
+ </Avatar>
523
+ <AvatarStatus status="online" />
524
+ </div>;
525
+
526
+ // Ou manualmente com tokens semanticos
527
+ function AvatarWithStatus({
528
+ src,
529
+ alt,
530
+ status,
531
+ }: {
532
+ src: string;
533
+ alt: string;
534
+ status: "online" | "offline" | "busy" | "away";
535
+ }) {
536
+ // Usar tokens semanticos - NUNCA hardcode cores!
537
+ const statusColors = {
538
+ online: "bg-success", // --success token
539
+ offline: "bg-muted", // --muted token
540
+ busy: "bg-destructive", // --destructive token
541
+ away: "bg-warning", // --warning token
542
+ };
543
+
544
+ return (
545
+ <div className="relative">
546
+ <Avatar>
547
+ <AvatarImage src={src} alt={alt} />
548
+ <AvatarFallback>AB</AvatarFallback>
549
+ </Avatar>
550
+ <span
551
+ className={cn(
552
+ "absolute bottom-0 right-0 size-3 rounded-full ring-2 ring-background",
553
+ statusColors[status],
554
+ )}
555
+ aria-label={`Status: ${status}`}
556
+ />
557
+ </div>
558
+ );
559
+ }
560
+ ```
561
+
562
+ ### Avatar como Botao
563
+
564
+ ```tsx
565
+ import { Button } from "@etus/ui"
566
+
567
+ // Usando asChild
568
+ <Button variant="ghost" size="icon" className="rounded-full" asChild>
569
+ <button aria-label="Abrir menu do usuario">
570
+ <Avatar>
571
+ <AvatarImage src={url} alt="" />
572
+ <AvatarFallback>AB</AvatarFallback>
573
+ </Avatar>
574
+ </button>
575
+ </Button>
576
+
577
+ // Ou wrapper simples
578
+ <button
579
+ className="rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
580
+ aria-label="Abrir perfil"
581
+ >
582
+ <Avatar>
583
+ <AvatarImage src={url} alt="" />
584
+ <AvatarFallback>AB</AvatarFallback>
585
+ </Avatar>
586
+ </button>
587
+ ```
588
+
589
+ ### Monitorando Status de Carregamento
590
+
591
+ ```tsx
592
+ function AvatarWithLoadingState({ src, alt }: { src: string; alt: string }) {
593
+ const [status, setStatus] = React.useState<
594
+ "idle" | "loading" | "loaded" | "error"
595
+ >("idle");
596
+
597
+ return (
598
+ <div>
599
+ <Avatar>
600
+ <AvatarImage src={src} alt={alt} onLoadingStatusChange={setStatus} />
601
+ <AvatarFallback delayMs={600}>
602
+ {status === "loading" ? <Spinner /> : "AB"}
603
+ </AvatarFallback>
604
+ </Avatar>
605
+ {status === "error" && (
606
+ <span className="text-sm text-destructive">
607
+ Erro ao carregar imagem
608
+ </span>
609
+ )}
610
+ </div>
611
+ );
612
+ }
613
+ ```
614
+
615
+ ### Responsividade
616
+
617
+ ```tsx
618
+ // Tamanho responsivo
619
+ <Avatar className="size-8 md:size-10 lg:size-12">
620
+ <AvatarImage src={url} alt="Usuario" />
621
+ <AvatarFallback className="text-xs md:text-sm lg:text-base">
622
+ AB
623
+ </AvatarFallback>
624
+ </Avatar>
625
+ ```
626
+
627
+ ### Com Container Queries
628
+
629
+ ```tsx
630
+ <div className="@container">
631
+ <Avatar className="size-8 @sm:size-10 @md:size-12">
632
+ <AvatarImage src={url} alt="Usuario" />
633
+ <AvatarFallback>AB</AvatarFallback>
634
+ </Avatar>
635
+ </div>
636
+ ```
637
+
638
+ ---
639
+
640
+ ## Testes
641
+
642
+ ### Testes Unitarios
643
+
644
+ ```tsx
645
+ // Avatar.test.tsx
646
+ import { render, screen } from "@testing-library/react";
647
+ import { describe, expect, it } from "vitest";
648
+ import { Avatar, AvatarImage, AvatarFallback } from "./Avatar";
649
+
650
+ describe("Avatar", () => {
651
+ it("renders avatar container", () => {
652
+ render(
653
+ <Avatar data-testid="avatar">
654
+ <AvatarFallback>AB</AvatarFallback>
655
+ </Avatar>,
656
+ );
657
+ expect(screen.getByTestId("avatar")).toBeInTheDocument();
658
+ });
659
+
660
+ it("has data-slot attribute", () => {
661
+ render(
662
+ <Avatar data-testid="avatar">
663
+ <AvatarFallback>AB</AvatarFallback>
664
+ </Avatar>,
665
+ );
666
+ expect(screen.getByTestId("avatar")).toHaveAttribute("data-slot", "avatar");
667
+ });
668
+
669
+ it("applies custom className", () => {
670
+ render(
671
+ <Avatar className="size-16" data-testid="avatar">
672
+ <AvatarFallback>AB</AvatarFallback>
673
+ </Avatar>,
674
+ );
675
+ expect(screen.getByTestId("avatar")).toHaveClass("size-16");
676
+ });
677
+
678
+ it("maintains default classes with custom className", () => {
679
+ render(
680
+ <Avatar className="custom-class" data-testid="avatar">
681
+ <AvatarFallback>AB</AvatarFallback>
682
+ </Avatar>,
683
+ );
684
+ const avatar = screen.getByTestId("avatar");
685
+ expect(avatar).toHaveClass("rounded-full");
686
+ expect(avatar).toHaveClass("custom-class");
687
+ });
688
+ });
689
+ ```
690
+
691
+ ### Testes de AvatarImage
692
+
693
+ ```tsx
694
+ describe("AvatarImage", () => {
695
+ it("renders image with src and alt", () => {
696
+ render(
697
+ <Avatar>
698
+ <AvatarImage src="test.jpg" alt="Test user" />
699
+ <AvatarFallback>TU</AvatarFallback>
700
+ </Avatar>,
701
+ );
702
+ const img = screen.getByRole("img");
703
+ expect(img).toHaveAttribute("src", "test.jpg");
704
+ expect(img).toHaveAttribute("alt", "Test user");
705
+ });
706
+
707
+ it("has data-slot attribute", () => {
708
+ render(
709
+ <Avatar>
710
+ <AvatarImage src="test.jpg" alt="Test" data-testid="avatar-image" />
711
+ <AvatarFallback>T</AvatarFallback>
712
+ </Avatar>,
713
+ );
714
+ // Note: Radix may not render image immediately
715
+ const img = screen.queryByTestId("avatar-image");
716
+ if (img) {
717
+ expect(img).toHaveAttribute("data-slot", "avatar-image");
718
+ }
719
+ });
720
+ });
721
+ ```
722
+
723
+ ### Testes de AvatarFallback
724
+
725
+ ```tsx
726
+ describe("AvatarFallback", () => {
727
+ it("renders fallback content", () => {
728
+ render(
729
+ <Avatar>
730
+ <AvatarFallback>AB</AvatarFallback>
731
+ </Avatar>,
732
+ );
733
+ expect(screen.getByText("AB")).toBeInTheDocument();
734
+ });
735
+
736
+ it("renders icon as fallback", () => {
737
+ render(
738
+ <Avatar>
739
+ <AvatarFallback data-testid="fallback">
740
+ <svg data-testid="icon" />
741
+ </AvatarFallback>
742
+ </Avatar>,
743
+ );
744
+ expect(screen.getByTestId("icon")).toBeInTheDocument();
745
+ });
746
+
747
+ it("has data-slot attribute", () => {
748
+ render(
749
+ <Avatar>
750
+ <AvatarFallback data-testid="fallback">AB</AvatarFallback>
751
+ </Avatar>,
752
+ );
753
+ expect(screen.getByTestId("fallback")).toHaveAttribute(
754
+ "data-slot",
755
+ "avatar-fallback",
756
+ );
757
+ });
758
+
759
+ it("applies custom className", () => {
760
+ render(
761
+ <Avatar>
762
+ <AvatarFallback className="bg-primary" data-testid="fallback">
763
+ AB
764
+ </AvatarFallback>
765
+ </Avatar>,
766
+ );
767
+ expect(screen.getByTestId("fallback")).toHaveClass("bg-primary");
768
+ });
769
+ });
770
+ ```
771
+
772
+ ### Testes de Acessibilidade
773
+
774
+ ```tsx
775
+ import { axe, toHaveNoViolations } from "jest-axe";
776
+
777
+ expect.extend(toHaveNoViolations);
778
+
779
+ describe("Avatar accessibility", () => {
780
+ it("has no accessibility violations with proper alt", async () => {
781
+ const { container } = render(
782
+ <Avatar>
783
+ <AvatarImage src="test.jpg" alt="Profile photo of John Doe" />
784
+ <AvatarFallback>JD</AvatarFallback>
785
+ </Avatar>,
786
+ );
787
+ const results = await axe(container);
788
+ expect(results).toHaveNoViolations();
789
+ });
790
+
791
+ it("decorative avatar has no violations", async () => {
792
+ const { container } = render(
793
+ <Avatar aria-hidden="true">
794
+ <AvatarImage src="test.jpg" alt="" />
795
+ <AvatarFallback>JD</AvatarFallback>
796
+ </Avatar>,
797
+ );
798
+ const results = await axe(container);
799
+ expect(results).toHaveNoViolations();
800
+ });
801
+
802
+ it("avatar button has no violations", async () => {
803
+ const { container } = render(
804
+ <button aria-label="Open user menu">
805
+ <Avatar>
806
+ <AvatarImage src="test.jpg" alt="" />
807
+ <AvatarFallback>JD</AvatarFallback>
808
+ </Avatar>
809
+ </button>,
810
+ );
811
+ const results = await axe(container);
812
+ expect(results).toHaveNoViolations();
813
+ });
814
+ });
815
+ ```
816
+
817
+ ### Testes de Composicao
818
+
819
+ ```tsx
820
+ describe("Avatar composition", () => {
821
+ it("renders avatar group correctly", () => {
822
+ render(
823
+ <div className="flex -space-x-3" data-testid="avatar-group">
824
+ <Avatar>
825
+ <AvatarFallback>A1</AvatarFallback>
826
+ </Avatar>
827
+ <Avatar>
828
+ <AvatarFallback>A2</AvatarFallback>
829
+ </Avatar>
830
+ <Avatar>
831
+ <AvatarFallback>+3</AvatarFallback>
832
+ </Avatar>
833
+ </div>,
834
+ );
835
+ expect(screen.getByText("A1")).toBeInTheDocument();
836
+ expect(screen.getByText("A2")).toBeInTheDocument();
837
+ expect(screen.getByText("+3")).toBeInTheDocument();
838
+ });
839
+
840
+ it("renders with status indicator", () => {
841
+ render(
842
+ <div className="relative">
843
+ <Avatar>
844
+ <AvatarFallback>AB</AvatarFallback>
845
+ </Avatar>
846
+ <span
847
+ data-testid="status"
848
+ className="bg-green-500"
849
+ aria-label="Online"
850
+ />
851
+ </div>,
852
+ );
853
+ expect(screen.getByTestId("status")).toBeInTheDocument();
854
+ expect(screen.getByLabelText("Online")).toBeInTheDocument();
855
+ });
856
+ });
857
+ ```
858
+
859
+ ### Cenarios Criticos
860
+
861
+ ```tsx
862
+ describe("Avatar edge cases", () => {
863
+ it("handles missing image gracefully", () => {
864
+ render(
865
+ <Avatar>
866
+ <AvatarImage src="" alt="Missing" />
867
+ <AvatarFallback>FB</AvatarFallback>
868
+ </Avatar>,
869
+ );
870
+ // Fallback should be visible when image fails
871
+ expect(screen.getByText("FB")).toBeInTheDocument();
872
+ });
873
+
874
+ it("handles long initials", () => {
875
+ render(
876
+ <Avatar>
877
+ <AvatarFallback>ABCDEF</AvatarFallback>
878
+ </Avatar>,
879
+ );
880
+ expect(screen.getByText("ABCDEF")).toBeInTheDocument();
881
+ });
882
+
883
+ it("handles empty fallback", () => {
884
+ render(
885
+ <Avatar data-testid="avatar">
886
+ <AvatarFallback data-testid="fallback" />
887
+ </Avatar>,
888
+ );
889
+ expect(screen.getByTestId("fallback")).toBeInTheDocument();
890
+ });
891
+ });
892
+ ```
893
+
894
+ ---
895
+
896
+ ## Features Implementadas
897
+
898
+ Todas as features de alta prioridade foram implementadas:
899
+
900
+ ### ✅ Prop `size`
901
+
902
+ ```tsx
903
+ <Avatar size="lg">...</Avatar>
904
+ // Tamanhos: xs (24px), sm (32px), default (40px), lg (48px), xl (56px), 2xl (64px)
905
+ ```
906
+
907
+ ### ✅ Prop `shape`
908
+
909
+ ```tsx
910
+ <Avatar shape="square">...</Avatar>
911
+ // Formas: circle (padrao), square
912
+ ```
913
+
914
+ ### ✅ Props `bordered`, `interactive`, `contrastBorder`
915
+
916
+ ```tsx
917
+ <Avatar bordered interactive contrastBorder>
918
+ ...
919
+ </Avatar>
920
+ ```
921
+
922
+ ### ✅ `AvatarStatus`
923
+
924
+ ```tsx
925
+ <Avatar>
926
+ <AvatarImage src={url} alt="User" />
927
+ <AvatarFallback>AB</AvatarFallback>
928
+ <AvatarStatus status="online" size="default" />
929
+ </Avatar>
930
+ // Status: online, offline, busy, away
931
+ ```
932
+
933
+ ### ✅ `AvatarBadge`
934
+
935
+ ```tsx
936
+ <Avatar>
937
+ <AvatarImage src={url} alt="User" />
938
+ <AvatarFallback>AB</AvatarFallback>
939
+ <AvatarBadge variant="verified" size="default" />
940
+ </Avatar>
941
+ // Variantes: company (purple), verified (blue)
942
+ ```
943
+
944
+ ### ✅ `AvatarGroup`
945
+
946
+ ```tsx
947
+ <AvatarGroup max={4} size="default" bordered>
948
+ <Avatar>...</Avatar>
949
+ <Avatar>...</Avatar>
950
+ <Avatar>...</Avatar>
951
+ <Avatar>...</Avatar>
952
+ <Avatar>...</Avatar>
953
+ </AvatarGroup>
954
+ // Renderiza 4 avatares + "+1"
955
+ ```
956
+
957
+ ### ✅ `AvatarLabelGroup`
958
+
959
+ ```tsx
960
+ // Uso basico com status
961
+ <AvatarLabelGroup
962
+ src={url}
963
+ name="Maria Silva"
964
+ description="Software Engineer"
965
+ status="online"
966
+ size="default"
967
+ />
968
+ // Gera iniciais automaticamente: "MS"
969
+
970
+ // Com badge de verificacao (company ou verified)
971
+ <AvatarLabelGroup
972
+ src={url}
973
+ name="ETUS Corp"
974
+ description="Empresa verificada"
975
+ badge="company"
976
+ size="default"
977
+ />
978
+
979
+ // Modo interativo (hover/focus states, clicavel)
980
+ <AvatarLabelGroup
981
+ src={url}
982
+ name="Maria Silva"
983
+ description="Clique para ver perfil"
984
+ interactive
985
+ onClick={(e) => console.log("Avatar clicado!")}
986
+ />
987
+ ```
988
+
989
+ **Props disponiveis:**
990
+
991
+ | Prop | Tipo | Padrao | Descricao |
992
+ | ------------- | ---------------------------------------------------- | ----------- | ---------------------------------------------------- |
993
+ | `name` | `string` | - | Nome (obrigatorio, usado para iniciais) |
994
+ | `src` | `string` | - | URL da imagem |
995
+ | `alt` | `string` | - | Texto alternativo (usa `name` se omitido) |
996
+ | `description` | `string` | - | Texto secundario abaixo do nome |
997
+ | `size` | `"xs" \| "sm" \| "default" \| "lg" \| "xl" \| "2xl"` | `"default"` | Tamanho do avatar |
998
+ | `status` | `"online" \| "offline" \| "busy" \| "away"` | - | Indicador de presenca |
999
+ | `badge` | `"company" \| "verified"` | - | Badge de verificacao (nao pode ser usado com status) |
1000
+ | `interactive` | `boolean` | `false` | Habilita hover/focus states |
1001
+ | `onClick` | `(e: MouseEvent) => void` | - | Handler de clique (usado com interactive) |
1002
+ | `tooltip` | `string \| boolean` | - | Tooltip (true = usa name + description) |
1003
+
1004
+ > **Nota:** `status` e `badge` sao mutuamente exclusivos. Se ambos forem fornecidos, `status` tem prioridade.
1005
+
1006
+ ### ✅ `AvatarAddButton`
1007
+
1008
+ ```tsx
1009
+ <AvatarGroup>
1010
+ <Avatar>...</Avatar>
1011
+ <AvatarAddButton size="default" onClick={handleAdd} />
1012
+ </AvatarGroup>
1013
+ ```
1014
+
1015
+ ### ✅ `colorScheme` (AvatarFallback)
1016
+
1017
+ Customiza as cores do fallback usando tokens semanticos:
1018
+
1019
+ ```tsx
1020
+ <Avatar>
1021
+ <AvatarImage src={url} alt="User" />
1022
+ <AvatarFallback colorScheme="primary">AB</AvatarFallback>
1023
+ </Avatar>
1024
+
1025
+ // Todas as opcoes disponiveis
1026
+ <AvatarFallback colorScheme="default">AB</AvatarFallback> // bg-muted (padrao)
1027
+ <AvatarFallback colorScheme="primary">AB</AvatarFallback> // bg-primary
1028
+ <AvatarFallback colorScheme="secondary">AB</AvatarFallback> // bg-secondary
1029
+ <AvatarFallback colorScheme="success">AB</AvatarFallback> // bg-success
1030
+ <AvatarFallback colorScheme="warning">AB</AvatarFallback> // bg-warning
1031
+ <AvatarFallback colorScheme="destructive">AB</AvatarFallback> // bg-destructive
1032
+ ```
1033
+
1034
+ ### ✅ `tooltip` (Avatar e AvatarLabelGroup)
1035
+
1036
+ Adiciona tooltip ao avatar ou label group:
1037
+
1038
+ ```tsx
1039
+ // Avatar com tooltip customizado
1040
+ <Avatar tooltip="Maria Silva - Software Engineer">
1041
+ <AvatarImage src={url} alt="Maria" />
1042
+ <AvatarFallback>MS</AvatarFallback>
1043
+ </Avatar>
1044
+
1045
+ // AvatarLabelGroup com tooltip automatico (usa name + description)
1046
+ <AvatarLabelGroup
1047
+ name="Maria Silva"
1048
+ description="Software Engineer"
1049
+ tooltip // exibe "Maria Silva - Software Engineer"
1050
+ />
1051
+
1052
+ // AvatarLabelGroup com tooltip customizado
1053
+ <AvatarLabelGroup
1054
+ name="Maria Silva"
1055
+ description="Software Engineer"
1056
+ tooltip="Clique para ver perfil completo"
1057
+ />
1058
+ ```
1059
+
1060
+ ### ✅ `AvatarSkeleton` e `AvatarLabelGroupSkeleton`
1061
+
1062
+ Skeletons para loading states:
1063
+
1064
+ ```tsx
1065
+ import { AvatarSkeleton, AvatarLabelGroupSkeleton } from "@etus/ui";
1066
+
1067
+ // Skeleton simples para Avatar
1068
+ {
1069
+ isLoading ? (
1070
+ <AvatarSkeleton size="lg" shape="circle" />
1071
+ ) : (
1072
+ <Avatar size="lg">...</Avatar>
1073
+ );
1074
+ }
1075
+
1076
+ // Skeleton para AvatarLabelGroup (inclui linhas de texto)
1077
+ {
1078
+ isLoading ? (
1079
+ <AvatarLabelGroupSkeleton size="default" />
1080
+ ) : (
1081
+ <AvatarLabelGroup name="Maria Silva" description="Engineer" />
1082
+ );
1083
+ }
1084
+
1085
+ // Em grupos
1086
+ <AvatarGroup>
1087
+ <AvatarSkeleton />
1088
+ <AvatarSkeleton />
1089
+ <AvatarSkeleton />
1090
+ </AvatarGroup>;
1091
+ ```
1092
+
1093
+ ### ✅ Lazy Loading (Imagens)
1094
+
1095
+ Use o atributo nativo `loading="lazy"` para otimizar listas longas:
1096
+
1097
+ ```tsx
1098
+ // Avatar com lazy loading
1099
+ <Avatar>
1100
+ <AvatarImage src={url} alt="User" loading="lazy" />
1101
+ <AvatarFallback>AB</AvatarFallback>
1102
+ </Avatar>;
1103
+
1104
+ // Em listas longas (recomendado)
1105
+ {
1106
+ users.map((user) => (
1107
+ <Avatar key={user.id}>
1108
+ <AvatarImage
1109
+ src={user.avatar}
1110
+ alt={user.name}
1111
+ loading="lazy" // carrega apenas quando visivel
1112
+ />
1113
+ <AvatarFallback>{getInitials(user.name)}</AvatarFallback>
1114
+ </Avatar>
1115
+ ));
1116
+ }
1117
+ ```
1118
+
1119
+ > **Nota:** `loading="lazy"` e suportado nativamente em browsers modernos (Chrome 77+, Firefox 75+, Safari 15.4+).
1120
+
1121
+ ## Roadmap / Features Futuras
1122
+
1123
+ ### Implementado Recentemente
1124
+
1125
+ | Feature | Versao | Descricao |
1126
+ | ------------------------------ | ------ | ----------------------------------------------------- |
1127
+ | `colorScheme` prop | v1.2 | Customizacao de cores do fallback |
1128
+ | `tooltip` prop | v1.2 | Tooltip integrado em Avatar e AvatarLabelGroup |
1129
+ | `AvatarSkeleton` | v1.2 | Skeleton loading para Avatar |
1130
+ | `AvatarLabelGroupSkeleton` | v1.2 | Skeleton loading para AvatarLabelGroup |
1131
+ | Lazy loading docs | v1.2 | Documentacao de loading="lazy" nativo |
1132
+ | AvatarLabelGroup `badge` prop | v1.1 | Suporte a badge company/verified no label group |
1133
+ | AvatarLabelGroup `interactive` | v1.1 | Modo interativo com hover/focus states |
1134
+ | Tokens semanticos | v1.1 | Migracao para tokens (bg-success, bg-brius-500, etc.) |
1135
+ | Contrast border | v1.0 | Borda sutil para definicao em fundos similares |
1136
+
1137
+ ### Pendente
1138
+
1139
+ | Feature | Prioridade | Justificativa |
1140
+ | ------------------ | ---------- | -------------------------------------------------------- |
1141
+ | Custom badge icons | P2 | Icones personalizados no badge (ja suporta via children) |
1142
+
1143
+ **Legenda:** P1 = Alta | P2 = Media | P3 = Baixa
1144
+
1145
+ ---
1146
+
1147
+ ## Referências
1148
+
1149
+ ### Design Systems Analisados
1150
+
1151
+ | Design System | Documentacao Avatar | GitHub |
1152
+ | -------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
1153
+ | **Shadcn/ui** | [Avatar](https://ui.shadcn.com/docs/components/avatar) | [shadcn-ui/ui](https://github.com/shadcn-ui/ui) |
1154
+ | **Radix UI** | [Avatar](https://www.radix-ui.com/primitives/docs/components/avatar) | [radix-ui/primitives](https://github.com/radix-ui/primitives) |
1155
+ | **Chakra UI** | [Avatar](https://chakra-ui.com/docs/components/avatar) | [chakra-ui/chakra-ui](https://github.com/chakra-ui/chakra-ui) |
1156
+ | **MUI** | [Avatar](https://mui.com/material-ui/react-avatar/) | [mui/material-ui](https://github.com/mui/material-ui) |
1157
+ | **Mantine** | [Avatar](https://mantine.dev/core/avatar/) | [mantinedev/mantine](https://github.com/mantinedev/mantine) |
1158
+ | **Ant Design** | [Avatar](https://ant.design/components/avatar) | [ant-design/ant-design](https://github.com/ant-design/ant-design) |
1159
+ | **NextUI** | [Avatar](https://nextui.org/docs/components/avatar) | [nextui-org/nextui](https://github.com/nextui-org/nextui) |
1160
+ | **Fluent UI** | [Avatar](https://react.fluentui.dev/?path=/docs/components-avatar--default) | [microsoft/fluentui](https://github.com/microsoft/fluentui) |
1161
+ | **Carbon** | [Avatar](https://carbondesignsystem.com/components/avatar/usage/) | [carbon-design-system/carbon](https://github.com/carbon-design-system/carbon) |
1162
+
1163
+ ### Especificacoes e Padroes
1164
+
1165
+ - [WAI-ARIA - Images](https://www.w3.org/WAI/tutorials/images/)
1166
+ - [WCAG 2.1 - Non-text Content](https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html)
1167
+ - [MDN - img Element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img)
1168
+ - [Radix Avatar Primitive](https://www.radix-ui.com/primitives/docs/components/avatar)
1169
+
1170
+ ### Ferramentas Utilizadas
1171
+
1172
+ - [Radix UI Avatar](https://www.radix-ui.com/primitives/docs/components/avatar)
1173
+ - [Tailwind CSS](https://tailwindcss.com/docs)
1174
+ - [Lucide Icons](https://lucide.dev/icons/)