@wealthx/shadcn 1.5.32 → 1.5.33

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 (58) hide show
  1. package/.turbo/turbo-build.log +92 -92
  2. package/CHANGELOG.md +6 -0
  3. package/dist/{chunk-SYJ6LVJ6.mjs → chunk-3ZU5BH6X.mjs} +1 -1
  4. package/dist/{chunk-FTQ2AKZ2.mjs → chunk-4QTHK7ML.mjs} +1 -1
  5. package/dist/{chunk-T5HU4S4X.mjs → chunk-C7ZTZTEW.mjs} +1 -1
  6. package/dist/{chunk-KI57CBJR.mjs → chunk-DQNNP6I4.mjs} +33 -24
  7. package/dist/{chunk-AE4JKISB.mjs → chunk-EEI4FLEE.mjs} +1 -1
  8. package/dist/{chunk-IEQX4UVP.mjs → chunk-EY36WDCF.mjs} +1 -1
  9. package/dist/{chunk-HB5BKRMH.mjs → chunk-F3CU6KEI.mjs} +11 -1
  10. package/dist/chunk-H65NB7KI.mjs +182 -0
  11. package/dist/{chunk-TRM3KIHT.mjs → chunk-ICCPK3J2.mjs} +1 -1
  12. package/dist/{chunk-KGVVK6OS.mjs → chunk-ORMC3TV3.mjs} +3 -1
  13. package/dist/{chunk-HSXMTFIM.mjs → chunk-UD5UF5OC.mjs} +1 -1
  14. package/dist/{chunk-IW33VLL5.mjs → chunk-X3VEDQPO.mjs} +7 -3
  15. package/dist/{chunk-AAZSLTER.mjs → chunk-XGRSPFFC.mjs} +16 -7
  16. package/dist/components/ui/about-you-form.js +9 -6
  17. package/dist/components/ui/about-you-form.mjs +2 -2
  18. package/dist/components/ui/ai-conversations/index.js +4 -1
  19. package/dist/components/ui/ai-conversations/index.mjs +2 -2
  20. package/dist/components/ui/appointment-availability-settings.js +24 -12
  21. package/dist/components/ui/appointment-availability-settings.mjs +3 -3
  22. package/dist/components/ui/appointment-book-dialog.js +33 -24
  23. package/dist/components/ui/appointment-book-dialog.mjs +1 -1
  24. package/dist/components/ui/appointment-detail-sheet.js +3 -1
  25. package/dist/components/ui/appointment-detail-sheet.mjs +1 -1
  26. package/dist/components/ui/appointment-gmail-connect.js +127 -70
  27. package/dist/components/ui/appointment-gmail-connect.mjs +1 -1
  28. package/dist/components/ui/backoffice-signup-steps.js +23 -16
  29. package/dist/components/ui/backoffice-signup-steps.mjs +3 -3
  30. package/dist/components/ui/bank-statement-generate-dialog.js +12 -9
  31. package/dist/components/ui/bank-statement-generate-dialog.mjs +3 -3
  32. package/dist/components/ui/color-picker.js +21 -14
  33. package/dist/components/ui/color-picker.mjs +2 -2
  34. package/dist/components/ui/date-picker.js +6 -3
  35. package/dist/components/ui/date-picker.mjs +2 -2
  36. package/dist/components/ui/opportunity-edit-modals.js +45 -42
  37. package/dist/components/ui/opportunity-edit-modals.mjs +3 -3
  38. package/dist/components/ui/opportunity-summary-tab.js +48 -45
  39. package/dist/components/ui/opportunity-summary-tab.mjs +4 -4
  40. package/dist/components/ui/pipeline-dialogs.js +12 -9
  41. package/dist/components/ui/pipeline-dialogs.mjs +3 -3
  42. package/dist/components/ui/popover.js +22 -1
  43. package/dist/components/ui/popover.mjs +3 -1
  44. package/dist/components/ui/savings-goal-modal.js +11 -8
  45. package/dist/components/ui/savings-goal-modal.mjs +2 -2
  46. package/dist/index.js +349 -257
  47. package/dist/index.mjs +15 -13
  48. package/dist/styles.css +1 -1
  49. package/package.json +1 -1
  50. package/src/components/index.tsx +4 -0
  51. package/src/components/ui/appointment-availability-settings.tsx +32 -19
  52. package/src/components/ui/appointment-book-dialog.tsx +52 -73
  53. package/src/components/ui/appointment-detail-sheet.tsx +3 -1
  54. package/src/components/ui/appointment-gmail-connect.tsx +89 -29
  55. package/src/components/ui/color-picker.tsx +12 -4
  56. package/src/components/ui/popover.tsx +33 -2
  57. package/src/styles/styles-css.ts +1 -1
  58. package/dist/chunk-7TMPOZDE.mjs +0 -122
