@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
@@ -0,0 +1,1002 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __getProtoOf = Object.getPrototypeOf;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __objRest = (source, exclude) => {
26
+ var target = {};
27
+ for (var prop in source)
28
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
29
+ target[prop] = source[prop];
30
+ if (source != null && __getOwnPropSymbols)
31
+ for (var prop of __getOwnPropSymbols(source)) {
32
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
33
+ target[prop] = source[prop];
34
+ }
35
+ return target;
36
+ };
37
+ var __export = (target, all) => {
38
+ for (var name in all)
39
+ __defProp(target, name, { get: all[name], enumerable: true });
40
+ };
41
+ var __copyProps = (to, from, except, desc) => {
42
+ if (from && typeof from === "object" || typeof from === "function") {
43
+ for (let key of __getOwnPropNames(from))
44
+ if (!__hasOwnProp.call(to, key) && key !== except)
45
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
46
+ }
47
+ return to;
48
+ };
49
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
50
+ // If the importer is in node compatibility mode or this is not an ESM
51
+ // file that has been converted to a CommonJS file using a Babel-
52
+ // compatible transform (i.e. "__esModule" has not been set), then set
53
+ // "default" to the CommonJS "module.exports" for node compatibility.
54
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
55
+ mod
56
+ ));
57
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
58
+
59
+ // src/components/ui/financial-cards.tsx
60
+ var financial_cards_exports = {};
61
+ __export(financial_cards_exports, {
62
+ AboutCard: () => AboutCard,
63
+ AlertCard: () => AlertCard,
64
+ DebtCard: () => DebtCard,
65
+ ExpensesCard: () => ExpensesCard,
66
+ IncomeCard: () => IncomeCard,
67
+ OtherLiabilityCard: () => OtherLiabilityCard,
68
+ PropertyCard: () => PropertyCard
69
+ });
70
+ module.exports = __toCommonJS(financial_cards_exports);
71
+ var React2 = __toESM(require("react"));
72
+ var import_lucide_react2 = require("lucide-react");
73
+
74
+ // src/lib/utils.ts
75
+ var import_clsx = require("clsx");
76
+ var import_tailwind_merge = require("tailwind-merge");
77
+ var twMerge = (0, import_tailwind_merge.extendTailwindMerge)({
78
+ extend: {
79
+ classGroups: {
80
+ "font-size": [
81
+ {
82
+ text: [
83
+ "display-large",
84
+ "display-medium",
85
+ "display-small",
86
+ "h1",
87
+ "h2",
88
+ "h3",
89
+ "h4",
90
+ "h5",
91
+ "h6",
92
+ "body-large",
93
+ "body-medium",
94
+ "body-small",
95
+ "label-large",
96
+ "label-medium",
97
+ "label-small",
98
+ "button",
99
+ "button-xs",
100
+ "caption",
101
+ "overline",
102
+ "code"
103
+ ]
104
+ }
105
+ ]
106
+ }
107
+ }
108
+ });
109
+ function cn(...inputs) {
110
+ return twMerge((0, import_clsx.clsx)(inputs));
111
+ }
112
+
113
+ // src/components/ui/badge.tsx
114
+ var import_class_variance_authority = require("class-variance-authority");
115
+
116
+ // src/lib/slot.tsx
117
+ var React = __toESM(require("react"));
118
+ function mergeRefs(...refs) {
119
+ return (value) => {
120
+ for (const ref of refs) {
121
+ if (typeof ref === "function") ref(value);
122
+ else if (ref !== null)
123
+ ref.current = value;
124
+ }
125
+ };
126
+ }
127
+ var Slot = React.forwardRef(
128
+ (_a, forwardedRef) => {
129
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
130
+ const child = React.Children.only(children);
131
+ if (!React.isValidElement(child)) return null;
132
+ const childProps = child.props;
133
+ const merged = __spreadValues({}, props);
134
+ for (const key of Object.keys(childProps)) {
135
+ if (key === "className") {
136
+ merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
137
+ } else if (key === "style") {
138
+ merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
139
+ } else if (key.startsWith("on") && typeof childProps[key] === "function") {
140
+ const parentHandler = props[key];
141
+ if (typeof parentHandler === "function") {
142
+ merged[key] = (...args) => {
143
+ childProps[key](...args);
144
+ parentHandler(...args);
145
+ };
146
+ } else {
147
+ merged[key] = childProps[key];
148
+ }
149
+ } else {
150
+ merged[key] = childProps[key];
151
+ }
152
+ }
153
+ const childRef = child.ref;
154
+ merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
155
+ return React.cloneElement(
156
+ child,
157
+ merged
158
+ );
159
+ }
160
+ );
161
+ Slot.displayName = "Slot";
162
+
163
+ // src/components/ui/badge.tsx
164
+ var import_jsx_runtime = require("react/jsx-runtime");
165
+ var badgeVariants = (0, import_class_variance_authority.cva)(
166
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
167
+ {
168
+ variants: {
169
+ variant: {
170
+ default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
171
+ secondary: "bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
172
+ destructive: "bg-destructive text-destructive-foreground focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",
173
+ success: "bg-success text-success-foreground [a&]:hover:bg-success/90",
174
+ warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90",
175
+ info: "bg-info text-info-foreground [a&]:hover:bg-info/90",
176
+ outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
177
+ ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
178
+ link: "text-primary underline-offset-4 [a&]:hover:underline"
179
+ }
180
+ },
181
+ defaultVariants: {
182
+ variant: "default"
183
+ }
184
+ }
185
+ );
186
+ function Badge(_a) {
187
+ var _b = _a, {
188
+ className,
189
+ variant = "default",
190
+ asChild = false
191
+ } = _b, props = __objRest(_b, [
192
+ "className",
193
+ "variant",
194
+ "asChild"
195
+ ]);
196
+ const Comp = asChild ? Slot : "span";
197
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
198
+ Comp,
199
+ __spreadValues({
200
+ className: cn(badgeVariants({ variant }), className),
201
+ "data-slot": "badge",
202
+ "data-variant": variant
203
+ }, props)
204
+ );
205
+ }
206
+
207
+ // src/components/ui/radio-group.tsx
208
+ var import_lucide_react = require("lucide-react");
209
+ var import_radio_group = require("@base-ui/react/radio-group");
210
+ var import_radio = require("@base-ui/react/radio");
211
+ var import_jsx_runtime2 = require("react/jsx-runtime");
212
+ var CIRCLE_BASE = "inline-flex items-center justify-center aspect-square size-4 shrink-0 rounded-full border border-primary bg-background";
213
+ var INDICATOR_DOT = "size-2 fill-background text-background";
214
+ function RadioGroup(_a) {
215
+ var _b = _a, {
216
+ className
217
+ } = _b, props = __objRest(_b, [
218
+ "className"
219
+ ]);
220
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
221
+ import_radio_group.RadioGroup,
222
+ __spreadValues({
223
+ className: cn("grid gap-3", className),
224
+ "data-slot": "radio-group"
225
+ }, props)
226
+ );
227
+ }
228
+ function RadioGroupItem(_a) {
229
+ var _b = _a, {
230
+ className
231
+ } = _b, props = __objRest(_b, [
232
+ "className"
233
+ ]);
234
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
235
+ import_radio.Radio.Root,
236
+ __spreadProps(__spreadValues({
237
+ className: cn(
238
+ CIRCLE_BASE,
239
+ "transition-all outline-none",
240
+ "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
241
+ "disabled:cursor-not-allowed disabled:opacity-50",
242
+ "data-checked:bg-primary",
243
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20",
244
+ "aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive",
245
+ "dark:bg-input/30 dark:aria-invalid:ring-destructive/40",
246
+ className
247
+ ),
248
+ "data-slot": "radio-group-item"
249
+ }, props), {
250
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
251
+ import_radio.Radio.Indicator,
252
+ {
253
+ "data-slot": "radio-group-indicator",
254
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.CircleIcon, { className: INDICATOR_DOT })
255
+ }
256
+ )
257
+ })
258
+ );
259
+ }
260
+
261
+ // src/components/ui/financial-primitives.tsx
262
+ var import_jsx_runtime3 = require("react/jsx-runtime");
263
+ var NO_DATA = "\u2014";
264
+ function FinancialSubsectionTitle({
265
+ children
266
+ }) {
267
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-label-medium uppercase text-foreground", children });
268
+ }
269
+ function FinancialDetailField({
270
+ label,
271
+ value,
272
+ variant = "caption"
273
+ }) {
274
+ if (variant === "footer") {
275
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex flex-col justify-between min-w-0", children: [
276
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-overline text-muted-foreground", children: label }),
277
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-label-medium text-foreground mt-1 break-words", children: value != null ? value : NO_DATA })
278
+ ] });
279
+ }
280
+ const labelClass = variant === "caption" ? "block min-h-[2rem] text-caption text-muted-foreground" : "min-h-[1.75rem] text-overline text-muted-foreground";
281
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
282
+ "div",
283
+ {
284
+ className: cn(
285
+ "min-w-0",
286
+ variant === "overline" && "flex flex-col gap-0.5"
287
+ ),
288
+ children: [
289
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: labelClass, children: label }),
290
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-label-medium text-foreground break-words", children: value != null ? value : NO_DATA })
291
+ ]
292
+ }
293
+ );
294
+ }
295
+ function FinancialLvrBar({
296
+ percent = 56,
297
+ label = "56% \u2014 Good"
298
+ }) {
299
+ const color = percent >= 80 ? "destructive" : percent >= 70 ? "warning" : "success";
300
+ const textClass = {
301
+ success: "text-success",
302
+ warning: "text-warning",
303
+ destructive: "text-destructive"
304
+ }[color];
305
+ const trackClass = {
306
+ success: "bg-success/15",
307
+ warning: "bg-warning/15",
308
+ destructive: "bg-destructive/15"
309
+ }[color];
310
+ const fillClass = {
311
+ success: "bg-success",
312
+ warning: "bg-warning",
313
+ destructive: "bg-destructive"
314
+ }[color];
315
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex flex-col gap-2", children: [
316
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center justify-between", children: [
317
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-body-small text-muted-foreground", children: "LVR" }),
318
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: cn("text-label-medium", textClass), children: label })
319
+ ] }),
320
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: cn("h-2.5 w-full overflow-hidden", trackClass), children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
321
+ "div",
322
+ {
323
+ className: cn("h-full", fillClass),
324
+ style: { width: `${Math.min(percent, 100)}%` }
325
+ }
326
+ ) })
327
+ ] });
328
+ }
329
+ function FinancialSubtotalFrame({
330
+ children
331
+ }) {
332
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mt-auto border-t border-primary/20 bg-primary/10 px-4 py-3", children });
333
+ }
334
+ function FinancialSubtotalBlock({
335
+ monthlyAverage,
336
+ totalLast12Months,
337
+ label
338
+ }) {
339
+ const isSingle = monthlyAverage && !totalLast12Months;
340
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
341
+ "div",
342
+ {
343
+ className: cn(
344
+ "flex flex-row items-center",
345
+ isSingle ? "justify-end" : "justify-between"
346
+ ),
347
+ children: [
348
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
349
+ "div",
350
+ {
351
+ className: cn(
352
+ "flex flex-col gap-0.5",
353
+ isSingle ? "text-right" : "text-left"
354
+ ),
355
+ children: [
356
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "min-h-[1.75rem] text-overline text-muted-foreground", children: label != null ? label : "Monthly Average" }),
357
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-label-medium text-foreground", children: monthlyAverage != null ? monthlyAverage : NO_DATA })
358
+ ]
359
+ }
360
+ ),
361
+ !isSingle && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex flex-col gap-0.5 text-right", children: [
362
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "min-h-[1.75rem] text-overline text-muted-foreground", children: "Total Last 12 Months" }),
363
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-label-medium text-foreground", children: totalLast12Months != null ? totalLast12Months : NO_DATA })
364
+ ] })
365
+ ]
366
+ }
367
+ );
368
+ }
369
+
370
+ // src/components/ui/financial-cards.tsx
371
+ var import_jsx_runtime4 = require("react/jsx-runtime");
372
+ function PropertyCard({
373
+ address,
374
+ type,
375
+ estimated,
376
+ isLinkedToBank = false,
377
+ borderless = false,
378
+ loanAmount,
379
+ equity,
380
+ lvr,
381
+ lvrPercent = 0,
382
+ lenderName,
383
+ interestRate,
384
+ yearsRemaining,
385
+ minRepayments,
386
+ averageRepayments,
387
+ redrawAmount,
388
+ offsetAccount,
389
+ totalMinRepayments,
390
+ totalExtraRepayments,
391
+ interestCharged,
392
+ principlePaidOff
393
+ }) {
394
+ const [expanded, setExpanded] = React2.useState(false);
395
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
396
+ "div",
397
+ {
398
+ className: cn(
399
+ "overflow-hidden flex flex-col",
400
+ !borderless && "border border-border"
401
+ ),
402
+ children: [
403
+ isLinkedToBank ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
404
+ "button",
405
+ {
406
+ type: "button",
407
+ "aria-expanded": expanded,
408
+ onClick: () => setExpanded((prev) => !prev),
409
+ className: "flex items-center gap-1.5 px-5 py-3 text-left cursor-pointer hover:opacity-85",
410
+ children: [
411
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-label-medium text-foreground", children: address }),
412
+ type && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Badge, { variant: "outline", children: type }),
413
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "flex-1" }),
414
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
415
+ import_lucide_react2.ChevronDown,
416
+ {
417
+ className: cn(
418
+ "h-5 w-5 shrink-0 text-muted-foreground transition-transform duration-200",
419
+ expanded && "rotate-180"
420
+ )
421
+ }
422
+ )
423
+ ]
424
+ }
425
+ ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-1.5 px-5 py-3", children: [
426
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-label-medium text-foreground", children: address }),
427
+ type && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Badge, { variant: "outline", children: type })
428
+ ] }),
429
+ !isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "px-5 pb-2 text-xs italic text-muted-foreground", children: "No mortgage account linked to this property" }),
430
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
431
+ "div",
432
+ {
433
+ className: cn(
434
+ "grid gap-5 px-5 py-[15px]",
435
+ isLinkedToBank ? "grid-cols-3" : "grid-cols-1"
436
+ ),
437
+ children: [
438
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Estimated Value", value: estimated }),
439
+ isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
440
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Loan Amount", value: loanAmount }),
441
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Equity", value: equity })
442
+ ] })
443
+ ]
444
+ }
445
+ ),
446
+ isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "px-5 pb-[15px]", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
447
+ FinancialLvrBar,
448
+ {
449
+ percent: lvrPercent,
450
+ label: lvr != null ? lvr : `${lvrPercent}%`
451
+ }
452
+ ) }),
453
+ isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
454
+ "div",
455
+ {
456
+ className: cn(
457
+ "grid transition-[grid-template-rows] duration-200 ease-in-out",
458
+ expanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
459
+ ),
460
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "overflow-hidden", children: [
461
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex flex-col gap-5 border-t border-border px-5 py-[15px]", children: [
462
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubsectionTitle, { children: "Loan" }),
463
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-4 gap-x-4 gap-y-4", children: [
464
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
465
+ FinancialDetailField,
466
+ {
467
+ label: "Name of Lender",
468
+ value: lenderName
469
+ }
470
+ ),
471
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
472
+ FinancialDetailField,
473
+ {
474
+ label: "Current Loan Amount",
475
+ value: loanAmount
476
+ }
477
+ ),
478
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
479
+ FinancialDetailField,
480
+ {
481
+ label: "Interest Rate",
482
+ value: interestRate
483
+ }
484
+ ),
485
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
486
+ FinancialDetailField,
487
+ {
488
+ label: "Years Remaining",
489
+ value: yearsRemaining
490
+ }
491
+ )
492
+ ] }),
493
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-4 gap-x-4 gap-y-4", children: [
494
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
495
+ FinancialDetailField,
496
+ {
497
+ label: "Min Repayments",
498
+ value: minRepayments
499
+ }
500
+ ),
501
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
502
+ FinancialDetailField,
503
+ {
504
+ label: "Average Repayments",
505
+ value: averageRepayments
506
+ }
507
+ ),
508
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
509
+ FinancialDetailField,
510
+ {
511
+ label: "Redraw Amount",
512
+ value: redrawAmount
513
+ }
514
+ ),
515
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
516
+ FinancialDetailField,
517
+ {
518
+ label: "Offset Account",
519
+ value: offsetAccount
520
+ }
521
+ )
522
+ ] })
523
+ ] }),
524
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-4 gap-x-4 gap-y-1", children: [
525
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
526
+ FinancialDetailField,
527
+ {
528
+ variant: "footer",
529
+ label: "Total Min Repayments",
530
+ value: totalMinRepayments
531
+ }
532
+ ),
533
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
534
+ FinancialDetailField,
535
+ {
536
+ variant: "footer",
537
+ label: "Total Extra Repayments",
538
+ value: totalExtraRepayments
539
+ }
540
+ ),
541
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
542
+ FinancialDetailField,
543
+ {
544
+ variant: "footer",
545
+ label: "Interest Charge",
546
+ value: interestCharged
547
+ }
548
+ ),
549
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
550
+ FinancialDetailField,
551
+ {
552
+ variant: "footer",
553
+ label: "Principle Paid Off",
554
+ value: principlePaidOff
555
+ }
556
+ )
557
+ ] }) })
558
+ ] })
559
+ }
560
+ )
561
+ ]
562
+ }
563
+ );
564
+ }
565
+ function DebtCard({
566
+ lenderName,
567
+ currentLoanAmount,
568
+ interestRate,
569
+ originalLoanAmount,
570
+ originalLoanTerm,
571
+ monthlyRepayments,
572
+ redrawAmount,
573
+ offsetAmount,
574
+ extraLoanRepayments,
575
+ totalRepaymentsMade,
576
+ totalInterestPaid,
577
+ yearsRemaining
578
+ }) {
579
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "border border-border overflow-hidden flex flex-col h-full", children: [
580
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-5 px-5 py-[15px] border-b border-border min-h-[7rem] items-start", children: [
581
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Name of Lender", value: lenderName }),
582
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
583
+ FinancialDetailField,
584
+ {
585
+ label: "Current Loan Amount",
586
+ value: currentLoanAmount
587
+ }
588
+ ),
589
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
590
+ FinancialDetailField,
591
+ {
592
+ label: "Current Interest Rate",
593
+ value: interestRate
594
+ }
595
+ )
596
+ ] }),
597
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "px-5 py-[15px] flex flex-col gap-5 flex-1", children: [
598
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubsectionTitle, { children: "Loan Stats" }),
599
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-5", children: [
600
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
601
+ FinancialDetailField,
602
+ {
603
+ label: "Original Loan Amount",
604
+ value: originalLoanAmount
605
+ }
606
+ ),
607
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
608
+ FinancialDetailField,
609
+ {
610
+ label: "Original Loan Term",
611
+ value: originalLoanTerm
612
+ }
613
+ ),
614
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
615
+ FinancialDetailField,
616
+ {
617
+ label: "Monthly Repayments",
618
+ value: monthlyRepayments
619
+ }
620
+ )
621
+ ] }),
622
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-5", children: [
623
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Redraw Amount", value: redrawAmount }),
624
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Offset Account", value: offsetAmount }),
625
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
626
+ FinancialDetailField,
627
+ {
628
+ label: "Extra Loan Repayments",
629
+ value: extraLoanRepayments
630
+ }
631
+ )
632
+ ] })
633
+ ] }),
634
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-x-4 gap-y-1", children: [
635
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
636
+ FinancialDetailField,
637
+ {
638
+ variant: "footer",
639
+ label: "Total Repayments Made",
640
+ value: totalRepaymentsMade
641
+ }
642
+ ),
643
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
644
+ FinancialDetailField,
645
+ {
646
+ variant: "footer",
647
+ label: "Total Interest Paid",
648
+ value: totalInterestPaid
649
+ }
650
+ ),
651
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
652
+ FinancialDetailField,
653
+ {
654
+ variant: "footer",
655
+ label: "Years Remaining",
656
+ value: yearsRemaining
657
+ }
658
+ )
659
+ ] }) })
660
+ ] });
661
+ }
662
+ function OtherLiabilityCard({
663
+ type,
664
+ lenderName,
665
+ interestRate,
666
+ currentBalance,
667
+ creditLimit,
668
+ minMonthlyPayment,
669
+ annualFee,
670
+ availableCredit,
671
+ currentLoanAmount,
672
+ originalLoanAmount,
673
+ originalLoanTerm,
674
+ monthlyRepayments,
675
+ currentLoanTermLeft,
676
+ totalRepaymentsMade,
677
+ totalInterestPaid
678
+ }) {
679
+ const isCreditCard = type === "credit_card";
680
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "border border-border overflow-hidden flex flex-col h-full", children: [
681
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-5 px-4 pt-5 pb-4 min-h-[7rem] items-start", children: [
682
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Lender", value: lenderName }),
683
+ isCreditCard ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
684
+ FinancialDetailField,
685
+ {
686
+ label: "Current Balance",
687
+ value: currentBalance
688
+ }
689
+ ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
690
+ FinancialDetailField,
691
+ {
692
+ label: "Current Loan Amount",
693
+ value: currentLoanAmount
694
+ }
695
+ ),
696
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Interest Rate", value: interestRate })
697
+ ] }),
698
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "px-4 pt-4 pb-5 flex flex-col gap-5 border-t border-border flex-1", children: [
699
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubsectionTitle, { children: isCreditCard ? "Card Stats" : "Loan Stats" }),
700
+ isCreditCard ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-5", children: [
701
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Credit Limit", value: creditLimit }),
702
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
703
+ FinancialDetailField,
704
+ {
705
+ label: "Min Monthly Payment",
706
+ value: minMonthlyPayment
707
+ }
708
+ ),
709
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Annual Fee", value: annualFee })
710
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-5", children: [
711
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
712
+ FinancialDetailField,
713
+ {
714
+ label: "Original Loan Amount",
715
+ value: originalLoanAmount
716
+ }
717
+ ),
718
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
719
+ FinancialDetailField,
720
+ {
721
+ label: "Original Loan Term",
722
+ value: originalLoanTerm
723
+ }
724
+ ),
725
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
726
+ FinancialDetailField,
727
+ {
728
+ label: "Monthly Repayments",
729
+ value: monthlyRepayments
730
+ }
731
+ )
732
+ ] })
733
+ ] }),
734
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubtotalFrame, { children: isCreditCard ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-2 gap-x-4 gap-y-1", children: [
735
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
736
+ FinancialDetailField,
737
+ {
738
+ variant: "footer",
739
+ label: "Total Interest Paid",
740
+ value: totalInterestPaid
741
+ }
742
+ ),
743
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
744
+ FinancialDetailField,
745
+ {
746
+ variant: "footer",
747
+ label: "Available Credit",
748
+ value: availableCredit
749
+ }
750
+ )
751
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-3 gap-x-4 gap-y-1", children: [
752
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
753
+ FinancialDetailField,
754
+ {
755
+ variant: "footer",
756
+ label: "Total Repayments Made",
757
+ value: totalRepaymentsMade
758
+ }
759
+ ),
760
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
761
+ FinancialDetailField,
762
+ {
763
+ variant: "footer",
764
+ label: "Total Interest Paid",
765
+ value: totalInterestPaid
766
+ }
767
+ ),
768
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
769
+ FinancialDetailField,
770
+ {
771
+ variant: "footer",
772
+ label: "Years Remaining",
773
+ value: currentLoanTermLeft
774
+ }
775
+ )
776
+ ] }) })
777
+ ] });
778
+ }
779
+ var SEVERITY_CLASSES = {
780
+ NEED_ACTION: { dot: "bg-destructive", border: "border-destructive" },
781
+ WATCH: { dot: "bg-warning", border: "border-warning" },
782
+ INSIGHT: { dot: "bg-success", border: "border-success" }
783
+ };
784
+ function AlertCard({
785
+ id,
786
+ name,
787
+ severityCode,
788
+ ignored = false,
789
+ ignoredUntil,
790
+ selectedAction = null,
791
+ onActionChange
792
+ }) {
793
+ const { dot, border } = SEVERITY_CLASSES[severityCode];
794
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: cn("flex flex-col gap-1.5 border p-2.5 px-3", border), children: [
795
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-1.5", children: [
796
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: cn("h-[9px] w-[9px] shrink-0 rounded-full", dot) }),
797
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
798
+ "span",
799
+ {
800
+ className: cn(
801
+ "text-sm font-medium leading-tight",
802
+ ignored ? "text-muted-foreground line-through" : "text-foreground"
803
+ ),
804
+ children: name
805
+ }
806
+ )
807
+ ] }),
808
+ ignored ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "ml-[15px] text-xs italic text-muted-foreground/60", children: [
809
+ "Ignored until ",
810
+ ignoredUntil
811
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
812
+ RadioGroup,
813
+ {
814
+ value: selectedAction != null ? selectedAction : "",
815
+ onValueChange: (val) => onActionChange == null ? void 0 : onActionChange(val),
816
+ className: "ml-[15px] flex flex-col gap-1",
817
+ children: [
818
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-2", children: [
819
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RadioGroupItem, { value: "DISMISS", id: `dismiss-${id}` }),
820
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
821
+ "label",
822
+ {
823
+ htmlFor: `dismiss-${id}`,
824
+ className: "cursor-pointer select-none text-sm leading-none text-muted-foreground",
825
+ children: "Mark as done (will reset in 6 months)"
826
+ }
827
+ )
828
+ ] }),
829
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-2", children: [
830
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RadioGroupItem, { value: "SNOOZE", id: `snooze-${id}` }),
831
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
832
+ "label",
833
+ {
834
+ htmlFor: `snooze-${id}`,
835
+ className: "cursor-pointer select-none text-sm leading-none text-muted-foreground",
836
+ children: "Snooze for 30 days"
837
+ }
838
+ )
839
+ ] })
840
+ ]
841
+ }
842
+ )
843
+ ] });
844
+ }
845
+ function AboutCard({
846
+ title,
847
+ firstName,
848
+ lastName,
849
+ phone,
850
+ email,
851
+ gender,
852
+ maritalStatus,
853
+ citizenStatus,
854
+ propertyInTrust,
855
+ companyOwnership
856
+ }) {
857
+ const fullName = [title, firstName, lastName].filter(Boolean).join(" ") || "\u2014";
858
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "border border-border overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "grid grid-cols-2 gap-x-8 gap-y-4 px-5 py-4", children: [
859
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Full Name", value: fullName }),
860
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Gender", value: gender || "\u2014" }),
861
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Phone", value: phone || "\u2014" }),
862
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Email", value: email || "\u2014" }),
863
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
864
+ FinancialDetailField,
865
+ {
866
+ label: "Marital Status",
867
+ value: maritalStatus || "\u2014"
868
+ }
869
+ ),
870
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
871
+ FinancialDetailField,
872
+ {
873
+ label: "Citizenship",
874
+ value: citizenStatus || "\u2014"
875
+ }
876
+ ),
877
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
878
+ FinancialDetailField,
879
+ {
880
+ label: "Property in Trust",
881
+ value: propertyInTrust || "\u2014"
882
+ }
883
+ ),
884
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
885
+ FinancialDetailField,
886
+ {
887
+ label: "Company Ownership",
888
+ value: companyOwnership || "\u2014"
889
+ }
890
+ )
891
+ ] }) });
892
+ }
893
+ function IncomeCard({ items, totalMonthly }) {
894
+ if (items.length === 0) {
895
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "border border-border px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-sm text-muted-foreground", children: "No income recorded." }) });
896
+ }
897
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "border border-border overflow-hidden flex flex-col", children: [
898
+ items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
899
+ "div",
900
+ {
901
+ className: cn(
902
+ "grid grid-cols-3 gap-x-6 px-5 py-[15px]",
903
+ i < items.length - 1 && "border-b border-border"
904
+ ),
905
+ children: [
906
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Type", value: item.incomeType || "\u2014" }),
907
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
908
+ FinancialDetailField,
909
+ {
910
+ label: "Employer",
911
+ value: item.companyName || item.jobTitle || "\u2014"
912
+ }
913
+ ),
914
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialDetailField, { label: "Amount", value: item.amountLabel })
915
+ ]
916
+ },
917
+ i
918
+ )),
919
+ totalMonthly && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
920
+ FinancialSubtotalBlock,
921
+ {
922
+ monthlyAverage: totalMonthly,
923
+ label: "Total Monthly Income"
924
+ }
925
+ ) })
926
+ ] });
927
+ }
928
+ var EXPENSE_ICON_MAP = {
929
+ groceries: import_lucide_react2.ShoppingCart,
930
+ "dining out": import_lucide_react2.UtensilsCrossed,
931
+ dining: import_lucide_react2.UtensilsCrossed,
932
+ restaurants: import_lucide_react2.UtensilsCrossed,
933
+ transport: import_lucide_react2.Car,
934
+ transportation: import_lucide_react2.Car,
935
+ vehicle: import_lucide_react2.Car,
936
+ utilities: import_lucide_react2.Zap,
937
+ electricity: import_lucide_react2.Zap,
938
+ insurance: import_lucide_react2.Shield,
939
+ "council rates": import_lucide_react2.Landmark,
940
+ council: import_lucide_react2.Landmark,
941
+ rates: import_lucide_react2.Landmark,
942
+ medical: import_lucide_react2.HeartPulse,
943
+ health: import_lucide_react2.HeartPulse,
944
+ subscriptions: import_lucide_react2.RefreshCw,
945
+ subscription: import_lucide_react2.RefreshCw,
946
+ "credit card": import_lucide_react2.CreditCard,
947
+ education: import_lucide_react2.GraduationCap,
948
+ childcare: import_lucide_react2.Baby,
949
+ entertainment: import_lucide_react2.Tv,
950
+ gym: import_lucide_react2.Dumbbell,
951
+ fitness: import_lucide_react2.Dumbbell,
952
+ clothing: import_lucide_react2.Shirt,
953
+ rent: import_lucide_react2.Building2
954
+ };
955
+ function getExpenseIcon(expenseType) {
956
+ var _a;
957
+ return (_a = EXPENSE_ICON_MAP[expenseType.toLowerCase()]) != null ? _a : import_lucide_react2.Receipt;
958
+ }
959
+ function ExpensesCard({ items, totalMonthly }) {
960
+ if (items.length === 0) {
961
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "border border-border px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-sm text-muted-foreground", children: "No expenses recorded." }) });
962
+ }
963
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "border border-border overflow-hidden flex flex-col", children: [
964
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex flex-col", children: items.map((item, i) => {
965
+ const Icon = getExpenseIcon(item.expenseType);
966
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
967
+ "div",
968
+ {
969
+ className: cn(
970
+ "flex items-center justify-between gap-4 px-5 py-2.5",
971
+ i < items.length - 1 && "border-b border-border"
972
+ ),
973
+ children: [
974
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-2.5", children: [
975
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Icon, { className: "size-3.5 shrink-0 text-muted-foreground" }),
976
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-body-small text-foreground", children: item.expenseType })
977
+ ] }),
978
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-label-medium whitespace-nowrap text-destructive", children: item.amountLabel })
979
+ ]
980
+ },
981
+ item.expenseType
982
+ );
983
+ }) }),
984
+ totalMonthly && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
985
+ FinancialSubtotalBlock,
986
+ {
987
+ monthlyAverage: totalMonthly,
988
+ label: "Total Monthly Expenses"
989
+ }
990
+ ) })
991
+ ] });
992
+ }
993
+ // Annotate the CommonJS export names for ESM import in node:
994
+ 0 && (module.exports = {
995
+ AboutCard,
996
+ AlertCard,
997
+ DebtCard,
998
+ ExpensesCard,
999
+ IncomeCard,
1000
+ OtherLiabilityCard,
1001
+ PropertyCard
1002
+ });