@wealthx/shadcn 1.4.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/.turbo/turbo-build.log +360 -180
  2. package/CHANGELOG.md +6 -0
  3. package/dist/chunk-2A53WPEC.mjs +182 -0
  4. package/dist/{chunk-SIVYAI3M.mjs → chunk-2LLFNGJZ.mjs} +15 -15
  5. package/dist/chunk-2QNOPXMQ.mjs +360 -0
  6. package/dist/{chunk-K5QV4TT6.mjs → chunk-2WCIORP7.mjs} +29 -4
  7. package/dist/{chunk-5NF6T2RS.mjs → chunk-3AREQTZU.mjs} +8 -8
  8. package/dist/{chunk-2EM2FRU6.mjs → chunk-3WGFIFP6.mjs} +5 -5
  9. package/dist/{chunk-K4KOD3KR.mjs → chunk-42NEC57Y.mjs} +44 -25
  10. package/dist/{chunk-FL6DZFJK.mjs → chunk-46Q4335I.mjs} +121 -39
  11. package/dist/chunk-4DO3WM7V.mjs +48 -0
  12. package/dist/chunk-5FHBC6DY.mjs +68 -0
  13. package/dist/chunk-5SAYZ4CI.mjs +40 -0
  14. package/dist/chunk-5WMFKQZ6.mjs +180 -0
  15. package/dist/chunk-623YVI5O.mjs +43 -0
  16. package/dist/{chunk-SFH2NJEJ.mjs → chunk-6OSULDEO.mjs} +3 -3
  17. package/dist/{chunk-UALR6JGV.mjs → chunk-6SR4K5T5.mjs} +1 -1
  18. package/dist/{chunk-D2NSIIXG.mjs → chunk-7KT5HPYM.mjs} +11 -11
  19. package/dist/chunk-A6ER36CW.mjs +456 -0
  20. package/dist/{chunk-QX7IFQSF.mjs → chunk-AHKHVBWR.mjs} +4 -4
  21. package/dist/chunk-AHSCWXYJ.mjs +113 -0
  22. package/dist/{chunk-7GWRPXHD.mjs → chunk-AL6GOL2Y.mjs} +1 -1
  23. package/dist/{chunk-OIKBW2QD.mjs → chunk-AUEUTZIC.mjs} +13 -13
  24. package/dist/{chunk-FYPSTTEJ.mjs → chunk-B7DD3ODQ.mjs} +1 -1
  25. package/dist/{chunk-TLAWKTSA.mjs → chunk-BD3DWDT4.mjs} +3 -3
  26. package/dist/{chunk-S2FKV4M5.mjs → chunk-BDESHD25.mjs} +4 -4
  27. package/dist/{chunk-OKTJFDPN.mjs → chunk-BFB3UH7V.mjs} +2 -2
  28. package/dist/{chunk-DGNHGNYH.mjs → chunk-C6SWS7OW.mjs} +1 -1
  29. package/dist/chunk-CDVG7SFT.mjs +271 -0
  30. package/dist/chunk-CUSHAIUL.mjs +109 -0
  31. package/dist/{chunk-QXKGOMUX.mjs → chunk-CW32WTZU.mjs} +4 -4
  32. package/dist/{chunk-SET2ANTY.mjs → chunk-D447W45Z.mjs} +3 -3
  33. package/dist/{chunk-RCAOCHWA.mjs → chunk-DFL5CV75.mjs} +18 -18
  34. package/dist/chunk-DYSVJ473.mjs +162 -0
  35. package/dist/chunk-E3PQDBYI.mjs +288 -0
  36. package/dist/chunk-EMYBNPIA.mjs +83 -0
  37. package/dist/chunk-EUYPMDQG.mjs +348 -0
  38. package/dist/{chunk-XYPW2XA5.mjs → chunk-EW72FINW.mjs} +11 -11
  39. package/dist/chunk-F24U4QQQ.mjs +234 -0
  40. package/dist/{chunk-VB5M6OZQ.mjs → chunk-F4O2YPXJ.mjs} +1 -1
  41. package/dist/chunk-FFXTQTB4.mjs +84 -0
  42. package/dist/{chunk-ZOWL2L5J.mjs → chunk-FYUSF5KO.mjs} +5 -1
  43. package/dist/{chunk-FTPBQVQ6.mjs → chunk-GNER6MCO.mjs} +1 -1
  44. package/dist/{chunk-2D3HQPFN.mjs → chunk-HF4FUBCY.mjs} +5 -5
  45. package/dist/{chunk-RSUIPKGX.mjs → chunk-HNDTLT5X.mjs} +1 -1
  46. package/dist/{chunk-N6Q5IPKT.mjs → chunk-HO6S3ECM.mjs} +46 -18
  47. package/dist/{chunk-L4NSRQ3T.mjs → chunk-HROG643K.mjs} +1 -1
  48. package/dist/chunk-I2EKKSEF.mjs +148 -0
  49. package/dist/{chunk-QTRSCVQ3.mjs → chunk-I3UDLWQ7.mjs} +1 -1
  50. package/dist/{chunk-AE7MASLF.mjs → chunk-IQGKOT7A.mjs} +9 -6
  51. package/dist/chunk-IXR4BQSQ.mjs +290 -0
  52. package/dist/{chunk-4MM7LHM5.mjs → chunk-J5NW5NCT.mjs} +1 -1
  53. package/dist/{chunk-OLKMCXAR.mjs → chunk-JTG5R5YV.mjs} +24 -24
  54. package/dist/chunk-JUBUN65Q.mjs +106 -0
  55. package/dist/chunk-K7TWMLLW.mjs +520 -0
  56. package/dist/{chunk-BOW7U26Y.mjs → chunk-K7WSRWOU.mjs} +4 -4
  57. package/dist/{chunk-NTYQWVLI.mjs → chunk-KAD26MCC.mjs} +1 -1
  58. package/dist/{chunk-KCWNDYPZ.mjs → chunk-KB7MZMED.mjs} +4 -4
  59. package/dist/chunk-KCKYGQVQ.mjs +61 -0
  60. package/dist/{chunk-VY5NEUP7.mjs → chunk-KLJLDNCA.mjs} +1 -1
  61. package/dist/chunk-LLAGF6BA.mjs +49 -0
  62. package/dist/{chunk-G27TSQLQ.mjs → chunk-M4LTX3MH.mjs} +1 -1
  63. package/dist/{chunk-YIZHS72Z.mjs → chunk-MHHA7QGO.mjs} +94 -54
  64. package/dist/{chunk-P2N2PEFY.mjs → chunk-NCUH54IZ.mjs} +4 -4
  65. package/dist/{chunk-PNRUH7JY.mjs → chunk-OECGKCVF.mjs} +5 -5
  66. package/dist/{chunk-YE67AALL.mjs → chunk-OL65UQHQ.mjs} +10 -10
  67. package/dist/{chunk-LQULK2E3.mjs → chunk-OYBIUEGE.mjs} +1 -1
  68. package/dist/{chunk-LR6LHDP3.mjs → chunk-PGR53HMH.mjs} +7 -7
  69. package/dist/chunk-PUJ42INK.mjs +141 -0
  70. package/dist/{chunk-M4VYX2PV.mjs → chunk-PV3Y7QGK.mjs} +2 -2
  71. package/dist/{chunk-UJZ4UHWI.mjs → chunk-PV7PNA6K.mjs} +4 -4
  72. package/dist/{chunk-6HIOM2HL.mjs → chunk-Q35PNFJ7.mjs} +1 -1
  73. package/dist/{chunk-JZY6TNIS.mjs → chunk-Q5SGEIJV.mjs} +27 -27
  74. package/dist/{chunk-ZFCDYW6N.mjs → chunk-QAX6HCUH.mjs} +1 -1
  75. package/dist/chunk-QHJDGB54.mjs +135 -0
  76. package/dist/chunk-QQSOZQOC.mjs +27 -0
  77. package/dist/chunk-RUX3OLVZ.mjs +59 -0
  78. package/dist/{chunk-QOJ2DQD6.mjs → chunk-S4CTM3UE.mjs} +5 -0
  79. package/dist/{chunk-ZEDMKQK2.mjs → chunk-TAX3KL66.mjs} +1 -1
  80. package/dist/chunk-TC43SMIN.mjs +133 -0
  81. package/dist/chunk-TGVXRD53.mjs +174 -0
  82. package/dist/{chunk-K5VHK7CM.mjs → chunk-TLYSVRSK.mjs} +12 -12
  83. package/dist/{chunk-YCWLFG27.mjs → chunk-TOIVHWNC.mjs} +1 -1
  84. package/dist/chunk-TXUBGKB7.mjs +160 -0
  85. package/dist/chunk-UEREFDAE.mjs +75 -0
  86. package/dist/chunk-UTCQN6XU.mjs +123 -0
  87. package/dist/{chunk-37AE3OM5.mjs → chunk-V4CUTCHS.mjs} +4 -4
  88. package/dist/{chunk-THVO2N47.mjs → chunk-VFH632TB.mjs} +9 -9
  89. package/dist/{chunk-3ERBUVHC.mjs → chunk-VJ3GC7W3.mjs} +95 -49
  90. package/dist/{chunk-V6XGXYCJ.mjs → chunk-VLELWBEW.mjs} +4 -4
  91. package/dist/{chunk-FEZKMUCF.mjs → chunk-WDTXHLYM.mjs} +1 -1
  92. package/dist/chunk-WUA546RX.mjs +129 -0
  93. package/dist/chunk-XHGISOX5.mjs +257 -0
  94. package/dist/chunk-XIY5DJXI.mjs +168 -0
  95. package/dist/{chunk-TOWTPLRC.mjs → chunk-XN37434W.mjs} +8 -8
  96. package/dist/{chunk-KLTACJ2G.mjs → chunk-XTWAJWCQ.mjs} +1 -1
  97. package/dist/chunk-Y24TXIFJ.mjs +518 -0
  98. package/dist/{chunk-DMXYRCHM.mjs → chunk-Y6UM3VTN.mjs} +4 -4
  99. package/dist/components/ui/about-you-form.js +1120 -0
  100. package/dist/components/ui/about-you-form.mjs +323 -0
  101. package/dist/components/ui/account-list-carousel.js +304 -0
  102. package/dist/components/ui/account-list-carousel.mjs +11 -0
  103. package/dist/components/ui/add-column-modal.js +1 -1
  104. package/dist/components/ui/add-column-modal.mjs +6 -6
  105. package/dist/components/ui/add-lead-modal.js +2 -2
  106. package/dist/components/ui/add-lead-modal.mjs +6 -6
  107. package/dist/components/ui/advisor-card.mjs +2 -2
  108. package/dist/components/ui/agent-evaluation-toast.js +299 -0
  109. package/dist/components/ui/agent-evaluation-toast.mjs +12 -0
  110. package/dist/components/ui/ai-assistant-drawer.mjs +5 -5
  111. package/dist/components/ui/ai-builder.js +3 -3
  112. package/dist/components/ui/ai-builder.mjs +5 -5
  113. package/dist/components/ui/ai-conversations.js +2 -2
  114. package/dist/components/ui/ai-conversations.mjs +11 -11
  115. package/dist/components/ui/alert-dialog.mjs +3 -3
  116. package/dist/components/ui/applicant-document-checklist.js +346 -0
  117. package/dist/components/ui/applicant-document-checklist.mjs +10 -0
  118. package/dist/components/ui/applicant-expenses-section.js +455 -0
  119. package/dist/components/ui/applicant-expenses-section.mjs +220 -0
  120. package/dist/components/ui/applicant-navigation-bar.js +309 -0
  121. package/dist/components/ui/applicant-navigation-bar.mjs +87 -0
  122. package/dist/components/ui/applicant-switcher.js +268 -0
  123. package/dist/components/ui/applicant-switcher.mjs +46 -0
  124. package/dist/components/ui/application-mobile-layout.js +88 -0
  125. package/dist/components/ui/application-mobile-layout.mjs +8 -0
  126. package/dist/components/ui/appointment-action-dialogs.js +1 -1
  127. package/dist/components/ui/appointment-action-dialogs.mjs +10 -10
  128. package/dist/components/ui/appointment-availability-settings.js +78 -31
  129. package/dist/components/ui/appointment-availability-settings.mjs +12 -10
  130. package/dist/components/ui/appointment-book-dialog.js +137 -58
  131. package/dist/components/ui/appointment-book-dialog.mjs +14 -14
  132. package/dist/components/ui/appointment-calendar-view.js +1 -1
  133. package/dist/components/ui/appointment-calendar-view.mjs +4 -4
  134. package/dist/components/ui/appointment-detail-sheet.js +38 -11
  135. package/dist/components/ui/appointment-detail-sheet.mjs +13 -13
  136. package/dist/components/ui/appointment-gmail-connect.mjs +2 -2
  137. package/dist/components/ui/appointment-time-slot-picker.mjs +2 -2
  138. package/dist/components/ui/appointment-upcoming-card.js +1 -1
  139. package/dist/components/ui/appointment-upcoming-card.mjs +10 -10
  140. package/dist/components/ui/asset-accordion.js +506 -0
  141. package/dist/components/ui/asset-accordion.mjs +202 -0
  142. package/dist/components/ui/assets-liabilities-side-card.js +328 -0
  143. package/dist/components/ui/assets-liabilities-side-card.mjs +127 -0
  144. package/dist/components/ui/auth-page-layout.js +3 -3
  145. package/dist/components/ui/auth-page-layout.mjs +1 -1
  146. package/dist/components/ui/backoffice-alert-history-chart.mjs +4 -4
  147. package/dist/components/ui/backoffice-alert-matching-chart.js +786 -0
  148. package/dist/components/ui/backoffice-alert-matching-chart.mjs +19 -0
  149. package/dist/components/ui/backoffice-alerts-chart.mjs +4 -4
  150. package/dist/components/ui/backoffice-connections-chart.mjs +4 -4
  151. package/dist/components/ui/backoffice-contact-history-chart.mjs +4 -4
  152. package/dist/components/ui/backoffice-contact-matching-chart.js +803 -0
  153. package/dist/components/ui/backoffice-contact-matching-chart.mjs +19 -0
  154. package/dist/components/ui/backoffice-signup-steps.js +1673 -0
  155. package/dist/components/ui/backoffice-signup-steps.mjs +36 -0
  156. package/dist/components/ui/bank-statement-document-table.js +467 -0
  157. package/dist/components/ui/bank-statement-document-table.mjs +12 -0
  158. package/dist/components/ui/bank-statement-generate-dialog.js +1517 -0
  159. package/dist/components/ui/bank-statement-generate-dialog.mjs +27 -0
  160. package/dist/components/ui/bank-statement-pdf-viewer.js +525 -0
  161. package/dist/components/ui/bank-statement-pdf-viewer.mjs +14 -0
  162. package/dist/components/ui/banking-accounts-connect.js +336 -0
  163. package/dist/components/ui/banking-accounts-connect.mjs +114 -0
  164. package/dist/components/ui/borrowing-capacity-atoms.js +382 -0
  165. package/dist/components/ui/borrowing-capacity-atoms.mjs +17 -0
  166. package/dist/components/ui/borrowing-capacity-card.js +835 -0
  167. package/dist/components/ui/borrowing-capacity-card.mjs +89 -0
  168. package/dist/components/ui/borrowing-capacity-line-chart.mjs +4 -4
  169. package/dist/components/ui/broker-info-panel.js +281 -0
  170. package/dist/components/ui/broker-info-panel.mjs +59 -0
  171. package/dist/components/ui/calculator-input-item.js +101 -0
  172. package/dist/components/ui/calculator-input-item.mjs +8 -0
  173. package/dist/components/ui/calculator-section.js +743 -0
  174. package/dist/components/ui/calculator-section.mjs +220 -0
  175. package/dist/components/ui/calendar.mjs +2 -2
  176. package/dist/components/ui/cash-balance-line-chart.mjs +5 -5
  177. package/dist/components/ui/cashflow-bar-chart.mjs +4 -4
  178. package/dist/components/ui/category-edit-dialog.js +737 -0
  179. package/dist/components/ui/category-edit-dialog.mjs +16 -0
  180. package/dist/components/ui/chat-widget.mjs +3 -3
  181. package/dist/components/ui/color-picker.mjs +4 -4
  182. package/dist/components/ui/connect-bank-step.js +511 -0
  183. package/dist/components/ui/connect-bank-step.mjs +287 -0
  184. package/dist/components/ui/contact-alert-dialog.js +1405 -0
  185. package/dist/components/ui/contact-alert-dialog.mjs +27 -0
  186. package/dist/components/ui/create-contact-modal.js +1028 -0
  187. package/dist/components/ui/create-contact-modal.mjs +21 -0
  188. package/dist/components/ui/csv-import-modal.js +583 -0
  189. package/dist/components/ui/csv-import-modal.mjs +14 -0
  190. package/dist/components/ui/currency-input.js +439 -0
  191. package/dist/components/ui/currency-input.mjs +13 -0
  192. package/dist/components/ui/dashboard-expense-categories.js +355 -0
  193. package/dist/components/ui/dashboard-expense-categories.mjs +186 -0
  194. package/dist/components/ui/dashboard-transactions-table.js +1083 -0
  195. package/dist/components/ui/dashboard-transactions-table.mjs +177 -0
  196. package/dist/components/ui/data-table.mjs +6 -6
  197. package/dist/components/ui/date-picker.mjs +6 -6
  198. package/dist/components/ui/debt-accordion.js +523 -0
  199. package/dist/components/ui/debt-accordion.mjs +219 -0
  200. package/dist/components/ui/delete-contact-component.js +479 -0
  201. package/dist/components/ui/delete-contact-component.mjs +14 -0
  202. package/dist/components/ui/dialog.js +1 -1
  203. package/dist/components/ui/dialog.mjs +3 -3
  204. package/dist/components/ui/document-checklist-template.mjs +4 -4
  205. package/dist/components/ui/drawer.mjs +3 -3
  206. package/dist/components/ui/dropdown-menu.mjs +3 -3
  207. package/dist/components/ui/dynamic-tabs.js +274 -0
  208. package/dist/components/ui/dynamic-tabs.mjs +116 -0
  209. package/dist/components/ui/editable-money-item.js +306 -0
  210. package/dist/components/ui/editable-money-item.mjs +12 -0
  211. package/dist/components/ui/expense-bar-chart.mjs +4 -4
  212. package/dist/components/ui/expense-detail-item.js +506 -0
  213. package/dist/components/ui/expense-detail-item.mjs +15 -0
  214. package/dist/components/ui/expense-work-details.js +1259 -0
  215. package/dist/components/ui/expense-work-details.mjs +175 -0
  216. package/dist/components/ui/field.mjs +2 -2
  217. package/dist/components/ui/file-preview-dialog.js +704 -0
  218. package/dist/components/ui/file-preview-dialog.mjs +17 -0
  219. package/dist/components/ui/financial-cards.mjs +2 -2
  220. package/dist/components/ui/financial-drawers.js +1 -1
  221. package/dist/components/ui/financial-drawers.mjs +5 -5
  222. package/dist/components/ui/financial-sections.mjs +4 -4
  223. package/dist/components/ui/form-primitives.mjs +2 -2
  224. package/dist/components/ui/frontend-signup-steps.js +1239 -0
  225. package/dist/components/ui/frontend-signup-steps.mjs +38 -0
  226. package/dist/components/ui/income-bar-chart.mjs +4 -4
  227. package/dist/components/ui/income-sources-card.js +269 -0
  228. package/dist/components/ui/income-sources-card.mjs +100 -0
  229. package/dist/components/ui/income-summary-component.js +361 -0
  230. package/dist/components/ui/income-summary-component.mjs +84 -0
  231. package/dist/components/ui/income-work-details.js +1663 -0
  232. package/dist/components/ui/income-work-details.mjs +28 -0
  233. package/dist/components/ui/incoming-outgoings-card.js +218 -0
  234. package/dist/components/ui/incoming-outgoings-card.mjs +82 -0
  235. package/dist/components/ui/interest-rate-input.js +442 -0
  236. package/dist/components/ui/interest-rate-input.mjs +90 -0
  237. package/dist/components/ui/interest-rate-section.js +337 -0
  238. package/dist/components/ui/interest-rate-section.mjs +84 -0
  239. package/dist/components/ui/interest-rate-used.js +202 -0
  240. package/dist/components/ui/interest-rate-used.mjs +62 -0
  241. package/dist/components/ui/kanban-column.js +338 -160
  242. package/dist/components/ui/kanban-column.mjs +13 -11
  243. package/dist/components/ui/loan-applicant-information.js +336 -0
  244. package/dist/components/ui/loan-applicant-information.mjs +59 -0
  245. package/dist/components/ui/loan-applicant-invite.js +319 -0
  246. package/dist/components/ui/loan-applicant-invite.mjs +68 -0
  247. package/dist/components/ui/loan-application-badge.js +236 -0
  248. package/dist/components/ui/loan-application-badge.mjs +10 -0
  249. package/dist/components/ui/loan-application-cards.js +356 -0
  250. package/dist/components/ui/loan-application-cards.mjs +110 -0
  251. package/dist/components/ui/loan-entry-shell.js +104 -0
  252. package/dist/components/ui/loan-entry-shell.mjs +8 -0
  253. package/dist/components/ui/loan-financials.js +410 -0
  254. package/dist/components/ui/loan-financials.mjs +76 -0
  255. package/dist/components/ui/loan-option-card.js +102 -0
  256. package/dist/components/ui/loan-option-card.mjs +41 -0
  257. package/dist/components/ui/loan-option-group.js +288 -0
  258. package/dist/components/ui/loan-option-group.mjs +10 -0
  259. package/dist/components/ui/loan-steps.js +1121 -0
  260. package/dist/components/ui/loan-steps.mjs +509 -0
  261. package/dist/components/ui/loan-wizard-shell.js +452 -0
  262. package/dist/components/ui/loan-wizard-shell.mjs +11 -0
  263. package/dist/components/ui/money-input-with-slider.js +210 -0
  264. package/dist/components/ui/money-input-with-slider.mjs +10 -0
  265. package/dist/components/ui/money-item-with-color-indicator.js +314 -0
  266. package/dist/components/ui/money-item-with-color-indicator.mjs +20 -0
  267. package/dist/components/ui/opportunity-card.js +235 -97
  268. package/dist/components/ui/opportunity-card.mjs +11 -9
  269. package/dist/components/ui/opportunity-edit-modals.js +1 -1
  270. package/dist/components/ui/opportunity-edit-modals.mjs +15 -15
  271. package/dist/components/ui/opportunity-summary-tab.js +1 -1
  272. package/dist/components/ui/opportunity-summary-tab.mjs +19 -19
  273. package/dist/components/ui/pagination.mjs +4 -4
  274. package/dist/components/ui/password-strength-tooltip.mjs +4 -4
  275. package/dist/components/ui/pipeline-board.js +358 -176
  276. package/dist/components/ui/pipeline-board.mjs +16 -14
  277. package/dist/components/ui/pipeline-chart.mjs +3 -3
  278. package/dist/components/ui/pipeline-dialogs.js +1 -1
  279. package/dist/components/ui/pipeline-dialogs.mjs +9 -9
  280. package/dist/components/ui/pipeline-primitives.js +75 -8
  281. package/dist/components/ui/pipeline-primitives.mjs +3 -2
  282. package/dist/components/ui/popover.mjs +3 -3
  283. package/dist/components/ui/property-asset-card.js +428 -0
  284. package/dist/components/ui/property-asset-card.mjs +156 -0
  285. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +4 -4
  286. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +4 -4
  287. package/dist/components/ui/property-list-carousel.js +295 -0
  288. package/dist/components/ui/property-list-carousel.mjs +11 -0
  289. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +4 -4
  290. package/dist/components/ui/property-report-dialog.js +1148 -0
  291. package/dist/components/ui/property-report-dialog.mjs +25 -0
  292. package/dist/components/ui/resource-center.js +748 -0
  293. package/dist/components/ui/resource-center.mjs +24 -0
  294. package/dist/components/ui/review-alerts-dialog.js +569 -0
  295. package/dist/components/ui/review-alerts-dialog.mjs +15 -0
  296. package/dist/components/ui/savings-goal-modal.js +1148 -0
  297. package/dist/components/ui/savings-goal-modal.mjs +160 -0
  298. package/dist/components/ui/scenario-drawer.js +791 -0
  299. package/dist/components/ui/scenario-drawer.mjs +294 -0
  300. package/dist/components/ui/scenario-item.js +256 -0
  301. package/dist/components/ui/scenario-item.mjs +11 -0
  302. package/dist/components/ui/scenario-list.js +507 -0
  303. package/dist/components/ui/scenario-list.mjs +100 -0
  304. package/dist/components/ui/select.mjs +3 -3
  305. package/dist/components/ui/share-details-dialog.js +636 -0
  306. package/dist/components/ui/share-details-dialog.mjs +19 -0
  307. package/dist/components/ui/sheet.mjs +3 -3
  308. package/dist/components/ui/sidebar-nav.mjs +5 -5
  309. package/dist/components/ui/signup-form-primitives.js +770 -0
  310. package/dist/components/ui/signup-form-primitives.mjs +25 -0
  311. package/dist/components/ui/signup-shell.js +338 -0
  312. package/dist/components/ui/signup-shell.mjs +13 -0
  313. package/dist/components/ui/stage-timeline.js +103 -33
  314. package/dist/components/ui/stage-timeline.mjs +5 -4
  315. package/dist/components/ui/submission-confirmation-card.js +284 -0
  316. package/dist/components/ui/submission-confirmation-card.mjs +62 -0
  317. package/dist/components/ui/tooltip.mjs +3 -3
  318. package/dist/components/ui/top-three-product.js +374 -0
  319. package/dist/components/ui/top-three-product.mjs +129 -0
  320. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +4 -4
  321. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -5
  322. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +4 -4
  323. package/dist/components/ui/transactions-summary-block.js +95 -0
  324. package/dist/components/ui/transactions-summary-block.mjs +34 -0
  325. package/dist/components/ui/two-fa-setup-form.mjs +3 -3
  326. package/dist/index.js +9430 -4573
  327. package/dist/index.mjs +404 -251
  328. package/dist/lib/colors.js +6 -0
  329. package/dist/lib/colors.mjs +3 -1
  330. package/dist/lib/theme-provider.mjs +2 -2
  331. package/dist/styles.css +1 -1
  332. package/package.json +366 -2
  333. package/src/components/index.tsx +223 -0
  334. package/src/components/ui/about-you-form.tsx +397 -0
  335. package/src/components/ui/account-list-carousel.tsx +87 -0
  336. package/src/components/ui/add-lead-modal.tsx +1 -1
  337. package/src/components/ui/agent-evaluation-toast.tsx +191 -0
  338. package/src/components/ui/ai-builder.tsx +3 -5
  339. package/src/components/ui/ai-conversations.tsx +1 -1
  340. package/src/components/ui/applicant-document-checklist.tsx +175 -0
  341. package/src/components/ui/applicant-expenses-section.tsx +260 -0
  342. package/src/components/ui/applicant-navigation-bar.tsx +104 -0
  343. package/src/components/ui/applicant-switcher.tsx +54 -0
  344. package/src/components/ui/application-mobile-layout.tsx +34 -0
  345. package/src/components/ui/appointment-availability-settings.tsx +115 -23
  346. package/src/components/ui/appointment-book-dialog.tsx +406 -259
  347. package/src/components/ui/appointment-calendar-view.tsx +4 -1
  348. package/src/components/ui/appointment-detail-sheet.tsx +59 -24
  349. package/src/components/ui/appointment-time-slot-picker.tsx +5 -1
  350. package/src/components/ui/asset-accordion.tsx +241 -0
  351. package/src/components/ui/assets-liabilities-side-card.tsx +157 -0
  352. package/src/components/ui/auth-page-layout.tsx +3 -3
  353. package/src/components/ui/backoffice-alert-matching-chart.tsx +320 -0
  354. package/src/components/ui/backoffice-contact-matching-chart.tsx +341 -0
  355. package/src/components/ui/backoffice-signup-steps.tsx +615 -0
  356. package/src/components/ui/bank-statement-document-table.tsx +222 -0
  357. package/src/components/ui/bank-statement-generate-dialog.tsx +435 -0
  358. package/src/components/ui/bank-statement-pdf-viewer.tsx +241 -0
  359. package/src/components/ui/banking-accounts-connect.tsx +187 -0
  360. package/src/components/ui/borrowing-capacity-atoms.tsx +228 -0
  361. package/src/components/ui/borrowing-capacity-card.tsx +155 -0
  362. package/src/components/ui/broker-info-panel.tsx +94 -0
  363. package/src/components/ui/calculator-input-item.tsx +49 -0
  364. package/src/components/ui/calculator-section.tsx +275 -0
  365. package/src/components/ui/category-edit-dialog.tsx +300 -0
  366. package/src/components/ui/connect-bank-step.tsx +379 -0
  367. package/src/components/ui/contact-alert-dialog.tsx +710 -0
  368. package/src/components/ui/create-contact-modal.tsx +237 -0
  369. package/src/components/ui/csv-import-modal.tsx +153 -0
  370. package/src/components/ui/currency-input.tsx +104 -0
  371. package/src/components/ui/dashboard-expense-categories.tsx +262 -0
  372. package/src/components/ui/dashboard-transactions-table.tsx +241 -0
  373. package/src/components/ui/debt-accordion.tsx +254 -0
  374. package/src/components/ui/delete-contact-component.tsx +87 -0
  375. package/src/components/ui/dialog.tsx +2 -2
  376. package/src/components/ui/dynamic-tabs.tsx +149 -0
  377. package/src/components/ui/editable-money-item.tsx +176 -0
  378. package/src/components/ui/expense-detail-item.tsx +216 -0
  379. package/src/components/ui/expense-work-details.tsx +229 -0
  380. package/src/components/ui/file-preview-dialog.tsx +292 -0
  381. package/src/components/ui/financial-drawers.tsx +1 -1
  382. package/src/components/ui/frontend-signup-steps.tsx +548 -0
  383. package/src/components/ui/income-sources-card.tsx +143 -0
  384. package/src/components/ui/income-summary-component.tsx +120 -0
  385. package/src/components/ui/income-work-details.tsx +429 -0
  386. package/src/components/ui/incoming-outgoings-card.tsx +111 -0
  387. package/src/components/ui/interest-rate-input.tsx +111 -0
  388. package/src/components/ui/interest-rate-section.tsx +158 -0
  389. package/src/components/ui/interest-rate-used.tsx +82 -0
  390. package/src/components/ui/kanban-column.tsx +53 -2
  391. package/src/components/ui/loan-applicant-information.tsx +64 -0
  392. package/src/components/ui/loan-applicant-invite.tsx +67 -0
  393. package/src/components/ui/loan-application-badge.tsx +70 -0
  394. package/src/components/ui/loan-application-cards.tsx +152 -0
  395. package/src/components/ui/loan-entry-shell.tsx +86 -0
  396. package/src/components/ui/loan-financials.tsx +77 -0
  397. package/src/components/ui/loan-option-card.tsx +62 -0
  398. package/src/components/ui/loan-option-group.tsx +106 -0
  399. package/src/components/ui/loan-steps.tsx +630 -0
  400. package/src/components/ui/loan-wizard-shell.tsx +235 -0
  401. package/src/components/ui/money-input-with-slider.tsx +77 -0
  402. package/src/components/ui/money-item-with-color-indicator.tsx +30 -0
  403. package/src/components/ui/opportunity-card.tsx +46 -18
  404. package/src/components/ui/pipeline-board.tsx +13 -0
  405. package/src/components/ui/pipeline-primitives.tsx +28 -0
  406. package/src/components/ui/property-asset-card.tsx +221 -0
  407. package/src/components/ui/property-list-carousel.tsx +73 -0
  408. package/src/components/ui/property-report-dialog.tsx +355 -0
  409. package/src/components/ui/resource-center.tsx +539 -0
  410. package/src/components/ui/review-alerts-dialog.tsx +163 -0
  411. package/src/components/ui/savings-goal-modal.tsx +169 -0
  412. package/src/components/ui/scenario-drawer.tsx +358 -0
  413. package/src/components/ui/scenario-item.tsx +141 -0
  414. package/src/components/ui/scenario-list.tsx +150 -0
  415. package/src/components/ui/share-details-dialog.tsx +238 -0
  416. package/src/components/ui/signup-form-primitives.tsx +212 -0
  417. package/src/components/ui/signup-shell.tsx +180 -0
  418. package/src/components/ui/stage-timeline.tsx +11 -0
  419. package/src/components/ui/submission-confirmation-card.tsx +68 -0
  420. package/src/components/ui/top-three-product.tsx +207 -0
  421. package/src/components/ui/transactions-summary-block.tsx +59 -0
  422. package/src/lib/colors.ts +12 -0
  423. package/src/lib/format-date.ts +2 -2
  424. package/src/styles/styles-css.ts +1 -1
  425. package/tsup.config.ts +77 -1
  426. package/dist/{chunk-5VOTTIXF.mjs → chunk-FRT3S72S.mjs} +3 -3
  427. package/dist/{chunk-7BTFGCFC.mjs → chunk-MUV4EGDW.mjs} +3 -3
  428. package/dist/{chunk-57ZXILTS.mjs → chunk-MXP2RX2V.mjs} +3 -3
  429. package/dist/{chunk-ZKWXDQDG.mjs → chunk-VCDGLN25.mjs} +3 -3
  430. package/dist/{chunk-FLL633WS.mjs → chunk-ZXEUBBHJ.mjs} +3 -3
