@wealthx/shadcn 1.1.0 → 1.2.1

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 (300) hide show
  1. package/.turbo/turbo-build.log +235 -154
  2. package/CHANGELOG.md +12 -0
  3. package/dist/{chunk-6OJF6XRN.mjs → chunk-24FUO7TD.mjs} +4 -8
  4. package/dist/{chunk-4AJ5HWHD.mjs → chunk-2I5S2AMY.mjs} +3 -3
  5. package/dist/{chunk-GPRJQ24C.mjs → chunk-34NWQURD.mjs} +2 -2
  6. package/dist/{chunk-MQ72DIBH.mjs → chunk-3GF7OVTP.mjs} +14 -5
  7. package/dist/chunk-3WMX6KWS.mjs +245 -0
  8. package/dist/{chunk-PMKODV6M.mjs → chunk-462HMNO4.mjs} +6 -10
  9. package/dist/chunk-4CX4SBRO.mjs +153 -0
  10. package/dist/chunk-4MN6UQHG.mjs +443 -0
  11. package/dist/chunk-4Y6R4WEC.mjs +250 -0
  12. package/dist/{chunk-BGP2N52Z.mjs → chunk-66MI7Q4B.mjs} +5 -5
  13. package/dist/{chunk-CGOKTPXU.mjs → chunk-6JQFUE5I.mjs} +20 -23
  14. package/dist/{chunk-Z3MK2KKZ.mjs → chunk-7DHU4VGG.mjs} +7 -3
  15. package/dist/chunk-7MMXNK3C.mjs +317 -0
  16. package/dist/{chunk-VZ2NR7L3.mjs → chunk-7PYJD5JI.mjs} +35 -27
  17. package/dist/{chunk-JU2RUWHF.mjs → chunk-7XJHLGUV.mjs} +1 -1
  18. package/dist/{chunk-BMFN37JH.mjs → chunk-7YAU5CY6.mjs} +1 -1
  19. package/dist/chunk-A56YQQHG.mjs +402 -0
  20. package/dist/{chunk-GLW2UO6O.mjs → chunk-BL3DXM2X.mjs} +84 -62
  21. package/dist/{chunk-SLWCCURD.mjs → chunk-CLIN5525.mjs} +8 -4
  22. package/dist/{chunk-3VQNJ235.mjs → chunk-CSDO6VBW.mjs} +7 -0
  23. package/dist/chunk-D4ILTPOG.mjs +293 -0
  24. package/dist/{chunk-HS7TFG7V.mjs → chunk-D6ID6M4V.mjs} +1 -1
  25. package/dist/chunk-DOH3EHX7.mjs +378 -0
  26. package/dist/{chunk-MJIEMGRD.mjs → chunk-EFRENWEJ.mjs} +9 -17
  27. package/dist/{chunk-YBXCIF5Q.mjs → chunk-ERGGHC2V.mjs} +36 -49
  28. package/dist/{chunk-OXQQNQZI.mjs → chunk-FEZKMUCF.mjs} +10 -1
  29. package/dist/{chunk-55CEW76V.mjs → chunk-FH6QVUVZ.mjs} +1 -1
  30. package/dist/chunk-FMAXJ2SI.mjs +71 -0
  31. package/dist/chunk-FZIXGLMV.mjs +173 -0
  32. package/dist/chunk-GGM2UYGG.mjs +273 -0
  33. package/dist/{chunk-DS2AMHN2.mjs → chunk-GYMYRIZP.mjs} +2 -2
  34. package/dist/{chunk-KQDD5MU3.mjs → chunk-H45TKD34.mjs} +5 -5
  35. package/dist/{chunk-BBJBJSXQ.mjs → chunk-J5UICVJS.mjs} +1 -1
  36. package/dist/{chunk-RL772EH7.mjs → chunk-JHJHG4GO.mjs} +4 -12
  37. package/dist/{chunk-RN67642N.mjs → chunk-JNQORUPP.mjs} +49 -42
  38. package/dist/{chunk-5JGQAAQV.mjs → chunk-K3JYD4IU.mjs} +86 -63
  39. package/dist/{chunk-FHNT55I5.mjs → chunk-KUDCQ4FI.mjs} +4 -4
  40. package/dist/{chunk-UEL4RD5P.mjs → chunk-LHYCMLVA.mjs} +82 -68
  41. package/dist/{chunk-NLLKTU4B.mjs → chunk-LLVQKSU3.mjs} +21 -17
  42. package/dist/{chunk-KKHTJNMM.mjs → chunk-MARPPFOJ.mjs} +8 -4
  43. package/dist/{chunk-6AFMNC42.mjs → chunk-N2PT566P.mjs} +15 -11
  44. package/dist/{chunk-YN5SYTOO.mjs → chunk-NQPOYKAQ.mjs} +9 -5
  45. package/dist/{chunk-ZZV5JVNW.mjs → chunk-NSLMILBT.mjs} +3 -7
  46. package/dist/chunk-OGOYQ7BG.mjs +150 -0
  47. package/dist/chunk-OPNQAVVH.mjs +162 -0
  48. package/dist/{chunk-3NQGYJEZ.mjs → chunk-P6AM5V7O.mjs} +10 -18
  49. package/dist/{chunk-CZ3BW5GL.mjs → chunk-P76HMUI6.mjs} +5 -11
  50. package/dist/chunk-PCPLO5HT.mjs +671 -0
  51. package/dist/chunk-PG6K5XEC.mjs +475 -0
  52. package/dist/{chunk-DDPA2XXS.mjs → chunk-PMB3A7V3.mjs} +2 -2
  53. package/dist/chunk-PR6V5XKM.mjs +209 -0
  54. package/dist/{chunk-46OFHMQA.mjs → chunk-Q76O3RIQ.mjs} +10 -6
  55. package/dist/chunk-RGU7HOEC.mjs +140 -0
  56. package/dist/{chunk-JF4PHPD5.mjs → chunk-RGVKLTLH.mjs} +4 -4
  57. package/dist/{chunk-VG6UF6UT.mjs → chunk-RP3SQYA3.mjs} +2 -2
  58. package/dist/chunk-RYCLWMZ7.mjs +162 -0
  59. package/dist/chunk-SIZMLSRU.mjs +162 -0
  60. package/dist/chunk-SPJ5KXW7.mjs +199 -0
  61. package/dist/chunk-SWGT756Z.mjs +210 -0
  62. package/dist/chunk-SYOD63OZ.mjs +225 -0
  63. package/dist/chunk-TS2ZX2VS.mjs +270 -0
  64. package/dist/chunk-UFYSFDER.mjs +42 -0
  65. package/dist/chunk-VACKZOMY.mjs +190 -0
  66. package/dist/chunk-VLQZANBF.mjs +42 -0
  67. package/dist/chunk-VPBN3WOO.mjs +164 -0
  68. package/dist/chunk-WA6O6EUR.mjs +1885 -0
  69. package/dist/{chunk-E3K6O4FZ.mjs → chunk-WAZD7NFU.mjs} +5 -2
  70. package/dist/chunk-WG6JGJXB.mjs +165 -0
  71. package/dist/{chunk-I64K754C.mjs → chunk-WNGWBVLV.mjs} +2 -2
  72. package/dist/{chunk-3U7SD3MS.mjs → chunk-WOEHFRGB.mjs} +3 -3
  73. package/dist/{chunk-DKZRJOMF.mjs → chunk-XIRTEFKH.mjs} +12 -12
  74. package/dist/chunk-Y6DWJSKZ.mjs +79 -0
  75. package/dist/{chunk-CJ46PDXE.mjs → chunk-ZRO5JO3H.mjs} +106 -66
  76. package/dist/{chunk-VYMHBV6D.mjs → chunk-ZU4NV6RG.mjs} +5 -3
  77. package/dist/components/ui/accordion.js +40 -4
  78. package/dist/components/ui/accordion.mjs +2 -2
  79. package/dist/components/ui/add-column-modal.js +789 -0
  80. package/dist/components/ui/add-column-modal.mjs +17 -0
  81. package/dist/components/ui/add-lead-modal.js +647 -0
  82. package/dist/components/ui/add-lead-modal.mjs +16 -0
  83. package/dist/components/ui/ai-assistant-drawer.js +686 -0
  84. package/dist/components/ui/ai-assistant-drawer.mjs +16 -0
  85. package/dist/components/ui/alert-dialog.js +37 -5
  86. package/dist/components/ui/alert-dialog.mjs +4 -4
  87. package/dist/components/ui/alert.js +37 -11
  88. package/dist/components/ui/alert.mjs +2 -2
  89. package/dist/components/ui/avatar.js +36 -8
  90. package/dist/components/ui/avatar.mjs +2 -2
  91. package/dist/components/ui/backoffice-alert-history-chart.js +624 -0
  92. package/dist/components/ui/backoffice-alert-history-chart.mjs +16 -0
  93. package/dist/components/ui/backoffice-contact-history-chart.js +687 -0
  94. package/dist/components/ui/backoffice-contact-history-chart.mjs +16 -0
  95. package/dist/components/ui/badge.js +37 -2
  96. package/dist/components/ui/badge.mjs +2 -2
  97. package/dist/components/ui/borrowing-capacity-line-chart.js +640 -0
  98. package/dist/components/ui/borrowing-capacity-line-chart.mjs +16 -0
  99. package/dist/components/ui/button.js +35 -3
  100. package/dist/components/ui/button.mjs +2 -2
  101. package/dist/components/ui/calendar.js +43 -19
  102. package/dist/components/ui/calendar.mjs +3 -3
  103. package/dist/components/ui/card.js +40 -4
  104. package/dist/components/ui/card.mjs +2 -2
  105. package/dist/components/ui/cash-balance-line-chart.js +628 -0
  106. package/dist/components/ui/cash-balance-line-chart.mjs +16 -0
  107. package/dist/components/ui/cashflow-bar-chart.js +124 -70
  108. package/dist/components/ui/cashflow-bar-chart.mjs +8 -8
  109. package/dist/components/ui/checkbox.js +36 -5
  110. package/dist/components/ui/checkbox.mjs +2 -3
  111. package/dist/components/ui/chip.js +37 -2
  112. package/dist/components/ui/chip.mjs +3 -3
  113. package/dist/components/ui/combobox.js +68 -49
  114. package/dist/components/ui/combobox.mjs +2 -2
  115. package/dist/components/ui/data-table.js +160 -88
  116. package/dist/components/ui/data-table.mjs +10 -11
  117. package/dist/components/ui/date-picker.js +44 -20
  118. package/dist/components/ui/date-picker.mjs +6 -7
  119. package/dist/components/ui/dialog.js +44 -12
  120. package/dist/components/ui/dialog.mjs +4 -4
  121. package/dist/components/ui/drawer.js +46 -10
  122. package/dist/components/ui/drawer.mjs +3 -3
  123. package/dist/components/ui/dropdown-menu.js +40 -16
  124. package/dist/components/ui/dropdown-menu.mjs +3 -3
  125. package/dist/components/ui/empty.js +41 -5
  126. package/dist/components/ui/empty.mjs +2 -2
  127. package/dist/components/ui/expense-bar-chart.js +166 -67
  128. package/dist/components/ui/expense-bar-chart.mjs +8 -8
  129. package/dist/components/ui/field.js +53 -21
  130. package/dist/components/ui/field.mjs +4 -4
  131. package/dist/components/ui/financial-cards.js +1002 -0
  132. package/dist/components/ui/financial-cards.mjs +24 -0
  133. package/dist/components/ui/financial-drawers.js +637 -0
  134. package/dist/components/ui/financial-drawers.mjs +17 -0
  135. package/dist/components/ui/financial-primitives.js +218 -0
  136. package/dist/components/ui/financial-primitives.mjs +22 -0
  137. package/dist/components/ui/financial-sections.js +1422 -0
  138. package/dist/components/ui/financial-sections.mjs +30 -0
  139. package/dist/components/ui/form-primitives.js +682 -0
  140. package/dist/components/ui/form-primitives.mjs +19 -0
  141. package/dist/components/ui/income-bar-chart.js +164 -66
  142. package/dist/components/ui/income-bar-chart.mjs +8 -8
  143. package/dist/components/ui/input-group.js +43 -7
  144. package/dist/components/ui/input-group.mjs +5 -5
  145. package/dist/components/ui/input-otp.js +39 -3
  146. package/dist/components/ui/input-otp.mjs +2 -2
  147. package/dist/components/ui/input.js +34 -2
  148. package/dist/components/ui/input.mjs +2 -2
  149. package/dist/components/ui/kanban-column.js +1143 -0
  150. package/dist/components/ui/kanban-column.mjs +20 -0
  151. package/dist/components/ui/label.js +35 -7
  152. package/dist/components/ui/label.mjs +2 -2
  153. package/dist/components/ui/opportunity-card.js +960 -0
  154. package/dist/components/ui/opportunity-card.mjs +20 -0
  155. package/dist/components/ui/opportunity-edit-modals.js +3360 -0
  156. package/dist/components/ui/opportunity-edit-modals.mjs +37 -0
  157. package/dist/components/ui/opportunity-summary-tab.js +4365 -0
  158. package/dist/components/ui/opportunity-summary-tab.mjs +34 -0
  159. package/dist/components/ui/pagination.js +35 -3
  160. package/dist/components/ui/pagination.mjs +3 -3
  161. package/dist/components/ui/pipeline-alerts.js +103 -0
  162. package/dist/components/ui/pipeline-alerts.mjs +8 -0
  163. package/dist/components/ui/pipeline-board.js +1408 -0
  164. package/dist/components/ui/pipeline-board.mjs +24 -0
  165. package/dist/components/ui/pipeline-chart.js +216 -0
  166. package/dist/components/ui/pipeline-chart.mjs +10 -0
  167. package/dist/components/ui/pipeline-dialogs.js +1183 -0
  168. package/dist/components/ui/pipeline-dialogs.mjs +23 -0
  169. package/dist/components/ui/pipeline-primitives.js +300 -0
  170. package/dist/components/ui/pipeline-primitives.mjs +11 -0
  171. package/dist/components/ui/popover.js +45 -4
  172. package/dist/components/ui/popover.mjs +3 -3
  173. package/dist/components/ui/progress.js +33 -1
  174. package/dist/components/ui/progress.mjs +2 -2
  175. package/dist/components/ui/property-cashflow-doughnut-chart.js +523 -0
  176. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +16 -0
  177. package/dist/components/ui/property-debt-equity-doughnut-chart.js +521 -0
  178. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +16 -0
  179. package/dist/components/ui/property-mobile-estimate-line-chart.js +683 -0
  180. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +16 -0
  181. package/dist/components/ui/radio-group.js +33 -1
  182. package/dist/components/ui/radio-group.mjs +2 -2
  183. package/dist/components/ui/select.js +66 -26
  184. package/dist/components/ui/select.mjs +3 -3
  185. package/dist/components/ui/separator.js +33 -1
  186. package/dist/components/ui/separator.mjs +2 -2
  187. package/dist/components/ui/sheet.js +37 -9
  188. package/dist/components/ui/sheet.mjs +3 -3
  189. package/dist/components/ui/skeleton.js +33 -1
  190. package/dist/components/ui/skeleton.mjs +2 -2
  191. package/dist/components/ui/slider.js +86 -102
  192. package/dist/components/ui/slider.mjs +2 -2
  193. package/dist/components/ui/spinner.js +33 -1
  194. package/dist/components/ui/spinner.mjs +2 -2
  195. package/dist/components/ui/stage-timeline.js +579 -0
  196. package/dist/components/ui/stage-timeline.mjs +15 -0
  197. package/dist/components/ui/switch.js +37 -4
  198. package/dist/components/ui/switch.mjs +2 -3
  199. package/dist/components/ui/table.js +37 -5
  200. package/dist/components/ui/table.mjs +2 -2
  201. package/dist/components/ui/tabs.js +36 -12
  202. package/dist/components/ui/tabs.mjs +2 -2
  203. package/dist/components/ui/textarea.js +34 -2
  204. package/dist/components/ui/textarea.mjs +2 -2
  205. package/dist/components/ui/toggle-group.js +35 -4
  206. package/dist/components/ui/toggle-group.mjs +3 -4
  207. package/dist/components/ui/toggle.js +35 -4
  208. package/dist/components/ui/toggle.mjs +2 -3
  209. package/dist/components/ui/tooltip.js +51 -22
  210. package/dist/components/ui/tooltip.mjs +3 -3
  211. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +528 -0
  212. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +16 -0
  213. package/dist/components/ui/transactions-income-expense-bar-chart.js +77 -39
  214. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +8 -8
  215. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +528 -0
  216. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +16 -0
  217. package/dist/index.js +11620 -3832
  218. package/dist/index.mjs +333 -161
  219. package/dist/lib/theme-provider.js +10 -1
  220. package/dist/lib/theme-provider.mjs +1 -1
  221. package/dist/lib/typography.js +8 -0
  222. package/dist/lib/typography.mjs +3 -1
  223. package/dist/lib/utils.js +33 -1
  224. package/dist/lib/utils.mjs +1 -1
  225. package/dist/styles.css +1 -1
  226. package/package.json +140 -5
  227. package/src/components/index.tsx +296 -42
  228. package/src/components/ui/accordion.tsx +6 -3
  229. package/src/components/ui/add-column-modal.tsx +339 -0
  230. package/src/components/ui/add-lead-modal.tsx +290 -0
  231. package/src/components/ui/ai-assistant-drawer.tsx +408 -0
  232. package/src/components/ui/alert-dialog.tsx +80 -54
  233. package/src/components/ui/alert.tsx +28 -28
  234. package/src/components/ui/avatar.tsx +30 -29
  235. package/src/components/ui/backoffice-alert-history-chart.tsx +261 -0
  236. package/src/components/ui/backoffice-contact-history-chart.tsx +326 -0
  237. package/src/components/ui/badge.tsx +17 -15
  238. package/src/components/ui/borrowing-capacity-line-chart.tsx +359 -0
  239. package/src/components/ui/button.tsx +30 -27
  240. package/src/components/ui/calendar.tsx +53 -67
  241. package/src/components/ui/card.tsx +27 -24
  242. package/src/components/ui/cash-balance-line-chart.tsx +304 -0
  243. package/src/components/ui/cashflow-bar-chart.tsx +106 -78
  244. package/src/components/ui/chart-shared.tsx +176 -15
  245. package/src/components/ui/checkbox.tsx +30 -26
  246. package/src/components/ui/combobox.tsx +78 -72
  247. package/src/components/ui/data-table.tsx +160 -99
  248. package/src/components/ui/date-picker.tsx +0 -2
  249. package/src/components/ui/dialog.tsx +70 -60
  250. package/src/components/ui/drawer.tsx +57 -48
  251. package/src/components/ui/dropdown-menu.tsx +90 -82
  252. package/src/components/ui/empty.tsx +31 -27
  253. package/src/components/ui/expense-bar-chart.tsx +85 -66
  254. package/src/components/ui/field.tsx +70 -62
  255. package/src/components/ui/financial-cards.tsx +830 -0
  256. package/src/components/ui/financial-drawers.tsx +339 -0
  257. package/src/components/ui/financial-primitives.tsx +331 -0
  258. package/src/components/ui/financial-sections.tsx +672 -0
  259. package/src/components/ui/form-primitives.tsx +536 -0
  260. package/src/components/ui/income-bar-chart.tsx +81 -61
  261. package/src/components/ui/input-group.tsx +41 -34
  262. package/src/components/ui/input-otp.tsx +29 -24
  263. package/src/components/ui/input.tsx +8 -8
  264. package/src/components/ui/kanban-column.tsx +333 -0
  265. package/src/components/ui/label.tsx +9 -12
  266. package/src/components/ui/opportunity-card.tsx +616 -0
  267. package/src/components/ui/opportunity-edit-modals.tsx +2528 -0
  268. package/src/components/ui/opportunity-summary-tab.tsx +579 -0
  269. package/src/components/ui/pipeline-alerts.tsx +74 -0
  270. package/src/components/ui/pipeline-board.tsx +268 -0
  271. package/src/components/ui/pipeline-chart.tsx +173 -0
  272. package/src/components/ui/pipeline-dialogs.tsx +303 -0
  273. package/src/components/ui/pipeline-primitives.tsx +108 -0
  274. package/src/components/ui/popover.tsx +41 -36
  275. package/src/components/ui/property-cashflow-doughnut-chart.tsx +189 -0
  276. package/src/components/ui/property-debt-equity-doughnut-chart.tsx +186 -0
  277. package/src/components/ui/property-mobile-estimate-line-chart.tsx +395 -0
  278. package/src/components/ui/select.tsx +65 -52
  279. package/src/components/ui/sheet.tsx +55 -52
  280. package/src/components/ui/slider.tsx +54 -77
  281. package/src/components/ui/stage-timeline.tsx +205 -0
  282. package/src/components/ui/switch.tsx +42 -29
  283. package/src/components/ui/table.tsx +28 -28
  284. package/src/components/ui/tabs.tsx +22 -28
  285. package/src/components/ui/textarea.tsx +8 -8
  286. package/src/components/ui/toggle-group.tsx +0 -2
  287. package/src/components/ui/toggle.tsx +13 -15
  288. package/src/components/ui/tooltip.tsx +30 -28
  289. package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +192 -0
  290. package/src/components/ui/transactions-income-expense-bar-chart.tsx +47 -39
  291. package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +192 -0
  292. package/src/lib/theme-provider.tsx +10 -0
  293. package/src/lib/typography.ts +9 -0
  294. package/src/lib/utils.ts +41 -3
  295. package/src/styles/globals.css +371 -124
  296. package/src/styles/styles-css.ts +1 -1
  297. package/tsup.config.ts +27 -0
  298. package/dist/chunk-3EQP72AW.mjs +0 -58
  299. package/dist/chunk-K74JRTJR.mjs +0 -105
  300. package/dist/chunk-V7CNWJT3.mjs +0 -10
