@wealthx/shadcn 1.3.1 → 1.3.3

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 (313) hide show
  1. package/.turbo/turbo-build.log +259 -223
  2. package/CHANGELOG.md +12 -0
  3. package/dist/{chunk-2UM72RJ7.mjs → chunk-2D3HQPFN.mjs} +12 -10
  4. package/dist/chunk-2EM2FRU6.mjs +613 -0
  5. package/dist/{chunk-FH6QVUVZ.mjs → chunk-2GIYVERS.mjs} +2 -2
  6. package/dist/chunk-2P7HP7LR.mjs +68 -0
  7. package/dist/{chunk-HISNT2MG.mjs → chunk-37AE3OM5.mjs} +5 -5
  8. package/dist/{chunk-HBZLGDIN.mjs → chunk-3ERBUVHC.mjs} +169 -110
  9. package/dist/{chunk-C7CQJNMR.mjs → chunk-3VDET466.mjs} +2 -2
  10. package/dist/{chunk-462HMNO4.mjs → chunk-4MM7LHM5.mjs} +2 -2
  11. package/dist/{chunk-QMY3AZJH.mjs → chunk-4Z66LMIQ.mjs} +2 -2
  12. package/dist/{chunk-U5X52X37.mjs → chunk-57ZXILTS.mjs} +6 -6
  13. package/dist/{chunk-3OYFOX3X.mjs → chunk-5VOTTIXF.mjs} +2 -2
  14. package/dist/{chunk-LBMRIB3G.mjs → chunk-6AJUS7VX.mjs} +1 -1
  15. package/dist/{chunk-OODBHKG7.mjs → chunk-6HIOM2HL.mjs} +7 -4
  16. package/dist/{chunk-BDYZCBRT.mjs → chunk-6QAFGZC2.mjs} +2 -2
  17. package/dist/{chunk-U4NDAF2P.mjs → chunk-6TX73WG7.mjs} +1 -1
  18. package/dist/{chunk-GD4BJDJR.mjs → chunk-7BTFGCFC.mjs} +4 -4
  19. package/dist/{chunk-FAKPBKLT.mjs → chunk-7GWRPXHD.mjs} +4 -4
  20. package/dist/{chunk-NMOI6CQD.mjs → chunk-7YI3HEBH.mjs} +5 -5
  21. package/dist/{chunk-T4BJLT57.mjs → chunk-AE7MASLF.mjs} +5 -5
  22. package/dist/{chunk-VLQZANBF.mjs → chunk-AFML43VJ.mjs} +6 -1
  23. package/dist/chunk-BBXSNDS3.mjs +260 -0
  24. package/dist/chunk-BOW7U26Y.mjs +203 -0
  25. package/dist/{chunk-34NWQURD.mjs → chunk-BS75ICOO.mjs} +2 -2
  26. package/dist/chunk-D2NSIIXG.mjs +394 -0
  27. package/dist/{chunk-3GF7OVTP.mjs → chunk-DGNHGNYH.mjs} +2 -2
  28. package/dist/{chunk-VLARHE5V.mjs → chunk-DMXYRCHM.mjs} +6 -6
  29. package/dist/{chunk-OGOYQ7BG.mjs → chunk-DQB4EPIS.mjs} +1 -1
  30. package/dist/{chunk-MIZQHHUO.mjs → chunk-FL6DZFJK.mjs} +106 -38
  31. package/dist/{chunk-I3RZS7V2.mjs → chunk-FLL633WS.mjs} +19 -33
  32. package/dist/{chunk-PBL4OQV2.mjs → chunk-FTPBQVQ6.mjs} +4 -4
  33. package/dist/chunk-FYPSTTEJ.mjs +169 -0
  34. package/dist/{chunk-6O6KD7CE.mjs → chunk-G27TSQLQ.mjs} +6 -6
  35. package/dist/{chunk-66MI7Q4B.mjs → chunk-GT3RU6GA.mjs} +2 -2
  36. package/dist/{chunk-D6ID6M4V.mjs → chunk-GTAVSBDO.mjs} +2 -2
  37. package/dist/{chunk-24FUO7TD.mjs → chunk-H6NQTIF4.mjs} +2 -2
  38. package/dist/{chunk-7DHU4VGG.mjs → chunk-HK4HUQTV.mjs} +2 -2
  39. package/dist/chunk-I4KVSZCH.mjs +101 -0
  40. package/dist/{chunk-RGVKLTLH.mjs → chunk-IKXYTCSB.mjs} +2 -2
  41. package/dist/{chunk-Y6DWJSKZ.mjs → chunk-ISUA7DSB.mjs} +1 -1
  42. package/dist/{chunk-2A5RRQGG.mjs → chunk-JD3YWRNP.mjs} +10 -14
  43. package/dist/{chunk-J5UICVJS.mjs → chunk-JPGL36WQ.mjs} +2 -2
  44. package/dist/{chunk-7XJHLGUV.mjs → chunk-JTK6VJXY.mjs} +2 -2
  45. package/dist/{chunk-7YAU5CY6.mjs → chunk-JVMXMFBB.mjs} +2 -2
  46. package/dist/{chunk-IAE3F7DR.mjs → chunk-JZY6TNIS.mjs} +21 -21
  47. package/dist/{chunk-K5A5L6T2.mjs → chunk-K4KOD3KR.mjs} +12 -12
  48. package/dist/{chunk-MBON7YRJ.mjs → chunk-K5QV4TT6.mjs} +3 -3
  49. package/dist/{chunk-IHMFS7NZ.mjs → chunk-K5VHK7CM.mjs} +21 -21
  50. package/dist/{chunk-RJI6GKVF.mjs → chunk-KCWNDYPZ.mjs} +5 -5
  51. package/dist/{chunk-UFYSFDER.mjs → chunk-KFH36NKF.mjs} +1 -1
  52. package/dist/{chunk-EBXQWIYG.mjs → chunk-KLTACJ2G.mjs} +5 -5
  53. package/dist/{chunk-3TTACBDP.mjs → chunk-KWD6GANL.mjs} +4 -4
  54. package/dist/{chunk-IOJRDS6V.mjs → chunk-L4NSRQ3T.mjs} +218 -147
  55. package/dist/{chunk-GYMYRIZP.mjs → chunk-LBTHZSBT.mjs} +2 -2
  56. package/dist/{chunk-AMQZRHEZ.mjs → chunk-LQULK2E3.mjs} +5 -5
  57. package/dist/{chunk-YJG55G2H.mjs → chunk-LR6LHDP3.mjs} +5 -5
  58. package/dist/{chunk-7PV3IWCN.mjs → chunk-M4VYX2PV.mjs} +19 -1
  59. package/dist/{chunk-P76HMUI6.mjs → chunk-MDUKXXIL.mjs} +2 -2
  60. package/dist/{chunk-LV35NGVG.mjs → chunk-N6Q5IPKT.mjs} +9 -9
  61. package/dist/{chunk-DOEO3CDL.mjs → chunk-NB3ZL36B.mjs} +1 -1
  62. package/dist/{chunk-XREGSKX3.mjs → chunk-NOOEKOWY.mjs} +5 -5
  63. package/dist/{chunk-NL3ZO62D.mjs → chunk-NT4FX27K.mjs} +1 -1
  64. package/dist/{chunk-QZ4RE6NA.mjs → chunk-NTYQWVLI.mjs} +6 -6
  65. package/dist/{chunk-ERGGHC2V.mjs → chunk-OEOOYMC2.mjs} +2 -2
  66. package/dist/{chunk-4GAWMKMI.mjs → chunk-OIKBW2QD.mjs} +291 -54
  67. package/dist/{chunk-DUJTAXMH.mjs → chunk-OKTJFDPN.mjs} +6 -6
  68. package/dist/chunk-OLKMCXAR.mjs +1219 -0
  69. package/dist/{chunk-EI5F6FMT.mjs → chunk-OWFQSXVD.mjs} +3 -3
  70. package/dist/{chunk-6DZEXFNB.mjs → chunk-P2N2PEFY.mjs} +3 -3
  71. package/dist/{chunk-NSLMILBT.mjs → chunk-P7CEBZM6.mjs} +2 -2
  72. package/dist/{chunk-7S5AESZO.mjs → chunk-PNRUH7JY.mjs} +6 -6
  73. package/dist/{chunk-ZU4NV6RG.mjs → chunk-PNSYFE3K.mjs} +2 -2
  74. package/dist/{chunk-JKGDCQTZ.mjs → chunk-QTRSCVQ3.mjs} +5 -5
  75. package/dist/{chunk-ABFDMHOR.mjs → chunk-QX7IFQSF.mjs} +5 -5
  76. package/dist/{chunk-CFMQP5QS.mjs → chunk-QXKGOMUX.mjs} +6 -6
  77. package/dist/{chunk-NQPOYKAQ.mjs → chunk-R2ON6CAN.mjs} +2 -2
  78. package/dist/{chunk-DBHJ5KC3.mjs → chunk-R4HCRDU5.mjs} +1 -1
  79. package/dist/{chunk-EWRB4PAD.mjs → chunk-RCAOCHWA.mjs} +14 -14
  80. package/dist/{chunk-EFRENWEJ.mjs → chunk-RSUIPKGX.mjs} +2 -2
  81. package/dist/{chunk-DGHAXJBN.mjs → chunk-S2FKV4M5.mjs} +5 -5
  82. package/dist/{chunk-RGU7HOEC.mjs → chunk-SET2ANTY.mjs} +5 -7
  83. package/dist/chunk-SFH2NJEJ.mjs +47 -0
  84. package/dist/{chunk-6AW4KJHE.mjs → chunk-SIVYAI3M.mjs} +12 -12
  85. package/dist/{chunk-5FQIKDKP.mjs → chunk-THVO2N47.mjs} +8 -8
  86. package/dist/{chunk-JMHR3YGZ.mjs → chunk-TLAWKTSA.mjs} +3 -3
  87. package/dist/{chunk-HVY6KCCF.mjs → chunk-TOWTPLRC.mjs} +68 -72
  88. package/dist/{chunk-6JQFUE5I.mjs → chunk-UALR6JGV.mjs} +2 -2
  89. package/dist/{chunk-MLNEWRWV.mjs → chunk-UJZ4UHWI.mjs} +10 -15
  90. package/dist/{chunk-MARPPFOJ.mjs → chunk-UNACI2YK.mjs} +2 -2
  91. package/dist/{chunk-3NCUZIFP.mjs → chunk-V6XGXYCJ.mjs} +7 -7
  92. package/dist/chunk-VB5M6OZQ.mjs +57 -0
  93. package/dist/{chunk-5IS7G74I.mjs → chunk-VY5NEUP7.mjs} +6 -6
  94. package/dist/{chunk-JHJHG4GO.mjs → chunk-WE4YKBDE.mjs} +2 -2
  95. package/dist/{chunk-BKNFWEH2.mjs → chunk-WL6WVV47.mjs} +3 -3
  96. package/dist/{chunk-FWCSY2DS.mjs → chunk-WNQUEZJF.mjs} +22 -1
  97. package/dist/{chunk-2Y7YJKPE.mjs → chunk-WZ6UJCBL.mjs} +1 -1
  98. package/dist/{chunk-UMTOX62O.mjs → chunk-XYPW2XA5.mjs} +13 -10
  99. package/dist/chunk-Y2MTAVAK.mjs +34 -0
  100. package/dist/{chunk-6CR5N2JW.mjs → chunk-YCWLFG27.mjs} +6 -6
  101. package/dist/{chunk-PU4YZQXV.mjs → chunk-YE67AALL.mjs} +12 -12
  102. package/dist/{chunk-M3FV7LOK.mjs → chunk-YEWNFK5S.mjs} +6 -1
  103. package/dist/{chunk-R3VSPKNP.mjs → chunk-YIZHS72Z.mjs} +11 -12
  104. package/dist/{chunk-7PYJD5JI.mjs → chunk-ZEDMKQK2.mjs} +2 -2
  105. package/dist/{chunk-N2PT566P.mjs → chunk-ZFCDYW6N.mjs} +4 -4
  106. package/dist/chunk-ZGQIVGIN.mjs +57 -0
  107. package/dist/{chunk-Q2BGOAMG.mjs → chunk-ZKWXDQDG.mjs} +4 -4
  108. package/dist/{chunk-GHC7LLUX.mjs → chunk-ZOWL2L5J.mjs} +5 -5
  109. package/dist/components/ui/accordion.mjs +3 -3
  110. package/dist/components/ui/add-column-modal.js +2 -2
  111. package/dist/components/ui/add-column-modal.mjs +10 -10
  112. package/dist/components/ui/add-lead-modal.js +424 -82
  113. package/dist/components/ui/add-lead-modal.mjs +12 -9
  114. package/dist/components/ui/advisor-card.js +2 -2
  115. package/dist/components/ui/advisor-card.mjs +8 -8
  116. package/dist/components/ui/ai-assistant-drawer.js +2 -2
  117. package/dist/components/ui/ai-assistant-drawer.mjs +9 -9
  118. package/dist/components/ui/ai-builder.js +958 -0
  119. package/dist/components/ui/ai-builder.mjs +25 -0
  120. package/dist/components/ui/ai-conversations.js +2045 -0
  121. package/dist/components/ui/ai-conversations.mjs +41 -0
  122. package/dist/components/ui/alert-dialog.js +2 -2
  123. package/dist/components/ui/alert-dialog.mjs +5 -5
  124. package/dist/components/ui/alert.mjs +3 -3
  125. package/dist/components/ui/appointment-action-dialogs.js +19 -3
  126. package/dist/components/ui/appointment-action-dialogs.mjs +15 -14
  127. package/dist/components/ui/appointment-availability-settings.js +181 -111
  128. package/dist/components/ui/appointment-availability-settings.mjs +20 -18
  129. package/dist/components/ui/appointment-book-dialog.js +113 -24
  130. package/dist/components/ui/appointment-book-dialog.mjs +21 -20
  131. package/dist/components/ui/appointment-calendar-view.js +19 -3
  132. package/dist/components/ui/appointment-calendar-view.mjs +10 -9
  133. package/dist/components/ui/appointment-detail-sheet.js +19 -3
  134. package/dist/components/ui/appointment-detail-sheet.mjs +18 -17
  135. package/dist/components/ui/appointment-gmail-connect.js +49 -89
  136. package/dist/components/ui/appointment-gmail-connect.mjs +8 -9
  137. package/dist/components/ui/appointment-mini-card.js +2 -2
  138. package/dist/components/ui/appointment-mini-card.mjs +6 -6
  139. package/dist/components/ui/appointment-time-slot-picker.mjs +6 -6
  140. package/dist/components/ui/appointment-upcoming-card.js +19 -3
  141. package/dist/components/ui/appointment-upcoming-card.mjs +15 -14
  142. package/dist/components/ui/auth-logo.js +95 -0
  143. package/dist/components/ui/auth-logo.mjs +8 -0
  144. package/dist/components/ui/auth-page-layout.js +108 -0
  145. package/dist/components/ui/auth-page-layout.mjs +8 -0
  146. package/dist/components/ui/avatar.mjs +3 -3
  147. package/dist/components/ui/backoffice-alert-history-chart.js +2 -2
  148. package/dist/components/ui/backoffice-alert-history-chart.mjs +9 -9
  149. package/dist/components/ui/backoffice-alerts-chart.js +2 -2
  150. package/dist/components/ui/backoffice-alerts-chart.mjs +11 -11
  151. package/dist/components/ui/backoffice-connections-chart.js +2 -2
  152. package/dist/components/ui/backoffice-connections-chart.mjs +11 -11
  153. package/dist/components/ui/backoffice-contact-history-chart.js +2 -2
  154. package/dist/components/ui/backoffice-contact-history-chart.mjs +9 -9
  155. package/dist/components/ui/badge.mjs +4 -4
  156. package/dist/components/ui/borrowing-capacity-line-chart.js +145 -132
  157. package/dist/components/ui/borrowing-capacity-line-chart.mjs +9 -9
  158. package/dist/components/ui/button.js +2 -2
  159. package/dist/components/ui/button.mjs +4 -4
  160. package/dist/components/ui/calendar.js +17 -3
  161. package/dist/components/ui/calendar.mjs +6 -5
  162. package/dist/components/ui/card.mjs +3 -3
  163. package/dist/components/ui/cash-balance-line-chart.js +157 -152
  164. package/dist/components/ui/cash-balance-line-chart.mjs +9 -9
  165. package/dist/components/ui/cashflow-bar-chart.js +2 -2
  166. package/dist/components/ui/cashflow-bar-chart.mjs +9 -9
  167. package/dist/components/ui/chat-widget-primitives.js +573 -0
  168. package/dist/components/ui/chat-widget-primitives.mjs +21 -0
  169. package/dist/components/ui/chat-widget.js +1268 -0
  170. package/dist/components/ui/chat-widget.mjs +29 -0
  171. package/dist/components/ui/checkbox.mjs +3 -3
  172. package/dist/components/ui/chip.js +2 -2
  173. package/dist/components/ui/chip.mjs +6 -6
  174. package/dist/components/ui/color-picker.js +2 -2
  175. package/dist/components/ui/color-picker.mjs +7 -7
  176. package/dist/components/ui/combobox.mjs +3 -3
  177. package/dist/components/ui/data-table.js +2 -2
  178. package/dist/components/ui/data-table.mjs +12 -12
  179. package/dist/components/ui/date-picker.js +22 -6
  180. package/dist/components/ui/date-picker.mjs +9 -8
  181. package/dist/components/ui/dialog.js +2 -2
  182. package/dist/components/ui/dialog.mjs +5 -5
  183. package/dist/components/ui/document-checklist-template.js +630 -0
  184. package/dist/components/ui/document-checklist-template.mjs +15 -0
  185. package/dist/components/ui/drawer.js +2 -2
  186. package/dist/components/ui/drawer.mjs +3 -3
  187. package/dist/components/ui/dropdown-menu.mjs +3 -3
  188. package/dist/components/ui/empty.mjs +3 -3
  189. package/dist/components/ui/expense-bar-chart.js +2 -2
  190. package/dist/components/ui/expense-bar-chart.mjs +9 -9
  191. package/dist/components/ui/field.mjs +5 -5
  192. package/dist/components/ui/financial-cards.js +431 -291
  193. package/dist/components/ui/financial-cards.mjs +10 -9
  194. package/dist/components/ui/financial-drawers.js +4 -4
  195. package/dist/components/ui/financial-drawers.mjs +8 -8
  196. package/dist/components/ui/financial-primitives.mjs +3 -3
  197. package/dist/components/ui/financial-sections.js +8 -9
  198. package/dist/components/ui/financial-sections.mjs +12 -12
  199. package/dist/components/ui/form-primitives.mjs +8 -8
  200. package/dist/components/ui/income-bar-chart.js +2 -2
  201. package/dist/components/ui/income-bar-chart.mjs +9 -9
  202. package/dist/components/ui/input-group.js +2 -2
  203. package/dist/components/ui/input-group.mjs +7 -7
  204. package/dist/components/ui/input-otp.mjs +3 -3
  205. package/dist/components/ui/input.mjs +3 -3
  206. package/dist/components/ui/kanban-column.js +19 -23
  207. package/dist/components/ui/kanban-column.mjs +14 -14
  208. package/dist/components/ui/label.mjs +3 -3
  209. package/dist/components/ui/onboarding-layout.js +476 -0
  210. package/dist/components/ui/onboarding-layout.mjs +11 -0
  211. package/dist/components/ui/opportunity-card.js +2 -2
  212. package/dist/components/ui/opportunity-card.mjs +12 -12
  213. package/dist/components/ui/opportunity-edit-modals.js +22 -6
  214. package/dist/components/ui/opportunity-edit-modals.mjs +21 -20
  215. package/dist/components/ui/opportunity-summary-tab.js +991 -674
  216. package/dist/components/ui/opportunity-summary-tab.mjs +26 -26
  217. package/dist/components/ui/page-header.mjs +3 -3
  218. package/dist/components/ui/page-top-bar.mjs +3 -3
  219. package/dist/components/ui/pagination.js +2 -2
  220. package/dist/components/ui/pagination.mjs +6 -6
  221. package/dist/components/ui/password-strength-tooltip.js +197 -0
  222. package/dist/components/ui/password-strength-tooltip.mjs +11 -0
  223. package/dist/components/ui/pipeline-alerts.mjs +3 -3
  224. package/dist/components/ui/pipeline-board.js +19 -23
  225. package/dist/components/ui/pipeline-board.mjs +18 -18
  226. package/dist/components/ui/pipeline-chart.js +12 -6
  227. package/dist/components/ui/pipeline-chart.mjs +4 -3
  228. package/dist/components/ui/pipeline-dialogs.js +28 -12
  229. package/dist/components/ui/pipeline-dialogs.mjs +14 -13
  230. package/dist/components/ui/pipeline-primitives.mjs +6 -6
  231. package/dist/components/ui/popover.mjs +3 -3
  232. package/dist/components/ui/progress.mjs +3 -3
  233. package/dist/components/ui/property-cashflow-doughnut-chart.js +2 -2
  234. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +9 -9
  235. package/dist/components/ui/property-debt-equity-doughnut-chart.js +2 -2
  236. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +9 -9
  237. package/dist/components/ui/property-mobile-estimate-line-chart.js +2 -2
  238. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +9 -9
  239. package/dist/components/ui/radio-group.mjs +3 -3
  240. package/dist/components/ui/select.mjs +3 -3
  241. package/dist/components/ui/separator.mjs +3 -3
  242. package/dist/components/ui/sheet.mjs +3 -3
  243. package/dist/components/ui/sidebar-nav.js +7 -9
  244. package/dist/components/ui/sidebar-nav.mjs +7 -7
  245. package/dist/components/ui/skeleton.mjs +3 -3
  246. package/dist/components/ui/slider.mjs +3 -3
  247. package/dist/components/ui/sonner.mjs +2 -2
  248. package/dist/components/ui/spinner.mjs +3 -3
  249. package/dist/components/ui/stage-timeline.mjs +10 -10
  250. package/dist/components/ui/stepper.mjs +3 -3
  251. package/dist/components/ui/switch.mjs +3 -3
  252. package/dist/components/ui/table.mjs +3 -3
  253. package/dist/components/ui/tabs.mjs +3 -3
  254. package/dist/components/ui/textarea.mjs +3 -3
  255. package/dist/components/ui/toggle-group.mjs +4 -4
  256. package/dist/components/ui/toggle.mjs +3 -3
  257. package/dist/components/ui/tooltip.mjs +3 -3
  258. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +2 -2
  259. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +9 -9
  260. package/dist/components/ui/transactions-income-expense-bar-chart.js +2 -2
  261. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +9 -9
  262. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +2 -2
  263. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +9 -9
  264. package/dist/components/ui/two-fa-setup-form.js +612 -0
  265. package/dist/components/ui/two-fa-setup-form.mjs +16 -0
  266. package/dist/components/ui/upload-card.js +187 -0
  267. package/dist/components/ui/upload-card.mjs +10 -0
  268. package/dist/components/ui/video-background.js +118 -0
  269. package/dist/components/ui/video-background.mjs +8 -0
  270. package/dist/index.js +12765 -9400
  271. package/dist/index.mjs +341 -245
  272. package/dist/lib/colors.mjs +1 -1
  273. package/dist/lib/theme-provider.mjs +1 -1
  274. package/dist/lib/typography.mjs +2 -2
  275. package/dist/lib/utils.js +8 -2
  276. package/dist/lib/utils.mjs +6 -4
  277. package/dist/styles.css +1 -1
  278. package/package.json +61 -1
  279. package/src/components/index.tsx +126 -1
  280. package/src/components/ui/add-lead-modal.tsx +101 -142
  281. package/src/components/ui/ai-builder.tsx +560 -0
  282. package/src/components/ui/ai-conversations.tsx +1690 -0
  283. package/src/components/ui/appointment-availability-settings.tsx +152 -101
  284. package/src/components/ui/appointment-book-dialog.tsx +138 -24
  285. package/src/components/ui/appointment-calendar-view.tsx +2 -3
  286. package/src/components/ui/appointment-gmail-connect.tsx +23 -42
  287. package/src/components/ui/auth-logo.tsx +50 -0
  288. package/src/components/ui/auth-page-layout.tsx +59 -0
  289. package/src/components/ui/borrowing-capacity-line-chart.tsx +10 -8
  290. package/src/components/ui/button.tsx +2 -2
  291. package/src/components/ui/calendar.tsx +2 -1
  292. package/src/components/ui/cash-balance-line-chart.tsx +10 -14
  293. package/src/components/ui/chart-shared.tsx +10 -0
  294. package/src/components/ui/chat-widget-primitives.tsx +336 -0
  295. package/src/components/ui/chat-widget.tsx +822 -0
  296. package/src/components/ui/document-checklist-template.tsx +264 -0
  297. package/src/components/ui/drawer.tsx +2 -2
  298. package/src/components/ui/financial-cards.tsx +176 -78
  299. package/src/components/ui/financial-drawers.tsx +2 -2
  300. package/src/components/ui/financial-sections.tsx +1 -1
  301. package/src/components/ui/kanban-column.tsx +2 -5
  302. package/src/components/ui/onboarding-layout.tsx +109 -0
  303. package/src/components/ui/opportunity-summary-tab.tsx +469 -142
  304. package/src/components/ui/password-strength-tooltip.tsx +70 -0
  305. package/src/components/ui/pipeline-chart.tsx +2 -6
  306. package/src/components/ui/sidebar-nav.tsx +2 -15
  307. package/src/components/ui/two-fa-setup-form.tsx +229 -0
  308. package/src/components/ui/upload-card.tsx +98 -0
  309. package/src/components/ui/video-background.tsx +55 -0
  310. package/src/lib/format-date.ts +26 -0
  311. package/src/lib/utils.ts +11 -0
  312. package/src/styles/styles-css.ts +1 -1
  313. package/tsup.config.ts +13 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-VLQZANBF.mjs";
