@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
package/dist/index.js CHANGED
@@ -353,6 +353,7 @@ __export(index_exports, {
353
353
  PopoverContent: () => PopoverContent,
354
354
  PopoverDescription: () => PopoverDescription,
355
355
  PopoverHeader: () => PopoverHeader,
356
+ PopoverPortalProvider: () => PopoverPortalProvider,
356
357
  PopoverTitle: () => PopoverTitle,
357
358
  PopoverTrigger: () => PopoverTrigger,
358
359
  Progress: () => Progress,
@@ -3074,8 +3075,16 @@ function DropdownMenuSubContent(_a) {
3074
3075
  }
3075
3076
 
3076
3077
  // src/components/ui/popover.tsx
3078
+ var React7 = __toESM(require("react"));
3077
3079
  var import_popover = require("@base-ui/react/popover");
3078
3080
  var import_jsx_runtime27 = require("react/jsx-runtime");
3081
+ var PopoverPortalContext = React7.createContext(void 0);
3082
+ function PopoverPortalProvider({
3083
+ container,
3084
+ children
3085
+ }) {
3086
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(PopoverPortalContext.Provider, { value: container, children });
3087
+ }
3079
3088
  function Popover(_a) {
3080
3089
  var props = __objRest(_a, []);
3081
3090
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
@@ -3097,7 +3106,8 @@ function PopoverContent(_a) {
3097
3106
  "style"
3098
3107
  ]);
3099
3108
  const themeVars = useThemeVars();
3100
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3109
+ const portalContainer = React7.useContext(PopoverPortalContext);
3110
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_popover.Popover.Portal, { container: portalContainer != null ? portalContainer : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3101
3111
  import_popover.Popover.Positioner,
3102
3112
  {
3103
3113
  className: "z-[200]",
@@ -4696,7 +4706,7 @@ var import_react11 = __toESM(require("react"));
4696
4706
  var import_lucide_react17 = require("lucide-react");
4697
4707
 
4698
4708
  // src/components/ui/calendar.tsx
4699
- var React10 = __toESM(require("react"));
4709
+ var React11 = __toESM(require("react"));
4700
4710
  var import_lucide_react16 = require("lucide-react");
4701
4711
  var import_react_day_picker = require("react-day-picker");
4702
4712
 
@@ -4915,8 +4925,8 @@ function CalendarDayButton(_a) {
4915
4925
  "modifiers"
4916
4926
  ]);
4917
4927
  const defaultClassNames = (0, import_react_day_picker.getDefaultClassNames)();
4918
- const ref = React10.useRef(null);
4919
- React10.useEffect(() => {
4928
+ const ref = React11.useRef(null);
4929
+ React11.useEffect(() => {
4920
4930
  var _a2;
4921
4931
  if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
4922
4932
  }, [modifiers.focused]);
@@ -5433,7 +5443,7 @@ function AppointmentUpcomingCard({
5433
5443
  }
5434
5444
 
5435
5445
  // src/components/ui/add-column-modal.tsx
5436
- var React12 = __toESM(require("react"));
5446
+ var React13 = __toESM(require("react"));
5437
5447
  var import_lucide_react18 = require("lucide-react");
5438
5448
  var import_jsx_runtime35 = require("react/jsx-runtime");
5439
5449
  var MAX_TASKS = 20;
@@ -5447,16 +5457,16 @@ function AddColumnModal({
5447
5457
  }) {
5448
5458
  var _a, _b;
5449
5459
  const isEdit = !!(editData == null ? void 0 : editData.id);
5450
- const nextId = React12.useRef(0);
5451
- const [name, setName] = React12.useState((_a = editData == null ? void 0 : editData.name) != null ? _a : "");
5452
- const [warningDays, setWarningDays] = React12.useState(
5460
+ const nextId = React13.useRef(0);
5461
+ const [name, setName] = React13.useState((_a = editData == null ? void 0 : editData.name) != null ? _a : "");
5462
+ const [warningDays, setWarningDays] = React13.useState(
5453
5463
  (editData == null ? void 0 : editData.warningDays) != null ? String(editData.warningDays) : ""
5454
5464
  );
5455
- const [priorityDays, setPriorityDays] = React12.useState(
5465
+ const [priorityDays, setPriorityDays] = React13.useState(
5456
5466
  (editData == null ? void 0 : editData.priorityDays) != null ? String(editData.priorityDays) : ""
5457
5467
  );
5458
- const [tasks, setTasks] = React12.useState((_b = editData == null ? void 0 : editData.tasks) != null ? _b : []);
5459
- React12.useEffect(() => {
5468
+ const [tasks, setTasks] = React13.useState((_b = editData == null ? void 0 : editData.tasks) != null ? _b : []);
5469
+ React13.useEffect(() => {
5460
5470
  var _a2, _b2;
5461
5471
  if (open) {
5462
5472
  setName((_a2 = editData == null ? void 0 : editData.name) != null ? _a2 : "");
@@ -5713,7 +5723,7 @@ function showAgentEvaluationToast(data) {
5713
5723
  }
5714
5724
 
5715
5725
  // src/components/ui/add-lead-modal.tsx
5716
- var React13 = __toESM(require("react"));
5726
+ var React14 = __toESM(require("react"));
5717
5727
  var import_lucide_react22 = require("lucide-react");
5718
5728
 
5719
5729
  // src/components/ui/spinner.tsx
@@ -6015,8 +6025,8 @@ function AddLeadModal({
6015
6025
  onAdd,
6016
6026
  className
6017
6027
  }) {
6018
- const [selectedIds, setSelectedIds] = React13.useState(/* @__PURE__ */ new Set());
6019
- React13.useEffect(() => {
6028
+ const [selectedIds, setSelectedIds] = React14.useState(/* @__PURE__ */ new Set());
6029
+ React14.useEffect(() => {
6020
6030
  if (open) setSelectedIds(/* @__PURE__ */ new Set());
6021
6031
  }, [open]);
6022
6032
  const allPageSelected = contacts.length > 0 && contacts.every((c) => selectedIds.has(c.id));
@@ -6161,7 +6171,7 @@ function AddLeadModal({
6161
6171
  }
6162
6172
 
6163
6173
  // src/components/ui/ai-assistant-drawer.tsx
6164
- var React14 = __toESM(require("react"));
6174
+ var React15 = __toESM(require("react"));
6165
6175
  var import_lucide_react24 = require("lucide-react");
6166
6176
 
6167
6177
  // src/components/ui/sheet.tsx
@@ -6391,26 +6401,26 @@ function AiAssistantDrawer({
6391
6401
  className
6392
6402
  }) {
6393
6403
  var _a;
6394
- const [inputValue, setInputValue] = React14.useState("");
6395
- const messagesEndRef = React14.useRef(null);
6396
- const textareaRef = React14.useRef(null);
6404
+ const [inputValue, setInputValue] = React15.useState("");
6405
+ const messagesEndRef = React15.useRef(null);
6406
+ const textareaRef = React15.useRef(null);
6397
6407
  const suggestions = taskSuggestions != null ? taskSuggestions : DEFAULT_SUGGESTIONS;
6398
6408
  const hasMessages = messages.length > 0;
6399
6409
  const canSend = inputValue.trim().length > 0 && !isStreaming && !isLoading;
6400
- React14.useEffect(() => {
6410
+ React15.useEffect(() => {
6401
6411
  if (!messagesEndRef.current) return;
6402
6412
  messagesEndRef.current.scrollIntoView({
6403
6413
  behavior: "smooth",
6404
6414
  block: "nearest"
6405
6415
  });
6406
6416
  }, [messages.length]);
6407
- React14.useEffect(() => {
6417
+ React15.useEffect(() => {
6408
6418
  const el = textareaRef.current;
6409
6419
  if (!el) return;
6410
6420
  el.style.height = "auto";
6411
6421
  el.style.height = `${Math.min(el.scrollHeight, 120)}px`;
6412
6422
  }, [inputValue]);
6413
- const handleSend = React14.useCallback(() => {
6423
+ const handleSend = React15.useCallback(() => {
6414
6424
  const text = inputValue.trim();
6415
6425
  if (!text || !canSend) return;
6416
6426
  onSendMessage == null ? void 0 : onSendMessage(text);
@@ -7844,7 +7854,7 @@ function AlertDialogCancel(_a) {
7844
7854
  var import_react14 = __toESM(require("react"));
7845
7855
 
7846
7856
  // src/components/ui/date-picker.tsx
7847
- var React16 = __toESM(require("react"));
7857
+ var React17 = __toESM(require("react"));
7848
7858
  var import_date_fns2 = require("date-fns");
7849
7859
  var import_lucide_react27 = require("lucide-react");
7850
7860
  var import_jsx_runtime47 = require("react/jsx-runtime");
@@ -7857,7 +7867,7 @@ function DatePicker({
7857
7867
  className,
7858
7868
  calendarProps
7859
7869
  }) {
7860
- const [open, setOpen] = React16.useState(false);
7870
+ const [open, setOpen] = React17.useState(false);
7861
7871
  function handleDaySelect(day) {
7862
7872
  if (!day) {
7863
7873
  onChange == null ? void 0 : onChange(void 0);
@@ -8158,7 +8168,8 @@ function AppointmentAvailabilitySettings({
8158
8168
  blockedDates: blockedDatesProp,
8159
8169
  publicHolidays: publicHolidaysProp,
8160
8170
  onSave,
8161
- onBlockedDatesChange
8171
+ onBlockedDatesChange,
8172
+ onPrefsChange
8162
8173
  }) {
8163
8174
  var _a, _b, _c, _d, _e;
8164
8175
  const [schedule, setSchedule] = import_react14.default.useState(initialSchedule);
@@ -8215,6 +8226,7 @@ function AppointmentAvailabilitySettings({
8215
8226
  );
8216
8227
  const saveGuard = import_react14.default.useRef(false);
8217
8228
  const timeOffGuard = import_react14.default.useRef(false);
8229
+ const prefsChangeGuard = import_react14.default.useRef(false);
8218
8230
  import_react14.default.useEffect(() => {
8219
8231
  if (!saveGuard.current) {
8220
8232
  saveGuard.current = true;
@@ -8222,6 +8234,13 @@ function AppointmentAvailabilitySettings({
8222
8234
  }
8223
8235
  onSave == null ? void 0 : onSave(schedule, currentPrefs);
8224
8236
  }, [schedule, currentPrefs]);
8237
+ import_react14.default.useEffect(() => {
8238
+ if (!prefsChangeGuard.current) {
8239
+ prefsChangeGuard.current = true;
8240
+ return;
8241
+ }
8242
+ onPrefsChange == null ? void 0 : onPrefsChange(currentPrefs);
8243
+ }, [currentPrefs]);
8225
8244
  import_react14.default.useEffect(() => {
8226
8245
  if (!timeOffGuard.current) {
8227
8246
  timeOffGuard.current = true;
@@ -8332,7 +8351,7 @@ function AppointmentAvailabilitySettings({
8332
8351
  value: meetingDuration,
8333
8352
  onValueChange: (v) => setMeetingDuration(v),
8334
8353
  children: [
8335
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_DURATION_OPTIONS, v) }) }),
8354
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_DURATION_OPTIONS, v) }) }),
8336
8355
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectContent, { children: MEETING_DURATION_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
8337
8356
  ]
8338
8357
  }
@@ -8350,7 +8369,7 @@ function AppointmentAvailabilitySettings({
8350
8369
  value: schedulingBuffer,
8351
8370
  onValueChange: (v) => setSchedulingBuffer(v),
8352
8371
  children: [
8353
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(SCHEDULING_BUFFER_OPTIONS, v) }) }),
8372
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(SCHEDULING_BUFFER_OPTIONS, v) }) }),
8354
8373
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectContent, { children: SCHEDULING_BUFFER_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
8355
8374
  ]
8356
8375
  }
@@ -8368,7 +8387,7 @@ function AppointmentAvailabilitySettings({
8368
8387
  value: maxSlotsPerDay,
8369
8388
  onValueChange: (v) => setMaxSlotsPerDay(v),
8370
8389
  children: [
8371
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(MAX_SLOTS_OPTIONS, v) }) }),
8390
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(MAX_SLOTS_OPTIONS, v) }) }),
8372
8391
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectContent, { children: MAX_SLOTS_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
8373
8392
  ]
8374
8393
  }
@@ -8386,7 +8405,7 @@ function AppointmentAvailabilitySettings({
8386
8405
  value: timezone,
8387
8406
  onValueChange: (v) => setTimezone(v),
8388
8407
  children: [
8389
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-56", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(TIMEZONE_OPTIONS, v) }) }),
8408
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(TIMEZONE_OPTIONS, v) }) }),
8390
8409
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectContent, { children: TIMEZONE_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
8391
8410
  ]
8392
8411
  }
@@ -8406,7 +8425,7 @@ function AppointmentAvailabilitySettings({
8406
8425
  v
8407
8426
  ),
8408
8427
  children: [
8409
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_PLATFORM_OPTIONS, v) }) }),
8428
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, { children: (v) => selectLabel(MEETING_PLATFORM_OPTIONS, v) }) }),
8410
8429
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectContent, { children: MEETING_PLATFORM_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
8411
8430
  ]
8412
8431
  }
@@ -8721,14 +8740,14 @@ function AppointmentRescheduleDialog({
8721
8740
  var import_react16 = __toESM(require("react"));
8722
8741
 
8723
8742
  // src/components/ui/form-primitives.tsx
8724
- var React20 = __toESM(require("react"));
8743
+ var React21 = __toESM(require("react"));
8725
8744
  var import_lucide_react30 = require("lucide-react");
8726
8745
 
8727
8746
  // src/components/ui/slider.tsx
8728
- var React19 = __toESM(require("react"));
8747
+ var React20 = __toESM(require("react"));
8729
8748
  var import_slider = require("@base-ui/react/slider");
8730
8749
  var import_jsx_runtime50 = require("react/jsx-runtime");
8731
- var Slider = React19.forwardRef(
8750
+ var Slider = React20.forwardRef(
8732
8751
  ({
8733
8752
  className,
8734
8753
  value,
@@ -8816,13 +8835,13 @@ function CurrencyInputWithSlider({
8816
8835
  onValueChange,
8817
8836
  className
8818
8837
  }) {
8819
- const [internalValue, setInternalValue] = React20.useState(defaultValue);
8838
+ const [internalValue, setInternalValue] = React21.useState(defaultValue);
8820
8839
  const numericValue = controlledValue !== void 0 ? controlledValue : internalValue;
8821
- const [inputText, setInputText] = React20.useState(
8840
+ const [inputText, setInputText] = React21.useState(
8822
8841
  formatNumberToCurrency(numericValue)
8823
8842
  );
8824
- const [isFocused, setIsFocused] = React20.useState(false);
8825
- React20.useEffect(() => {
8843
+ const [isFocused, setIsFocused] = React21.useState(false);
8844
+ React21.useEffect(() => {
8826
8845
  if (!isFocused) {
8827
8846
  setInputText(formatNumberToCurrency(numericValue));
8828
8847
  }
@@ -8892,7 +8911,7 @@ function ConcernScale({
8892
8911
  className
8893
8912
  }) {
8894
8913
  var _a;
8895
- const [internalValue, setInternalValue] = React20.useState(defaultValue);
8914
+ const [internalValue, setInternalValue] = React21.useState(defaultValue);
8896
8915
  const selected = controlledValue !== void 0 ? controlledValue : internalValue;
8897
8916
  const handleValueChange = (val) => {
8898
8917
  const n = val ? Number(val) : 0;
@@ -8978,13 +8997,13 @@ function AddressAutocomplete({
8978
8997
  onSelect,
8979
8998
  className
8980
8999
  }) {
8981
- const [internalValue, setInternalValue] = React20.useState("");
9000
+ const [internalValue, setInternalValue] = React21.useState("");
8982
9001
  const inputValue = controlledValue !== void 0 ? controlledValue : internalValue;
8983
- const [open, setOpen] = React20.useState(false);
8984
- const [activeIndex, setActiveIndex] = React20.useState(-1);
8985
- const containerRef = React20.useRef(null);
8986
- const listRef = React20.useRef(null);
8987
- const filtered = React20.useMemo(() => {
9002
+ const [open, setOpen] = React21.useState(false);
9003
+ const [activeIndex, setActiveIndex] = React21.useState(-1);
9004
+ const containerRef = React21.useRef(null);
9005
+ const listRef = React21.useRef(null);
9006
+ const filtered = React21.useMemo(() => {
8988
9007
  if (!inputValue.trim()) return suggestions.slice(0, 5);
8989
9008
  const q = inputValue.toLowerCase();
8990
9009
  return suggestions.filter((s) => s.label.toLowerCase().includes(q)).slice(0, 5);
@@ -9014,7 +9033,7 @@ function AddressAutocomplete({
9014
9033
  setOpen(false);
9015
9034
  }
9016
9035
  };
9017
- React20.useEffect(() => {
9036
+ React21.useEffect(() => {
9018
9037
  const handler = (e) => {
9019
9038
  if (containerRef.current && !containerRef.current.contains(e.target)) {
9020
9039
  setOpen(false);
@@ -9091,7 +9110,7 @@ function OwnershipSplit({
9091
9110
  onOwnersChange,
9092
9111
  className
9093
9112
  }) {
9094
- const [internalOwners, setInternalOwners] = React20.useState(DEFAULT_OWNERS);
9113
+ const [internalOwners, setInternalOwners] = React21.useState(DEFAULT_OWNERS);
9095
9114
  const owners = controlledOwners !== void 0 ? controlledOwners : internalOwners;
9096
9115
  const setOwners = (updated) => {
9097
9116
  if (controlledOwners === void 0) setInternalOwners(updated);
@@ -9327,31 +9346,40 @@ function ClientSearch({
9327
9346
  ] }) })
9328
9347
  ] });
9329
9348
  }
9349
+ var FMT_CALL = {
9350
+ value: "call",
9351
+ label: "Call",
9352
+ icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.Phone, { className: "h-4 w-4" })
9353
+ };
9354
+ var FMT_ONLINE = {
9355
+ value: "online",
9356
+ label: "Online Meeting",
9357
+ icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.Video, { className: "h-4 w-4" })
9358
+ };
9359
+ var FMT_GOOGLE_MEET = {
9360
+ value: "google-meet",
9361
+ label: "Google Meet",
9362
+ icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.Video, { className: "h-4 w-4" })
9363
+ };
9364
+ var FMT_MS_TEAMS = {
9365
+ value: "microsoft-teams",
9366
+ label: "MS Teams",
9367
+ icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.Users, { className: "h-4 w-4" })
9368
+ };
9369
+ var FMT_OFFLINE = {
9370
+ value: "offline",
9371
+ label: "Offline Meeting",
9372
+ icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.MapPin, { className: "h-4 w-4" })
9373
+ };
9330
9374
  function getFormatOptions(platform) {
9331
- const call = {
9332
- value: "call",
9333
- label: "Call",
9334
- icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.Phone, { className: "h-4 w-4" })
9335
- };
9336
- const googleMeet = {
9337
- value: "google-meet",
9338
- label: "Google Meet",
9339
- icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.Video, { className: "h-4 w-4" })
9340
- };
9341
- const msTeams = {
9342
- value: "microsoft-teams",
9343
- label: "MS Teams",
9344
- icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.Users, { className: "h-4 w-4" })
9345
- };
9346
- const offline = {
9347
- value: "offline",
9348
- label: "Offline Meeting",
9349
- icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react32.MapPin, { className: "h-4 w-4" })
9350
- };
9351
- if (platform === "google-meet") return [call, googleMeet, offline];
9352
- if (platform === "microsoft-teams") return [call, msTeams, offline];
9353
- if (platform === "any") return [call, googleMeet, msTeams, offline];
9354
- return [call, offline];
9375
+ if (platform === "online") return [FMT_CALL, FMT_ONLINE, FMT_OFFLINE];
9376
+ if (platform === "google-meet")
9377
+ return [FMT_CALL, FMT_GOOGLE_MEET, FMT_OFFLINE];
9378
+ if (platform === "microsoft-teams")
9379
+ return [FMT_CALL, FMT_MS_TEAMS, FMT_OFFLINE];
9380
+ if (platform === "any")
9381
+ return [FMT_CALL, FMT_GOOGLE_MEET, FMT_MS_TEAMS, FMT_OFFLINE];
9382
+ return [FMT_CALL, FMT_OFFLINE];
9355
9383
  }
9356
9384
  function MeetingFormatSection({
9357
9385
  format: format5,
@@ -10258,11 +10286,13 @@ var MEETING_FORMAT_META = {
10258
10286
  icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react34.Users, { className: ICON_CLASS }),
10259
10287
  label: "Microsoft Teams"
10260
10288
  },
10289
+ online: { icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react34.Video, { className: ICON_CLASS }), label: "Online Meeting" },
10261
10290
  offline: { icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react34.MapPin, { className: ICON_CLASS }), label: "In Person" }
10262
10291
  };
10263
10292
  var ONLINE_FORMATS = /* @__PURE__ */ new Set([
10264
10293
  "google-meet",
10265
- "microsoft-teams"
10294
+ "microsoft-teams",
10295
+ "online"
10266
10296
  ]);
10267
10297
  function AppointmentDetailSheet({
10268
10298
  appointment,
@@ -10489,94 +10519,151 @@ function AppointmentDetailSheet({
10489
10519
  // src/components/ui/appointment-gmail-connect.tsx
10490
10520
  var import_lucide_react35 = require("lucide-react");
10491
10521
  var import_jsx_runtime56 = require("react/jsx-runtime");
10522
+ function GmailIcon({ className }) {
10523
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("svg", { viewBox: "0 0 24 24", className, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10524
+ "path",
10525
+ {
10526
+ fill: "#EA4335",
10527
+ 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"
10528
+ }
10529
+ ) });
10530
+ }
10531
+ function OutlookIcon({ className }) {
10532
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("svg", { viewBox: "0 0 24 24", className, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10533
+ "path",
10534
+ {
10535
+ fill: "#0078D4",
10536
+ 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"
10537
+ }
10538
+ ) });
10539
+ }
10540
+ var PROVIDER_META = {
10541
+ gmail: { label: "Gmail", iconBg: "bg-[#EA4335]/10", Icon: GmailIcon },
10542
+ outlook: { label: "Outlook", iconBg: "bg-[#0078D4]/10", Icon: OutlookIcon }
10543
+ };
10492
10544
  var PERMISSIONS = [
10493
10545
  "Read your calendar availability",
10494
10546
  "Send appointment confirmation emails",
10495
10547
  "Create calendar events on your behalf"
10496
10548
  ];
10497
10549
  function AppointmentGmailConnect({
10550
+ provider = "gmail",
10498
10551
  connection,
10499
10552
  calendarLink,
10553
+ highlighted = false,
10500
10554
  onCopyLink,
10501
10555
  onGoToIntegrations
10502
10556
  }) {
10557
+ const { label, iconBg, Icon } = PROVIDER_META[provider];
10503
10558
  if (connection.connected) {
10504
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col border border-border bg-card", children: [
10505
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-3 px-5 py-4", children: [
10506
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center bg-primary/10", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Mail, { className: "h-5 w-5 text-primary" }) }),
10507
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex-1 min-w-0", children: [
10508
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-base font-semibold", children: "Gmail Connected" }),
10509
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "truncate text-sm text-muted-foreground", children: connection.email })
10510
- ] }),
10511
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Badge, { variant: "success", children: [
10512
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Check, { size: 10 }),
10513
- "Active"
10514
- ] }),
10515
- connection.connectedAt && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { className: "shrink-0 text-xs text-muted-foreground", children: [
10516
- "Connected since ",
10517
- connection.connectedAt
10518
- ] }),
10519
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10520
- Button,
10521
- {
10522
- size: "sm",
10523
- variant: "ghost",
10524
- className: "shrink-0 gap-1.5 text-muted-foreground",
10525
- onClick: onGoToIntegrations,
10526
- children: [
10527
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Settings, { className: "h-3.5 w-3.5" }),
10528
- "Manage"
10529
- ]
10530
- }
10531
- )
10532
- ] }),
10533
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Separator, {}),
10534
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col gap-2 px-5 py-4", children: [
10535
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm font-medium text-muted-foreground", children: "Permissions granted" }),
10536
- PERMISSIONS.map((perm) => /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
10537
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Check, { className: "h-3.5 w-3.5 shrink-0 text-success" }),
10538
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm text-muted-foreground", children: perm })
10539
- ] }, perm))
10540
- ] }),
10541
- calendarLink && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
10542
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Separator, {}),
10543
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col gap-2.5 px-5 py-4", children: [
10544
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
10545
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Link2, { className: "h-4 w-4 text-muted-foreground" }),
10546
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm font-semibold", children: "Calendar Appointment Link" })
10547
- ] }),
10548
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm text-muted-foreground", children: "Share with clients so they can self-book." }),
10549
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "relative", children: [
10559
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10560
+ "div",
10561
+ {
10562
+ className: cn(
10563
+ "flex flex-col border bg-card",
10564
+ highlighted ? "border-primary" : "border-border"
10565
+ ),
10566
+ children: [
10567
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-start gap-3 px-5 py-4", children: [
10550
10568
  /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10551
- Input,
10569
+ "div",
10552
10570
  {
10553
- id: "calendar-link",
10554
- readOnly: true,
10555
- value: calendarLink,
10556
- className: "cursor-default select-all pr-10 text-muted-foreground"
10571
+ className: cn(
10572
+ "flex h-10 w-10 shrink-0 items-center justify-center",
10573
+ iconBg
10574
+ ),
10575
+ children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { className: "h-5 w-5" })
10557
10576
  }
10558
10577
  ),
10559
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10560
- Button,
10561
- {
10562
- type: "button",
10563
- variant: "ghost",
10564
- size: "icon",
10565
- onClick: onCopyLink,
10566
- className: "absolute right-1 top-1/2 h-8 w-8 -translate-y-1/2",
10567
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Copy, { className: "h-4 w-4" })
10568
- }
10569
- )
10578
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "min-w-0 flex-1", children: [
10579
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { className: "text-base font-semibold", children: [
10580
+ label,
10581
+ " Connected"
10582
+ ] }),
10583
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "truncate text-sm text-muted-foreground", children: connection.email })
10584
+ ] }),
10585
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex shrink-0 flex-col items-end gap-1.5", children: [
10586
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10587
+ Button,
10588
+ {
10589
+ size: "sm",
10590
+ variant: "ghost",
10591
+ className: "gap-1.5 text-muted-foreground",
10592
+ onClick: onGoToIntegrations,
10593
+ children: [
10594
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Settings, { className: "h-3.5 w-3.5" }),
10595
+ "Manage"
10596
+ ]
10597
+ }
10598
+ ),
10599
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
10600
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Badge, { variant: "success", children: [
10601
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Check, { size: 10 }),
10602
+ "Active"
10603
+ ] }),
10604
+ connection.connectedAt && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
10605
+ "Connected since ",
10606
+ connection.connectedAt
10607
+ ] })
10608
+ ] })
10609
+ ] })
10610
+ ] }),
10611
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Separator, {}),
10612
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col gap-2 px-5 py-4", children: [
10613
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm font-medium text-muted-foreground", children: "Permissions granted" }),
10614
+ PERMISSIONS.map((perm) => /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
10615
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Check, { className: "h-3.5 w-3.5 shrink-0 text-success" }),
10616
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm text-muted-foreground", children: perm })
10617
+ ] }, perm))
10618
+ ] }),
10619
+ calendarLink && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
10620
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Separator, {}),
10621
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col gap-2.5 px-5 py-4", children: [
10622
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
10623
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Link2, { className: "h-4 w-4 text-muted-foreground" }),
10624
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm font-semibold", children: "Calendar Appointment Link" })
10625
+ ] }),
10626
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm text-muted-foreground", children: "Share with clients so they can self-book." }),
10627
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "relative", children: [
10628
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10629
+ Input,
10630
+ {
10631
+ id: "calendar-link",
10632
+ readOnly: true,
10633
+ value: calendarLink,
10634
+ className: "cursor-default select-all pr-10 text-muted-foreground"
10635
+ }
10636
+ ),
10637
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10638
+ Button,
10639
+ {
10640
+ type: "button",
10641
+ variant: "ghost",
10642
+ size: "icon",
10643
+ onClick: onCopyLink,
10644
+ className: "absolute right-1 top-1/2 h-8 w-8 -translate-y-1/2",
10645
+ children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Copy, { className: "h-4 w-4" })
10646
+ }
10647
+ )
10648
+ ] })
10649
+ ] })
10570
10650
  ] })
