@wealthx/shadcn 1.4.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/.turbo/turbo-build.log +360 -180
  2. package/CHANGELOG.md +6 -0
  3. package/dist/chunk-2A53WPEC.mjs +182 -0
  4. package/dist/{chunk-SIVYAI3M.mjs → chunk-2LLFNGJZ.mjs} +15 -15
  5. package/dist/chunk-2QNOPXMQ.mjs +360 -0
  6. package/dist/{chunk-K5QV4TT6.mjs → chunk-2WCIORP7.mjs} +29 -4
  7. package/dist/{chunk-5NF6T2RS.mjs → chunk-3AREQTZU.mjs} +8 -8
  8. package/dist/{chunk-2EM2FRU6.mjs → chunk-3WGFIFP6.mjs} +5 -5
  9. package/dist/{chunk-K4KOD3KR.mjs → chunk-42NEC57Y.mjs} +44 -25
  10. package/dist/{chunk-FL6DZFJK.mjs → chunk-46Q4335I.mjs} +121 -39
  11. package/dist/chunk-4DO3WM7V.mjs +48 -0
  12. package/dist/chunk-5FHBC6DY.mjs +68 -0
  13. package/dist/chunk-5SAYZ4CI.mjs +40 -0
  14. package/dist/chunk-5WMFKQZ6.mjs +180 -0
  15. package/dist/chunk-623YVI5O.mjs +43 -0
  16. package/dist/{chunk-SFH2NJEJ.mjs → chunk-6OSULDEO.mjs} +3 -3
  17. package/dist/{chunk-UALR6JGV.mjs → chunk-6SR4K5T5.mjs} +1 -1
  18. package/dist/{chunk-D2NSIIXG.mjs → chunk-7KT5HPYM.mjs} +11 -11
  19. package/dist/chunk-A6ER36CW.mjs +456 -0
  20. package/dist/{chunk-QX7IFQSF.mjs → chunk-AHKHVBWR.mjs} +4 -4
  21. package/dist/chunk-AHSCWXYJ.mjs +113 -0
  22. package/dist/{chunk-7GWRPXHD.mjs → chunk-AL6GOL2Y.mjs} +1 -1
  23. package/dist/{chunk-OIKBW2QD.mjs → chunk-AUEUTZIC.mjs} +13 -13
  24. package/dist/{chunk-FYPSTTEJ.mjs → chunk-B7DD3ODQ.mjs} +1 -1
  25. package/dist/{chunk-TLAWKTSA.mjs → chunk-BD3DWDT4.mjs} +3 -3
  26. package/dist/{chunk-S2FKV4M5.mjs → chunk-BDESHD25.mjs} +4 -4
  27. package/dist/{chunk-OKTJFDPN.mjs → chunk-BFB3UH7V.mjs} +2 -2
  28. package/dist/{chunk-DGNHGNYH.mjs → chunk-C6SWS7OW.mjs} +1 -1
  29. package/dist/chunk-CDVG7SFT.mjs +271 -0
  30. package/dist/chunk-CUSHAIUL.mjs +109 -0
  31. package/dist/{chunk-QXKGOMUX.mjs → chunk-CW32WTZU.mjs} +4 -4
  32. package/dist/{chunk-SET2ANTY.mjs → chunk-D447W45Z.mjs} +3 -3
  33. package/dist/{chunk-RCAOCHWA.mjs → chunk-DFL5CV75.mjs} +18 -18
  34. package/dist/chunk-DYSVJ473.mjs +162 -0
  35. package/dist/chunk-E3PQDBYI.mjs +288 -0
  36. package/dist/chunk-EMYBNPIA.mjs +83 -0
  37. package/dist/chunk-EUYPMDQG.mjs +348 -0
  38. package/dist/{chunk-XYPW2XA5.mjs → chunk-EW72FINW.mjs} +11 -11
  39. package/dist/chunk-F24U4QQQ.mjs +234 -0
  40. package/dist/{chunk-VB5M6OZQ.mjs → chunk-F4O2YPXJ.mjs} +1 -1
  41. package/dist/chunk-FFXTQTB4.mjs +84 -0
  42. package/dist/{chunk-ZOWL2L5J.mjs → chunk-FYUSF5KO.mjs} +5 -1
  43. package/dist/{chunk-FTPBQVQ6.mjs → chunk-GNER6MCO.mjs} +1 -1
  44. package/dist/{chunk-2D3HQPFN.mjs → chunk-HF4FUBCY.mjs} +5 -5
  45. package/dist/{chunk-RSUIPKGX.mjs → chunk-HNDTLT5X.mjs} +1 -1
  46. package/dist/{chunk-N6Q5IPKT.mjs → chunk-HO6S3ECM.mjs} +46 -18
  47. package/dist/{chunk-L4NSRQ3T.mjs → chunk-HROG643K.mjs} +1 -1
  48. package/dist/chunk-I2EKKSEF.mjs +148 -0
  49. package/dist/{chunk-QTRSCVQ3.mjs → chunk-I3UDLWQ7.mjs} +1 -1
  50. package/dist/{chunk-AE7MASLF.mjs → chunk-IQGKOT7A.mjs} +9 -6
  51. package/dist/chunk-IXR4BQSQ.mjs +290 -0
  52. package/dist/{chunk-4MM7LHM5.mjs → chunk-J5NW5NCT.mjs} +1 -1
  53. package/dist/{chunk-OLKMCXAR.mjs → chunk-JTG5R5YV.mjs} +24 -24
  54. package/dist/chunk-JUBUN65Q.mjs +106 -0
  55. package/dist/chunk-K7TWMLLW.mjs +520 -0
  56. package/dist/{chunk-BOW7U26Y.mjs → chunk-K7WSRWOU.mjs} +4 -4
  57. package/dist/{chunk-NTYQWVLI.mjs → chunk-KAD26MCC.mjs} +1 -1
  58. package/dist/{chunk-KCWNDYPZ.mjs → chunk-KB7MZMED.mjs} +4 -4
  59. package/dist/chunk-KCKYGQVQ.mjs +61 -0
  60. package/dist/{chunk-VY5NEUP7.mjs → chunk-KLJLDNCA.mjs} +1 -1
  61. package/dist/chunk-LLAGF6BA.mjs +49 -0
  62. package/dist/{chunk-G27TSQLQ.mjs → chunk-M4LTX3MH.mjs} +1 -1
  63. package/dist/{chunk-YIZHS72Z.mjs → chunk-MHHA7QGO.mjs} +94 -54
  64. package/dist/{chunk-P2N2PEFY.mjs → chunk-NCUH54IZ.mjs} +4 -4
  65. package/dist/{chunk-PNRUH7JY.mjs → chunk-OECGKCVF.mjs} +5 -5
  66. package/dist/{chunk-YE67AALL.mjs → chunk-OL65UQHQ.mjs} +10 -10
  67. package/dist/{chunk-LQULK2E3.mjs → chunk-OYBIUEGE.mjs} +1 -1
  68. package/dist/{chunk-LR6LHDP3.mjs → chunk-PGR53HMH.mjs} +7 -7
  69. package/dist/chunk-PUJ42INK.mjs +141 -0
  70. package/dist/{chunk-M4VYX2PV.mjs → chunk-PV3Y7QGK.mjs} +2 -2
  71. package/dist/{chunk-UJZ4UHWI.mjs → chunk-PV7PNA6K.mjs} +4 -4
  72. package/dist/{chunk-6HIOM2HL.mjs → chunk-Q35PNFJ7.mjs} +1 -1
  73. package/dist/{chunk-JZY6TNIS.mjs → chunk-Q5SGEIJV.mjs} +27 -27
  74. package/dist/{chunk-ZFCDYW6N.mjs → chunk-QAX6HCUH.mjs} +1 -1
  75. package/dist/chunk-QHJDGB54.mjs +135 -0
  76. package/dist/chunk-QQSOZQOC.mjs +27 -0
  77. package/dist/chunk-RUX3OLVZ.mjs +59 -0
  78. package/dist/{chunk-QOJ2DQD6.mjs → chunk-S4CTM3UE.mjs} +5 -0
  79. package/dist/{chunk-ZEDMKQK2.mjs → chunk-TAX3KL66.mjs} +1 -1
  80. package/dist/chunk-TC43SMIN.mjs +133 -0
  81. package/dist/chunk-TGVXRD53.mjs +174 -0
  82. package/dist/{chunk-K5VHK7CM.mjs → chunk-TLYSVRSK.mjs} +12 -12
  83. package/dist/{chunk-YCWLFG27.mjs → chunk-TOIVHWNC.mjs} +1 -1
  84. package/dist/chunk-TXUBGKB7.mjs +160 -0
  85. package/dist/chunk-UEREFDAE.mjs +75 -0
  86. package/dist/chunk-UTCQN6XU.mjs +123 -0
  87. package/dist/{chunk-37AE3OM5.mjs → chunk-V4CUTCHS.mjs} +4 -4
  88. package/dist/{chunk-THVO2N47.mjs → chunk-VFH632TB.mjs} +9 -9
  89. package/dist/{chunk-3ERBUVHC.mjs → chunk-VJ3GC7W3.mjs} +95 -49
  90. package/dist/{chunk-V6XGXYCJ.mjs → chunk-VLELWBEW.mjs} +4 -4
  91. package/dist/{chunk-FEZKMUCF.mjs → chunk-WDTXHLYM.mjs} +1 -1
  92. package/dist/chunk-WUA546RX.mjs +129 -0
  93. package/dist/chunk-XHGISOX5.mjs +257 -0
  94. package/dist/chunk-XIY5DJXI.mjs +168 -0
  95. package/dist/{chunk-TOWTPLRC.mjs → chunk-XN37434W.mjs} +8 -8
  96. package/dist/{chunk-KLTACJ2G.mjs → chunk-XTWAJWCQ.mjs} +1 -1
  97. package/dist/chunk-Y24TXIFJ.mjs +518 -0
  98. package/dist/{chunk-DMXYRCHM.mjs → chunk-Y6UM3VTN.mjs} +4 -4
  99. package/dist/components/ui/about-you-form.js +1120 -0
  100. package/dist/components/ui/about-you-form.mjs +323 -0
  101. package/dist/components/ui/account-list-carousel.js +304 -0
  102. package/dist/components/ui/account-list-carousel.mjs +11 -0
  103. package/dist/components/ui/add-column-modal.js +1 -1
  104. package/dist/components/ui/add-column-modal.mjs +6 -6
  105. package/dist/components/ui/add-lead-modal.js +2 -2
  106. package/dist/components/ui/add-lead-modal.mjs +6 -6
  107. package/dist/components/ui/advisor-card.mjs +2 -2
  108. package/dist/components/ui/agent-evaluation-toast.js +299 -0
  109. package/dist/components/ui/agent-evaluation-toast.mjs +12 -0
  110. package/dist/components/ui/ai-assistant-drawer.mjs +5 -5
  111. package/dist/components/ui/ai-builder.js +3 -3
  112. package/dist/components/ui/ai-builder.mjs +5 -5
  113. package/dist/components/ui/ai-conversations.js +2 -2
  114. package/dist/components/ui/ai-conversations.mjs +11 -11
  115. package/dist/components/ui/alert-dialog.mjs +3 -3
  116. package/dist/components/ui/applicant-document-checklist.js +346 -0
  117. package/dist/components/ui/applicant-document-checklist.mjs +10 -0
  118. package/dist/components/ui/applicant-expenses-section.js +455 -0
  119. package/dist/components/ui/applicant-expenses-section.mjs +220 -0
  120. package/dist/components/ui/applicant-navigation-bar.js +309 -0
  121. package/dist/components/ui/applicant-navigation-bar.mjs +87 -0
  122. package/dist/components/ui/applicant-switcher.js +268 -0
  123. package/dist/components/ui/applicant-switcher.mjs +46 -0
  124. package/dist/components/ui/application-mobile-layout.js +88 -0
  125. package/dist/components/ui/application-mobile-layout.mjs +8 -0
  126. package/dist/components/ui/appointment-action-dialogs.js +1 -1
  127. package/dist/components/ui/appointment-action-dialogs.mjs +10 -10
  128. package/dist/components/ui/appointment-availability-settings.js +78 -31
  129. package/dist/components/ui/appointment-availability-settings.mjs +12 -10
  130. package/dist/components/ui/appointment-book-dialog.js +137 -58
  131. package/dist/components/ui/appointment-book-dialog.mjs +14 -14
  132. package/dist/components/ui/appointment-calendar-view.js +1 -1
  133. package/dist/components/ui/appointment-calendar-view.mjs +4 -4
  134. package/dist/components/ui/appointment-detail-sheet.js +38 -11
  135. package/dist/components/ui/appointment-detail-sheet.mjs +13 -13
  136. package/dist/components/ui/appointment-gmail-connect.mjs +2 -2
  137. package/dist/components/ui/appointment-time-slot-picker.mjs +2 -2
  138. package/dist/components/ui/appointment-upcoming-card.js +1 -1
  139. package/dist/components/ui/appointment-upcoming-card.mjs +10 -10
  140. package/dist/components/ui/asset-accordion.js +506 -0
  141. package/dist/components/ui/asset-accordion.mjs +202 -0
  142. package/dist/components/ui/assets-liabilities-side-card.js +328 -0
  143. package/dist/components/ui/assets-liabilities-side-card.mjs +127 -0
  144. package/dist/components/ui/auth-page-layout.js +3 -3
  145. package/dist/components/ui/auth-page-layout.mjs +1 -1
  146. package/dist/components/ui/backoffice-alert-history-chart.mjs +4 -4
  147. package/dist/components/ui/backoffice-alert-matching-chart.js +786 -0
  148. package/dist/components/ui/backoffice-alert-matching-chart.mjs +19 -0
  149. package/dist/components/ui/backoffice-alerts-chart.mjs +4 -4
  150. package/dist/components/ui/backoffice-connections-chart.mjs +4 -4
  151. package/dist/components/ui/backoffice-contact-history-chart.mjs +4 -4
  152. package/dist/components/ui/backoffice-contact-matching-chart.js +803 -0
  153. package/dist/components/ui/backoffice-contact-matching-chart.mjs +19 -0
  154. package/dist/components/ui/backoffice-signup-steps.js +1673 -0
  155. package/dist/components/ui/backoffice-signup-steps.mjs +36 -0
  156. package/dist/components/ui/bank-statement-document-table.js +467 -0
  157. package/dist/components/ui/bank-statement-document-table.mjs +12 -0
  158. package/dist/components/ui/bank-statement-generate-dialog.js +1517 -0
  159. package/dist/components/ui/bank-statement-generate-dialog.mjs +27 -0
  160. package/dist/components/ui/bank-statement-pdf-viewer.js +525 -0
  161. package/dist/components/ui/bank-statement-pdf-viewer.mjs +14 -0
  162. package/dist/components/ui/banking-accounts-connect.js +336 -0
  163. package/dist/components/ui/banking-accounts-connect.mjs +114 -0
  164. package/dist/components/ui/borrowing-capacity-atoms.js +382 -0
  165. package/dist/components/ui/borrowing-capacity-atoms.mjs +17 -0
  166. package/dist/components/ui/borrowing-capacity-card.js +835 -0
  167. package/dist/components/ui/borrowing-capacity-card.mjs +89 -0
  168. package/dist/components/ui/borrowing-capacity-line-chart.mjs +4 -4
  169. package/dist/components/ui/broker-info-panel.js +281 -0
  170. package/dist/components/ui/broker-info-panel.mjs +59 -0
  171. package/dist/components/ui/calculator-input-item.js +101 -0
  172. package/dist/components/ui/calculator-input-item.mjs +8 -0
  173. package/dist/components/ui/calculator-section.js +743 -0
  174. package/dist/components/ui/calculator-section.mjs +220 -0
  175. package/dist/components/ui/calendar.mjs +2 -2
  176. package/dist/components/ui/cash-balance-line-chart.mjs +5 -5
  177. package/dist/components/ui/cashflow-bar-chart.mjs +4 -4
  178. package/dist/components/ui/category-edit-dialog.js +737 -0
  179. package/dist/components/ui/category-edit-dialog.mjs +16 -0
  180. package/dist/components/ui/chat-widget.mjs +3 -3
  181. package/dist/components/ui/color-picker.mjs +4 -4
  182. package/dist/components/ui/connect-bank-step.js +511 -0
  183. package/dist/components/ui/connect-bank-step.mjs +287 -0
  184. package/dist/components/ui/contact-alert-dialog.js +1405 -0
  185. package/dist/components/ui/contact-alert-dialog.mjs +27 -0
  186. package/dist/components/ui/create-contact-modal.js +1028 -0
  187. package/dist/components/ui/create-contact-modal.mjs +21 -0
  188. package/dist/components/ui/csv-import-modal.js +583 -0
  189. package/dist/components/ui/csv-import-modal.mjs +14 -0
  190. package/dist/components/ui/currency-input.js +439 -0
  191. package/dist/components/ui/currency-input.mjs +13 -0
  192. package/dist/components/ui/dashboard-expense-categories.js +355 -0
  193. package/dist/components/ui/dashboard-expense-categories.mjs +186 -0
  194. package/dist/components/ui/dashboard-transactions-table.js +1083 -0
  195. package/dist/components/ui/dashboard-transactions-table.mjs +177 -0
  196. package/dist/components/ui/data-table.mjs +6 -6
  197. package/dist/components/ui/date-picker.mjs +6 -6
  198. package/dist/components/ui/debt-accordion.js +523 -0
  199. package/dist/components/ui/debt-accordion.mjs +219 -0
  200. package/dist/components/ui/delete-contact-component.js +479 -0
  201. package/dist/components/ui/delete-contact-component.mjs +14 -0
  202. package/dist/components/ui/dialog.js +1 -1
  203. package/dist/components/ui/dialog.mjs +3 -3
  204. package/dist/components/ui/document-checklist-template.mjs +4 -4
  205. package/dist/components/ui/drawer.mjs +3 -3
  206. package/dist/components/ui/dropdown-menu.mjs +3 -3
  207. package/dist/components/ui/dynamic-tabs.js +274 -0
  208. package/dist/components/ui/dynamic-tabs.mjs +116 -0
  209. package/dist/components/ui/editable-money-item.js +306 -0
  210. package/dist/components/ui/editable-money-item.mjs +12 -0
  211. package/dist/components/ui/expense-bar-chart.mjs +4 -4
  212. package/dist/components/ui/expense-detail-item.js +506 -0
  213. package/dist/components/ui/expense-detail-item.mjs +15 -0
  214. package/dist/components/ui/expense-work-details.js +1259 -0
  215. package/dist/components/ui/expense-work-details.mjs +175 -0
  216. package/dist/components/ui/field.mjs +2 -2
  217. package/dist/components/ui/file-preview-dialog.js +704 -0
  218. package/dist/components/ui/file-preview-dialog.mjs +17 -0
  219. package/dist/components/ui/financial-cards.mjs +2 -2
  220. package/dist/components/ui/financial-drawers.js +1 -1
  221. package/dist/components/ui/financial-drawers.mjs +5 -5
  222. package/dist/components/ui/financial-sections.mjs +4 -4
  223. package/dist/components/ui/form-primitives.mjs +2 -2
  224. package/dist/components/ui/frontend-signup-steps.js +1239 -0
  225. package/dist/components/ui/frontend-signup-steps.mjs +38 -0
  226. package/dist/components/ui/income-bar-chart.mjs +4 -4
  227. package/dist/components/ui/income-sources-card.js +269 -0
  228. package/dist/components/ui/income-sources-card.mjs +100 -0
  229. package/dist/components/ui/income-summary-component.js +361 -0
  230. package/dist/components/ui/income-summary-component.mjs +84 -0
  231. package/dist/components/ui/income-work-details.js +1663 -0
  232. package/dist/components/ui/income-work-details.mjs +28 -0
  233. package/dist/components/ui/incoming-outgoings-card.js +218 -0
  234. package/dist/components/ui/incoming-outgoings-card.mjs +82 -0
  235. package/dist/components/ui/interest-rate-input.js +442 -0
  236. package/dist/components/ui/interest-rate-input.mjs +90 -0
  237. package/dist/components/ui/interest-rate-section.js +337 -0
  238. package/dist/components/ui/interest-rate-section.mjs +84 -0
  239. package/dist/components/ui/interest-rate-used.js +202 -0
  240. package/dist/components/ui/interest-rate-used.mjs +62 -0
  241. package/dist/components/ui/kanban-column.js +338 -160
  242. package/dist/components/ui/kanban-column.mjs +13 -11
  243. package/dist/components/ui/loan-applicant-information.js +336 -0
  244. package/dist/components/ui/loan-applicant-information.mjs +59 -0
  245. package/dist/components/ui/loan-applicant-invite.js +319 -0
  246. package/dist/components/ui/loan-applicant-invite.mjs +68 -0
  247. package/dist/components/ui/loan-application-badge.js +236 -0
  248. package/dist/components/ui/loan-application-badge.mjs +10 -0
  249. package/dist/components/ui/loan-application-cards.js +356 -0
  250. package/dist/components/ui/loan-application-cards.mjs +110 -0
  251. package/dist/components/ui/loan-entry-shell.js +104 -0
  252. package/dist/components/ui/loan-entry-shell.mjs +8 -0
  253. package/dist/components/ui/loan-financials.js +410 -0
  254. package/dist/components/ui/loan-financials.mjs +76 -0
  255. package/dist/components/ui/loan-option-card.js +102 -0
  256. package/dist/components/ui/loan-option-card.mjs +41 -0
  257. package/dist/components/ui/loan-option-group.js +288 -0
  258. package/dist/components/ui/loan-option-group.mjs +10 -0
  259. package/dist/components/ui/loan-steps.js +1121 -0
  260. package/dist/components/ui/loan-steps.mjs +509 -0
  261. package/dist/components/ui/loan-wizard-shell.js +452 -0
  262. package/dist/components/ui/loan-wizard-shell.mjs +11 -0
  263. package/dist/components/ui/money-input-with-slider.js +210 -0
  264. package/dist/components/ui/money-input-with-slider.mjs +10 -0
  265. package/dist/components/ui/money-item-with-color-indicator.js +314 -0
  266. package/dist/components/ui/money-item-with-color-indicator.mjs +20 -0
  267. package/dist/components/ui/opportunity-card.js +235 -97
  268. package/dist/components/ui/opportunity-card.mjs +11 -9
  269. package/dist/components/ui/opportunity-edit-modals.js +1 -1
  270. package/dist/components/ui/opportunity-edit-modals.mjs +15 -15
  271. package/dist/components/ui/opportunity-summary-tab.js +1 -1
  272. package/dist/components/ui/opportunity-summary-tab.mjs +19 -19
  273. package/dist/components/ui/pagination.mjs +4 -4
  274. package/dist/components/ui/password-strength-tooltip.mjs +4 -4
  275. package/dist/components/ui/pipeline-board.js +358 -176
  276. package/dist/components/ui/pipeline-board.mjs +16 -14
  277. package/dist/components/ui/pipeline-chart.mjs +3 -3
  278. package/dist/components/ui/pipeline-dialogs.js +1 -1
  279. package/dist/components/ui/pipeline-dialogs.mjs +9 -9
  280. package/dist/components/ui/pipeline-primitives.js +75 -8
  281. package/dist/components/ui/pipeline-primitives.mjs +3 -2
  282. package/dist/components/ui/popover.mjs +3 -3
  283. package/dist/components/ui/property-asset-card.js +428 -0
  284. package/dist/components/ui/property-asset-card.mjs +156 -0
  285. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +4 -4
  286. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +4 -4
  287. package/dist/components/ui/property-list-carousel.js +295 -0
  288. package/dist/components/ui/property-list-carousel.mjs +11 -0
  289. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +4 -4
  290. package/dist/components/ui/property-report-dialog.js +1148 -0
  291. package/dist/components/ui/property-report-dialog.mjs +25 -0
  292. package/dist/components/ui/resource-center.js +748 -0
  293. package/dist/components/ui/resource-center.mjs +24 -0
  294. package/dist/components/ui/review-alerts-dialog.js +569 -0
  295. package/dist/components/ui/review-alerts-dialog.mjs +15 -0
  296. package/dist/components/ui/savings-goal-modal.js +1148 -0
  297. package/dist/components/ui/savings-goal-modal.mjs +160 -0
  298. package/dist/components/ui/scenario-drawer.js +791 -0
  299. package/dist/components/ui/scenario-drawer.mjs +294 -0
  300. package/dist/components/ui/scenario-item.js +256 -0
  301. package/dist/components/ui/scenario-item.mjs +11 -0
  302. package/dist/components/ui/scenario-list.js +507 -0
  303. package/dist/components/ui/scenario-list.mjs +100 -0
  304. package/dist/components/ui/select.mjs +3 -3
  305. package/dist/components/ui/share-details-dialog.js +636 -0
  306. package/dist/components/ui/share-details-dialog.mjs +19 -0
  307. package/dist/components/ui/sheet.mjs +3 -3
  308. package/dist/components/ui/sidebar-nav.mjs +5 -5
  309. package/dist/components/ui/signup-form-primitives.js +770 -0
  310. package/dist/components/ui/signup-form-primitives.mjs +25 -0
  311. package/dist/components/ui/signup-shell.js +338 -0
  312. package/dist/components/ui/signup-shell.mjs +13 -0
  313. package/dist/components/ui/stage-timeline.js +103 -33
  314. package/dist/components/ui/stage-timeline.mjs +5 -4
  315. package/dist/components/ui/submission-confirmation-card.js +284 -0
  316. package/dist/components/ui/submission-confirmation-card.mjs +62 -0
  317. package/dist/components/ui/tooltip.mjs +3 -3
  318. package/dist/components/ui/top-three-product.js +374 -0
  319. package/dist/components/ui/top-three-product.mjs +129 -0
  320. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +4 -4
  321. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -5
  322. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +4 -4
  323. package/dist/components/ui/transactions-summary-block.js +95 -0
  324. package/dist/components/ui/transactions-summary-block.mjs +34 -0
  325. package/dist/components/ui/two-fa-setup-form.mjs +3 -3
  326. package/dist/index.js +9430 -4573
  327. package/dist/index.mjs +404 -251
  328. package/dist/lib/colors.js +6 -0
  329. package/dist/lib/colors.mjs +3 -1
  330. package/dist/lib/theme-provider.mjs +2 -2
  331. package/dist/styles.css +1 -1
  332. package/package.json +366 -2
  333. package/src/components/index.tsx +223 -0
  334. package/src/components/ui/about-you-form.tsx +397 -0
  335. package/src/components/ui/account-list-carousel.tsx +87 -0
  336. package/src/components/ui/add-lead-modal.tsx +1 -1
  337. package/src/components/ui/agent-evaluation-toast.tsx +191 -0
  338. package/src/components/ui/ai-builder.tsx +3 -5
  339. package/src/components/ui/ai-conversations.tsx +1 -1
  340. package/src/components/ui/applicant-document-checklist.tsx +175 -0
  341. package/src/components/ui/applicant-expenses-section.tsx +260 -0
  342. package/src/components/ui/applicant-navigation-bar.tsx +104 -0
  343. package/src/components/ui/applicant-switcher.tsx +54 -0
  344. package/src/components/ui/application-mobile-layout.tsx +34 -0
  345. package/src/components/ui/appointment-availability-settings.tsx +115 -23
  346. package/src/components/ui/appointment-book-dialog.tsx +406 -259
  347. package/src/components/ui/appointment-calendar-view.tsx +4 -1
  348. package/src/components/ui/appointment-detail-sheet.tsx +59 -24
  349. package/src/components/ui/appointment-time-slot-picker.tsx +5 -1
  350. package/src/components/ui/asset-accordion.tsx +241 -0
  351. package/src/components/ui/assets-liabilities-side-card.tsx +157 -0
  352. package/src/components/ui/auth-page-layout.tsx +3 -3
  353. package/src/components/ui/backoffice-alert-matching-chart.tsx +320 -0
  354. package/src/components/ui/backoffice-contact-matching-chart.tsx +341 -0
  355. package/src/components/ui/backoffice-signup-steps.tsx +615 -0
  356. package/src/components/ui/bank-statement-document-table.tsx +222 -0
  357. package/src/components/ui/bank-statement-generate-dialog.tsx +435 -0
  358. package/src/components/ui/bank-statement-pdf-viewer.tsx +241 -0
  359. package/src/components/ui/banking-accounts-connect.tsx +187 -0
  360. package/src/components/ui/borrowing-capacity-atoms.tsx +228 -0
  361. package/src/components/ui/borrowing-capacity-card.tsx +155 -0
  362. package/src/components/ui/broker-info-panel.tsx +94 -0
  363. package/src/components/ui/calculator-input-item.tsx +49 -0
  364. package/src/components/ui/calculator-section.tsx +275 -0
  365. package/src/components/ui/category-edit-dialog.tsx +300 -0
  366. package/src/components/ui/connect-bank-step.tsx +379 -0
  367. package/src/components/ui/contact-alert-dialog.tsx +710 -0
  368. package/src/components/ui/create-contact-modal.tsx +237 -0
  369. package/src/components/ui/csv-import-modal.tsx +153 -0
  370. package/src/components/ui/currency-input.tsx +104 -0
  371. package/src/components/ui/dashboard-expense-categories.tsx +262 -0
  372. package/src/components/ui/dashboard-transactions-table.tsx +241 -0
  373. package/src/components/ui/debt-accordion.tsx +254 -0
  374. package/src/components/ui/delete-contact-component.tsx +87 -0
  375. package/src/components/ui/dialog.tsx +2 -2
  376. package/src/components/ui/dynamic-tabs.tsx +149 -0
  377. package/src/components/ui/editable-money-item.tsx +176 -0
  378. package/src/components/ui/expense-detail-item.tsx +216 -0
  379. package/src/components/ui/expense-work-details.tsx +229 -0
  380. package/src/components/ui/file-preview-dialog.tsx +292 -0
  381. package/src/components/ui/financial-drawers.tsx +1 -1
  382. package/src/components/ui/frontend-signup-steps.tsx +548 -0
  383. package/src/components/ui/income-sources-card.tsx +143 -0
  384. package/src/components/ui/income-summary-component.tsx +120 -0
  385. package/src/components/ui/income-work-details.tsx +429 -0
  386. package/src/components/ui/incoming-outgoings-card.tsx +111 -0
  387. package/src/components/ui/interest-rate-input.tsx +111 -0
  388. package/src/components/ui/interest-rate-section.tsx +158 -0
  389. package/src/components/ui/interest-rate-used.tsx +82 -0
  390. package/src/components/ui/kanban-column.tsx +53 -2
  391. package/src/components/ui/loan-applicant-information.tsx +64 -0
  392. package/src/components/ui/loan-applicant-invite.tsx +67 -0
  393. package/src/components/ui/loan-application-badge.tsx +70 -0
  394. package/src/components/ui/loan-application-cards.tsx +152 -0
  395. package/src/components/ui/loan-entry-shell.tsx +86 -0
  396. package/src/components/ui/loan-financials.tsx +77 -0
  397. package/src/components/ui/loan-option-card.tsx +62 -0
  398. package/src/components/ui/loan-option-group.tsx +106 -0
  399. package/src/components/ui/loan-steps.tsx +630 -0
  400. package/src/components/ui/loan-wizard-shell.tsx +235 -0
  401. package/src/components/ui/money-input-with-slider.tsx +77 -0
  402. package/src/components/ui/money-item-with-color-indicator.tsx +30 -0
  403. package/src/components/ui/opportunity-card.tsx +46 -18
  404. package/src/components/ui/pipeline-board.tsx +13 -0
  405. package/src/components/ui/pipeline-primitives.tsx +28 -0
  406. package/src/components/ui/property-asset-card.tsx +221 -0
  407. package/src/components/ui/property-list-carousel.tsx +73 -0
  408. package/src/components/ui/property-report-dialog.tsx +355 -0
  409. package/src/components/ui/resource-center.tsx +539 -0
  410. package/src/components/ui/review-alerts-dialog.tsx +163 -0
  411. package/src/components/ui/savings-goal-modal.tsx +169 -0
  412. package/src/components/ui/scenario-drawer.tsx +358 -0
  413. package/src/components/ui/scenario-item.tsx +141 -0
  414. package/src/components/ui/scenario-list.tsx +150 -0
  415. package/src/components/ui/share-details-dialog.tsx +238 -0
  416. package/src/components/ui/signup-form-primitives.tsx +212 -0
  417. package/src/components/ui/signup-shell.tsx +180 -0
  418. package/src/components/ui/stage-timeline.tsx +11 -0
  419. package/src/components/ui/submission-confirmation-card.tsx +68 -0
  420. package/src/components/ui/top-three-product.tsx +207 -0
  421. package/src/components/ui/transactions-summary-block.tsx +59 -0
  422. package/src/lib/colors.ts +12 -0
  423. package/src/lib/format-date.ts +2 -2
  424. package/src/styles/styles-css.ts +1 -1
  425. package/tsup.config.ts +77 -1
  426. package/dist/{chunk-5VOTTIXF.mjs → chunk-FRT3S72S.mjs} +3 -3
  427. package/dist/{chunk-7BTFGCFC.mjs → chunk-MUV4EGDW.mjs} +3 -3
  428. package/dist/{chunk-57ZXILTS.mjs → chunk-MXP2RX2V.mjs} +3 -3
  429. package/dist/{chunk-ZKWXDQDG.mjs → chunk-VCDGLN25.mjs} +3 -3
  430. package/dist/{chunk-FLL633WS.mjs → chunk-ZXEUBBHJ.mjs} +3 -3