3
+ } from "./chunk-AFML43VJ.mjs";
4
4
 
5
5
  // src/components/ui/page-header.tsx
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Skeleton
3
- } from "./chunk-D6ID6M4V.mjs";
3
+ } from "./chunk-GTAVSBDO.mjs";
4
4
  import {
5
5
  CHART_PERIODS,
6
6
  CHART_SLICE_COUNT,
@@ -11,28 +11,28 @@ import {
11
11
  FALLBACK_TICK,
12
12
  formatTooltipDate,
13
13
  hexToRgba
14
- } from "./chunk-M3FV7LOK.mjs";
14
+ } from "./chunk-YEWNFK5S.mjs";
15
15
  import {
16
16
  Empty,
17
17
  EmptyDescription
18
- } from "./chunk-NQPOYKAQ.mjs";
18
+ } from "./chunk-R2ON6CAN.mjs";
19
19
  import {
20
20
  Card,
21
21
  CardAction,
22
22
  CardContent,
23
23
  CardHeader,
24
24
  CardTitle
25
- } from "./chunk-C7CQJNMR.mjs";
25
+ } from "./chunk-3VDET466.mjs";
26
26
  import {
27
27
  useThemeVars
28
28
  } from "./chunk-FEZKMUCF.mjs";
29
29
  import {
30
30
  cn
31
- } from "./chunk-VLQZANBF.mjs";
31
+ } from "./chunk-AFML43VJ.mjs";
32
32
  import {
33
33
  __spreadProps,
34
34
  __spreadValues
35
- } from "./chunk-FWCSY2DS.mjs";
35
+ } from "./chunk-WNQUEZJF.mjs";
36
36
 
