@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
@@ -63,7 +63,7 @@ __export(add_lead_modal_exports, {
63
63
  });
64
64
  module.exports = __toCommonJS(add_lead_modal_exports);
65
65
  var React3 = __toESM(require("react"));
66
- var import_lucide_react5 = require("lucide-react");
66
+ var import_lucide_react7 = require("lucide-react");
67
67
 
68
68
  // src/components/ui/dialog.tsx
69
69
  var import_lucide_react2 = require("lucide-react");
@@ -178,9 +178,9 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
178
178
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
179
179
  secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
180
180
  destructive: "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
181
- outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
181
+ outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:border-border focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
182
182
  "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
183
- "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
183
+ "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:border-brand-secondary focus-visible:ring-brand-secondary/30",
184
184
  ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
185
185
  link: "text-primary underline-offset-4 hover:underline"
186
186
  },
@@ -489,8 +489,370 @@ function Spinner(_a) {
489
489
  );
490
490
  }
491
491
 
492
- // src/components/ui/add-lead-modal.tsx
492
+ // src/components/ui/table.tsx
493
493
  var import_jsx_runtime7 = require("react/jsx-runtime");
494
+ function Table(_a) {
495
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
496
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
497
+ "div",
498
+ {
499
+ className: "relative w-full overflow-x-auto",
500
+ "data-slot": "table-container",
501
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
502
+ "table",
503
+ __spreadValues({
504
+ className: cn("w-full caption-bottom text-body-small", className),
505
+ "data-slot": "table"
506
+ }, props)
507
+ )
508
+ }
509
+ );
510
+ }
511
+ function TableHeader(_a) {
512
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
513
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
514
+ "thead",
515
+ __spreadValues({
516
+ className: cn("[&_tr]:border-b", className),
517
+ "data-slot": "table-header"
518
+ }, props)
519
+ );
520
+ }
521
+ function TableBody(_a) {
522
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
523
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
524
+ "tbody",
525
+ __spreadValues({
526
+ className: cn("[&_tr:last-child]:border-0", className),
527
+ "data-slot": "table-body"
528
+ }, props)
529
+ );
530
+ }
531
+ function TableRow(_a) {
532
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
533
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
534
+ "tr",
535
+ __spreadValues({
536
+ className: cn(
537
+ "border-b transition-[background-color,opacity] hover:bg-muted/50 data-[state=selected]:bg-primary/10",
538
+ className
539
+ ),
540
+ "data-slot": "table-row"
541
+ }, props)
542
+ );
543
+ }
544
+ function TableHead(_a) {
545
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
546
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
547
+ "th",
548
+ __spreadValues({
549
+ className: cn(
550
+ "h-10 px-4 text-left align-middle text-label-medium whitespace-nowrap text-muted-foreground",
551
+ "[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
552
+ className
553
+ ),
554
+ "data-slot": "table-head"
555
+ }, props)
556
+ );
557
+ }
558
+ function TableCell(_a) {
559
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
560
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
561
+ "td",
562
+ __spreadValues({
563
+ className: cn(
564
+ "px-4 py-3 align-middle whitespace-nowrap",
565
+ "[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
566
+ className
567
+ ),
568
+ "data-slot": "table-cell"
569
+ }, props)
570
+ );
571
+ }
572
+
573
+ // src/components/ui/pagination.tsx
574
+ var import_lucide_react6 = require("lucide-react");
575
+
576
+ // src/components/ui/select.tsx
577
+ var import_lucide_react5 = require("lucide-react");
578
+ var import_select = require("@base-ui/react/select");
579
+ var import_jsx_runtime8 = require("react/jsx-runtime");
580
+ function Select(_a) {
581
+ var props = __objRest(_a, []);
582
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_select.Select.Root, __spreadValues({ "data-slot": "select" }, props));
583
+ }
584
+ function SelectValue(_a) {
585
+ var props = __objRest(_a, []);
586
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_select.Select.Value, __spreadValues({ "data-slot": "select-value" }, props));
587
+ }
588
+ function SelectTrigger(_a) {
589
+ var _b = _a, {
590
+ className,
591
+ size = "default",
592
+ children
593
+ } = _b, props = __objRest(_b, [
594
+ "className",
595
+ "size",
596
+ "children"
597
+ ]);
598
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
599
+ import_select.Select.Trigger,
600
+ __spreadProps(__spreadValues({
601
+ className: cn(
602
+ "flex w-fit items-center justify-between gap-2 border border-input bg-transparent px-3 py-2 text-body-medium whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20 data-popup-open:border-primary data-popup-open:ring-[3px] data-popup-open:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:font-normal data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
603
+ className
604
+ ),
605
+ "data-size": size,
606
+ "data-slot": "select-trigger"
607
+ }, props), {
608
+ children: [
609
+ children,
610
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_select.Select.Icon, { className: "transition-transform duration-200 data-popup-open:rotate-180", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.ChevronDownIcon, { className: "size-4 opacity-50" }) })
611
+ ]
612
+ })
613
+ );
614
+ }
615
+ function SelectContent(_a) {
616
+ var _b = _a, {
617
+ className,
618
+ children,
619
+ style
620
+ } = _b, props = __objRest(_b, [
621
+ "className",
622
+ "children",
623
+ "style"
624
+ ]);
625
+ const themeVars = useThemeVars();
626
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
627
+ import_select.Select.Positioner,
628
+ {
629
+ className: "z-[200]",
630
+ align: "start",
631
+ alignItemWithTrigger: false,
632
+ sideOffset: 4,
633
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
634
+ import_select.Select.Popup,
635
+ __spreadProps(__spreadValues({
636
+ className: cn(
637
+ "relative max-h-[var(--available-height)] min-w-[var(--anchor-width,8rem)] overflow-x-hidden overflow-y-auto border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
638
+ className
639
+ ),
640
+ "data-slot": "select-content",
641
+ style: __spreadValues(__spreadValues({}, themeVars), style)
642
+ }, props), {
643
+ children: [
644
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SelectScrollUpButton, {}),
645
+ children,
646
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SelectScrollDownButton, {})
647
+ ]
648
+ })
649
+ )
650
+ }
651
+ ) });
652
+ }
653
+ function SelectItem(_a) {
654
+ var _b = _a, {
655
+ className,
656
+ children
657
+ } = _b, props = __objRest(_b, [
658
+ "className",
659
+ "children"
660
+ ]);
661
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
662
+ import_select.Select.Item,
663
+ __spreadProps(__spreadValues({
664
+ className: cn(
665
+ "relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-body-small outline-hidden select-none data-highlighted:bg-primary/5 data-highlighted:text-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
666
+ className
667
+ ),
668
+ "data-slot": "select-item"
669
+ }, props), {
670
+ children: [
671
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
672
+ "span",
673
+ {
674
+ className: "absolute right-2 flex size-3.5 items-center justify-center",
675
+ "data-slot": "select-item-indicator",
676
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_select.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.CheckIcon, { className: "size-4" }) })
677
+ }
678
+ ),
679
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_select.Select.ItemText, { children })
680
+ ]
681
+ })
682
+ );
683
+ }
684
+ function SelectScrollUpButton(_a) {
685
+ var _b = _a, {
686
+ className
687
+ } = _b, props = __objRest(_b, [
688
+ "className"
689
+ ]);
690
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
691
+ import_select.Select.ScrollUpArrow,
692
+ __spreadProps(__spreadValues({
693
+ className: cn(
694
+ "flex cursor-default items-center justify-center py-1",
695
+ className
696
+ ),
697
+ "data-slot": "select-scroll-up-button"
698
+ }, props), {
699
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.ChevronUpIcon, { className: "size-4" })
700
+ })
701
+ );
702
+ }
703
+ function SelectScrollDownButton(_a) {
704
+ var _b = _a, {
705
+ className
706
+ } = _b, props = __objRest(_b, [
707
+ "className"
708
+ ]);
709
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
710
+ import_select.Select.ScrollDownArrow,
711
+ __spreadProps(__spreadValues({
712
+ className: cn(
713
+ "flex cursor-default items-center justify-center py-1",
714
+ className
715
+ ),
716
+ "data-slot": "select-scroll-down-button"
717
+ }, props), {
718
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.ChevronDownIcon, { className: "size-4" })
719
+ })
720
+ );
721
+ }
722
+
723
+ // src/components/ui/pagination.tsx
724
+ var import_jsx_runtime9 = require("react/jsx-runtime");
725
+ function PaginationNavButtons({
726
+ hasPrev,
727
+ hasNext,
728
+ onFirst,
729
+ onPrev,
730
+ onNext,
731
+ onLast
732
+ }) {
733
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-1", children: [
734
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
735
+ Button,
736
+ {
737
+ "aria-label": "Go to first page",
738
+ disabled: !hasPrev,
739
+ onClick: onFirst,
740
+ size: "icon-sm",
741
+ variant: "outline",
742
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.ChevronsLeftIcon, { className: "size-4" })
743
+ }
744
+ ),
745
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
746
+ Button,
747
+ {
748
+ "aria-label": "Go to previous page",
749
+ disabled: !hasPrev,
750
+ onClick: onPrev,
751
+ size: "icon-sm",
752
+ variant: "outline",
753
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.ChevronLeftIcon, { className: "size-4" })
754
+ }
755
+ ),
756
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
757
+ Button,
758
+ {
759
+ "aria-label": "Go to next page",
760
+ disabled: !hasNext,
761
+ onClick: onNext,
762
+ size: "icon-sm",
763
+ variant: "outline",
764
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.ChevronRightIcon, { className: "size-4" })
765
+ }
766
+ ),
767
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
768
+ Button,
769
+ {
770
+ "aria-label": "Go to last page",
771
+ disabled: !hasNext,
772
+ onClick: onLast,
773
+ size: "icon-sm",
774
+ variant: "outline",
775
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.ChevronsRightIcon, { className: "size-4" })
776
+ }
777
+ )
778
+ ] });
779
+ }
780
+ function TablePagination({
781
+ page,
782
+ pageCount,
783
+ pageSize,
784
+ pageSizeOptions = [10, 20, 30, 50],
785
+ onPageChange,
786
+ onPageSizeChange,
787
+ selectedCount,
788
+ totalCount,
789
+ className
790
+ }) {
791
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
792
+ "div",
793
+ {
794
+ className: cn("flex items-center gap-4 py-4", className),
795
+ "data-slot": "table-pagination",
796
+ children: [
797
+ selectedCount != null && selectedCount > 0 && totalCount != null && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "text-body-small text-muted-foreground", children: [
798
+ selectedCount,
799
+ " of ",
800
+ totalCount,
801
+ " row(s) selected."
802
+ ] }),
803
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "ml-auto flex items-center gap-6", children: [
804
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-2", children: [
805
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-body-small text-muted-foreground whitespace-nowrap", children: "Rows per page" }),
806
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
807
+ Select,
808
+ {
809
+ onValueChange: (value) => onPageSizeChange(Number(value)),
810
+ value: `${pageSize}`,
811
+ children: [
812
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
813
+ SelectTrigger,
814
+ {
815
+ "aria-label": "Rows per page",
816
+ className: "w-[70px]",
817
+ size: "sm",
818
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, {})
819
+ }
820
+ ),
821
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectContent, { children: pageSizeOptions.map((size) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: `${size}`, children: size }, size)) })
822
+ ]
823
+ }
824
+ )
825
+ ] }),
826
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "text-body-small text-muted-foreground whitespace-nowrap", children: [
827
+ "Page ",
828
+ page,
829
+ " of ",
830
+ pageCount
831
+ ] }),
832
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
833
+ PaginationNavButtons,
834
+ {
835
+ hasNext: page < pageCount,
836
+ hasPrev: page > 1,
837
+ onFirst: () => onPageChange(1),
838
+ onLast: () => onPageChange(pageCount),
839
+ onNext: () => onPageChange(page + 1),
840
+ onPrev: () => onPageChange(page - 1)
841
+ }
842
+ )
843
+ ] })
844
+ ]
845
+ }
846
+ );
847
+ }
848
+
849
+ // src/components/ui/add-lead-modal.tsx
850
+ var import_jsx_runtime10 = require("react/jsx-runtime");
851
+ function toggleInSet(prev, value) {
852
+ const next = new Set(prev);
853
+ next.has(value) ? next.delete(value) : next.add(value);
854
+ return next;
855
+ }
494
856
  function AddLeadModal({
495
857
  open,
496
858
  onOpenChange,
@@ -502,7 +864,9 @@ function AddLeadModal({
502
864
  onSearchChange,
503
865
  page = 0,
504
866
  pageSize = 10,
867
+ pageSizeOptions,
505
868
  onPageChange,
869
+ onPageSizeChange,
506
870
  onAdd,
507
871
  className
508
872
  }) {
@@ -523,21 +887,12 @@ function AddLeadModal({
523
887
  return next;
524
888
  });
525
889
  }
526
- function toggleOne(id) {
527
- setSelectedIds((prev) => {
528
- const next = new Set(prev);
529
- next.has(id) ? next.delete(id) : next.add(id);
530
- return next;
531
- });
532
- }
533
890
  const totalPages = Math.max(1, Math.ceil(total / pageSize));
534
- const canPrev = page > 0;
535
- const canNext = page < totalPages - 1;
536
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Dialog, { open, onOpenChange: isSubmitting ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(DialogContent, { className: cn("sm:max-w-2xl", className), children: [
537
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DialogTitle, { children: "Add Lead" }) }),
538
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "relative", children: [
539
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react5.Search, { className: "absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" }),
540
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
891
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dialog, { open, onOpenChange: isSubmitting ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogContent, { size: "2xl", align: "top", className, children: [
892
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogTitle, { children: "Add Lead" }) }),
893
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "relative", children: [
894
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react7.Search, { className: "absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" }),
895
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
541
896
  Input,
542
897
  {
543
898
  placeholder: "Search contacts\u2026",
@@ -547,7 +902,7 @@ function AddLeadModal({
547
902
  disabled: isSubmitting
548
903
  }
549
904
  ),
550
- searchValue && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
905
+ searchValue && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
551
906
  Button,
552
907
  {
553
908
  type: "button",
@@ -556,15 +911,15 @@ function AddLeadModal({
556
911
  onClick: () => onSearchChange == null ? void 0 : onSearchChange(""),
557
912
  className: "absolute right-2.5 top-1/2 size-6 -translate-y-1/2 text-muted-foreground hover:text-foreground",
558
913
  "aria-label": "Clear search",
559
- children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react5.X, { className: "size-3.5" })
914
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react7.X, { className: "size-3.5" })
560
915
  }
561
916
  )
562
917
  ] }),
