@wealthx/shadcn 1.4.0 → 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 +12 -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,1673 @@
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/backoffice-signup-steps.tsx
60
+ var backoffice_signup_steps_exports = {};
61
+ __export(backoffice_signup_steps_exports, {
62
+ BackofficeSuccessStep: () => BackofficeSuccessStep,
63
+ BrandingInfoStep: () => BrandingInfoStep,
64
+ CompanyInfoStep: () => CompanyInfoStep,
65
+ InviteStaffView: () => InviteStaffView,
66
+ PaymentView: () => PaymentView,
67
+ PersonalDetailsStep: () => PersonalDetailsStep,
68
+ StripeView: () => StripeView
69
+ });
70
+ module.exports = __toCommonJS(backoffice_signup_steps_exports);
71
+ var import_react6 = __toESM(require("react"));
72
+ var import_lucide_react7 = require("lucide-react");
73
+
74
+ // src/components/ui/button.tsx
75
+ var import_react = require("react");
76
+ var import_class_variance_authority = require("class-variance-authority");
77
+ var import_lucide_react = require("lucide-react");
78
+
79
+ // src/lib/utils.ts
80
+ var import_clsx = require("clsx");
81
+ var import_tailwind_merge = require("tailwind-merge");
82
+ var twMerge = (0, import_tailwind_merge.extendTailwindMerge)({
83
+ extend: {
84
+ classGroups: {
85
+ "font-size": [
86
+ {
87
+ text: [
88
+ "display-large",
89
+ "display-medium",
90
+ "display-small",
91
+ "h1",
92
+ "h2",
93
+ "h3",
94
+ "h4",
95
+ "h5",
96
+ "h6",
97
+ "body-large",
98
+ "body-medium",
99
+ "body-small",
100
+ "label-large",
101
+ "label-medium",
102
+ "label-small",
103
+ "button",
104
+ "button-xs",
105
+ "caption",
106
+ "overline",
107
+ "code"
108
+ ]
109
+ }
110
+ ]
111
+ }
112
+ }
113
+ });
114
+ function cn(...inputs) {
115
+ return twMerge((0, import_clsx.clsx)(inputs));
116
+ }
117
+
118
+ // src/lib/slot.tsx
119
+ var React = __toESM(require("react"));
120
+ function mergeRefs(...refs) {
121
+ return (value) => {
122
+ for (const ref of refs) {
123
+ if (typeof ref === "function") ref(value);
124
+ else if (ref !== null)
125
+ ref.current = value;
126
+ }
127
+ };
128
+ }
129
+ var Slot = React.forwardRef(
130
+ (_a, forwardedRef) => {
131
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
132
+ const child = React.Children.only(children);
133
+ if (!React.isValidElement(child)) return null;
134
+ const childProps = child.props;
135
+ const merged = __spreadValues({}, props);
136
+ for (const key of Object.keys(childProps)) {
137
+ if (key === "className") {
138
+ merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
139
+ } else if (key === "style") {
140
+ merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
141
+ } else if (key.startsWith("on") && typeof childProps[key] === "function") {
142
+ const parentHandler = props[key];
143
+ if (typeof parentHandler === "function") {
144
+ merged[key] = (...args) => {
145
+ childProps[key](...args);
146
+ parentHandler(...args);
147
+ };
148
+ } else {
149
+ merged[key] = childProps[key];
150
+ }
151
+ } else {
152
+ merged[key] = childProps[key];
153
+ }
154
+ }
155
+ const childRef = child.ref;
156
+ merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
157
+ return React.cloneElement(
158
+ child,
159
+ merged
160
+ );
161
+ }
162
+ );
163
+ Slot.displayName = "Slot";
164
+
165
+ // src/components/ui/button.tsx
166
+ var import_jsx_runtime = require("react/jsx-runtime");
167
+ var buttonVariants = (0, import_class_variance_authority.cva)(
168
+ "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",
169
+ {
170
+ variants: {
171
+ variant: {
172
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
173
+ secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
174
+ 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",
175
+ 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",
176
+ "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
177
+ "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",
178
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
179
+ link: "text-primary underline-offset-4 hover:underline"
180
+ },
181
+ size: {
182
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
183
+ xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
184
+ sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
185
+ lg: "h-10 px-6 has-[>svg]:px-4",
186
+ icon: "size-9",
187
+ "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
188
+ "icon-sm": "size-8",
189
+ "icon-lg": "size-10"
190
+ }
191
+ },
192
+ defaultVariants: {
193
+ variant: "default",
194
+ size: "default"
195
+ }
196
+ }
197
+ );
198
+ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
199
+ var _b = _a, {
200
+ className,
201
+ variant,
202
+ size,
203
+ asChild = false,
204
+ loading = false,
205
+ disabled,
206
+ type = "button",
207
+ children
208
+ } = _b, props = __objRest(_b, [
209
+ "className",
210
+ "variant",
211
+ "size",
212
+ "asChild",
213
+ "loading",
214
+ "disabled",
215
+ "type",
216
+ "children"
217
+ ]);
218
+ const Comp = asChild ? Slot : "button";
219
+ const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
220
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
221
+ Comp,
222
+ __spreadProps(__spreadValues({
223
+ className: cn(buttonVariants({ variant, size, className })),
224
+ "data-size": size,
225
+ "data-slot": "button",
226
+ "data-variant": variant,
227
+ disabled: loading || disabled,
228
+ ref,
229
+ type
230
+ }, props), {
231
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
232
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
233
+ !isIconOnly && children
234
+ ] }) : children
235
+ })
236
+ );
237
+ });
238
+
239
+ // src/components/ui/checkbox.tsx
240
+ var import_react2 = require("react");
241
+ var import_lucide_react2 = require("lucide-react");
242
+ var import_checkbox = require("@base-ui/react/checkbox");
243
+ var import_jsx_runtime2 = require("react/jsx-runtime");
244
+ function Checkbox(_a) {
245
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
246
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
247
+ import_checkbox.Checkbox.Root,
248
+ __spreadProps(__spreadValues({
249
+ className: cn(
250
+ "peer group inline-flex size-4 shrink-0 border border-input shadow-xs transition-all outline-none",
251
+ "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
252
+ "disabled:cursor-not-allowed disabled:opacity-50",
253
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20",
254
+ "data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground",
255
+ "data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground",
256
+ // Dark mode (upstream shadcn)
257
+ "dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-checked:bg-primary",
258
+ // Stacked (2 attr selectors) → wins over single-attr rules above
259
+ "aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive aria-invalid:data-checked:text-destructive-foreground",
260
+ "aria-invalid:data-indeterminate:border-destructive aria-invalid:data-indeterminate:bg-destructive aria-invalid:data-indeterminate:text-destructive-foreground",
261
+ className
262
+ ),
263
+ "data-slot": "checkbox"
264
+ }, props), {
265
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
266
+ import_checkbox.Checkbox.Indicator,
267
+ {
268
+ className: "grid place-content-center text-current transition-none",
269
+ "data-slot": "checkbox-indicator",
270
+ children: [
271
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react2.CheckIcon, { className: "size-3.5 group-data-indeterminate:hidden" }),
272
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react2.MinusIcon, { className: "size-3.5 hidden group-data-indeterminate:block" })
273
+ ]
274
+ }
275
+ )
276
+ })
277
+ );
278
+ }
279
+
280
+ // src/components/ui/color-picker.tsx
281
+ var React3 = __toESM(require("react"));
282
+
283
+ // src/components/ui/popover.tsx
284
+ var import_popover = require("@base-ui/react/popover");
285
+
286
+ // src/lib/theme-provider.tsx
287
+ var import_react3 = require("react");
288
+ var import_jsx_runtime3 = require("react/jsx-runtime");
289
+ var ThemeVarsContext = (0, import_react3.createContext)({});
290
+ function useThemeVars() {
291
+ return (0, import_react3.useContext)(ThemeVarsContext);
292
+ }
293
+
294
+ // src/components/ui/popover.tsx
295
+ var import_jsx_runtime4 = require("react/jsx-runtime");
296
+ function Popover(_a) {
297
+ var props = __objRest(_a, []);
298
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
299
+ }
300
+ function PopoverTrigger(_a) {
301
+ var props = __objRest(_a, []);
302
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
303
+ }
304
+ function PopoverContent(_a) {
305
+ var _b = _a, {
306
+ className,
307
+ align = "center",
308
+ sideOffset = 4,
309
+ style
310
+ } = _b, props = __objRest(_b, [
311
+ "className",
312
+ "align",
313
+ "sideOffset",
314
+ "style"
315
+ ]);
316
+ const themeVars = useThemeVars();
317
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
318
+ import_popover.Popover.Positioner,
319
+ {
320
+ className: "z-[200]",
321
+ align,
322
+ sideOffset,
323
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
324
+ import_popover.Popover.Popup,
325
+ __spreadValues({
326
+ className: cn(
327
+ "z-50 w-72 border border-border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
328
+ className
329
+ ),
330
+ "data-slot": "popover-content",
331
+ style: __spreadValues(__spreadValues({}, themeVars), style)
332
+ }, props)
333
+ )
334
+ }
335
+ ) });
336
+ }
337
+
338
+ // src/components/ui/input.tsx
339
+ var import_jsx_runtime5 = require("react/jsx-runtime");
340
+ function Input(_a) {
341
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
342
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
343
+ "input",
344
+ __spreadValues({
345
+ className: cn(
346
+ "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",
347
+ "focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20",
348
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
349
+ className
350
+ ),
351
+ "data-slot": "input",
352
+ type
353
+ }, props)
354
+ );
355
+ }
356
+
357
+ // src/components/ui/color-picker.tsx
358
+ var import_jsx_runtime6 = require("react/jsx-runtime");
359
+ var COLOR_PICKER_PRESETS = [
360
+ // Blues
361
+ "#1E40AF",
362
+ "#2563EB",
363
+ "#3B82F6",
364
+ "#60A5FA",
365
+ // Purples
366
+ "#7C3AED",
367
+ "#8B5CF6",
368
+ "#A78BFA",
369
+ "#C4B5FD",
370
+ // Greens
371
+ "#15803D",
372
+ "#16A34A",
373
+ "#22C55E",
374
+ "#4ADE80",
375
+ // Reds
376
+ "#B91C1C",
377
+ "#DC2626",
378
+ "#EF4444",
379
+ "#F87171",
380
+ // Oranges
381
+ "#C2410C",
382
+ "#EA580C",
383
+ "#F97316",
384
+ "#FB923C",
385
+ // Teals
386
+ "#0F766E",
387
+ "#0D9488",
388
+ "#14B8A6",
389
+ "#2DD4BF",
390
+ // Neutrals
391
+ "#111827",
392
+ "#374151",
393
+ "#6B7280",
394
+ "#D1D5DB"
395
+ ];
396
+ function isValidHex(value) {
397
+ return /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(value);
398
+ }
399
+ function normalizeHex(value) {
400
+ const stripped = value.replace(/^#/, "");
401
+ return `#${stripped}`;
402
+ }
403
+ function ColorSwatch({
404
+ color,
405
+ selected,
406
+ size = "md",
407
+ onClick,
408
+ className
409
+ }) {
410
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
411
+ Button,
412
+ {
413
+ type: "button",
414
+ variant: "ghost",
415
+ title: color,
416
+ "aria-label": `Select color ${color}`,
417
+ "aria-pressed": selected,
418
+ onClick: () => onClick == null ? void 0 : onClick(color),
419
+ className: cn(
420
+ "relative shrink-0 p-0 transition-all outline-none shadow-[inset_0_0_0_1px_rgba(0,0,0,0.12)]",
421
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
422
+ size === "md" ? "size-7" : "size-5",
423
+ selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
424
+ className
425
+ ),
426
+ style: { backgroundColor: color }
427
+ }
428
+ );
429
+ }
430
+ function ColorPickerContent({
431
+ value,
432
+ onChange,
433
+ presets = COLOR_PICKER_PRESETS
434
+ }) {
435
+ const [hexInput, setHexInput] = React3.useState(value);
436
+ React3.useEffect(() => {
437
+ setHexInput(value);
438
+ }, [value]);
439
+ function handleHexInputChange(e) {
440
+ const raw = e.target.value;
441
+ setHexInput(raw);
442
+ const normalized = normalizeHex(raw);
443
+ if (isValidHex(normalized)) {
444
+ onChange(normalized);
445
+ }
446
+ }
447
+ function handleHexBlur() {
448
+ const normalized = normalizeHex(hexInput);
449
+ if (isValidHex(normalized)) {
450
+ setHexInput(normalized);
451
+ if (normalized !== value) onChange(normalized);
452
+ } else {
453
+ setHexInput(value);
454
+ }
455
+ }
456
+ const normalizedInput = normalizeHex(hexInput);
457
+ const isValid = isValidHex(normalizedInput);
458
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { "data-slot": "color-picker-content", className: "flex flex-col gap-4", children: [
459
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { children: [
460
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "mb-2 text-xs font-medium text-muted-foreground", children: "Presets" }),
461
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "grid grid-cols-7 gap-1.5", children: presets.map((color) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
462
+ ColorSwatch,
463
+ {
464
+ color,
465
+ selected: value.toLowerCase() === color.toLowerCase(),
466
+ onClick: onChange
467
+ },
468
+ color
469
+ )) })
470
+ ] }),
471
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { children: [
472
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "mb-2 text-xs font-medium text-muted-foreground", children: "Custom hex" }),
473
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex items-center gap-2", children: [
474
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
475
+ "label",
476
+ {
477
+ className: "relative size-9 shrink-0 cursor-pointer border border-border",
478
+ title: "Open color picker",
479
+ style: {
480
+ backgroundColor: isValid ? normalizedInput : value
481
+ },
482
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
483
+ "input",
484
+ {
485
+ type: "color",
486
+ "aria-label": "Native color picker",
487
+ value: isValid ? normalizedInput : value,
488
+ onChange: (e) => {
489
+ setHexInput(e.target.value);
490
+ onChange(e.target.value);
491
+ },
492
+ className: "absolute inset-0 h-full w-full cursor-pointer opacity-0"
493
+ }
494
+ )
495
+ }
496
+ ),
497
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
498
+ Input,
499
+ {
500
+ "aria-label": "Hex color value",
501
+ placeholder: "#000000",
502
+ value: hexInput,
503
+ onChange: handleHexInputChange,
504
+ onBlur: handleHexBlur,
505
+ maxLength: 7,
506
+ className: "h-9 flex-1 font-mono text-sm uppercase"
507
+ }
508
+ )
509
+ ] })
510
+ ] })
511
+ ] });
512
+ }
513
+ function ColorPicker({
514
+ value: controlledValue,
515
+ defaultValue = "#3B82F6",
516
+ onChange,
517
+ presets,
518
+ disabled,
519
+ label,
520
+ className
521
+ }) {
522
+ const isControlled = controlledValue !== void 0;
523
+ const [internalValue, setInternalValue] = React3.useState(defaultValue);
524
+ const color = isControlled ? controlledValue : internalValue;
525
+ const [open, setOpen] = React3.useState(false);
526
+ React3.useEffect(() => {
527
+ if (disabled) setOpen(false);
528
+ }, [disabled]);
529
+ function handleChange(newColor) {
530
+ if (!isControlled) setInternalValue(newColor);
531
+ onChange == null ? void 0 : onChange(newColor);
532
+ }
533
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
534
+ "div",
535
+ {
536
+ "data-slot": "color-picker",
537
+ className: cn("inline-flex flex-col gap-1.5 font-sans", className),
538
+ children: [
539
+ label && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
540
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
541
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
542
+ PopoverTrigger,
543
+ {
544
+ disabled,
545
+ className: cn(
546
+ "flex h-9 min-w-[140px] cursor-pointer items-center gap-2.5 border border-input bg-background px-3 text-sm outline-none transition-colors",
547
+ "hover:border-ring",
548
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
549
+ "disabled:cursor-not-allowed disabled:opacity-50"
550
+ ),
551
+ children: [
552
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
553
+ "span",
554
+ {
555
+ "aria-hidden": true,
556
+ className: "size-5 shrink-0 border border-border/50",
557
+ style: { backgroundColor: color }
558
+ }
559
+ ),
560
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "font-mono text-xs uppercase tracking-wide", children: color })
561
+ ]
562
+ }
563
+ ),
564
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
565
+ PopoverContent,
566
+ {
567
+ className: "w-[220px] p-4",
568
+ align: "start",
569
+ "data-shadcn-scope": true,
570
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
571
+ ColorPickerContent,
572
+ {
573
+ value: color,
574
+ onChange: handleChange,
575
+ presets
576
+ }
577
+ )
578
+ }
579
+ )
580
+ ] })
581
+ ]
582
+ }
583
+ );
584
+ }
585
+
586
+ // src/components/ui/field.tsx
587
+ var import_react4 = require("react");
588
+ var import_class_variance_authority2 = require("class-variance-authority");
589
+
590
+ // src/components/ui/label.tsx
591
+ var import_jsx_runtime7 = (
592
+ // eslint-disable-next-line jsx-a11y/label-has-associated-control -- htmlFor is passed by the consumer
593
+ require("react/jsx-runtime")
594
+ );
595
+ function Label(_a) {
596
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
597
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
598
+ "label",
599
+ __spreadValues({
600
+ className: cn(
601
+ "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",
602
+ className
603
+ ),
604
+ "data-slot": "label"
605
+ }, props)
606
+ );
607
+ }
608
+
609
+ // src/components/ui/separator.tsx
610
+ var import_separator = require("@base-ui/react/separator");
611
+ var import_jsx_runtime8 = require("react/jsx-runtime");
612
+ function Separator(_a) {
613
+ var _b = _a, {
614
+ className,
615
+ orientation = "horizontal"
616
+ } = _b, props = __objRest(_b, [
617
+ "className",
618
+ "orientation"
619
+ ]);
620
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
621
+ import_separator.Separator,
622
+ __spreadValues({
623
+ className: cn(
624
+ "shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
625
+ className
626
+ ),
627
+ "data-orientation": orientation,
628
+ "data-slot": "separator"
629
+ }, props)
630
+ );
631
+ }
632
+
633
+ // src/components/ui/field.tsx
634
+ var import_jsx_runtime9 = require("react/jsx-runtime");
635
+ var fieldVariants = (0, import_class_variance_authority2.cva)(
636
+ "group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
637
+ {
638
+ variants: {
639
+ orientation: {
640
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
641
+ horizontal: [
642
+ "flex-row items-center",
643
+ "[&>[data-slot=field-label]]:flex-auto",
644
+ "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
645
+ ],
646
+ responsive: [
647
+ "flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto",
648
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
649
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
650
+ ]
651
+ }
652
+ },
653
+ defaultVariants: {
654
+ orientation: "vertical"
655
+ }
656
+ }
657
+ );
658
+ function Field(_a) {
659
+ var _b = _a, {
660
+ className,
661
+ orientation = "vertical"
662
+ } = _b, props = __objRest(_b, [
663
+ "className",
664
+ "orientation"
665
+ ]);
666
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
667
+ "div",
668
+ __spreadValues({
669
+ className: cn(fieldVariants({ orientation }), className),
670
+ "data-orientation": orientation,
671
+ "data-slot": "field",
672
+ role: "group"
673
+ }, props)
674
+ );
675
+ }
676
+ function FieldLabel(_a) {
677
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
678
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
679
+ Label,
680
+ __spreadValues({
681
+ className: cn(
682
+ "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
683
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4",
684
+ "has-data-checked:border-primary has-data-checked:bg-primary/5 dark:has-data-checked:bg-primary/10",
685
+ className
686
+ ),
687
+ "data-slot": "field-label"
688
+ }, props)
689
+ );
690
+ }
691
+ function FieldError(_a) {
692
+ var _b = _a, {
693
+ className,
694
+ children,
695
+ errors
696
+ } = _b, props = __objRest(_b, [
697
+ "className",
698
+ "children",
699
+ "errors"
700
+ ]);
701
+ const content = (0, import_react4.useMemo)(() => {
702
+ var _a2;
703
+ if (children) {
704
+ return children;
705
+ }
706
+ if (!(errors == null ? void 0 : errors.length)) {
707
+ return null;
708
+ }
709
+ const uniqueErrors = Array.from(
710
+ new Map(errors.map((error) => [error == null ? void 0 : error.message, error])).values()
711
+ );
712
+ if (uniqueErrors.length === 1) {
713
+ return (_a2 = uniqueErrors[0]) == null ? void 0 : _a2.message;
714
+ }
715
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
716
+ (error) => (error == null ? void 0 : error.message) && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("li", { children: error.message }, error.message)
717
+ ) });
718
+ }, [children, errors]);
719
+ if (!content) {
720
+ return null;
721
+ }
722
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
723
+ "div",
724
+ __spreadProps(__spreadValues({
725
+ className: cn("text-caption text-destructive", className),
726
+ "data-slot": "field-error",
727
+ role: "alert"
728
+ }, props), {
729
+ children: content
730
+ })
731
+ );
732
+ }
733
+
734
+ // src/components/ui/select.tsx
735
+ var import_lucide_react3 = require("lucide-react");
736
+ var import_select = require("@base-ui/react/select");
737
+ var import_jsx_runtime10 = require("react/jsx-runtime");
738
+ function Select(_a) {
739
+ var props = __objRest(_a, []);
740
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_select.Select.Root, __spreadValues({ "data-slot": "select" }, props));
741
+ }
742
+ function SelectValue(_a) {
743
+ var props = __objRest(_a, []);
744
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_select.Select.Value, __spreadValues({ "data-slot": "select-value" }, props));
745
+ }
746
+ function SelectTrigger(_a) {
747
+ var _b = _a, {
748
+ className,
749
+ size = "default",
750
+ children
751
+ } = _b, props = __objRest(_b, [
752
+ "className",
753
+ "size",
754
+ "children"
755
+ ]);
756
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
757
+ import_select.Select.Trigger,
758
+ __spreadProps(__spreadValues({
759
+ className: cn(
760
+ "flex w-fit items-center justify-between gap-2 border border-input bg-transparent px-3 py-2 text-body-medium whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20 data-popup-open:border-primary data-popup-open:ring-[3px] data-popup-open:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:font-normal data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
761
+ className
762
+ ),
763
+ "data-size": size,
764
+ "data-slot": "select-trigger"
765
+ }, props), {
766
+ children: [
767
+ children,
768
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_select.Select.Icon, { className: "transition-transform duration-200 data-popup-open:rotate-180", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react3.ChevronDownIcon, { className: "size-4 opacity-50" }) })
769
+ ]
770
+ })
771
+ );
772
+ }
773
+ function SelectContent(_a) {
774
+ var _b = _a, {
775
+ className,
776
+ children,
777
+ style
778
+ } = _b, props = __objRest(_b, [
779
+ "className",
780
+ "children",
781
+ "style"
782
+ ]);
783
+ const themeVars = useThemeVars();
784
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
785
+ import_select.Select.Positioner,
786
+ {
787
+ className: "z-[200]",
788
+ align: "start",
789
+ alignItemWithTrigger: false,
790
+ sideOffset: 4,
791
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
792
+ import_select.Select.Popup,
793
+ __spreadProps(__spreadValues({
794
+ className: cn(
795
+ "relative max-h-[var(--available-height)] min-w-[var(--anchor-width,8rem)] overflow-x-hidden overflow-y-auto border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
796
+ className
797
+ ),
798
+ "data-slot": "select-content",
799
+ style: __spreadValues(__spreadValues({}, themeVars), style)
800
+ }, props), {
801
+ children: [
802
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SelectScrollUpButton, {}),
803
+ children,
804
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SelectScrollDownButton, {})
805
+ ]
806
+ })
807
+ )
808
+ }
809
+ ) });
810
+ }
811
+ function SelectItem(_a) {
812
+ var _b = _a, {
813
+ className,
814
+ children
815
+ } = _b, props = __objRest(_b, [
816
+ "className",
817
+ "children"
818
+ ]);
819
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
820
+ import_select.Select.Item,
821
+ __spreadProps(__spreadValues({
822
+ className: cn(
823
+ "relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-body-small outline-hidden select-none data-highlighted:bg-primary/5 data-highlighted:text-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
824
+ className
825
+ ),
826
+ "data-slot": "select-item"
827
+ }, props), {
828
+ children: [
829
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
830
+ "span",
831
+ {
832
+ className: "absolute right-2 flex size-3.5 items-center justify-center",
833
+ "data-slot": "select-item-indicator",
834
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_select.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react3.CheckIcon, { className: "size-4" }) })
835
+ }
836
+ ),
837
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_select.Select.ItemText, { children })
838
+ ]
839
+ })
840
+ );
841
+ }
842
+ function SelectScrollUpButton(_a) {
843
+ var _b = _a, {
844
+ className
845
+ } = _b, props = __objRest(_b, [
846
+ "className"
847
+ ]);
848
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
849
+ import_select.Select.ScrollUpArrow,
850
+ __spreadProps(__spreadValues({
851
+ className: cn(
852
+ "flex cursor-default items-center justify-center py-1",
853
+ className
854
+ ),
855
+ "data-slot": "select-scroll-up-button"
856
+ }, props), {
857
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react3.ChevronUpIcon, { className: "size-4" })
858
+ })
859
+ );
860
+ }
861
+ function SelectScrollDownButton(_a) {
862
+ var _b = _a, {
863
+ className
864
+ } = _b, props = __objRest(_b, [
865
+ "className"
866
+ ]);
867
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
868
+ import_select.Select.ScrollDownArrow,
869
+ __spreadProps(__spreadValues({
870
+ className: cn(
871
+ "flex cursor-default items-center justify-center py-1",
872
+ className
873
+ ),
874
+ "data-slot": "select-scroll-down-button"
875
+ }, props), {
876
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react3.ChevronDownIcon, { className: "size-4" })
877
+ })
878
+ );
879
+ }
880
+
881
+ // src/components/ui/tooltip.tsx
882
+ var import_tooltip = require("@base-ui/react/tooltip");
883
+ var import_jsx_runtime11 = require("react/jsx-runtime");
884
+ function TooltipProvider(_a) {
885
+ var _b = _a, {
886
+ delay = 0
887
+ } = _b, props = __objRest(_b, [
888
+ "delay"
889
+ ]);
890
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
891
+ import_tooltip.Tooltip.Provider,
892
+ __spreadValues({
893
+ "data-slot": "tooltip-provider",
894
+ delay
895
+ }, props)
896
+ );
897
+ }
898
+ function Tooltip(_a) {
899
+ var props = __objRest(_a, []);
900
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
901
+ }
902
+ function TooltipTrigger(_a) {
903
+ var props = __objRest(_a, []);
904
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
905
+ }
906
+ function TooltipContent(_a) {
907
+ var _b = _a, {
908
+ className,
909
+ sideOffset = 8,
910
+ side,
911
+ children,
912
+ style
913
+ } = _b, props = __objRest(_b, [
914
+ "className",
915
+ "sideOffset",
916
+ "side",
917
+ "children",
918
+ "style"
919
+ ]);
920
+ const themeVars = useThemeVars();
921
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Positioner, { sideOffset, side, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
922
+ import_tooltip.Tooltip.Popup,
923
+ __spreadProps(__spreadValues({
924
+ className: cn(
925
+ "relative z-50 w-fit animate-in overflow-visible bg-brand-secondary px-3 py-1.5 text-caption text-balance text-brand-secondary-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards",
926
+ className
927
+ ),
928
+ "data-slot": "tooltip-content",
929
+ style: __spreadValues(__spreadValues({}, themeVars), style)
930
+ }, props), {
931
+ children: [
932
+ children,
933
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Arrow, { className: "z-50 size-2.5 rotate-45 bg-brand-secondary data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=right]:-left-1 data-[side=top]:-bottom-1" })
934
+ ]
935
+ })
936
+ ) }) });
937
+ }
938
+
939
+ // src/components/ui/upload-card.tsx
940
+ var import_lucide_react4 = require("lucide-react");
941
+ var import_class_variance_authority3 = require("class-variance-authority");
942
+ var import_jsx_runtime12 = require("react/jsx-runtime");
943
+ var uploadCardVariants = (0, import_class_variance_authority3.cva)(
944
+ [
945
+ "flex flex-col items-center justify-center gap-2",
946
+ "border border-dashed border-border",
947
+ "cursor-pointer text-muted-foreground",
948
+ "hover:bg-muted/50 bg-muted/20 transition-colors"
949
+ ],
950
+ {
951
+ variants: {
952
+ size: {
953
+ sm: "w-[200px] py-4 px-3",
954
+ lg: "w-full py-8 px-6"
955
+ }
956
+ },
957
+ defaultVariants: {
958
+ size: "sm"
959
+ }
960
+ }
961
+ );
962
+ function UploadCard(_a) {
963
+ var _b = _a, {
964
+ label = "Upload image",
965
+ description,
966
+ accept = ".png,.jpg,.jpeg",
967
+ size,
968
+ onFileChange,
969
+ className
970
+ } = _b, props = __objRest(_b, [
971
+ "label",
972
+ "description",
973
+ "accept",
974
+ "size",
975
+ "onFileChange",
976
+ "className"
977
+ ]);
978
+ const handleChange = (e) => {
979
+ var _a2, _b2;
980
+ onFileChange == null ? void 0 : onFileChange((_b2 = (_a2 = e.target.files) == null ? void 0 : _a2[0]) != null ? _b2 : null);
981
+ };
982
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
983
+ "label",
984
+ __spreadProps(__spreadValues({
985
+ className: cn(uploadCardVariants({ size }), className),
986
+ "data-slot": "upload-card",
987
+ "data-size": size != null ? size : "sm"
988
+ }, props), {
989
+ children: [
990
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
991
+ import_lucide_react4.UploadIcon,
992
+ {
993
+ className: cn("text-primary", size === "lg" ? "size-6" : "size-4")
994
+ }
995
+ ),
996
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
997
+ "span",
998
+ {
999
+ className: cn("font-medium", size === "lg" ? "text-sm" : "text-xs"),
1000
+ children: label
1001
+ }
1002
+ ),
1003
+ description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1004
+ "p",
1005
+ {
1006
+ className: cn(
1007
+ "text-center leading-relaxed",
1008
+ size === "lg" ? "text-sm" : "text-xs"
1009
+ ),
1010
+ children: description
1011
+ }
1012
+ ),
1013
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1014
+ "input",
1015
+ {
1016
+ type: "file",
1017
+ accept,
1018
+ className: "sr-only",
1019
+ onChange: handleChange
1020
+ }
1021
+ )
1022
+ ]
1023
+ })
1024
+ );
1025
+ }
1026
+
1027
+ // src/components/ui/signup-form-primitives.tsx
1028
+ var import_react5 = require("react");
1029
+ var import_lucide_react6 = require("lucide-react");
1030
+
1031
+ // src/components/ui/password-strength-tooltip.tsx
1032
+ var import_lucide_react5 = require("lucide-react");
1033
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1034
+ var RULES = [
1035
+ { label: "Minimum 8 characters", test: (p) => p.length >= 8 },
1036
+ { label: "At least one uppercase letter", test: (p) => /[A-Z]/.test(p) },
1037
+ { label: "At least one lowercase letter", test: (p) => /[a-z]/.test(p) },
1038
+ { label: "At least one number", test: (p) => /\d/.test(p) },
1039
+ {
1040
+ label: "At least one special character",
1041
+ test: (p) => /[^A-Za-z0-9]/.test(p)
1042
+ }
1043
+ ];
1044
+ function PasswordStrengthTooltip({
1045
+ open = false,
1046
+ password,
1047
+ children,
1048
+ side = "right"
1049
+ }) {
1050
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Popover, { open, children: [
1051
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { children }) }),
1052
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1053
+ PopoverContent,
1054
+ {
1055
+ side,
1056
+ align: "start",
1057
+ sideOffset: 8,
1058
+ onOpenAutoFocus: (e) => e.preventDefault(),
1059
+ className: "w-auto max-w-[280px] font-sans",
1060
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col gap-1.5", children: RULES.map((rule) => {
1061
+ const valid = password ? rule.test(password) : false;
1062
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1063
+ "div",
1064
+ {
1065
+ className: `flex items-center gap-1.5 text-[13px] leading-[18px] ${valid ? "text-success" : "text-destructive"}`,
1066
+ children: [
1067
+ valid ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react5.Check, { size: 14, className: "shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react5.X, { size: 14, className: "shrink-0" }),
1068
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: rule.label })
1069
+ ]
1070
+ },
1071
+ rule.label
1072
+ );
1073
+ }) })
1074
+ }
1075
+ )
1076
+ ] });
1077
+ }
1078
+
1079
+ // src/components/ui/signup-form-primitives.tsx
1080
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1081
+ function SectionHeading({ children }) {
1082
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "font-semibold text-lg text-foreground", children });
1083
+ }
1084
+ function FormField({ label, required, children }) {
1085
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Field, { children: [
1086
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(FieldLabel, { children: [
1087
+ label,
1088
+ required && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-destructive ml-0.5", children: "*" })
1089
+ ] }),
1090
+ children
1091
+ ] });
1092
+ }
1093
+ var STRENGTH_RULES = [
1094
+ { test: (p) => p.length >= 8 },
1095
+ { test: (p) => /[A-Z]/.test(p) },
1096
+ { test: (p) => /[a-z]/.test(p) },
1097
+ { test: (p) => /\d/.test(p) },
1098
+ { test: (p) => /[^A-Za-z0-9]/.test(p) }
1099
+ ];
1100
+ function PasswordField({
1101
+ label,
1102
+ placeholder,
1103
+ required,
1104
+ showStrengthPopover,
1105
+ onValueChange
1106
+ }) {
1107
+ const [show, setShow] = (0, import_react5.useState)(false);
1108
+ const [error, setError] = (0, import_react5.useState)("");
1109
+ const [touched, setTouched] = (0, import_react5.useState)(false);
1110
+ const [value, setValue] = (0, import_react5.useState)("");
1111
+ const [typingStarted, setTypingStarted] = (0, import_react5.useState)(false);
1112
+ const allRulesPass = STRENGTH_RULES.every((r) => r.test(value));
1113
+ const isPopoverOpen = !!showStrengthPopover && typingStarted && !allRulesPass;
1114
+ const validate = (v) => {
1115
+ if (v.length > 0 && v.length < 8) return "Min. 8 characters required";
1116
+ return "";
1117
+ };
1118
+ const inputEl = /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "relative", children: [
1119
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1120
+ Input,
1121
+ {
1122
+ type: show ? "text" : "password",
1123
+ placeholder,
1124
+ className: "pr-10",
1125
+ value,
1126
+ onChange: (e) => {
1127
+ const v = e.target.value;
1128
+ setValue(v);
1129
+ onValueChange == null ? void 0 : onValueChange(v);
1130
+ if (!typingStarted && v.length > 0) setTypingStarted(true);
1131
+ if (touched) setError(validate(v));
1132
+ },
1133
+ onBlur: () => {
1134
+ setTouched(true);
1135
+ setError(validate(value));
1136
+ }
1137
+ }
1138
+ ),
1139
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1140
+ "button",
1141
+ {
1142
+ type: "button",
1143
+ "aria-label": show ? "Hide password" : "Show password",
1144
+ className: "absolute right-3 top-2.5 text-muted-foreground hover:text-foreground",
1145
+ onClick: () => setShow((s) => !s),
1146
+ children: show ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react6.EyeOffIcon, { className: "size-4" }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react6.EyeIcon, { className: "size-4" })
1147
+ }
1148
+ )
1149
+ ] });
1150
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Field, { children: [
1151
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(FieldLabel, { children: [
1152
+ label,
1153
+ required && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-destructive ml-0.5", children: "*" })
1154
+ ] }),
1155
+ showStrengthPopover ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1156
+ PasswordStrengthTooltip,
1157
+ {
1158
+ open: isPopoverOpen,
1159
+ password: value,
1160
+ side: "right",
1161
+ children: inputEl
1162
+ }
1163
+ ) : inputEl,
1164
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "min-h-5", children: touched && error && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FieldError, { children: error }) })
1165
+ ] });
1166
+ }
1167
+ var DEFAULT_ROLE_OPTIONS = ["Admin", "Broker", "Support"];
1168
+ function StaffRowItem({
1169
+ member,
1170
+ onRemove,
1171
+ onChange,
1172
+ showRemove,
1173
+ roleOptions = DEFAULT_ROLE_OPTIONS
1174
+ }) {
1175
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-3 w-full", children: [
1176
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1177
+ Input,
1178
+ {
1179
+ className: "flex-1",
1180
+ placeholder: "staff@company.com",
1181
+ value: member.email,
1182
+ onChange: (e) => onChange(member.id, "email", e.target.value)
1183
+ }
1184
+ ),
1185
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1186
+ Select,
1187
+ {
1188
+ value: member.role,
1189
+ onValueChange: (v) => onChange(member.id, "role", v),
1190
+ children: [
1191
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectTrigger, { className: "w-[140px] shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectValue, { placeholder: "Select Role" }) }),
1192
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectContent, { children: roleOptions.map((r) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectItem, { value: r, children: r }, r)) })
1193
+ ]
1194
+ }
1195
+ ),
1196
+ showRemove && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1197
+ Button,
1198
+ {
1199
+ variant: "ghost",
1200
+ size: "icon-sm",
1201
+ onClick: () => onRemove(member.id),
1202
+ "aria-label": "Remove staff member",
1203
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react6.Trash2Icon, { className: "size-4" })
1204
+ }
1205
+ )
1206
+ ] });
1207
+ }
1208
+
1209
+ // src/components/ui/backoffice-signup-steps.tsx
1210
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1211
+ var BASE_PLAN_PRICE = 299;
1212
+ var ROLE_INFO = {
1213
+ Admin: "Admin seats have full access to manage the platform.",
1214
+ Broker: "Broker seats can manage client portfolios.",
1215
+ Support: "Support seats handle client inquiries and tickets."
1216
+ };
1217
+ var ROLE_SUBTITLE = {
1218
+ Admin: "$89/month/company (first seat included)",
1219
+ Broker: "$89/month/company",
1220
+ Support: "$0/month/company"
1221
+ };
1222
+ function PersonalDetailsStep({
1223
+ onValidChange
1224
+ }) {
1225
+ const [firstName, setFirstName] = (0, import_react6.useState)("");
1226
+ const [lastName, setLastName] = (0, import_react6.useState)("");
1227
+ const [email, setEmail] = (0, import_react6.useState)("");
1228
+ const [emailError, setEmailError] = (0, import_react6.useState)("");
1229
+ const [emailTouched, setEmailTouched] = (0, import_react6.useState)(false);
1230
+ const [passwordValue, setPasswordValue] = (0, import_react6.useState)("");
1231
+ const [confirmValue, setConfirmValue] = (0, import_react6.useState)("");
1232
+ const [termsAccepted, setTermsAccepted] = (0, import_react6.useState)(false);
1233
+ const validateEmail = (v) => {
1234
+ if (v.length > 0 && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v))
1235
+ return "Please enter a valid email address";
1236
+ return "";
1237
+ };
1238
+ const passwordRules = (v) => v.length >= 8 && /[A-Z]/.test(v) && /[a-z]/.test(v) && /[0-9]/.test(v) && /[^A-Za-z0-9]/.test(v);
1239
+ const emailValid = email.length > 0 && validateEmail(email) === "";
1240
+ const passwordValid = passwordRules(passwordValue);
1241
+ const confirmPasswordValid = confirmValue.length > 0 && confirmValue === passwordValue;
1242
+ import_react6.default.useEffect(() => {
1243
+ onValidChange == null ? void 0 : onValidChange(
1244
+ firstName.trim().length > 0 && lastName.trim().length > 0 && emailValid && passwordValid && confirmPasswordValid && termsAccepted
1245
+ );
1246
+ }, [
1247
+ firstName,
1248
+ lastName,
1249
+ emailValid,
1250
+ passwordValid,
1251
+ confirmPasswordValid,
1252
+ termsAccepted,
1253
+ onValidChange
1254
+ ]);
1255
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-1", children: [
1256
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex gap-4", children: [
1257
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1258
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(FieldLabel, { children: [
1259
+ "First Name",
1260
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-destructive ml-0.5", children: "*" })
1261
+ ] }),
1262
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1263
+ Input,
1264
+ {
1265
+ placeholder: "First Name",
1266
+ value: firstName,
1267
+ onChange: (e) => setFirstName(e.target.value)
1268
+ }
1269
+ ),
1270
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "min-h-5" })
1271
+ ] }),
1272
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1273
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(FieldLabel, { children: [
1274
+ "Last Name",
1275
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-destructive ml-0.5", children: "*" })
1276
+ ] }),
1277
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1278
+ Input,
1279
+ {
1280
+ placeholder: "Last Name",
1281
+ value: lastName,
1282
+ onChange: (e) => setLastName(e.target.value)
1283
+ }
1284
+ ),
1285
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "min-h-5" })
1286
+ ] })
1287
+ ] }),
1288
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1289
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(FieldLabel, { children: [
1290
+ "Email Address",
1291
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-destructive ml-0.5", children: "*" })
1292
+ ] }),
1293
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1294
+ Input,
1295
+ {
1296
+ type: "email",
1297
+ placeholder: "Email Address",
1298
+ value: email,
1299
+ onChange: (e) => {
1300
+ setEmail(e.target.value);
1301
+ if (emailTouched) setEmailError(validateEmail(e.target.value));
1302
+ },
1303
+ onBlur: () => {
1304
+ setEmailTouched(true);
1305
+ setEmailError(validateEmail(email));
1306
+ }
1307
+ }
1308
+ ),
1309
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "min-h-5", children: emailTouched && emailError && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldError, { children: emailError }) })
1310
+ ] }),
1311
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1312
+ PasswordField,
1313
+ {
1314
+ label: "Set Your Password",
1315
+ placeholder: "Password",
1316
+ required: true,
1317
+ showStrengthPopover: true,
1318
+ onValueChange: setPasswordValue
1319
+ }
1320
+ ),
1321
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1322
+ PasswordField,
1323
+ {
1324
+ label: "Confirm Password",
1325
+ placeholder: "Confirm Your Password",
1326
+ required: true,
1327
+ onValueChange: setConfirmValue
1328
+ }
1329
+ ),
1330
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1331
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Phone Number" }),
1332
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Phone Number" }),
1333
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "min-h-5" })
1334
+ ] }),
1335
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-start gap-3", children: [
1336
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1337
+ Checkbox,
1338
+ {
1339
+ id: "terms",
1340
+ checked: termsAccepted,
1341
+ onCheckedChange: (v) => setTermsAccepted(!!v)
1342
+ }
1343
+ ),
1344
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1345
+ "label",
1346
+ {
1347
+ htmlFor: "terms",
1348
+ className: "text-sm text-muted-foreground leading-relaxed cursor-pointer select-none",
1349
+ children: [
1350
+ "I agree to the",
1351
+ " ",
1352
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-foreground underline", children: "Terms and Conditions" }),
1353
+ " ",
1354
+ "and ",
1355
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-foreground underline", children: "Privacy Policy" })
1356
+ ]
1357
+ }
1358
+ )
1359
+ ] })
1360
+ ] });
1361
+ }
1362
+ function CompanyInfoStep() {
1363
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-4", children: [
1364
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SectionHeading, { children: "Company Details" }),
1365
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Business Name", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Business Name" }) }),
1366
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "ABN (Australian Business Number)", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Input ABN" }) }),
1367
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Australian Credit License Number", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Input License Number" }) }),
1368
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Customer Support Email", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { type: "email", placeholder: "Customer Support Email" }) }),
1369
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Main Business Phone Number", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Main Business Phone Number" }) }),
1370
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Domain", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Input Domain" }) }),
1371
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(SectionHeading, { children: [
1372
+ "Connective Details",
1373
+ " ",
1374
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-muted-foreground font-normal", children: "(connective brokers only)" })
1375
+ ] }),
1376
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "CA Number", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "CA Number" }) }),
1377
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Company ID", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Company ID" }) }),
1378
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "API Key", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "API Key" }) }),
1379
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "API Token", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "API Token" }) })
1380
+ ] });
1381
+ }
1382
+ function BrandingInfoStep() {
1383
+ const [primaryColor, setPrimaryColor] = (0, import_react6.useState)("#131C24");
1384
+ const [secondaryColor, setSecondaryColor] = (0, import_react6.useState)("#00E599");
1385
+ const [calendarType, setCalendarType] = (0, import_react6.useState)("Calendly");
1386
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-6", children: [
1387
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-4", children: [
1388
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SectionHeading, { children: "Admin Advisor Content" }),
1389
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Calendar URL", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex gap-2", children: [
1390
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1391
+ Select,
1392
+ {
1393
+ value: calendarType,
1394
+ onValueChange: (v) => setCalendarType(v),
1395
+ children: [
1396
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SelectTrigger, { className: "w-[140px] shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SelectValue, {}) }),
1397
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(SelectContent, { children: [
1398
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SelectItem, { value: "Calendly", children: "Calendly" }),
1399
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SelectItem, { value: "Gmail", children: "Gmail Calendar" }),
1400
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SelectItem, { value: "Outlook", children: "Outlook Calendar" })
1401
+ ] })
1402
+ ]
1403
+ }
1404
+ ),
1405
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Paste calendar URL", className: "flex-1" })
1406
+ ] }) }),
1407
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormField, { label: "Video URL (Youtube, Vimeo, Wistia)", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Input, { placeholder: "Input Video URL" }) }),
1408
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1409
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Upload professional photo (800x450)" }),
1410
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1411
+ UploadCard,
1412
+ {
1413
+ size: "sm",
1414
+ label: "Upload image",
1415
+ description: "PNG, JPG \xB7 800\xD7450px"
1416
+ }
1417
+ )
1418
+ ] })
1419
+ ] }),
1420
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-4", children: [
1421
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SectionHeading, { children: "Company Branding" }),
1422
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1423
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Color Code Primary" }),
1424
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ColorPicker, { value: primaryColor, onChange: setPrimaryColor })
1425
+ ] }),
1426
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1427
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Color Code Secondary" }),
1428
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ColorPicker, { value: secondaryColor, onChange: setSecondaryColor })
1429
+ ] }),
1430
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
1431
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1432
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Primary Symbol Logo (50x50)" }),
1433
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1434
+ UploadCard,
1435
+ {
1436
+ size: "sm",
1437
+ label: "Upload image",
1438
+ description: "PNG, JPG \xB7 50\xD750px"
1439
+ }
1440
+ )
1441
+ ] }),
1442
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1443
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Symbol Logo in White (50x50)" }),
1444
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1445
+ UploadCard,
1446
+ {
1447
+ size: "sm",
1448
+ label: "Upload image",
1449
+ description: "PNG, JPG \xB7 50\xD750px"
1450
+ }
1451
+ )
1452
+ ] })
1453
+ ] }),
1454
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
1455
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1456
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Primary Business Logo (150x100)" }),
1457
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1458
+ UploadCard,
1459
+ {
1460
+ size: "sm",
1461
+ label: "Upload image",
1462
+ description: "PNG, JPG \xB7 150\xD7100px"
1463
+ }
1464
+ )
1465
+ ] }),
1466
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1467
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Primary Business Logo in White (150x100)" }),
1468
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1469
+ UploadCard,
1470
+ {
1471
+ size: "sm",
1472
+ label: "Upload image",
1473
+ description: "PNG, JPG \xB7 150\xD7100px"
1474
+ }
1475
+ )
1476
+ ] })
1477
+ ] })
1478
+ ] })
1479
+ ] });
1480
+ }
1481
+ function InviteStaffView({
1482
+ onNext: _onNext,
1483
+ onPrev: _onPrev
1484
+ }) {
1485
+ const [staffList, setStaffList] = (0, import_react6.useState)([
1486
+ { id: "1", email: "", role: "" }
1487
+ ]);
1488
+ const addStaff = () => setStaffList((p) => [
1489
+ ...p,
1490
+ { id: crypto.randomUUID(), email: "", role: "" }
1491
+ ]);
1492
+ const removeStaff = (id) => setStaffList((p) => p.filter((m) => m.id !== id));
1493
+ const changeStaff = (id, field, value) => setStaffList(
1494
+ (p) => p.map((m) => m.id === id ? __spreadProps(__spreadValues({}, m), { [field]: value }) : m)
1495
+ );
1496
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-6", children: [
1497
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-4", children: [
1498
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SectionHeading, { children: "Invite Staff Members" }),
1499
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-3 border border-border p-6", children: [
1500
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-3 w-full", children: [
1501
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "flex-1 text-sm font-medium text-foreground", children: "Email" }),
1502
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "w-[140px] shrink-0 text-sm font-medium text-foreground", children: "Role" }),
1503
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "size-8 shrink-0" })
1504
+ ] }),
1505
+ staffList.map((m) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1506
+ StaffRowItem,
1507
+ {
1508
+ member: m,
1509
+ onRemove: removeStaff,
1510
+ onChange: changeStaff,
1511
+ showRemove: staffList.length > 1
1512
+ },
1513
+ m.id
1514
+ )),
1515
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Button, { variant: "outline", onClick: addStaff, className: "w-full", children: [
1516
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.PlusIcon, { className: "size-4" }),
1517
+ "Add Staff"
1518
+ ] })
1519
+ ] })
1520
+ ] }),
1521
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-4", children: [
1522
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SectionHeading, { children: "Or Bulk Upload" }),
1523
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1524
+ UploadCard,
1525
+ {
1526
+ size: "lg",
1527
+ accept: ".csv",
1528
+ label: "Drop files here",
1529
+ description: "Or browse files from your computer"
1530
+ }
1531
+ ),
1532
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("p", { className: "text-sm text-muted-foreground text-center", children: [
1533
+ "Ensure your CSV file includes columns for:",
1534
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("br", {}),
1535
+ "No., First Name, Last Name, Email, Phone (Optional) and Staff Role."
1536
+ ] }),
1537
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex justify-center gap-1 text-sm text-muted-foreground", children: [
1538
+ "Or you can download the",
1539
+ " ",
1540
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: "link", className: "h-auto p-0", children: "Template file" })
1541
+ ] })
1542
+ ] })
1543
+ ] });
1544
+ }
1545
+ function PaymentView({
1546
+ onNext: _onNext,
1547
+ onPrev: _onPrev
1548
+ }) {
1549
+ const [seats, setSeats] = (0, import_react6.useState)({ Admin: 1, Broker: 0, Support: 0 });
1550
+ const additionalCost = Math.max(0, seats.Admin - 1) * 89 + seats.Broker * 89;
1551
+ const total = BASE_PLAN_PRICE + additionalCost;
1552
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex flex-col gap-6", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "border border-border px-6 py-8 flex flex-col gap-4", children: [
1553
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-start justify-between", children: [
1554
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
1555
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "font-bold text-lg", children: "Professional Plan" }),
1556
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-muted-foreground text-sm", children: "included 1 Broker" })
1557
+ ] }),
1558
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "text-right", children: [
1559
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("p", { className: "font-bold text-lg", children: [
1560
+ "$",
1561
+ BASE_PLAN_PRICE,
1562
+ "/month/company"
1563
+ ] }),
1564
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-muted-foreground text-sm", children: "Billed monthly. Cancel anytime." })
1565
+ ] })
1566
+ ] }),
1567
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Separator, {}),
1568
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "font-semibold text-base", children: "Total Staff seats" }),
1569
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipProvider, { children: ["Admin", "Broker", "Support"].map((role) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-start justify-between", children: [
1570
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-1", children: [
1571
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-2", children: [
1572
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-base w-[60px]", children: role }),
1573
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Tooltip, { children: [
1574
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Info", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.InfoIcon, { className: "size-4" }) }) }),
1575
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipContent, { side: "top", children: ROLE_INFO[role] })
1576
+ ] })
1577
+ ] }),
1578
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs text-muted-foreground", children: ROLE_SUBTITLE[role] })
1579
+ ] }),
1580
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1581
+ Input,
1582
+ {
1583
+ type: "number",
1584
+ value: seats[role],
1585
+ onChange: (e) => setSeats((s) => __spreadProps(__spreadValues({}, s), {
1586
+ [role]: Math.max(0, Number(e.target.value))
1587
+ })),
1588
+ "aria-label": `${role} seats`,
1589
+ className: "w-[76px] text-center"
1590
+ }
1591
+ )
1592
+ ] }, role)) }),
1593
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-sm text-muted-foreground", children: "You can add or remove seats anytime. Changes are billed monthly." }),
1594
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Separator, {}),
1595
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Tooltip, { children: [
1596
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center justify-between", children: [
1597
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "font-semibold text-lg", children: "Total (Est.)" }),
1598
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("p", { className: "font-semibold text-lg", children: [
1599
+ "$",
1600
+ total
1601
+ ] })
1602
+ ] }) }),
1603
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipContent, { side: "top", children: "This is an estimated amount. You will be charged at the end of the billing period." })
1604
+ ] }) })
1605
+ ] }) });
1606
+ }
1607
+ function StripeView({
1608
+ onPrev: _onPrev,
1609
+ onComplete: _onComplete
1610
+ }) {
1611
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex flex-col gap-6", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "border border-border p-6 flex flex-col gap-4", children: [
1612
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "font-semibold text-base text-foreground", children: "Payment Details" }),
1613
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { children: [
1614
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Card Number" }),
1615
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex h-9 w-full border border-input bg-muted/30 px-3 py-2 text-sm text-muted-foreground items-center", children: "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 4242" })
1616
+ ] }),
1617
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex gap-4", children: [
1618
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { className: "flex-1", children: [
1619
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "Expiry" }),
1620
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex h-9 w-full border border-input bg-muted/30 px-3 py-2 text-sm text-muted-foreground items-center", children: "MM / YY" })
1621
+ ] }),
1622
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Field, { className: "flex-1", children: [
1623
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FieldLabel, { children: "CVC" }),
1624
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex h-9 w-full border border-input bg-muted/30 px-3 py-2 text-sm text-muted-foreground items-center", children: "\u2022\u2022\u2022" })
1625
+ ] })
1626
+ ] }),
1627
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs text-muted-foreground", children: "Powered by Stripe. Your payment information is encrypted and secure." })
1628
+ ] }) });
1629
+ }
1630
+ function BackofficeSuccessStep() {
1631
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col items-center justify-center min-h-full py-16 gap-6 text-center px-4", children: [
1632
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "size-16 bg-success/10 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1633
+ "svg",
1634
+ {
1635
+ viewBox: "0 0 24 24",
1636
+ className: "size-8 text-success",
1637
+ fill: "none",
1638
+ stroke: "currentColor",
1639
+ strokeWidth: 2,
1640
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("polyline", { points: "20 6 9 17 4 12" })
1641
+ }
1642
+ ) }),
1643
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col gap-2", children: [
1644
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h2", { className: "text-2xl font-bold text-foreground", children: "You're all set!" }),
1645
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-muted-foreground max-w-[400px]", children: "You will receive an email on next steps and we will contact you for final approval." })
1646
+ ] }),
1647
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "border border-border p-6 flex flex-col gap-4 text-left w-full max-w-[400px]", children: [
1648
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "font-semibold text-base text-foreground", children: "Contact us anytime if you have any concerns." }),
1649
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-2.5", children: [
1650
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.PhoneIcon, { className: "size-5 text-success shrink-0" }),
1651
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-base text-foreground", children: "0416 338 438" })
1652
+ ] }),
1653
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-2.5", children: [
1654
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.CalendarIcon, { className: "size-5 text-success shrink-0" }),
1655
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-base text-foreground", children: "Book call back" })
1656
+ ] }),
1657
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-2.5", children: [
1658
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.MailIcon, { className: "size-5 text-success shrink-0" }),
1659
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-base text-foreground", children: "clint@wealthx.au" })
1660
+ ] })
1661
+ ] })
1662
+ ] });
1663
+ }
1664
+ // Annotate the CommonJS export names for ESM import in node:
1665
+ 0 && (module.exports = {
1666
+ BackofficeSuccessStep,
1667
+ BrandingInfoStep,
1668
+ CompanyInfoStep,
1669
+ InviteStaffView,
1670
+ PaymentView,
1671
+ PersonalDetailsStep,
1672
+ StripeView
1673
+ });