37
37
  // src/components/ui/income-bar-chart.tsx
38
38
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-VLQZANBF.mjs";
3
+ } from "./chunk-AFML43VJ.mjs";
4
4
  import {
5
5
  __objRest,
6
6
  __spreadProps,
7
7
  __spreadValues
8
- } from "./chunk-FWCSY2DS.mjs";
8
+ } from "./chunk-WNQUEZJF.mjs";
9
9
 
10
10
  // src/components/ui/combobox.tsx
11
11
  import { CheckIcon, ChevronDownIcon, SearchIcon } from "lucide-react";
@@ -6,44 +6,65 @@ import {
6
6
  EditIncomeModal,
7
7
  EditLoanScenarioModal,
8
8
  PROPERTY_ASSET_TYPES
9
- } from "./chunk-IAE3F7DR.mjs";
9
+ } from "./chunk-JZY6TNIS.mjs";
10
10
  import {
11
11
  AboutCard,
12
12
  DebtCard,
13
13
  ExpensesCard,
14
14
  IncomeCard,
15
15
  PropertyCard
16
- } from "./chunk-IOJRDS6V.mjs";
16
+ } from "./chunk-L4NSRQ3T.mjs";
17
17
  import {
18
18
  FinancialDetailField,
19
19
  FinancialLineItem,
20
20
  FinancialSectionLabel,
21
21
  FinancialSubtotalBlock,
22
22
  FinancialSubtotalFrame
23
- } from "./chunk-OGOYQ7BG.mjs";
23
+ } from "./chunk-DQB4EPIS.mjs";
24
24
  import {
25
25
  formatCurrency
26
26
  } from "./chunk-MN5NYQCL.mjs";