@@ -0,0 +1,1121 @@
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/loan-steps.tsx
60
+ var loan_steps_exports = {};
61
+ __export(loan_steps_exports, {
62
+ LENDING_TYPE_OPTIONS: () => LENDING_TYPE_OPTIONS,
63
+ LOAN_FEATURE_OPTIONS: () => LOAN_FEATURE_OPTIONS,
64
+ LOAN_PRIORITY_OPTIONS: () => LOAN_PRIORITY_OPTIONS,
65
+ LOAN_PURPOSE_OPTIONS: () => LOAN_PURPOSE_OPTIONS,
66
+ LoanBorrowIntendStep: () => LoanBorrowIntendStep,
67
+ LoanDetailsBuyStep: () => LoanDetailsBuyStep,
68
+ LoanDetailsRefinanceStep: () => LoanDetailsRefinanceStep,
69
+ LoanFeaturesStep: () => LoanFeaturesStep,
70
+ LoanFixedRateConcernStep: () => LoanFixedRateConcernStep,
71
+ LoanInterestRateRaiseConcernStep: () => LoanInterestRateRaiseConcernStep,
72
+ LoanPriorityStep: () => LoanPriorityStep,
73
+ LoanPurposeStep: () => LoanPurposeStep,
74
+ LoanRetirementPlanStep: () => LoanRetirementPlanStep
75
+ });
76
+ module.exports = __toCommonJS(loan_steps_exports);
77
+
78
+ // src/lib/utils.ts
79
+ var import_clsx = require("clsx");
80
+ var import_tailwind_merge = require("tailwind-merge");
81
+ var twMerge = (0, import_tailwind_merge.extendTailwindMerge)({
82
+ extend: {
83
+ classGroups: {
84
+ "font-size": [
85
+ {
86
+ text: [
87
+ "display-large",
88
+ "display-medium",
89
+ "display-small",
90
+ "h1",
91
+ "h2",
92
+ "h3",
93
+ "h4",
94
+ "h5",
95
+ "h6",
96
+ "body-large",
97
+ "body-medium",
98
+ "body-small",
99
+ "label-large",
100
+ "label-medium",
101
+ "label-small",
102
+ "button",
103
+ "button-xs",
104
+ "caption",
105
+ "overline",
106
+ "code"
107
+ ]
108
+ }
109
+ ]
110
+ }
111
+ }
112
+ });
113
+ function cn(...inputs) {
114
+ return twMerge((0, import_clsx.clsx)(inputs));
115
+ }
116
+
117
+ // src/components/ui/button.tsx
118
+ var import_react = require("react");
119
+ var import_class_variance_authority = require("class-variance-authority");
120
+ var import_lucide_react = require("lucide-react");
121
+
122
+ // src/lib/slot.tsx
123
+ var React = __toESM(require("react"));
124
+ function mergeRefs(...refs) {
125
+ return (value) => {
126
+ for (const ref of refs) {
127
+ if (typeof ref === "function") ref(value);
128
+ else if (ref !== null)
129
+ ref.current = value;
130
+ }
131
+ };
132
+ }
133
+ var Slot = React.forwardRef(
134
+ (_a, forwardedRef) => {
135
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
136
+ const child = React.Children.only(children);
137
+ if (!React.isValidElement(child)) return null;
138
+ const childProps = child.props;
139
+ const merged = __spreadValues({}, props);
140
+ for (const key of Object.keys(childProps)) {
141
+ if (key === "className") {
142
+ merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
143
+ } else if (key === "style") {
144
+ merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
145
+ } else if (key.startsWith("on") && typeof childProps[key] === "function") {
146
+ const parentHandler = props[key];
147
+ if (typeof parentHandler === "function") {
148
+ merged[key] = (...args) => {
149
+ childProps[key](...args);
150
+ parentHandler(...args);
151
+ };
152
+ } else {
153
+ merged[key] = childProps[key];
154
+ }
155
+ } else {
156
+ merged[key] = childProps[key];
157
+ }
158
+ }
159
+ const childRef = child.ref;
160
+ merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
161
+ return React.cloneElement(
162
+ child,
163
+ merged
164
+ );
165
+ }
166
+ );
167
+ Slot.displayName = "Slot";
168
+
169
+ // src/components/ui/button.tsx
170
+ var import_jsx_runtime = require("react/jsx-runtime");
171
+ var buttonVariants = (0, import_class_variance_authority.cva)(
172
+ "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",
173
+ {
174
+ variants: {
175
+ variant: {
176
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
177
+ secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
178
+ destructive: "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
179
+ outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:border-border focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
180
+ "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
181
+ "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:border-brand-secondary focus-visible:ring-brand-secondary/30",
182
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
183
+ link: "text-primary underline-offset-4 hover:underline"
184
+ },
185
+ size: {
186
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
187
+ xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
188
+ sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
189
+ lg: "h-10 px-6 has-[>svg]:px-4",
190
+ icon: "size-9",
191
+ "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
192
+ "icon-sm": "size-8",
193
+ "icon-lg": "size-10"
194
+ }
195
+ },
196
+ defaultVariants: {
197
+ variant: "default",
198
+ size: "default"
199
+ }
200
+ }
201
+ );
202
+ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
203
+ var _b = _a, {
204
+ className,
205
+ variant,
206
+ size,
207
+ asChild = false,
208
+ loading = false,
209
+ disabled,
210
+ type = "button",
211
+ children
212
+ } = _b, props = __objRest(_b, [
213
+ "className",
214
+ "variant",
215
+ "size",
216
+ "asChild",
217
+ "loading",
218
+ "disabled",
219
+ "type",
220
+ "children"
221
+ ]);
222
+ const Comp = asChild ? Slot : "button";
223
+ const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
224
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
225
+ Comp,
226
+ __spreadProps(__spreadValues({
227
+ className: cn(buttonVariants({ variant, size, className })),
228
+ "data-size": size,
229
+ "data-slot": "button",
230
+ "data-variant": variant,
231
+ disabled: loading || disabled,
232
+ ref,
233
+ type
234
+ }, props), {
235
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
236
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
237
+ !isIconOnly && children
238
+ ] }) : children
239
+ })
240
+ );
241
+ });
242
+
243
+ // src/components/ui/toggle-group.tsx
244
+ var React2 = __toESM(require("react"));
245
+ var import_toggle_group = require("@base-ui/react/toggle-group");
246
+ var import_toggle2 = require("@base-ui/react/toggle");
247
+
248
+ // src/components/ui/toggle.tsx
249
+ var import_class_variance_authority2 = require("class-variance-authority");
250
+ var import_toggle = require("@base-ui/react/toggle");
251
+ var import_jsx_runtime2 = require("react/jsx-runtime");
252
+ var toggleVariants = (0, import_class_variance_authority2.cva)(
253
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap transition-[color,box-shadow] 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 data-pressed:bg-primary/10 data-pressed:inset-ring data-pressed:inset-ring-primary data-pressed:text-foreground data-pressed:hover:bg-primary/10 data-pressed:hover:text-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
254
+ {
255
+ variants: {
256
+ variant: {
257
+ default: "bg-transparent hover:bg-muted hover:text-muted-foreground",
258
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
259
+ },
260
+ size: {
261
+ default: "h-9 min-w-9 px-2 text-label-large",
262
+ sm: "h-8 min-w-8 px-1.5 text-label-medium",
263
+ lg: "h-10 min-w-10 px-2.5 text-h5"
264
+ }
265
+ },
266
+ defaultVariants: {
267
+ variant: "default",
268
+ size: "default"
269
+ }
270
+ }
271
+ );
272
+
273
+ // src/components/ui/toggle-group.tsx
274
+ var import_jsx_runtime3 = require("react/jsx-runtime");
275
+ var ToggleGroupContext = React2.createContext({
276
+ size: "default",
277
+ variant: "default",
278
+ spacing: 0
279
+ });
280
+ function ToggleGroup(_a) {
281
+ var _b = _a, {
282
+ className,
283
+ variant,
284
+ size,
285
+ spacing = 0,
286
+ type,
287
+ children
288
+ } = _b, props = __objRest(_b, [
289
+ "className",
290
+ "variant",
291
+ "size",
292
+ "spacing",
293
+ "type",
294
+ "children"
295
+ ]);
296
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
297
+ import_toggle_group.ToggleGroup,
298
+ __spreadProps(__spreadValues({
299
+ className: cn(
300
+ // WealthX: removed rounded-md (sharp corners) and shadow-xs (flat panels)
301
+ "group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))]",
302
+ className
303
+ ),
304
+ "data-size": size,
305
+ "data-slot": "toggle-group",
306
+ "data-spacing": spacing,
307
+ "data-variant": variant,
308
+ multiple: type === "multiple",
309
+ style: { "--gap": spacing }
310
+ }, props), {
311
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
312
+ })
313
+ );
314
+ }
315
+ function ToggleGroupItem(_a) {
316
+ var _b = _a, {
317
+ className,
318
+ children,
319
+ variant,
320
+ size
321
+ } = _b, props = __objRest(_b, [
322
+ "className",
323
+ "children",
324
+ "variant",
325
+ "size"
326
+ ]);
327
+ const context = React2.useContext(ToggleGroupContext);
328
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
329
+ import_toggle2.Toggle,
330
+ __spreadProps(__spreadValues({
331
+ className: cn(
332
+ toggleVariants({
333
+ variant: context.variant || variant,
334
+ size: context.size || size
335
+ }),
336
+ "w-auto min-w-0 shrink-0 focus:z-10 focus-visible:z-10",
337
+ // WealthX: no rounded corners on grouped items
338
+ "data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l",
339
+ className
340
+ ),
341
+ "data-size": context.size || size,
342
+ "data-slot": "toggle-group-item",
343
+ "data-spacing": context.spacing,
344
+ "data-variant": context.variant || variant
345
+ }, props), {
346
+ children
347
+ })
348
+ );
349
+ }
350
+
351
+ // src/components/ui/loan-option-group.tsx
352
+ var import_jsx_runtime4 = require("react/jsx-runtime");
353
+ function LoanOptionGroup({
354
+ title,
355
+ options,
356
+ value,
357
+ values = [],
358
+ onChange,
359
+ multiple = false,
360
+ max,
361
+ showRank = false,
362
+ allowUnSelect = true,
363
+ error = false,
364
+ helperText,
365
+ disabled = false,
366
+ className
367
+ }) {
368
+ const controlledValue = multiple ? values : value ? [value] : [];
369
+ const handleValueChange = (next) => {
370
+ var _a;
371
+ if (multiple) {
372
+ if (max !== void 0 && next.length > max) return;
373
+ onChange([...next]);
374
+ } else {
375
+ if (next.length === 0 && !allowUnSelect) return;
376
+ onChange((_a = next[0]) != null ? _a : "");
377
+ }
378
+ };
379
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: cn("flex flex-col gap-3 font-sans", className), children: [
380
+ title && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
381
+ "p",
382
+ {
383
+ className: cn(
384
+ "text-sm font-medium text-foreground",
385
+ error && "text-destructive"
386
+ ),
387
+ children: title
388
+ }
389
+ ),
390
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
391
+ ToggleGroup,
392
+ {
393
+ value: controlledValue,
394
+ onValueChange: handleValueChange,
395
+ variant: "outline",
396
+ type: multiple ? "multiple" : "single",
397
+ spacing: 2,
398
+ disabled,
399
+ className: "flex-wrap justify-start",
400
+ children: options.map((opt) => {
401
+ const rank = showRank && multiple ? values.indexOf(opt.value) : -1;
402
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
403
+ ToggleGroupItem,
404
+ {
405
+ value: opt.value,
406
+ className: "h-auto px-4 py-2 text-sm font-medium",
407
+ children: [
408
+ rank >= 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "text-xs font-bold opacity-70", children: [
409
+ "#",
410
+ rank + 1
411
+ ] }),
412
+ opt.label
413
+ ]
414
+ },
415
+ opt.value
416
+ );
417
+ })
418
+ }
419
+ ),
420
+ error && helperText && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-xs text-destructive", children: helperText })
421
+ ] });
422
+ }
423
+
424
+ // src/components/ui/currency-input.tsx
425
+ var import_react2 = require("react");
426
+
427
+ // src/components/ui/input-group.tsx
428
+ var import_class_variance_authority3 = require("class-variance-authority");
429
+
430
+ // src/components/ui/input.tsx
431
+ var import_jsx_runtime5 = require("react/jsx-runtime");
432
+ function Input(_a) {
433
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
434
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
435
+ "input",
436
+ __spreadValues({
437
+ className: cn(
438
+ "h-9 w-full min-w-0 border border-input bg-transparent px-3 py-1 text-body-medium font-sans shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-label-medium file:text-foreground placeholder:font-normal placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 dark:bg-input/30",
439
+ "focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20",
440
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
441
+ className
442
+ ),
443
+ "data-slot": "input",
444
+ type
445
+ }, props)
446
+ );
447
+ }
448
+
449
+ // src/components/ui/textarea.tsx
450
+ var import_jsx_runtime6 = require("react/jsx-runtime");
451
+
452
+ // src/components/ui/input-group.tsx
453
+ var import_jsx_runtime7 = require("react/jsx-runtime");
454
+ function InputGroup(_a) {
455
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
456
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
457
+ "div",
458
+ __spreadValues({
459
+ className: cn(
460
+ "group/input-group relative flex w-full items-center border border-input shadow-xs transition-[color,box-shadow] outline-none dark:bg-input/30",
461
+ "h-9 min-w-0 has-[>textarea]:h-auto",
462
+ // Variants based on alignment.
463
+ "has-[>[data-align=inline-start]]:[&>input]:pl-2",
464
+ "has-[>[data-align=inline-end]]:[&>input]:pr-2",
465
+ "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
466
+ "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
467
+ // Focus state.
468
+ "has-[[data-slot=input-group-control]:focus-visible]:border-primary has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-primary/20",
469
+ // Error state.
470
+ "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
471
+ className
472
+ ),
473
+ "data-slot": "input-group",
474
+ role: "group"
475
+ }, props)
476
+ );
477
+ }
478
+ var inputGroupAddonVariants = (0, import_class_variance_authority3.cva)(
479
+ "flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
480
+ {
481
+ variants: {
482
+ align: {
483
+ "inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
484
+ "inline-end": "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
485
+ "block-start": "order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3",
486
+ "block-end": "order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3"
487
+ }
488
+ },
489
+ defaultVariants: {
490
+ align: "inline-start"
491
+ }
492
+ }
493
+ );
494
+ function InputGroupAddon(_a) {
495
+ var _b = _a, {
496
+ className,
497
+ align = "inline-start"
498
+ } = _b, props = __objRest(_b, [
499
+ "className",
500
+ "align"
501
+ ]);
502
+ return (
503
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- click only forwards focus to the sibling input; the div is not truly interactive
504
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
505
+ "div",
506
+ __spreadValues({
507
+ className: cn(inputGroupAddonVariants({ align }), className),
508
+ "data-align": align,
509
+ "data-slot": "input-group-addon",
510
+ onClick: (e) => {
511
+ var _a2, _b2;
512
+ if (e.target.closest("button")) {
513
+ return;
514
+ }
515
+ (_b2 = (_a2 = e.currentTarget.parentElement) == null ? void 0 : _a2.querySelector("input")) == null ? void 0 : _b2.focus();
516
+ },
517
+ onKeyDown: (e) => {
518
+ var _a2, _b2;
519
+ if (e.key === "Enter" || e.key === " ") {
520
+ (_b2 = (_a2 = e.currentTarget.parentElement) == null ? void 0 : _a2.querySelector("input")) == null ? void 0 : _b2.focus();
521
+ }
522
+ },
523
+ role: "group"
524
+ }, props)
525
+ )
526
+ );
527
+ }
528
+ var inputGroupButtonVariants = (0, import_class_variance_authority3.cva)(
529
+ "flex items-center gap-2 text-sm shadow-none",
530
+ {
531
+ variants: {
532
+ size: {
533
+ xs: "h-6 gap-1 px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5",
534
+ sm: "h-8 gap-1.5 px-2.5 has-[>svg]:px-2.5",
535
+ "icon-xs": "size-6 p-0 has-[>svg]:p-0",
536
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
537
+ }
538
+ },
539
+ defaultVariants: {
540
+ size: "xs"
541
+ }
542
+ }
543
+ );
544
+ function InputGroupInput(_a) {
545
+ var _b = _a, {
546
+ className
547
+ } = _b, props = __objRest(_b, [
548
+ "className"
549
+ ]);
550
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
551
+ Input,
552
+ __spreadValues({
553
+ className: cn(
554
+ "flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",
555
+ className
556
+ ),
557
+ "data-slot": "input-group-control"
558
+ }, props)
559
+ );
560
+ }
561
+
562
+ // src/components/ui/currency-input.tsx
563
+ var import_jsx_runtime8 = require("react/jsx-runtime");
564
+ function formatDisplay(n) {
565
+ return n.toLocaleString("en-AU", { maximumFractionDigits: 0 });
566
+ }
567
+ function parseRaw(raw) {
568
+ const digits = raw.replace(/[^0-9.]/g, "");
569
+ const n = parseFloat(digits);
570
+ return isNaN(n) ? 0 : Math.round(n);
571
+ }
572
+ function CurrencyInput({
573
+ value,
574
+ onChange,
575
+ id,
576
+ disabled = false,
577
+ placeholder = "0",
578
+ min = 0,
579
+ error = false,
580
+ className
581
+ }) {
582
+ const [displayValue, setDisplayValue] = (0, import_react2.useState)(
583
+ () => value > 0 ? formatDisplay(value) : ""
584
+ );
585
+ const [focused, setFocused] = (0, import_react2.useState)(false);
586
+ (0, import_react2.useEffect)(() => {
587
+ if (!focused) {
588
+ setDisplayValue(value > 0 ? formatDisplay(value) : "");
589
+ }
590
+ }, [value, focused]);
591
+ function handleChange(e) {
592
+ const cleaned = e.target.value.replace(/[^0-9,.]/g, "");
593
+ setDisplayValue(cleaned);
594
+ }
595
+ function handleFocus() {
596
+ setFocused(true);
597
+ setDisplayValue(value > 0 ? String(value) : "");
598
+ }
599
+ function handleBlur() {
600
+ setFocused(false);
601
+ const parsed = Math.max(min, parseRaw(displayValue));
602
+ onChange(parsed);
603
+ setDisplayValue(parsed > 0 ? formatDisplay(parsed) : "");
604
+ }
605
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
606
+ InputGroup,
607
+ {
608
+ className: cn(className),
609
+ "data-disabled": disabled ? "true" : void 0,
610
+ children: [
611
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(InputGroupAddon, { align: "inline-start", children: "$" }),
612
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
613
+ InputGroupInput,
614
+ {
615
+ id,
616
+ type: "text",
617
+ inputMode: "numeric",
618
+ value: displayValue,
619
+ onChange: handleChange,
620
+ onFocus: handleFocus,
621
+ onBlur: handleBlur,
622
+ placeholder,
623
+ disabled,
624
+ "aria-invalid": error ? "true" : void 0
625
+ }
626
+ )
627
+ ]
628
+ }
629
+ );
630
+ }
631
+
632
+ // src/components/ui/loan-steps.tsx
633
+ var import_jsx_runtime9 = require("react/jsx-runtime");
634
+ var YES_NO = [
635
+ { value: "yes", label: "Yes" },
636
+ { value: "no", label: "No" }
637
+ ];
638
+ function scaleOptions(min, max) {
639
+ return Array.from({ length: max - min + 1 }, (_, i) => {
640
+ const v = String(min + i);
641
+ return { value: v, label: v };
642
+ });
643
+ }
644
+ function StepNav({
645
+ onPrev,
646
+ onNext,
647
+ nextLabel = "Next",
648
+ nextDisabled = false,
649
+ hidePrev = false,
650
+ className
651
+ }) {
652
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex items-center justify-between pt-6", className), children: [
653
+ !hidePrev ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Button, { variant: "outline", onClick: onPrev, children: [
654
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ChevronLeftIcon, { className: "mr-1 size-4" }),
655
+ "Previous"
656
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", {}),
657
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Button, { onClick: onNext, disabled: nextDisabled, children: [
658
+ nextLabel,
659
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ChevronRightIcon, { className: "ml-1 size-4" })
660
+ ] })
661
+ ] });
662
+ }
663
+ var LENDING_TYPE_OPTIONS = [
664
+ { value: "owner-occupier", label: "Owner Occupier" },
665
+ { value: "investment", label: "Investment" },
666
+ { value: "both", label: "Both" }
667
+ ];
668
+ var LOAN_PURPOSE_OPTIONS = [
669
+ { value: "buy", label: "Buy a New Property" },
670
+ { value: "refinance", label: "Refinance" },
671
+ { value: "equity", label: "Equity Release" },
672
+ { value: "construction", label: "Construction" }
673
+ ];
674
+ function LoanPurposeStep({
675
+ lendingType,
676
+ loanPurpose,
677
+ onLendingTypeChange,
678
+ onLoanPurposeChange,
679
+ onNext,
680
+ className
681
+ }) {
682
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-10 font-sans", className), children: [
683
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
684
+ LoanOptionGroup,
685
+ {
686
+ title: "What Type of Lending Are You Looking For?",
687
+ options: LENDING_TYPE_OPTIONS,
688
+ value: lendingType,
689
+ onChange: (v) => onLendingTypeChange(v)
690
+ }
691
+ ),
692
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
693
+ LoanOptionGroup,
694
+ {
695
+ title: "What Would You Like to Do?",
696
+ options: LOAN_PURPOSE_OPTIONS,
697
+ value: loanPurpose,
698
+ onChange: (v) => onLoanPurposeChange(v)
699
+ }
700
+ ),
701
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
702
+ StepNav,
703
+ {
704
+ hidePrev: true,
705
+ onNext,
706
+ nextDisabled: !lendingType || !loanPurpose
707
+ }
708
+ )
709
+ ] });
710
+ }
711
+ function LoanDetailsBuyStep({
712
+ isPropertyKnown,
713
+ propertyAddress = "",
714
+ propertyEstimate = 0,
715
+ loanAmount = 0,
716
+ onIsPropertyKnownChange,
717
+ onPropertyAddressChange,
718
+ onPropertyEstimateChange,
719
+ onLoanAmountChange,
720
+ onPrev,
721
+ onNext,
722
+ className
723
+ }) {
724
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-8 font-sans", className), children: [
725
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
726
+ LoanOptionGroup,
727
+ {
728
+ title: "Do you have a specific property in mind?",
729
+ options: YES_NO,
730
+ value: isPropertyKnown,
731
+ onChange: (v) => onIsPropertyKnownChange(v)
732
+ }
733
+ ),
734
+ isPropertyKnown === "yes" && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-4", children: [
735
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-1", children: [
736
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { className: "text-sm font-medium text-foreground", children: "Property Address" }),
737
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
738
+ "input",
739
+ {
740
+ type: "text",
741
+ value: propertyAddress,
742
+ onChange: (e) => onPropertyAddressChange(e.target.value),
743
+ placeholder: "Enter property address",
744
+ className: "w-full border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
745
+ }
746
+ )
747
+ ] }),
748
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
749
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-1", children: [
750
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { className: "text-sm font-medium text-foreground", children: "Property Value" }),
751
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
752
+ CurrencyInput,
753
+ {
754
+ value: propertyEstimate,
755
+ onChange: onPropertyEstimateChange
756
+ }
757
+ )
758
+ ] }),
759
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-1", children: [
760
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { className: "text-sm font-medium text-foreground", children: "Loan Amount" }),
761
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CurrencyInput, { value: loanAmount, onChange: onLoanAmountChange })
762
+ ] })
763
+ ] })
764
+ ] }),
765
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
766
+ StepNav,
767
+ {
768
+ onPrev,
769
+ onNext,
770
+ nextDisabled: !isPropertyKnown
771
+ }
772
+ )
773
+ ] });
774
+ }
775
+ function LoanDetailsRefinanceStep({
776
+ properties,
777
+ selectedIds,
778
+ onToggle,
779
+ onPrev,
780
+ onNext,
781
+ className
782
+ }) {
783
+ const selectedSet = new Set(selectedIds);
784
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-6 font-sans", className), children: [
785
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-sm font-medium text-foreground", children: "Select What Properties You Would Like to Refinance" }),
786
+ properties.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-sm text-muted-foreground", children: "No properties found. Add properties in the Assets section first." }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex flex-col gap-3", children: properties.map((prop) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
787
+ "button",
788
+ {
789
+ type: "button",
790
+ onClick: () => onToggle(prop.id),
791
+ className: cn(
792
+ "flex items-center justify-between border p-4 text-left transition-colors",
793
+ selectedSet.has(prop.id) ? "border-primary bg-primary/5" : "border-border bg-background hover:bg-accent"
794
+ ),
795
+ children: [
796
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
797
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-sm font-medium text-foreground", children: prop.address }),
798
+ prop.estimateValue != null && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
799
+ "Est. $",
800
+ prop.estimateValue.toLocaleString("en-AU")
801
+ ] })
802
+ ] }),
803
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
804
+ CheckboxIcon,
805
+ {
806
+ checked: selectedSet.has(prop.id),
807
+ className: "size-5 shrink-0"
808
+ }
809
+ )
810
+ ]
811
+ },
812
+ prop.id
813
+ )) }),
814
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
815
+ StepNav,
816
+ {
817
+ onPrev,
818
+ onNext,
819
+ nextDisabled: selectedIds.length === 0
820
+ }
821
+ )
822
+ ] });
823
+ }
824
+ function LoanFixedRateConcernStep({
825
+ fixedRateConcern,
826
+ jobSecurityScale,
827
+ onFixedRateConcernChange,
828
+ onJobSecurityScaleChange,
829
+ onPrev,
830
+ onNext,
831
+ className
832
+ }) {
833
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-10 font-sans", className), children: [
834
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
835
+ LoanOptionGroup,
836
+ {
837
+ title: "Would you consider taking a fixed rate (either all fixed or a split loan with part fixed and part variable)?",
838
+ options: YES_NO,
839
+ value: fixedRateConcern,
840
+ onChange: (v) => onFixedRateConcernChange(v)
841
+ }
842
+ ),
843
+ fixedRateConcern && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
844
+ LoanOptionGroup,
845
+ {
846
+ title: "On a scale of 1\u201310 how would you rate your current job security? (1 = not secure, 10 = highly secure)",
847
+ options: scaleOptions(1, 10),
848
+ value: jobSecurityScale,
849
+ onChange: (v) => onJobSecurityScaleChange(v)
850
+ }
851
+ ),
852
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
853
+ StepNav,
854
+ {
855
+ onPrev,
856
+ onNext,
857
+ nextDisabled: !fixedRateConcern
858
+ }
859
+ )
860
+ ] });
861
+ }
862
+ function LoanBorrowIntendStep({
863
+ borrowIntend,
864
+ onBorrowIntendChange,
865
+ onPrev,
866
+ onNext,
867
+ className
868
+ }) {
869
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-10 font-sans", className), children: [
870
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
871
+ LoanOptionGroup,
872
+ {
873
+ title: "Do you intend to borrow money other than your property?",
874
+ options: YES_NO,
875
+ value: borrowIntend,
876
+ onChange: (v) => onBorrowIntendChange(v)
877
+ }
878
+ ),
879
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(StepNav, { onPrev, onNext, nextDisabled: !borrowIntend })
880
+ ] });
881
+ }
882
+ var LOAN_PRIORITY_OPTIONS = [
883
+ { value: "lowest-rate", label: "Lowest Rate" },
884
+ { value: "offset-account", label: "Offset Account" },
885
+ { value: "redraw-facility", label: "Redraw Facility" },
886
+ { value: "repayment-flexibility", label: "Repayment Flexibility" },
887
+ { value: "lender-stability", label: "Lender Stability" },
888
+ { value: "customer-service", label: "Customer Service" }
889
+ ];
890
+ function LoanPriorityStep({
891
+ priorities,
892
+ onPrioritiesChange,
893
+ onPrev,
894
+ onNext,
895
+ className
896
+ }) {
897
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-10 font-sans", className), children: [
898
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
899
+ LoanOptionGroup,
900
+ {
901
+ title: "List out your top three priorities with the loan",
902
+ options: LOAN_PRIORITY_OPTIONS,
903
+ values: priorities,
904
+ multiple: true,
905
+ max: 3,
906
+ showRank: true,
907
+ onChange: (v) => onPrioritiesChange(v)
908
+ }
909
+ ),
910
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
911
+ StepNav,
912
+ {
913
+ onPrev,
914
+ onNext,
915
+ nextDisabled: priorities.length === 0
916
+ }
917
+ )
918
+ ] });
919
+ }
920
+ function LoanRetirementPlanStep({
921
+ retirementAge,
922
+ hasRetirementPlan,
923
+ retirementAgeError,
924
+ onRetirementAgeChange,
925
+ onHasRetirementPlanChange,
926
+ onPrev,
927
+ onSaveAndNext,
928
+ className
929
+ }) {
930
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-10 font-sans", className), children: [
931
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-1", children: [
932
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { className: "text-sm font-medium text-foreground", children: "What age are you planning to retire?" }),
933
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
934
+ "input",
935
+ {
936
+ type: "number",
937
+ min: 0,
938
+ max: 100,
939
+ value: retirementAge || "",
940
+ onChange: (e) => onRetirementAgeChange(Number(e.target.value)),
941
+ placeholder: "e.g. 65",
942
+ className: cn(
943
+ "w-32 border bg-background px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",
944
+ retirementAgeError ? "border-destructive" : "border-input"
945
+ )
946
+ }
947
+ ),
948
+ retirementAgeError && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-xs text-destructive", children: retirementAgeError })
949
+ ] }),
950
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
951
+ LoanOptionGroup,
952
+ {
953
+ title: "Do you plan or anticipate changes (other than retirement) to your future financial circumstances that could adversely impact your ability to repay the loan?",
954
+ options: YES_NO,
955
+ value: hasRetirementPlan,
956
+ onChange: (v) => onHasRetirementPlanChange(v)
957
+ }
958
+ ),
959
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
960
+ StepNav,
961
+ {
962
+ onPrev,
963
+ onNext: onSaveAndNext,
964
+ nextLabel: "Save & Next",
965
+ nextDisabled: !retirementAge || !hasRetirementPlan
966
+ }
967
+ )
968
+ ] });
969
+ }
970
+ function LoanInterestRateRaiseConcernStep({
971
+ raiseConcern,
972
+ raiseConcernScale,
973
+ onRaiseConcernChange,
974
+ onRaiseConcernScaleChange,
975
+ onPrev,
976
+ onNext,
977
+ className
978
+ }) {
979
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-10 font-sans", className), children: [
980
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
981
+ LoanOptionGroup,
982
+ {
983
+ title: "Are you concerned about rising interest rates?",
984
+ options: YES_NO,
985
+ value: raiseConcern,
986
+ onChange: (v) => onRaiseConcernChange(v)
987
+ }
988
+ ),
989
+ raiseConcern === "yes" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
990
+ LoanOptionGroup,
991
+ {
992
+ title: "On a scale of 1\u201310 how concerned are you about rising interest rates? (1 = not concerned, 10 = highly concerned)",
993
+ options: scaleOptions(1, 10),
994
+ value: raiseConcernScale,
995
+ onChange: (v) => onRaiseConcernScaleChange(v)
996
+ }
997
+ ),
998
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(StepNav, { onPrev, onNext, nextDisabled: !raiseConcern })
999
+ ] });
1000
+ }
1001
+ var LOAN_FEATURE_OPTIONS = [
1002
+ { value: "offset", label: "Offset Account" },
1003
+ { value: "redraw", label: "Redraw" },
1004
+ { value: "split", label: "Split Loan" },
1005
+ { value: "extra-repayments", label: "Extra Repayments" },
1006
+ { value: "interest-only", label: "Interest Only" }
1007
+ ];
1008
+ function LoanFeaturesStep({
1009
+ featuresAcknowledge,
1010
+ feature,
1011
+ onFeaturesAcknowledgeChange,
1012
+ onFeatureChange,
1013
+ onPrev,
1014
+ onNext,
1015
+ className
1016
+ }) {
1017
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: cn("flex flex-col gap-10 font-sans", className), children: [
1018
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1019
+ LoanOptionGroup,
1020
+ {
1021
+ title: "Do you know what loan features you want? (e.g. offset account, redraw)",
1022
+ options: YES_NO,
1023
+ value: featuresAcknowledge,
1024
+ onChange: (v) => onFeaturesAcknowledgeChange(v)
1025
+ }
1026
+ ),
1027
+ featuresAcknowledge === "yes" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1028
+ LoanOptionGroup,
1029
+ {
1030
+ title: "What features are important to you?",
1031
+ options: LOAN_FEATURE_OPTIONS,
1032
+ value: feature,
1033
+ onChange: (v) => onFeatureChange(v)
1034
+ }
1035
+ ),
1036
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1037
+ StepNav,
1038
+ {
1039
+ onPrev,
1040
+ onNext,
1041
+ nextDisabled: !featuresAcknowledge || featuresAcknowledge === "yes" && !feature
1042
+ }
1043
+ )
1044
+ ] });
1045
+ }
1046
+ function ChevronLeftIcon({ className }) {
1047
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1048
+ "svg",
1049
+ {
1050
+ xmlns: "http://www.w3.org/2000/svg",
1051
+ viewBox: "0 0 24 24",
1052
+ fill: "none",
1053
+ stroke: "currentColor",
1054
+ strokeWidth: 2,
1055
+ strokeLinecap: "round",
1056
+ strokeLinejoin: "round",
1057
+ className,
1058
+ "aria-hidden": "true",
1059
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "m15 18-6-6 6-6" })
1060
+ }
1061
+ );
1062
+ }
1063
+ function ChevronRightIcon({ className }) {
1064
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1065
+ "svg",
1066
+ {
1067
+ xmlns: "http://www.w3.org/2000/svg",
1068
+ viewBox: "0 0 24 24",
1069
+ fill: "none",
1070
+ stroke: "currentColor",
1071
+ strokeWidth: 2,
1072
+ strokeLinecap: "round",
1073
+ strokeLinejoin: "round",
1074
+ className,
1075
+ "aria-hidden": "true",
1076
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "m9 18 6-6-6-6" })
1077
+ }
1078
+ );
1079
+ }
1080
+ function CheckboxIcon({
1081
+ checked,
1082
+ className
1083
+ }) {
1084
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1085
+ "svg",
1086
+ {
1087
+ xmlns: "http://www.w3.org/2000/svg",
1088
+ viewBox: "0 0 24 24",
1089
+ fill: "none",
1090
+ stroke: "currentColor",
1091
+ strokeWidth: 2,
1092
+ strokeLinecap: "round",
1093
+ strokeLinejoin: "round",
1094
+ className: cn(
1095
+ checked ? "text-primary" : "text-muted-foreground",
1096
+ className
1097
+ ),
1098
+ "aria-hidden": "true",
1099
+ children: checked ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
1100
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("rect", { x: "3", y: "3", width: "18", height: "18", rx: "0" }),
1101
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "m9 12 2 2 4-4" })
1102
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("rect", { x: "3", y: "3", width: "18", height: "18", rx: "0" })
1103
+ }
1104
+ );
1105
+ }
1106
+ // Annotate the CommonJS export names for ESM import in node:
1107
+ 0 && (module.exports = {
1108
+ LENDING_TYPE_OPTIONS,
1109
+ LOAN_FEATURE_OPTIONS,
1110
+ LOAN_PRIORITY_OPTIONS,
1111
+ LOAN_PURPOSE_OPTIONS,
1112
+ LoanBorrowIntendStep,
1113
+ LoanDetailsBuyStep,
1114
+ LoanDetailsRefinanceStep,
1115
+ LoanFeaturesStep,
1116
+ LoanFixedRateConcernStep,
1117
+ LoanInterestRateRaiseConcernStep,
1118
+ LoanPriorityStep,
1119
+ LoanPurposeStep,
1120
+ LoanRetirementPlanStep
1121
+ });