@arolariu/components 0.0.40 → 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 (461) hide show
  1. package/DEBUGGING.md +396 -401
  2. package/{readme.md → README.md} +627 -627
  3. package/changelog.md +8 -0
  4. package/dist/components/ui/accordion.d.ts.map +1 -0
  5. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  6. package/dist/components/ui/alert.d.ts.map +1 -0
  7. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  8. package/dist/components/ui/avatar.d.ts.map +1 -0
  9. package/dist/components/ui/background-beams.d.ts.map +1 -0
  10. package/dist/components/ui/badge.d.ts.map +1 -0
  11. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  12. package/dist/components/ui/bubble-background.d.ts.map +1 -0
  13. package/dist/components/ui/button.d.ts.map +1 -0
  14. package/dist/components/ui/calendar.d.ts.map +1 -0
  15. package/dist/{esm/components → components}/ui/calendar.js +1 -1
  16. package/dist/components/ui/calendar.js.map +1 -0
  17. package/dist/components/ui/card.d.ts.map +1 -0
  18. package/dist/components/ui/carousel.d.ts.map +1 -0
  19. package/dist/components/ui/chart.d.ts +41 -0
  20. package/dist/components/ui/chart.d.ts.map +1 -0
  21. package/dist/{esm/components → components}/ui/chart.js +10 -10
  22. package/dist/components/ui/chart.js.map +1 -0
  23. package/dist/components/ui/checkbox.d.ts.map +1 -0
  24. package/dist/components/ui/collapsible.d.ts.map +1 -0
  25. package/dist/components/ui/command.d.ts.map +1 -0
  26. package/dist/components/ui/context-menu.d.ts.map +1 -0
  27. package/dist/components/ui/counting-number.d.ts.map +1 -0
  28. package/dist/components/ui/dialog.d.ts.map +1 -0
  29. package/dist/components/ui/dot-background.d.ts.map +1 -0
  30. package/dist/components/ui/drawer.d.ts.map +1 -0
  31. package/dist/components/ui/drawer.js.map +1 -0
  32. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  33. package/dist/components/ui/dropdrawer.d.ts.map +1 -0
  34. package/dist/components/ui/fireworks-background.d.ts.map +1 -0
  35. package/dist/components/ui/flip-button.d.ts.map +1 -0
  36. package/dist/components/ui/form.d.ts.map +1 -0
  37. package/dist/components/ui/gradient-background.d.ts.map +1 -0
  38. package/dist/components/ui/gradient-text.d.ts.map +1 -0
  39. package/dist/components/ui/highlight-text.d.ts.map +1 -0
  40. package/dist/components/ui/hole-background.d.ts.map +1 -0
  41. package/dist/components/ui/hover-card.d.ts.map +1 -0
  42. package/dist/components/ui/input-otp.d.ts.map +1 -0
  43. package/dist/components/ui/input.d.ts.map +1 -0
  44. package/dist/components/ui/input.js.map +1 -0
  45. package/dist/components/ui/label.d.ts.map +1 -0
  46. package/dist/components/ui/menubar.d.ts.map +1 -0
  47. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  48. package/dist/components/ui/pagination.d.ts.map +1 -0
  49. package/dist/components/ui/popover.d.ts.map +1 -0
  50. package/dist/components/ui/progress.d.ts.map +1 -0
  51. package/dist/components/ui/radio-group.d.ts.map +1 -0
  52. package/dist/components/ui/resizable.d.ts.map +1 -0
  53. package/dist/components/ui/ripple-button.d.ts.map +1 -0
  54. package/dist/components/ui/ripple-button.js.map +1 -0
  55. package/dist/components/ui/scratcher.d.ts.map +1 -0
  56. package/dist/components/ui/scratcher.js.map +1 -0
  57. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  58. package/dist/components/ui/select.d.ts.map +1 -0
  59. package/dist/components/ui/separator.d.ts.map +1 -0
  60. package/dist/components/ui/sheet.d.ts.map +1 -0
  61. package/dist/components/ui/sidebar.d.ts.map +1 -0
  62. package/dist/components/ui/skeleton.d.ts.map +1 -0
  63. package/dist/components/ui/slider.d.ts.map +1 -0
  64. package/dist/components/ui/sonner.d.ts.map +1 -0
  65. package/dist/components/ui/switch.d.ts.map +1 -0
  66. package/dist/components/ui/table.d.ts.map +1 -0
  67. package/dist/components/ui/tabs.d.ts.map +1 -0
  68. package/dist/components/ui/textarea.d.ts.map +1 -0
  69. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  70. package/dist/components/ui/toggle.d.ts.map +1 -0
  71. package/dist/components/ui/tooltip.d.ts.map +1 -0
  72. package/dist/hooks/use-mobile.d.ts.map +1 -0
  73. package/dist/index.css +25 -1
  74. package/dist/index.css.map +1 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +61 -61
  77. package/dist/lib/utils.d.ts.map +1 -0
  78. package/package.json +226 -296
  79. package/src/components/ui/calendar.tsx +216 -213
  80. package/src/components/ui/chart.tsx +353 -380
  81. package/src/components/ui/drawer.tsx +141 -141
  82. package/src/components/ui/input.tsx +22 -22
  83. package/src/components/ui/ripple-button.tsx +111 -111
  84. package/src/components/ui/scratcher.tsx +171 -171
  85. package/src/index.css +67 -69
  86. package/dist/cjs/components/ui/accordion.cjs +0 -92
  87. package/dist/cjs/components/ui/accordion.cjs.map +0 -1
  88. package/dist/cjs/components/ui/alert-dialog.cjs +0 -152
  89. package/dist/cjs/components/ui/alert-dialog.cjs.map +0 -1
  90. package/dist/cjs/components/ui/alert.cjs +0 -83
  91. package/dist/cjs/components/ui/alert.cjs.map +0 -1
  92. package/dist/cjs/components/ui/aspect-ratio.cjs +0 -47
  93. package/dist/cjs/components/ui/aspect-ratio.cjs.map +0 -1
  94. package/dist/cjs/components/ui/avatar.cjs +0 -69
  95. package/dist/cjs/components/ui/avatar.cjs.map +0 -1
  96. package/dist/cjs/components/ui/background-beams.cjs +0 -200
  97. package/dist/cjs/components/ui/background-beams.cjs.map +0 -1
  98. package/dist/cjs/components/ui/badge.cjs +0 -69
  99. package/dist/cjs/components/ui/badge.cjs.map +0 -1
  100. package/dist/cjs/components/ui/breadcrumb.cjs +0 -128
  101. package/dist/cjs/components/ui/breadcrumb.cjs.map +0 -1
  102. package/dist/cjs/components/ui/bubble-background.cjs +0 -213
  103. package/dist/cjs/components/ui/bubble-background.cjs.map +0 -1
  104. package/dist/cjs/components/ui/button.cjs +0 -80
  105. package/dist/cjs/components/ui/button.cjs.map +0 -1
  106. package/dist/cjs/components/ui/calendar.cjs +0 -146
  107. package/dist/cjs/components/ui/calendar.cjs.map +0 -1
  108. package/dist/cjs/components/ui/card.cjs +0 -108
  109. package/dist/cjs/components/ui/card.cjs.map +0 -1
  110. package/dist/cjs/components/ui/carousel.cjs +0 -207
  111. package/dist/cjs/components/ui/carousel.cjs.map +0 -1
  112. package/dist/cjs/components/ui/chart.cjs +0 -221
  113. package/dist/cjs/components/ui/chart.cjs.map +0 -1
  114. package/dist/cjs/components/ui/checkbox.cjs +0 -57
  115. package/dist/cjs/components/ui/checkbox.cjs.map +0 -1
  116. package/dist/cjs/components/ui/collapsible.cjs +0 -65
  117. package/dist/cjs/components/ui/collapsible.cjs.map +0 -1
  118. package/dist/cjs/components/ui/command.cjs +0 -159
  119. package/dist/cjs/components/ui/command.cjs.map +0 -1
  120. package/dist/cjs/components/ui/context-menu.cjs +0 -219
  121. package/dist/cjs/components/ui/context-menu.cjs.map +0 -1
  122. package/dist/cjs/components/ui/counting-number.cjs +0 -95
  123. package/dist/cjs/components/ui/counting-number.cjs.map +0 -1
  124. package/dist/cjs/components/ui/dialog.cjs +0 -156
  125. package/dist/cjs/components/ui/dialog.cjs.map +0 -1
  126. package/dist/cjs/components/ui/dot-background.cjs +0 -131
  127. package/dist/cjs/components/ui/dot-background.cjs.map +0 -1
  128. package/dist/cjs/components/ui/drawer.cjs +0 -147
  129. package/dist/cjs/components/ui/drawer.cjs.map +0 -1
  130. package/dist/cjs/components/ui/dropdown-menu.cjs +0 -220
  131. package/dist/cjs/components/ui/dropdown-menu.cjs.map +0 -1
  132. package/dist/cjs/components/ui/dropdrawer.cjs +0 -627
  133. package/dist/cjs/components/ui/dropdrawer.cjs.map +0 -1
  134. package/dist/cjs/components/ui/fireworks-background.cjs +0 -259
  135. package/dist/cjs/components/ui/fireworks-background.cjs.map +0 -1
  136. package/dist/cjs/components/ui/flip-button.cjs +0 -100
  137. package/dist/cjs/components/ui/flip-button.cjs.map +0 -1
  138. package/dist/cjs/components/ui/form.cjs +0 -149
  139. package/dist/cjs/components/ui/form.cjs.map +0 -1
  140. package/dist/cjs/components/ui/gradient-background.cjs +0 -60
  141. package/dist/cjs/components/ui/gradient-background.cjs.map +0 -1
  142. package/dist/cjs/components/ui/gradient-text.cjs +0 -83
  143. package/dist/cjs/components/ui/gradient-text.cjs.map +0 -1
  144. package/dist/cjs/components/ui/highlight-text.cjs +0 -74
  145. package/dist/cjs/components/ui/highlight-text.cjs.map +0 -1
  146. package/dist/cjs/components/ui/hole-background.cjs +0 -361
  147. package/dist/cjs/components/ui/hole-background.cjs.map +0 -1
  148. package/dist/cjs/components/ui/hover-card.cjs +0 -72
  149. package/dist/cjs/components/ui/hover-card.cjs.map +0 -1
  150. package/dist/cjs/components/ui/input-otp.cjs +0 -94
  151. package/dist/cjs/components/ui/input-otp.cjs.map +0 -1
  152. package/dist/cjs/components/ui/input.cjs +0 -49
  153. package/dist/cjs/components/ui/input.cjs.map +0 -1
  154. package/dist/cjs/components/ui/label.cjs +0 -49
  155. package/dist/cjs/components/ui/label.cjs.map +0 -1
  156. package/dist/cjs/components/ui/menubar.cjs +0 -233
  157. package/dist/cjs/components/ui/menubar.cjs.map +0 -1
  158. package/dist/cjs/components/ui/navigation-menu.cjs +0 -144
  159. package/dist/cjs/components/ui/navigation-menu.cjs.map +0 -1
  160. package/dist/cjs/components/ui/pagination.cjs +0 -142
  161. package/dist/cjs/components/ui/pagination.cjs.map +0 -1
  162. package/dist/cjs/components/ui/popover.cjs +0 -80
  163. package/dist/cjs/components/ui/popover.cjs.map +0 -1
  164. package/dist/cjs/components/ui/progress.cjs +0 -56
  165. package/dist/cjs/components/ui/progress.cjs.map +0 -1
  166. package/dist/cjs/components/ui/radio-group.cjs +0 -67
  167. package/dist/cjs/components/ui/radio-group.cjs.map +0 -1
  168. package/dist/cjs/components/ui/resizable.cjs +0 -75
  169. package/dist/cjs/components/ui/resizable.cjs.map +0 -1
  170. package/dist/cjs/components/ui/ripple-button.cjs +0 -108
  171. package/dist/cjs/components/ui/ripple-button.cjs.map +0 -1
  172. package/dist/cjs/components/ui/scratcher.cjs +0 -179
  173. package/dist/cjs/components/ui/scratcher.cjs.map +0 -1
  174. package/dist/cjs/components/ui/scroll-area.cjs +0 -73
  175. package/dist/cjs/components/ui/scroll-area.cjs.map +0 -1
  176. package/dist/cjs/components/ui/select.cjs +0 -177
  177. package/dist/cjs/components/ui/select.cjs.map +0 -1
  178. package/dist/cjs/components/ui/separator.cjs +0 -51
  179. package/dist/cjs/components/ui/separator.cjs.map +0 -1
  180. package/dist/cjs/components/ui/sheet.cjs +0 -150
  181. package/dist/cjs/components/ui/sheet.cjs.map +0 -1
  182. package/dist/cjs/components/ui/sidebar.cjs +0 -513
  183. package/dist/cjs/components/ui/sidebar.cjs.map +0 -1
  184. package/dist/cjs/components/ui/skeleton.cjs +0 -48
  185. package/dist/cjs/components/ui/skeleton.cjs.map +0 -1
  186. package/dist/cjs/components/ui/slider.cjs +0 -78
  187. package/dist/cjs/components/ui/slider.cjs.map +0 -1
  188. package/dist/cjs/components/ui/sonner.cjs +0 -58
  189. package/dist/cjs/components/ui/sonner.cjs.map +0 -1
  190. package/dist/cjs/components/ui/switch.cjs +0 -53
  191. package/dist/cjs/components/ui/switch.cjs.map +0 -1
  192. package/dist/cjs/components/ui/table.cjs +0 -122
  193. package/dist/cjs/components/ui/table.cjs.map +0 -1
  194. package/dist/cjs/components/ui/tabs.cjs +0 -79
  195. package/dist/cjs/components/ui/tabs.cjs.map +0 -1
  196. package/dist/cjs/components/ui/textarea.cjs +0 -48
  197. package/dist/cjs/components/ui/textarea.cjs.map +0 -1
  198. package/dist/cjs/components/ui/toggle-group.cjs +0 -80
  199. package/dist/cjs/components/ui/toggle-group.cjs.map +0 -1
  200. package/dist/cjs/components/ui/toggle.cjs +0 -74
  201. package/dist/cjs/components/ui/toggle.cjs.map +0 -1
  202. package/dist/cjs/components/ui/tooltip.cjs +0 -88
  203. package/dist/cjs/components/ui/tooltip.cjs.map +0 -1
  204. package/dist/cjs/hooks/use-mobile.cjs +0 -52
  205. package/dist/cjs/hooks/use-mobile.cjs.map +0 -1
  206. package/dist/cjs/index.cjs +0 -905
  207. package/dist/cjs/index.cjs.map +0 -1
  208. package/dist/cjs/index.css +0 -7309
  209. package/dist/cjs/index.css.map +0 -1
  210. package/dist/cjs/lib/utils.cjs +0 -42
  211. package/dist/cjs/lib/utils.cjs.map +0 -1
  212. package/dist/esm/components/ui/calendar.js.map +0 -1
  213. package/dist/esm/components/ui/chart.js.map +0 -1
  214. package/dist/esm/components/ui/drawer.js.map +0 -1
  215. package/dist/esm/components/ui/input.js.map +0 -1
  216. package/dist/esm/components/ui/ripple-button.js.map +0 -1
  217. package/dist/esm/components/ui/scratcher.js.map +0 -1
  218. package/dist/esm/index.css +0 -7309
  219. package/dist/esm/index.css.map +0 -1
  220. package/dist/esm/index.js +0 -62
  221. package/dist/types/components/ui/accordion.d.ts.map +0 -1
  222. package/dist/types/components/ui/alert-dialog.d.ts.map +0 -1
  223. package/dist/types/components/ui/alert.d.ts.map +0 -1
  224. package/dist/types/components/ui/aspect-ratio.d.ts.map +0 -1
  225. package/dist/types/components/ui/avatar.d.ts.map +0 -1
  226. package/dist/types/components/ui/background-beams.d.ts.map +0 -1
  227. package/dist/types/components/ui/badge.d.ts.map +0 -1
  228. package/dist/types/components/ui/breadcrumb.d.ts.map +0 -1
  229. package/dist/types/components/ui/bubble-background.d.ts.map +0 -1
  230. package/dist/types/components/ui/button.d.ts.map +0 -1
  231. package/dist/types/components/ui/calendar.d.ts.map +0 -1
  232. package/dist/types/components/ui/card.d.ts.map +0 -1
  233. package/dist/types/components/ui/carousel.d.ts.map +0 -1
  234. package/dist/types/components/ui/chart.d.ts +0 -55
  235. package/dist/types/components/ui/chart.d.ts.map +0 -1
  236. package/dist/types/components/ui/checkbox.d.ts.map +0 -1
  237. package/dist/types/components/ui/collapsible.d.ts.map +0 -1
  238. package/dist/types/components/ui/command.d.ts.map +0 -1
  239. package/dist/types/components/ui/context-menu.d.ts.map +0 -1
  240. package/dist/types/components/ui/counting-number.d.ts.map +0 -1
  241. package/dist/types/components/ui/dialog.d.ts.map +0 -1
  242. package/dist/types/components/ui/dot-background.d.ts.map +0 -1
  243. package/dist/types/components/ui/drawer.d.ts.map +0 -1
  244. package/dist/types/components/ui/dropdown-menu.d.ts.map +0 -1
  245. package/dist/types/components/ui/dropdrawer.d.ts.map +0 -1
  246. package/dist/types/components/ui/fireworks-background.d.ts.map +0 -1
  247. package/dist/types/components/ui/flip-button.d.ts.map +0 -1
  248. package/dist/types/components/ui/form.d.ts.map +0 -1
  249. package/dist/types/components/ui/gradient-background.d.ts.map +0 -1
  250. package/dist/types/components/ui/gradient-text.d.ts.map +0 -1
  251. package/dist/types/components/ui/highlight-text.d.ts.map +0 -1
  252. package/dist/types/components/ui/hole-background.d.ts.map +0 -1
  253. package/dist/types/components/ui/hover-card.d.ts.map +0 -1
  254. package/dist/types/components/ui/input-otp.d.ts.map +0 -1
  255. package/dist/types/components/ui/input.d.ts.map +0 -1
  256. package/dist/types/components/ui/label.d.ts.map +0 -1
  257. package/dist/types/components/ui/menubar.d.ts.map +0 -1
  258. package/dist/types/components/ui/navigation-menu.d.ts.map +0 -1
  259. package/dist/types/components/ui/pagination.d.ts.map +0 -1
  260. package/dist/types/components/ui/popover.d.ts.map +0 -1
  261. package/dist/types/components/ui/progress.d.ts.map +0 -1
  262. package/dist/types/components/ui/radio-group.d.ts.map +0 -1
  263. package/dist/types/components/ui/resizable.d.ts.map +0 -1
  264. package/dist/types/components/ui/ripple-button.d.ts.map +0 -1
  265. package/dist/types/components/ui/scratcher.d.ts.map +0 -1
  266. package/dist/types/components/ui/scroll-area.d.ts.map +0 -1
  267. package/dist/types/components/ui/select.d.ts.map +0 -1
  268. package/dist/types/components/ui/separator.d.ts.map +0 -1
  269. package/dist/types/components/ui/sheet.d.ts.map +0 -1
  270. package/dist/types/components/ui/sidebar.d.ts.map +0 -1
  271. package/dist/types/components/ui/skeleton.d.ts.map +0 -1
  272. package/dist/types/components/ui/slider.d.ts.map +0 -1
  273. package/dist/types/components/ui/sonner.d.ts.map +0 -1
  274. package/dist/types/components/ui/switch.d.ts.map +0 -1
  275. package/dist/types/components/ui/table.d.ts.map +0 -1
  276. package/dist/types/components/ui/tabs.d.ts.map +0 -1
  277. package/dist/types/components/ui/textarea.d.ts.map +0 -1
  278. package/dist/types/components/ui/toggle-group.d.ts.map +0 -1
  279. package/dist/types/components/ui/toggle.d.ts.map +0 -1
  280. package/dist/types/components/ui/tooltip.d.ts.map +0 -1
  281. package/dist/types/hooks/use-mobile.d.ts.map +0 -1
  282. package/dist/types/index.d.ts.map +0 -1
  283. package/dist/types/lib/utils.d.ts.map +0 -1
  284. package/tailwind.config.mjs +0 -65
  285. package/tsconfig.json +0 -58
  286. /package/{LICENSE → LICENSE.md} +0 -0
  287. /package/dist/{types/components → components}/ui/accordion.d.ts +0 -0
  288. /package/dist/{esm/components → components}/ui/accordion.js +0 -0
  289. /package/dist/{esm/components → components}/ui/accordion.js.map +0 -0
  290. /package/dist/{types/components → components}/ui/alert-dialog.d.ts +0 -0
  291. /package/dist/{esm/components → components}/ui/alert-dialog.js +0 -0
  292. /package/dist/{esm/components → components}/ui/alert-dialog.js.map +0 -0
  293. /package/dist/{types/components → components}/ui/alert.d.ts +0 -0
  294. /package/dist/{esm/components → components}/ui/alert.js +0 -0
  295. /package/dist/{esm/components → components}/ui/alert.js.map +0 -0
  296. /package/dist/{types/components → components}/ui/aspect-ratio.d.ts +0 -0
  297. /package/dist/{esm/components → components}/ui/aspect-ratio.js +0 -0
  298. /package/dist/{esm/components → components}/ui/aspect-ratio.js.map +0 -0
  299. /package/dist/{types/components → components}/ui/avatar.d.ts +0 -0
  300. /package/dist/{esm/components → components}/ui/avatar.js +0 -0
  301. /package/dist/{esm/components → components}/ui/avatar.js.map +0 -0
  302. /package/dist/{types/components → components}/ui/background-beams.d.ts +0 -0
  303. /package/dist/{esm/components → components}/ui/background-beams.js +0 -0
  304. /package/dist/{esm/components → components}/ui/background-beams.js.map +0 -0
  305. /package/dist/{types/components → components}/ui/badge.d.ts +0 -0
  306. /package/dist/{esm/components → components}/ui/badge.js +0 -0
  307. /package/dist/{esm/components → components}/ui/badge.js.map +0 -0
  308. /package/dist/{types/components → components}/ui/breadcrumb.d.ts +0 -0
  309. /package/dist/{esm/components → components}/ui/breadcrumb.js +0 -0
  310. /package/dist/{esm/components → components}/ui/breadcrumb.js.map +0 -0
  311. /package/dist/{types/components → components}/ui/bubble-background.d.ts +0 -0
  312. /package/dist/{esm/components → components}/ui/bubble-background.js +0 -0
  313. /package/dist/{esm/components → components}/ui/bubble-background.js.map +0 -0
  314. /package/dist/{types/components → components}/ui/button.d.ts +0 -0
  315. /package/dist/{esm/components → components}/ui/button.js +0 -0
  316. /package/dist/{esm/components → components}/ui/button.js.map +0 -0
  317. /package/dist/{types/components → components}/ui/calendar.d.ts +0 -0
  318. /package/dist/{types/components → components}/ui/card.d.ts +0 -0
  319. /package/dist/{esm/components → components}/ui/card.js +0 -0
  320. /package/dist/{esm/components → components}/ui/card.js.map +0 -0
  321. /package/dist/{types/components → components}/ui/carousel.d.ts +0 -0
  322. /package/dist/{esm/components → components}/ui/carousel.js +0 -0
  323. /package/dist/{esm/components → components}/ui/carousel.js.map +0 -0
  324. /package/dist/{types/components → components}/ui/checkbox.d.ts +0 -0
  325. /package/dist/{esm/components → components}/ui/checkbox.js +0 -0
  326. /package/dist/{esm/components → components}/ui/checkbox.js.map +0 -0
  327. /package/dist/{types/components → components}/ui/collapsible.d.ts +0 -0
  328. /package/dist/{esm/components → components}/ui/collapsible.js +0 -0
  329. /package/dist/{esm/components → components}/ui/collapsible.js.map +0 -0
  330. /package/dist/{types/components → components}/ui/command.d.ts +0 -0
  331. /package/dist/{esm/components → components}/ui/command.js +0 -0
  332. /package/dist/{esm/components → components}/ui/command.js.map +0 -0
  333. /package/dist/{types/components → components}/ui/context-menu.d.ts +0 -0
  334. /package/dist/{esm/components → components}/ui/context-menu.js +0 -0
  335. /package/dist/{esm/components → components}/ui/context-menu.js.map +0 -0
  336. /package/dist/{types/components → components}/ui/counting-number.d.ts +0 -0
  337. /package/dist/{esm/components → components}/ui/counting-number.js +0 -0
  338. /package/dist/{esm/components → components}/ui/counting-number.js.map +0 -0
  339. /package/dist/{types/components → components}/ui/dialog.d.ts +0 -0
  340. /package/dist/{esm/components → components}/ui/dialog.js +0 -0
  341. /package/dist/{esm/components → components}/ui/dialog.js.map +0 -0
  342. /package/dist/{types/components → components}/ui/dot-background.d.ts +0 -0
  343. /package/dist/{esm/components → components}/ui/dot-background.js +0 -0
  344. /package/dist/{esm/components → components}/ui/dot-background.js.map +0 -0
  345. /package/dist/{types/components → components}/ui/drawer.d.ts +0 -0
  346. /package/dist/{esm/components → components}/ui/drawer.js +0 -0
  347. /package/dist/{types/components → components}/ui/dropdown-menu.d.ts +0 -0
  348. /package/dist/{esm/components → components}/ui/dropdown-menu.js +0 -0
  349. /package/dist/{esm/components → components}/ui/dropdown-menu.js.map +0 -0
  350. /package/dist/{types/components → components}/ui/dropdrawer.d.ts +0 -0
  351. /package/dist/{esm/components → components}/ui/dropdrawer.js +0 -0
  352. /package/dist/{esm/components → components}/ui/dropdrawer.js.map +0 -0
  353. /package/dist/{types/components → components}/ui/fireworks-background.d.ts +0 -0
  354. /package/dist/{esm/components → components}/ui/fireworks-background.js +0 -0
  355. /package/dist/{esm/components → components}/ui/fireworks-background.js.map +0 -0
  356. /package/dist/{types/components → components}/ui/flip-button.d.ts +0 -0
  357. /package/dist/{esm/components → components}/ui/flip-button.js +0 -0
  358. /package/dist/{esm/components → components}/ui/flip-button.js.map +0 -0
  359. /package/dist/{types/components → components}/ui/form.d.ts +0 -0
  360. /package/dist/{esm/components → components}/ui/form.js +0 -0
  361. /package/dist/{esm/components → components}/ui/form.js.map +0 -0
  362. /package/dist/{types/components → components}/ui/gradient-background.d.ts +0 -0
  363. /package/dist/{esm/components → components}/ui/gradient-background.js +0 -0
  364. /package/dist/{esm/components → components}/ui/gradient-background.js.map +0 -0
  365. /package/dist/{types/components → components}/ui/gradient-text.d.ts +0 -0
  366. /package/dist/{esm/components → components}/ui/gradient-text.js +0 -0
  367. /package/dist/{esm/components → components}/ui/gradient-text.js.map +0 -0
  368. /package/dist/{types/components → components}/ui/highlight-text.d.ts +0 -0
  369. /package/dist/{esm/components → components}/ui/highlight-text.js +0 -0
  370. /package/dist/{esm/components → components}/ui/highlight-text.js.map +0 -0
  371. /package/dist/{types/components → components}/ui/hole-background.d.ts +0 -0
  372. /package/dist/{esm/components → components}/ui/hole-background.js +0 -0
  373. /package/dist/{esm/components → components}/ui/hole-background.js.map +0 -0
  374. /package/dist/{types/components → components}/ui/hover-card.d.ts +0 -0
  375. /package/dist/{esm/components → components}/ui/hover-card.js +0 -0
  376. /package/dist/{esm/components → components}/ui/hover-card.js.map +0 -0
  377. /package/dist/{types/components → components}/ui/input-otp.d.ts +0 -0
  378. /package/dist/{esm/components → components}/ui/input-otp.js +0 -0
  379. /package/dist/{esm/components → components}/ui/input-otp.js.map +0 -0
  380. /package/dist/{types/components → components}/ui/input.d.ts +0 -0
  381. /package/dist/{esm/components → components}/ui/input.js +0 -0
  382. /package/dist/{types/components → components}/ui/label.d.ts +0 -0
  383. /package/dist/{esm/components → components}/ui/label.js +0 -0
  384. /package/dist/{esm/components → components}/ui/label.js.map +0 -0
  385. /package/dist/{types/components → components}/ui/menubar.d.ts +0 -0
  386. /package/dist/{esm/components → components}/ui/menubar.js +0 -0
  387. /package/dist/{esm/components → components}/ui/menubar.js.map +0 -0
  388. /package/dist/{types/components → components}/ui/navigation-menu.d.ts +0 -0
  389. /package/dist/{esm/components → components}/ui/navigation-menu.js +0 -0
  390. /package/dist/{esm/components → components}/ui/navigation-menu.js.map +0 -0
  391. /package/dist/{types/components → components}/ui/pagination.d.ts +0 -0
  392. /package/dist/{esm/components → components}/ui/pagination.js +0 -0
  393. /package/dist/{esm/components → components}/ui/pagination.js.map +0 -0
  394. /package/dist/{types/components → components}/ui/popover.d.ts +0 -0
  395. /package/dist/{esm/components → components}/ui/popover.js +0 -0
  396. /package/dist/{esm/components → components}/ui/popover.js.map +0 -0
  397. /package/dist/{types/components → components}/ui/progress.d.ts +0 -0
  398. /package/dist/{esm/components → components}/ui/progress.js +0 -0
  399. /package/dist/{esm/components → components}/ui/progress.js.map +0 -0
  400. /package/dist/{types/components → components}/ui/radio-group.d.ts +0 -0
  401. /package/dist/{esm/components → components}/ui/radio-group.js +0 -0
  402. /package/dist/{esm/components → components}/ui/radio-group.js.map +0 -0
  403. /package/dist/{types/components → components}/ui/resizable.d.ts +0 -0
  404. /package/dist/{esm/components → components}/ui/resizable.js +0 -0
  405. /package/dist/{esm/components → components}/ui/resizable.js.map +0 -0
  406. /package/dist/{types/components → components}/ui/ripple-button.d.ts +0 -0
  407. /package/dist/{esm/components → components}/ui/ripple-button.js +0 -0
  408. /package/dist/{types/components → components}/ui/scratcher.d.ts +0 -0
  409. /package/dist/{esm/components → components}/ui/scratcher.js +0 -0
  410. /package/dist/{types/components → components}/ui/scroll-area.d.ts +0 -0
  411. /package/dist/{esm/components → components}/ui/scroll-area.js +0 -0
  412. /package/dist/{esm/components → components}/ui/scroll-area.js.map +0 -0
  413. /package/dist/{types/components → components}/ui/select.d.ts +0 -0
  414. /package/dist/{esm/components → components}/ui/select.js +0 -0
  415. /package/dist/{esm/components → components}/ui/select.js.map +0 -0
  416. /package/dist/{types/components → components}/ui/separator.d.ts +0 -0
  417. /package/dist/{esm/components → components}/ui/separator.js +0 -0
  418. /package/dist/{esm/components → components}/ui/separator.js.map +0 -0
  419. /package/dist/{types/components → components}/ui/sheet.d.ts +0 -0
  420. /package/dist/{esm/components → components}/ui/sheet.js +0 -0
  421. /package/dist/{esm/components → components}/ui/sheet.js.map +0 -0
  422. /package/dist/{types/components → components}/ui/sidebar.d.ts +0 -0
  423. /package/dist/{esm/components → components}/ui/sidebar.js +0 -0
  424. /package/dist/{esm/components → components}/ui/sidebar.js.map +0 -0
  425. /package/dist/{types/components → components}/ui/skeleton.d.ts +0 -0
  426. /package/dist/{esm/components → components}/ui/skeleton.js +0 -0
  427. /package/dist/{esm/components → components}/ui/skeleton.js.map +0 -0
  428. /package/dist/{types/components → components}/ui/slider.d.ts +0 -0
  429. /package/dist/{esm/components → components}/ui/slider.js +0 -0
  430. /package/dist/{esm/components → components}/ui/slider.js.map +0 -0
  431. /package/dist/{types/components → components}/ui/sonner.d.ts +0 -0
  432. /package/dist/{esm/components → components}/ui/sonner.js +0 -0
  433. /package/dist/{esm/components → components}/ui/sonner.js.map +0 -0
  434. /package/dist/{types/components → components}/ui/switch.d.ts +0 -0
  435. /package/dist/{esm/components → components}/ui/switch.js +0 -0
  436. /package/dist/{esm/components → components}/ui/switch.js.map +0 -0
  437. /package/dist/{types/components → components}/ui/table.d.ts +0 -0
  438. /package/dist/{esm/components → components}/ui/table.js +0 -0
  439. /package/dist/{esm/components → components}/ui/table.js.map +0 -0
  440. /package/dist/{types/components → components}/ui/tabs.d.ts +0 -0
  441. /package/dist/{esm/components → components}/ui/tabs.js +0 -0
  442. /package/dist/{esm/components → components}/ui/tabs.js.map +0 -0
  443. /package/dist/{types/components → components}/ui/textarea.d.ts +0 -0
  444. /package/dist/{esm/components → components}/ui/textarea.js +0 -0
  445. /package/dist/{esm/components → components}/ui/textarea.js.map +0 -0
  446. /package/dist/{types/components → components}/ui/toggle-group.d.ts +0 -0
  447. /package/dist/{esm/components → components}/ui/toggle-group.js +0 -0
  448. /package/dist/{esm/components → components}/ui/toggle-group.js.map +0 -0
  449. /package/dist/{types/components → components}/ui/toggle.d.ts +0 -0
  450. /package/dist/{esm/components → components}/ui/toggle.js +0 -0
  451. /package/dist/{esm/components → components}/ui/toggle.js.map +0 -0
  452. /package/dist/{types/components → components}/ui/tooltip.d.ts +0 -0
  453. /package/dist/{esm/components → components}/ui/tooltip.js +0 -0
  454. /package/dist/{esm/components → components}/ui/tooltip.js.map +0 -0
  455. /package/dist/{types/hooks → hooks}/use-mobile.d.ts +0 -0
  456. /package/dist/{esm/hooks → hooks}/use-mobile.js +0 -0
  457. /package/dist/{esm/hooks → hooks}/use-mobile.js.map +0 -0
  458. /package/dist/{types/index.d.ts → index.d.ts} +0 -0
  459. /package/dist/{types/lib → lib}/utils.d.ts +0 -0
  460. /package/dist/{esm/lib → lib}/utils.js +0 -0
  461. /package/dist/{esm/lib → lib}/utils.js.map +0 -0