27
+ import {
28
+ Badge
29
+ } from "./chunk-WL6WVV47.mjs";
27
30
  import {
28
31
  Tabs,
29
32
  TabsContent,
30
33
  TabsList,
31
34
  TabsTrigger
32
- } from "./chunk-JHJHG4GO.mjs";
35
+ } from "./chunk-WE4YKBDE.mjs";
36
+ import {
37
+ Checkbox
38
+ } from "./chunk-IKXYTCSB.mjs";
39
+ import {
40
+ Select,
41
+ SelectContent,
42
+ SelectItem,
43
+ SelectTrigger
44
+ } from "./chunk-ZEDMKQK2.mjs";
33
45
  import {
34
46
  Button
35
- } from "./chunk-XREGSKX3.mjs";
47
+ } from "./chunk-NOOEKOWY.mjs";
36
48
  import {
37
49
  cn
38
- } from "./chunk-VLQZANBF.mjs";
50
+ } from "./chunk-AFML43VJ.mjs";
39
51
  import {
40
52
  __spreadProps,
41
53
  __spreadValues
42
- } from "./chunk-FWCSY2DS.mjs";
54
+ } from "./chunk-WNQUEZJF.mjs";
43
55
 
44
56
  // src/components/ui/opportunity-summary-tab.tsx