@@ -1472,31 +1472,40 @@ function ClientSearch({
1472
1472
  ] }) })
1473
1473
  ] });
1474
1474
  }
1475
+ var FMT_CALL = {
1476
+ value: "call",
1477
+ label: "Call",
1478
+ icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Phone, { className: "h-4 w-4" })
1479
+ };
1480
+ var FMT_ONLINE = {
1481
+ value: "online",
1482
+ label: "Online Meeting",
1483
+ icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Video, { className: "h-4 w-4" })
1484
+ };
1485
+ var FMT_GOOGLE_MEET = {
1486
+ value: "google-meet",
1487
+ label: "Google Meet",
1488
+ icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Video, { className: "h-4 w-4" })
1489
+ };
1490
+ var FMT_MS_TEAMS = {
1491
+ value: "microsoft-teams",
1492
+ label: "MS Teams",
1493
+ icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Users, { className: "h-4 w-4" })
1494
+ };
1495
+ var FMT_OFFLINE = {
1496
+ value: "offline",
1497
+ label: "Offline Meeting",
1498
+ icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.MapPin, { className: "h-4 w-4" })
1499
+ };
1475
1500
  function getFormatOptions(platform) {
1476
- const call = {
1477
- value: "call",
1478
- label: "Call",
1479
- icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Phone, { className: "h-4 w-4" })
1480
- };
1481
- const googleMeet = {
1482
- value: "google-meet",
1483
- label: "Google Meet",
1484
- icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Video, { className: "h-4 w-4" })
1485
- };
1486
- const msTeams = {
1487
- value: "microsoft-teams",
1488
- label: "MS Teams",
1489
- icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Users, { className: "h-4 w-4" })
1490
- };
1491
- const offline = {
1492
- value: "offline",
1493
- label: "Offline Meeting",
1494
- icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.MapPin, { className: "h-4 w-4" })
1495
- };
1496
- if (platform === "google-meet") return [call, googleMeet, offline];
1497
- if (platform === "microsoft-teams") return [call, msTeams, offline];
1498
- if (platform === "any") return [call, googleMeet, msTeams, offline];
1499
- return [call, offline];
1501
+ if (platform === "online") return [FMT_CALL, FMT_ONLINE, FMT_OFFLINE];
1502
+ if (platform === "google-meet")
1503
+ return [FMT_CALL, FMT_GOOGLE_MEET, FMT_OFFLINE];
1504
+ if (platform === "microsoft-teams")
1505
+ return [FMT_CALL, FMT_MS_TEAMS, FMT_OFFLINE];
1506
+ if (platform === "any")
1507
+ return [FMT_CALL, FMT_GOOGLE_MEET, FMT_MS_TEAMS, FMT_OFFLINE];
1508
+ return [FMT_CALL, FMT_OFFLINE];
1500
1509
  }
1501
1510
  function MeetingFormatSection({
1502
1511
  format: format2,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AppointmentBookDialog
3
- } from "../../chunk-KI57CBJR.mjs";
3
+ } from "../../chunk-DQNNP6I4.mjs";
4
4
  import "../../chunk-JTK6VJXY.mjs";