10571
- ] })
10572
- ] })
10573
- ] });
10651
+ ]
10652
+ }
10653
+ );
10574
10654
  }
10575
10655
  return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col items-center gap-4 border border-border bg-card px-6 py-8 text-center", children: [
10576
10656
  /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex h-12 w-12 items-center justify-center bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react35.Mail, { className: "h-6 w-6 text-muted-foreground" }) }),
10577
10657
  /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
10578
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-base font-semibold", children: "Gmail not connected" }),
10579
- /* @__PURE__ */ (0, import_jsx_runtime56.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." })
10658
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { className: "text-base font-semibold", children: [
10659
+ label,
10660
+ " not connected"
10661
+ ] }),
10662
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { className: "max-w-xs text-sm text-muted-foreground", children: [
10663
+ "Connect your ",
10664
+ label,
10665
+ " account in Integrations to enable calendar booking and appointment confirmations."
10666
+ ] })
10580
10667
  ] }),
10581
10668
  /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex w-full max-w-xs flex-col gap-2 text-left", children: [
10582
10669
  /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm font-medium text-muted-foreground", children: "Once connected, WealthX will be able to:" }),
@@ -13755,7 +13842,7 @@ function Chip(_a) {
13755
13842
  }
13756
13843
 
13757
13844
  // src/components/ui/color-picker.tsx