57
+ import * as React from "react";
45
58
  import { useState } from "react";
46
- import { ChevronDown, ChevronUp, Mail, Pencil, Phone } from "lucide-react";
59
+ import {
60
+ AlertCircle,
61
+ CheckCircle2,
62
+ Download,
63
+ FileText,
64
+ Mail,
65
+ Pencil,
66
+ Phone
67
+ } from "lucide-react";
47
68
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
48
69
  function toMonthly(amount, freq) {
49
70
  return freq === "Monthly" ? amount : amount * 52 / 12;
@@ -73,19 +94,9 @@ function lvrColorClass(pct) {
73
94
  }
74
95
  function serviceabilityInfo(surplus) {
75
96
  if (surplus > 1500)
76
- return {
77
- label: "Likely Serviceable",
78
- badgeClass: "bg-emerald-50 text-emerald-700 border border-emerald-200"
79
- };
80
- if (surplus > 0)
81
- return {
82
- label: "Borderline",
83
- badgeClass: "bg-amber-50 text-amber-700 border border-amber-200"
84
- };
85
- return {
86
- label: "At Risk",
87
- badgeClass: "bg-red-50 text-destructive border border-red-200"
88
- };
97
+ return { label: "Likely Serviceable", variant: "success" };
98
+ if (surplus > 0) return { label: "Borderline", variant: "warning" };
99
+ return { label: "At Risk", variant: "destructive" };
89
100
  }
90
101
  function SectionEditButton({
91
102
  onClick,
@@ -186,7 +197,7 @@ function HeroBand({
186
197
  }
187
198
  )
188
199
  ] }),
