@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
@@ -0,0 +1,41 @@
1
+ import {
2
+ AICollectedDataSection,
3
+ AiConvAssignAdvisorDialog,
4
+ ChatBubble,
5
+ ChatComposer,
6
+ ChatThread,
7
+ ConversationList,
8
+ ConversationListItem,
9
+ ConversationStatusChip,
10
+ ConversationsPage,
11
+ LeadInfoPanel
12
+ } from "../../chunk-OLKMCXAR.mjs";
13
+ import "../../chunk-UALR6JGV.mjs";
14
+ import "../../chunk-RSUIPKGX.mjs";
15
+ import "../../chunk-OWFQSXVD.mjs";
16
+ import "../../chunk-H6NQTIF4.mjs";
17
+ import "../../chunk-6QAFGZC2.mjs";
18
+ import "../../chunk-BS75ICOO.mjs";
19
+ import "../../chunk-WL6WVV47.mjs";
20
+ import "../../chunk-WE4YKBDE.mjs";
21
+ import "../../chunk-2GIYVERS.mjs";
22
+ import "../../chunk-LBTHZSBT.mjs";
23
+ import "../../chunk-P2N2PEFY.mjs";
24
+ import "../../chunk-NOOEKOWY.mjs";
25
+ import "../../chunk-R4HCRDU5.mjs";
26
+ import "../../chunk-FEZKMUCF.mjs";
27
+ import "../../chunk-QOJ2DQD6.mjs";
28
+ import "../../chunk-AFML43VJ.mjs";
29
+ import "../../chunk-WNQUEZJF.mjs";
30
+ export {
31
+ AICollectedDataSection,
32
+ AiConvAssignAdvisorDialog,
33
+ ChatBubble,
34
+ ChatComposer,
35
+ ChatThread,
36
+ ConversationList,
37
+ ConversationListItem,
38
+ ConversationStatusChip,
39
+ ConversationsPage,
40
+ LeadInfoPanel
41
+ };
@@ -184,9 +184,9 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
184
184
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
185
185
  secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
186
186
  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",
187
- 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",
187
+ 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",
188
188
  "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
189
- "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
189
+ "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",
190
190
  ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
191
191
  link: "text-primary underline-offset-4 hover:underline"
192
192
  },
@@ -11,13 +11,13 @@ import {
11
11
  AlertDialogPortal,
12
12
  AlertDialogTitle,
13
13
  AlertDialogTrigger
14
- } from "../../chunk-JMHR3YGZ.mjs";
15
- import "../../chunk-XREGSKX3.mjs";
16
- import "../../chunk-DBHJ5KC3.mjs";
14
+ } from "../../chunk-TLAWKTSA.mjs";
15
+ import "../../chunk-NOOEKOWY.mjs";
16
+ import "../../chunk-R4HCRDU5.mjs";
17
17
  import "../../chunk-FEZKMUCF.mjs";
18
18
  import "../../chunk-QOJ2DQD6.mjs";
19
- import "../../chunk-VLQZANBF.mjs";
20
- import "../../chunk-FWCSY2DS.mjs";
19
+ import "../../chunk-AFML43VJ.mjs";
20
+ import "../../chunk-WNQUEZJF.mjs";
21
21
  export {
22
22
  AlertDialog,
23
23
  AlertDialogAction,
@@ -2,9 +2,9 @@ import {
2
2
  Alert,
3
3
  AlertDescription,
4
4
  AlertTitle
5
- } from "../../chunk-P76HMUI6.mjs";
6
- import "../../chunk-VLQZANBF.mjs";
7
- import "../../chunk-FWCSY2DS.mjs";
5
+ } from "../../chunk-MDUKXXIL.mjs";
6
+ import "../../chunk-AFML43VJ.mjs";
7
+ import "../../chunk-WNQUEZJF.mjs";
8
8
  export {
9
9
  Alert,
10
10
  AlertDescription,
@@ -177,9 +177,9 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
177
177
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
178
178
  secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
179
179
  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",
180
- 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",
180
+ 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",
181
181
  "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
182
- "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
182
+ "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",
183
183
  ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
184
184
  link: "text-primary underline-offset-4 hover:underline"
185
185
  },
