@etus/ui 0.4.0-beta.7 → 0.4.0-beta.9

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 (242) hide show
  1. package/dist/{chunk-KR3IVNQH.js → chunk-2FJJOHHH.js} +16 -10
  2. package/dist/chunk-2FJJOHHH.js.map +1 -0
  3. package/dist/{chunk-2YWWZEPE.js → chunk-2HM5Z2YP.js} +3 -3
  4. package/dist/{chunk-2YWWZEPE.js.map → chunk-2HM5Z2YP.js.map} +1 -1
  5. package/dist/{chunk-W4NC5CU5.js → chunk-2Q4I4VDB.js} +4 -4
  6. package/dist/{chunk-W4NC5CU5.js.map → chunk-2Q4I4VDB.js.map} +1 -1
  7. package/dist/{chunk-SCGKQ5RE.js → chunk-2ROFZG3A.js} +3 -3
  8. package/dist/{chunk-SCGKQ5RE.js.map → chunk-2ROFZG3A.js.map} +1 -1
  9. package/dist/chunk-2Z722V5K.js +231 -0
  10. package/dist/chunk-2Z722V5K.js.map +1 -0
  11. package/dist/chunk-37IIHQP4.js +233 -0
  12. package/dist/chunk-37IIHQP4.js.map +1 -0
  13. package/dist/{chunk-YP2ATSXP.js → chunk-3BBOSSDG.js} +14 -6
  14. package/dist/{chunk-YP2ATSXP.js.map → chunk-3BBOSSDG.js.map} +1 -1
  15. package/dist/{chunk-UFRMZ3M6.js → chunk-3JCV72FO.js} +6 -2
  16. package/dist/chunk-3JCV72FO.js.map +1 -0
  17. package/dist/{chunk-2UGDLAYC.js → chunk-45D4O7RK.js} +10 -3
  18. package/dist/chunk-45D4O7RK.js.map +1 -0
  19. package/dist/{chunk-OTSK2KAI.js → chunk-4EYYCHLD.js} +5 -5
  20. package/dist/{chunk-OTSK2KAI.js.map → chunk-4EYYCHLD.js.map} +1 -1
  21. package/dist/{chunk-QIETN4UU.js → chunk-55RLLBXW.js} +4 -4
  22. package/dist/{chunk-QIETN4UU.js.map → chunk-55RLLBXW.js.map} +1 -1
  23. package/dist/{chunk-FCT6FEEZ.js → chunk-5DMK7CVS.js} +5 -5
  24. package/dist/{chunk-FCT6FEEZ.js.map → chunk-5DMK7CVS.js.map} +1 -1
  25. package/dist/{chunk-J62TFQHR.js → chunk-5I7AXWJU.js} +13 -13
  26. package/dist/chunk-5I7AXWJU.js.map +1 -0
  27. package/dist/{chunk-65YSTUD2.js → chunk-5SUD32RK.js} +44 -14
  28. package/dist/chunk-5SUD32RK.js.map +1 -0
  29. package/dist/{chunk-VPNFYQBL.js → chunk-6DN2UAIR.js} +3 -3
  30. package/dist/chunk-6DN2UAIR.js.map +1 -0
  31. package/dist/{chunk-EGYWK2XX.js → chunk-7CTFBOD4.js} +3 -3
  32. package/dist/{chunk-EGYWK2XX.js.map → chunk-7CTFBOD4.js.map} +1 -1
  33. package/dist/{chunk-AWYOWR5N.js → chunk-C5HSYDJC.js} +3 -3
  34. package/dist/{chunk-AWYOWR5N.js.map → chunk-C5HSYDJC.js.map} +1 -1
  35. package/dist/{chunk-VFALJSXB.js → chunk-DCUFQJYP.js} +3 -3
  36. package/dist/chunk-DCUFQJYP.js.map +1 -0
  37. package/dist/{chunk-LATTRPLQ.js → chunk-E2TI5V67.js} +3 -3
  38. package/dist/{chunk-LATTRPLQ.js.map → chunk-E2TI5V67.js.map} +1 -1
  39. package/dist/{chunk-23BHD62H.js → chunk-EVZ2GZU4.js} +5 -5
  40. package/dist/chunk-EVZ2GZU4.js.map +1 -0
  41. package/dist/{chunk-IRKDMISK.js → chunk-G2MAGZHQ.js} +4 -3
  42. package/dist/chunk-G2MAGZHQ.js.map +1 -0
  43. package/dist/{chunk-4GQN76L7.js → chunk-G7PBPX3K.js} +3 -3
  44. package/dist/{chunk-4GQN76L7.js.map → chunk-G7PBPX3K.js.map} +1 -1
  45. package/dist/{chunk-36XTKR3B.js → chunk-GDSYLR7L.js} +4 -4
  46. package/dist/{chunk-36XTKR3B.js.map → chunk-GDSYLR7L.js.map} +1 -1
  47. package/dist/{chunk-ONQCNOLU.js → chunk-HDOR3SN3.js} +3 -3
  48. package/dist/{chunk-ONQCNOLU.js.map → chunk-HDOR3SN3.js.map} +1 -1
  49. package/dist/{chunk-PLLJNHWU.js → chunk-HI3T55XK.js} +3 -33
  50. package/dist/chunk-HI3T55XK.js.map +1 -0
  51. package/dist/chunk-HJ4E6YPW.js +236 -0
  52. package/dist/chunk-HJ4E6YPW.js.map +1 -0
  53. package/dist/{chunk-LS3WD6IZ.js → chunk-I55QJ4CU.js} +4 -4
  54. package/dist/{chunk-LS3WD6IZ.js.map → chunk-I55QJ4CU.js.map} +1 -1
  55. package/dist/{chunk-HKXQLWGR.js → chunk-IOWHM7ZY.js} +13 -11
  56. package/dist/chunk-IOWHM7ZY.js.map +1 -0
  57. package/dist/{chunk-ILAV2AZ4.js → chunk-IZC5YFGO.js} +3 -3
  58. package/dist/{chunk-ILAV2AZ4.js.map → chunk-IZC5YFGO.js.map} +1 -1
  59. package/dist/{chunk-Y7UFBSAD.js → chunk-KHOCAVQO.js} +3 -3
  60. package/dist/{chunk-Y7UFBSAD.js.map → chunk-KHOCAVQO.js.map} +1 -1
  61. package/dist/{chunk-IBVCSZCH.js → chunk-KVJOKWP4.js} +5 -4
  62. package/dist/chunk-KVJOKWP4.js.map +1 -0
  63. package/dist/{chunk-2Y7PQ6ZL.js → chunk-LNSCL76Q.js} +5 -5
  64. package/dist/{chunk-2Y7PQ6ZL.js.map → chunk-LNSCL76Q.js.map} +1 -1
  65. package/dist/{chunk-OWOVCGUZ.js → chunk-M2C7HBR5.js} +3 -3
  66. package/dist/{chunk-OWOVCGUZ.js.map → chunk-M2C7HBR5.js.map} +1 -1
  67. package/dist/{chunk-33JGPMUW.js → chunk-M7TPROVH.js} +20 -7
  68. package/dist/chunk-M7TPROVH.js.map +1 -0
  69. package/dist/{chunk-AVR3LVOQ.js → chunk-MQMRVBUL.js} +4 -4
  70. package/dist/{chunk-AVR3LVOQ.js.map → chunk-MQMRVBUL.js.map} +1 -1
  71. package/dist/{chunk-JMZ4CO6R.js → chunk-NCT5WXKG.js} +3 -3
  72. package/dist/{chunk-JMZ4CO6R.js.map → chunk-NCT5WXKG.js.map} +1 -1
  73. package/dist/{chunk-KPNNSUXM.js → chunk-O7AUE5GP.js} +5 -3
  74. package/dist/chunk-O7AUE5GP.js.map +1 -0
  75. package/dist/{chunk-6HEURMY3.js → chunk-OCXGG7UP.js} +5 -5
  76. package/dist/{chunk-6HEURMY3.js.map → chunk-OCXGG7UP.js.map} +1 -1
  77. package/dist/{chunk-FSMHI7DW.js → chunk-OXDWUKGP.js} +3 -3
  78. package/dist/chunk-OXDWUKGP.js.map +1 -0
  79. package/dist/{chunk-SJSYKUCL.js → chunk-Q335YODG.js} +3 -3
  80. package/dist/{chunk-SJSYKUCL.js.map → chunk-Q335YODG.js.map} +1 -1
  81. package/dist/{chunk-DDM2I5C6.js → chunk-R5OIL4I4.js} +3 -3
  82. package/dist/{chunk-DDM2I5C6.js.map → chunk-R5OIL4I4.js.map} +1 -1
  83. package/dist/{chunk-KC6CHPT3.js → chunk-RJ2QVURO.js} +4 -4
  84. package/dist/{chunk-KC6CHPT3.js.map → chunk-RJ2QVURO.js.map} +1 -1
  85. package/dist/{chunk-FYJHWYPM.js → chunk-S524YVMO.js} +3 -3
  86. package/dist/{chunk-FYJHWYPM.js.map → chunk-S524YVMO.js.map} +1 -1
  87. package/dist/{chunk-OWIFNJXZ.js → chunk-S7TVRVRU.js} +3 -3
  88. package/dist/chunk-S7TVRVRU.js.map +1 -0
  89. package/dist/{chunk-JKYB5QAP.js → chunk-SLRCXCHM.js} +4 -4
  90. package/dist/{chunk-JKYB5QAP.js.map → chunk-SLRCXCHM.js.map} +1 -1
  91. package/dist/{chunk-JONTKXGK.js → chunk-U2CXFKRK.js} +3 -3
  92. package/dist/{chunk-JONTKXGK.js.map → chunk-U2CXFKRK.js.map} +1 -1
  93. package/dist/{chunk-B4ETIQOO.js → chunk-U2R47SPY.js} +3 -3
  94. package/dist/{chunk-B4ETIQOO.js.map → chunk-U2R47SPY.js.map} +1 -1
  95. package/dist/{chunk-TNROOKX3.js → chunk-UDY3IDCY.js} +10 -2
  96. package/dist/chunk-UDY3IDCY.js.map +1 -0
  97. package/dist/{chunk-3WOGOTOV.js → chunk-UPYT2XM5.js} +7 -7
  98. package/dist/chunk-UPYT2XM5.js.map +1 -0
  99. package/dist/{chunk-V7XHE25E.js → chunk-UST7EAJM.js} +4 -4
  100. package/dist/{chunk-V7XHE25E.js.map → chunk-UST7EAJM.js.map} +1 -1
  101. package/dist/{chunk-YWA63YN3.js → chunk-VAVE4ZJF.js} +2 -2
  102. package/dist/chunk-VAVE4ZJF.js.map +1 -0
  103. package/dist/{chunk-6ELVWWIA.js → chunk-VBJ26PZJ.js} +3 -3
  104. package/dist/{chunk-6ELVWWIA.js.map → chunk-VBJ26PZJ.js.map} +1 -1
  105. package/dist/chunk-WKWLKGNI.js +643 -0
  106. package/dist/chunk-WKWLKGNI.js.map +1 -0
  107. package/dist/{chunk-Z3FL7LEK.js → chunk-X253YD45.js} +71 -6
  108. package/dist/chunk-X253YD45.js.map +1 -0
  109. package/dist/{chunk-6XY7QYVR.js → chunk-X3AXEE3S.js} +3 -3
  110. package/dist/{chunk-6XY7QYVR.js.map → chunk-X3AXEE3S.js.map} +1 -1
  111. package/dist/{chunk-R4UOT76L.js → chunk-XAIUZJOJ.js} +8 -8
  112. package/dist/chunk-XAIUZJOJ.js.map +1 -0
  113. package/dist/{chunk-ZO2EKJZM.js → chunk-XCZMJA2D.js} +7 -7
  114. package/dist/{chunk-ZO2EKJZM.js.map → chunk-XCZMJA2D.js.map} +1 -1
  115. package/dist/{chunk-XRMKL43Y.js → chunk-XOLV7G4S.js} +3 -3
  116. package/dist/{chunk-XRMKL43Y.js.map → chunk-XOLV7G4S.js.map} +1 -1
  117. package/dist/chunk-XYYOV5GW.js +186 -0
  118. package/dist/chunk-XYYOV5GW.js.map +1 -0
  119. package/dist/{chunk-4MQNDQ4O.js → chunk-YACIRNVP.js} +12 -4
  120. package/dist/chunk-YACIRNVP.js.map +1 -0
  121. package/dist/{chunk-5XQIH6WM.js → chunk-YM5YBDRM.js} +4 -4
  122. package/dist/{chunk-5XQIH6WM.js.map → chunk-YM5YBDRM.js.map} +1 -1
  123. package/dist/{chunk-AUCDXPWH.js → chunk-YZ25HHV2.js} +5 -5
  124. package/dist/{chunk-AUCDXPWH.js.map → chunk-YZ25HHV2.js.map} +1 -1
  125. package/dist/{chunk-Y3BOERVB.js → chunk-ZEFK3AXP.js} +3 -3
  126. package/dist/{chunk-Y3BOERVB.js.map → chunk-ZEFK3AXP.js.map} +1 -1
  127. package/dist/{chunk-L3Z5FAJE.js → chunk-ZEYLSDSG.js} +3 -3
  128. package/dist/{chunk-L3Z5FAJE.js.map → chunk-ZEYLSDSG.js.map} +1 -1
  129. package/dist/components/advanced/Calendar/index.js +4 -4
  130. package/dist/components/advanced/Command/index.js +1 -1
  131. package/dist/components/advanced/EventCalendar/index.js +4 -4
  132. package/dist/components/advanced/FileDropzone/index.js +1 -1
  133. package/dist/components/advanced/FilterBuilder/index.js +4 -4
  134. package/dist/components/advanced/MarkdownEditor/index.js +2 -2
  135. package/dist/components/advanced/ReportBuilder/index.js +2 -2
  136. package/dist/components/advanced/RichTextEditor/index.js +2 -2
  137. package/dist/components/advanced/index.js +17 -17
  138. package/dist/components/data-display/AreaChart/index.js +1 -1
  139. package/dist/components/data-display/BarChart/index.js +1 -1
  140. package/dist/components/data-display/Carousel/index.js +4 -4
  141. package/dist/components/data-display/ChartCard/index.js +2 -2
  142. package/dist/components/data-display/DashboardFilterbar/index.js +6 -6
  143. package/dist/components/data-display/DataTable/FilterBuilder/index.js +4 -4
  144. package/dist/components/data-display/DataTable/index.js +7 -7
  145. package/dist/components/data-display/ImageGallery/index.js +7 -7
  146. package/dist/components/data-display/KPICard/index.js +4 -4
  147. package/dist/components/data-display/Lightbox/index.js +1 -1
  148. package/dist/components/data-display/LineChart/index.js +1 -1
  149. package/dist/components/data-display/List/index.js +3 -3
  150. package/dist/components/data-display/Table/index.js +1 -1
  151. package/dist/components/data-display/VirtualTable/index.js +2 -2
  152. package/dist/components/data-display/index.js +34 -34
  153. package/dist/components/feedback/Alert/index.js +1 -1
  154. package/dist/components/feedback/AlertDialog/index.js +4 -4
  155. package/dist/components/feedback/ConfirmModal/index.js +5 -5
  156. package/dist/components/feedback/Modal/index.js +1 -1
  157. package/dist/components/feedback/Notification/index.js +2 -2
  158. package/dist/components/feedback/index.js +10 -10
  159. package/dist/components/forms/ColorPicker/index.js +1 -1
  160. package/dist/components/forms/DatePicker/index.js +5 -5
  161. package/dist/components/forms/DateRangePicker/index.js +5 -5
  162. package/dist/components/forms/Field/index.js +2 -2
  163. package/dist/components/forms/Form/index.js +2 -2
  164. package/dist/components/forms/IftaLabel/index.js +1 -1
  165. package/dist/components/forms/InputGroup/index.js +4 -4
  166. package/dist/components/forms/InputOTPField/index.js +3 -3
  167. package/dist/components/forms/MultiSelect/index.js +2 -1
  168. package/dist/components/forms/RadioButton/index.js +1 -1
  169. package/dist/components/forms/Rating/index.js +1 -1
  170. package/dist/components/forms/TagsInput/index.js +2 -2
  171. package/dist/components/forms/TextareaField/index.js +3 -3
  172. package/dist/components/forms/ToggleGroup/index.js +1 -1
  173. package/dist/components/forms/index.js +31 -31
  174. package/dist/components/index.js +141 -141
  175. package/dist/components/layout/index.js +2 -2
  176. package/dist/components/navigation/AccountSwitch/index.js +4 -4
  177. package/dist/components/navigation/Drawer/index.js +1 -1
  178. package/dist/components/navigation/DropdownMenu/index.js +1 -1
  179. package/dist/components/navigation/Header/index.js +1 -1
  180. package/dist/components/navigation/MobileSidebar/index.js +4 -4
  181. package/dist/components/navigation/Pagination/index.js +4 -4
  182. package/dist/components/navigation/Sidebar/index.js +5 -5
  183. package/dist/components/navigation/UserProfileDropdown/index.js +1 -1
  184. package/dist/components/navigation/WorkspaceDropdown/index.js +1 -1
  185. package/dist/components/navigation/index.js +16 -16
  186. package/dist/components/primitives/AspectRatio/index.js +1 -1
  187. package/dist/components/primitives/Avatar/index.js +1 -1
  188. package/dist/components/primitives/Badge/index.js +1 -1
  189. package/dist/components/primitives/Button/index.js +3 -3
  190. package/dist/components/primitives/ConfirmButton/index.js +5 -5
  191. package/dist/components/primitives/Label/index.js +1 -1
  192. package/dist/components/primitives/ProgressBar/index.js +1 -1
  193. package/dist/components/primitives/SplitButton/index.js +2 -2
  194. package/dist/components/primitives/StatusIndicator/index.js +1 -1
  195. package/dist/components/primitives/Tag/index.js +1 -1
  196. package/dist/components/primitives/Toggle/index.js +1 -1
  197. package/dist/components/primitives/index.js +21 -21
  198. package/dist/components/workflow/ApprovalFlow/index.js +5 -5
  199. package/dist/components/workflow/CommentSystem/index.js +5 -5
  200. package/dist/components/workflow/Dashboard/index.js +4 -4
  201. package/dist/components/workflow/DashboardBuilder/index.js +5 -5
  202. package/dist/components/workflow/KanbanBoard/index.js +5 -5
  203. package/dist/components/workflow/ReportGenerator/index.js +5 -5
  204. package/dist/components/workflow/TaskStatus/index.js +2 -2
  205. package/dist/components/workflow/Wizard/index.js +4 -4
  206. package/dist/components/workflow/index.js +16 -16
  207. package/dist/index.d.ts +162 -56
  208. package/dist/index.js +143 -143
  209. package/dist/styles.css +121 -25
  210. package/package.json +2 -2
  211. package/dist/chunk-23BHD62H.js.map +0 -1
  212. package/dist/chunk-2UGDLAYC.js.map +0 -1
  213. package/dist/chunk-33JGPMUW.js.map +0 -1
  214. package/dist/chunk-3WOGOTOV.js.map +0 -1
  215. package/dist/chunk-4MQNDQ4O.js.map +0 -1
  216. package/dist/chunk-65YSTUD2.js.map +0 -1
  217. package/dist/chunk-FSMHI7DW.js.map +0 -1
  218. package/dist/chunk-GAP3OZR7.js +0 -223
  219. package/dist/chunk-GAP3OZR7.js.map +0 -1
  220. package/dist/chunk-HKXQLWGR.js.map +0 -1
  221. package/dist/chunk-IBVCSZCH.js.map +0 -1
  222. package/dist/chunk-ICAQYWCX.js +0 -153
  223. package/dist/chunk-ICAQYWCX.js.map +0 -1
  224. package/dist/chunk-IRKDMISK.js.map +0 -1
  225. package/dist/chunk-J62TFQHR.js.map +0 -1
  226. package/dist/chunk-KPNNSUXM.js.map +0 -1
  227. package/dist/chunk-KR3IVNQH.js.map +0 -1
  228. package/dist/chunk-OWIFNJXZ.js.map +0 -1
  229. package/dist/chunk-PLLJNHWU.js.map +0 -1
  230. package/dist/chunk-R4UOT76L.js.map +0 -1
  231. package/dist/chunk-SHS6EGWS.js +0 -226
  232. package/dist/chunk-SHS6EGWS.js.map +0 -1
  233. package/dist/chunk-TNROOKX3.js.map +0 -1
  234. package/dist/chunk-UFRMZ3M6.js.map +0 -1
  235. package/dist/chunk-VFALJSXB.js.map +0 -1
  236. package/dist/chunk-VPNFYQBL.js.map +0 -1
  237. package/dist/chunk-XD5LE64P.js +0 -311
  238. package/dist/chunk-XD5LE64P.js.map +0 -1
  239. package/dist/chunk-XV6NXXXP.js +0 -206
  240. package/dist/chunk-XV6NXXXP.js.map +0 -1
  241. package/dist/chunk-YWA63YN3.js.map +0 -1
  242. package/dist/chunk-Z3FL7LEK.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/primitives/Avatar/Avatar.tsx","../src/components/primitives/Avatar/AvatarStatus.tsx","../src/components/primitives/Avatar/AvatarBadge.tsx","../src/components/primitives/Avatar/AvatarGroup.tsx","../src/components/primitives/Avatar/AvatarLabelGroup.tsx","../src/components/primitives/Avatar/AvatarAddButton.tsx","../src/components/primitives/Avatar/AvatarSkeleton.tsx"],"names":["cva","jsx","jsxs","iconSizes"],"mappings":"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","file":"chunk-YP2ATSXP.js","sourcesContent":["\"use client\"\n\nimport type { AvatarFallbackProps, AvatarImageProps, AvatarProps } from \"./Avatar.types\"\n\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../feedback/Tooltip\"\n\nconst avatarVariants = cva(\n \"relative flex shrink-0 overflow-hidden\",\n {\n variants: {\n size: {\n xs: \"size-[var(--avatar-size-xs)] text-[length:var(--avatar-text-xs)]\",\n sm: \"size-[var(--avatar-size-sm)] text-[length:var(--avatar-text-sm)]\",\n default: \"size-[var(--avatar-size-default)] text-[length:var(--avatar-text-default)]\",\n lg: \"size-[var(--avatar-size-lg)] text-[length:var(--avatar-text-lg)]\",\n xl: \"size-[var(--avatar-size-xl)] text-[length:var(--avatar-text-xl)]\",\n },\n shape: {\n circle: \"rounded-[var(--avatar-radius-circle)]\",\n },\n bordered: {\n true: \"ring-2 ring-background\",\n false: \"\",\n },\n interactive: {\n true: \"cursor-pointer transition-transform hover:scale-105 focus-visible:outline-none focus-visible:ring-[length:var(--avatar-focus-ring-width)] focus-visible:ring-offset-[length:var(--avatar-focus-ring-offset)] focus-visible:ring-[color:var(--avatar-focus-ring-color)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n shape: \"circle\",\n bordered: false,\n interactive: false,\n },\n }\n)\n\n// Static contrast border classes for Tailwind JIT compatibility\n// Uses base-black/8 token instead of hardcoded rgba values\nconst contrastBorderClasses = {\n \"xs-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.5px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"sm-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.5px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"default-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.75px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"lg-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.75px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"xl-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.75px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n} as const\n\nfunction getContrastBorderClass(size: string, shape: string): string {\n const key = `${size}-${shape}` as keyof typeof contrastBorderClasses\n return key in contrastBorderClasses ? contrastBorderClasses[key] : contrastBorderClasses[\"default-circle\"]\n}\n\nfunction Avatar({\n className,\n size = \"default\",\n shape = \"circle\",\n bordered,\n interactive,\n contrastBorder = true,\n tooltip,\n children,\n ...props\n}: AvatarProps) {\n const avatarElement = (\n <AvatarPrimitive.Root\n className={cn(\n avatarVariants({ size, shape, bordered, interactive }),\n contrastBorder && size && shape && getContrastBorderClass(size, shape),\n className\n )}\n data-slot=\"avatar\"\n tabIndex={tooltip ? 0 : undefined}\n {...props}\n >\n {children}\n </AvatarPrimitive.Root>\n )\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {avatarElement}\n </TooltipTrigger>\n <TooltipContent>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n return avatarElement\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: AvatarImageProps) {\n return (\n <AvatarPrimitive.Image\n className={cn(\"aspect-square size-full object-cover\", className)}\n data-slot=\"avatar-image\"\n {...props}\n />\n )\n}\n\nconst avatarFallbackVariants = cva(\n \"flex size-full items-center justify-center font-medium\",\n {\n variants: {\n colorScheme: {\n default: \"bg-[color:var(--avatar-fallback-bg-default)] text-[color:var(--avatar-fallback-text-default)]\",\n primary: \"bg-[color:var(--avatar-fallback-bg-primary)] text-[color:var(--avatar-fallback-text-primary)]\",\n secondary: \"bg-[color:var(--avatar-fallback-bg-secondary)] text-[color:var(--avatar-fallback-text-secondary)]\",\n success: \"bg-[color:var(--avatar-fallback-bg-success)] text-[color:var(--avatar-fallback-text-success)]\",\n warning: \"bg-[color:var(--avatar-fallback-bg-warning)] text-[color:var(--avatar-fallback-text-warning)]\",\n destructive: \"bg-[color:var(--avatar-fallback-bg-destructive)] text-[color:var(--avatar-fallback-text-destructive)]\",\n },\n },\n defaultVariants: {\n colorScheme: \"default\",\n },\n }\n)\n\nfunction AvatarFallback({\n className,\n colorScheme = \"default\",\n ...props\n}: AvatarFallbackProps) {\n return (\n <AvatarPrimitive.Fallback\n className={cn(avatarFallbackVariants({ colorScheme }), className)}\n data-slot=\"avatar-fallback\"\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarFallback, avatarFallbackVariants, AvatarImage, avatarVariants }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\nconst avatarStatusVariants = cva(\n \"absolute bottom-0 right-0 rounded-full ring-[1.5px] ring-background\",\n {\n variants: {\n status: {\n online: \"bg-success\",\n offline: \"bg-muted-foreground\",\n busy: \"bg-destructive\",\n away: \"bg-warning\",\n },\n size: {\n xs: \"size-1.5\", // 6px\n sm: \"size-2\", // 8px\n default: \"size-2.5\", // 10px\n lg: \"size-3\", // 12px\n xl: \"size-3.5\", // 14px\n },\n },\n defaultVariants: {\n status: \"offline\",\n size: \"default\",\n },\n }\n)\n\nexport interface AvatarStatusProps extends React.ComponentProps<\"span\"> {\n /**\n * The size of the status indicator (should match parent Avatar size)\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n /**\n * The status to display\n * @default \"offline\"\n */\n status?: \"away\" | \"busy\" | \"offline\" | \"online\"\n}\n\nconst statusLabels = {\n online: \"Online\",\n offline: \"Offline\",\n busy: \"Busy\",\n away: \"Away\",\n} as const\n\nfunction AvatarStatus({\n className,\n status = \"offline\",\n size,\n ...props\n}: AvatarStatusProps) {\n return (\n <span\n aria-label={statusLabels[status]}\n className={cn(avatarStatusVariants({ status, size, className }))}\n data-slot=\"avatar-status\"\n role=\"status\"\n {...props}\n />\n )\n}\n\nexport { AvatarStatus, avatarStatusVariants }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Building2, CheckCircle2 } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\nconst avatarBadgeVariants = cva(\n \"absolute -bottom-0.5 -right-0.5 flex items-center justify-center rounded-full ring-[1.5px] ring-background\",\n {\n variants: {\n variant: {\n company: \"bg-brius-500 text-base-white\",\n verified: \"bg-sevends-blue-600 text-base-white\",\n },\n size: {\n xs: \"size-2.5\", // 10px\n sm: \"size-3\", // 12px\n default: \"size-3.5\", // 14px\n lg: \"size-4\", // 16px\n xl: \"size-5\", // 18px\n },\n },\n defaultVariants: {\n variant: \"verified\",\n size: \"default\",\n },\n }\n)\n\nconst iconSizes = {\n xs: \"size-2\",\n sm: \"size-2.5\",\n default: \"size-3\",\n lg: \"size-3.5\",\n xl: \"size-4\",\n} as const\n\nexport interface AvatarBadgeProps extends React.ComponentProps<\"span\"> {\n /**\n * The size of the badge (should match parent Avatar size)\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n /**\n * The badge variant to display\n * @default \"verified\"\n */\n variant?: \"company\" | \"verified\"\n}\n\nconst badgeLabels = {\n company: \"Company account\",\n verified: \"Verified account\",\n} as const\n\nfunction AvatarBadge({\n className,\n variant = \"verified\",\n size = \"default\",\n children,\n ...props\n}: AvatarBadgeProps) {\n const defaultIcon = variant === \"company\"\n ? <Building2 className={iconSizes[size]} />\n : <CheckCircle2 className={iconSizes[size]} />\n\n return (\n <span\n aria-label={badgeLabels[variant]}\n className={cn(avatarBadgeVariants({ variant, size, className }))}\n data-slot=\"avatar-badge\"\n role=\"img\"\n {...props}\n >\n {children ?? defaultIcon}\n </span>\n )\n}\n\nexport { AvatarBadge, avatarBadgeVariants }\n","\"use client\"\n\nimport type { AvatarProps, AvatarSize } from \"./Avatar.types\"\n\nimport { cva } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Avatar, AvatarFallback } from \"./Avatar\"\n\nconst avatarGroupVariants = cva(\"flex\", {\n variants: {\n size: {\n xs: \"-space-x-1\",\n sm: \"-space-x-2\",\n default: \"-space-x-3\",\n lg: \"-space-x-3\",\n xl: \"-space-x-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nexport interface AvatarGroupProps extends React.ComponentProps<\"div\"> {\n /**\n * Whether to apply ring-2 ring-background to all avatars for visual separation\n * @default true\n */\n bordered?: boolean\n /**\n * Child Avatar components\n */\n children: React.ReactNode\n /**\n * Maximum number of avatars to display before showing \"+N\" indicator\n */\n max?: number\n /**\n * Size to apply to all child avatars\n * @default \"default\"\n */\n size?: AvatarSize\n}\n\nfunction AvatarGroup({\n className,\n max,\n size = \"default\",\n bordered = true,\n children,\n ...props\n}: AvatarGroupProps) {\n // eslint-disable-next-line @eslint-react/no-children-to-array -- Required to count and slice children for max limit\n const childArray = React.Children.toArray(children)\n const hasMax = max !== undefined\n const visibleChildren = hasMax ? childArray.slice(0, max) : childArray\n const remainingCount = hasMax ? Math.max(0, childArray.length - max) : 0\n\n return (\n <div\n aria-label={`Avatar group${hasMax && remainingCount > 0 ? `, showing ${String(visibleChildren.length)} of ${String(childArray.length)}` : \"\"}`}\n className={cn(avatarGroupVariants({ size, className }))}\n data-slot=\"avatar-group\"\n role=\"group\"\n {...props}\n >\n {/* eslint-disable @eslint-react/no-clone-element -- Required to inject size/bordered props to Avatar children */}\n {visibleChildren.map((child) => {\n if (React.isValidElement<AvatarProps>(child) && child.type === Avatar) {\n // Children.toArray assigns stable keys to all children\n return React.cloneElement(child, {\n size: child.props.size ?? size,\n bordered: child.props.bordered ?? bordered,\n className: cn(\n bordered && \"ring-2 ring-background\",\n child.props.className\n ),\n })\n }\n return child\n })}\n {/* eslint-enable @eslint-react/no-clone-element */}\n {remainingCount > 0 && (\n <Avatar\n bordered={bordered}\n className={cn(bordered && \"ring-2 ring-background\")}\n size={size}\n >\n <AvatarFallback className=\"bg-muted text-muted-foreground text-xs font-medium\">\n +{remainingCount}\n </AvatarFallback>\n </Avatar>\n )}\n </div>\n )\n}\n\nexport { AvatarGroup, avatarGroupVariants }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../feedback/Tooltip\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"./Avatar\"\nimport { AvatarBadge, type AvatarBadgeProps } from \"./AvatarBadge\"\nimport { AvatarStatus, type AvatarStatusProps } from \"./AvatarStatus\"\n\nconst avatarLabelGroupVariants = cva(\n \"flex items-center gap-3\",\n {\n variants: {\n interactive: {\n true: \"cursor-pointer rounded-lg transition-colors hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 -m-2 p-2\",\n false: \"\",\n },\n },\n defaultVariants: {\n interactive: false,\n },\n }\n)\n\nexport interface AvatarLabelGroupProps extends React.ComponentProps<\"div\"> {\n /**\n * Alternative text for the avatar image\n */\n alt?: string\n /**\n * Optional badge variant (company or verified)\n * Cannot be used together with status\n */\n badge?: AvatarBadgeProps[\"variant\"]\n /**\n * Optional description text below the name\n */\n description?: string\n /**\n * Whether the component is interactive (shows hover/focus states)\n * @default false\n */\n interactive?: boolean\n /**\n * The name to display (required, also used for initials fallback)\n */\n name: string\n /**\n * Click handler for interactive mode\n */\n onClick?: React.MouseEventHandler<HTMLDivElement>\n /**\n * Size variant for the avatar and status/badge indicator\n * @default \"default\"\n */\n size?: AvatarStatusProps[\"size\"]\n /**\n * The image source for the avatar\n */\n src?: string\n /**\n * Optional status indicator (online, offline, busy, away)\n * Cannot be used together with badge\n */\n status?: AvatarStatusProps[\"status\"]\n /**\n * Tooltip text to display on hover\n * If true, uses name + description\n * @default undefined\n */\n tooltip?: boolean | string\n}\n\n/**\n * Generates initials from a name string\n * Takes first letter of first two words, uppercased\n */\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n}\n\nfunction AvatarLabelGroup({\n className,\n src,\n alt,\n name,\n description,\n size = \"default\",\n status,\n badge,\n interactive = false,\n onClick,\n tooltip,\n ...props\n}: AvatarLabelGroupProps) {\n // Generate tooltip text\n const tooltipText = tooltip === true\n ? description ? `${name} - ${description}` : name\n : typeof tooltip === \"string\" ? tooltip : undefined\n\n const content = (\n <div\n className={cn(avatarLabelGroupVariants({ interactive }), className)}\n data-slot=\"avatar-label-group\"\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive || tooltipText ? 0 : undefined}\n onClick={interactive ? onClick : undefined}\n {...props}\n >\n <div className=\"relative\">\n <Avatar interactive={interactive} size={size}>\n {src && <AvatarImage alt={alt ?? name} src={src} />}\n <AvatarFallback>{getInitials(name)}</AvatarFallback>\n </Avatar>\n {status && <AvatarStatus size={size} status={status} />}\n {badge && !status && <AvatarBadge size={size} variant={badge} />}\n </div>\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-medium text-foreground\">{name}</span>\n {description && (\n <span className=\"text-sm text-muted-foreground\">{description}</span>\n )}\n </div>\n </div>\n )\n\n if (tooltipText) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {content}\n </TooltipTrigger>\n <TooltipContent>\n {tooltipText}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n return content\n}\n\nexport { AvatarLabelGroup, avatarLabelGroupVariants, getInitials }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Plus } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\nconst avatarAddButtonVariants = cva(\n \"relative flex shrink-0 items-center justify-center overflow-hidden rounded-full border-2 border-dashed border-muted-foreground/50 bg-muted text-muted-foreground transition-colors hover:border-primary hover:bg-primary/10 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer\",\n {\n variants: {\n size: {\n xs: \"size-[var(--avatar-size-xs)]\",\n sm: \"size-[var(--avatar-size-sm)]\",\n default: \"size-[var(--avatar-size-default)]\",\n lg: \"size-[var(--avatar-size-lg)]\",\n xl: \"size-[var(--avatar-size-xl)]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface AvatarAddButtonProps extends React.ComponentProps<\"button\"> {\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n}\n\nfunction AvatarAddButton({\n className,\n size = \"default\",\n ...props\n}: AvatarAddButtonProps) {\n const iconSizes = {\n xs: \"size-3\",\n sm: \"size-3.5\",\n default: \"size-4\",\n lg: \"size-5\",\n xl: \"size-6\",\n }\n\n return (\n <button\n aria-label=\"Add user\"\n className={cn(avatarAddButtonVariants({ size, className }))}\n data-slot=\"avatar-add-button\"\n type=\"button\"\n {...props}\n >\n <Plus className={iconSizes[size]} />\n </button>\n )\n}\n\nexport { AvatarAddButton, avatarAddButtonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { avatarVariants } from \"./Avatar\"\n\nexport interface AvatarSkeletonProps extends React.ComponentProps<\"div\"> {\n /**\n * The shape of the skeleton\n * @default \"circle\"\n */\n shape?: \"circle\"\n /**\n * The size of the skeleton\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n}\n\nexport interface AvatarLabelGroupSkeletonProps extends React.ComponentProps<\"div\"> {\n /**\n * The size of the avatar skeleton\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n}\n\n/**\n * Skeleton placeholder for Avatar component\n * Use while loading user data\n */\nfunction AvatarSkeleton({\n size = \"default\",\n shape = \"circle\",\n className,\n ...props\n}: AvatarSkeletonProps) {\n return (\n <div\n className={cn(\n avatarVariants({ size, shape }),\n \"bg-muted animate-pulse\",\n className\n )}\n data-slot=\"avatar-skeleton\"\n {...props}\n />\n )\n}\n\n/**\n * Skeleton placeholder for AvatarLabelGroup component\n * Use while loading user data with name and description\n */\nfunction AvatarLabelGroupSkeleton({\n size = \"default\",\n className,\n ...props\n}: AvatarLabelGroupSkeletonProps) {\n return (\n <div\n className={cn(\"flex items-center gap-3\", className)}\n data-slot=\"avatar-label-group-skeleton\"\n {...props}\n >\n <AvatarSkeleton size={size} />\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-4 w-24 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-32 rounded bg-muted animate-pulse\" />\n </div>\n </div>\n )\n}\n\nexport { AvatarLabelGroupSkeleton, AvatarSkeleton }\n"]}