189
- /* @__PURE__ */ jsx("div", { className: cn("px-2.5 py-1 text-xs font-medium", svc.badgeClass), children: svc.label })
200
+ /* @__PURE__ */ jsx(Badge, { variant: svc.variant, children: svc.label })
190
201
  ] })
191
202
  ] });
192
203
  }
@@ -211,14 +222,15 @@ function ApplicantCardTab({
211
222
  )
212
223
  );
213
224
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 py-4", children: [
214
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
215
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
225
+ /* @__PURE__ */ jsxs("div", { className: "border border-border", children: [
226
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
216
227
  /* @__PURE__ */ jsx(FinancialSectionLabel, { children: "About" }),
217
228
  /* @__PURE__ */ jsx(SectionEditButton, { onClick: onEditAbout, title: "Edit About" })
218
229
  ] }),
219
- /* @__PURE__ */ jsx(
230
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border", children: /* @__PURE__ */ jsx(
220
231
  AboutCard,
221
232
  {
233
+ borderless: true,
222
234
  title: about.title,
223
235
  firstName: about.firstName,
224
236
  lastName: about.lastName,
@@ -228,6 +240,7 @@ function ApplicantCardTab({
228
240
  gender: about.gender,
229
241
  maritalStatus: about.maritalStatus,
230
242
  numDependants: about.numDependants,
243
+ dependants: about.dependants,
231
244
  citizenStatus: about.citizenStatus,
232
245
  residentialAddress: about.residentialAddress,
233
246
  residentialStatus: about.residentialStatus,
@@ -238,16 +251,17 @@ function ApplicantCardTab({
238
251
  propertyInTrust: about.propertyInTrust,
239
252
  companyOwnership: about.companyOwnership
240
253
  }
241
- )
254
+ ) })
242
255
  ] }),
243
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
244
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
256
+ /* @__PURE__ */ jsxs("div", { className: "border border-border", children: [
257
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
245
258
  /* @__PURE__ */ jsx(FinancialSectionLabel, { children: "Income" }),
246
259
  /* @__PURE__ */ jsx(SectionEditButton, { onClick: onEditIncome, title: "Edit Income" })
247
260
  ] }),
248
- /* @__PURE__ */ jsx(
261
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border", children: /* @__PURE__ */ jsx(
249
262
  IncomeCard,
250
263
  {
264
+ borderless: true,
251
265
  items: income.items.map((i) => ({
252
266
  incomeType: i.incomeType,
253
267
  jobTitle: i.jobTitle,
@@ -261,26 +275,133 @@ function ApplicantCardTab({
261
275
  })),
262
276
  totalMonthly: totalMonthlyIncome
263
277
  }
264
- )
278
+ ) })
265
279
  ] }),
266
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
267
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
280
+ /* @__PURE__ */ jsxs("div", { className: "border border-border", children: [
281
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
268
282
  /* @__PURE__ */ jsx(FinancialSectionLabel, { children: "Expenses" }),
269
283
  /* @__PURE__ */ jsx(SectionEditButton, { onClick: onEditExpenses, title: "Edit Expenses" })
270
284
  ] }),
271
- /* @__PURE__ */ jsx(
285
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border", children: /* @__PURE__ */ jsx(
272
286
  ExpensesCard,
273
287
  {
288
+ borderless: true,
274
289
  items: expenses.items.map((e) => ({
275
290
  expenseType: e.expenseType,
276
291
  amountLabel: `${formatCurrency(e.amount)} / ${e.frequency}`
277
292
  })),
278
293
  totalMonthly: totalMonthlyExpenses
279
294
  }
280
- )
295
+ ) })
281
296
  ] })
282
297
  ] });
283
298
  }