563
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "relative min-h-[200px] overflow-auto border border-border", children: [
564
- isLoading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-background/60", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Spinner, {}) }),
565
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("table", { className: "w-full border-separate border-spacing-0 text-sm", children: [
566
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("thead", { className: "sticky top-0 bg-muted/50", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("tr", { children: [
567
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("th", { className: "w-10 border-b border-border", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex h-10 w-full items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
918
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "relative min-h-[200px] overflow-auto border border-border", children: [
919
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-background/60", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Spinner, {}) }),
920
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Table, { children: [
921
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(TableRow, { className: "hover:bg-transparent", children: [
922
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableHead, { className: "w-10", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
568
923
  Checkbox,
569
924
  {
570
925
  checked: somePageSelected && !allPageSelected ? "indeterminate" : allPageSelected,
@@ -572,42 +927,41 @@ function AddLeadModal({
572
927
  "aria-label": "Select all on page",
573
928
  disabled: contacts.length === 0 || isSubmitting
574
929
  }
575
- ) }) }) }),
576
- ["Name", "Email", "Phone"].map((col) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("th", { className: "border-b border-border", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex h-10 items-center px-3 text-xs font-semibold text-foreground", children: col }) }, col))
930
+ ) }) }),
931
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableHead, { children: "Name" }),
932
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableHead, { children: "Email" }),
933
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableHead, { children: "Phone" })
577
934
  ] }) }),
578
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("tbody", { children: contacts.length === 0 && !isLoading ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
579
- "td",
935
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableBody, { children: contacts.length === 0 && !isLoading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableRow, { className: "hover:bg-transparent", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
936
+ TableCell,
580
937
  {
581
938
  colSpan: 4,
582
- className: "py-10 text-center text-xs text-muted-foreground",
939
+ className: "py-10 text-center text-muted-foreground",
583
940
  children: "No contacts found."
584
941
  }
585
- ) }) : contacts.map((contact, idx) => {
942
+ ) }) : contacts.map((contact) => {
586
943
  var _a, _b;
587
944
  const isSelected = selectedIds.has(contact.id);
588
- const tdCls = cn(
589
- idx < contacts.length - 1 && "border-b border-border"
590
- );
591
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
592
- "tr",
945
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
946
+ TableRow,
593
947
  {
594
- className: cn(
595
- "cursor-pointer",
596
- isSelected ? "bg-primary/5 hover:bg-primary/10" : "hover:bg-muted/30"
597
- ),
598
- onClick: () => !isSubmitting && toggleOne(contact.id),
948
+ "data-state": isSelected ? "selected" : void 0,
949
+ className: "cursor-pointer",
950
+ onClick: () => !isSubmitting && setSelectedIds((prev) => toggleInSet(prev, contact.id)),
599
951
  children: [
600
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", { className: tdCls, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex h-12 w-full items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
952
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableCell, { className: "h-12", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
601
953
  Checkbox,
602
954
  {
603
955
  checked: isSelected,
604
- onCheckedChange: () => toggleOne(contact.id),
956
+ onCheckedChange: () => setSelectedIds(
957
+ (prev) => toggleInSet(prev, contact.id)
958
+ ),
605
959
  disabled: isSubmitting
606
960
  }
607
- ) }) }) }),
608
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", { className: tdCls, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex h-12 items-center px-3 font-medium text-foreground", children: contact.name }) }),
609
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", { className: tdCls, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex h-12 items-center px-3 text-muted-foreground", children: (_a = contact.email) != null ? _a : "\u2014" }) }),
610
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", { className: tdCls, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex h-12 items-center px-3 text-muted-foreground", children: (_b = contact.phone) != null ? _b : "\u2014" }) })
961
+ ) }) }),
962
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableCell, { className: "h-12 font-medium text-foreground", children: contact.name }),
963
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableCell, { className: "h-12 text-muted-foreground", children: (_a = contact.email) != null ? _a : "\u2014" }),
964
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableCell, { className: "h-12 text-muted-foreground", children: (_b = contact.phone) != null ? _b : "\u2014" })
611
965
  ]
