@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,1239 @@
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/frontend-signup-steps.tsx
60
+ var frontend_signup_steps_exports = {};
61
+ __export(frontend_signup_steps_exports, {
62
+ BrokerRequestStep: () => BrokerRequestStep,
63
+ BuyingGoalStep: () => BuyingGoalStep,
64
+ ConnectBankStep: () => ConnectBankStep,
65
+ ConnectPropertyStep: () => ConnectPropertyStep,
66
+ FrontendSuccessStep: () => FrontendSuccessStep,
67
+ PhoneVerifyStep: () => PhoneVerifyStep,
68
+ RetrieveBankDataStep: () => RetrieveBankDataStep
69
+ });
70
+ module.exports = __toCommonJS(frontend_signup_steps_exports);
71
+ var import_react5 = require("react");
72
+ var import_lucide_react8 = require("lucide-react");
73
+
74
+ // src/components/ui/form-primitives.tsx
75
+ var React3 = __toESM(require("react"));
76
+ var import_lucide_react = require("lucide-react");
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/input.tsx
118
+ var import_jsx_runtime = require("react/jsx-runtime");
119
+ function Input(_a) {
120
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
121
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
122
+ "input",
123
+ __spreadValues({
124
+ className: cn(
125
+ "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",
126
+ "focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20",
127
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
128
+ className
129
+ ),
130
+ "data-slot": "input",
131
+ type
132
+ }, props)
133
+ );
134
+ }
135
+
136
+ // src/components/ui/label.tsx
137
+ var import_jsx_runtime2 = (
138
+ // eslint-disable-next-line jsx-a11y/label-has-associated-control -- htmlFor is passed by the consumer
139
+ require("react/jsx-runtime")
140
+ );
141
+ function Label(_a) {
142
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
143
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
144
+ "label",
145
+ __spreadValues({
146
+ className: cn(
147
+ "flex items-center gap-2 text-label-medium leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
148
+ className
149
+ ),
150
+ "data-slot": "label"
151
+ }, props)
152
+ );
153
+ }
154
+
155
+ // src/components/ui/slider.tsx
156
+ var React = __toESM(require("react"));
157
+ var import_slider = require("@base-ui/react/slider");
158
+ var import_jsx_runtime3 = require("react/jsx-runtime");
159
+ var Slider = React.forwardRef(
160
+ ({
161
+ className,
162
+ value,
163
+ defaultValue = 0,
164
+ min = 0,
165
+ max = 100,
166
+ step = 1,
167
+ disabled = false,
168
+ onValueChange
169
+ }, ref) => {
170
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
171
+ import_slider.Slider.Root,
172
+ {
173
+ ref,
174
+ value,
175
+ defaultValue,
176
+ min,
177
+ max,
178
+ step,
179
+ disabled,
180
+ thumbAlignment: "edge",
181
+ onValueChange: (val) => onValueChange == null ? void 0 : onValueChange(val),
182
+ "data-slot": "slider",
183
+ className: cn(
184
+ "relative w-full touch-none select-none",
185
+ disabled && "opacity-50",
186
+ className
187
+ ),
188
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
189
+ import_slider.Slider.Control,
190
+ {
191
+ className: "relative flex h-5 w-full cursor-pointer items-center",
192
+ "data-slot": "slider-control",
193
+ children: [
194
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
195
+ import_slider.Slider.Track,
196
+ {
197
+ className: "relative h-2 w-full overflow-hidden rounded-full bg-muted",
198
+ "data-slot": "slider-track",
199
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
200
+ import_slider.Slider.Indicator,
201
+ {
202
+ className: "absolute h-full rounded-full bg-primary",
203
+ "data-slot": "slider-indicator"
204
+ }
205
+ )
206
+ }
207
+ ),
208
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
209
+ import_slider.Slider.Thumb,
210
+ {
211
+ className: cn(
212
+ "block size-5 rounded-full border-2 border-primary bg-background shadow-sm",
213
+ "outline-none"
214
+ ),
215
+ "data-slot": "slider-thumb"
216
+ }
217
+ )
218
+ ]
219
+ }
220
+ )
221
+ }
222
+ );
223
+ }
224
+ );
225
+ Slider.displayName = "Slider";
226
+
227
+ // src/components/ui/toggle-group.tsx
228
+ var React2 = __toESM(require("react"));
229
+ var import_toggle_group = require("@base-ui/react/toggle-group");
230
+ var import_toggle2 = require("@base-ui/react/toggle");
231
+
232
+ // src/components/ui/toggle.tsx
233
+ var import_class_variance_authority = require("class-variance-authority");
234
+ var import_toggle = require("@base-ui/react/toggle");
235
+ var import_jsx_runtime4 = require("react/jsx-runtime");
236
+ var toggleVariants = (0, import_class_variance_authority.cva)(
237
+ "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",
238
+ {
239
+ variants: {
240
+ variant: {
241
+ default: "bg-transparent hover:bg-muted hover:text-muted-foreground",
242
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
243
+ },
244
+ size: {
245
+ default: "h-9 min-w-9 px-2 text-label-large",
246
+ sm: "h-8 min-w-8 px-1.5 text-label-medium",
247
+ lg: "h-10 min-w-10 px-2.5 text-h5"
248
+ }
249
+ },
250
+ defaultVariants: {
251
+ variant: "default",
252
+ size: "default"
253
+ }
254
+ }
255
+ );
256
+
257
+ // src/components/ui/toggle-group.tsx
258
+ var import_jsx_runtime5 = require("react/jsx-runtime");
259
+ var ToggleGroupContext = React2.createContext({
260
+ size: "default",
261
+ variant: "default",
262
+ spacing: 0
263
+ });
264
+ function ToggleGroup(_a) {
265
+ var _b = _a, {
266
+ className,
267
+ variant,
268
+ size,
269
+ spacing = 0,
270
+ type,
271
+ children
272
+ } = _b, props = __objRest(_b, [
273
+ "className",
274
+ "variant",
275
+ "size",
276
+ "spacing",
277
+ "type",
278
+ "children"
279
+ ]);
280
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
281
+ import_toggle_group.ToggleGroup,
282
+ __spreadProps(__spreadValues({
283
+ className: cn(
284
+ // WealthX: removed rounded-md (sharp corners) and shadow-xs (flat panels)
285
+ "group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))]",
286
+ className
287
+ ),
288
+ "data-size": size,
289
+ "data-slot": "toggle-group",
290
+ "data-spacing": spacing,
291
+ "data-variant": variant,
292
+ multiple: type === "multiple",
293
+ style: { "--gap": spacing }
294
+ }, props), {
295
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
296
+ })
297
+ );
298
+ }
299
+ function ToggleGroupItem(_a) {
300
+ var _b = _a, {
301
+ className,
302
+ children,
303
+ variant,
304
+ size
305
+ } = _b, props = __objRest(_b, [
306
+ "className",
307
+ "children",
308
+ "variant",
309
+ "size"
310
+ ]);
311
+ const context = React2.useContext(ToggleGroupContext);
312
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
313
+ import_toggle2.Toggle,
314
+ __spreadProps(__spreadValues({
315
+ className: cn(
316
+ toggleVariants({
317
+ variant: context.variant || variant,
318
+ size: context.size || size
319
+ }),
320
+ "w-auto min-w-0 shrink-0 focus:z-10 focus-visible:z-10",
321
+ // WealthX: no rounded corners on grouped items
322
+ "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",
323
+ className
324
+ ),
325
+ "data-size": context.size || size,
326
+ "data-slot": "toggle-group-item",
327
+ "data-spacing": context.spacing,
328
+ "data-variant": context.variant || variant
329
+ }, props), {
330
+ children
331
+ })
332
+ );
333
+ }
334
+
335
+ // src/components/ui/form-primitives.tsx
336
+ var import_jsx_runtime6 = require("react/jsx-runtime");
337
+ var DEFAULT_SUGGESTIONS = [
338
+ {
339
+ id: "1",
340
+ label: "12 Harbour View Terrace, Mosman NSW 2088",
341
+ suburb: "Mosman",
342
+ state: "NSW",
343
+ postcode: "2088"
344
+ },
345
+ {
346
+ id: "2",
347
+ label: "5 Coastal Road, Manly NSW 2095",
348
+ suburb: "Manly",
349
+ state: "NSW",
350
+ postcode: "2095"
351
+ },
352
+ {
353
+ id: "3",
354
+ label: "24 Collins Street, Melbourne VIC 3000",
355
+ suburb: "Melbourne",
356
+ state: "VIC",
357
+ postcode: "3000"
358
+ },
359
+ {
360
+ id: "4",
361
+ label: "88 Pacific Highway, St Leonards NSW 2065",
362
+ suburb: "St Leonards",
363
+ state: "NSW",
364
+ postcode: "2065"
365
+ },
366
+ {
367
+ id: "5",
368
+ label: "1 Queen Street, Brisbane QLD 4000",
369
+ suburb: "Brisbane",
370
+ state: "QLD",
371
+ postcode: "4000"
372
+ }
373
+ ];
374
+ function AddressAutocomplete({
375
+ value: controlledValue,
376
+ placeholder = "Start typing an address\u2026",
377
+ suggestions = DEFAULT_SUGGESTIONS,
378
+ disabled = false,
379
+ onValueChange,
380
+ onSelect,
381
+ className
382
+ }) {
383
+ const [internalValue, setInternalValue] = React3.useState("");
384
+ const inputValue = controlledValue !== void 0 ? controlledValue : internalValue;
385
+ const [open, setOpen] = React3.useState(false);
386
+ const [activeIndex, setActiveIndex] = React3.useState(-1);
387
+ const containerRef = React3.useRef(null);
388
+ const listRef = React3.useRef(null);
389
+ const filtered = React3.useMemo(() => {
390
+ if (!inputValue.trim()) return suggestions.slice(0, 5);
391
+ const q = inputValue.toLowerCase();
392
+ return suggestions.filter((s) => s.label.toLowerCase().includes(q)).slice(0, 5);
393
+ }, [inputValue, suggestions]);
394
+ const setValue = (v) => {
395
+ if (controlledValue === void 0) setInternalValue(v);
396
+ onValueChange == null ? void 0 : onValueChange(v);
397
+ };
398
+ const handleSelect = (opt) => {
399
+ setValue(opt.label);
400
+ onSelect == null ? void 0 : onSelect(opt);
401
+ setOpen(false);
402
+ setActiveIndex(-1);
403
+ };
404
+ const handleKeyDown = (e) => {
405
+ if (!open) return;
406
+ if (e.key === "ArrowDown") {
407
+ e.preventDefault();
408
+ setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));
409
+ } else if (e.key === "ArrowUp") {
410
+ e.preventDefault();
411
+ setActiveIndex((i) => Math.max(i - 1, -1));
412
+ } else if (e.key === "Enter" && activeIndex >= 0) {
413
+ e.preventDefault();
414
+ handleSelect(filtered[activeIndex]);
415
+ } else if (e.key === "Escape") {
416
+ setOpen(false);
417
+ }
418
+ };
419
+ React3.useEffect(() => {
420
+ const handler = (e) => {
421
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
422
+ setOpen(false);
423
+ }
424
+ };
425
+ document.addEventListener("mousedown", handler);
426
+ return () => document.removeEventListener("mousedown", handler);
427
+ }, []);
428
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { ref: containerRef, className: cn("relative", className), children: [
429
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "relative", children: [
430
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground pointer-events-none" }),
431
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
432
+ Input,
433
+ {
434
+ type: "text",
435
+ value: inputValue,
436
+ placeholder,
437
+ disabled,
438
+ className: "pl-8",
439
+ onChange: (e) => {
440
+ setValue(e.target.value);
441
+ setOpen(true);
442
+ setActiveIndex(-1);
443
+ },
444
+ onFocus: () => setOpen(true),
445
+ onKeyDown: handleKeyDown,
446
+ "aria-autocomplete": "list",
447
+ "aria-expanded": open
448
+ }
449
+ )
450
+ ] }),
451
+ open && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
452
+ "ul",
453
+ {
454
+ ref: listRef,
455
+ role: "listbox",
456
+ className: cn(
457
+ "absolute z-50 top-full left-0 right-0 mt-1",
458
+ "border border-border bg-popover shadow-md",
459
+ "max-h-48 overflow-y-auto py-1"
460
+ ),
461
+ children: filtered.map((opt, idx) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
462
+ "li",
463
+ {
464
+ role: "option",
465
+ "aria-selected": idx === activeIndex,
466
+ onMouseEnter: () => setActiveIndex(idx),
467
+ onMouseDown: (e) => {
468
+ e.preventDefault();
469
+ handleSelect(opt);
470
+ },
471
+ className: cn(
472
+ "flex items-center gap-2 px-3 py-2 text-sm cursor-pointer",
473
+ idx === activeIndex ? "bg-accent text-accent-foreground" : "hover:bg-accent/50"
474
+ ),
475
+ children: [
476
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "flex-1 truncate", children: opt.label }),
477
+ idx === activeIndex && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.Check, { className: "h-3.5 w-3.5 shrink-0 text-primary" })
478
+ ]
479
+ },
480
+ opt.id
481
+ ))
482
+ }
483
+ )
484
+ ] });
485
+ }
486
+
487
+ // src/components/ui/button.tsx
488
+ var import_react = require("react");
489
+ var import_class_variance_authority2 = require("class-variance-authority");
490
+ var import_lucide_react2 = require("lucide-react");
491
+
492
+ // src/lib/slot.tsx
493
+ var React4 = __toESM(require("react"));
494
+ function mergeRefs(...refs) {
495
+ return (value) => {
496
+ for (const ref of refs) {
497
+ if (typeof ref === "function") ref(value);
498
+ else if (ref !== null)
499
+ ref.current = value;
500
+ }
501
+ };
502
+ }
503
+ var Slot = React4.forwardRef(
504
+ (_a, forwardedRef) => {
505
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
506
+ const child = React4.Children.only(children);
507
+ if (!React4.isValidElement(child)) return null;
508
+ const childProps = child.props;
509
+ const merged = __spreadValues({}, props);
510
+ for (const key of Object.keys(childProps)) {
511
+ if (key === "className") {
512
+ merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
513
+ } else if (key === "style") {
514
+ merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
515
+ } else if (key.startsWith("on") && typeof childProps[key] === "function") {
516
+ const parentHandler = props[key];
517
+ if (typeof parentHandler === "function") {
518
+ merged[key] = (...args) => {
519
+ childProps[key](...args);
520
+ parentHandler(...args);
521
+ };
522
+ } else {
523
+ merged[key] = childProps[key];
524
+ }
525
+ } else {
526
+ merged[key] = childProps[key];
527
+ }
528
+ }
529
+ const childRef = child.ref;
530
+ merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
531
+ return React4.cloneElement(
532
+ child,
533
+ merged
534
+ );
535
+ }
536
+ );
537
+ Slot.displayName = "Slot";
538
+
539
+ // src/components/ui/button.tsx
540
+ var import_jsx_runtime7 = require("react/jsx-runtime");
541
+ var buttonVariants = (0, import_class_variance_authority2.cva)(
542
+ "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",
543
+ {
544
+ variants: {
545
+ variant: {
546
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
547
+ secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
548
+ 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",
549
+ 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",
550
+ "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
551
+ "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",
552
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
553
+ link: "text-primary underline-offset-4 hover:underline"
554
+ },
555
+ size: {
556
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
557
+ xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
558
+ sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
559
+ lg: "h-10 px-6 has-[>svg]:px-4",
560
+ icon: "size-9",
561
+ "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
562
+ "icon-sm": "size-8",
563
+ "icon-lg": "size-10"
564
+ }
565
+ },
566
+ defaultVariants: {
567
+ variant: "default",
568
+ size: "default"
569
+ }
570
+ }
571
+ );
572
+ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
573
+ var _b = _a, {
574
+ className,
575
+ variant,
576
+ size,
577
+ asChild = false,
578
+ loading = false,
579
+ disabled,
580
+ type = "button",
581
+ children
582
+ } = _b, props = __objRest(_b, [
583
+ "className",
584
+ "variant",
585
+ "size",
586
+ "asChild",
587
+ "loading",
588
+ "disabled",
589
+ "type",
590
+ "children"
591
+ ]);
592
+ const Comp = asChild ? Slot : "button";
593
+ const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
594
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
595
+ Comp,
596
+ __spreadProps(__spreadValues({
597
+ className: cn(buttonVariants({ variant, size, className })),
598
+ "data-size": size,
599
+ "data-slot": "button",
600
+ "data-variant": variant,
601
+ disabled: loading || disabled,
602
+ ref,
603
+ type
604
+ }, props), {
605
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
606
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
607
+ !isIconOnly && children
608
+ ] }) : children
609
+ })
610
+ );
611
+ });
612
+
613
+ // src/components/ui/spinner.tsx
614
+ var import_class_variance_authority3 = require("class-variance-authority");
615
+ var import_lucide_react3 = require("lucide-react");
616
+ var import_jsx_runtime8 = require("react/jsx-runtime");
617
+ var spinnerVariants = (0, import_class_variance_authority3.cva)("animate-spin shrink-0", {
618
+ variants: {
619
+ size: {
620
+ sm: "size-3",
621
+ default: "size-4",
622
+ lg: "size-6",
623
+ xl: "size-8"
624
+ }
625
+ },
626
+ defaultVariants: {
627
+ size: "default"
628
+ }
629
+ });
630
+ function Spinner(_a) {
631
+ var _b = _a, { className, size } = _b, props = __objRest(_b, ["className", "size"]);
632
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
633
+ import_lucide_react3.LoaderCircle,
634
+ __spreadValues({
635
+ "aria-hidden": "true",
636
+ className: cn(spinnerVariants({ size }), className),
637
+ "data-slot": "spinner"
638
+ }, props)
639
+ );
640
+ }
641
+
642
+ // src/components/ui/input-otp.tsx
643
+ var React5 = __toESM(require("react"));
644
+ var import_input_otp = require("input-otp");
645
+ var import_lucide_react4 = require("lucide-react");
646
+ var import_jsx_runtime9 = require("react/jsx-runtime");
647
+ function InputOTP(_a) {
648
+ var _b = _a, {
649
+ className,
650
+ containerClassName
651
+ } = _b, props = __objRest(_b, [
652
+ "className",
653
+ "containerClassName"
654
+ ]);
655
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
656
+ import_input_otp.OTPInput,
657
+ __spreadValues({
658
+ className: cn("disabled:cursor-not-allowed", className),
659
+ containerClassName: cn(
660
+ "flex items-center gap-2 has-disabled:opacity-50",
661
+ containerClassName
662
+ ),
663
+ "data-slot": "input-otp"
664
+ }, props)
665
+ );
666
+ }
667
+ function InputOTPGroup(_a) {
668
+ var _b = _a, {
669
+ className
670
+ } = _b, props = __objRest(_b, [
671
+ "className"
672
+ ]);
673
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
674
+ "div",
675
+ __spreadValues({
676
+ className: cn("flex items-center", className),
677
+ "data-slot": "input-otp-group"
678
+ }, props)
679
+ );
680
+ }
681
+ function InputOTPSlot(_a) {
682
+ var _b = _a, {
683
+ index,
684
+ className
685
+ } = _b, props = __objRest(_b, [
686
+ "index",
687
+ "className"
688
+ ]);
689
+ var _a2;
690
+ const inputOTPContext = React5.useContext(import_input_otp.OTPInputContext);
691
+ const { char, hasFakeCaret, isActive } = (_a2 = inputOTPContext.slots[index]) != null ? _a2 : {};
692
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
693
+ "div",
694
+ __spreadProps(__spreadValues({
695
+ className: cn(
696
+ "relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-body-small shadow-xs transition-all outline-none first:border-l aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40",
697
+ className
698
+ ),
699
+ "data-active": isActive,
700
+ "data-slot": "input-otp-slot"
701
+ }, props), {
702
+ children: [
703
+ char,
704
+ hasFakeCaret ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) }) : null
705
+ ]
706
+ })
707
+ );
708
+ }
709
+ function InputOTPSeparator(_a) {
710
+ var props = __objRest(_a, []);
711
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", __spreadProps(__spreadValues({ "data-slot": "input-otp-separator", role: "separator" }, props), { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react4.MinusIcon, {}) }));
712
+ }
713
+
714
+ // src/components/ui/signup-form-primitives.tsx
715
+ var import_react4 = require("react");
716
+ var import_lucide_react7 = require("lucide-react");
717
+
718
+ // src/components/ui/field.tsx
719
+ var import_react2 = require("react");
720
+ var import_class_variance_authority4 = require("class-variance-authority");
721
+
722
+ // src/components/ui/separator.tsx
723
+ var import_separator = require("@base-ui/react/separator");
724
+ var import_jsx_runtime10 = require("react/jsx-runtime");
725
+
726
+ // src/components/ui/field.tsx
727
+ var import_jsx_runtime11 = require("react/jsx-runtime");
728
+ var fieldVariants = (0, import_class_variance_authority4.cva)(
729
+ "group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
730
+ {
731
+ variants: {
732
+ orientation: {
733
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
734
+ horizontal: [
735
+ "flex-row items-center",
736
+ "[&>[data-slot=field-label]]:flex-auto",
737
+ "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
738
+ ],
739
+ responsive: [
740
+ "flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto",
741
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
742
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
743
+ ]
744
+ }
745
+ },
746
+ defaultVariants: {
747
+ orientation: "vertical"
748
+ }
749
+ }
750
+ );
751
+ function Field(_a) {
752
+ var _b = _a, {
753
+ className,
754
+ orientation = "vertical"
755
+ } = _b, props = __objRest(_b, [
756
+ "className",
757
+ "orientation"
758
+ ]);
759
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
760
+ "div",
761
+ __spreadValues({
762
+ className: cn(fieldVariants({ orientation }), className),
763
+ "data-orientation": orientation,
764
+ "data-slot": "field",
765
+ role: "group"
766
+ }, props)
767
+ );
768
+ }
769
+ function FieldLabel(_a) {
770
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
771
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
772
+ Label,
773
+ __spreadValues({
774
+ className: cn(
775
+ "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
776
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4",
777
+ "has-data-checked:border-primary has-data-checked:bg-primary/5 dark:has-data-checked:bg-primary/10",
778
+ className
779
+ ),
780
+ "data-slot": "field-label"
781
+ }, props)
782
+ );
783
+ }
784
+
785
+ // src/components/ui/select.tsx
786
+ var import_lucide_react5 = require("lucide-react");
787
+ var import_select = require("@base-ui/react/select");
788
+
789
+ // src/lib/theme-provider.tsx
790
+ var import_react3 = require("react");
791
+ var import_jsx_runtime12 = require("react/jsx-runtime");
792
+ var ThemeVarsContext = (0, import_react3.createContext)({});
793
+
794
+ // src/components/ui/select.tsx
795
+ var import_jsx_runtime13 = require("react/jsx-runtime");
796
+
797
+ // src/components/ui/password-strength-tooltip.tsx
798
+ var import_lucide_react6 = require("lucide-react");
799
+
800
+ // src/components/ui/popover.tsx
801
+ var import_popover = require("@base-ui/react/popover");
802
+ var import_jsx_runtime14 = require("react/jsx-runtime");
803
+
804
+ // src/components/ui/password-strength-tooltip.tsx
805
+ var import_jsx_runtime15 = require("react/jsx-runtime");
806
+
807
+ // src/components/ui/signup-form-primitives.tsx
808
+ var import_jsx_runtime16 = require("react/jsx-runtime");
809
+ function FormField({ label, required, children }) {
810
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Field, { children: [
811
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(FieldLabel, { children: [
812
+ label,
813
+ required && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-destructive ml-0.5", children: "*" })
814
+ ] }),
815
+ children
816
+ ] });
817
+ }
818
+
819
+ // src/components/ui/frontend-signup-steps.tsx
820
+ var import_jsx_runtime17 = require("react/jsx-runtime");
821
+ var fmt = (v) => new Intl.NumberFormat("en-AU", {
822
+ style: "currency",
823
+ currency: "AUD",
824
+ maximumFractionDigits: 0
825
+ }).format(v);
826
+ var GOAL_MIN = 5e4;
827
+ var GOAL_MAX = 4e6;
828
+ var GOAL_STEP = 1e4;
829
+ function PhoneVerifyStep({
830
+ phone = "+61 412 345 789",
831
+ countdown = 45,
832
+ error = "",
833
+ isLoading = false,
834
+ onVerify,
835
+ onResend
836
+ }) {
837
+ const [otp, setOtp] = (0, import_react5.useState)("");
838
+ const [timer, setTimer] = (0, import_react5.useState)(countdown);
839
+ (0, import_react5.useEffect)(() => {
840
+ if (timer <= 0) return;
841
+ const id = setInterval(() => setTimer((t) => t - 1), 1e3);
842
+ return () => clearInterval(id);
843
+ }, [timer]);
844
+ const handleChange = (value) => {
845
+ setOtp(value);
846
+ if (value.length === 6) onVerify == null ? void 0 : onVerify(value);
847
+ };
848
+ const lastFour = phone.slice(-4);
849
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-6", children: [
850
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-1", children: [
851
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-2xl font-bold text-foreground", children: "We sent you a text." }),
852
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
853
+ "Number we have ends in \u2022\u2022\u2022\u2022 ",
854
+ lastFour,
855
+ "."
856
+ ] })
857
+ ] }),
858
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-3", children: [
859
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
860
+ InputOTP,
861
+ {
862
+ maxLength: 6,
863
+ value: otp,
864
+ onChange: handleChange,
865
+ disabled: isLoading,
866
+ "aria-label": "6-digit verification code",
867
+ children: [
868
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(InputOTPGroup, { children: [
869
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(InputOTPSlot, { index: 0, "aria-invalid": !!error || void 0 }),
870
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(InputOTPSlot, { index: 1, "aria-invalid": !!error || void 0 }),
871
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(InputOTPSlot, { index: 2, "aria-invalid": !!error || void 0 })
872
+ ] }),
873
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(InputOTPSeparator, {}),
874
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(InputOTPGroup, { children: [
875
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(InputOTPSlot, { index: 3, "aria-invalid": !!error || void 0 }),
876
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(InputOTPSlot, { index: 4, "aria-invalid": !!error || void 0 }),
877
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(InputOTPSlot, { index: 5, "aria-invalid": !!error || void 0 })
878
+ ] })
879
+ ]
880
+ }
881
+ ),
882
+ error && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: error })
883
+ ] }),
884
+ isLoading ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
885
+ "div",
886
+ {
887
+ role: "status",
888
+ "aria-label": "Verifying code",
889
+ className: "flex items-center gap-2 text-sm text-muted-foreground",
890
+ children: [
891
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Spinner, { className: "size-4" }) }),
892
+ "Verifying\u2026"
893
+ ]
894
+ }
895
+ ) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "text-sm text-muted-foreground", "aria-live": "polite", children: [
896
+ "Didn't receive a code?",
897
+ " ",
898
+ timer > 0 ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { children: [
899
+ "Resend it in ",
900
+ timer,
901
+ "s"
902
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
903
+ Button,
904
+ {
905
+ variant: "link",
906
+ size: "sm",
907
+ className: "h-auto p-0 text-sm",
908
+ onClick: () => {
909
+ setTimer(60);
910
+ onResend == null ? void 0 : onResend();
911
+ },
912
+ children: "Resend it"
913
+ }
914
+ )
915
+ ] })
916
+ ] });
917
+ }
918
+ function BrokerRequestStep({ onValuesChange }) {
919
+ const [values, setValues] = (0, import_react5.useState)({
920
+ firstName: "",
921
+ lastName: "",
922
+ email: "",
923
+ phone: ""
924
+ });
925
+ const update = (field, value) => {
926
+ setValues((prev) => {
927
+ const next = __spreadProps(__spreadValues({}, prev), { [field]: value });
928
+ onValuesChange == null ? void 0 : onValuesChange(next);
929
+ return next;
930
+ });
931
+ };
932
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-6", children: [
933
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm text-muted-foreground", children: "You have access for the first 3 months covered by us. After this date you will need to be connected with a mortgage broker or financial planner to maintain access." }),
934
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-4", children: [
935
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex gap-4", children: [
936
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FormField, { label: "First Name", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
937
+ Input,
938
+ {
939
+ id: "broker-first-name",
940
+ autoComplete: "given-name",
941
+ placeholder: "First Name",
942
+ value: values.firstName,
943
+ onChange: (e) => update("firstName", e.target.value)
944
+ }
945
+ ) }),
946
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FormField, { label: "Last Name", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
947
+ Input,
948
+ {
949
+ id: "broker-last-name",
950
+ autoComplete: "family-name",
951
+ placeholder: "Last Name",
952
+ value: values.lastName,
953
+ onChange: (e) => update("lastName", e.target.value)
954
+ }
955
+ ) })
956
+ ] }),
957
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FormField, { label: "Email Address", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
958
+ Input,
959
+ {
960
+ id: "broker-email",
961
+ type: "email",
962
+ autoComplete: "email",
963
+ placeholder: "Email Address",
964
+ value: values.email,
965
+ onChange: (e) => update("email", e.target.value)
966
+ }
967
+ ) }),
968
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FormField, { label: "Phone Number", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
969
+ Input,
970
+ {
971
+ id: "broker-phone",
972
+ type: "tel",
973
+ autoComplete: "tel",
974
+ placeholder: "Phone Number",
975
+ value: values.phone,
976
+ onChange: (e) => update("phone", e.target.value)
977
+ }
978
+ ) })
979
+ ] })
980
+ ] });
981
+ }
982
+ var BANKS = ["CBA", "ANZ", "NAB", "WBC", "MAC", "BOQ"];
983
+ function ConnectBankStep({ onConnect }) {
984
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex flex-col gap-6", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
985
+ "button",
986
+ {
987
+ type: "button",
988
+ "aria-label": "Connect your bank account",
989
+ onClick: onConnect,
990
+ className: "flex flex-col gap-4 border border-border p-6 text-left transition-colors hover:border-primary/60",
991
+ children: [
992
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "grid grid-cols-3 gap-3", "aria-hidden": "true", children: BANKS.map((abbr) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
993
+ "div",
994
+ {
995
+ className: "flex h-14 items-center justify-center border border-border bg-muted/30",
996
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-sm font-semibold text-foreground", children: abbr })
997
+ },
998
+ abbr
999
+ )) }),
1000
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center justify-between", children: [
1001
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-sm font-semibold text-foreground", children: "Connect Bank" }),
1002
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1003
+ "div",
1004
+ {
1005
+ "aria-hidden": "true",
1006
+ className: "flex h-7 w-7 items-center justify-center bg-primary text-primary-foreground",
1007
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.PlusIcon, { className: "size-4" })
1008
+ }
1009
+ )
1010
+ ] })
1011
+ ]
1012
+ }
1013
+ ) });
1014
+ }
1015
+ function RetrieveBankDataStep() {
1016
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1017
+ "div",
1018
+ {
1019
+ role: "status",
1020
+ "aria-label": "Retrieving bank data",
1021
+ className: "flex flex-col items-center justify-center gap-4 py-16 text-center",
1022
+ children: [
1023
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Spinner, { className: "size-10 text-primary" }) }),
1024
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-1", children: [
1025
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-base font-semibold text-foreground", children: "Retrieving your bank data\u2026" }),
1026
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm text-muted-foreground", children: "This may take a few seconds. Please don't close this window." })
1027
+ ] })
1028
+ ]
1029
+ }
1030
+ );
1031
+ }
1032
+ function ConnectPropertyStep({
1033
+ properties = [],
1034
+ onAddProperty,
1035
+ onCanProceedChange,
1036
+ onGoalChange
1037
+ }) {
1038
+ const [hasProperty, setHasProperty] = (0, import_react5.useState)(null);
1039
+ const [addressValue, setAddressValue] = (0, import_react5.useState)("");
1040
+ const [goalValue, setGoalValue] = (0, import_react5.useState)(2e6);
1041
+ const canProceed = hasProperty === false || hasProperty === true && properties.length > 0;
1042
+ (0, import_react5.useEffect)(() => {
1043
+ onCanProceedChange == null ? void 0 : onCanProceedChange(canProceed);
1044
+ }, [canProceed]);
1045
+ const handleGoalChange = (v) => {
1046
+ setGoalValue(v);
1047
+ onGoalChange == null ? void 0 : onGoalChange(v);
1048
+ };
1049
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-6", children: [
1050
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1051
+ ToggleGroup,
1052
+ {
1053
+ type: "single",
1054
+ variant: "outline",
1055
+ "aria-label": "Do you own a property?",
1056
+ value: hasProperty === true ? ["yes"] : hasProperty === false ? ["no"] : [],
1057
+ onValueChange: (vals) => {
1058
+ const val = vals[0];
1059
+ setHasProperty(val === "yes" ? true : val === "no" ? false : null);
1060
+ },
1061
+ className: "w-full",
1062
+ children: [
1063
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ToggleGroupItem, { value: "yes", className: "flex-1", children: "Yes, I have a property" }),
1064
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ToggleGroupItem, { value: "no", className: "flex-1", children: "No, I don't" })
1065
+ ]
1066
+ }
1067
+ ),
1068
+ hasProperty === true && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1069
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1070
+ AddressAutocomplete,
1071
+ {
1072
+ value: addressValue,
1073
+ onValueChange: setAddressValue,
1074
+ onSelect: (opt) => {
1075
+ onAddProperty == null ? void 0 : onAddProperty(opt.label);
1076
+ setAddressValue("");
1077
+ }
1078
+ }
1079
+ ),
1080
+ properties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ul", { role: "list", className: "flex flex-col gap-2", children: properties.map((p) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1081
+ "li",
1082
+ {
1083
+ className: "flex items-center justify-between border border-border px-4 py-3",
1084
+ children: [
1085
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-3", children: [
1086
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1087
+ import_lucide_react8.HomeIcon,
1088
+ {
1089
+ "aria-hidden": "true",
1090
+ className: "size-4 shrink-0 text-muted-foreground"
1091
+ }
1092
+ ),
1093
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { children: [
1094
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm font-medium text-foreground", children: p.address }),
1095
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1096
+ p.suburb,
1097
+ ", ",
1098
+ p.state
1099
+ ] })
1100
+ ] })
1101
+ ] }),
1102
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1103
+ import_lucide_react8.CheckIcon,
1104
+ {
1105
+ "aria-hidden": "true",
1106
+ className: "size-4 text-success"
1107
+ }
1108
+ )
1109
+ ]
1110
+ },
1111
+ p.id
1112
+ )) })
1113
+ ] }),
1114
+ hasProperty === false && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-4 border border-border p-6", children: [
1115
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-1", children: [
1116
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm font-medium text-foreground", children: "What's your property budget?" }),
1117
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-xs text-muted-foreground", children: "Set your estimated buying goal to help us tailor your experience." })
1118
+ ] }),
1119
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1120
+ "p",
1121
+ {
1122
+ "aria-live": "polite",
1123
+ className: "tabular-nums text-3xl font-bold text-foreground",
1124
+ children: fmt(goalValue)
1125
+ }
1126
+ ),
1127
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1128
+ Slider,
1129
+ {
1130
+ min: GOAL_MIN,
1131
+ max: GOAL_MAX,
1132
+ step: GOAL_STEP,
1133
+ value: goalValue,
1134
+ onValueChange: handleGoalChange,
1135
+ "aria-label": "Property buying goal"
1136
+ }
1137
+ ),
1138
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1139
+ "div",
1140
+ {
1141
+ "aria-hidden": "true",
1142
+ className: "flex justify-between text-xs text-muted-foreground",
1143
+ children: [
1144
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: fmt(GOAL_MIN) }),
1145
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: fmt(GOAL_MAX) })
1146
+ ]
1147
+ }
1148
+ )
1149
+ ] })
1150
+ ] });
1151
+ }
1152
+ function BuyingGoalStep({
1153
+ initialValue = 2e6,
1154
+ isLoading = false,
1155
+ onConfirm
1156
+ }) {
1157
+ const [value, setValue] = (0, import_react5.useState)(initialValue);
1158
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex flex-col gap-8", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-6 border border-border p-6", children: [
1159
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center justify-between", children: [
1160
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1161
+ "p",
1162
+ {
1163
+ "aria-live": "polite",
1164
+ className: "tabular-nums text-3xl font-bold text-foreground",
1165
+ children: fmt(value)
1166
+ }
1167
+ ),
1168
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1169
+ Button,
1170
+ {
1171
+ variant: "default",
1172
+ onClick: () => onConfirm == null ? void 0 : onConfirm(value),
1173
+ disabled: isLoading,
1174
+ children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1175
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Spinner, { className: "size-4" }) }),
1176
+ "Adding\u2026"
1177
+ ] }) : "Confirm"
1178
+ }
1179
+ )
1180
+ ] }),
1181
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1182
+ Slider,
1183
+ {
1184
+ min: GOAL_MIN,
1185
+ max: GOAL_MAX,
1186
+ step: GOAL_STEP,
1187
+ value,
1188
+ onValueChange: (v) => setValue(v),
1189
+ disabled: isLoading,
1190
+ "aria-label": "Buying goal"
1191
+ }
1192
+ ),
1193
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1194
+ "div",
1195
+ {
1196
+ "aria-hidden": "true",
1197
+ className: "flex justify-between text-xs text-muted-foreground",
1198
+ children: [
1199
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: fmt(GOAL_MIN) }),
1200
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: fmt(GOAL_MAX) })
1201
+ ]
1202
+ }
1203
+ )
1204
+ ] }) });
1205
+ }
1206
+ function FrontendSuccessStep({
1207
+ firstName = "Alex",
1208
+ onGoToDashboard
1209
+ }) {
1210
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex min-h-full flex-col items-center justify-center gap-6 px-4 py-16 text-center", children: [
1211
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1212
+ "div",
1213
+ {
1214
+ "aria-hidden": "true",
1215
+ className: "flex size-16 items-center justify-center bg-success/10",
1216
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.CheckIcon, { className: "size-8 text-success", strokeWidth: 2 })
1217
+ }
1218
+ ),
1219
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col gap-2", children: [
1220
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("h2", { className: "text-2xl font-bold text-foreground", children: [
1221
+ "You're all set, ",
1222
+ firstName,
1223
+ "!"
1224
+ ] }),
1225
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "max-w-[360px] text-sm text-muted-foreground", children: "Your account is ready. Head to your dashboard to explore your financial overview and next steps." })
1226
+ ] }),
1227
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: "default", size: "lg", onClick: onGoToDashboard, children: "Go to Dashboard" })
1228
+ ] });
1229
+ }
1230
+ // Annotate the CommonJS export names for ESM import in node:
1231
+ 0 && (module.exports = {
1232
+ BrokerRequestStep,
1233
+ BuyingGoalStep,
1234
+ ConnectBankStep,
1235
+ ConnectPropertyStep,
1236
+ FrontendSuccessStep,
1237
+ PhoneVerifyStep,
1238
+ RetrieveBankDataStep
1239
+ });