13758
- var React32 = __toESM(require("react"));
13845
+ var React33 = __toESM(require("react"));
13759
13846
  var import_jsx_runtime75 = require("react/jsx-runtime");
13760
13847
  var COLOR_PICKER_PRESETS = [
13761
13848
  // Blues
@@ -13833,15 +13920,19 @@ function ColorPickerContent({
13833
13920
  onChange,
13834
13921
  presets = COLOR_PICKER_PRESETS
13835
13922
  }) {
13836
- const [hexInput, setHexInput] = React32.useState(value);
13837
- React32.useEffect(() => {
13838
- setHexInput(value);
13923
+ const [hexInput, setHexInput] = React33.useState(value);
13924
+ const hexInputRef = React33.useRef(hexInput);
13925
+ hexInputRef.current = hexInput;
13926
+ React33.useEffect(() => {
13927
+ if (value !== hexInputRef.current) {
13928
+ setHexInput(value);
13929
+ }
13839
13930
  }, [value]);
13840
13931
  function handleHexInputChange(e) {
13841
13932
  const raw = e.target.value;
13842
13933
  setHexInput(raw);
13843
13934
  const normalized = normalizeHex(raw);
13844
- if (isValidHex(normalized)) {
13935
+ if (/^#[0-9A-Fa-f]{6}$/.test(normalized)) {
13845
13936
  onChange(normalized);
13846
13937
  }
13847
13938
  }
@@ -13921,10 +14012,10 @@ function ColorPicker({
13921
14012
  className
13922
14013
  }) {
13923
14014
  const isControlled = controlledValue !== void 0;
13924
- const [internalValue, setInternalValue] = React32.useState(defaultValue);
14015
+ const [internalValue, setInternalValue] = React33.useState(defaultValue);
13925
14016
  const color = isControlled ? controlledValue : internalValue;
13926
- const [open, setOpen] = React32.useState(false);
13927
- React32.useEffect(() => {
14017
+ const [open, setOpen] = React33.useState(false);
14018
+ React33.useEffect(() => {
13928
14019
  if (disabled) setOpen(false);
13929
14020
  }, [disabled]);
13930
14021
  function handleChange(newColor) {
@@ -14331,7 +14422,7 @@ function SelectedFile({
14331
14422
  }
14332
14423
 
14333
14424
  // src/components/ui/create-contact-modal.tsx
14334
- var React33 = __toESM(require("react"));
14425
+ var React34 = __toESM(require("react"));
14335
14426
  var import_jsx_runtime79 = require("react/jsx-runtime");
14336
14427
  function Field2({
14337
14428
  id,
@@ -14363,8 +14454,8 @@ function CreateContactModal({
14363
14454
  className
14364
14455
  }) {
14365
14456
  var _a, _b;
14366
- const [form, setForm] = React33.useState(EMPTY_FORM);
14367
- React33.useEffect(() => {
14457
+ const [form, setForm] = React34.useState(EMPTY_FORM);
14458
+ React34.useEffect(() => {
14368
14459
  if (open) setForm(EMPTY_FORM);
14369
14460
  }, [open]);
14370
14461
  function set(field, value) {
@@ -14520,7 +14611,7 @@ function DeleteContactComponent({
14520
14611
  }
14521
14612
 
14522
14613
  // src/components/ui/review-alerts-dialog.tsx
14523
- var React34 = __toESM(require("react"));
14614
+ var React35 = __toESM(require("react"));
14524
14615
  var import_jsx_runtime81 = require("react/jsx-runtime");
14525
14616
  var SEVERITY_CONFIG = {
14526
14617
  NEED_ACTION: { dot: "bg-destructive", text: "text-destructive" },
@@ -14534,10 +14625,10 @@ function ReviewAlertsDialog({
14534
14625
  onSave,
14535
14626
  className
14536
14627
  }) {
14537
- const [markDone, setMarkDone] = React34.useState(false);
14538
- const [snooze, setSnooze] = React34.useState(false);
14628
+ const [markDone, setMarkDone] = React35.useState(false);
14629
+ const [snooze, setSnooze] = React35.useState(false);
14539
14630
  const activeAlert = alerts.find((a) => !a.dismissed && !a.snoozedUntil);
14540
- React34.useEffect(() => {
14631
+ React35.useEffect(() => {
14541
14632
  if (open) {
14542
14633
  setMarkDone(false);
14543
14634
  setSnooze(false);
@@ -14626,7 +14717,7 @@ function ReviewAlertsDialog({
14626
14717
  }
14627
14718
 
14628
14719
  // src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx
14629
- var React36 = __toESM(require("react"));
14720
+ var React37 = __toESM(require("react"));
14630
14721
  var import_lucide_react48 = require("lucide-react");
14631
14722
  var import_ui4 = require("@react-awesome-query-builder/ui");
14632
14723
 
@@ -14878,7 +14969,7 @@ function isTreeValid(tree) {
14878
14969
  }
14879
14970
 
14880
14971
  // src/components/ui/contact-alert-dialog/builder-ui.tsx
14881
- var React35 = __toESM(require("react"));
14972
+ var React36 = __toESM(require("react"));
14882
14973
  var import_lucide_react47 = require("lucide-react");
14883
14974
  var import_accordion2 = require("@base-ui/react/accordion");
14884
14975
  var import_ui3 = require("@react-awesome-query-builder/ui");
@@ -15370,11 +15461,11 @@ function CustomBuilderUI({
15370
15461
  const rootId = (_a = treeJson == null ? void 0 : treeJson.id) != null ? _a : "root";
15371
15462
  const conjunction = (_c = (_b = treeJson == null ? void 0 : treeJson.properties) == null ? void 0 : _b.conjunction) != null ? _c : "AND";
15372
15463
  const children = (_d = treeJson == null ? void 0 : treeJson.children1) != null ? _d : [];
15373
- const longestFieldLabel = React35.useMemo(
15464
+ const longestFieldLabel = React36.useMemo(
15374
15465
  () => longestOf(fields.map((f) => f.label)),
15375
15466
  [fields]
15376
15467
  );
15377
- const longestOperatorLabel = React35.useMemo(
15468
+ const longestOperatorLabel = React36.useMemo(
15378
15469
  () => longestOf(allOperatorLabels(fields)),
15379
15470
  [fields]
15380
15471
  );
@@ -15484,7 +15575,7 @@ function ContactAlertQueryBuilder({
15484
15575
  fields = ALERT_QUERY_FIELDS,
15485
15576
  className
15486
15577
  }) {
15487
- const defaultOpenItems = React36.useMemo(() => {
15578
+ const defaultOpenItems = React37.useMemo(() => {
15488
15579
  var _a;
15489
15580
  const json = import_ui4.Utils.getTree(value);
15490
15581
  return ((_a = json == null ? void 0 : json.children1) != null ? _a : []).map((c) => {
@@ -15492,7 +15583,7 @@ function ContactAlertQueryBuilder({
15492
15583
  return (_a2 = c.id) != null ? _a2 : "";
15493
15584
  }).filter(Boolean);
15494
15585
  }, []);
15495
- const renderBuilder = React36.useCallback(
15586
+ const renderBuilder = React37.useCallback(
15496
15587
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
15497
15588
  (props) => /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
15498
15589
  CustomBuilderUI,
@@ -15529,15 +15620,15 @@ function ContactAlertDialog({
15529
15620
  isLoading = false,
15530
15621
  className
15531
15622
  }) {
15532
- const [name, setName] = React36.useState(initialName);
15533
- const [severity, setSeverity] = React36.useState(initialSeverity);
15534
- const [tree, setTree] = React36.useState(
15623
+ const [name, setName] = React37.useState(initialName);
15624
+ const [severity, setSeverity] = React37.useState(initialSeverity);
15625
+ const [tree, setTree] = React37.useState(
15535
15626
  () => createAlertTree(initialQuery)
15536
15627
  );
15537
- const [shareAcrossCompany, setShareAcrossCompany] = React36.useState(
15628
+ const [shareAcrossCompany, setShareAcrossCompany] = React37.useState(
15538
15629
  initialShareAcrossCompany
15539
15630
  );
15540
- React36.useEffect(() => {
15631
+ React37.useEffect(() => {
15541
15632
  if (open) {
15542
15633
  setName(initialName);
15543
15634
  setSeverity(initialSeverity);
@@ -15545,7 +15636,7 @@ function ContactAlertDialog({
15545
15636
  setShareAcrossCompany(initialShareAcrossCompany);
15546
15637
  }
15547
15638
  }, [open]);
15548
- const hasValidRule = React36.useMemo(() => isTreeValid(tree), [tree]);
15639
+ const hasValidRule = React37.useMemo(() => isTreeValid(tree), [tree]);
15549
15640
  const canSave = name.trim().length > 0 && hasValidRule && !isLoading;
15550
15641
  function handleSave() {
15551
15642
  if (!canSave) return;
@@ -15645,7 +15736,7 @@ function ContactAlertDialog({
15645
15736
  }
15646
15737
 
15647
15738
  // src/components/ui/share-details-dialog.tsx
15648
- var React37 = __toESM(require("react"));
15739
+ var React38 = __toESM(require("react"));
15649
15740
  var import_lucide_react49 = require("lucide-react");
15650
15741
  var import_jsx_runtime85 = require("react/jsx-runtime");
15651
15742
  function Field3({
@@ -15671,7 +15762,7 @@ function ShareDetailsDialog({
15671
15762
  isSendingEmail = false,
15672
15763
  className
15673
15764
  }) {
15674
- const [copied, setCopied] = React37.useState(false);
15765
+ const [copied, setCopied] = React38.useState(false);
15675
15766
  function handleCopy() {
15676
15767
  navigator.clipboard.writeText(shareUrl).catch(() => {
15677
15768
  });
@@ -15731,9 +15822,9 @@ function EmailTemplateDialog({
15731
15822
  isSending = false,
15732
15823
  className
15733
15824
  }) {
15734
- const [subject, setSubject] = React37.useState(defaultSubject);
15735
- const [body, setBody] = React37.useState(defaultBody);
15736
- React37.useEffect(() => {
15825
+ const [subject, setSubject] = React38.useState(defaultSubject);
15826
+ const [body, setBody] = React38.useState(defaultBody);
15827
+ React38.useEffect(() => {
15737
15828
  if (open) {
15738
15829
  setSubject(defaultSubject);
15739
15830
  setBody(defaultBody);
@@ -15800,14 +15891,14 @@ function ShareContactDialog({
15800
15891
  isSending = false,
15801
15892
  className
15802
15893
  }) {
15803
- const [tab, setTab] = React37.useState("internal");
15804
- const [search, setSearch] = React37.useState("");
15805
- const [selectedId, setSelectedId] = React37.useState(null);
15806
- const [internalNotes, setInternalNotes] = React37.useState("");
15807
- const [firstName, setFirstName] = React37.useState("");
15808
- const [lastName, setLastName] = React37.useState("");
15809
- const [email, setEmail] = React37.useState("");
15810
- const [externalNotes, setExternalNotes] = React37.useState("");
15894
+ const [tab, setTab] = React38.useState("internal");
15895
+ const [search, setSearch] = React38.useState("");
15896
+ const [selectedId, setSelectedId] = React38.useState(null);
15897
+ const [internalNotes, setInternalNotes] = React38.useState("");
15898
+ const [firstName, setFirstName] = React38.useState("");
15899
+ const [lastName, setLastName] = React38.useState("");
15900
+ const [email, setEmail] = React38.useState("");
15901
+ const [externalNotes, setExternalNotes] = React38.useState("");
15811
15902
  function reset() {
15812
15903
  setTab("internal");
15813
15904
  setSearch("");
@@ -15983,7 +16074,7 @@ function ShareContactDialog({
15983
16074
  }
15984
16075
 
15985
16076
  // src/components/ui/file-preview-dialog.tsx
15986
- var React38 = __toESM(require("react"));
16077
+ var React39 = __toESM(require("react"));
15987
16078
  var import_lucide_react50 = require("lucide-react");
15988
16079
 
15989
16080
  // src/components/ui/progress.tsx
@@ -16101,8 +16192,8 @@ function FilePreviewDialog({
16101
16192
  staffSelector,
16102
16193
  className
16103
16194
  }) {
16104
- const [page, setPage] = React38.useState(0);
16105
- React38.useEffect(() => {
16195
+ const [page, setPage] = React39.useState(0);
16196
+ React39.useEffect(() => {
16106
16197
  setPage(0);
16107
16198
  }, [rows.length]);
16108
16199
  const totalPages = Math.ceil(rows.length / pageSize);
@@ -16267,7 +16358,7 @@ function FilePreviewDialog({
16267
16358
  }
16268
16359
 
16269
16360
  // src/components/ui/data-table.tsx
16270
- var React39 = __toESM(require("react"));
16361
+ var React40 = __toESM(require("react"));
16271
16362
  var import_react_table = require("@tanstack/react-table");
16272
16363
  var import_lucide_react51 = require("lucide-react");
16273
16364
  var import_jsx_runtime88 = require("react/jsx-runtime");
@@ -16506,20 +16597,20 @@ function DataTable({
16506
16597
  onColumnFiltersChange: onColumnFiltersChangeProp
16507
16598
  }) {
16508
16599
  var _a;
16509
- const [internalSorting, setInternalSorting] = React39.useState(
16600
+ const [internalSorting, setInternalSorting] = React40.useState(
16510
16601
  []
16511
16602
  );
16512
- const [internalColumnFilters, setInternalColumnFilters] = React39.useState([]);
16513
- const [internalPagination, setInternalPagination] = React39.useState({
16603
+ const [internalColumnFilters, setInternalColumnFilters] = React40.useState([]);
16604
+ const [internalPagination, setInternalPagination] = React40.useState({
16514
16605
  pageIndex: 0,
16515
16606
  pageSize: (_a = pageSizeOptions[0]) != null ? _a : 10
16516
16607
  });
16517
- const [columnVisibility, setColumnVisibility] = React39.useState({});
16518
- const [rowSelection, setRowSelection] = React39.useState({});
16608
+ const [columnVisibility, setColumnVisibility] = React40.useState({});
16609
+ const [rowSelection, setRowSelection] = React40.useState({});
16519
16610
  const sorting = controlledSorting != null ? controlledSorting : internalSorting;
16520
16611
  const columnFilters = controlledColumnFilters != null ? controlledColumnFilters : internalColumnFilters;
16521
16612
  const pagination = controlledPagination != null ? controlledPagination : internalPagination;
16522
- const resolvedColumns = React39.useMemo(() => {
16613
+ const resolvedColumns = React40.useMemo(() => {
16523
16614
  if (!enableRowSelection) return userColumns;
16524
16615
  return [getSelectionColumn(), ...userColumns];
16525
16616
  }, [userColumns, enableRowSelection]);
@@ -16609,7 +16700,7 @@ function DataTable({
16609
16700
  }
16610
16701
 
16611
16702
  // src/components/ui/applicant-document-checklist.tsx
16612
- var React40 = __toESM(require("react"));
16703
+ var React41 = __toESM(require("react"));
16613
16704
  var import_lucide_react52 = require("lucide-react");
16614
16705
  var import_jsx_runtime89 = require("react/jsx-runtime");
16615
16706
  function StatusIcon({ status }) {
@@ -16625,14 +16716,14 @@ function ApplicantDocumentChecklist({
16625
16716
  onRemove,
16626
16717
  className
16627
16718
  }) {
16628
- const inputRefs = React40.useRef({});
16719
+ const inputRefs = React41.useRef({});
16629
16720
  function handleFileChange(itemId, e) {
16630
16721
  var _a;
16631
16722
  const file = (_a = e.target.files) == null ? void 0 : _a[0];
16632
16723
  if (file) onUpload == null ? void 0 : onUpload(itemId, file);
16633
16724
  e.target.value = "";
16634
16725
  }
16635
- const { uploadedCount, totalRequired } = React40.useMemo(() => {
16726
+ const { uploadedCount, totalRequired } = React41.useMemo(() => {
16636
16727
  let uploaded = 0;
16637
16728
  let required = 0;
16638
16729
  for (const i of items) {
@@ -17222,7 +17313,7 @@ function ExpenseBarChart({
17222
17313
  }
17223
17314
 
17224
17315
  // src/components/ui/financial-cards.tsx
17225
- var React42 = __toESM(require("react"));
17316
+ var React43 = __toESM(require("react"));
17226
17317
  var import_lucide_react54 = require("lucide-react");
17227
17318
 
17228
17319
  // src/components/ui/financial-primitives.tsx
@@ -17385,7 +17476,7 @@ function PropertyCard({
17385
17476
  interestCharged,
17386
17477
  principlePaidOff
17387
17478
  }) {
17388
- const [expanded, setExpanded] = React42.useState(false);
17479
+ const [expanded, setExpanded] = React43.useState(false);
17389
17480
  return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
17390
17481
  "div",
17391
17482
  {
@@ -18860,7 +18951,7 @@ function IncomeBarChart({
18860
18951
  }
18861
18952
 
18862
18953
  // src/components/ui/input-otp.tsx
18863
- var React45 = __toESM(require("react"));
18954
+ var React46 = __toESM(require("react"));
18864
18955
  var import_input_otp = require("input-otp");
18865
18956
  var import_lucide_react56 = require("lucide-react");
18866
18957
  var import_jsx_runtime98 = require("react/jsx-runtime");
@@ -18907,7 +18998,7 @@ function InputOTPSlot(_a) {
18907
18998
  "className"
18908
18999
  ]);
18909
19000
  var _a2;
18910
- const inputOTPContext = React45.useContext(import_input_otp.OTPInputContext);
19001
+ const inputOTPContext = React46.useContext(import_input_otp.OTPInputContext);
18911
19002
  const { char, hasFakeCaret, isActive } = (_a2 = inputOTPContext.slots[index]) != null ? _a2 : {};
18912
19003
  return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
18913
19004
  "div",
@@ -19004,7 +19095,7 @@ function SelectableCard({
19004
19095
  }
19005
19096
 
19006
19097
  // src/components/ui/kanban-column.tsx
19007
- var React46 = __toESM(require("react"));
19098
+ var React47 = __toESM(require("react"));
19008
19099
  var import_lucide_react59 = require("lucide-react");
19009
19100
 
19010
19101
  // src/components/ui/opportunity-card.tsx
@@ -19761,7 +19852,7 @@ function KanbanColumn({
19761
19852
  const themeVars = useThemeVars();
19762
19853
  const accentColor = (_a = stage.accentColor) != null ? _a : "var(--color-border)";
19763
19854
  const hasMenu = onEditColumn || !isDefault && onDeleteColumn;
19764
- const [isDragOver, setIsDragOver] = React46.useState(false);
19855
+ const [isDragOver, setIsDragOver] = React47.useState(false);
19765
19856
  function handleDragOver(e) {
19766
19857
  if (!onCardDrop) return;
19767
19858
  e.preventDefault();
@@ -19937,15 +20028,15 @@ function KanbanColumn({
19937
20028
  }
19938
20029
 
19939
20030
  // src/components/ui/stepper.tsx
19940
- var React47 = __toESM(require("react"));
20031
+ var React48 = __toESM(require("react"));
19941
20032
  var import_lucide_react60 = require("lucide-react");
19942
20033
  var import_jsx_runtime104 = require("react/jsx-runtime");
19943
- var StepperContext = React47.createContext({
20034
+ var StepperContext = React48.createContext({
19944
20035
  activeStep: 0,
19945
20036
  orientation: "horizontal",
19946
20037
  totalSteps: 0
19947
20038
  });
19948
- var StepContext = React47.createContext({
20039
+ var StepContext = React48.createContext({
19949
20040
  index: 0,
19950
20041
  isActive: false,
19951
20042
  isCompleted: false,
@@ -19958,7 +20049,7 @@ function Stepper({
19958
20049
  className,
19959
20050
  children
19960
20051
  }) {
19961
- const totalSteps = React47.Children.count(children);
20052
+ const totalSteps = React48.Children.count(children);
19962
20053
  return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(StepperContext.Provider, { value: { activeStep, orientation, totalSteps }, children: /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
19963
20054
  "div",
19964
20055
  {
@@ -19968,9 +20059,9 @@ function Stepper({
19968
20059
  orientation === "horizontal" ? "flex w-full items-start" : "flex flex-col",
19969
20060
  className
19970
20061
  ),
19971
- children: React47.Children.map(
20062
+ children: React48.Children.map(
19972
20063
  children,
19973
- (step, index) => React47.isValidElement(step) ? React47.cloneElement(
20064
+ (step, index) => React48.isValidElement(step) ? React48.cloneElement(
19974
20065
  step,
19975
20066
  { _index: index }
19976
20067
  ) : step
@@ -19979,7 +20070,7 @@ function Stepper({
19979
20070
  ) });
19980
20071
  }
19981
20072
  function Step({ _index = 0, error, className, children }) {
19982
- const { activeStep, orientation, totalSteps } = React47.useContext(StepperContext);
20073
+ const { activeStep, orientation, totalSteps } = React48.useContext(StepperContext);
19983
20074
  const isActive = _index === activeStep;
19984
20075
  const isCompleted = _index < activeStep;
19985
20076
  const isFirst = _index === 0;
@@ -20007,8 +20098,8 @@ function Step({ _index = 0, error, className, children }) {
20007
20098
  );
20008
20099
  }
20009
20100
  function StepIndicator({ error, className }) {
20010
- const { orientation } = React47.useContext(StepperContext);
20011
- const { index, isActive, isCompleted, isFirst, isLast } = React47.useContext(StepContext);
20101
+ const { orientation } = React48.useContext(StepperContext);
20102
+ const { index, isActive, isCompleted, isFirst, isLast } = React48.useContext(StepContext);
20012
20103
  const filled = isActive || isCompleted;
20013
20104
  const circle = /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
20014
20105
  "div",
@@ -20080,8 +20171,8 @@ function StepLabel({
20080
20171
  error,
20081
20172
  className
20082
20173
  }) {
20083
- const { orientation } = React47.useContext(StepperContext);
20084
- const { isActive, isCompleted, isLast } = React47.useContext(StepContext);
20174
+ const { orientation } = React48.useContext(StepperContext);
20175
+ const { isActive, isCompleted, isLast } = React48.useContext(StepContext);
20085
20176
  const subtext = typeof error === "string" ? error : description;
20086
20177
  return /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(
20087
20178
  "div",
@@ -20121,7 +20212,7 @@ function StepLabel({
20121
20212
  );
20122
20213
  }
20123
20214
  function StepContent({ className, children }) {
20124
- const { isActive } = React47.useContext(StepContext);
20215
+ const { isActive } = React48.useContext(StepContext);
20125
20216
  if (!isActive) return null;
20126
20217
  return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("div", { "data-slot": "step-content", className: cn("pb-4 pt-2", className), children });
20127
20218
  }
@@ -20244,7 +20335,7 @@ function OnboardingLayout({
20244
20335
  }
20245
20336
 
20246
20337
  // src/components/ui/opportunity-edit-modals.tsx
20247
- var React48 = __toESM(require("react"));
20338
+ var React49 = __toESM(require("react"));
20248
20339
  var import_lucide_react61 = require("lucide-react");
20249
20340
 
20250
20341
  // src/lib/opportunity-constants.ts
@@ -20607,9 +20698,9 @@ function EditLoanScenarioModal({
20607
20698
  container,
20608
20699
  className
20609
20700
  }) {
20610
- const [form, setForm] = React48.useState(__spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData));
20611
- const initialSnapshot = React48.useRef("");
20612
- React48.useEffect(() => {
20701
+ const [form, setForm] = React49.useState(__spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData));
20702
+ const initialSnapshot = React49.useRef("");
20703
+ React49.useEffect(() => {
20613
20704
  if (open) {
20614
20705
  const data = __spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData);
20615
20706
  setForm(data);
@@ -20869,11 +20960,11 @@ function EditAssetsModal({
20869
20960
  container,
20870
20961
  className
20871
20962
  }) {
20872
- const [items, setItems] = React48.useState(
20963
+ const [items, setItems] = React49.useState(
20873
20964
  initialItems.length > 0 ? initialItems : [makeDefaultAssetItem()]
20874
20965
  );
20875
- const initialSnapshot = React48.useRef("");
20876
- React48.useEffect(() => {
20966
+ const initialSnapshot = React49.useRef("");
20967
+ React49.useEffect(() => {
20877
20968
  if (open) {
20878
20969
  const data = initialItems.length > 0 ? initialItems : [makeDefaultAssetItem()];
20879
20970
  setItems(data);
@@ -21166,11 +21257,11 @@ function EditDebtsModal({
21166
21257
  container,
21167
21258
  className
21168
21259
  }) {
21169
- const [items, setItems] = React48.useState(
21260
+ const [items, setItems] = React49.useState(
21170
21261
  initialItems.length > 0 ? initialItems : [makeDefaultDebtItem()]
21171
21262
  );
21172
- const initialSnapshot = React48.useRef("");
21173
- React48.useEffect(() => {
21263
+ const initialSnapshot = React49.useRef("");
21264
+ React49.useEffect(() => {
21174
21265
  if (open) {
21175
21266
  const data = initialItems.length > 0 ? initialItems : [makeDefaultDebtItem()];
21176
21267
  setItems(data);
@@ -21492,9 +21583,9 @@ function EditAboutApplicantModal({
21492
21583
  container,
21493
21584
  className
21494
21585
  }) {
21495
- const [form, setForm] = React48.useState(__spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData));
21496
- const initialSnapshot = React48.useRef("");
21497
- React48.useEffect(() => {
21586
+ const [form, setForm] = React49.useState(__spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData));
21587
+ const initialSnapshot = React49.useRef("");
21588
+ React49.useEffect(() => {
21498
21589
  if (open) {
21499
21590
  const data = __spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData);
21500
21591
  setForm(data);
@@ -21766,7 +21857,7 @@ function EditIncomeModal({
21766
21857
  container,
21767
21858
  className
21768
21859
  }) {
21769
- const defaultItems = React48.useMemo(
21860
+ const defaultItems = React49.useMemo(
21770
21861
  () => {
21771
21862
  var _a;
21772
21863
  return ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultIncomeItem()];
@@ -21774,9 +21865,9 @@ function EditIncomeModal({
21774
21865
  []
21775
21866
  // eslint-disable-line react-hooks/exhaustive-deps
21776
21867
  );
21777
- const [items, setItems] = React48.useState(defaultItems);
21778
- const initialSnapshot = React48.useRef("");
21779
- React48.useEffect(() => {
21868
+ const [items, setItems] = React49.useState(defaultItems);
21869
+ const initialSnapshot = React49.useRef("");
21870
+ React49.useEffect(() => {
21780
21871
  var _a;
21781
21872
  if (open) {
21782
21873
  const data = ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultIncomeItem()];
@@ -21993,7 +22084,7 @@ function EditExpensesModal({
21993
22084
  container,
21994
22085
  className
21995
22086
  }) {
21996
- const defaultItems = React48.useMemo(
22087
+ const defaultItems = React49.useMemo(
21997
22088
  () => {
21998
22089
  var _a;
21999
22090
  return ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultExpenseItem()];
@@ -22001,9 +22092,9 @@ function EditExpensesModal({
22001
22092
  []
22002
22093
  // eslint-disable-line react-hooks/exhaustive-deps
22003
22094
  );
22004
- const [items, setItems] = React48.useState(defaultItems);
22005
- const initialSnapshot = React48.useRef("");
22006
- React48.useEffect(() => {
22095
+ const [items, setItems] = React49.useState(defaultItems);
22096
+ const initialSnapshot = React49.useRef("");
22097
+ React49.useEffect(() => {
22007
22098
  var _a;
22008
22099
  if (open) {
22009
22100
  const data = ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultExpenseItem()];
@@ -22136,7 +22227,7 @@ function EditExpensesModal({
22136
22227
  }
22137
22228
 
22138
22229
  // src/components/ui/opportunity-summary-tab.tsx
22139
- var React49 = __toESM(require("react"));
22230
+ var React50 = __toESM(require("react"));
22140
22231
  var import_react35 = require("react");
22141
22232
  var import_lucide_react62 = require("lucide-react");
22142
22233
  var import_jsx_runtime107 = require("react/jsx-runtime");
@@ -22523,7 +22614,7 @@ function OpportunitySummaryTab({
22523
22614
  var _a2;
22524
22615
  return (_a2 = docStatusOverrides[doc.id]) != null ? _a2 : doc.status;
22525
22616
  }
22526
- const checklistProgress = React49.useMemo(() => {
22617
+ const checklistProgress = React50.useMemo(() => {
22527
22618
  var _a2, _b2;
22528
22619
  const map = /* @__PURE__ */ new Map();
22529
22620
  for (const doc of documents) {
@@ -22541,7 +22632,7 @@ function OpportunitySummaryTab({
22541
22632
  }
22542
22633
  return Array.from(map.entries()).map(([name, data]) => __spreadValues({ name }, data));
22543
22634
  }, [documents, docStatusOverrides]);
22544
- const groupedDocs = React49.useMemo(() => {
22635
+ const groupedDocs = React50.useMemo(() => {
22545
22636
  var _a2;
22546
22637
  if (documents.length <= 5 || !documents.some((d) => d.checklistItem))
22547
22638
  return null;
@@ -23017,7 +23108,7 @@ function OpportunitySummaryTab({
23017
23108
  }
23018
23109
 
23019
23110
  // src/components/ui/sidebar-nav.tsx
23020
- var React50 = __toESM(require("react"));
23111
+ var React51 = __toESM(require("react"));
23021
23112
  var import_lucide_react63 = require("lucide-react");
23022
23113
  var import_accordion8 = require("@base-ui/react/accordion");
23023
23114
  var import_jsx_runtime108 = require("react/jsx-runtime");
@@ -23118,8 +23209,8 @@ function CollapsibleNavItem({
23118
23209
  var _a, _b;
23119
23210
  const Icon = item.icon;
23120
23211
  const hasActiveChild = (_b = (_a = item.subItems) == null ? void 0 : _a.some((sub) => sub.isActive)) != null ? _b : false;
23121
- const [open, setOpen] = React50.useState(hasActiveChild);
23122
- React50.useEffect(() => {
23212
+ const [open, setOpen] = React51.useState(hasActiveChild);
23213
+ React51.useEffect(() => {
23123
23214
  if (hasActiveChild) setOpen(true);
23124
23215
  }, [hasActiveChild]);
23125
23216
  if (collapsed) {
@@ -23228,13 +23319,13 @@ function SidebarNav({
23228
23319
  onCollapsedChange,
23229
23320
  className
23230
23321
  }) {
23231
- const [userMenuOpen, setUserMenuOpen] = React50.useState(false);
23232
- const navScrollRef = React50.useRef(null);
23233
- const expandedScrollRef = React50.useRef(0);
23234
- React50.useEffect(() => {
23322
+ const [userMenuOpen, setUserMenuOpen] = React51.useState(false);
23323
+ const navScrollRef = React51.useRef(null);
23324
+ const expandedScrollRef = React51.useRef(0);
23325
+ React51.useEffect(() => {
23235
23326
  if (collapsed) setUserMenuOpen(false);
23236
23327
  }, [collapsed]);
23237
- React50.useLayoutEffect(() => {
23328
+ React51.useLayoutEffect(() => {
23238
23329
  const nav = navScrollRef.current;
23239
23330
  if (!nav) return;
23240
23331
  if (!collapsed) {
@@ -23613,7 +23704,7 @@ function PipelineBoard({
23613
23704
  }
23614
23705
 
23615
23706
  // src/components/ui/pipeline-chart.tsx
23616
- var React51 = __toESM(require("react"));
23707
+ var React52 = __toESM(require("react"));
23617
23708
  var import_jsx_runtime111 = require("react/jsx-runtime");
23618
23709
  function formatValue(v) {
23619
23710
  return formatCurrencyAbbrev(v);
@@ -23631,7 +23722,7 @@ function PipelineChart({
23631
23722
  className
23632
23723
  }) {
23633
23724
  const themeVars = useThemeVars();
23634
- const [activeId, setActiveId] = React51.useState(null);
23725
+ const [activeId, setActiveId] = React52.useState(null);
23635
23726
  const nonEmpty = stages.filter((s) => s.value > 0);
23636
23727
  const total = nonEmpty.reduce((sum, s) => sum + s.value, 0);
23637
23728
  if (total === 0 || stages.length === 0) {
@@ -23724,7 +23815,7 @@ function PipelineChart({
23724
23815
  }
23725
23816
 
23726
23817
  // src/components/ui/pipeline-dialogs.tsx
23727
- var React52 = __toESM(require("react"));
23818
+ var React53 = __toESM(require("react"));
23728
23819
  var import_date_fns4 = require("date-fns");
23729
23820
  var import_jsx_runtime112 = require("react/jsx-runtime");
23730
23821
  function DeleteOpportunityDialog({
@@ -23838,10 +23929,10 @@ function PutOnHoldDialog({
23838
23929
  onSave,
23839
23930
  className
23840
23931
  }) {
23841
- const [duration, setDuration] = React52.useState("90");
23842
- const [customDate, setCustomDate] = React52.useState();
23843
- const today = React52.useMemo(() => (0, import_date_fns4.startOfDay)(/* @__PURE__ */ new Date()), []);
23844
- const resolvedDate = React52.useMemo(() => {
23932
+ const [duration, setDuration] = React53.useState("90");
23933
+ const [customDate, setCustomDate] = React53.useState();
23934
+ const today = React53.useMemo(() => (0, import_date_fns4.startOfDay)(/* @__PURE__ */ new Date()), []);
23935
+ const resolvedDate = React53.useMemo(() => {
23845
23936
  if (duration === "custom") return customDate;
23846
23937
  return (0, import_date_fns4.addDays)(today, parseInt(duration, 10));
23847
23938
  }, [duration, customDate, today]);
@@ -23850,7 +23941,7 @@ function PutOnHoldDialog({
23850
23941
  if (!resolvedDate) return;
23851
23942
  onSave((0, import_date_fns4.format)(resolvedDate, "yyyy-MM-dd"));
23852
23943
  }
23853
- React52.useEffect(() => {
23944
+ React53.useEffect(() => {
23854
23945
  if (open) {
23855
23946
  setDuration("90");
23856
23947
  setCustomDate(void 0);
@@ -24802,7 +24893,7 @@ var import_react39 = require("react");
24802
24893
  var import_lucide_react68 = require("lucide-react");
24803
24894
 
24804
24895
  // src/components/ui/password-strength-tooltip.tsx
24805
- var React56 = __toESM(require("react"));
24896
+ var React57 = __toESM(require("react"));
24806
24897
  var import_lucide_react67 = require("lucide-react");
24807
24898
  var import_popover5 = require("@base-ui/react/popover");
24808
24899
  var import_jsx_runtime123 = require("react/jsx-runtime");
@@ -24816,10 +24907,10 @@ var PASSWORD_STRENGTH_RULES = [
24816
24907
  test: (p) => /[^A-Za-z0-9]/.test(p)
24817
24908
  }
24818
24909
  ];
24819
- var PasswordStrengthTooltip = React56.forwardRef(function PasswordStrengthTooltip2({ open = false, password, children, side = "right" }, forwardedRef) {
24910
+ var PasswordStrengthTooltip = React57.forwardRef(function PasswordStrengthTooltip2({ open = false, password, children, side = "right" }, forwardedRef) {
24820
24911
  const themeVars = useThemeVars();
24821
- const anchorRef = React56.useRef(null);
24822
- const composedRef = React56.useCallback(
24912
+ const anchorRef = React57.useRef(null);
24913
+ const composedRef = React57.useCallback(
24823
24914
  (node) => {
24824
24915
  anchorRef.current = node;
24825
24916
  if (typeof forwardedRef === "function") {
@@ -26529,7 +26620,7 @@ function ApplicationMobileLayout({
26529
26620
  }
26530
26621
 
26531
26622
  // src/components/ui/income-work-details.tsx
26532
- var React63 = __toESM(require("react"));
26623
+ var React64 = __toESM(require("react"));
26533
26624
 
26534
26625
  // src/components/ui/loan-option-group.tsx
26535
26626
  var import_jsx_runtime133 = require("react/jsx-runtime");
@@ -26821,10 +26912,10 @@ function IncomeWorkDetails({
26821
26912
  onConnectMore,
26822
26913
  className
26823
26914
  }) {
26824
- const [openItems, setOpenItems] = React63.useState(
26915
+ const [openItems, setOpenItems] = React64.useState(
26825
26916
  sources.length > 0 ? [sources[0].id] : []
26826
26917
  );
26827
- React63.useEffect(() => {
26918
+ React64.useEffect(() => {
26828
26919
  setOpenItems((current) => {
26829
26920
  const currentSet = new Set(current);
26830
26921
  const newIds = sources.map((s) => s.id).filter((id) => !currentSet.has(id));
@@ -26995,7 +27086,7 @@ function LoanEntryShell({
26995
27086
  }
26996
27087
 
26997
27088
  // src/components/ui/loan-wizard-shell.tsx
26998
- var React64 = __toESM(require("react"));
27089
+ var React65 = __toESM(require("react"));
26999
27090
  var import_jsx_runtime137 = require("react/jsx-runtime");
27000
27091
  function LoanWizardShell({
27001
27092
  logo,
@@ -27035,7 +27126,7 @@ function LoanWizardShell({
27035
27126
  ] }),
27036
27127
  /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex shrink-0 items-center justify-between px-4 py-8 sm:px-8 sm:py-12 lg:px-[200px]", children: [
27037
27128
  /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col gap-2", children: [
27038
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("h1", { className: "text-2xl font-bold text-foreground lg:text-[38px] lg:leading-tight", children: heroTitle.split("\n").map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(React64.Fragment, { children: [
27129
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("h1", { className: "text-2xl font-bold text-foreground lg:text-[38px] lg:leading-tight", children: heroTitle.split("\n").map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(React65.Fragment, { children: [
27039
27130
  line,
27040
27131
  i < heroTitle.split("\n").length - 1 && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("br", {})
27041
27132
  ] }, i)) }),
@@ -27866,6 +27957,7 @@ function EditorPlaceholder() {
27866
27957
  PopoverContent,
27867
27958
  PopoverDescription,
27868
27959
  PopoverHeader,
27960
+ PopoverPortalProvider,
27869
27961
  PopoverTitle,
27870
27962
  PopoverTrigger,
27871
27963
  Progress,