612
966
  },
613
967
  contact.id
@@ -615,44 +969,32 @@ function AddLeadModal({
615
969
  }) })
616
970
  ] })
617
971
  ] }),
618
- totalPages > 1 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
619
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { children: [
620
- total,
621
- " contact",
622
- total !== 1 ? "s" : ""
623
- ] }),
624
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-center gap-2", children: [
625
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
626
- Button,
627
- {
628
- variant: "outline",
629
- size: "sm",
630
- className: "h-7 text-xs",
631
- onClick: () => onPageChange == null ? void 0 : onPageChange(page - 1),
632
- disabled: !canPrev || isLoading || isSubmitting,
633
- children: "Prev"
634
- }
972
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
973
+ "div",
974
+ {
975
+ className: cn(
976
+ (isLoading || isSubmitting) && "pointer-events-none opacity-50"
635
977
  ),
636
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { children: [
637
- page + 1,
638
- " / ",
639
- totalPages
640
- ] }),
641
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
642
- Button,
978
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
979
+ TablePagination,
643
980
  {
644
- variant: "outline",
645
- size: "sm",
646
- className: "h-7 text-xs",
647
- onClick: () => onPageChange == null ? void 0 : onPageChange(page + 1),
648
- disabled: !canNext || isLoading || isSubmitting,
649
- children: "Next"
981
+ page: page + 1,
982
+ pageCount: totalPages,
983
+ pageSize,
984
+ pageSizeOptions,
985
+ selectedCount: selectedIds.size || void 0,
986
+ totalCount: total,
987
+ onPageChange: (p) => onPageChange == null ? void 0 : onPageChange(p - 1),
988
+ onPageSizeChange: (size) => {
989
+ onPageSizeChange == null ? void 0 : onPageSizeChange(size);
990
+ onPageChange == null ? void 0 : onPageChange(0);
991
+ }
650
992
  }