1
+ {"version":3,"sources":["../src/components/primitives/Avatar/Avatar.tsx","../src/components/primitives/Avatar/AvatarStatus.tsx","../src/components/primitives/Avatar/AvatarBadge.tsx","../src/components/primitives/Avatar/AvatarGroup.tsx","../src/components/primitives/Avatar/AvatarLabelGroup.tsx","../src/components/primitives/Avatar/AvatarAddButton.tsx","../src/components/primitives/Avatar/AvatarSkeleton.tsx"],"names":["cva","jsx","jsxs","iconSizes"],"mappings":"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","file":"chunk-3BBOSSDG.js","sourcesContent":["\"use client\"\n\nimport type { AvatarFallbackProps, AvatarImageProps, AvatarProps } from \"./Avatar.types\"\n\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../feedback/Tooltip\"\n\nconst avatarVariants = cva(\n \"relative flex shrink-0 overflow-hidden\",\n {\n variants: {\n size: {\n xs: \"size-[var(--avatar-size-xs)] text-[length:var(--avatar-text-xs)]\",\n sm: \"size-[var(--avatar-size-sm)] text-[length:var(--avatar-text-sm)]\",\n default: \"size-[var(--avatar-size-default)] text-[length:var(--avatar-text-default)]\",\n lg: \"size-[var(--avatar-size-lg)] text-[length:var(--avatar-text-lg)]\",\n xl: \"size-[var(--avatar-size-xl)] text-[length:var(--avatar-text-xl)]\",\n \"3xl\": \"size-[var(--avatar-size-3xl)] text-[length:var(--avatar-text-3xl)]\",\n \"4xl\": \"size-[var(--avatar-size-4xl)] text-[length:var(--avatar-text-4xl)]\",\n },\n shape: {\n circle: \"rounded-[var(--avatar-radius-circle)]\",\n },\n bordered: {\n true: \"ring-2 ring-background\",\n false: \"\",\n },\n interactive: {\n true: \"cursor-pointer transition-transform hover:scale-105 focus-visible:outline-none focus-visible:ring-[length:var(--avatar-focus-ring-width)] focus-visible:ring-offset-[length:var(--avatar-focus-ring-offset)] focus-visible:ring-[color:var(--avatar-focus-ring-color)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n shape: \"circle\",\n bordered: false,\n interactive: false,\n },\n }\n)\n\n// Static contrast border classes for Tailwind JIT compatibility\n// Uses base-black/8 token instead of hardcoded rgba values\nconst contrastBorderClasses = {\n \"xs-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.5px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"sm-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.5px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"default-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.75px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"lg-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.75px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n \"xl-circle\": \"after:absolute after:inset-0 after:rounded-full after:border-[0.75px] after:border-[color:var(--avatar-border-contrast)] after:pointer-events-none\",\n} as const\n\nfunction getContrastBorderClass(size: string, shape: string): string {\n const key = `${size}-${shape}` as keyof typeof contrastBorderClasses\n return key in contrastBorderClasses ? contrastBorderClasses[key] : contrastBorderClasses[\"default-circle\"]\n}\n\nfunction Avatar({\n className,\n size = \"default\",\n shape = \"circle\",\n bordered,\n interactive,\n contrastBorder = true,\n tooltip,\n children,\n ...props\n}: AvatarProps) {\n const avatarElement = (\n <AvatarPrimitive.Root\n className={cn(\n avatarVariants({ size, shape, bordered, interactive }),\n contrastBorder && size && shape && getContrastBorderClass(size, shape),\n className\n )}\n data-slot=\"avatar\"\n tabIndex={tooltip ? 0 : undefined}\n {...props}\n >\n {children}\n </AvatarPrimitive.Root>\n )\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {avatarElement}\n </TooltipTrigger>\n <TooltipContent>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n return avatarElement\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: AvatarImageProps) {\n return (\n <AvatarPrimitive.Image\n className={cn(\"aspect-square size-full object-cover\", className)}\n data-slot=\"avatar-image\"\n {...props}\n />\n )\n}\n\nconst avatarFallbackVariants = cva(\n \"flex size-full items-center justify-center font-medium\",\n {\n variants: {\n colorScheme: {\n default: \"bg-[color:var(--avatar-fallback-bg-default)] text-[color:var(--avatar-fallback-text-default)]\",\n primary: \"bg-[color:var(--avatar-fallback-bg-primary)] text-[color:var(--avatar-fallback-text-primary)]\",\n secondary: \"bg-[color:var(--avatar-fallback-bg-secondary)] text-[color:var(--avatar-fallback-text-secondary)]\",\n success: \"bg-[color:var(--avatar-fallback-bg-success)] text-[color:var(--avatar-fallback-text-success)]\",\n warning: \"bg-[color:var(--avatar-fallback-bg-warning)] text-[color:var(--avatar-fallback-text-warning)]\",\n destructive: \"bg-[color:var(--avatar-fallback-bg-destructive)] text-[color:var(--avatar-fallback-text-destructive)]\",\n },\n },\n defaultVariants: {\n colorScheme: \"default\",\n },\n }\n)\n\nfunction AvatarFallback({\n className,\n colorScheme = \"default\",\n ...props\n}: AvatarFallbackProps) {\n return (\n <AvatarPrimitive.Fallback\n className={cn(avatarFallbackVariants({ colorScheme }), className)}\n data-slot=\"avatar-fallback\"\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarFallback, avatarFallbackVariants, AvatarImage, avatarVariants }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\nconst avatarStatusVariants = cva(\n \"absolute bottom-0 right-0 rounded-full ring-[1.5px] ring-background\",\n {\n variants: {\n status: {\n online: \"bg-success\",\n offline: \"bg-muted-foreground\",\n busy: \"bg-destructive\",\n away: \"bg-warning\",\n },\n size: {\n xs: \"size-1.5\", // 6px\n sm: \"size-2\", // 8px\n default: \"size-2.5\", // 10px\n lg: \"size-3\", // 12px\n xl: \"size-3.5\", // 14px\n },\n },\n defaultVariants: {\n status: \"offline\",\n size: \"default\",\n },\n }\n)\n\nexport interface AvatarStatusProps extends React.ComponentProps<\"span\"> {\n /**\n * The size of the status indicator (should match parent Avatar size)\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n /**\n * The status to display\n * @default \"offline\"\n */\n status?: \"away\" | \"busy\" | \"offline\" | \"online\"\n}\n\nconst statusLabels = {\n online: \"Online\",\n offline: \"Offline\",\n busy: \"Busy\",\n away: \"Away\",\n} as const\n\nfunction AvatarStatus({\n className,\n status = \"offline\",\n size,\n ...props\n}: AvatarStatusProps) {\n return (\n <span\n aria-label={statusLabels[status]}\n className={cn(avatarStatusVariants({ status, size, className }))}\n data-slot=\"avatar-status\"\n role=\"status\"\n {...props}\n />\n )\n}\n\nexport { AvatarStatus, avatarStatusVariants }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Building2, CheckCircle2 } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\nconst avatarBadgeVariants = cva(\n \"absolute -bottom-0.5 -right-0.5 flex items-center justify-center rounded-full ring-[1.5px] ring-background\",\n {\n variants: {\n variant: {\n company: \"bg-brius-500 text-base-white\",\n verified: \"bg-sevends-blue-600 text-base-white\",\n },\n size: {\n xs: \"size-2.5\", // 10px\n sm: \"size-3\", // 12px\n default: \"size-3.5\", // 14px\n lg: \"size-4\", // 16px\n xl: \"size-5\", // 18px\n },\n },\n defaultVariants: {\n variant: \"verified\",\n size: \"default\",\n },\n }\n)\n\nconst iconSizes = {\n xs: \"size-2\",\n sm: \"size-2.5\",\n default: \"size-3\",\n lg: \"size-3.5\",\n xl: \"size-4\",\n} as const\n\nexport interface AvatarBadgeProps extends React.ComponentProps<\"span\"> {\n /**\n * The size of the badge (should match parent Avatar size)\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n /**\n * The badge variant to display\n * @default \"verified\"\n */\n variant?: \"company\" | \"verified\"\n}\n\nconst badgeLabels = {\n company: \"Company account\",\n verified: \"Verified account\",\n} as const\n\nfunction AvatarBadge({\n className,\n variant = \"verified\",\n size = \"default\",\n children,\n ...props\n}: AvatarBadgeProps) {\n const defaultIcon = variant === \"company\"\n ? <Building2 className={iconSizes[size]} />\n : <CheckCircle2 className={iconSizes[size]} />\n\n return (\n <span\n aria-label={badgeLabels[variant]}\n className={cn(avatarBadgeVariants({ variant, size, className }))}\n data-slot=\"avatar-badge\"\n role=\"img\"\n {...props}\n >\n {children ?? defaultIcon}\n </span>\n )\n}\n\nexport { AvatarBadge, avatarBadgeVariants }\n","\"use client\"\n\nimport type { AvatarProps, AvatarSize } from \"./Avatar.types\"\n\nimport { cva } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Avatar, AvatarFallback } from \"./Avatar\"\n\nconst avatarGroupVariants = cva(\"flex\", {\n variants: {\n size: {\n xs: \"-space-x-1\",\n sm: \"-space-x-2\",\n default: \"-space-x-3\",\n lg: \"-space-x-3\",\n xl: \"-space-x-4\",\n \"3xl\": \"-space-x-5\",\n \"4xl\": \"-space-x-6\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nexport interface AvatarGroupProps extends React.ComponentProps<\"div\"> {\n /**\n * Whether to apply ring-2 ring-background to all avatars for visual separation\n * @default true\n */\n bordered?: boolean\n /**\n * Child Avatar components\n */\n children: React.ReactNode\n /**\n * Maximum number of avatars to display before showing \"+N\" indicator\n */\n max?: number\n /**\n * Size to apply to all child avatars\n * @default \"default\"\n */\n size?: AvatarSize\n}\n\nfunction AvatarGroup({\n className,\n max,\n size = \"default\",\n bordered = true,\n children,\n ...props\n}: AvatarGroupProps) {\n // eslint-disable-next-line @eslint-react/no-children-to-array -- Required to count and slice children for max limit\n const childArray = React.Children.toArray(children)\n const hasMax = max !== undefined\n const visibleChildren = hasMax ? childArray.slice(0, max) : childArray\n const remainingCount = hasMax ? Math.max(0, childArray.length - max) : 0\n\n return (\n <div\n aria-label={`Avatar group${hasMax && remainingCount > 0 ? `, showing ${String(visibleChildren.length)} of ${String(childArray.length)}` : \"\"}`}\n className={cn(avatarGroupVariants({ size, className }))}\n data-slot=\"avatar-group\"\n role=\"group\"\n {...props}\n >\n {/* eslint-disable @eslint-react/no-clone-element -- Required to inject size/bordered props to Avatar children */}\n {visibleChildren.map((child) => {\n if (React.isValidElement<AvatarProps>(child) && child.type === Avatar) {\n // Children.toArray assigns stable keys to all children\n return React.cloneElement(child, {\n size: child.props.size ?? size,\n bordered: child.props.bordered ?? bordered,\n className: cn(\n bordered && \"ring-2 ring-background\",\n child.props.className\n ),\n })\n }\n return child\n })}\n {/* eslint-enable @eslint-react/no-clone-element */}\n {remainingCount > 0 && (\n <Avatar\n bordered={bordered}\n className={cn(bordered && \"ring-2 ring-background\")}\n size={size}\n >\n <AvatarFallback className=\"bg-muted text-muted-foreground text-xs font-medium\">\n +{remainingCount}\n </AvatarFallback>\n </Avatar>\n )}\n </div>\n )\n}\n\nexport { AvatarGroup, avatarGroupVariants }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../feedback/Tooltip\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"./Avatar\"\nimport { AvatarBadge, type AvatarBadgeProps } from \"./AvatarBadge\"\nimport { AvatarStatus, type AvatarStatusProps } from \"./AvatarStatus\"\n\nconst avatarLabelGroupVariants = cva(\n \"flex items-center gap-3\",\n {\n variants: {\n interactive: {\n true: \"cursor-pointer rounded-lg transition-colors hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 -m-2 p-2\",\n false: \"\",\n },\n },\n defaultVariants: {\n interactive: false,\n },\n }\n)\n\nexport interface AvatarLabelGroupProps extends React.ComponentProps<\"div\"> {\n /**\n * Alternative text for the avatar image\n */\n alt?: string\n /**\n * Optional badge variant (company or verified)\n * Cannot be used together with status\n */\n badge?: AvatarBadgeProps[\"variant\"]\n /**\n * Optional description text below the name\n */\n description?: string\n /**\n * Whether the component is interactive (shows hover/focus states)\n * @default false\n */\n interactive?: boolean\n /**\n * The name to display (required, also used for initials fallback)\n */\n name: string\n /**\n * Click handler for interactive mode\n */\n onClick?: React.MouseEventHandler<HTMLDivElement>\n /**\n * Size variant for the avatar and status/badge indicator\n * @default \"default\"\n */\n size?: AvatarStatusProps[\"size\"]\n /**\n * The image source for the avatar\n */\n src?: string\n /**\n * Optional status indicator (online, offline, busy, away)\n * Cannot be used together with badge\n */\n status?: AvatarStatusProps[\"status\"]\n /**\n * Tooltip text to display on hover\n * If true, uses name + description\n * @default undefined\n */\n tooltip?: boolean | string\n}\n\n/**\n * Generates initials from a name string\n * Takes first letter of first two words, uppercased\n */\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n}\n\nfunction AvatarLabelGroup({\n className,\n src,\n alt,\n name,\n description,\n size = \"default\",\n status,\n badge,\n interactive = false,\n onClick,\n tooltip,\n ...props\n}: AvatarLabelGroupProps) {\n // Generate tooltip text\n const tooltipText = tooltip === true\n ? description ? `${name} - ${description}` : name\n : typeof tooltip === \"string\" ? tooltip : undefined\n\n const content = (\n <div\n className={cn(avatarLabelGroupVariants({ interactive }), className)}\n data-slot=\"avatar-label-group\"\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive || tooltipText ? 0 : undefined}\n onClick={interactive ? onClick : undefined}\n {...props}\n >\n <div className=\"relative\">\n <Avatar interactive={interactive} size={size}>\n {src && <AvatarImage alt={alt ?? name} src={src} />}\n <AvatarFallback>{getInitials(name)}</AvatarFallback>\n </Avatar>\n {status && <AvatarStatus size={size} status={status} />}\n {badge && !status && <AvatarBadge size={size} variant={badge} />}\n </div>\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-medium text-foreground\">{name}</span>\n {description && (\n <span className=\"text-sm text-muted-foreground\">{description}</span>\n )}\n </div>\n </div>\n )\n\n if (tooltipText) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {content}\n </TooltipTrigger>\n <TooltipContent>\n {tooltipText}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n return content\n}\n\nexport { AvatarLabelGroup, avatarLabelGroupVariants, getInitials }\n","\"use client\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Plus } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\nconst avatarAddButtonVariants = cva(\n \"relative flex shrink-0 items-center justify-center overflow-hidden rounded-full border-2 border-dashed border-muted-foreground/50 bg-muted text-muted-foreground transition-colors hover:border-primary hover:bg-primary/10 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer\",\n {\n variants: {\n size: {\n xs: \"size-[var(--avatar-size-xs)]\",\n sm: \"size-[var(--avatar-size-sm)]\",\n default: \"size-[var(--avatar-size-default)]\",\n lg: \"size-[var(--avatar-size-lg)]\",\n xl: \"size-[var(--avatar-size-xl)]\",\n \"3xl\": \"size-[var(--avatar-size-3xl)]\",\n \"4xl\": \"size-[var(--avatar-size-4xl)]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface AvatarAddButtonProps extends React.ComponentProps<\"button\"> {\n size?: \"3xl\" | \"4xl\" | \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n}\n\nfunction AvatarAddButton({\n className,\n size = \"default\",\n ...props\n}: AvatarAddButtonProps) {\n const iconSizes = {\n xs: \"size-3\",\n sm: \"size-3.5\",\n default: \"size-4\",\n lg: \"size-5\",\n xl: \"size-6\",\n \"3xl\": \"size-7\",\n \"4xl\": \"size-8\",\n }\n\n return (\n <button\n aria-label=\"Add user\"\n className={cn(avatarAddButtonVariants({ size, className }))}\n data-slot=\"avatar-add-button\"\n type=\"button\"\n {...props}\n >\n <Plus className={iconSizes[size]} />\n </button>\n )\n}\n\nexport { AvatarAddButton, avatarAddButtonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { avatarVariants } from \"./Avatar\"\n\nexport interface AvatarSkeletonProps extends React.ComponentProps<\"div\"> {\n /**\n * The shape of the skeleton\n * @default \"circle\"\n */\n shape?: \"circle\"\n /**\n * The size of the skeleton\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n}\n\nexport interface AvatarLabelGroupSkeletonProps extends React.ComponentProps<\"div\"> {\n /**\n * The size of the avatar skeleton\n * @default \"default\"\n */\n size?: \"default\" | \"lg\" | \"sm\" | \"xl\" | \"xs\"\n}\n\n/**\n * Skeleton placeholder for Avatar component\n * Use while loading user data\n */\nfunction AvatarSkeleton({\n size = \"default\",\n shape = \"circle\",\n className,\n ...props\n}: AvatarSkeletonProps) {\n return (\n <div\n className={cn(\n avatarVariants({ size, shape }),\n \"bg-muted animate-pulse\",\n className\n )}\n data-slot=\"avatar-skeleton\"\n {...props}\n />\n )\n}\n\n/**\n * Skeleton placeholder for AvatarLabelGroup component\n * Use while loading user data with name and description\n */\nfunction AvatarLabelGroupSkeleton({\n size = \"default\",\n className,\n ...props\n}: AvatarLabelGroupSkeletonProps) {\n return (\n <div\n className={cn(\"flex items-center gap-3\", className)}\n data-slot=\"avatar-label-group-skeleton\"\n {...props}\n >\n <AvatarSkeleton size={size} />\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-4 w-24 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-32 rounded bg-muted animate-pulse\" />\n </div>\n </div>\n )\n}\n\nexport { AvatarLabelGroupSkeleton, AvatarSkeleton }\n"]}
@@ -26,6 +26,8 @@ var progressBarVariants = cva(
26
26
  color: {
27
27
  default: "bg-[color:var(--progress-bar-track-color-default)]",
28
28
  primary: "bg-[color:var(--progress-bar-track-color-primary)]",
29
+ secondary: "bg-[color:var(--progress-bar-track-color-secondary)]",
30
+ info: "bg-[color:var(--progress-bar-track-color-info)]",
29
31
  success: "bg-[color:var(--progress-bar-track-color-success)]",
30
32
  warning: "bg-[color:var(--progress-bar-track-color-warning)]",
31
33
  error: "bg-[color:var(--progress-bar-track-color-error)]"
@@ -47,6 +49,8 @@ var progressBarIndicatorVariants = cva(
47
49
  color: {
48
50
  default: "bg-[color:var(--progress-bar-fill-color-default)]",
49
51
  primary: "bg-[color:var(--progress-bar-fill-color-primary)]",
52
+ secondary: "bg-[color:var(--progress-bar-fill-color-secondary)]",
53
+ info: "bg-[color:var(--progress-bar-fill-color-info)]",
50
54
  success: "bg-[color:var(--progress-bar-fill-color-success)]",
51
55
  warning: "bg-[color:var(--progress-bar-fill-color-warning)]",
52
56
  error: "bg-[color:var(--progress-bar-fill-color-error)]"
@@ -280,5 +284,5 @@ function ProgressBar({
280
284
  }
281
285
 
282
286
  export { ProgressBar, progressBarIndicatorVariants, progressBarLabelVariants, progressBarTooltipVariants, progressBarVariants };
283
- //# sourceMappingURL=chunk-UFRMZ3M6.js.map
284
- //# sourceMappingURL=chunk-UFRMZ3M6.js.map
287
+ //# sourceMappingURL=chunk-3JCV72FO.js.map
288
+ //# sourceMappingURL=chunk-3JCV72FO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/ProgressBar/ProgressBar.variants.ts","../src/components/primitives/ProgressBar/ProgressBar.tsx"],"names":[],"mappings":"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","file":"chunk-3JCV72FO.js","sourcesContent":["import { cva } from \"class-variance-authority\"\n\n/**\n * ProgressBar root (track) variants\n */\nexport const progressBarVariants = cva(\n \"relative w-full overflow-hidden rounded-[var(--progress-bar-root-border-radius)]\",\n {\n variants: {\n /**\n * Size variant for the progress bar height\n */\n size: {\n xs: \"h-[var(--progress-bar-size-xs-height)]\",\n sm: \"h-[var(--progress-bar-size-sm-height)]\",\n md: \"h-[var(--progress-bar-size-md-height)]\",\n lg: \"h-[var(--progress-bar-size-lg-height)]\",\n xl: \"h-[var(--progress-bar-size-xl-height)]\",\n },\n /**\n * Color variant for the progress bar\n * Affects both track and indicator colors\n */\n color: {\n default: \"bg-[color:var(--progress-bar-track-color-default)]\",\n primary: \"bg-[color:var(--progress-bar-track-color-primary)]\",\n secondary: \"bg-[color:var(--progress-bar-track-color-secondary)]\",\n info: \"bg-[color:var(--progress-bar-track-color-info)]\",\n success: \"bg-[color:var(--progress-bar-track-color-success)]\",\n warning: \"bg-[color:var(--progress-bar-track-color-warning)]\",\n error: \"bg-[color:var(--progress-bar-track-color-error)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n color: \"default\",\n },\n }\n)\n\n/**\n * ProgressBar indicator (fill) variants\n */\nexport const progressBarIndicatorVariants = cva(\n \"h-full w-full flex-1 rounded-[var(--progress-bar-indicator-border-radius)] transition-all duration-700 ease-out motion-reduce:transition-none\",\n {\n variants: {\n /**\n * Color variant for the indicator fill\n */\n color: {\n default: \"bg-[color:var(--progress-bar-fill-color-default)]\",\n primary: \"bg-[color:var(--progress-bar-fill-color-primary)]\",\n secondary: \"bg-[color:var(--progress-bar-fill-color-secondary)]\",\n info: \"bg-[color:var(--progress-bar-fill-color-info)]\",\n success: \"bg-[color:var(--progress-bar-fill-color-success)]\",\n warning: \"bg-[color:var(--progress-bar-fill-color-warning)]\",\n error: \"bg-[color:var(--progress-bar-fill-color-error)]\",\n },\n },\n defaultVariants: {\n color: \"default\",\n },\n }\n)\n\n/**\n * Label container variants for different positions\n */\nexport const progressBarLabelVariants = cva(\n \"text-[length:var(--progress-bar-label-text-font-size)] font-[var(--progress-bar-label-text-font-weight)] [font-variant-numeric:var(--progress-bar-label-text-tabular-nums)]\",\n {\n variants: {\n /**\n * Label position relative to the progress bar\n */\n position: {\n none: \"sr-only\",\n right: \"ml-[var(--progress-bar-label-position-right-margin-left)] shrink-0 text-[color:var(--progress-bar-label-position-right-color)]\",\n bottom: \"mt-[var(--progress-bar-label-position-bottom-margin-top)] text-[color:var(--progress-bar-label-position-bottom-color)]\",\n \"top-floating\": \"absolute -top-8 text-[color:var(--progress-bar-label-position-floating-color)]\",\n \"bottom-floating\": \"absolute -bottom-8 text-[color:var(--progress-bar-label-position-floating-color)]\",\n },\n },\n defaultVariants: {\n position: \"none\",\n },\n }\n)\n\n/**\n * Floating tooltip variants (for top-floating and bottom-floating)\n */\nexport const progressBarTooltipVariants = cva(\n [\n \"absolute z-10 px-2 py-1 text-xs font-medium tabular-nums\",\n \"rounded-md border bg-background text-foreground shadow-sm\",\n \"transition-all duration-150 ease-out\",\n \"-translate-x-1/2\",\n ],\n {\n variants: {\n /**\n * Tooltip position\n */\n position: {\n top: \"-top-9\",\n bottom: \"-bottom-9\",\n },\n },\n defaultVariants: {\n position: \"top\",\n },\n }\n)\n","\"use client\"\n\nimport type { ProgressBarLabelProps, ProgressBarProps } from \"./ProgressBar.types\"\n\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../../feedback/Tooltip\"\nimport {\n progressBarIndicatorVariants,\n progressBarLabelVariants,\n progressBarTooltipVariants,\n progressBarVariants,\n} from \"./ProgressBar.variants\"\n\n/**\n * Default format function for progress value\n */\nconst defaultFormatValue = (value: number): string => `${String(value)}%`\n\n/**\n * Internal component for rendering the progress label\n */\nfunction ProgressBarLabel({\n value,\n position,\n formatValue = defaultFormatValue,\n progressPercent,\n}: ProgressBarLabelProps) {\n // Don't render anything for indeterminate state or none position\n if (value === null || value === undefined) {\n return null\n }\n\n const formattedValue = formatValue(value)\n\n // Floating tooltip that follows the progress\n if (position === \"top-floating\" || position === \"bottom-floating\") {\n return (\n <span\n className={cn(\n progressBarTooltipVariants({\n position: position === \"top-floating\" ? \"top\" : \"bottom\",\n })\n )}\n data-slot=\"progress-bar-tooltip\"\n style={{ left: `${String(progressPercent)}%` }}\n >\n {formattedValue}\n </span>\n )\n }\n\n // Bottom label\n if (position === \"bottom\") {\n return (\n <span\n className={cn(progressBarLabelVariants({ position: \"bottom\" }), \"block\")}\n data-slot=\"progress-bar-label\"\n >\n {formattedValue}\n </span>\n )\n }\n\n // Hidden label for screen readers\n if (position === \"none\") {\n return (\n <span\n className={progressBarLabelVariants({ position: \"none\" })}\n data-slot=\"progress-bar-label\"\n >\n {formattedValue}\n </span>\n )\n }\n\n // Right label (inline)\n return (\n <span\n className={progressBarLabelVariants({ position: \"right\" })}\n data-slot=\"progress-bar-label\"\n >\n {formattedValue}\n </span>\n )\n}\n\n/**\n * ProgressBar component for displaying task completion status.\n *\n * Built on Radix UI Progress primitive with support for:\n * - Multiple color variants (default, primary, secondary, info, success, warning, error)\n * - Multiple size variants (xs, sm, md, lg, xl)\n * - Label positions (none, right, bottom, top-floating, bottom-floating)\n * - Floating tooltips that follow the progress indicator\n * - Custom value formatting\n * - Indeterminate state\n *\n * @example\n * ```tsx\n * // Basic usage with default green fill\n * <ProgressBar value={50} />\n *\n * // With floating tooltip\n * <ProgressBar value={75} label=\"top-floating\" />\n *\n * // With color and size variants\n * <ProgressBar value={30} color=\"error\" size=\"lg\" />\n * ```\n */\nfunction ProgressBar({\n className,\n value,\n max = 100,\n size,\n color,\n label = \"none\",\n formatValue,\n showValue,\n animate = true,\n tooltip,\n ref,\n ...props\n}: ProgressBarProps) {\n // Calculate percentage based on value and max\n const progressPercent = value !== null && value !== undefined\n ? Math.min(100, Math.max(0, (value / max) * 100))\n : 0\n // Initialize visibility based on animate prop - if not animating, show immediately\n const [isVisible, setIsVisible] = React.useState(!animate)\n const internalRef = React.useRef<HTMLDivElement>(null)\n\n // Merge internal ref with forwarded ref\n const progressRef = ref ?? internalRef\n\n // Use IntersectionObserver to trigger animation only when in viewport\n React.useEffect(() => {\n // Skip if not animating or already visible\n if (!animate || isVisible) {\n return\n }\n\n // Get the element from the ref\n const element = typeof progressRef === \"function\" ? null : progressRef.current\n if (!element) {\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0]\n if (entry?.isIntersecting) {\n // Small delay to ensure smooth animation start\n requestAnimationFrame(() => {\n setIsVisible(true)\n })\n // Once animated, no need to observe anymore\n observer.disconnect()\n }\n },\n { threshold: 0.1 }\n )\n\n observer.observe(element)\n\n return () => { observer.disconnect(); }\n }, [animate, isVisible, progressRef])\n\n // Determine if we should show value based on label position\n const shouldShowValue = showValue ?? label !== \"none\"\n\n // Calculate the transform value - start at 0 if not visible yet (for animation)\n const displayPercent = isVisible ? progressPercent : 0\n\n // Helper to wrap element with tooltip if tooltip prop is provided\n const wrapWithTooltip = (element: React.ReactElement) => {\n if (!tooltip) return element\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {element}\n </TooltipTrigger>\n <TooltipContent>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n const progressBar = (\n <ProgressPrimitive.Root\n ref={progressRef}\n className={cn(\n progressBarVariants({ size, color }),\n className\n )}\n data-slot=\"progress-bar\"\n max={max}\n value={value != null ? Math.min(Math.max(0, value), max) : null}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(progressBarIndicatorVariants({ color }))}\n data-slot=\"progress-bar-indicator\"\n style={{ transform: `translateX(-${String(100 - displayPercent)}%)` }}\n />\n {/* Floating labels are positioned inside the root for proper positioning */}\n {(label === \"top-floating\" || label === \"bottom-floating\") && shouldShowValue && (\n <ProgressBarLabel\n formatValue={formatValue}\n position={label}\n progressPercent={progressPercent}\n value={value}\n />\n )}\n </ProgressPrimitive.Root>\n )\n\n // Right label needs flex wrapper\n if (label === \"right\") {\n return wrapWithTooltip(\n <div className=\"flex items-center\" data-slot=\"progress-bar-container\">\n {progressBar}\n {shouldShowValue && (\n <ProgressBarLabel\n formatValue={formatValue}\n position={label}\n progressPercent={progressPercent}\n value={value}\n />\n )}\n </div>\n )\n }\n\n // Bottom label needs column wrapper\n if (label === \"bottom\") {\n return wrapWithTooltip(\n <div data-slot=\"progress-bar-container\">\n {progressBar}\n {shouldShowValue && (\n <ProgressBarLabel\n formatValue={formatValue}\n position={label}\n progressPercent={progressPercent}\n value={value}\n />\n )}\n </div>\n )\n }\n\n // Floating labels need relative wrapper for absolute positioning\n if (label === \"top-floating\" || label === \"bottom-floating\") {\n return wrapWithTooltip(\n <div className=\"relative\" data-slot=\"progress-bar-container\">\n {progressBar}\n </div>\n )\n }\n\n // No wrapper needed for none label\n return wrapWithTooltip(progressBar)\n}\n\nexport { ProgressBar }\n"]}
@@ -65,7 +65,14 @@ function calculateRatio(width, height) {
65
65
  }
66
66
  return width / height;
67
67
  }
68
+ function parseRatio(input) {
69
+ const [width, height] = input.split(":").map(Number);
70
+ if (width === void 0 || height === void 0 || !Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {
71
+ throw new Error(`Invalid ratio string: ${input}`);
72
+ }
73
+ return width / height;
74
+ }
68
75
 
69
- export { AspectRatio, aspectRatios, calculateRatio, getRatio };
70
- //# sourceMappingURL=chunk-2UGDLAYC.js.map
71
- //# sourceMappingURL=chunk-2UGDLAYC.js.map
76
+ export { AspectRatio, aspectRatios, calculateRatio, getRatio, parseRatio };
77
+ //# sourceMappingURL=chunk-45D4O7RK.js.map
78
+ //# sourceMappingURL=chunk-45D4O7RK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/AspectRatio/AspectRatio.tsx","../src/components/primitives/AspectRatio/AspectRatio.variants.ts"],"names":[],"mappings":";;;;AAIA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,2BAA6B,oBAAA,CAAA,IAAA,EAArB,EAA0B,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACxE;;;ACHA,IAAM,GAAA,GAAM,iBAAA;AAgBL,IAAM,YAAA,GAAkD;AAAA;AAAA;AAAA,EAG7D,MAAA,EAAQ,CAAA;AAAA;AAAA;AAAA,EAIR,WAAW,CAAA,GAAI,CAAA;AAAA;AAAA,EAEf,UAAU,CAAA,GAAI,CAAA;AAAA;AAAA,EAEd,OAAO,EAAA,GAAK,CAAA;AAAA;AAAA,EAEZ,UAAU,CAAA,GAAI,EAAA;AAAA;AAAA;AAAA,EAId,OAAO,CAAA,GAAI,CAAA;AAAA;AAAA,EAEX,eAAe,CAAA,GAAI,CAAA;AAAA;AAAA;AAAA,EAInB,SAAS,EAAA,GAAK,EAAA;AAAA;AAAA,EAEd,iBAAiB,EAAA,GAAK,EAAA;AAAA;AAAA;AAAA,EAItB,UAAU,CAAA,GAAI,CAAA;AAAA;AAAA,EAEd,UAAU,CAAA,GAAI,CAAA;AAAA;AAAA;AAAA,EAId,WAAW,CAAA,GAAI,CAAA;AAAA;AAAA,EAEf,mBAAmB,CAAA,GAAI,CAAA;AAAA;AAAA;AAAA,EAIvB,MAAA,EAAQ,GAAA;AAAA;AAAA,EAER,gBAAgB,CAAA,GAAI,GAAA;AAAA;AAAA;AAAA,EAIpB,MAAM,EAAA,GAAK,CAAA;AAAA;AAAA,EAEX,cAAc,CAAA,GAAI,EAAA;AAAA;AAAA,EAElB,WAAW,EAAA,GAAK;AAClB;AAcO,SAAS,SAAS,MAAA,EAAmC;AAC1D,EAAA,OAAO,aAAa,MAAM,CAAA;AAC5B;AAeO,SAAS,cAAA,CAAe,OAAe,MAAA,EAAwB;AACpE,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,KAAA,GAAQ,MAAA;AACjB;AAiBO,SAAS,WAAW,KAAA,EAAuB;AAChD,EAAA,MAAM,CAAC,OAAO,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACnD,EAAA,IACE,UAAU,MAAA,IACV,MAAA,KAAW,MAAA,IACX,CAAC,OAAO,QAAA,CAAS,KAAK,CAAA,IACtB,CAAC,OAAO,QAAA,CAAS,MAAM,KACvB,KAAA,IAAS,CAAA,IACT,UAAU,CAAA,EACV;AACA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAK,CAAA,CAAE,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,KAAA,GAAQ,MAAA;AACjB","file":"chunk-45D4O7RK.js","sourcesContent":["\"use client\"\n\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n\nfunction AspectRatio({\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />\n}\n\nexport { AspectRatio }\n","import type { AspectRatioPreset } from \"./AspectRatio.types\"\n\n/**\n * Golden ratio constant (φ = 1.618033988749895)\n */\nconst PHI = 1.618033988749895\n\n/**\n * Common aspect ratio values as numeric ratios (width/height)\n * Matches Figma design system ratios\n *\n * @example\n * ```tsx\n * import { AspectRatio } from \"@etus/ui\"\n * import { aspectRatios } from \"@etus/ui\"\n *\n * <AspectRatio ratio={aspectRatios.video}>\n * <img src=\"...\" />\n * </AspectRatio>\n * ```\n */\nexport const aspectRatios: Record<AspectRatioPreset, number> = {\n // Square\n /** 1:1 - Perfect square */\n square: 1,\n\n // Standard photo/video\n /** 4:3 - Traditional TV/photography */\n landscape: 4 / 3,\n /** 3:4 - Portrait photography */\n portrait: 3 / 4,\n /** 16:9 - Standard video/widescreen */\n video: 16 / 9,\n /** 9:16 - Vertical video (Stories, Reels, TikTok) */\n vertical: 9 / 16,\n\n // Classic photo\n /** 3:2 - Classic 35mm film photography */\n photo: 3 / 2,\n /** 2:3 - Portrait classic photo */\n photoPortrait: 2 / 3,\n\n // Display\n /** 16:10 - Common laptop/monitor display */\n display: 16 / 10,\n /** 10:16 - Portrait display */\n displayPortrait: 10 / 16,\n\n // Photo variants\n /** 5:4 - Medium format photography */\n photo5x4: 5 / 4,\n /** 4:5 - Instagram portrait, medium format */\n photo4x5: 4 / 5,\n\n // Panoramic\n /** 2:1 - Panoramic landscape */\n panoramic: 2 / 1,\n /** 1:2 - Panoramic portrait */\n panoramicPortrait: 1 / 2,\n\n // Golden ratio\n /** 1.618:1 - Golden ratio (φ) */\n golden: PHI,\n /** 1:1.618 - Inverse golden ratio */\n goldenPortrait: 1 / PHI,\n\n // Ultrawide/Cinema\n /** 21:9 - Cinema/ultrawide displays */\n wide: 21 / 9,\n /** 9:21 - Portrait ultrawide */\n widePortrait: 9 / 21,\n /** 32:9 - Super ultrawide displays */\n ultrawide: 32 / 9,\n} as const\n\n/**\n * Helper function to convert a ratio preset string to a numeric value\n *\n * @param preset - The aspect ratio preset name\n * @returns The numeric ratio value\n *\n * @example\n * ```tsx\n * getRatio(\"video\") // returns 1.7778 (16/9)\n * getRatio(\"square\") // returns 1\n * ```\n */\nexport function getRatio(preset: AspectRatioPreset): number {\n return aspectRatios[preset]\n}\n\n/**\n * Helper function to calculate aspect ratio from width and height\n *\n * @param width - The width value\n * @param height - The height value\n * @returns The aspect ratio as width/height\n *\n * @example\n * ```tsx\n * calculateRatio(1920, 1080) // returns 1.7778 (16:9)\n * calculateRatio(800, 600) // returns 1.3333 (4:3)\n * ```\n */\nexport function calculateRatio(width: number, height: number): number {\n if (height === 0) {\n throw new Error(\"Height cannot be zero\")\n }\n return width / height\n}\n\n/**\n * Helper function to parse a ratio string (e.g. \"16:9\") into a numeric value\n *\n * Useful when the ratio arrives as a string from a CMS or API instead of a\n * named preset.\n *\n * @param input - The ratio string in \"width:height\" format\n * @returns The numeric ratio as width/height\n *\n * @example\n * ```tsx\n * parseRatio(\"16:9\") // returns 1.7778\n * parseRatio(\"1.618:1\") // returns 1.618\n * ```\n */\nexport function parseRatio(input: string): number {\n const [width, height] = input.split(\":\").map(Number)\n if (\n width === undefined ||\n height === undefined ||\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n throw new Error(`Invalid ratio string: ${input}`)\n }\n return width / height\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { Sparkline } from './chunk-2VHARFMD.js';
2
- import { ProgressBar } from './chunk-UFRMZ3M6.js';
3
- import { SkeletonLoader } from './chunk-QHKOBGLW.js';
4
2
  import { Card, CardHeader, CardContent, CardTitle } from './chunk-K45MMHLA.js';
5
- import { Badge } from './chunk-TNROOKX3.js';
3
+ import { ProgressBar } from './chunk-3JCV72FO.js';
4
+ import { SkeletonLoader } from './chunk-QHKOBGLW.js';
5
+ import { Badge } from './chunk-UDY3IDCY.js';
6
6
  import { cn } from './chunk-HRNDJU7D.js';
7
7
  import { Minus, ArrowDown, ArrowUp } from 'lucide-react';
8
8
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -222,5 +222,5 @@ function KPICardGroup({
222
222
  }
223
223
 
224
224
  export { KPICard, KPICardGroup };
225
- //# sourceMappingURL=chunk-OTSK2KAI.js.map
226
- //# sourceMappingURL=chunk-OTSK2KAI.js.map
225
+ //# sourceMappingURL=chunk-4EYYCHLD.js.map
226
+ //# sourceMappingURL=chunk-4EYYCHLD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/data-display/KPICard/KPICard.tsx"],"names":[],"mappings":"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","file":"chunk-OTSK2KAI.js","sourcesContent":["import type {\n KPICardGroupProps,\n KPICardProps,\n KPICardTrend,\n} from \"./KPICard.types\"\n\nimport { ArrowDown, ArrowUp, Minus } from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from \"../../layout/Card\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { ProgressBar } from \"../../primitives/ProgressBar\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport { Sparkline } from \"../Sparkline\"\n\n/**\n * Size configuration for typography\n */\nconst sizeConfig = {\n sm: {\n value: \"text-[length:var(--kpi-card-value-size-sm)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-4\",\n },\n md: {\n value: \"text-[length:var(--kpi-card-value-size-md)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n lg: {\n value: \"text-[length:var(--kpi-card-value-size-lg)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n} as const\n\n/**\n * Trend icons mapping\n */\nconst TrendIcons = {\n up: ArrowUp,\n down: ArrowDown,\n neutral: Minus,\n} as const\n\n/**\n * Trend colors mapping using design tokens\n */\nconst trendColors = {\n up: \"text-success\",\n down: \"text-destructive\",\n neutral: \"text-muted-foreground\",\n} as const\n\n/**\n * KPICard - Key Performance Indicator Card\n *\n * Dashboard component that displays important metrics prominently.\n * Combines main value, comparison/delta, mini chart, and contextual metadata\n * in a layout optimized for quick visualization.\n *\n * @example\n * ```tsx\n * <KPICard\n * title=\"Revenue\"\n * value=\"$45,231.89\"\n * delta={20.1}\n * deltaLabel=\"from last month\"\n * />\n * ```\n */\nfunction KPICard({\n title,\n value,\n delta,\n deltaLabel,\n trend,\n sparkline,\n icon,\n featuredIcon,\n dropdownIcon,\n helpText,\n progressBar,\n swap,\n showBadge = true,\n action,\n variant = \"default\",\n size = \"md\",\n loading = false,\n className,\n ...props\n}: KPICardProps) {\n // Auto-detect trend direction if not provided\n const computedTrend: KPICardTrend = trend ?? (delta !== undefined\n ? delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"neutral\"\n : \"neutral\")\n\n const TrendIcon = TrendIcons[computedTrend]\n const trendColor = trendColors[computedTrend]\n const sizeStyles = sizeConfig[size]\n const sparklineColor =\n computedTrend === \"up\"\n ? \"var(--kpi-card-sparkline-up)\"\n : computedTrend === \"down\"\n ? \"var(--kpi-card-sparkline-down)\"\n : \"var(--kpi-card-sparkline-neutral)\"\n\n // Variant styles\n const variantStyles = {\n default: \"\",\n ghost: \"border-none shadow-none bg-transparent\",\n highlight: \"border-primary/50 bg-primary/5\",\n }\n\n if (loading) {\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <SkeletonLoader className=\"h-4 w-24\" />\n <SkeletonLoader className=\"size-4\" />\n </CardHeader>\n <CardContent>\n <SkeletonLoader className=\"mb-2 h-8 w-32\" />\n <SkeletonLoader className=\"h-4 w-20\" />\n </CardContent>\n </Card>\n )\n }\n\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <div className=\"flex items-center gap-1.5\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </CardTitle>\n {helpText && (\n <span\n className=\"text-xs text-muted-foreground\"\n data-slot=\"kpi-card-help-text\"\n >\n {helpText}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {featuredIcon && (\n <span\n className=\"inline-flex size-10 items-center justify-center rounded-full bg-primary/10 text-primary [&_svg]:size-5\"\n data-slot=\"kpi-card-featured-icon\"\n >\n {featuredIcon}\n </span>\n )}\n {icon && !featuredIcon && (\n <span className=\"text-muted-foreground\" data-slot=\"kpi-card-icon\">\n {icon}\n </span>\n )}\n {dropdownIcon && (\n <span\n className=\"text-muted-foreground\"\n data-slot=\"kpi-card-dropdown-icon\"\n >\n {dropdownIcon}\n </span>\n )}\n {action && !icon && !featuredIcon && !dropdownIcon && (\n <span data-slot=\"kpi-card-action\">{action}</span>\n )}\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-end justify-between\">\n <div>\n <div\n className={cn(sizeStyles.value, \"tabular-nums\")}\n data-slot=\"kpi-card-value\"\n >\n {value}\n </div>\n {delta !== undefined && (\n <div\n className={cn(\"mt-1 flex items-center gap-2\", trendColor)}\n data-slot=\"kpi-card-delta\"\n data-trend={computedTrend}\n >\n {showBadge ? (\n <Badge\n color={\n computedTrend === \"up\"\n ? \"success\"\n : computedTrend === \"down\"\n ? \"destructive\"\n : \"muted\"\n }\n leadingIcon={<TrendIcon aria-hidden=\"true\" />}\n size=\"sm\"\n type=\"pill-color\"\n >\n {Math.abs(delta)}%\n </Badge>\n ) : (\n <span className={cn(\"flex items-center text-xs\", trendColor)}>\n <TrendIcon aria-hidden=\"true\" className=\"mr-1 size-3\" />\n <span className=\"font-medium\">{Math.abs(delta)}%</span>\n </span>\n )}\n {deltaLabel && (\n <span className=\"text-xs text-muted-foreground\">\n {deltaLabel}\n </span>\n )}\n {swap && (\n <span className=\"ml-auto\" data-slot=\"kpi-card-swap\">\n {swap}\n </span>\n )}\n </div>\n )}\n </div>\n {sparkline && sparkline.length > 0 && (\n <Sparkline\n aria-hidden=\"true\"\n color={sparklineColor}\n data={sparkline}\n data-slot=\"kpi-card-sparkline\"\n height={32}\n style={{ opacity: \"var(--kpi-card-sparkline-opacity)\" }}\n variant=\"bar\"\n width={96}\n />\n )}\n </div>\n {progressBar !== undefined && (\n <div className=\"mt-3\" data-slot=\"kpi-card-progress\">\n {typeof progressBar === \"number\" ? (\n <ProgressBar value={progressBar} />\n ) : (\n progressBar\n )}\n </div>\n )}\n </CardContent>\n {/* Screen reader summary */}\n <span className=\"sr-only\">\n {title}: {value}\n {delta !== undefined && `, ${computedTrend === \"up\" ? \"up\" : computedTrend === \"down\" ? \"down\" : \"unchanged\"} ${String(Math.abs(delta))}%`}\n {deltaLabel && ` ${deltaLabel}`}\n </span>\n </Card>\n )\n}\n\n/**\n * KPICardGroup — Multiple KPIs composition (Figma Type=Multiple KPIs)\n *\n * Wrapper que diagramra múltiplos `KPICard` em layout horizontal ou vertical.\n *\n * @example\n * ```tsx\n * <KPICardGroup orientation=\"horizontal\" gap=\"md\">\n * <KPICard title=\"Revenue\" value=\"$45k\" delta={12} />\n * <KPICard title=\"Orders\" value={1240} delta={-3} />\n * <KPICard title=\"Users\" value={892} delta={8} />\n * </KPICardGroup>\n * ```\n */\nfunction KPICardGroup({\n children,\n orientation = \"horizontal\",\n gap = \"md\",\n className,\n ...props\n}: KPICardGroupProps) {\n const gapClasses = {\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n } as const\n\n return (\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\"\n ? \"flex-row [&>*]:flex-1\"\n : \"flex-col\",\n gapClasses[gap],\n className\n )}\n data-orientation={orientation}\n data-slot=\"kpi-card-group\"\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport { KPICard, KPICardGroup }\n"]}
1
+ {"version":3,"sources":["../src/components/data-display/KPICard/KPICard.tsx"],"names":[],"mappings":"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","file":"chunk-4EYYCHLD.js","sourcesContent":["import type {\n KPICardGroupProps,\n KPICardProps,\n KPICardTrend,\n} from \"./KPICard.types\"\n\nimport { ArrowDown, ArrowUp, Minus } from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from \"../../layout/Card\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { ProgressBar } from \"../../primitives/ProgressBar\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport { Sparkline } from \"../Sparkline\"\n\n/**\n * Size configuration for typography\n */\nconst sizeConfig = {\n sm: {\n value: \"text-[length:var(--kpi-card-value-size-sm)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-4\",\n },\n md: {\n value: \"text-[length:var(--kpi-card-value-size-md)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n lg: {\n value: \"text-[length:var(--kpi-card-value-size-lg)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n} as const\n\n/**\n * Trend icons mapping\n */\nconst TrendIcons = {\n up: ArrowUp,\n down: ArrowDown,\n neutral: Minus,\n} as const\n\n/**\n * Trend colors mapping using design tokens\n */\nconst trendColors = {\n up: \"text-success\",\n down: \"text-destructive\",\n neutral: \"text-muted-foreground\",\n} as const\n\n/**\n * KPICard - Key Performance Indicator Card\n *\n * Dashboard component that displays important metrics prominently.\n * Combines main value, comparison/delta, mini chart, and contextual metadata\n * in a layout optimized for quick visualization.\n *\n * @example\n * ```tsx\n * <KPICard\n * title=\"Revenue\"\n * value=\"$45,231.89\"\n * delta={20.1}\n * deltaLabel=\"from last month\"\n * />\n * ```\n */\nfunction KPICard({\n title,\n value,\n delta,\n deltaLabel,\n trend,\n sparkline,\n icon,\n featuredIcon,\n dropdownIcon,\n helpText,\n progressBar,\n swap,\n showBadge = true,\n action,\n variant = \"default\",\n size = \"md\",\n loading = false,\n className,\n ...props\n}: KPICardProps) {\n // Auto-detect trend direction if not provided\n const computedTrend: KPICardTrend = trend ?? (delta !== undefined\n ? delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"neutral\"\n : \"neutral\")\n\n const TrendIcon = TrendIcons[computedTrend]\n const trendColor = trendColors[computedTrend]\n const sizeStyles = sizeConfig[size]\n const sparklineColor =\n computedTrend === \"up\"\n ? \"var(--kpi-card-sparkline-up)\"\n : computedTrend === \"down\"\n ? \"var(--kpi-card-sparkline-down)\"\n : \"var(--kpi-card-sparkline-neutral)\"\n\n // Variant styles\n const variantStyles = {\n default: \"\",\n ghost: \"border-none shadow-none bg-transparent\",\n highlight: \"border-primary/50 bg-primary/5\",\n }\n\n if (loading) {\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <SkeletonLoader className=\"h-4 w-24\" />\n <SkeletonLoader className=\"size-4\" />\n </CardHeader>\n <CardContent>\n <SkeletonLoader className=\"mb-2 h-8 w-32\" />\n <SkeletonLoader className=\"h-4 w-20\" />\n </CardContent>\n </Card>\n )\n }\n\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <div className=\"flex items-center gap-1.5\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </CardTitle>\n {helpText && (\n <span\n className=\"text-xs text-muted-foreground\"\n data-slot=\"kpi-card-help-text\"\n >\n {helpText}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {featuredIcon && (\n <span\n className=\"inline-flex size-10 items-center justify-center rounded-full bg-primary/10 text-primary [&_svg]:size-5\"\n data-slot=\"kpi-card-featured-icon\"\n >\n {featuredIcon}\n </span>\n )}\n {icon && !featuredIcon && (\n <span className=\"text-muted-foreground\" data-slot=\"kpi-card-icon\">\n {icon}\n </span>\n )}\n {dropdownIcon && (\n <span\n className=\"text-muted-foreground\"\n data-slot=\"kpi-card-dropdown-icon\"\n >\n {dropdownIcon}\n </span>\n )}\n {action && !icon && !featuredIcon && !dropdownIcon && (\n <span data-slot=\"kpi-card-action\">{action}</span>\n )}\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-end justify-between\">\n <div>\n <div\n className={cn(sizeStyles.value, \"tabular-nums\")}\n data-slot=\"kpi-card-value\"\n >\n {value}\n </div>\n {delta !== undefined && (\n <div\n className={cn(\"mt-1 flex items-center gap-2\", trendColor)}\n data-slot=\"kpi-card-delta\"\n data-trend={computedTrend}\n >\n {showBadge ? (\n <Badge\n color={\n computedTrend === \"up\"\n ? \"success\"\n : computedTrend === \"down\"\n ? \"destructive\"\n : \"muted\"\n }\n leadingIcon={<TrendIcon aria-hidden=\"true\" />}\n size=\"sm\"\n type=\"pill-color\"\n >\n {Math.abs(delta)}%\n </Badge>\n ) : (\n <span className={cn(\"flex items-center text-xs\", trendColor)}>\n <TrendIcon aria-hidden=\"true\" className=\"mr-1 size-3\" />\n <span className=\"font-medium\">{Math.abs(delta)}%</span>\n </span>\n )}\n {deltaLabel && (\n <span className=\"text-xs text-muted-foreground\">\n {deltaLabel}\n </span>\n )}\n {swap && (\n <span className=\"ml-auto\" data-slot=\"kpi-card-swap\">\n {swap}\n </span>\n )}\n </div>\n )}\n </div>\n {sparkline && sparkline.length > 0 && (\n <Sparkline\n aria-hidden=\"true\"\n color={sparklineColor}\n data={sparkline}\n data-slot=\"kpi-card-sparkline\"\n height={32}\n style={{ opacity: \"var(--kpi-card-sparkline-opacity)\" }}\n variant=\"bar\"\n width={96}\n />\n )}\n </div>\n {progressBar !== undefined && (\n <div className=\"mt-3\" data-slot=\"kpi-card-progress\">\n {typeof progressBar === \"number\" ? (\n <ProgressBar value={progressBar} />\n ) : (\n progressBar\n )}\n </div>\n )}\n </CardContent>\n {/* Screen reader summary */}\n <span className=\"sr-only\">\n {title}: {value}\n {delta !== undefined && `, ${computedTrend === \"up\" ? \"up\" : computedTrend === \"down\" ? \"down\" : \"unchanged\"} ${String(Math.abs(delta))}%`}\n {deltaLabel && ` ${deltaLabel}`}\n </span>\n </Card>\n )\n}\n\n/**\n * KPICardGroup — Multiple KPIs composition (Figma Type=Multiple KPIs)\n *\n * Wrapper que diagramra múltiplos `KPICard` em layout horizontal ou vertical.\n *\n * @example\n * ```tsx\n * <KPICardGroup orientation=\"horizontal\" gap=\"md\">\n * <KPICard title=\"Revenue\" value=\"$45k\" delta={12} />\n * <KPICard title=\"Orders\" value={1240} delta={-3} />\n * <KPICard title=\"Users\" value={892} delta={8} />\n * </KPICardGroup>\n * ```\n */\nfunction KPICardGroup({\n children,\n orientation = \"horizontal\",\n gap = \"md\",\n className,\n ...props\n}: KPICardGroupProps) {\n const gapClasses = {\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n } as const\n\n return (\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\"\n ? \"flex-row [&>*]:flex-1\"\n : \"flex-col\",\n gapClasses[gap],\n className\n )}\n data-orientation={orientation}\n data-slot=\"kpi-card-group\"\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport { KPICard, KPICardGroup }\n"]}
@@ -1,6 +1,6 @@
1
- import { Label } from './chunk-SCGKQ5RE.js';
1
+ import { Label } from './chunk-2ROFZG3A.js';
2
2
  import { TextInput } from './chunk-PWCMCMDN.js';
3
- import { Button } from './chunk-ONQCNOLU.js';
3
+ import { Button } from './chunk-HDOR3SN3.js';
4
4
  import { cn } from './chunk-HRNDJU7D.js';
5
5
  import { LayoutGrid, BarChart2, PieChart, Table, Type, Undo2, Redo2, Eye, Save, ChevronRight, ChevronLeft, X, GripVertical, Trash2 } from 'lucide-react';
6
6
  import { useState, useMemo, useRef, useId, useCallback } from 'react';
@@ -920,5 +920,5 @@ function DashboardBuilder({
920
920
  DashboardBuilder.displayName = "DashboardBuilder";
921
921
 
922
922
  export { DashboardBuilder, DashboardBuilderCanvas, DashboardBuilderPropertiesPanel, DashboardBuilderToolbar, DashboardBuilderWidgetComponent, DashboardBuilderWidgetLibrary, dashboardBuilderCanvasVariants, dashboardBuilderDropZoneVariants, dashboardBuilderEmptyStateVariants, dashboardBuilderPropertiesPanelVariants, dashboardBuilderResizeHandleVariants, dashboardBuilderToolbarVariants, dashboardBuilderVariants, dashboardBuilderWidgetCardVariants, dashboardBuilderWidgetLibraryVariants, dashboardBuilderWidgetVariants, defaultWidgets };
923
- //# sourceMappingURL=chunk-QIETN4UU.js.map
924
- //# sourceMappingURL=chunk-QIETN4UU.js.map
923
+ //# sourceMappingURL=chunk-55RLLBXW.js.map
924
+ //# sourceMappingURL=chunk-55RLLBXW.js.map