5
5
  import "../../chunk-LDC6V6DJ.mjs";
6
6
  import "../../chunk-ISUA7DSB.mjs";
@@ -1371,11 +1371,13 @@ var MEETING_FORMAT_META = {
1371
1371
  icon: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react6.Users, { className: ICON_CLASS }),
1372
1372
  label: "Microsoft Teams"
1373
1373
  },
1374
+ online: { icon: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react6.Video, { className: ICON_CLASS }), label: "Online Meeting" },
1374
1375
  offline: { icon: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react6.MapPin, { className: ICON_CLASS }), label: "In Person" }
1375
1376
  };
1376
1377
  var ONLINE_FORMATS = /* @__PURE__ */ new Set([
1377
1378
  "google-meet",
1378
- "microsoft-teams"
1379
+ "microsoft-teams",
1380
+ "online"
1379
1381
  ]);
1380
1382
  function AppointmentDetailSheet({
1381
1383
  appointment,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AppointmentDetailSheet
3
- } from "../../chunk-KGVVK6OS.mjs";
3
+ } from "../../chunk-ORMC3TV3.mjs";
4
4
  import "../../chunk-NGKTJRFN.mjs";
5
5
  import "../../chunk-CQ7HKBEX.mjs";
6
6
  import "../../chunk-T5FRVEJQ.mjs";
@@ -63,9 +63,6 @@ __export(appointment_gmail_connect_exports, {
63
63
  });
64
64
  module.exports = __toCommonJS(appointment_gmail_connect_exports);
65
65
 
66
- // src/components/ui/badge.tsx
67
- var import_class_variance_authority = require("class-variance-authority");
68
-
69
66
  // src/lib/utils.ts
70
67
  var import_clsx = require("clsx");
71
68
  var import_tailwind_merge = require("tailwind-merge");
@@ -105,6 +102,9 @@ function cn(...inputs) {
105
102
  return twMerge((0, import_clsx.clsx)(inputs));
106
103
  }
107
104
 
105
+ // src/components/ui/badge.tsx
106
+ var import_class_variance_authority = require("class-variance-authority");
107
+
108
108
  // src/lib/slot.tsx
109
109
  var React = __toESM(require("react"));
110
110
  function mergeRefs(...refs) {
@@ -319,94 +319,151 @@ function Separator(_a) {
319
319
  // src/components/ui/appointment-gmail-connect.tsx
320
320
  var import_lucide_react2 = require("lucide-react");
321
321
  var import_jsx_runtime5 = require("react/jsx-runtime");
322
+ function GmailIcon({ className }) {
323
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("svg", { viewBox: "0 0 24 24", className, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
324
+ "path",
325
+ {
326
+ fill: "#EA4335",
327
+ d: "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z"
328
+ }
329
+ ) });
330
+ }
331
+ function OutlookIcon({ className }) {
332
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("svg", { viewBox: "0 0 24 24", className, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
333
+ "path",
334
+ {
335
+ fill: "#0078D4",
336
+ d: "M0 3.449L9.75 2.1v9.451H0m10.949-9.602L24 0v11.4H10.949M0 12.6h9.75v9.451L0 20.699M10.949 12.6H24V24l-12.9-1.801"
337
+ }
338
+ ) });
339
+ }
340
+ var PROVIDER_META = {
341
+ gmail: { label: "Gmail", iconBg: "bg-[#EA4335]/10", Icon: GmailIcon },
342
+ outlook: { label: "Outlook", iconBg: "bg-[#0078D4]/10", Icon: OutlookIcon }
343
+ };
322
344
  var PERMISSIONS = [
323
345
  "Read your calendar availability",
324
346
  "Send appointment confirmation emails",
325
347
  "Create calendar events on your behalf"
326
348
  ];
