@wealthx/shadcn 1.5.32 → 1.5.34

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 (62) hide show
  1. package/.turbo/turbo-build.log +114 -114
  2. package/CHANGELOG.md +12 -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-RSEVIQEO.mjs → chunk-E432NK23.mjs} +41 -36
  8. package/dist/{chunk-AE4JKISB.mjs → chunk-EEI4FLEE.mjs} +1 -1
  9. package/dist/{chunk-IEQX4UVP.mjs → chunk-EY36WDCF.mjs} +1 -1
  10. package/dist/{chunk-HB5BKRMH.mjs → chunk-F3CU6KEI.mjs} +11 -1
  11. package/dist/chunk-H65NB7KI.mjs +182 -0
  12. package/dist/{chunk-TRM3KIHT.mjs → chunk-ICCPK3J2.mjs} +1 -1
  13. package/dist/{chunk-KGVVK6OS.mjs → chunk-ORMC3TV3.mjs} +3 -1
  14. package/dist/{chunk-HSXMTFIM.mjs → chunk-UD5UF5OC.mjs} +1 -1
  15. package/dist/{chunk-IW33VLL5.mjs → chunk-X3VEDQPO.mjs} +7 -3
  16. package/dist/{chunk-AAZSLTER.mjs → chunk-XGRSPFFC.mjs} +16 -7
  17. package/dist/components/ui/about-you-form.js +9 -6
  18. package/dist/components/ui/about-you-form.mjs +2 -2
  19. package/dist/components/ui/ai-conversations/index.js +4 -1
  20. package/dist/components/ui/ai-conversations/index.mjs +2 -2
  21. package/dist/components/ui/appointment-availability-settings.js +24 -12
  22. package/dist/components/ui/appointment-availability-settings.mjs +3 -3
  23. package/dist/components/ui/appointment-book-dialog.js +33 -24
  24. package/dist/components/ui/appointment-book-dialog.mjs +1 -1
  25. package/dist/components/ui/appointment-detail-sheet.js +3 -1
  26. package/dist/components/ui/appointment-detail-sheet.mjs +1 -1
  27. package/dist/components/ui/appointment-gmail-connect.js +127 -70
  28. package/dist/components/ui/appointment-gmail-connect.mjs +1 -1
  29. package/dist/components/ui/backoffice-signup-steps.js +23 -16
  30. package/dist/components/ui/backoffice-signup-steps.mjs +3 -3
  31. package/dist/components/ui/bank-statement-generate-dialog.js +12 -9
  32. package/dist/components/ui/bank-statement-generate-dialog.mjs +3 -3
  33. package/dist/components/ui/color-picker.js +21 -14
  34. package/dist/components/ui/color-picker.mjs +2 -2
  35. package/dist/components/ui/date-picker.js +6 -3
  36. package/dist/components/ui/date-picker.mjs +2 -2
  37. package/dist/components/ui/opportunity-edit-modals.js +45 -42
  38. package/dist/components/ui/opportunity-edit-modals.mjs +3 -3
  39. package/dist/components/ui/opportunity-summary-tab.js +48 -45
  40. package/dist/components/ui/opportunity-summary-tab.mjs +4 -4
  41. package/dist/components/ui/pipeline-dialogs.js +12 -9
  42. package/dist/components/ui/pipeline-dialogs.mjs +3 -3
  43. package/dist/components/ui/popover.js +22 -1
  44. package/dist/components/ui/popover.mjs +3 -1
  45. package/dist/components/ui/savings-goal-modal.js +11 -8
  46. package/dist/components/ui/savings-goal-modal.mjs +2 -2
  47. package/dist/components/ui/sidebar-nav.js +39 -34
  48. package/dist/components/ui/sidebar-nav.mjs +1 -1
  49. package/dist/index.js +388 -291
  50. package/dist/index.mjs +16 -14
  51. package/dist/styles.css +1 -1
  52. package/package.json +1 -1
  53. package/src/components/index.tsx +4 -0
  54. package/src/components/ui/appointment-availability-settings.tsx +32 -19
  55. package/src/components/ui/appointment-book-dialog.tsx +52 -73
  56. package/src/components/ui/appointment-detail-sheet.tsx +3 -1
  57. package/src/components/ui/appointment-gmail-connect.tsx +89 -29
  58. package/src/components/ui/color-picker.tsx +12 -4
  59. package/src/components/ui/popover.tsx +33 -2
  60. package/src/components/ui/sidebar-nav.tsx +96 -75
  61. package/src/styles/styles-css.ts +1 -1
  62. package/dist/chunk-7TMPOZDE.mjs +0 -122
@@ -155,7 +155,7 @@ function Label(_a) {
155
155
  }
156
156
 