651
993
  )
652
- ] })
653
- ] }),
654
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(DialogFooter, { children: [
655
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
994
+ }
995
+ ),
996
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogFooter, { children: [
997
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
656
998
  Button,
657
999
  {
658
1000
  variant: "outline",
@@ -661,7 +1003,7 @@ function AddLeadModal({
661
1003
  children: "Cancel"
662
1004
  }
663
1005
  ),
664
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1006
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
665
1007
  Button,
666
1008
  {
667
1009
  onClick: () => onAdd == null ? void 0 : onAdd([...selectedIds]),
@@ -1,16 +1,19 @@
1
1
  import {
2
2
  AddLeadModal
3
- } from "../../chunk-HVY6KCCF.mjs";
4
- import "../../chunk-RGVKLTLH.mjs";
5
- import "../../chunk-7YAU5CY6.mjs";
6
- import "../../chunk-GYMYRIZP.mjs";
7
- import "../../chunk-6DZEXFNB.mjs";
8
- import "../../chunk-XREGSKX3.mjs";
9
- import "../../chunk-DBHJ5KC3.mjs";
3
+ } from "../../chunk-TOWTPLRC.mjs";
4
+ import "../../chunk-GT3RU6GA.mjs";
5
+ import "../../chunk-FTPBQVQ6.mjs";
6
+ import "../../chunk-IKXYTCSB.mjs";
7
+ import "../../chunk-JVMXMFBB.mjs";
8
+ import "../../chunk-ZEDMKQK2.mjs";
9
+ import "../../chunk-LBTHZSBT.mjs";
10
+ import "../../chunk-P2N2PEFY.mjs";
11
+ import "../../chunk-NOOEKOWY.mjs";
12
+ import "../../chunk-R4HCRDU5.mjs";
10
13
  import "../../chunk-FEZKMUCF.mjs";
11
14
  import "../../chunk-QOJ2DQD6.mjs";
12
- import "../../chunk-VLQZANBF.mjs";
13
- import "../../chunk-FWCSY2DS.mjs";
15
+ import "../../chunk-AFML43VJ.mjs";
16
+ import "../../chunk-WNQUEZJF.mjs";
14
17
  export {
15
18
  AddLeadModal
16
19
  };
@@ -211,9 +211,9 @@ var buttonVariants = (0, import_class_variance_authority2.cva)(
211
211
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
212
212
  secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
213
213
  destructive: "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
214
- outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
214
+ outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:border-border focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
215
215
  "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
216
- "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
216
+ "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:border-brand-secondary focus-visible:ring-brand-secondary/30",
217
217
  ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
218
218
  link: "text-primary underline-offset-4 hover:underline"
219
219
  },