@@ -77,8 +77,40 @@ function useThemeVars() {
77
77
  // src/lib/utils.ts
78
78
  var import_clsx = require("clsx");
79
79
  var import_tailwind_merge = require("tailwind-merge");
80
+ var twMerge = (0, import_tailwind_merge.extendTailwindMerge)({
81
+ extend: {
82
+ classGroups: {
83
+ "font-size": [
84
+ {
85
+ text: [
86
+ "display-large",
87
+ "display-medium",
88
+ "display-small",
89
+ "h1",
90
+ "h2",
91
+ "h3",
92
+ "h4",
93
+ "h5",
94
+ "h6",
95
+ "body-large",
96
+ "body-medium",
97
+ "body-small",
98
+ "label-large",
99
+ "label-medium",
100
+ "label-small",
101
+ "button",
102
+ "button-xs",
103
+ "caption",
104
+ "overline",
105
+ "code"
106
+ ]
107
+ }
108
+ ]
109
+ }
110
+ }
111
+ });
80
112
  function cn(...inputs) {
81
- return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
113
+ return twMerge((0, import_clsx.clsx)(inputs));
82
114
  }
83
115
 
84
116
  // src/components/ui/card.tsx
@@ -114,7 +146,7 @@ function CardTitle(_a) {
114
146
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
115
147
  "div",
116
148
  __spreadValues({
117
- className: cn("leading-none font-semibold", className),
149
+ className: cn("text-label-large", className),
118
150
  "data-slot": "card-title"
119
151
  }, props)
120
152
  );
@@ -183,7 +215,7 @@ function EmptyDescription(_a) {
183
215
  "div",
184
216
  __spreadValues({
185
217
  className: cn(
186
- "text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
218
+ "text-body-small leading-relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
187
219
  className
188
220
  ),
189
221
  "data-slot": "empty-description"
@@ -259,7 +291,7 @@ Slot.displayName = "Slot";
259
291
  // src/components/ui/button.tsx
260
292
  var import_jsx_runtime5 = require("react/jsx-runtime");
261
293
  var buttonVariants = (0, import_class_variance_authority2.cva)(
262
- "inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 font-sans text-sm font-medium whitespace-nowrap transition-all active:scale-[0.98] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
294
+ "inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 font-sans text-button whitespace-nowrap transition-all active:scale-[0.98] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
263
295
  {
264
296
  variants: {
265
297
  variant: {
@@ -274,7 +306,7 @@ var buttonVariants = (0, import_class_variance_authority2.cva)(
274
306
  },
275
307
  size: {
276
308
  default: "h-9 px-4 py-2 has-[>svg]:px-3",
277
- xs: "h-6 gap-1 px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
309
+ xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
278
310
  sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
279
311
  lg: "h-10 px-6 has-[>svg]:px-4",
280
312
  icon: "size-9",
@@ -349,6 +381,7 @@ function hexToRgba(hex, alpha) {
349
381
  return `rgba(${r},${g},${b},${alpha})`;
350
382
  }
351
383
  var DATASET_ALPHAS = [1, 0.72, 0.52, 0.36, 0.24, 0.15];
384
+ var FALLBACK_SECONDARY = "#162029";
352
385
  var FALLBACK_TICK = "#9EAAB5";
353
386
  function formatTooltipDate(iso, granularity) {
354
387
  const d = new Date(iso);
@@ -357,27 +390,71 @@ function formatTooltipDate(iso, granularity) {
357
390
  granularity === "daily" ? { month: "short", day: "numeric", year: "numeric" } : { month: "short", year: "numeric" }
358
391
  );
359
392
  }
360
- function ChartLegendItem({ label, color }) {
393
+ function ChartLegendItem({
394
+ label,
395
+ color,
396
+ lineStyle
397
+ }) {
361
398
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex items-center gap-1.5", children: [
362
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { width: 10, height: 10, backgroundColor: color, flexShrink: 0 } }),
399
+ lineStyle ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
400
+ "svg",
401
+ {
402
+ width: "20",
403
+ height: "10",
404
+ viewBox: "0 0 20 10",
405
+ "aria-hidden": "true",
406
+ style: { flexShrink: 0 },
407
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
408
+ "line",
409
+ {
410
+ x1: "0",
411
+ y1: "5",
412
+ x2: "20",
413
+ y2: "5",
414
+ stroke: color,
415
+ strokeWidth: "2",
416
+ strokeLinecap: "square",
417
+ strokeDasharray: lineStyle === "dashed" ? "5 3" : void 0
418
+ }
419
+ )
420
+ }
421
+ ) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
422
+ "div",
423
+ {
424
+ style: {
425
+ width: 10,
426
+ height: 10,
427
+ backgroundColor: color,
428
+ flexShrink: 0
429
+ }
430
+ }
431
+ ),
363
432
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-[11px] text-muted-foreground leading-none", children: label })
364
433
  ] });
365
434
  }
366
435
  function ChartPeriodButton({
367
436
  period,
368
437
  active,
369
- onClick
438
+ onClick,
439
+ unit = "M"
370
440
  }) {
371
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Button, { variant: active ? "default" : "outline", size: "xs", onClick, children: [
372
- period,
373
- "M"
374
- ] });
441
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
442
+ Button,
443
+ {
444
+ variant: active ? "default" : "outline",
445
+ size: "xs",
446
+ onClick,
447
+ children: [
448
+ period,
449
+ unit
450
+ ]
451
+ }
452
+ );
375
453
  }