@@ -407,6 +407,22 @@ function AlertDialogCancel(_a) {
407
407
  var React3 = __toESM(require("react"));
408
408
  var import_lucide_react2 = require("lucide-react");
409
409
  var import_react_day_picker = require("react-day-picker");
410
+
411
+ // src/lib/format-date.ts
412
+ var import_date_fns = require("date-fns");
413
+ function safeParse(iso) {
414
+ return (0, import_date_fns.parseISO)(iso);
415
+ }
416
+ function formatDateShort(iso) {
417
+ if (!iso) return "\u2014";
418
+ try {
419
+ return (0, import_date_fns.format)(safeParse(iso), "dd MMM yyyy");
420
+ } catch (e) {
421
+ return iso;
422
+ }
423
+ }
424
+
425
+ // src/components/ui/calendar.tsx
410
426
  var import_jsx_runtime4 = require("react/jsx-runtime");
411
427
  function CalendarRoot(_a) {
412
428
  var _b = _a, {
@@ -591,7 +607,7 @@ function CalendarDayButton(_a) {
591
607
  defaultClassNames.day,
592
608
  className
593
609
  ),
594
- "data-day": day.date.toLocaleDateString(),
610
+ "data-day": formatDateShort(day.date.toISOString()),
595
611
  "data-range-end": modifiers.range_end,
596
612
  "data-range-middle": modifiers.range_middle,
597
613
  "data-range-start": modifiers.range_start,
@@ -1,22 +1,23 @@
1
1
  import {
2
2
  AppointmentConfirmDialog,
3
3
  AppointmentRescheduleDialog
4
- } from "../../chunk-6AW4KJHE.mjs";
5
- import "../../chunk-JMHR3YGZ.mjs";
6
- import "../../chunk-3OYFOX3X.mjs";
7
- import "../../chunk-BDYZCBRT.mjs";
8
- import "../../chunk-34NWQURD.mjs";
9
- import "../../chunk-OODBHKG7.mjs";
10
- import "../../chunk-BKNFWEH2.mjs";
11
- import "../../chunk-NSLMILBT.mjs";
12
- import "../../chunk-FH6QVUVZ.mjs";
13
- import "../../chunk-6DZEXFNB.mjs";
14
- import "../../chunk-XREGSKX3.mjs";
15
- import "../../chunk-DBHJ5KC3.mjs";
4
+ } from "../../chunk-SIVYAI3M.mjs";
5
+ import "../../chunk-5VOTTIXF.mjs";
6
+ import "../../chunk-6QAFGZC2.mjs";
7
+ import "../../chunk-BS75ICOO.mjs";
8
+ import "../../chunk-WL6WVV47.mjs";
9
+ import "../../chunk-TLAWKTSA.mjs";
10
+ import "../../chunk-6HIOM2HL.mjs";
11
+ import "../../chunk-M4VYX2PV.mjs";
12
+ import "../../chunk-P7CEBZM6.mjs";
13
+ import "../../chunk-2GIYVERS.mjs";
14
+ import "../../chunk-P2N2PEFY.mjs";
15
+ import "../../chunk-NOOEKOWY.mjs";
16
+ import "../../chunk-R4HCRDU5.mjs";
16
17
  import "../../chunk-FEZKMUCF.mjs";
17
18
  import "../../chunk-QOJ2DQD6.mjs";
18
- import "../../chunk-VLQZANBF.mjs";
19
- import "../../chunk-FWCSY2DS.mjs";
19
+ import "../../chunk-AFML43VJ.mjs";
20
+ import "../../chunk-WNQUEZJF.mjs";
20
21
  export {
21
22
  AppointmentConfirmDialog,
22
23
  AppointmentRescheduleDialog
@@ -59,7 +59,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
59
59
  // src/components/ui/appointment-availability-settings.tsx
60
60
  var appointment_availability_settings_exports = {};
61
61
  __export(appointment_availability_settings_exports, {
62
- AppointmentAvailabilitySettings: () => AppointmentAvailabilitySettings
62
+ AppointmentAvailabilitySettings: () => AppointmentAvailabilitySettings,
63
+ TIMEZONE_OPTIONS: () => TIMEZONE_OPTIONS
63
64
  });
64
65
  module.exports = __toCommonJS(appointment_availability_settings_exports);
65
66
  var import_react4 = __toESM(require("react"));
@@ -165,9 +166,9 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
165
166
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
166
167
  secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
167
168
  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",
168
- 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",
169
+ 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",
169
170
  "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
170
- "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
171
+ "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",
171
172
  ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
172
173
  link: "text-primary underline-offset-4 hover:underline"
173
174
  },
@@ -231,7 +232,7 @@ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
231
232
 
232
233
  // src/components/ui/date-picker.tsx
233
234
  var React4 = __toESM(require("react"));
234
- var import_date_fns = require("date-fns");
235
+ var import_date_fns2 = require("date-fns");
235
236
  var import_lucide_react3 = require("lucide-react");
236
237
 
237
238
  // src/components/ui/input.tsx
@@ -257,6 +258,29 @@ function Input(_a) {
257
258
  var React2 = __toESM(require("react"));
258
259
  var import_lucide_react2 = require("lucide-react");
259
260
  var import_react_day_picker = require("react-day-picker");
261
+
262
+ // src/lib/format-date.ts
263
+ var import_date_fns = require("date-fns");
264
+ function safeParse(iso) {
265
+ return (0, import_date_fns.parseISO)(iso);
266
+ }
267
+ function formatDateShort(iso) {
268
+ if (!iso) return "\u2014";
269
+ try {
270
+ return (0, import_date_fns.format)(safeParse(iso), "dd MMM yyyy");
271
+ } catch (e) {
272
+ return iso;
273
+ }
274
+ }
275
+ function formatDateWithWeekday(iso) {
276
+ try {
277
+ return (0, import_date_fns.format)(safeParse(iso), "EEE, dd MMM yyyy");
278
+ } catch (e) {
279
+ return iso;
280
+ }
281
+ }
282
+
283
+ // src/components/ui/calendar.tsx
260
284
  var import_jsx_runtime3 = require("react/jsx-runtime");
261
285
  function CalendarRoot(_a) {
262
286
  var _b = _a, {
@@ -441,7 +465,7 @@ function CalendarDayButton(_a) {
441
465
  defaultClassNames.day,
442
466
  className
443
467
  ),
444
- "data-day": day.date.toLocaleDateString(),
468
+ "data-day": formatDateShort(day.date.toISOString()),
445
469
  "data-range-end": modifiers.range_end,
446
470
  "data-range-middle": modifiers.range_middle,
447
471
  "data-range-start": modifiers.range_start,
@@ -540,9 +564,9 @@ function DatePicker({
540
564
  const timeValue = value ? `${String(value.getHours()).padStart(2, "0")}:${String(value.getMinutes()).padStart(2, "0")}` : "";
541
565
  let displayValue;
542
566
  if (value && showTimePicker) {
543
- displayValue = (0, import_date_fns.format)(value, "dd/MM/yyyy HH:mm");
567
+ displayValue = (0, import_date_fns2.format)(value, "dd/MM/yyyy HH:mm");
544
568
  } else if (value) {
545
- displayValue = (0, import_date_fns.format)(value, "dd/MM/yyyy");
569
+ displayValue = (0, import_date_fns2.format)(value, "dd/MM/yyyy");
546
570
  }
547
571
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Popover, { onOpenChange: disabled ? void 0 : setOpen, open, children: [
548
572
  /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
@@ -1119,19 +1143,6 @@ function TabsContent(_a) {
1119
1143
  );
1120
1144
  }
1121
1145
 
1122
- // src/lib/format-date.ts
1123
- var import_date_fns2 = require("date-fns");
1124
- function safeParse(iso) {
1125
- return (0, import_date_fns2.parseISO)(iso);
1126
- }
1127
- function formatDateWithWeekday(iso) {
1128
- try {
1129
- return (0, import_date_fns2.format)(safeParse(iso), "EEE, dd MMM yyyy");
1130
- } catch (e) {
1131
- return iso;
1132
- }
1133
- }
1134
-
1135
1146
  // src/components/ui/appointment-availability-settings.tsx
1136
1147
  var import_lucide_react6 = require("lucide-react");
1137
1148
  var import_jsx_runtime13 = require("react/jsx-runtime");
@@ -1146,6 +1157,17 @@ var AU_PUBLIC_HOLIDAYS_2026 = [
1146
1157
  { date: "2026-12-25", label: "Christmas Day" },
1147
1158
  { date: "2026-12-26", label: "Boxing Day" }
1148
1159
  ];
1160
+ var TIMEZONE_OPTIONS = [
1161
+ { value: "Australia/Sydney", label: "Sydney / Melbourne (AEDT)" },
1162
+ { value: "Australia/Brisbane", label: "Brisbane (AEST, no DST)" },
1163
+ { value: "Australia/Adelaide", label: "Adelaide (ACDT)" },
1164
+ { value: "Australia/Perth", label: "Perth (AWST)" },
1165
+ { value: "Australia/Darwin", label: "Darwin (ACST, no DST)" },
1166
+ { value: "Australia/Hobart", label: "Hobart (AEDT)" },
1167
+ { value: "Asia/Ho_Chi_Minh", label: "Ho Chi Minh City (ICT)" },
1168
+ { value: "Asia/Singapore", label: "Singapore (SGT)" },
1169
+ { value: "UTC", label: "UTC" }
1170
+ ];
1149
1171
  var TIME_OPTIONS = (() => {
1150
1172
  const opts = [];
1151
1173
  for (let h = 6; h <= 21; h++) {
@@ -1181,6 +1203,19 @@ function TimeSelect({
1181
1203
  }
1182
1204
  );
1183
1205
  }
1206
+ function PrefRow({
1207
+ label,
1208
+ description,
1209
+ children
1210
+ }) {
1211
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex min-h-[68px] items-center justify-between px-6 py-4", children: [
1212
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
1213
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-sm font-medium", children: label }),
1214
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs text-muted-foreground", children: description })
1215
+ ] }),
1216
+ children
1217
+ ] });
1218
+ }
1184
1219
  function AddTimeOffDialog({
1185
1220
  open,
1186
1221
  onOpenChange,
@@ -1286,22 +1321,31 @@ function AddTimeOffDialog({
1286
1321
  }
1287
1322
  function AppointmentAvailabilitySettings({
1288
1323
  schedule: initialSchedule,
1324
+ prefs: prefsProp,
1289
1325
  blockedDates: blockedDatesProp,
1326
+ publicHolidays: publicHolidaysProp,
1290
1327
  onSave,
1291
1328
  onBlockedDatesChange
1292
1329
  }) {
1293
- const hasMounted = import_react4.default.useRef(false);
1294
- import_react4.default.useEffect(() => {
1295
- hasMounted.current = true;
1296
- }, []);
1330
+ var _a, _b, _c, _d;
1297
1331
  const [schedule, setSchedule] = import_react4.default.useState(initialSchedule);
1298
- const [meetingDuration, setMeetingDuration] = import_react4.default.useState("30");
1299
- const [schedulingBuffer, setSchedulingBuffer] = import_react4.default.useState("0");
1300
- const [maxSlotsPerDay, setMaxSlotsPerDay] = import_react4.default.useState("8");
1332
+ const [meetingDuration, setMeetingDuration] = import_react4.default.useState(
1333
+ (_a = prefsProp == null ? void 0 : prefsProp.meetingDuration) != null ? _a : "30"
1334
+ );
1335
+ const [schedulingBuffer, setSchedulingBuffer] = import_react4.default.useState(
1336
+ (_b = prefsProp == null ? void 0 : prefsProp.schedulingBuffer) != null ? _b : "0"
1337
+ );
1338
+ const [maxSlotsPerDay, setMaxSlotsPerDay] = import_react4.default.useState(
1339
+ (_c = prefsProp == null ? void 0 : prefsProp.maxSlotsPerDay) != null ? _c : "8"
1340
+ );
1341
+ const [timezone, setTimezone] = import_react4.default.useState(
1342
+ (_d = prefsProp == null ? void 0 : prefsProp.timezone) != null ? _d : "Australia/Sydney"
1343
+ );
1301
1344
  const [timeOffEntries, setTimeOffEntries] = import_react4.default.useState(
1302
1345
  () => {
1303
- const holidayDates = new Set(AU_PUBLIC_HOLIDAYS_2026.map((h) => h.date));
1304
- const entries = AU_PUBLIC_HOLIDAYS_2026.map((h) => __spreadProps(__spreadValues({}, h), {
1346
+ const holidays = publicHolidaysProp != null ? publicHolidaysProp : AU_PUBLIC_HOLIDAYS_2026;
1347
+ const holidayDates = new Set(holidays.map((h) => h.date));
1348
+ const entries = holidays.map((h) => __spreadProps(__spreadValues({}, h), {
1305
1349
  enabled: true,
1306
1350
  isHoliday: true
1307
1351
  }));
@@ -1320,19 +1364,23 @@ function AppointmentAvailabilitySettings({
1320
1364
  );
1321
1365
  const [addMoreOpen, setAddMoreOpen] = import_react4.default.useState(false);
1322
1366
  const currentPrefs = import_react4.default.useMemo(
1323
- () => ({ meetingDuration, schedulingBuffer, maxSlotsPerDay }),
1324
- [meetingDuration, schedulingBuffer, maxSlotsPerDay]
1367
+ () => ({ meetingDuration, schedulingBuffer, maxSlotsPerDay, timezone }),
1368
+ [meetingDuration, schedulingBuffer, maxSlotsPerDay, timezone]
1325
1369
  );
1370
+ const saveGuard = import_react4.default.useRef(false);
1371
+ const timeOffGuard = import_react4.default.useRef(false);
1326
1372
  import_react4.default.useEffect(() => {
1327
- if (!hasMounted.current) return;
1328
- onSave == null ? void 0 : onSave(schedule, currentPrefs);
1329
- }, [schedule]);
1330
- import_react4.default.useEffect(() => {
1331
- if (!hasMounted.current) return;
1373
+ if (!saveGuard.current) {
1374
+ saveGuard.current = true;
1375
+ return;
1376
+ }
1332
1377
  onSave == null ? void 0 : onSave(schedule, currentPrefs);
1333
- }, [meetingDuration, schedulingBuffer, maxSlotsPerDay]);
1378
+ }, [schedule, currentPrefs]);
1334
1379
  import_react4.default.useEffect(() => {
1335
- if (!hasMounted.current) return;
1380
+ if (!timeOffGuard.current) {
1381
+ timeOffGuard.current = true;
1382
+ return;
1383
+ }
1336
1384
  const blocked = timeOffEntries.filter((e) => e.enabled).map(({ date, label, timeStart, timeEnd }) => ({
1337
1385
  date,
1338
1386
  label,
@@ -1427,76 +1475,97 @@ function AppointmentAvailabilitySettings({
1427
1475
  day.day
1428
1476
  )) }) }),
1429
1477
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TabsContent, { value: "booking", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col divide-y divide-border", children: [
1430
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex min-h-[68px] items-center justify-between px-6 py-4", children: [
1431
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
1432
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-sm font-medium", children: "Meeting Duration" }),
1433
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs text-muted-foreground", children: "Length of each appointment slot" })
1434
- ] }),
1435
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1436
- Select,
1437
- {
1438
- value: meetingDuration,
1439
- onValueChange: (v) => setMeetingDuration(v),
1440
- children: [
1441
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
1442
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SelectContent, { children: [
1443
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "15", children: "15 minutes" }),
1444
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "30", children: "30 minutes" }),
1445
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "45", children: "45 minutes" }),
1446
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "60", children: "60 minutes" }),
1447
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "90", children: "90 minutes" })
1448
- ] })
1449
- ]
1450
- }
1451
- )
1452
- ] }),
1453
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex min-h-[68px] items-center justify-between px-6 py-4", children: [
1454
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
1455
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-sm font-medium", children: "Scheduling Buffer" }),
1456
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs text-muted-foreground", children: "Gap between consecutive bookings" })
1457
- ] }),
1458
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1459
- Select,
1460
- {
1461
- value: schedulingBuffer,
1462
- onValueChange: (v) => setSchedulingBuffer(v),
1463
- children: [
1464
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
1465
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SelectContent, { children: [
1466
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "0", children: "No buffer" }),
1467
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "5", children: "5 minutes" }),
1468
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "10", children: "10 minutes" }),
1469
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "15", children: "15 minutes" }),
1470
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "30", children: "30 minutes" })
1471
- ] })
1472
- ]
1473
- }
1474
- )
1475
- ] }),
1476
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex min-h-[68px] items-center justify-between px-6 py-4", children: [
1477
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
1478
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-sm font-medium", children: "Daily Slot Limit" }),
1479
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs text-muted-foreground", children: "Maximum bookings accepted per day" })
1480
- ] }),
1481
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1482
- Select,
1483
- {
1484
- value: maxSlotsPerDay,
1485
- onValueChange: (v) => setMaxSlotsPerDay(v),
1486
- children: [
1487
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
1488
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SelectContent, { children: [
1489
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "2", children: "2 per day" }),
1490
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "4", children: "4 per day" }),
1491
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "6", children: "6 per day" }),
1492
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "8", children: "8 per day" }),
1493
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "10", children: "10 per day" }),
1494
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "unlimited", children: "Unlimited" })
1495
- ] })
1496
- ]
1497
- }
1498
- )
1499
- ] })
1478
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1479
+ PrefRow,
1480
+ {
1481
+ label: "Meeting Duration",
1482
+ description: "Length of each appointment slot",
1483
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1484
+ Select,
1485
+ {
1486
+ value: meetingDuration,
1487
+ onValueChange: (v) => setMeetingDuration(v),
1488
+ children: [
1489
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
1490
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SelectContent, { children: [
1491
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "15", children: "15 minutes" }),
1492
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "30", children: "30 minutes" }),
1493
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "45", children: "45 minutes" }),
1494
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "60", children: "60 minutes" }),
1495
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "90", children: "90 minutes" })
1496
+ ] })
1497
+ ]
1498
+ }
1499
+ )
1500
+ }
1501
+ ),
1502
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1503
+ PrefRow,
1504
+ {
1505
+ label: "Scheduling Buffer",
1506
+ description: "Gap between consecutive bookings",
1507
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1508
+ Select,
1509
+ {
1510
+ value: schedulingBuffer,
1511
+ onValueChange: (v) => setSchedulingBuffer(v),
1512
+ children: [
1513
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
1514
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SelectContent, { children: [
1515
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "0", children: "No buffer" }),
1516
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "5", children: "5 minutes" }),
1517
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "10", children: "10 minutes" }),
1518
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "15", children: "15 minutes" }),
1519
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "30", children: "30 minutes" })
1520
+ ] })
1521
+ ]
1522
+ }
1523
+ )
1524
+ }
1525
+ ),
1526
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1527
+ PrefRow,
1528
+ {
1529
+ label: "Daily Slot Limit",
1530
+ description: "Maximum bookings accepted per day",
1531
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1532
+ Select,
1533
+ {
1534
+ value: maxSlotsPerDay,
1535
+ onValueChange: (v) => setMaxSlotsPerDay(v),
1536
+ children: [
1537
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
1538
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SelectContent, { children: [
1539
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "2", children: "2 per day" }),
1540
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "4", children: "4 per day" }),
1541
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "6", children: "6 per day" }),
1542
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "8", children: "8 per day" }),
1543
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "10", children: "10 per day" }),
1544
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: "unlimited", children: "Unlimited" })
1545
+ ] })
1546
+ ]
1547
+ }
1548
+ )
1549
+ }
1550
+ ),
1551
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1552
+ PrefRow,
1553
+ {
1554
+ label: "Meeting Timezone",
1555
+ description: "Timezone used for booking display and notifications",
1556
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1557
+ Select,
1558
+ {
1559
+ value: timezone,
1560
+ onValueChange: (v) => setTimezone(v),
1561
+ children: [
1562
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-56", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
1563
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectContent, { children: TIMEZONE_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
1564
+ ]
1565
+ }
1566
+ )
1567
+ }
1568
+ )
1500
1569
  ] }) }),