@@ -1,380 +1,353 @@
1
- "use client";
2
-
3
- import * as React from "react";
4
- import * as RechartsPrimitive from "recharts";
5
- import type { LegendPayload } from "recharts/types/component/DefaultLegendContent";
6
- import {
7
- NameType,
8
- Payload,
9
- ValueType,
10
- } from "recharts/types/component/DefaultTooltipContent";
11
- import type { Props as LegendProps } from "recharts/types/component/Legend";
12
- import { TooltipContentProps } from "recharts/types/component/Tooltip";
13
-
14
- import { cn } from "@/lib/utils";
15
-
16
- // Format: { THEME_NAME: CSS_SELECTOR }
17
- const THEMES = { light: "", dark: ".dark" } as const;
18
-
19
- export type ChartConfig = {
20
- [k in string]: {
21
- label?: React.ReactNode;
22
- icon?: React.ComponentType;
23
- } & (
24
- | { color?: string; theme?: never }
25
- | { color?: never; theme: Record<keyof typeof THEMES, string> }
26
- );
27
- };
28
-
29
- type ChartContextProps = {
30
- config: ChartConfig;
31
- };
32
-
33
- const ChartContext = React.createContext<ChartContextProps | null>(null);
34
-
35
- function useChart() {
36
- const context = React.useContext(ChartContext);
37
-
38
- if (!context) {
39
- throw new Error("useChart must be used within a <ChartContainer />");
40
- }
41
-
42
- return context;
43
- }
44
-
45
- function ChartContainer({
46
- id,
47
- className,
48
- children,
49
- config,
50
- ...props
51
- }: React.ComponentProps<"div"> & {
52
- config: ChartConfig;
53
- children: React.ComponentProps<
54
- typeof RechartsPrimitive.ResponsiveContainer
55
- >["children"];
56
- }) {
57
- const uniqueId = React.useId();
58
- const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
59
-
60
- return (
61
- <ChartContext.Provider value={{ config }}>
62
- <div
63
- data-slot="chart"
64
- data-chart={chartId}
65
- className={cn(
66
- "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
67
- className,
68
- )}
69
- {...props}
70
- >
71
- <ChartStyle id={chartId} config={config} />
72
- <RechartsPrimitive.ResponsiveContainer>
73
- {children}
74
- </RechartsPrimitive.ResponsiveContainer>
75
- </div>
76
- </ChartContext.Provider>
77
- );
78
- }
79
-
80
- const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
81
- const colorConfig = Object.entries(config).filter(
82
- ([, config]) => config.theme || config.color,
83
- );
84
-
85
- if (!colorConfig.length) {
86
- return null;
87
- }
88
-
89
- return (
90
- <style
91
- dangerouslySetInnerHTML={{
92
- __html: Object.entries(THEMES)
93
- .map(
94
- ([theme, prefix]) => `
95
- ${prefix} [data-chart=${id}] {
96
- ${colorConfig
97
- .map(([key, itemConfig]) => {
98
- const color =
99
- itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||
100
- itemConfig.color;
101
- return color ? ` --color-${key}: ${color};` : null;
102
- })
103
- .join("\n")}
104
- }
105
- `,
106
- )
107
- .join("\n"),
108
- }}
109
- />
110
- );
111
- };
112
-
113
- const ChartTooltip = RechartsPrimitive.Tooltip;
114
-
115
- type CustomTooltipProps = TooltipContentProps<ValueType, NameType> & {
116
- className?: string;
117
- hideLabel?: boolean;
118
- hideIndicator?: boolean;
119
- indicator?: "line" | "dot" | "dashed";
120
- nameKey?: string;
121
- labelKey?: string;
122
- labelFormatter?: (
123
- label: TooltipContentProps<number, string>["label"],
124
- payload: TooltipContentProps<number, string>["payload"],
125
- ) => React.ReactNode;
126
- formatter?: (
127
- value: number | string,
128
- name: string,
129
- item: Payload<number | string, string>,
130
- index: number,
131
- payload: ReadonlyArray<Payload<number | string, string>>,
132
- ) => React.ReactNode;
133
- labelClassName?: string;
134
- color?: string;
135
- };
136
-
137
- function ChartTooltipContent({
138
- active,
139
- payload,
140
- label,
141
- className,
142
- indicator = "dot",
143
- hideLabel = false,
144
- hideIndicator = false,
145
- labelFormatter,
146
- formatter,
147
- labelClassName,
148
- color,
149
- nameKey,
150
- labelKey,
151
- }: CustomTooltipProps) {
152
- const { config } = useChart();
153
-
154
- const tooltipLabel = React.useMemo(() => {
155
- if (hideLabel || !payload?.length) {
156
- return null;
157
- }
158
-
159
- const [item] = payload;
160
- const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
161
- const itemConfig = getPayloadConfigFromPayload(config, item, key);
162
- const value =
163
- !labelKey && typeof label === "string"
164
- ? config[label as keyof typeof config]?.label || label
165
- : itemConfig?.label;
166
-
167
- if (labelFormatter) {
168
- return (
169
- <div className={cn("font-medium", labelClassName)}>
170
- {labelFormatter(value, payload)}
171
- </div>
172
- );
173
- }
174
-
175
- if (!value) {
176
- return null;
177
- }
178
-
179
- return <div className={cn("font-medium", labelClassName)}>{value}</div>;
180
- }, [
181
- label,
182
- labelFormatter,
183
- payload,
184
- hideLabel,
185
- labelClassName,
186
- config,
187
- labelKey,
188
- ]);
189
-
190
- if (!active || !payload?.length) {
191
- return null;
192
- }
193
-
194
- const nestLabel = payload.length === 1 && indicator !== "dot";
195
-
196
- return (
197
- <div
198
- className={cn(
199
- "border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl",
200
- className,
201
- )}
202
- >
203
- {!nestLabel ? tooltipLabel : null}
204
- <div className="grid gap-1.5">
205
- {payload.map((item, index) => {
206
- const key = `${nameKey || item.name || item.dataKey || "value"}`;
207
- const itemConfig = getPayloadConfigFromPayload(config, item, key);
208
- const indicatorColor = color || item.payload.fill || item.color;
209
-
210
- return (
211
- <div
212
- key={item.dataKey}
213
- className={cn(
214
- "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
215
- indicator === "dot" && "items-center",
216
- )}
217
- >
218
- {formatter && item?.value !== undefined && item.name ? (
219
- formatter(item.value, item.name, item, index, item.payload)
220
- ) : (
221
- <>
222
- {itemConfig?.icon ? (
223
- <itemConfig.icon />
224
- ) : (
225
- !hideIndicator && (
226
- <div
227
- className={cn(
228
- "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
229
- {
230
- "h-2.5 w-2.5": indicator === "dot",
231
- "w-1": indicator === "line",
232
- "w-0 border-[1.5px] border-dashed bg-transparent":
233
- indicator === "dashed",
234
- "my-0.5": nestLabel && indicator === "dashed",
235
- },
236
- )}
237
- style={
238
- {
239
- "--color-bg": indicatorColor,
240
- "--color-border": indicatorColor,
241
- } as React.CSSProperties
242
- }
243
- />
244
- )
245
- )}
246
- <div
247
- className={cn(
248
- "flex flex-1 justify-between leading-none",
249
- nestLabel ? "items-end" : "items-center",
250
- )}
251
- >
252
- <div className="grid gap-1.5">
253
- {nestLabel ? tooltipLabel : null}
254
- <span className="text-muted-foreground">
255
- {itemConfig?.label || item.name}
256
- </span>
257
- </div>
258
- {item.value && (
259
- <span className="text-foreground font-mono font-medium tabular-nums">
260
- {item.value.toLocaleString()}
261
- </span>
262
- )}
263
- </div>
264
- </>
265
- )}
266
- </div>
267
- );
268
- })}
269
- </div>
270
- </div>
271
- );
272
- }
273
-
274
- const ChartLegend = RechartsPrimitive.Legend;
275
-
276
- type ChartLegendContentProps = {
277
- className?: string;
278
- hideIcon?: boolean;
279
- verticalAlign?: LegendProps["verticalAlign"];
280
- payload?: LegendPayload[];
281
- nameKey?: string;
282
- };
283
-
284
- function ChartLegendContent({
285
- className,
286
- hideIcon = false,
287
- payload,
288
- verticalAlign = "bottom",
289
- nameKey,
290
- }: ChartLegendContentProps) {
291
- const { config } = useChart();
292
-
293
- if (!payload?.length) {
294
- return null;
295
- }
296
-
297
- return (
298
- <div
299
- className={cn(
300
- "flex items-center justify-center gap-4",
301
- verticalAlign === "top" ? "pb-3" : "pt-3",
302
- className,
303
- )}
304
- >
305
- {payload.map((item) => {
306
- const key = `${nameKey || item.dataKey || "value"}`;
307
- const itemConfig = getPayloadConfigFromPayload(config, item, key);
308
-
309
- return (
310
- <div
311
- key={item.value}
312
- className={cn(
313
- "[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3",
314
- )}
315
- >
316
- {itemConfig?.icon && !hideIcon ? (
317
- <itemConfig.icon />
318
- ) : (
319
- <div
320
- className="h-2 w-2 shrink-0 rounded-[2px]"
321
- style={{
322
- backgroundColor: item.color,
323
- }}
324
- />
325
- )}
326
- {itemConfig?.label}
327
- </div>
328
- );
329
- })}
330
- </div>
331
- );
332
- }
333
-
334
- // Helper to extract item config from a payload.
335
- function getPayloadConfigFromPayload(
336
- config: ChartConfig,
337
- payload: unknown,
338
- key: string,
339
- ) {
340
- if (typeof payload !== "object" || payload === null) {
341
- return undefined;
342
- }
343
-
344
- const payloadPayload =
345
- "payload" in payload &&
346
- typeof payload.payload === "object" &&
347
- payload.payload !== null
348
- ? payload.payload
349
- : undefined;
350
-
351
- let configLabelKey: string = key;
352
-
353
- if (
354
- key in payload &&
355
- typeof payload[key as keyof typeof payload] === "string"
356
- ) {
357
- configLabelKey = payload[key as keyof typeof payload] as string;
358
- } else if (
359
- payloadPayload &&
360
- key in payloadPayload &&
361
- typeof payloadPayload[key as keyof typeof payloadPayload] === "string"
362
- ) {
363
- configLabelKey = payloadPayload[
364
- key as keyof typeof payloadPayload
365
- ] as string;
366
- }
367
-
368
- return configLabelKey in config
369
- ? config[configLabelKey]
370
- : config[key as keyof typeof config];
371
- }
372
-
373
- export {
374
- ChartContainer,
375
- ChartTooltip,
376
- ChartTooltipContent,
377
- ChartLegend,
378
- ChartLegendContent,
379
- ChartStyle,
380
- };
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as RechartsPrimitive from "recharts";
5
+
6
+ import { cn } from "@/lib/utils";
7
+
8
+ // Format: { THEME_NAME: CSS_SELECTOR }
9
+ const THEMES = { light: "", dark: ".dark" } as const;
10
+
11
+ export type ChartConfig = {
12
+ [k in string]: {
13
+ label?: React.ReactNode;
14
+ icon?: React.ComponentType;
15
+ } & (
16
+ | { color?: string; theme?: never }
17
+ | { color?: never; theme: Record<keyof typeof THEMES, string> }
18
+ );
19
+ };
20
+
21
+ type ChartContextProps = {
22
+ config: ChartConfig;
23
+ };
24
+
25
+ const ChartContext = React.createContext<ChartContextProps | null>(null);
26
+
27
+ function useChart() {
28
+ const context = React.useContext(ChartContext);
29
+
30
+ if (!context) {
31
+ throw new Error("useChart must be used within a <ChartContainer />");
32
+ }
33
+
34
+ return context;
35
+ }
36
+
37
+ function ChartContainer({
38
+ id,
39
+ className,
40
+ children,
41
+ config,
42
+ ...props
43
+ }: React.ComponentProps<"div"> & {
44
+ config: ChartConfig;
45
+ children: React.ComponentProps<
46
+ typeof RechartsPrimitive.ResponsiveContainer
47
+ >["children"];
48
+ }) {
49
+ const uniqueId = React.useId();
50
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
51
+
52
+ return (
53
+ <ChartContext.Provider value={{ config }}>
54
+ <div
55
+ data-slot="chart"
56
+ data-chart={chartId}
57
+ className={cn(
58
+ "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
59
+ className,
60
+ )}
61
+ {...props}
62
+ >
63
+ <ChartStyle id={chartId} config={config} />
64
+ <RechartsPrimitive.ResponsiveContainer>
65
+ {children}
66
+ </RechartsPrimitive.ResponsiveContainer>
67
+ </div>
68
+ </ChartContext.Provider>
69
+ );
70
+ }
71
+
72
+ const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
73
+ const colorConfig = Object.entries(config).filter(
74
+ ([, config]) => config.theme || config.color,
75
+ );
76
+
77
+ if (!colorConfig.length) {
78
+ return null;
79
+ }
80
+
81
+ return (
82
+ <style
83
+ dangerouslySetInnerHTML={{
84
+ __html: Object.entries(THEMES)
85
+ .map(
86
+ ([theme, prefix]) => `
87
+ ${prefix} [data-chart=${id}] {
88
+ ${colorConfig
89
+ .map(([key, itemConfig]) => {
90
+ const color =
91
+ itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||
92
+ itemConfig.color;
93
+ return color ? ` --color-${key}: ${color};` : null;
94
+ })
95
+ .join("\n")}
96
+ }
97
+ `,
98
+ )
99
+ .join("\n"),
100
+ }}
101
+ />
102
+ );
103
+ };
104
+
105
+ const ChartTooltip = RechartsPrimitive.Tooltip;
106
+
107
+ function ChartTooltipContent({
108
+ active,
109
+ payload,
110
+ className,
111
+ indicator = "dot",
112
+ hideLabel = false,
113
+ hideIndicator = false,
114
+ label,
115
+ labelFormatter,
116
+ labelClassName,
117
+ formatter,
118
+ color,
119
+ nameKey,
120
+ labelKey,
121
+ }: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &
122
+ React.ComponentProps<"div"> & {
123
+ hideLabel?: boolean;
124
+ hideIndicator?: boolean;
125
+ indicator?: "line" | "dot" | "dashed";
126
+ nameKey?: string;
127
+ labelKey?: string;
128
+ }) {
129
+ const { config } = useChart();
130
+
131
+ const tooltipLabel = React.useMemo(() => {
132
+ if (hideLabel || !payload?.length) {
133
+ return null;
134
+ }
135
+
136
+ const [item] = payload;
137
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
138
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
139
+ const value =
140
+ !labelKey && typeof label === "string"
141
+ ? config[label as keyof typeof config]?.label || label
142
+ : itemConfig?.label;
143
+
144
+ if (labelFormatter) {
145
+ return (
146
+ <div className={cn("font-medium", labelClassName)}>
147
+ {labelFormatter(value, payload)}
148
+ </div>
149
+ );
150
+ }
151
+
152
+ if (!value) {
153
+ return null;
154
+ }
155
+
156
+ return <div className={cn("font-medium", labelClassName)}>{value}</div>;
157
+ }, [
158
+ label,
159
+ labelFormatter,
160
+ payload,
161
+ hideLabel,
162
+ labelClassName,
163
+ config,
164
+ labelKey,
165
+ ]);
166
+
167
+ if (!active || !payload?.length) {
168
+ return null;
169
+ }
170
+
171
+ const nestLabel = payload.length === 1 && indicator !== "dot";
172
+
173
+ return (
174
+ <div
175
+ className={cn(
176
+ "border-neutral-200/50 bg-white grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-neutral-200 px-2.5 py-1.5 text-xs shadow-xl dark:border-neutral-800/50 dark:bg-neutral-950 dark:border-neutral-800",
177
+ className,
178
+ )}
179
+ >
180
+ {!nestLabel ? tooltipLabel : null}
181
+ <div className="grid gap-1.5">
182
+ {payload.map((item, index) => {
183
+ const key = `${nameKey || item.name || item.dataKey || "value"}`;
184
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
185
+ const indicatorColor = color || item.payload.fill || item.color;
186
+
187
+ return (
188
+ <div
189
+ key={item.dataKey}
190
+ className={cn(
191
+ "[&>svg]:text-neutral-500 flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 dark:[&>svg]:text-neutral-400",
192
+ indicator === "dot" && "items-center",
193
+ )}
194
+ >
195
+ {formatter && item?.value !== undefined && item.name ? (
196
+ formatter(item.value, item.name, item, index, item.payload)
197
+ ) : (
198
+ <>
199
+ {itemConfig?.icon ? (
200
+ <itemConfig.icon />
201
+ ) : (
202
+ !hideIndicator && (
203
+ <div
204
+ className={cn(
205
+ "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
206
+ {
207
+ "h-2.5 w-2.5": indicator === "dot",
208
+ "w-1": indicator === "line",
209
+ "w-0 border-[1.5px] border-dashed bg-transparent":
210
+ indicator === "dashed",
211
+ "my-0.5": nestLabel && indicator === "dashed",
212
+ },
213
+ )}
214
+ style={
215
+ {
216
+ "--color-bg": indicatorColor,
217
+ "--color-border": indicatorColor,
218
+ } as React.CSSProperties
219
+ }
220
+ />
221
+ )
222
+ )}
223
+ <div
224
+ className={cn(
225
+ "flex flex-1 justify-between leading-none",
226
+ nestLabel ? "items-end" : "items-center",
227
+ )}
228
+ >
229
+ <div className="grid gap-1.5">
230
+ {nestLabel ? tooltipLabel : null}
231
+ <span className="text-neutral-500 dark:text-neutral-400">
232
+ {itemConfig?.label || item.name}
233
+ </span>
234
+ </div>
235
+ {item.value && (
236
+ <span className="text-neutral-950 font-mono font-medium tabular-nums dark:text-neutral-50">
237
+ {item.value.toLocaleString()}
238
+ </span>
239
+ )}
240
+ </div>
241
+ </>
242
+ )}
243
+ </div>
244
+ );
245
+ })}
246
+ </div>
247
+ </div>
248
+ );
249
+ }
250
+
251
+ const ChartLegend = RechartsPrimitive.Legend;
252
+
253
+ function ChartLegendContent({
254
+ className,
255
+ hideIcon = false,
256
+ payload,
257
+ verticalAlign = "bottom",
258
+ nameKey,
259
+ }: React.ComponentProps<"div"> &
260
+ Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
261
+ hideIcon?: boolean;
262
+ nameKey?: string;
263
+ }) {
264
+ const { config } = useChart();
265
+
266
+ if (!payload?.length) {
267
+ return null;
268
+ }
269
+
270
+ return (
271
+ <div
272
+ className={cn(
273
+ "flex items-center justify-center gap-4",
274
+ verticalAlign === "top" ? "pb-3" : "pt-3",
275
+ className,
276
+ )}
277
+ >
278
+ {payload.map((item) => {
279
+ const key = `${nameKey || item.dataKey || "value"}`;
280
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
281
+
282
+ return (
283
+ <div
284
+ key={item.value}
285
+ className={cn(
286
+ "[&>svg]:text-neutral-500 flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 dark:[&>svg]:text-neutral-400",
287
+ )}
288
+ >
289
+ {itemConfig?.icon && !hideIcon ? (
290
+ <itemConfig.icon />
291
+ ) : (
292
+ <div
293
+ className="h-2 w-2 shrink-0 rounded-[2px]"
294
+ style={{
295
+ backgroundColor: item.color,
296
+ }}
297
+ />
298
+ )}
299
+ {itemConfig?.label}
300
+ </div>
301
+ );
302
+ })}
303
+ </div>
304
+ );
305
+ }
306
+
307
+ // Helper to extract item config from a payload.
308
+ function getPayloadConfigFromPayload(
309
+ config: ChartConfig,
310
+ payload: unknown,
311
+ key: string,
312
+ ) {
313
+ if (typeof payload !== "object" || payload === null) {
314
+ return undefined;
315
+ }
316
+
317
+ const payloadPayload =
318
+ "payload" in payload &&
319
+ typeof payload.payload === "object" &&
320
+ payload.payload !== null
321
+ ? payload.payload
322
+ : undefined;
323
+
324
+ let configLabelKey: string = key;
325
+
326
+ if (
327
+ key in payload &&
328
+ typeof payload[key as keyof typeof payload] === "string"
329
+ ) {
330
+ configLabelKey = payload[key as keyof typeof payload] as string;
331
+ } else if (
332
+ payloadPayload &&
333
+ key in payloadPayload &&
334
+ typeof payloadPayload[key as keyof typeof payloadPayload] === "string"
335
+ ) {
336
+ configLabelKey = payloadPayload[
337
+ key as keyof typeof payloadPayload
338
+ ] as string;
339
+ }
340
+
341
+ return configLabelKey in config
342
+ ? config[configLabelKey]
343
+ : config[key as keyof typeof config];
344
+ }
345
+
346
+ export {
347
+ ChartContainer,
348
+ ChartTooltip,
349
+ ChartTooltipContent,
350
+ ChartLegend,
351
+ ChartLegendContent,
352
+ ChartStyle,
353
+ };