@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
@@ -2,16 +2,16 @@ 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
  Input
8
- } from "./chunk-GYMYRIZP.mjs";
8
+ } from "./chunk-LBTHZSBT.mjs";
9
9
  import {
10
10
  Button
11
- } from "./chunk-XREGSKX3.mjs";
11
+ } from "./chunk-NOOEKOWY.mjs";
12
12
  import {
13
13
  cn
14
- } from "./chunk-VLQZANBF.mjs";
14
+ } from "./chunk-AFML43VJ.mjs";
15
15
 
16
16
  // src/components/ui/color-picker.tsx
17
17
  import * as React from "react";
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  Textarea
3
- } from "./chunk-34NWQURD.mjs";
3
+ } from "./chunk-BS75ICOO.mjs";
4
4
  import {
5
5
  Input
6
- } from "./chunk-GYMYRIZP.mjs";
6
+ } from "./chunk-LBTHZSBT.mjs";
7
7
  import {
8
8
  Button
9
- } from "./chunk-XREGSKX3.mjs";
9
+ } from "./chunk-NOOEKOWY.mjs";
10
10
  import {
11
11
  cn
12
- } from "./chunk-VLQZANBF.mjs";
12
+ } from "./chunk-AFML43VJ.mjs";
13
13
  import {
14
14
  __objRest,
15
15
  __spreadValues
16
- } from "./chunk-FWCSY2DS.mjs";
16
+ } from "./chunk-WNQUEZJF.mjs";
17
17
 
18
18
  // src/components/ui/input-group.tsx
19
19
  import { cva } from "class-variance-authority";
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  Progress
3
- } from "./chunk-J5UICVJS.mjs";
3
+ } from "./chunk-JPGL36WQ.mjs";
4
4
  import {
5
5
  TaskCheckItem
6
- } from "./chunk-MBON7YRJ.mjs";
6
+ } from "./chunk-K5QV4TT6.mjs";
7
7
  import {
8
8
  Accordion,
9
9
  AccordionContent,
10
10
  AccordionItem,
11
11
  AccordionTrigger
12
- } from "./chunk-MARPPFOJ.mjs";
12
+ } from "./chunk-UNACI2YK.mjs";
13
13
  import {
14
14
  Spinner
15
- } from "./chunk-7YAU5CY6.mjs";
15
+ } from "./chunk-JVMXMFBB.mjs";
16
16
  import {
17
17
  cn
18
- } from "./chunk-VLQZANBF.mjs";
18
+ } from "./chunk-AFML43VJ.mjs";
19
19
 
20
20
  // src/components/ui/stage-timeline.tsx
21
21
  import { Check } from "lucide-react";