299
+ var STATUS_OPTIONS = ["verified", "pending", "rejected"];
300
+ var STATUS_CONFIG = {
301
+ verified: {
302
+ Icon: CheckCircle2,
303
+ label: "Verified",
304
+ iconCls: "text-success",
305
+ triggerCls: "border-success text-success"
306
+ },
307
+ pending: {
308
+ Icon: AlertCircle,
309
+ label: "Pending",
310
+ iconCls: "text-warning",
311
+ triggerCls: "border-warning text-warning"
312
+ },
313
+ rejected: {
314
+ Icon: AlertCircle,
315
+ label: "Rejected",
316
+ iconCls: "text-destructive",
317
+ triggerCls: "border-destructive text-destructive"
318
+ }
319
+ };
320
+ function DocRow({
321
+ doc,
322
+ status,
323
+ isSelected,
324
+ uploaderName,
325
+ onRowClick,
326
+ onStatusChange
327
+ }) {
328
+ const {
329
+ Icon: StatusIcon,
330
+ label: statusLabel,
331
+ iconCls,
332
+ triggerCls
333
+ } = STATUS_CONFIG[status];
334
+ return /* @__PURE__ */ jsxs(
335
+ "div",
336
+ {
337
+ onClick: onRowClick,
338
+ className: cn(
339
+ "flex min-h-[44px] cursor-pointer items-center gap-3 px-4 transition-colors",
340
+ isSelected ? "bg-primary/5" : "hover:bg-muted/40"
341
+ ),
342
+ children: [
343
+ /* @__PURE__ */ jsx("span", { className: "shrink-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx(Checkbox, { checked: isSelected, onCheckedChange: () => onRowClick() }) }),
344
+ /* @__PURE__ */ jsx(FileText, { className: "size-4 shrink-0 text-muted-foreground" }),
345
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
346
+ doc.url ? /* @__PURE__ */ jsx(
347
+ "a",
348
+ {
349
+ href: doc.url,
350
+ target: "_blank",
351
+ rel: "noreferrer",
352
+ onClick: (e) => e.stopPropagation(),
353
+ className: "w-fit text-label-medium text-foreground underline-offset-2 hover:underline",
354
+ children: doc.name
355
+ }
356
+ ) : /* @__PURE__ */ jsx("span", { className: "text-label-medium text-foreground", children: doc.name }),
357
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
358
+ doc.documentType,
359
+ doc.checklistItem ? ` \xB7 ${doc.checklistItem}` : ""
360
+ ] })
361
+ ] }),
362
+ /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "shrink-0", children: uploaderName }),
363
+ /* @__PURE__ */ jsx("span", { className: "shrink-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs(
364
+ Select,
365
+ {
366
+ value: status,
367
+ onValueChange: (v) => onStatusChange(v),
368
+ children: [
369
+ /* @__PURE__ */ jsxs(
370
+ SelectTrigger,
371
+ {
372
+ size: "sm",
373
+ className: cn("h-7 w-[116px] gap-1.5 text-xs", triggerCls),
374
+ children: [
375
+ /* @__PURE__ */ jsx(StatusIcon, { className: cn("size-3.5", iconCls) }),
376
+ statusLabel
377
+ ]
378
+ }
379
+ ),
380
+ /* @__PURE__ */ jsx(SelectContent, { children: STATUS_OPTIONS.map((v) => {
381
+ const { Icon, label, iconCls: iconCls2 } = STATUS_CONFIG[v];
382
+ return /* @__PURE__ */ jsx(SelectItem, { value: v, children: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
383
+ /* @__PURE__ */ jsx(Icon, { className: cn("size-3.5", iconCls2) }),
384
+ label
385
+ ] }) }, v);
386
+ }) })
387
+ ]
388
+ }
389
+ ) }),
390
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: doc.uploadedAt }),
391
+ doc.url && /* @__PURE__ */ jsx(
392
+ "a",
393
+ {
394
+ href: doc.url,
395
+ download: true,
396
+ onClick: (e) => e.stopPropagation(),
397
+ className: "shrink-0 text-muted-foreground transition-colors hover:text-foreground",
398
+ children: /* @__PURE__ */ jsx(Download, { className: "size-4" })
399
+ }
400
+ )
401
+ ]
402
+ }
403
+ );
404
+ }
284
405
  function OpportunitySummaryTab({
285
406
  isJoint = false,
286
407
  loanScenario,
@@ -300,14 +421,64 @@ function OpportunitySummaryTab({
300
421
  coIncome,
301
422
  onCoIncomeChange,
302
423
  coExpenses,
303
- onCoExpensesChange
424
+ onCoExpensesChange,
425
+ documents = [],
426
+ onDocumentsDownload,
427
+ onDocumentStatusChange
304
428
  }) {
305
429
  var _a, _b;
306
430
  const [portalEl, setPortalEl] = useState(null);
307
431
  const [summarySubTab, setSummarySubTab] = useState(
308
432
  "joint"
309
433
  );
310
- const [loanScenarioExpanded, setLoanScenarioExpanded] = useState(true);
434
+ const [selectedDocIds, setSelectedDocIds] = useState(/* @__PURE__ */ new Set());
435
+ function toggleDocSelection(id) {
436
+ setSelectedDocIds((prev) => {
437
+ const next = new Set(prev);
438
+ if (next.has(id)) next.delete(id);
439
+ else next.add(id);
440
+ return next;
441
+ });
442
+ }
443
+ const [docStatusOverrides, setDocStatusOverrides] = useState({});
444
+ function handleDocStatusChange(docId, status) {
445
+ setDocStatusOverrides((prev) => __spreadProps(__spreadValues({}, prev), { [docId]: status }));
446
+ onDocumentStatusChange == null ? void 0 : onDocumentStatusChange(docId, status);
447
+ }
448
+ function effectiveStatus(doc) {
449
+ var _a2;
450
+ return (_a2 = docStatusOverrides[doc.id]) != null ? _a2 : doc.status;
451
+ }
452
+ const checklistProgress = React.useMemo(() => {
453
+ var _a2, _b2;
454
+ const map = /* @__PURE__ */ new Map();
455
+ for (const doc of documents) {
456
+ if (!doc.checklistItem) continue;
457
+ const st = (_a2 = docStatusOverrides[doc.id]) != null ? _a2 : doc.status;
458
+ const entry = (_b2 = map.get(doc.checklistItem)) != null ? _b2 : {
459
+ count: 0,
460
+ hasVerified: false,
461
+ hasPending: false
462
+ };
463
+ entry.count += 1;
464
+ if (st === "verified") entry.hasVerified = true;
465
+ if (st === "pending") entry.hasPending = true;
466
+ map.set(doc.checklistItem, entry);
467
+ }
468
+ return Array.from(map.entries()).map(([name, data]) => __spreadValues({ name }, data));
469
+ }, [documents, docStatusOverrides]);
470
+ const groupedDocs = React.useMemo(() => {
471
+ var _a2;
472
+ if (documents.length <= 5 || !documents.some((d) => d.checklistItem))
473
+ return null;
474
+ const groups = {};
475
+ for (const doc of documents) {
476
+ const key = (_a2 = doc.checklistItem) != null ? _a2 : "Other";
477
+ if (!groups[key]) groups[key] = [];
478
+ groups[key].push(doc);
479
+ }
480
+ return groups;
481
+ }, [documents]);
311
482
  const [editLoanOpen, setEditLoanOpen] = useState(false);
312
483
  const [editAssetsOpen, setEditAssetsOpen] = useState(false);
313
484
  const [editDebtsOpen, setEditDebtsOpen] = useState(false);
@@ -351,20 +522,7 @@ function OpportunitySummaryTab({
351
522
  ),
352
523
  /* @__PURE__ */ jsxs("div", { className: "mb-4 border border-border", children: [
353
524
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
354
- /* @__PURE__ */ jsxs(
355
- Button,
356
- {
357
- type: "button",
358
- variant: "ghost",
359
- className: "h-auto flex-1 justify-start gap-2 px-0 text-left",
360
- onClick: () => setLoanScenarioExpanded((v) => !v),
361
- "aria-expanded": loanScenarioExpanded,
362
- children: [
363
- /* @__PURE__ */ jsx(FinancialSectionLabel, { children: "Loan Scenario" }),
364
- loanScenarioExpanded ? /* @__PURE__ */ jsx(ChevronUp, { className: "size-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "size-3.5 text-muted-foreground" })
365
- ]
366
- }
367
- ),
525
+ /* @__PURE__ */ jsx(FinancialSectionLabel, { children: "Loan Scenario" }),
368
526
  /* @__PURE__ */ jsx(
369
527
  SectionEditButton,
370
528
  {
@@ -373,7 +531,7 @@ function OpportunitySummaryTab({
373
531
  }
374
532
  )
375
533
  ] }),
376
- loanScenarioExpanded && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 border-t border-border p-4", children: [
534
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 border-t border-border p-4", children: [
377
535
  /* @__PURE__ */ jsx(FinancialDetailField, { label: "Lending Type", value: "Home Loan" }),
378
536
  /* @__PURE__ */ jsx(
379
537
  FinancialDetailField,
@@ -507,8 +665,87 @@ function OpportunitySummaryTab({
507
665
  ] })
508
666
  ] }),
509
667
  /* @__PURE__ */ jsxs("div", { className: "border border-border", children: [
510
- /* @__PURE__ */ jsx("div", { className: "px-4 py-2.5", children: /* @__PURE__ */ jsx(FinancialSectionLabel, { children: "Documents" }) }),
511
- /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsx("p", { className: "text-body-small text-muted-foreground", children: "No documents uploaded yet." }) })
668
+ /* @__PURE__ */ jsxs("div", { className: "flex min-h-[40px] items-center justify-between px-4", children: [
669
+ /* @__PURE__ */ jsx(FinancialSectionLabel, { children: "Documents" }),
670
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
671
+ selectedDocIds.size > 0 && /* @__PURE__ */ jsxs(
672
+ Button,
673
+ {
674
+ size: "sm",
675
+ variant: "outline-secondary",
676
+ className: "h-7 gap-1.5 text-xs",
677
+ onClick: () => {
678
+ const selected = documents.filter(
679
+ (d) => selectedDocIds.has(d.id)
680
+ );
681
+ onDocumentsDownload == null ? void 0 : onDocumentsDownload(selected);
682
+ },
683
+ children: [
684
+ /* @__PURE__ */ jsx(Download, { className: "size-3.5" }),
685
+ "Download (",
686
+ selectedDocIds.size,
687
+ ")"
688
+ ]
689
+ }
690
+ ),
691
+ documents.length > 0 && /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
692
+ documents.length,
693
+ " file",
694
+ documents.length !== 1 ? "s" : ""
695
+ ] })
696
+ ] })
697
+ ] }),
698
+ checklistProgress.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-x-4 gap-y-1.5 border-t border-border px-4 py-3", children: checklistProgress.map((cat) => /* @__PURE__ */ jsxs(
699
+ "span",
700
+ {
701
+ className: cn(
702
+ "flex items-center gap-1 text-xs",
703
+ cat.hasVerified ? "text-success" : "text-warning"
704
+ ),
705
+ children: [
706
+ cat.hasVerified ? /* @__PURE__ */ jsx(CheckCircle2, { className: "size-3.5 shrink-0" }) : /* @__PURE__ */ jsx(AlertCircle, { className: "size-3.5 shrink-0" }),
707
+ cat.name,
708
+ /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
709
+ "(",
710
+ cat.count,
711
+ ")"
712
+ ] })
713
+ ]
714
+ },
715
+ cat.name
716
+ )) }),
717
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border", children: documents.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-4 py-4 text-body-small text-muted-foreground", children: "No documents uploaded yet." }) : groupedDocs ? (
718
+ // Grouped by checklistItem
719
+ Object.entries(groupedDocs).map(([category, docs]) => /* @__PURE__ */ jsxs("div", { children: [
720
+ /* @__PURE__ */ jsx("div", { className: "bg-muted/30 px-4 py-1.5 text-xs font-medium text-muted-foreground", children: category }),
721
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col divide-y divide-border", children: docs.map((doc) => /* @__PURE__ */ jsx(
722
+ DocRow,
723
+ {
724
+ doc,
725
+ status: effectiveStatus(doc),
726
+ isSelected: selectedDocIds.has(doc.id),
727
+ uploaderName: doc.uploadedBy === "main" ? mainAbout.firstName || "Main" : (coAbout == null ? void 0 : coAbout.firstName) || "Co",
728
+ onRowClick: () => toggleDocSelection(doc.id),
729
+ onStatusChange: (s) => handleDocStatusChange(doc.id, s)
730
+ },
731
+ doc.id
732
+ )) })
733
+ ] }, category))
734
+ ) : (
735
+ // Flat list
736
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col divide-y divide-border", children: documents.map((doc) => /* @__PURE__ */ jsx(
737
+ DocRow,
738
+ {
739
+ doc,
740
+ status: effectiveStatus(doc),
741
+ isSelected: selectedDocIds.has(doc.id),
742
+ uploaderName: doc.uploadedBy === "main" ? mainAbout.firstName || "Main" : (coAbout == null ? void 0 : coAbout.firstName) || "Co",
743
+ onRowClick: () => toggleDocSelection(doc.id),
744
+ onStatusChange: (s) => handleDocStatusChange(doc.id, s)
745
+ },
746
+ doc.id
747
+ )) })
748
+ ) })
512
749
  ] }),