1501
1570
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(TabsContent, { value: "time-off", children: [
1502
1571
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between px-6 py-4", children: [
@@ -1517,7 +1586,7 @@ function AppointmentAvailabilitySettings({
1517
1586
  ] }),
1518
1587
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Separator, {}),
1519
1588
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col divide-y divide-border", children: timeOffEntries.map((entry) => {
1520
- var _a;
1589
+ var _a2;
1521
1590
  const formattedDate = formatDateWithWeekday(entry.date);
1522
1591
  const hasTimeRange = entry.timeStart && entry.timeEnd;
1523
1592
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
@@ -1542,7 +1611,7 @@ function AppointmentAvailabilitySettings({
1542
1611
  "cursor-pointer text-sm font-medium",
1543
1612
  !entry.enabled && "text-muted-foreground"
1544
1613
  ),
1545
- children: (_a = entry.label) != null ? _a : formattedDate
1614
+ children: (_a2 = entry.label) != null ? _a2 : formattedDate
1546
1615
  }
1547
1616
  ),
1548
1617
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
@@ -1586,5 +1655,6 @@ function AppointmentAvailabilitySettings({
1586
1655
  }
1587
1656
  // Annotate the CommonJS export names for ESM import in node:
1588
1657
  0 && (module.exports = {
1589
- AppointmentAvailabilitySettings
1658
+ AppointmentAvailabilitySettings,
1659
+ TIMEZONE_OPTIONS
1590
1660
  });
@@ -1,23 +1,25 @@
1
1
  import {
2
- AppointmentAvailabilitySettings
3
- } from "../../chunk-HBZLGDIN.mjs";
4
- import "../../chunk-ZU4NV6RG.mjs";
5
- import "../../chunk-7PV3IWCN.mjs";
6
- import "../../chunk-DUJTAXMH.mjs";
7
- import "../../chunk-3GF7OVTP.mjs";
8
- import "../../chunk-OODBHKG7.mjs";
9
- import "../../chunk-JHJHG4GO.mjs";
10
- import "../../chunk-7PYJD5JI.mjs";
11
- import "../../chunk-NSLMILBT.mjs";
12
- import "../../chunk-FH6QVUVZ.mjs";
13
- import "../../chunk-GYMYRIZP.mjs";
14
- import "../../chunk-6DZEXFNB.mjs";
15
- import "../../chunk-XREGSKX3.mjs";
16
- import "../../chunk-DBHJ5KC3.mjs";
2
+ AppointmentAvailabilitySettings,
3
+ TIMEZONE_OPTIONS
4
+ } from "../../chunk-3ERBUVHC.mjs";
5
+ import "../../chunk-OKTJFDPN.mjs";
6
+ import "../../chunk-DGNHGNYH.mjs";
7
+ import "../../chunk-PNSYFE3K.mjs";
8
+ import "../../chunk-WE4YKBDE.mjs";
9
+ import "../../chunk-6HIOM2HL.mjs";
10
+ import "../../chunk-M4VYX2PV.mjs";
11
+ import "../../chunk-P7CEBZM6.mjs";
12
+ import "../../chunk-2GIYVERS.mjs";
13
+ import "../../chunk-ZEDMKQK2.mjs";
14
+ import "../../chunk-LBTHZSBT.mjs";
15
+ import "../../chunk-P2N2PEFY.mjs";
16
+ import "../../chunk-NOOEKOWY.mjs";
17
+ import "../../chunk-R4HCRDU5.mjs";
17
18
  import "../../chunk-FEZKMUCF.mjs";
18
19
  import "../../chunk-QOJ2DQD6.mjs";
19
- import "../../chunk-VLQZANBF.mjs";
20
- import "../../chunk-FWCSY2DS.mjs";
20
+ import "../../chunk-AFML43VJ.mjs";
21
+ import "../../chunk-WNQUEZJF.mjs";
21
22
  export {
22
- AppointmentAvailabilitySettings
23
+ AppointmentAvailabilitySettings,
24
+ TIMEZONE_OPTIONS
23
25
  };