327
349
  function AppointmentGmailConnect({
350
+ provider = "gmail",
328
351
  connection,
329
352
  calendarLink,
353
+ highlighted = false,
330
354
  onCopyLink,
331
355
  onGoToIntegrations
332
356
  }) {
357
+ const { label, iconBg, Icon } = PROVIDER_META[provider];
333
358
  if (connection.connected) {
334
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col border border-border bg-card", children: [
335
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-3 px-5 py-4", children: [
336
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center bg-primary/10", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Mail, { className: "h-5 w-5 text-primary" }) }),
337
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex-1 min-w-0", children: [
338
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-base font-semibold", children: "Gmail Connected" }),
339
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "truncate text-sm text-muted-foreground", children: connection.email })
340
- ] }),
341
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Badge, { variant: "success", children: [
342
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Check, { size: 10 }),
343
- "Active"
344
- ] }),
345
- connection.connectedAt && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "shrink-0 text-xs text-muted-foreground", children: [
346
- "Connected since ",
347
- connection.connectedAt
348
- ] }),
349
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
350
- Button,
351
- {
352
- size: "sm",
353
- variant: "ghost",
354
- className: "shrink-0 gap-1.5 text-muted-foreground",
355
- onClick: onGoToIntegrations,
356
- children: [
357
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Settings, { className: "h-3.5 w-3.5" }),
358
- "Manage"
359
- ]
360
- }
361
- )
362
- ] }),
363
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Separator, {}),
364
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col gap-2 px-5 py-4", children: [
365
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium text-muted-foreground", children: "Permissions granted" }),
366
- PERMISSIONS.map((perm) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-2", children: [
367
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Check, { className: "h-3.5 w-3.5 shrink-0 text-success" }),
368
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm text-muted-foreground", children: perm })
369
- ] }, perm))
370
- ] }),
371
- calendarLink && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
372
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Separator, {}),
373
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col gap-2.5 px-5 py-4", children: [
374
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-2", children: [
375
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Link2, { className: "h-4 w-4 text-muted-foreground" }),
376
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-semibold", children: "Calendar Appointment Link" })
377
- ] }),
378
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm text-muted-foreground", children: "Share with clients so they can self-book." }),
379
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
359
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
360
+ "div",
361
+ {
362
+ className: cn(
363
+ "flex flex-col border bg-card",
364
+ highlighted ? "border-primary" : "border-border"
365
+ ),
366
+ children: [
367
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-start gap-3 px-5 py-4", children: [
380
368
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
381
- Input,
369
+ "div",
382
370
  {
383
- id: "calendar-link",
384
- readOnly: true,
385
- value: calendarLink,
386
- className: "cursor-default select-all pr-10 text-muted-foreground"
371
+ className: cn(
372
+ "flex h-10 w-10 shrink-0 items-center justify-center",
373
+ iconBg
374
+ ),
375
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Icon, { className: "h-5 w-5" })
387
376
  }
388
377
  ),