376
454
 
377
455
  // src/components/ui/expense-bar-chart.tsx
378
456
  var import_jsx_runtime7 = require("react/jsx-runtime");
379
- import_chart.Chart.register(import_chart.CategoryScale, import_chart.LinearScale, import_chart.BarElement, import_chart.Tooltip, import_chart.Legend);
380
- var FALLBACK_SECONDARY = "#162029";
457
+ import_chart.Chart.register(import_chart.CategoryScale, import_chart.LinearScale, import_chart.BarController, import_chart.BarElement, import_chart.Tooltip, import_chart.Legend);
381
458
  function ExpenseBarChart({
382
459
  expenseData,
383
460
  title = "Expenses",
@@ -404,10 +481,15 @@ function ExpenseBarChart({
404
481
  }, [granularity]);
405
482
  const themeVars = useThemeVars();
406
483
  const brandSecondary = themeVars["--theme-secondary"] || FALLBACK_SECONDARY;
484
+ const fontFamily = themeVars["--font-sans"] || "Figtree, sans-serif";
407
485
  const sliced = (0, import_react3.useMemo)(() => {
408
486
  var _a, _b;
409
- if (!((_a = expenseData == null ? void 0 : expenseData.months) == null ? void 0 : _a.length) || !expenseData.datasets.length) return null;
410
- const count = Math.min(CHART_SLICE_COUNT[granularity][period], expenseData.months.length);
487
+ if (!((_a = expenseData == null ? void 0 : expenseData.months) == null ? void 0 : _a.length) || !expenseData.datasets.length)
488
+ return null;
489
+ const count = Math.min(
490
+ CHART_SLICE_COUNT[granularity][period],
491
+ expenseData.months.length
492
+ );
411
493
  const start = expenseData.months.length - count;
412
494
  return {
413
495
  months: expenseData.months.slice(start),
@@ -447,65 +529,68 @@ function ExpenseBarChart({
447
529
  }))
448
530
  };
449
531
  }, [sliced, datasetColors, brandSecondary]);
450
- const options = (0, import_react3.useMemo)(() => ({
451
- responsive: true,
452
- maintainAspectRatio: false,
453
- animation: { duration: 800, easing: "easeOutQuart" },
454
- layout: { padding: 0 },
455
- plugins: {
456
- legend: { display: false },
457
- tooltip: {
458
- mode: "index",
459
- intersect: false,
460
- padding: 12,
461
- cornerRadius: 0,
462
- titleFont: { size: 11, weight: "600" },
463
- bodyFont: { size: 12, weight: "500" },
464
- callbacks: {
465
- title: (tooltipItems) => {
466
- var _a, _b, _c, _d;
467
- const idx = (_a = tooltipItems[0]) == null ? void 0 : _a.dataIndex;
468
- if (idx != null && ((_b = sliced == null ? void 0 : sliced.dates) == null ? void 0 : _b[idx])) {
469
- return formatTooltipDate(sliced.dates[idx], granularity);
532
+ const options = (0, import_react3.useMemo)(
533
+ () => ({
534
+ responsive: true,
535
+ maintainAspectRatio: false,
536
+ animation: { duration: 800, easing: "easeOutQuart" },
537
+ layout: { padding: 0 },
538
+ plugins: {
539
+ legend: { display: false },
540
+ tooltip: {
541
+ mode: "index",
542
+ intersect: false,
543
+ padding: 12,
544
+ cornerRadius: 0,
545
+ titleFont: { size: 11, weight: 600 },
546
+ bodyFont: { size: 12, weight: 500 },
547
+ callbacks: {
548
+ title: (tooltipItems) => {
549
+ var _a, _b, _c, _d;
550
+ const idx = (_a = tooltipItems[0]) == null ? void 0 : _a.dataIndex;
551
+ if (idx != null && ((_b = sliced == null ? void 0 : sliced.dates) == null ? void 0 : _b[idx])) {
552
+ return formatTooltipDate(sliced.dates[idx], granularity);
553
+ }
554
+ return (_d = (_c = tooltipItems[0]) == null ? void 0 : _c.label) != null ? _d : "";
555
+ },
556
+ label: (ctx) => {
557
+ const val = ctx.raw;
558
+ if (val === 0) return;
559
+ return ` ${ctx.dataset.label}: $${val.toLocaleString()}`;
470
560
  }
471
- return (_d = (_c = tooltipItems[0]) == null ? void 0 : _c.label) != null ? _d : "";
472
- },
473
- label: (ctx) => {
474
- const val = ctx.raw;
475
- if (val === 0) return null;
476
- return ` ${ctx.dataset.label}: $${val.toLocaleString()}`;
477
561
  }
478
562
  }
479
- }
480
- },
481
- scales: {
482
- x: {
483
- display: showXAxis,
484
- stacked: true,
485
- grid: { display: false },
486
- border: { display: false },
487
- ticks: { font: { size: 10 }, color: FALLBACK_TICK }
488
563
  },
489
- y: {
490
- display: showYAxis,
491
- stacked: true,
492
- grid: { display: false },
493
- border: { display: false },
494
- ticks: {
495
- font: { size: 10 },
496
- color: FALLBACK_TICK,
497
- maxTicksLimit: 5,
498
- padding: 8,
499
- callback: (v) => `$${Number(v).toLocaleString()}`
564
+ scales: {
565
+ x: {
566
+ display: showXAxis,
567
+ stacked: true,
568
+ grid: { display: false },
569
+ border: { display: false },
570
+ ticks: { font: { size: 10 }, color: FALLBACK_TICK }
571
+ },
572
+ y: {
573
+ display: showYAxis,
574
+ stacked: true,
575
+ grid: { display: false },
576
+ border: { display: false },
577
+ ticks: {
578
+ font: { size: 10 },
579
+ color: FALLBACK_TICK,
580
+ maxTicksLimit: 5,
581
+ padding: 8,
582
+ callback: (v) => `$${Number(v).toLocaleString()}`
583
+ }
500
584
  }
501
585
  }
502
- }
503
- }), [showXAxis, showYAxis, sliced, granularity]);
586
+ }),
587
+ [showXAxis, showYAxis, sliced, granularity]
588
+ );
504
589
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
505
590
  Card,
506
591
  {
507
592
  className: cn("w-full py-4 sm:py-6 gap-2", className),
508
- style: { maxWidth: width },
593
+ style: { maxWidth: width, fontFamily },
509
594
  children: [
510
595
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
511
596
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardTitle, { className: "text-sm sm:text-base", children: title }),
@@ -520,7 +605,14 @@ function ExpenseBarChart({
520
605
  )) }) })
521
606
  ] }),
522
607
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardContent, { className: "px-3 sm:px-6", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Skeleton, { style: { height, width: "100%" } }) : !sliced ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Empty, { className: "flex-none p-4", style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(EmptyDescription, { children: "No data available" }) }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-2", children: [
523
- showLegend && legendPosition === "top" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pb-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ChartLegendItem, { label: ds.label, color: datasetColors[i] }, ds.label)) }),
608
+ showLegend && legendPosition === "top" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pb-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
609
+ ChartLegendItem,
610
+ {
611
+ label: ds.label,
612
+ color: datasetColors[i]
613
+ },
614
+ ds.label
615
+ )) }),
524
616
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { height, width: "100%", position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
525
617
  import_react_chartjs_2.Chart,
526
618
  {
@@ -531,7 +623,14 @@ function ExpenseBarChart({
531
623
  },
532
624
  brandSecondary
533
625
  ) }),