@@ -36,7 +36,12 @@ var twMerge = extendTailwindMerge({
36
36
  function cn(...inputs) {
37
37
  return twMerge(clsx(inputs));
38
38
  }
39
+ function getInitials(name) {
40
+ if (!name.trim()) return "?";
41
+ return name.split(" ").filter(Boolean).map((word) => word[0]).join("").toUpperCase().slice(0, 2);
42
+ }
39
43
 
40
44
  export {
41
- cn
45
+ cn,
46
+ getInitials
42
47
  };
@@ -0,0 +1,260 @@
1
+ import {
2
+ Avatar,
3
+ AvatarFallback
4
+ } from "./chunk-H6NQTIF4.mjs";
5
+ import {
6
+ Badge
7
+ } from "./chunk-WL6WVV47.mjs";
8
+ import {
9
+ Input
10
+ } from "./chunk-LBTHZSBT.mjs";
11
+ import {
12
+ Button
13
+ } from "./chunk-NOOEKOWY.mjs";
14
+ import {
15
+ cn
16
+ } from "./chunk-AFML43VJ.mjs";
17
+
18
+ // src/components/ui/chat-widget-primitives.tsx
19
+ import {
20
+ Bot,
21
+ UserRound,
22
+ MessageCircle,
23
+ X,
24
+ ChevronDown,
25
+ Send,
26
+ Smile,
27
+ Paperclip
28
+ } from "lucide-react";
29
+ import { jsx, jsxs } from "react/jsx-runtime";
30
+ function ChatWidgetLauncher({
31
+ isOpen,
32
+ onClick,
33
+ brandColor,
34
+ unreadCount,
35
+ className
36
+ }) {
37
+ return /* @__PURE__ */ jsxs(
38
+ "button",
39
+ {
40
+ type: "button",
41
+ "aria-label": isOpen ? "Close chat" : "Open chat",
42
+ onClick,
43
+ className: cn(
44
+ "relative flex size-14 items-center justify-center shadow-lg transition-all",
45
+ "rounded-full",
46
+ // intentional: circular FAB shape
47
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
48
+ className
49
+ ),
50
+ style: { backgroundColor: brandColor != null ? brandColor : "var(--primary)" },
51
+ children: [
52
+ !isOpen && unreadCount && unreadCount > 0 ? /* @__PURE__ */ jsx(
53
+ Badge,
54
+ {
55
+ variant: "destructive",
56
+ className: "absolute -right-1 -top-1 size-5 justify-center bg-destructive px-0 py-0 text-[10px] font-semibold text-destructive-foreground",
57
+ children: unreadCount > 9 ? "9+" : unreadCount
58
+ }
59
+ ) : null,
60
+ isOpen ? /* @__PURE__ */ jsx(X, { className: "size-6 text-white" }) : /* @__PURE__ */ jsx(MessageCircle, { className: "size-6 text-white" })
61
+ ]
62
+ }
63
+ );
64
+ }
65
+ function ChatWidgetHeader({
66
+ brokerName,
67
+ subtitle = "Feel free to chat with us",
68
+ gradientFrom,
69
+ gradientTo,
70
+ onMinimize,
71
+ className
72
+ }) {
73
+ const hasGradient = gradientFrom && gradientTo;
74
+ return /* @__PURE__ */ jsxs(
75
+ "div",
76
+ {
77
+ className: cn(
78
+ "flex items-start justify-between px-4 py-3",
79
+ !hasGradient && "bg-primary",
80
+ className
81
+ ),
82
+ style: hasGradient ? {
83
+ background: `linear-gradient(135deg, ${gradientFrom}, ${gradientTo})`
84
+ } : void 0,
85
+ children: [
86
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
87
+ /* @__PURE__ */ jsx("p", { className: "text-body-large font-semibold text-primary-foreground", children: brokerName }),
88
+ subtitle && /* @__PURE__ */ jsx("p", { className: "text-body-small text-primary-foreground/70", children: subtitle })
89
+ ] }),
90
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: onMinimize && /* @__PURE__ */ jsx(
91
+ Button,
92
+ {
93
+ variant: "ghost",
94
+ size: "icon-sm",
95
+ "aria-label": "Minimize chat",
96
+ onClick: onMinimize,
97
+ className: "text-primary-foreground/70 hover:bg-primary-foreground/10 hover:text-primary-foreground",
98
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4" })
99
+ }
100
+ ) })
101
+ ]
102
+ }
103
+ );
104
+ }
105
+ function ChatWidgetMessage({
106
+ role,
107
+ content,
108
+ timestamp,
109
+ isStreaming,
110
+ className
111
+ }) {
112
+ if (role === "system") {
113
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center justify-center py-2", className), children: /* @__PURE__ */ jsx("span", { className: "text-body-small text-muted-foreground", children: content }) });
114
+ }
115
+ const isLeft = role === "bot" || role === "advisor";
116
+ return /* @__PURE__ */ jsxs(
117
+ "div",
118
+ {
119
+ className: cn(
120
+ "flex gap-2",
121
+ isLeft ? "items-start" : "flex-row-reverse items-start",
122
+ className
123
+ ),
124
+ children: [
125
+ isLeft && /* @__PURE__ */ jsx(Avatar, { className: "size-7", children: /* @__PURE__ */ jsx(
126
+ AvatarFallback,
127
+ {
128
+ className: role === "advisor" ? "bg-primary/15 text-foreground" : void 0,
129
+ children: role === "advisor" ? /* @__PURE__ */ jsx(UserRound, { className: "size-3.5" }) : /* @__PURE__ */ jsx(Bot, { className: "size-3.5" })
130
+ }
131
+ ) }),
132
+ /* @__PURE__ */ jsxs(
133
+ "div",
134
+ {
135
+ className: cn(
136
+ "flex max-w-[80%] flex-col gap-1",
137
+ !isLeft && "items-end"
138
+ ),
139
+ children: [
140
+ /* @__PURE__ */ jsx(
141
+ "div",
142
+ {
143
+ className: cn(
144
+ "px-3 py-2 text-body-medium",
145
+ isLeft ? "border border-border bg-card text-card-foreground shadow-sm" : "text-primary-foreground"
146
+ ),
147
+ style: !isLeft ? { backgroundColor: "var(--primary)" } : void 0,
148
+ children: isStreaming ? /* @__PURE__ */ jsx(ChatWidgetTypingIndicator, {}) : content
149
+ }
150
+ ),
151
+ timestamp && !isStreaming && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground", children: timestamp })
152
+ ]
153
+ }
154
+ )
155
+ ]
156
+ }
157
+ );
158
+ }
159
+ function ChatWidgetTypingIndicator({
160
+ className
161
+ }) {
162
+ return /* @__PURE__ */ jsx(
163
+ "div",
164
+ {
165
+ role: "status",
166
+ "aria-label": "Typing",
167
+ className: cn("flex items-center gap-1 py-0.5", className),
168
+ children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx(
169
+ "span",
170
+ {
171
+ className: "size-1.5 animate-bounce rounded-full bg-muted-foreground/60",
172
+ style: { animationDelay: `${i * 0.15}s` },
173
+ "aria-hidden": "true"
174
+ },
175
+ i
176
+ ))
177
+ }
178
+ );
179
+ }
180
+ function ChatWidgetInputBar({
181
+ value,
182
+ onChange,
183
+ onSend,
184
+ disabled,
185
+ placeholder = "Type your message here",
186
+ className
187
+ }) {
188
+ const hasText = value.trim().length > 0;
189
+ const handleKeyDown = (e) => {
190
+ if (e.key === "Enter" && !e.shiftKey && hasText && !disabled) {
191
+ e.preventDefault();
192
+ onSend(value);
193
+ }
194
+ };
195
+ return /* @__PURE__ */ jsxs(
196
+ "div",
197
+ {
198
+ className: cn(
199
+ "flex items-center gap-2 border-t border-border bg-muted/30 px-3 py-2.5",
200
+ className
201
+ ),
202
+ children: [
203
+ /* @__PURE__ */ jsx(
204
+ Button,
205
+ {
206
+ variant: "ghost",
207
+ size: "icon-sm",
208
+ "aria-label": "Add emoji",
209
+ disabled,
210
+ className: "shrink-0 text-muted-foreground hover:text-foreground",
211
+ children: /* @__PURE__ */ jsx(Smile, { className: "size-5" })
212
+ }
213
+ ),
214
+ /* @__PURE__ */ jsx(
215
+ Button,
216
+ {
217
+ variant: "ghost",
218
+ size: "icon-sm",
219
+ "aria-label": "Add attachment",
220
+ disabled,
221
+ className: "shrink-0 text-muted-foreground hover:text-foreground",
222
+ children: /* @__PURE__ */ jsx(Paperclip, { className: "size-5" })
223
+ }
224
+ ),
225
+ /* @__PURE__ */ jsx(
226
+ Input,
227
+ {
228
+ value,
229
+ onChange: (e) => onChange(e.target.value),
230
+ onKeyDown: handleKeyDown,
231
+ placeholder,
232
+ disabled,
233
+ className: "flex-1 border-0 bg-transparent px-0 shadow-none focus-visible:ring-0 text-body-medium placeholder:text-muted-foreground/60"
234
+ }
235
+ ),
236
+ /* @__PURE__ */ jsx(
237
+ Button,
238
+ {
239
+ type: "button",
240
+ variant: "ghost",
241
+ size: "icon-sm",
242
+ "aria-label": "Send message",
243
+ disabled: disabled || !hasText,
244
+ onClick: () => hasText && !disabled && onSend(value),
245
+ className: "shrink-0",
246
+ children: /* @__PURE__ */ jsx(Send, { className: "size-4" })
247
+ }
248
+ )
249
+ ]
250
+ }
251
+ );
252
+ }
253
+
254
+ export {
255
+ ChatWidgetLauncher,
256
+ ChatWidgetHeader,
257
+ ChatWidgetMessage,
258
+ ChatWidgetTypingIndicator,
259
+ ChatWidgetInputBar
260
+ };
@@ -0,0 +1,203 @@
1
+ import {
2
+ Switch
3
+ } from "./chunk-PNSYFE3K.mjs";
4
+ import {
5
+ Select,
6
+ SelectContent,
7
+ SelectItem,
8
+ SelectTrigger,
9
+ SelectValue
10
+ } from "./chunk-ZEDMKQK2.mjs";
11
+ import {
12
+ Input
13
+ } from "./chunk-LBTHZSBT.mjs";
14
+ import {
15
+ Button
16
+ } from "./chunk-NOOEKOWY.mjs";
17
+ import {
18
+ cn
19
+ } from "./chunk-AFML43VJ.mjs";
20
+ import {
21
+ __spreadProps,
22
+ __spreadValues
23
+ } from "./chunk-WNQUEZJF.mjs";
24
+
25
+ // src/components/ui/document-checklist-template.tsx
26
+ import { useState } from "react";
27
+ import { GripVertical, Plus, Trash2 } from "lucide-react";
28
+ import { jsx, jsxs } from "react/jsx-runtime";
29
+ var DOCUMENT_TYPES = [
30
+ "Income Verification",
31
+ "Bank Statements",
32
+ "Rental Income",
33
+ "Property Evidence",
34
+ "Liabilities",
35
+ "Identity",
36
+ "Employment Contract",
37
+ "Notice of Assessment",
38
+ "Contract of Sale",
39
+ "Savings History"
40
+ ];
41
+ function DocumentChecklistTemplate({
42
+ categories: initial = [],
43
+ onChange,
44
+ onSave,
45
+ onCancel,
46
+ className
47
+ }) {
48
+ const [categories, setCategories] = useState(
49
+ () => initial.map((c) => {
50
+ var _a;
51
+ return __spreadProps(__spreadValues({}, c), {
52
+ custom: (_a = c.custom) != null ? _a : !DOCUMENT_TYPES.includes(c.name)
53
+ });
54
+ })
55
+ );
56
+ const [isDirty, setIsDirty] = useState(false);
57
+ function update(next) {
58
+ setCategories(next);
59
+ setIsDirty(true);
60
+ onChange == null ? void 0 : onChange(next);
61
+ }
62
+ function handleSelectType(id, value) {
63
+ if (value === "__custom__") {
64
+ update(
65
+ categories.map(
66
+ (c) => c.id === id ? __spreadProps(__spreadValues({}, c), { name: "", custom: true }) : c
67
+ )
68
+ );
69
+ } else {
70
+ update(
71
+ categories.map(
72
+ (c) => c.id === id ? __spreadProps(__spreadValues({}, c), { name: value, custom: false }) : c
73
+ )
74
+ );
75
+ }
76
+ }
77
+ function handleCustomName(id, name) {
78
+ update(categories.map((c) => c.id === id ? __spreadProps(__spreadValues({}, c), { name }) : c));
79
+ }
80
+ function handleToggle(id, field) {
81
+ update(
82
+ categories.map((c) => c.id === id ? __spreadProps(__spreadValues({}, c), { [field]: !c[field] }) : c)
83
+ );
84
+ }
85
+ function handleDelete(id) {
86
+ update(categories.filter((c) => c.id !== id));
87
+ }
88
+ function handleAdd() {
89
+ update([
90
+ ...categories,
91
+ {
92
+ id: `cat-${Date.now()}`,
93
+ name: "",
94
+ requiredMain: true,
95
+ requiredCo: false,
96
+ custom: false
97
+ }
98
+ ]);
99
+ }
100
+ const COLS = "grid-cols-[20px_1fr_64px_64px_32px]";
101
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", className), children: [
102
+ /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b border-border px-6 py-4", children: /* @__PURE__ */ jsx("span", { className: "text-label-large text-foreground", children: "Document Checklist Template" }) }),
103
+ /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b border-border px-6 py-3", children: /* @__PURE__ */ jsx("p", { className: "text-body-small text-muted-foreground", children: "Define the document categories required for loan applications. Set required status separately for Main and Co-applicants." }) }),
104
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col overflow-y-auto", children: [
105
+ categories.length > 0 && /* @__PURE__ */ jsxs(
106
+ "div",
107
+ {
108
+ className: cn(
109
+ "grid shrink-0 items-center gap-3 border-b border-border bg-muted/30 px-6 py-2",
110
+ COLS
111
+ ),
112
+ children: [
113
+ /* @__PURE__ */ jsx("span", {}),
114
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Category Name" }),
115
+ /* @__PURE__ */ jsx("span", { className: "text-center text-xs font-medium text-muted-foreground", children: "Main" }),
116
+ /* @__PURE__ */ jsx("span", { className: "text-center text-xs font-medium text-muted-foreground", children: "Co" }),
117
+ /* @__PURE__ */ jsx("span", {})
118
+ ]
119
+ }
120
+ ),
121
+ categories.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-12 text-sm text-muted-foreground", children: "No categories yet. Add one below." }) : /* @__PURE__ */ jsx("div", { className: "divide-y divide-border", children: categories.map((cat) => /* @__PURE__ */ jsxs(
122
+ "div",
123
+ {
124
+ className: cn("grid items-center gap-3 px-6 py-3", COLS),
125
+ children: [
126
+ /* @__PURE__ */ jsx(GripVertical, { className: "size-4 shrink-0 text-muted-foreground/30" }),
127
+ cat.custom ? /* @__PURE__ */ jsx(
128
+ Input,
129
+ {
130
+ value: cat.name,
131
+ onChange: (e) => handleCustomName(cat.id, e.target.value),
132
+ placeholder: "Type category name\u2026",
133
+ className: "h-8 text-sm",
134
+ autoFocus: true
135
+ }
136
+ ) : /* @__PURE__ */ jsxs(
137
+ Select,
138
+ {
139
+ value: cat.name || "",
140
+ onValueChange: (v) => handleSelectType(cat.id, v),
141
+ children: [
142
+ /* @__PURE__ */ jsx(SelectTrigger, { size: "sm", className: "w-full", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select type\u2026" }) }),
143
+ /* @__PURE__ */ jsxs(SelectContent, { children: [
144
+ DOCUMENT_TYPES.map((type) => /* @__PURE__ */ jsx(SelectItem, { value: type, children: type }, type)),
145
+ /* @__PURE__ */ jsx(SelectItem, { value: "__custom__", children: "Custom\u2026" })
146
+ ] })
147
+ ]
148
+ }
149
+ ),
150
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(
151
+ Switch,
152
+ {
153
+ checked: cat.requiredMain,
154
+ onCheckedChange: () => handleToggle(cat.id, "requiredMain"),
155
+ size: "sm"
156
+ }
157
+ ) }),
158
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(
159
+ Switch,
160
+ {
161
+ checked: cat.requiredCo,
162
+ onCheckedChange: () => handleToggle(cat.id, "requiredCo"),
163
+ size: "sm"
164
+ }
165
+ ) }),
166
+ /* @__PURE__ */ jsx(
167
+ Button,
168
+ {
169
+ variant: "ghost",
170
+ size: "icon",
171
+ className: "size-8 text-muted-foreground hover:text-destructive",
172
+ onClick: () => handleDelete(cat.id),
173
+ children: /* @__PURE__ */ jsx(Trash2, { className: "size-4" })
174
+ }
175
+ )
176
+ ]
177
+ },
178
+ cat.id
179
+ )) }),
180
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border px-6 py-4", children: /* @__PURE__ */ jsxs(
181
+ Button,
182
+ {
183
+ variant: "outline",
184
+ size: "sm",
185
+ className: "gap-1.5",
186
+ onClick: handleAdd,
187
+ children: [
188
+ /* @__PURE__ */ jsx(Plus, { className: "size-4" }),
189
+ "Add Category"
190
+ ]
191
+ }
192
+ ) })
193
+ ] }),
194
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 justify-end gap-2 border-t border-border px-6 py-4", children: [
195
+ onCancel && /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: onCancel, children: "Cancel" }),
196
+ /* @__PURE__ */ jsx(Button, { onClick: () => onSave == null ? void 0 : onSave(categories), disabled: !isDirty, children: "Save" })
197
+ ] })
198
+ ] });
199
+ }
200
+
201
+ export {
202
+ DocumentChecklistTemplate
203
+ };
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-VLQZANBF.mjs";
3
+ } from "./chunk-AFML43VJ.mjs";
4
4
  import {
5
5
  __objRest,
6
6
  __spreadValues
7
- } from "./chunk-FWCSY2DS.mjs";
7
+ } from "./chunk-WNQUEZJF.mjs";
8
8
 
9
9
  // src/components/ui/textarea.tsx
10
10
  import { jsx } from "react/jsx-runtime";