157
157
  // src/components/ui/date-picker.tsx
158
- var React4 = __toESM(require("react"));
158
+ var React5 = __toESM(require("react"));
159
159
  var import_date_fns2 = require("date-fns");
160
160
  var import_lucide_react3 = require("lucide-react");
161
161
 
@@ -502,6 +502,7 @@ function CalendarDayButton(_a) {
502
502
  }
503
503
 
504
504
  // src/components/ui/popover.tsx
505
+ var React4 = __toESM(require("react"));
505
506
  var import_popover = require("@base-ui/react/popover");
506
507
 
507
508
  // src/lib/theme-provider.tsx
@@ -514,6 +515,7 @@ function useThemeVars() {
514
515
 
515
516
  // src/components/ui/popover.tsx
516
517
  var import_jsx_runtime6 = require("react/jsx-runtime");
518
+ var PopoverPortalContext = React4.createContext(void 0);
517
519
  function Popover(_a) {
518
520
  var props = __objRest(_a, []);
519
521
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
@@ -535,7 +537,8 @@ function PopoverContent(_a) {
535
537
  "style"
536
538
  ]);
537
539
  const themeVars = useThemeVars();
538
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
540
+ const portalContainer = React4.useContext(PopoverPortalContext);
541
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_popover.Popover.Portal, { container: portalContainer != null ? portalContainer : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
539
542
  import_popover.Popover.Positioner,
540
543
  {
541
544
  className: "z-[200]",
@@ -567,7 +570,7 @@ function DatePicker({
567
570
  className,
568
571
  calendarProps
569
572
  }) {
570
- const [open, setOpen] = React4.useState(false);
573
+ const [open, setOpen] = React5.useState(false);
571
574
  function handleDaySelect(day) {
572
575
  if (!day) {
573
576
  onChange == null ? void 0 : onChange(void 0);
@@ -656,7 +659,7 @@ function DatePicker({
656
659
  }
657
660
 
658
661
  // src/components/ui/toggle-group.tsx
659
- var React5 = __toESM(require("react"));
662
+ var React6 = __toESM(require("react"));
660
663
  var import_toggle_group = require("@base-ui/react/toggle-group");
661
664
  var import_toggle2 = require("@base-ui/react/toggle");
662
665
 
@@ -687,7 +690,7 @@ var toggleVariants = (0, import_class_variance_authority2.cva)(
687
690
 
688
691
  // src/components/ui/toggle-group.tsx
689
692
  var import_jsx_runtime9 = require("react/jsx-runtime");
690
- var ToggleGroupContext = React5.createContext({
693
+ var ToggleGroupContext = React6.createContext({
691
694
  size: "default",
692
695
  variant: "default",
693
696
  spacing: 0
@@ -739,7 +742,7 @@ function ToggleGroupItem(_a) {
739
742
  "variant",
740
743
  "size"
741
744
  ]);
742
- const context = React5.useContext(ToggleGroupContext);
745
+ const context = React6.useContext(ToggleGroupContext);
743
746
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
744
747
  import_toggle2.Toggle,
745
748
  __spreadProps(__spreadValues({
@@ -3,8 +3,8 @@ import {
3
3
  } from "../../chunk-FFXTQTB4.mjs";
4
4
  import {
5
5
  DatePicker
6
- } from "../../chunk-TRM3KIHT.mjs";
7
- import "../../chunk-HB5BKRMH.mjs";
6
+ } from "../../chunk-ICCPK3J2.mjs";
7
+ import "../../chunk-F3CU6KEI.mjs";
8
8
  import "../../chunk-OWFQSXVD.mjs";
9
9
  import "../../chunk-6QAFGZC2.mjs";
10
10
  import "../../chunk-FBNEIYSE.mjs";
@@ -1126,8 +1126,10 @@ function DropdownMenuSeparator(_a) {
1126
1126
  }
1127
1127
 
1128
1128
  // src/components/ui/popover.tsx
1129
+ var React4 = __toESM(require("react"));
1129
1130
  var import_popover = require("@base-ui/react/popover");
1130
1131
  var import_jsx_runtime14 = require("react/jsx-runtime");
1132
+ var PopoverPortalContext = React4.createContext(void 0);
1131
1133
  function Popover(_a) {
1132
1134
  var props = __objRest(_a, []);
1133
1135
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
@@ -1149,7 +1151,8 @@ function PopoverContent(_a) {
1149
1151
  "style"
1150
1152
  ]);
1151
1153
  const themeVars = useThemeVars();
1152
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1154
+ const portalContainer = React4.useContext(PopoverPortalContext);
1155
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_popover.Popover.Portal, { container: portalContainer != null ? portalContainer : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1153
1156
  import_popover.Popover.Positioner,
1154
1157
  {
1155
1158
  className: "z-[200]",
@@ -9,7 +9,7 @@ import {
9
9
  ConversationStatusChip,
10
10
  ConversationsPage,
11
11
  LeadInfoPanel
12
- } from "../../../chunk-AE4JKISB.mjs";
12
+ } from "../../../chunk-EEI4FLEE.mjs";
13
13
  import "../../../chunk-3S6KVFF5.mjs";
14
14
  import "../../../chunk-WE4YKBDE.mjs";
15
15
  import "../../../chunk-T5FRVEJQ.mjs";
@@ -18,7 +18,7 @@ import "../../../chunk-H6NQTIF4.mjs";
18
18
  import "../../../chunk-2GIYVERS.mjs";
19
19
  import "../../../chunk-BS75ICOO.mjs";
20
20
  import "../../../chunk-X6RC5UWB.mjs";
21
- import "../../../chunk-HB5BKRMH.mjs";
21
+ import "../../../chunk-F3CU6KEI.mjs";
22
22
  import "../../../chunk-OWFQSXVD.mjs";
23
23
  import "../../../chunk-6QAFGZC2.mjs";
24
24
  import "../../../chunk-LBTHZSBT.mjs";
@@ -232,7 +232,7 @@ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
232
232
  });
233
233
 
234
234
  // src/components/ui/date-picker.tsx
235
- var React4 = __toESM(require("react"));
235
+ var React5 = __toESM(require("react"));
236
236
  var import_date_fns2 = require("date-fns");
237
237
  var import_lucide_react3 = require("lucide-react");
238
238
 
@@ -479,6 +479,7 @@ function CalendarDayButton(_a) {
479
479
  }
480
480
 
481
481
  // src/components/ui/popover.tsx
482
+ var React4 = __toESM(require("react"));
482
483
  var import_popover = require("@base-ui/react/popover");
483
484
 
484
485
  // src/lib/theme-provider.tsx
@@ -491,6 +492,7 @@ function useThemeVars() {
491
492
 
492
493
  // src/components/ui/popover.tsx
493
494
  var import_jsx_runtime5 = require("react/jsx-runtime");
495
+ var PopoverPortalContext = React4.createContext(void 0);
494
496
  function Popover(_a) {
495
497
  var props = __objRest(_a, []);
496
498
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
@@ -512,7 +514,8 @@ function PopoverContent(_a) {
512
514
  "style"
513
515
  ]);
514
516
  const themeVars = useThemeVars();
515
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
517
+ const portalContainer = React4.useContext(PopoverPortalContext);
518
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_popover.Popover.Portal, { container: portalContainer != null ? portalContainer : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
516
519
  import_popover.Popover.Positioner,
517
520
  {
518
521
  className: "z-[200]",
@@ -544,7 +547,7 @@ function DatePicker({
544
547
  className,
545
548
  calendarProps
546
549
  }) {
547
- const [open, setOpen] = React4.useState(false);
550
+ const [open, setOpen] = React5.useState(false);
548
551
  function handleDaySelect(day) {
549
552
  if (!day) {
550
553
  onChange == null ? void 0 : onChange(void 0);
@@ -841,11 +844,11 @@ function Label(_a) {
841
844
  }
842
845
 
843
846
  // src/components/ui/select.tsx
844
- var React5 = __toESM(require("react"));
847
+ var React6 = __toESM(require("react"));
845
848
  var import_lucide_react5 = require("lucide-react");
846
849
  var import_select = require("@base-ui/react/select");
847
850
  var import_jsx_runtime9 = require("react/jsx-runtime");
848
- var SelectPortalContext = React5.createContext(
851
+ var SelectPortalContext = React6.createContext(
849
852
  void 0
850
853
  );
851
854
  function Select(_a) {
@@ -894,7 +897,7 @@ function SelectContent(_a) {
894
897
  "style"
895
898
  ]);
896
899
  const themeVars = useThemeVars();
897
- const portalContainer = React5.useContext(SelectPortalContext);
900
+ const portalContainer = React6.useContext(SelectPortalContext);
898
901
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_select.Select.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
899
902
  import_select.Select.Positioner,
900
903
  {
@@ -1377,7 +1380,8 @@ function AppointmentAvailabilitySettings({
1377
1380
  blockedDates: blockedDatesProp,
1378
1381
  publicHolidays: publicHolidaysProp,
1379
1382
  onSave,
1380
- onBlockedDatesChange
1383
+ onBlockedDatesChange,
1384
+ onPrefsChange
1381
1385
  }) {
1382
1386
  var _a, _b, _c, _d, _e;
1383
1387
  const [schedule, setSchedule] = import_react4.default.useState(initialSchedule);
@@ -1434,6 +1438,7 @@ function AppointmentAvailabilitySettings({
1434
1438
  );
1435
1439
  const saveGuard = import_react4.default.useRef(false);
1436
1440
  const timeOffGuard = import_react4.default.useRef(false);
1441
+ const prefsChangeGuard = import_react4.default.useRef(false);
1437
1442
  import_react4.default.useEffect(() => {
1438
1443
  if (!saveGuard.current) {
1439
1444
  saveGuard.current = true;
@@ -1441,6 +1446,13 @@ function AppointmentAvailabilitySettings({
1441
1446
  }
1442
1447
  onSave == null ? void 0 : onSave(schedule, currentPrefs);
1443
1448
  }, [schedule, currentPrefs]);
1449
+ import_react4.default.useEffect(() => {
1450
+ if (!prefsChangeGuard.current) {
1451
+ prefsChangeGuard.current = true;
1452
+ return;
1453
+ }
1454
+ onPrefsChange == null ? void 0 : onPrefsChange(currentPrefs);
1455
+ }, [currentPrefs]);
1444
1456
  import_react4.default.useEffect(() => {
1445
1457
  if (!timeOffGuard.current) {
1446
1458
  timeOffGuard.current = true;
@@ -1551,7 +1563,7 @@ function AppointmentAvailabilitySettings({
1551
1563
  value: meetingDuration,
1552
1564
  onValueChange: (v) => setMeetingDuration(v),
1553
1565
  children: [
1554
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_DURATION_OPTIONS, v) }) }),
1566
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_DURATION_OPTIONS, v) }) }),
1555
1567
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectContent, { children: MEETING_DURATION_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
1556
1568
  ]
1557
1569
  }
@@ -1569,7 +1581,7 @@ function AppointmentAvailabilitySettings({
1569
1581
  value: schedulingBuffer,
1570
1582
  onValueChange: (v) => setSchedulingBuffer(v),
1571
1583
  children: [
1572
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(SCHEDULING_BUFFER_OPTIONS, v) }) }),
1584
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(SCHEDULING_BUFFER_OPTIONS, v) }) }),
1573
1585
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectContent, { children: SCHEDULING_BUFFER_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
1574
1586
  ]
1575
1587
  }
@@ -1587,7 +1599,7 @@ function AppointmentAvailabilitySettings({
1587
1599
  value: maxSlotsPerDay,
1588
1600
  onValueChange: (v) => setMaxSlotsPerDay(v),
1589
1601
  children: [
1590
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(MAX_SLOTS_OPTIONS, v) }) }),
1602
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(MAX_SLOTS_OPTIONS, v) }) }),
1591
1603
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectContent, { children: MAX_SLOTS_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
1592
1604
  ]
1593
1605
  }
@@ -1605,7 +1617,7 @@ function AppointmentAvailabilitySettings({
1605
1617
  value: timezone,
1606
1618
  onValueChange: (v) => setTimezone(v),
1607
1619
  children: [
1608
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-56", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(TIMEZONE_OPTIONS, v) }) }),
1620
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(TIMEZONE_OPTIONS, v) }) }),
1609
1621
  /* @__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)) })
1610
1622
  ]
1611
1623
  }
@@ -1625,7 +1637,7 @@ function AppointmentAvailabilitySettings({
1625
1637
  v
1626
1638
  ),
1627
1639
  children: [
1628
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_PLATFORM_OPTIONS, v) }) }),
1640
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_PLATFORM_OPTIONS, v) }) }),
1629
1641
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectContent, { children: MEETING_PLATFORM_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
1630
1642
  ]
1631
1643
  }
@@ -2,14 +2,14 @@ import {
2
2
  AppointmentAvailabilitySettings,
3
3
  MEETING_PLATFORM_OPTIONS,
4
4
  TIMEZONE_OPTIONS
5
- } from "../../chunk-AAZSLTER.mjs";
5
+ } from "../../chunk-XGRSPFFC.mjs";
6
6
  import "../../chunk-PNSYFE3K.mjs";
7
7
  import "../../chunk-WE4YKBDE.mjs";
8
8
  import "../../chunk-K6VCC2MK.mjs";
9
9
  import "../../chunk-T5FRVEJQ.mjs";
10
10
  import "../../chunk-2GIYVERS.mjs";
11
- import "../../chunk-TRM3KIHT.mjs";
12
- import "../../chunk-HB5BKRMH.mjs";
11
+ import "../../chunk-ICCPK3J2.mjs";
12
+ import "../../chunk-F3CU6KEI.mjs";
13
13
  import "../../chunk-FBNEIYSE.mjs";
14
14
  import "../../chunk-LHWJQNLG.mjs";
15
15
  import "../../chunk-LSRGA5BI.mjs";
@@ -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";