534
- showLegend && legendPosition === "bottom" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pt-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ChartLegendItem, { label: ds.label, color: datasetColors[i] }, ds.label)) })
626
+ showLegend && legendPosition === "bottom" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pt-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
627
+ ChartLegendItem,
628
+ {
629
+ label: ds.label,
630
+ color: datasetColors[i]
631
+ },
632
+ ds.label
633
+ )) })
535
634
  ] }) })
536
635
  ]
537
636
  }
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  ExpenseBarChart
3
- } from "../../chunk-5JGQAAQV.mjs";
4
- import "../../chunk-3EQP72AW.mjs";
5
- import "../../chunk-HS7TFG7V.mjs";
6
- import "../../chunk-YN5SYTOO.mjs";
7
- import "../../chunk-SLWCCURD.mjs";
8
- import "../../chunk-4AJ5HWHD.mjs";
3
+ } from "../../chunk-K3JYD4IU.mjs";
4
+ import "../../chunk-D6ID6M4V.mjs";
5
+ import "../../chunk-FZIXGLMV.mjs";
6
+ import "../../chunk-NQPOYKAQ.mjs";
7
+ import "../../chunk-CLIN5525.mjs";
8
+ import "../../chunk-2I5S2AMY.mjs";
9
9
  import "../../chunk-DBHJ5KC3.mjs";