@@ -62,6 +62,7 @@ __export(kanban_column_exports, {
62
62
  KanbanColumn: () => KanbanColumn
63
63
  });
64
64
  module.exports = __toCommonJS(kanban_column_exports);
65
+ var React3 = __toESM(require("react"));
65
66
  var import_lucide_react7 = require("lucide-react");
66
67
 
67
68
  // src/lib/utils.ts
@@ -564,18 +565,65 @@ function Checkbox(_a) {
564
565
  );
565
566
  }
566
567
 
567
- // src/components/ui/pipeline-primitives.tsx
568
+ // src/components/ui/switch.tsx
569
+ var import_react4 = require("react");
570
+ var import_switch = require("@base-ui/react/switch");
568
571
  var import_jsx_runtime9 = require("react/jsx-runtime");
572
+ function Switch(_a) {
573
+ var _b = _a, {
574
+ className,
575
+ size = "default"
576
+ } = _b, props = __objRest(_b, [
577
+ "className",
578
+ "size"
579
+ ]);
580
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
581
+ import_switch.Switch.Root,
582
+ __spreadProps(__spreadValues({
583
+ className: cn(
584
+ "peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none",
585
+ "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
586
+ "disabled:cursor-not-allowed disabled:opacity-50",
587
+ "data-[size=default]:h-[1.15rem] data-[size=default]:w-8",
588
+ "data-[size=sm]:h-3.5 data-[size=sm]:w-6",
589
+ "data-checked:bg-primary data-unchecked:bg-input",
590
+ "aria-invalid:data-checked:bg-destructive aria-invalid:border-destructive",
591
+ "dark:data-unchecked:bg-input/80",
592
+ className
593
+ ),
594
+ "data-size": size,
595
+ "data-slot": "switch"
596
+ }, props), {
597
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
598
+ import_switch.Switch.Thumb,
599
+ {
600
+ className: cn(
601
+ "pointer-events-none block rounded-full bg-background ring-0 transition-transform",
602
+ "group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3",
603
+ "data-checked:translate-x-[calc(100%-2px)] data-unchecked:translate-x-0",
604
+ "dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground"
605
+ ),
606
+ "data-slot": "switch-thumb"
607
+ }
608
+ )
609
+ })
610
+ );
611
+ }
612
+
613
+ // src/components/ui/pipeline-primitives.tsx
614
+ var import_jsx_runtime10 = require("react/jsx-runtime");
569
615
  function TaskCheckItem({
570
616
  title,
571
617
  completed,
572
618
  aiAgentName,
619
+ autoCompleteEnabled,
620
+ onAutoCompleteToggle,
573
621
  onToggle,
574
622
  disabled = false,
575
623
  size = "xs",
576
624
  className
577
625
  }) {
578
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
626
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
579
627
  "div",
580
628
  {
581
629
  className: cn(
@@ -586,7 +634,7 @@ function TaskCheckItem({
586
634
  onClick: () => onToggle == null ? void 0 : onToggle(),
587
635
  "data-slot": "task-check-item",
588
636
  children: [
589
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { onClick: (e) => e.stopPropagation(), className: "mt-0.5 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
637
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { onClick: (e) => e.stopPropagation(), className: "mt-0.5 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
590
638
  Checkbox,
591
639
  {
592
640
  checked: completed,
@@ -594,8 +642,8 @@ function TaskCheckItem({
594
642
  disabled
595
643
  }
596
644
  ) }),
597
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
598
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
645
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
646
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
599
647
  "span",
600
648
  {
601
649
  className: cn(
@@ -606,8 +654,8 @@ function TaskCheckItem({
606
654
  children: title
607
655
  }
608
656
  ),
609
- aiAgentName && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Badge, { variant: "secondary", className: "gap-1 text-[10px]", children: [
610
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
657
+ aiAgentName && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Badge, { variant: "secondary", className: "gap-1 text-[10px]", children: [
658
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
611
659
  "span",
612
660
  {
613
661
  className: "size-1.5 rounded-full bg-primary",
@@ -615,15 +663,93 @@ function TaskCheckItem({
615
663
  }
616
664
  ),
617
665
  aiAgentName
618
- ] })
666
+ ] }),
667
+ aiAgentName && autoCompleteEnabled !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
668
+ "span",
669
+ {
670
+ className: "flex items-center gap-1.5",
671
+ onClick: (e) => e.stopPropagation(),
672
+ children: [
673
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
674
+ Switch,
675
+ {
676
+ checked: autoCompleteEnabled,
677
+ onCheckedChange: () => onAutoCompleteToggle == null ? void 0 : onAutoCompleteToggle(),
678
+ disabled,
679
+ className: "scale-75 origin-left",
680
+ "aria-label": "Allow agent to auto complete"
681
+ }
682
+ ),
683
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-[10px] text-muted-foreground", children: "Allow Agent to Auto Complete" })
684
+ ]
685
+ }
686
+ )
619
687
  ] })
620
688
  ]
621
689
  }
622
690
  );