389
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
390
- Button,
391
- {
392
- type: "button",
393
- variant: "ghost",
394
- size: "icon",
395
- onClick: onCopyLink,
396
- className: "absolute right-1 top-1/2 h-8 w-8 -translate-y-1/2",
397
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Copy, { className: "h-4 w-4" })
398
- }
399
- )
378
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "min-w-0 flex-1", children: [
379
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-base font-semibold", children: [
380
+ label,
381
+ " Connected"
382
+ ] }),
383
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "truncate text-sm text-muted-foreground", children: connection.email })
384
+ ] }),
385
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex shrink-0 flex-col items-end gap-1.5", children: [
386
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
387
+ Button,
388
+ {
389
+ size: "sm",
390
+ variant: "ghost",
391
+ className: "gap-1.5 text-muted-foreground",
392
+ onClick: onGoToIntegrations,
393
+ children: [
394
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Settings, { className: "h-3.5 w-3.5" }),
395
+ "Manage"
396
+ ]
397
+ }
398
+ ),
399
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-2", children: [
400
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Badge, { variant: "success", children: [
401
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Check, { size: 10 }),
402
+ "Active"
403
+ ] }),
404
+ connection.connectedAt && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
405
+ "Connected since ",
406
+ connection.connectedAt
407
+ ] })
408
+ ] })
409
+ ] })
410
+ ] }),
411
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Separator, {}),
412
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col gap-2 px-5 py-4", children: [
413
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium text-muted-foreground", children: "Permissions granted" }),
414
+ PERMISSIONS.map((perm) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-2", children: [
415
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Check, { className: "h-3.5 w-3.5 shrink-0 text-success" }),
416
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm text-muted-foreground", children: perm })
417
+ ] }, perm))
418
+ ] }),
419
+ calendarLink && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
420
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Separator, {}),
421
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col gap-2.5 px-5 py-4", children: [
422
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-2", children: [
423
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Link2, { className: "h-4 w-4 text-muted-foreground" }),
424
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-semibold", children: "Calendar Appointment Link" })
425
+ ] }),
426
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm text-muted-foreground", children: "Share with clients so they can self-book." }),
427
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
428
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
429
+ Input,
430
+ {
431
+ id: "calendar-link",
432
+ readOnly: true,
433
+ value: calendarLink,
434
+ className: "cursor-default select-all pr-10 text-muted-foreground"
435
+ }
436
+ ),
437
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
438
+ Button,
439
+ {
440
+ type: "button",
441
+ variant: "ghost",
442
+ size: "icon",
443
+ onClick: onCopyLink,
444
+ className: "absolute right-1 top-1/2 h-8 w-8 -translate-y-1/2",
445
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Copy, { className: "h-4 w-4" })
446
+ }
447
+ )
448
+ ] })
449
+ ] })
400
450
  ] })
401
- ] })
402
- ] })
403
- ] });
451
+ ]
452
+ }
453
+ );
404
454
  }
405
455
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col items-center gap-4 border border-border bg-card px-6 py-8 text-center", children: [
406
456
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex h-12 w-12 items-center justify-center bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Mail, { className: "h-6 w-6 text-muted-foreground" }) }),
407
457
  /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
408
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-base font-semibold", children: "Gmail not connected" }),
409
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "max-w-xs text-sm text-muted-foreground", children: "Connect your Gmail account in Integrations to enable calendar booking and appointment confirmations." })
458
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-base font-semibold", children: [
459
+ label,
460
+ " not connected"
461
+ ] }),
462
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "max-w-xs text-sm text-muted-foreground", children: [
463
+ "Connect your ",
464
+ label,
465
+ " account in Integrations to enable calendar booking and appointment confirmations."
466
+ ] })
410
467
  ] }),
411
468
  /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex w-full max-w-xs flex-col gap-2 text-left", children: [
412
469
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium text-muted-foreground", children: "Once connected, WealthX will be able to:" }),
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AppointmentGmailConnect
3
- } from "../../chunk-7TMPOZDE.mjs";
3
+ } from "../../chunk-H65NB7KI.mjs";
4
4
  import "../../chunk-2GIYVERS.mjs";
5
5
  import "../../chunk-X6RC5UWB.mjs";
6
6
  import "../../chunk-LBTHZSBT.mjs";
@@ -278,9 +278,10 @@ function Checkbox(_a) {
278
278
  }
279
279
 
280
280
  // src/components/ui/color-picker.tsx
281
- var React3 = __toESM(require("react"));
281
+ var React4 = __toESM(require("react"));
282
282
 
283
283
  // src/components/ui/popover.tsx
284
+ var React3 = __toESM(require("react"));
284
285
  var import_popover = require("@base-ui/react/popover");
285
286
 
286
287
  // src/lib/theme-provider.tsx