10
- import "../../chunk-OXQQNQZI.mjs";
10
+ import "../../chunk-FEZKMUCF.mjs";
11
11
  import "../../chunk-QOJ2DQD6.mjs";
12
- import "../../chunk-V7CNWJT3.mjs";
12
+ import "../../chunk-VLQZANBF.mjs";
13
13
  import "../../chunk-FWCSY2DS.mjs";
14
14
  export {
15
15
  ExpenseBarChart
@@ -67,8 +67,40 @@ var import_class_variance_authority = require("class-variance-authority");
67
67
  // src/lib/utils.ts
68
68
  var import_clsx = require("clsx");
69
69
  var import_tailwind_merge = require("tailwind-merge");
70
+ var twMerge = (0, import_tailwind_merge.extendTailwindMerge)({
71
+ extend: {
72
+ classGroups: {
73
+ "font-size": [
74
+ {
75
+ text: [
76
+ "display-large",
77
+ "display-medium",
78
+ "display-small",
79
+ "h1",
80
+ "h2",
81
+ "h3",
82
+ "h4",
83
+ "h5",
84
+ "h6",
85
+ "body-large",
86
+ "body-medium",
87
+ "body-small",
88
+ "label-large",
89
+ "label-medium",
90
+ "label-small",
91
+ "button",
92
+ "button-xs",
93
+ "caption",
94
+ "overline",
95
+ "code"
96
+ ]
97
+ }
98
+ ]
99
+ }
100
+ }
101
+ });
70
102
  function cn(...inputs) {
71
- return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
103
+ return twMerge((0, import_clsx.clsx)(inputs));
72
104
  }
73
105
 
74
106
  // src/components/ui/label.tsx
@@ -77,16 +109,12 @@ var import_jsx_runtime = (
77
109
  require("react/jsx-runtime")
78
110
  );
79
111
  function Label(_a) {
80
- var _b = _a, {
81
- className
82
- } = _b, props = __objRest(_b, [
83
- "className"
84
- ]);
112
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
85
113
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
86
114
  "label",
87
115
  __spreadValues({
88
116
  className: cn(
89
- "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
117
+ "flex items-center gap-2 text-label-medium leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
90
118
  className
91
119
  ),
92
120
  "data-slot": "label"
@@ -146,9 +174,9 @@ function FieldLegend(_a) {
146
174
  "legend",
147
175
  __spreadValues({
148
176
  className: cn(
149
- "mb-3 font-medium",
150
- "data-[variant=legend]:text-base",
151
- "data-[variant=label]:text-sm",
177
+ "mb-3",
178
+ "data-[variant=legend]:text-label-large",
179
+ "data-[variant=label]:text-label-medium",
152
180
  className
153
181
  ),
154
182
  "data-slot": "field-legend",
@@ -211,7 +239,11 @@ function Field(_a) {
211
239
  );
212
240
  }
213
241
  function FieldContent(_a) {
214
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
242
+ var _b = _a, {
243
+ className
244
+ } = _b, props = __objRest(_b, [
245
+ "className"
246
+ ]);
215
247
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
216
248
  "div",
217
249
  __spreadValues({
@@ -224,11 +256,7 @@ function FieldContent(_a) {
224
256
  );
225
257
  }
226
258
  function FieldLabel(_a) {
227
- var _b = _a, {
228
- className
229
- } = _b, props = __objRest(_b, [
230
- "className"
231
- ]);
259
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
232
260
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
233
261
  Label,
234
262
  __spreadValues({
@@ -248,7 +276,7 @@ function FieldTitle(_a) {
248
276
  "div",
249
277
  __spreadValues({
250
278
  className: cn(
251
- "flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50",
279
+ "flex w-fit items-center gap-2 text-label-medium leading-snug group-data-[disabled=true]/field:opacity-50",
252
280
  className
253
281
  ),
254
282
  "data-slot": "field-label"
@@ -256,12 +284,16 @@ function FieldTitle(_a) {
256
284
  );
257
285
  }
258
286
  function FieldDescription(_a) {
259
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
287
+ var _b = _a, {
288
+ className
289
+ } = _b, props = __objRest(_b, [
290
+ "className"
291
+ ]);
260
292
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
261
293
  "p",
262
294
  __spreadValues({
263
295
  className: cn(
264
- "text-xs leading-normal font-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance",
296
+ "text-caption leading-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance",
265
297
  "last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5",
266
298
  "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
267
299
  className
@@ -282,7 +314,7 @@ function FieldSeparator(_a) {
282
314
  "div",
283
315
  __spreadProps(__spreadValues({
284
316
  className: cn(
285
- "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
317
+ "relative -my-2 h-5 text-body-small group-data-[variant=outline]/field-group:-mb-2",
286
318
  className
287
319
  ),
288
320
  "data-content": Boolean(children),
@@ -336,7 +368,7 @@ function FieldError(_a) {
336
368
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
337
369
  "div",
338
370
  __spreadProps(__spreadValues({
339
- className: cn("text-xs font-normal text-destructive", className),
371
+ className: cn("text-caption text-destructive", className),
340
372
  "data-slot": "field-error",
341
373
  role: "alert"
342
374
  }, props), {
@@ -9,10 +9,10 @@ import {
9
9
  FieldSeparator,
10
10
  FieldSet,
11
11
  FieldTitle
12
- } from "../../chunk-NLLKTU4B.mjs";
13
- import "../../chunk-55CEW76V.mjs";
14
- import "../../chunk-ZZV5JVNW.mjs";
15
- import "../../chunk-V7CNWJT3.mjs";
12
+ } from "../../chunk-LLVQKSU3.mjs";
13
+ import "../../chunk-FH6QVUVZ.mjs";
14
+ import "../../chunk-NSLMILBT.mjs";
15
+ import "../../chunk-VLQZANBF.mjs";
16
16
  import "../../chunk-FWCSY2DS.mjs";
17
17
  export {
18
18
  Field,