623
691
  }
624
692
 
693
+ // src/components/ui/tooltip.tsx
694
+ var import_tooltip = require("@base-ui/react/tooltip");
695
+ var import_jsx_runtime11 = require("react/jsx-runtime");
696
+ function TooltipProvider(_a) {
697
+ var _b = _a, {
698
+ delay = 0
699
+ } = _b, props = __objRest(_b, [
700
+ "delay"
701
+ ]);
702
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
703
+ import_tooltip.Tooltip.Provider,
704
+ __spreadValues({
705
+ "data-slot": "tooltip-provider",
706
+ delay
707
+ }, props)
708
+ );
709
+ }
710
+ function Tooltip(_a) {
711
+ var props = __objRest(_a, []);
712
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
713
+ }
714
+ function TooltipTrigger(_a) {
715
+ var props = __objRest(_a, []);
716
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
717
+ }
718
+ function TooltipContent(_a) {
719
+ var _b = _a, {
720
+ className,
721
+ sideOffset = 8,
722
+ side,
723
+ children,
724
+ style
725
+ } = _b, props = __objRest(_b, [
726
+ "className",
727
+ "sideOffset",
728
+ "side",
729
+ "children",
730
+ "style"
731
+ ]);
732
+ const themeVars = useThemeVars();
733
+ 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)(
734
+ import_tooltip.Tooltip.Popup,
735
+ __spreadProps(__spreadValues({
736
+ className: cn(
737
+ "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",
738
+ className
739
+ ),
740
+ "data-slot": "tooltip-content",
741
+ style: __spreadValues(__spreadValues({}, themeVars), style)
742
+ }, props), {
743
+ children: [
744
+ children,
745
+ /* @__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" })
746
+ ]
747
+ })
748
+ ) }) });
749
+ }
750
+
625
751
  // src/components/ui/opportunity-card.tsx
626
- var import_jsx_runtime10 = require("react/jsx-runtime");
752
+ var import_jsx_runtime12 = require("react/jsx-runtime");
627
753
  var PRIORITY_COLORS = {
628
754
  HIGH: "var(--color-destructive)",
629
755
  MEDIUM: "var(--color-warning)",
@@ -663,6 +789,7 @@ function OpportunityCard({
663
789
  isModifyCompletedLoan,
664
790
  tasks = [],
665
791
  nextTask,
792
+ onCardClick,
666
793
  onViewDetails,
667
794
  onTaskToggle,
668
795
  onMarkAsDone,
@@ -672,6 +799,8 @@ function OpportunityCard({
672
799
  onDelete,
673
800
  onPutOnHold,
674
801
  isSubmitting = false,
802
+ draggable = false,
803
+ onDragStart,
675
804
  className
676
805
  }) {
677
806
  const resolvedPriority = resolvePriority(
@@ -686,29 +815,35 @@ function OpportunityCard({
686
815
  const hasTasks = tasks.length > 0;
687
816
  const hasActions = onMarkAsDone || onMoveToNextStage;
688
817
  const hasMenu = onViewDetails || onChangePriority || onPutOnHold || onDelete;
689
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
818
+ const stopProp = (e) => e.stopPropagation();
819
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
690
820
  "div",
691
821
  {
692
822
  className: cn(
693
823
  "flex flex-col gap-2 border border-border bg-background p-4 text-foreground shadow-sm",
824
+ onCardClick && "cursor-pointer",
825
+ draggable && "cursor-grab active:cursor-grabbing",
694
826
  isSubmitting && "opacity-60",
695
827
  className
696
828
  ),
697
829
  "data-slot": "opportunity-card",
830
+ draggable,
831
+ onDragStart,
832
+ onClick: onCardClick,
698
833
  children: [
699
- onHoldTo && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
834
+ onHoldTo && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
700
835
  "div",
701
836
  {
702
837
  className: "flex items-center gap-1.5 rounded border border-warning/30 bg-warning/10 px-2 py-1 text-xs font-medium",
703
838
  style: { color: "var(--color-warning-text)" },
704
839
  children: [
705
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Clock, { className: "size-3 shrink-0" }),
840
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Clock, { className: "size-3 shrink-0" }),
706
841
  "On hold until ",
707
842
  formatDateDayMonth(onHoldTo)
708
843
  ]
709
844
  }
710
845
  ),
711
- isModifyCompletedLoan && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
846
+ isModifyCompletedLoan && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
712
847
  "div",
713
848
  {
714
849
  className: "flex items-center gap-1.5 rounded border border-info/30 bg-info/10 px-2 py-1 text-xs font-medium",
@@ -716,27 +851,29 @@ function OpportunityCard({
716
851
  children: "Modify completed loan"
717
852
  }
718
853
  ),
719
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
720
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
721
- (loanPurposeLabel || loanType) && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
722
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
854
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
855
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
856
+ (loanPurposeLabel || loanType) && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
857
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
723
858
  ] }),
724
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center gap-1 -mr-1 -mt-1", children: [
725
- onLaunchAssistant && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
726
- Button,
727
- {
728
- type: "button",
729
- variant: "ghost",
730
- size: "icon",
731
- className: "size-7 shrink-0",
732
- onClick: onLaunchAssistant,
733
- "aria-label": "Launch AI Assistant",
734
- title: "Launch AI Assistant",
735
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Bot, { className: "size-4" })
736
- }
737
- ),
738
- hasMenu && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenu, { children: [
739
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
859
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-1 -mr-1 -mt-1", onClick: stopProp, children: [
860
+ onLaunchAssistant && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipProvider, { delay: 0, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Tooltip, { children: [
861
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
862
+ Button,
863
+ {
864
+ type: "button",
865
+ variant: "ghost",
866
+ size: "icon",
867
+ className: "size-7 shrink-0",
868
+ onClick: onLaunchAssistant,
869
+ "aria-label": "Launch AI",
870
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Bot, { className: "size-4" })
871
+ }
872
+ ) }),
873
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipContent, { children: "Launch AI" })
874
+ ] }) }),
875
+ hasMenu && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
876
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
740
877
  DropdownMenuTrigger,
741
878
  {
742
879
  className: cn(
@@ -744,51 +881,51 @@ function OpportunityCard({
744
881
  "size-7 shrink-0"
745
882
  ),
746
883
  "aria-label": "Opportunity actions",
747
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
884
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
748
885
  }
749
886
  ),
750
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenuContent, { align: "end", children: [
751
- onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
752
- onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
753
- onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
754
- onDelete && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
755
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuSeparator, {}),
756
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
887
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenuContent, { align: "end", children: [
888
+ onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
889
+ onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
890
+ onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
891
+ onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
892
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuSeparator, {}),
893
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
757
894
  ] })
758
895
  ] })
759
896
  ] })
760
897
  ] })
761
898
  ] }),
762
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Separator, {}),
763
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-1", children: [
764
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
765
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: customerName }),
766
- additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
767
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Users, { className: "size-3", "aria-hidden": "true" }),
899
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
900
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-1", children: [
901
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
902
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: customerName }),
903
+ additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
904
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Users, { className: "size-3", "aria-hidden": "true" }),
768
905
  "Joint"
769
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
770
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.User, { className: "size-3", "aria-hidden": "true" }),
906
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
907
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.User, { className: "size-3", "aria-hidden": "true" }),
771
908
  "Individual"
772
909
  ] })
773
910
  ] }),
774
- customerPhone && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
775
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
911
+ customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
912
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
776
913
  customerPhone
777
914
  ] }),
778
- customerEmail && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
779
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
780
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "truncate", children: customerEmail })
915
+ customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
916
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
917
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
781
918
  ] })
782
919
  ] }),
783
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Separator, {}),
784
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center justify-between", children: [
785
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
786
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
920
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
921
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between", children: [
922
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
923
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
787
924
  formatDateShort(date)
788
925
  ] }),
789
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-1.5", children: [
790
- daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
791
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
926
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5", children: [
927
+ daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
928
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
792
929
  import_lucide_react6.Clock,
793
930
  {
794
931
  className: "size-3 shrink-0",
@@ -796,7 +933,7 @@ function OpportunityCard({
796
933
  "aria-hidden": "true"
797
934
  }
798
935
  ),
799
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
936
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
800
937
  "span",
801
938
  {
802
939
  className: "text-xs font-medium tabular-nums",
@@ -808,7 +945,7 @@ function OpportunityCard({
808
945
  }
809
946
  )
810
947
  ] }),
811
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
948
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
812
949
  "span",
813
950
  {
814
951
  role: "img",
@@ -819,8 +956,9 @@ function OpportunityCard({
819
956
  )
820
957
  ] })
821
958
  ] }),
822
- hasTasks && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
823
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
959
+ hasTasks && // stopPropagation: accordion expand/collapse + task checkboxes must not bubble to onCardClick
960
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
961
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
824
962
  "div",
825
963
  {
826
964
  className: "flex gap-0.5",
@@ -829,7 +967,7 @@ function OpportunityCard({
829
967
  "aria-valuemin": 0,
830
968
  "aria-valuemax": tasks.length,
831
969
  "aria-label": `${completedCount} of ${tasks.length} tasks complete`,
832
- children: tasks.map((t, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
970
+ children: tasks.map((t, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
833
971
  "div",
834
972
  {
835
973
  className: cn(
@@ -841,15 +979,15 @@ function OpportunityCard({
841
979
  ))
842
980
  }
843
981
  ),
844
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Accordion, { type: "single", collapsible: true, className: "-mx-4", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(AccordionItem, { value: "tasks", className: "border-0", children: [
845
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(AccordionTrigger, { className: "px-4 py-1.5 text-xs font-normal text-muted-foreground hover:no-underline hover:text-foreground [&>svg]:size-3.5", children: [
982
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Accordion, { type: "single", collapsible: true, className: "-mx-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(AccordionItem, { value: "tasks", className: "border-0", children: [
983
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(AccordionTrigger, { className: "px-4 py-1.5 text-xs font-normal text-muted-foreground hover:no-underline hover:text-foreground [&>svg]:size-3.5", children: [
846
984
  "Tasks (",
847
985
  completedCount,
848
986
  "/",
849
987
  tasks.length,
850
988
  ")"
851
989
  ] }),
852
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AccordionContent, { className: "px-4", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col", children: tasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
990
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(AccordionContent, { className: "px-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex flex-col", children: tasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
853
991
  TaskCheckItem,
854
992
  {
855
993
  title: task.title,
@@ -861,22 +999,23 @@ function OpportunityCard({
861
999
  task.id
862
1000
  )) }) })
863
1001
  ] }) }),
864
- nextTask && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-start gap-1.5 border border-primary/30 bg-primary/5 px-2 py-1.5 text-xs", children: [
865
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1002
+ nextTask && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start gap-1.5 border border-primary/30 bg-primary/5 px-2 py-1.5 text-xs", children: [
1003
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
866
1004
  import_lucide_react6.ArrowRight,
867
1005
  {
868
1006
  className: "mt-0.5 size-3 shrink-0 text-primary",
869
1007
  "aria-hidden": "true"
870
1008
  }
871
1009
  ),
872
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "font-medium", children: "Next:" }),
873
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-muted-foreground", children: nextTask })
1010
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-medium", children: "Next:" }),
1011
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-muted-foreground", children: nextTask })
874
1012
  ] })
875
1013
  ] }),
876
- hasActions && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
877
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Separator, {}),
878
- (onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex gap-2", children: [
879
- onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1014
+ hasActions && // stopPropagation: button clicks must not bubble to onCardClick
1015
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
1016
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
1017
+ (onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex gap-2 pt-2", children: [
1018
+ onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
880
1019
  Button,
881
1020
  {
882
1021
  variant: "outline",
@@ -887,7 +1026,7 @@ function OpportunityCard({
887
1026
  children: "Move to next stage"
888
1027
  }
889
1028
  ),
890
- onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1029
+ onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
891
1030
  Button,
892
1031
  {
893
1032
  variant: "default",
@@ -914,7 +1053,7 @@ function LeadCard({
914
1053
  isSubmitting = false,
915
1054
  className
916
1055
  }) {
917
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1056
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
918
1057
  "div",
919
1058
  {
920
1059
  className: cn(
@@ -924,20 +1063,20 @@ function LeadCard({
924
1063
  ),
925
1064
  "data-slot": "lead-card",
926
1065
  children: [
927
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
928
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
929
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-sm font-semibold text-foreground", children: customerName }),
930
- customerPhone && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
931
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1066
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
1067
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
1068
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm font-semibold text-foreground", children: customerName }),
1069
+ customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1070
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
932
1071
  customerPhone
933
1072
  ] }),
934
- customerEmail && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
935
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
936
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "truncate", children: customerEmail })
1073
+ customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1074
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1075
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
937
1076
  ] })
938
1077
  ] }),
939
- onDelete && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenu, { children: [
940
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1078
+ onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
1079
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
941
1080
  DropdownMenuTrigger,
942
1081
  {
943
1082
  className: cn(
@@ -945,10 +1084,10 @@ function LeadCard({
945
1084
  "-mr-1 -mt-1 size-7 shrink-0"
946
1085
  ),
947
1086
  "aria-label": "Lead actions",
948
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
1087
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
949
1088
  }
950
1089
  ),
951
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1090
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
952
1091
  DropdownMenuItem,
953
1092
  {
954
1093
  onClick: onDelete,
@@ -958,9 +1097,9 @@ function LeadCard({
958
1097
  ) })
959
1098
  ] })
960
1099
  ] }),
961
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Separator, {}),
962
- onSendLoanApplication && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-2", children: [
963
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1100
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
1101
+ onSendLoanApplication && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-2", children: [
1102
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
964
1103
  Button,
965
1104
  {
966
1105
  variant: "outline",
@@ -971,10 +1110,10 @@ function LeadCard({
971
1110
  children: "Send Loan Application Request"
972
1111
  }
973
1112
  ),
974
- loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1113
+ loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
975
1114
  "Or the link below to fill out the loan application directly.",
976
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("br", {}),
977
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1115
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("br", {}),
1116
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
978
1117
  "a",
979
1118
  {
980
1119
  href: `https://${loanApplicationUrl.replace(/^https?:\/\//, "")}`,
@@ -992,7 +1131,7 @@ function LeadCard({
992
1131
  }
993
1132
 
994
1133
  // src/components/ui/kanban-column.tsx
995
- var import_jsx_runtime11 = require("react/jsx-runtime");
1134
+ var import_jsx_runtime13 = require("react/jsx-runtime");
996
1135
  function formatTotalValue(value) {
997
1136
  return formatCurrency(value);
998
1137
  }
@@ -1015,11 +1154,13 @@ function KanbanColumn({
1015
1154
  onMarkAsDone,
1016
1155
  onMoveToNextStage,
1017
1156
  onSendLoanApplication,
1157
+ onCardClick,
1018
1158
  onViewDetails,
1019
1159
  onChangePriority,
1020
1160
  onLaunchAssistant,
1021
1161
  onPutOnHold,
1022
1162
  onDeleteOpportunity,
1163
+ onCardDrop,
1023
1164
  submittingOpportunityId,
1024
1165
  className
1025
1166
  }) {
@@ -1027,7 +1168,26 @@ function KanbanColumn({
1027
1168
  const themeVars = useThemeVars();
1028
1169
  const accentColor = (_a = stage.accentColor) != null ? _a : "var(--color-border)";
1029
1170
  const hasMenu = onEditColumn || !isDefault && onDeleteColumn;
1030
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1171
+ const [isDragOver, setIsDragOver] = React3.useState(false);
1172
+ function handleDragOver(e) {
1173
+ if (!onCardDrop) return;
1174
+ e.preventDefault();
1175
+ e.dataTransfer.dropEffect = "move";
1176
+ setIsDragOver(true);
1177
+ }
1178
+ function handleDragLeave(e) {
1179
+ if (!e.currentTarget.contains(e.relatedTarget)) {
1180
+ setIsDragOver(false);
1181
+ }
1182
+ }
1183
+ function handleDrop(e) {
1184
+ if (!onCardDrop) return;
1185
+ e.preventDefault();
1186
+ setIsDragOver(false);
1187
+ const cardId = e.dataTransfer.getData("text/plain");
1188
+ if (cardId) onCardDrop(cardId);
1189
+ }
1190
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1031
1191
  "div",
1032
1192
  {
1033
1193
  className: cn(
@@ -1041,15 +1201,15 @@ function KanbanColumn({
1041
1201
  }),
1042
1202
  "data-slot": "kanban-column",
1043
1203
  children: [
1044
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-col gap-2 border-b border-border bg-background px-3 py-3", children: [
1045
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1046
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("h2", { className: "text-sm font-semibold text-foreground", children: [
1047
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-muted-foreground", children: stage.count }),
1204
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-2 border-b border-border bg-background px-3 py-3", children: [
1205
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1206
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("h2", { className: "text-sm font-semibold text-foreground", children: [
1207
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-muted-foreground", children: stage.count }),
1048
1208
  " ",
1049
1209
  stage.name
1050
1210
  ] }),
1051
- hasMenu && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DropdownMenu, { children: [
1052
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1211
+ hasMenu && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenu, { children: [
1212
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1053
1213
  DropdownMenuTrigger,
1054
1214
  {
1055
1215
  className: cn(
@@ -1057,14 +1217,14 @@ function KanbanColumn({
1057
1217
  "-mr-1 size-7 shrink-0"
1058
1218
  ),
1059
1219
  "aria-label": "Column actions",
1060
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react7.MoreVertical, { className: "size-4" })
1220
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react7.MoreVertical, { className: "size-4" })
1061
1221
  }
1062
1222
  ),
1063
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DropdownMenuContent, { align: "end", children: [
1064
- onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
1065
- !isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1066
- onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuSeparator, {}),
1067
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1223
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenuContent, { align: "end", children: [
1224
+ onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
1225
+ !isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1226
+ onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuSeparator, {}),
1227
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1068
1228
  DropdownMenuItem,
1069
1229
  {
1070
1230
  onClick: onDeleteColumn,
@@ -1076,8 +1236,8 @@ function KanbanColumn({
1076
1236
  ] })
1077
1237
  ] })
1078
1238
  ] }),
1079
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1080
- stage.growth != null ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1239
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1240
+ stage.growth != null ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1081
1241
  Badge,
1082
1242
  {
1083
1243
  variant: "outline",
@@ -1087,56 +1247,74 @@ function KanbanColumn({
1087
1247
  stage.growth
1088
1248
  ]
1089
1249
  }
1090
- ) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", {}),
1091
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: formatTotalValue(stage.totalValue) })
1250
+ ) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", {}),
1251
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: formatTotalValue(stage.totalValue) })
1092
1252
  ] })
1093
1253
  ] }),
1094
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-1 flex-col gap-2 overflow-y-auto p-2", children: [
1095
- isDropTarget && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "border border-dashed border-primary/40 bg-primary/5 px-3 py-2 text-center text-xs text-primary", children: [
1096
- "Drop here \u2192 ",
1097
- stage.name
1098
- ] }),
1099
- isLoading ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Spinner, { className: "size-5 text-muted-foreground" }) }) : opportunities.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-xs text-muted-foreground", children: "No opportunities in this stage" }) }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1100
- opportunities.map(
1101
- (opp) => onSendLoanApplication ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1102
- LeadCard,
1103
- {
1104
- id: opp.id,
1105
- customerName: opp.customerName,
1106
- customerPhone: opp.customerPhone,
1107
- customerEmail: opp.customerEmail,
1108
- loanApplicationUrl: opp.loanApplicationUrl,
1109
- onSendLoanApplication: () => onSendLoanApplication(opp.id),
1110
- onDelete: onDeleteOpportunity ? () => onDeleteOpportunity(opp.id) : void 0,
1111
- isSubmitting: submittingOpportunityId === opp.id
1112
- },
1113
- opp.id
1114
- ) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1115
- OpportunityCard,
1116
- __spreadProps(__spreadValues({}, opp), {
1117
- onTaskToggle: onTaskToggle ? (taskId) => onTaskToggle(opp.id, taskId) : void 0,
1118
- onMarkAsDone: onMarkAsDone ? () => onMarkAsDone(opp.id) : void 0,
1119
- onMoveToNextStage: onMoveToNextStage ? () => onMoveToNextStage(opp.id) : void 0,
1120
- onViewDetails: onViewDetails ? () => onViewDetails(opp.id) : void 0,
1121
- onChangePriority: onChangePriority ? () => onChangePriority(opp.id) : void 0,
1122
- onLaunchAssistant: onLaunchAssistant ? () => onLaunchAssistant(opp.id) : void 0,
1123
- onPutOnHold: onPutOnHold ? () => onPutOnHold(opp.id) : void 0,
1124
- onDelete: onDeleteOpportunity ? () => onDeleteOpportunity(opp.id) : void 0,
1125
- isSubmitting: submittingOpportunityId === opp.id
1126
- }),
1127
- opp.id
1128
- )
1254
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1255
+ "div",
1256
+ {
1257
+ className: cn(
1258
+ "flex flex-1 flex-col gap-2 overflow-y-auto p-2",
1259
+ isDragOver && "ring-2 ring-primary ring-inset bg-primary/5"
1129
1260
  ),
1130
- hasMore && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1131
- "div",
1132
- {
1133
- ref: loaderRef,
1134
- className: "flex min-h-[50px] items-center justify-center",
1135
- children: isLoadingMore && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Spinner, { className: "size-5 text-muted-foreground" })
1136
- }
1137
- )
1138
- ] })
1139
- ] })
1261
+ onDragOver: handleDragOver,
1262
+ onDragLeave: handleDragLeave,
1263
+ onDrop: handleDrop,
1264
+ children: [
1265
+ (isDropTarget || isDragOver) && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "border border-dashed border-primary/40 bg-primary/5 px-3 py-2 text-center text-xs text-primary", children: [
1266
+ "Drop here \u2192 ",
1267
+ stage.name
1268
+ ] }),
1269
+ isLoading ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Spinner, { className: "size-5 text-muted-foreground" }) }) : opportunities.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs text-muted-foreground", children: "No opportunities in this stage" }) }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1270
+ opportunities.map(
1271
+ (opp) => onSendLoanApplication ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1272
+ LeadCard,
1273
+ {
1274
+ id: opp.id,
1275
+ customerName: opp.customerName,
1276
+ customerPhone: opp.customerPhone,
1277
+ customerEmail: opp.customerEmail,
1278
+ loanApplicationUrl: opp.loanApplicationUrl,
1279
+ onSendLoanApplication: () => onSendLoanApplication(opp.id),
1280
+ onDelete: onDeleteOpportunity ? () => onDeleteOpportunity(opp.id) : void 0,
1281
+ isSubmitting: submittingOpportunityId === opp.id
1282
+ },
1283
+ opp.id
1284
+ ) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1285
+ OpportunityCard,
1286
+ __spreadProps(__spreadValues({}, opp), {
1287
+ draggable: !!onCardDrop,
1288
+ onDragStart: onCardDrop ? (e) => {
1289
+ e.dataTransfer.setData("text/plain", opp.id);
1290
+ e.dataTransfer.effectAllowed = "move";
1291
+ } : void 0,
1292
+ onCardClick: onCardClick ? () => onCardClick(opp.id) : void 0,
1293
+ onTaskToggle: onTaskToggle ? (taskId) => onTaskToggle(opp.id, taskId) : void 0,
1294
+ onMarkAsDone: onMarkAsDone ? () => onMarkAsDone(opp.id) : void 0,
1295
+ onMoveToNextStage: onMoveToNextStage ? () => onMoveToNextStage(opp.id) : void 0,
1296
+ onViewDetails: onViewDetails ? () => onViewDetails(opp.id) : void 0,
1297
+ onChangePriority: onChangePriority ? () => onChangePriority(opp.id) : void 0,
1298
+ onLaunchAssistant: onLaunchAssistant ? () => onLaunchAssistant(opp.id) : void 0,
1299
+ onPutOnHold: onPutOnHold ? () => onPutOnHold(opp.id) : void 0,
1300
+ onDelete: onDeleteOpportunity ? () => onDeleteOpportunity(opp.id) : void 0,
1301
+ isSubmitting: submittingOpportunityId === opp.id
1302
+ }),
1303
+ opp.id
1304
+ )
1305
+ ),
1306
+ hasMore && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1307
+ "div",
1308
+ {
1309
+ ref: loaderRef,
1310
+ className: "flex min-h-[50px] items-center justify-center",
1311
+ children: isLoadingMore && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Spinner, { className: "size-5 text-muted-foreground" })
1312
+ }
1313
+ )
1314
+ ] })
1315
+ ]
1316
+ }
1317
+ )
1140
1318
  ]
1141
1319
  }
1142
1320
  );