@@ -293,6 +294,7 @@ function useThemeVars() {
293
294
 
294
295
  // src/components/ui/popover.tsx
295
296
  var import_jsx_runtime4 = require("react/jsx-runtime");
297
+ var PopoverPortalContext = React3.createContext(void 0);
296
298
  function Popover(_a) {
297
299
  var props = __objRest(_a, []);
298
300
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
@@ -314,7 +316,8 @@ function PopoverContent(_a) {
314
316
  "style"
315
317
  ]);
316
318
  const themeVars = useThemeVars();
317
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
319
+ const portalContainer = React3.useContext(PopoverPortalContext);
320
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Portal, { container: portalContainer != null ? portalContainer : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
318
321
  import_popover.Popover.Positioner,
319
322
  {
320
323
  className: "z-[200]",
@@ -432,15 +435,19 @@ function ColorPickerContent({
432
435
  onChange,
433
436
  presets = COLOR_PICKER_PRESETS
434
437
  }) {
435
- const [hexInput, setHexInput] = React3.useState(value);
436
- React3.useEffect(() => {
437
- setHexInput(value);
438
+ const [hexInput, setHexInput] = React4.useState(value);
439
+ const hexInputRef = React4.useRef(hexInput);
440
+ hexInputRef.current = hexInput;
441
+ React4.useEffect(() => {
442
+ if (value !== hexInputRef.current) {
443
+ setHexInput(value);
444
+ }
438
445
  }, [value]);
439
446
  function handleHexInputChange(e) {
440
447
  const raw = e.target.value;
441
448
  setHexInput(raw);
442
449
  const normalized = normalizeHex(raw);
443
- if (isValidHex(normalized)) {
450
+ if (/^#[0-9A-Fa-f]{6}$/.test(normalized)) {
444
451
  onChange(normalized);
445
452
  }
446
453
  }
@@ -520,10 +527,10 @@ function ColorPicker({
520
527
  className
521
528
  }) {
522
529
  const isControlled = controlledValue !== void 0;
523
- const [internalValue, setInternalValue] = React3.useState(defaultValue);
530
+ const [internalValue, setInternalValue] = React4.useState(defaultValue);
524
531
  const color = isControlled ? controlledValue : internalValue;
525
- const [open, setOpen] = React3.useState(false);
526
- React3.useEffect(() => {
532
+ const [open, setOpen] = React4.useState(false);
533
+ React4.useEffect(() => {
527
534
  if (disabled) setOpen(false);
528
535
  }, [disabled]);
529
536
  function handleChange(newColor) {
@@ -745,11 +752,11 @@ function FieldError(_a) {
745
752
  }
746
753
 
747
754
  // src/components/ui/select.tsx
748
- var React4 = __toESM(require("react"));
755
+ var React5 = __toESM(require("react"));
749
756
  var import_lucide_react3 = require("lucide-react");
750
757
  var import_select = require("@base-ui/react/select");
751
758
  var import_jsx_runtime10 = require("react/jsx-runtime");
752
- var SelectPortalContext = React4.createContext(
759
+ var SelectPortalContext = React5.createContext(
753
760
  void 0
754
761
  );
755
762
  function Select(_a) {
@@ -798,7 +805,7 @@ function SelectContent(_a) {
798
805
  "style"
799
806
  ]);
800
807
  const themeVars = useThemeVars();
801
- const portalContainer = React4.useContext(SelectPortalContext);
808
+ const portalContainer = React5.useContext(SelectPortalContext);
802
809
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_select.Select.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
803
810
  import_select.Select.Positioner,
804
811
  {
@@ -1047,7 +1054,7 @@ var import_react5 = require("react");
1047
1054
  var import_lucide_react6 = require("lucide-react");
1048
1055
 
1049
1056
  // src/components/ui/password-strength-tooltip.tsx
1050
- var React5 = __toESM(require("react"));
1057
+ var React6 = __toESM(require("react"));
1051
1058
  var import_lucide_react5 = require("lucide-react");
1052
1059
  var import_popover3 = require("@base-ui/react/popover");
1053
1060
  var import_jsx_runtime13 = require("react/jsx-runtime");
@@ -1061,10 +1068,10 @@ var PASSWORD_STRENGTH_RULES = [
1061
1068
  test: (p) => /[^A-Za-z0-9]/.test(p)
1062
1069
  }
1063
1070
  ];
1064
- var PasswordStrengthTooltip = React5.forwardRef(function PasswordStrengthTooltip2({ open = false, password, children, side = "right" }, forwardedRef) {
1071
+ var PasswordStrengthTooltip = React6.forwardRef(function PasswordStrengthTooltip2({ open = false, password, children, side = "right" }, forwardedRef) {
1065
1072
  const themeVars = useThemeVars();
1066
- const anchorRef = React5.useRef(null);
1067
- const composedRef = React5.useCallback(
1073
+ const anchorRef = React6.useRef(null);
1074
+ const composedRef = React6.useCallback(
1068
1075
  (node) => {
1069
1076
  anchorRef.current = node;
1070
1077
  if (typeof forwardedRef === "function") {
@@ -6,17 +6,17 @@ import {
6
6
  PaymentView,
7
7
  PersonalDetailsStep,
8
8
  StripeView
9
- } from "../../chunk-IEQX4UVP.mjs";
9
+ } from "../../chunk-EY36WDCF.mjs";
10
10
  import "../../chunk-4UT3RZ2D.mjs";
11
11
  import "../../chunk-IKVF4XE2.mjs";
12
12
  import "../../chunk-I4KVSZCH.mjs";
13
- import "../../chunk-IW33VLL5.mjs";
13
+ import "../../chunk-X3VEDQPO.mjs";
14
14
  import "../../chunk-MS3GNXMB.mjs";
15
15
  import "../../chunk-3S6KVFF5.mjs";
16
16
  import "../../chunk-IKXYTCSB.mjs";
17
17
  import "../../chunk-K6VCC2MK.mjs";
18
18
  import "../../chunk-2GIYVERS.mjs";
19
- import "../../chunk-HB5BKRMH.mjs";
19
+ import "../../chunk-F3CU6KEI.mjs";
20
20
  import "../../chunk-LSRGA5BI.mjs";
21
21
  import "../../chunk-LBTHZSBT.mjs";
22
22
  import "../../chunk-XYSRRDBH.mjs";
@@ -272,7 +272,7 @@ function Checkbox(_a) {
272
272
  }
273
273
 
274
274
  // src/components/ui/date-picker.tsx
275
- var React4 = __toESM(require("react"));
275
+ var React5 = __toESM(require("react"));
276
276
  var import_date_fns2 = require("date-fns");
277
277
  var import_lucide_react4 = require("lucide-react");
278
278
 
@@ -512,6 +512,7 @@ function CalendarDayButton(_a) {
512
512
  }
513
513
 
514
514
  // src/components/ui/popover.tsx
515
+ var React4 = __toESM(require("react"));
515
516
  var import_popover = require("@base-ui/react/popover");
516
517
 
517
518
  // src/lib/theme-provider.tsx
@@ -524,6 +525,7 @@ function useThemeVars() {
524
525
 
525
526
  // src/components/ui/popover.tsx
526
527
  var import_jsx_runtime6 = require("react/jsx-runtime");
528
+ var PopoverPortalContext = React4.createContext(void 0);
527
529
  function Popover(_a) {
528
530
  var props = __objRest(_a, []);
529
531
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
@@ -545,7 +547,8 @@ function PopoverContent(_a) {
545
547
  "style"
546
548
  ]);
547
549
  const themeVars = useThemeVars();
548
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
550
+ const portalContainer = React4.useContext(PopoverPortalContext);
551
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_popover.Popover.Portal, { container: portalContainer != null ? portalContainer : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
549
552
  import_popover.Popover.Positioner,
550
553
  {
551
554
  className: "z-[200]",
@@ -577,7 +580,7 @@ function DatePicker({
577
580
  className,
578
581
  calendarProps
579
582
  }) {
580
- const [open, setOpen] = React4.useState(false);
583
+ const [open, setOpen] = React5.useState(false);
581
584
  function handleDaySelect(day) {
582
585
  if (!day) {
583
586
  onChange == null ? void 0 : onChange(void 0);
@@ -930,11 +933,11 @@ function FieldLabel(_a) {
930
933
  var import_lucide_react7 = require("lucide-react");
931
934
 
932
935
  // src/components/ui/select.tsx
933
- var React5 = __toESM(require("react"));
936
+ var React6 = __toESM(require("react"));
934
937
  var import_lucide_react6 = require("lucide-react");
935
938
  var import_select = require("@base-ui/react/select");
936
939
  var import_jsx_runtime12 = require("react/jsx-runtime");
937
- var SelectPortalContext = React5.createContext(
940
+ var SelectPortalContext = React6.createContext(
938
941
  void 0
939
942
  );
940
943
  function Select(_a) {
@@ -983,7 +986,7 @@ function SelectContent(_a) {
983
986
  "style"
984
987
  ]);
985
988
  const themeVars = useThemeVars();
986
- const portalContainer = React5.useContext(SelectPortalContext);
989
+ const portalContainer = React6.useContext(SelectPortalContext);
987
990
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_select.Select.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
988
991
  import_select.Select.Positioner,
989
992
  {
@@ -1250,7 +1253,7 @@ function TableCell(_a) {
1250
1253
  }
1251
1254
 
1252
1255
  // src/components/ui/toggle-group.tsx
1253
- var React6 = __toESM(require("react"));
1256
+ var React7 = __toESM(require("react"));
1254
1257
  var import_toggle_group = require("@base-ui/react/toggle-group");
1255
1258
  var import_toggle2 = require("@base-ui/react/toggle");
1256
1259
 
@@ -1281,7 +1284,7 @@ var toggleVariants = (0, import_class_variance_authority4.cva)(
1281
1284
 
1282
1285
  // src/components/ui/toggle-group.tsx
1283
1286
  var import_jsx_runtime17 = require("react/jsx-runtime");
1284
- var ToggleGroupContext = React6.createContext({
1287
+ var ToggleGroupContext = React7.createContext({
1285
1288
  size: "default",
1286
1289
  variant: "default",
1287
1290
  spacing: 0
@@ -1333,7 +1336,7 @@ function ToggleGroupItem(_a) {
1333
1336
  "variant",
1334
1337
  "size"
1335
1338
  ]);
1336
- const context = React6.useContext(ToggleGroupContext);
1339
+ const context = React7.useContext(ToggleGroupContext);
1337
1340
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1338
1341
  import_toggle2.Toggle,
1339
1342
  __spreadProps(__spreadValues({
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BankStatementGenerateDialog
3
- } from "../../chunk-FTQ2AKZ2.mjs";
3
+ } from "../../chunk-4QTHK7ML.mjs";
4
4
  import "../../chunk-MS3GNXMB.mjs";
5
5
  import "../../chunk-6WRDXE7A.mjs";
6
6
  import "../../chunk-GT3RU6GA.mjs";
@@ -9,8 +9,8 @@ import "../../chunk-K6VCC2MK.mjs";
9
9
  import "../../chunk-T5FRVEJQ.mjs";
10
10
  import "../../chunk-2GIYVERS.mjs";
11
11
  import "../../chunk-JVMXMFBB.mjs";
12
- import "../../chunk-TRM3KIHT.mjs";
13
- import "../../chunk-HB5BKRMH.mjs";
12
+ import "../../chunk-ICCPK3J2.mjs";
13
+ import "../../chunk-F3CU6KEI.mjs";
14
14
  import "../../chunk-OWFQSXVD.mjs";
15
15
  import "../../chunk-6QAFGZC2.mjs";
16
16
  import "../../chunk-FBNEIYSE.mjs";