513
750
  propertyCards.length > 0 && /* @__PURE__ */ jsxs("div", { className: "border border-border", children: [
514
751
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
@@ -543,7 +780,7 @@ function OpportunitySummaryTab({
543
780
  }
544
781
  )
545
782
  ] }),
546
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-3 p-4", children: debts.map((debt) => /* @__PURE__ */ jsx(DebtCard, __spreadValues({}, debtToCard(debt)), debt.id)) })
783
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-3 border-t border-border p-4", children: debts.map((debt) => /* @__PURE__ */ jsx(DebtCard, __spreadValues({}, debtToCard(debt)), debt.id)) })
547
784
  ] })
548
785
  ] }),
549
786
  /* @__PURE__ */ jsx(TabsContent, { value: "main", children: /* @__PURE__ */ jsx(
@@ -2,23 +2,23 @@ import {
2
2
  Popover,
3
3
  PopoverContent,
4
4
  PopoverTrigger
5
- } from "./chunk-3GF7OVTP.mjs";
5
+ } from "./chunk-DGNHGNYH.mjs";
6
6
  import {
7
7
  Calendar
8
- } from "./chunk-OODBHKG7.mjs";
8
+ } from "./chunk-6HIOM2HL.mjs";
9
9
  import {
10
10
  Input
11
- } from "./chunk-GYMYRIZP.mjs";
11
+ } from "./chunk-LBTHZSBT.mjs";
12
12
  import {
13
13
  Button
14
- } from "./chunk-XREGSKX3.mjs";
14
+ } from "./chunk-NOOEKOWY.mjs";
15
15
  import {
16
16
  cn
17
- } from "./chunk-VLQZANBF.mjs";
17
+ } from "./chunk-AFML43VJ.mjs";
18
18
  import {
19
19
  __spreadProps,
20
20
  __spreadValues
21
- } from "./chunk-FWCSY2DS.mjs";
21
+ } from "./chunk-WNQUEZJF.mjs";
22
22
 
23
23
  // src/components/ui/date-picker.tsx
24
24
  import * as React from "react";