@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.
- package/.turbo/turbo-build.log +92 -92
- package/CHANGELOG.md +6 -0
- package/dist/{chunk-SYJ6LVJ6.mjs → chunk-3ZU5BH6X.mjs} +1 -1
- package/dist/{chunk-FTQ2AKZ2.mjs → chunk-4QTHK7ML.mjs} +1 -1
- package/dist/{chunk-T5HU4S4X.mjs → chunk-C7ZTZTEW.mjs} +1 -1
- package/dist/{chunk-KI57CBJR.mjs → chunk-DQNNP6I4.mjs} +33 -24
- package/dist/{chunk-AE4JKISB.mjs → chunk-EEI4FLEE.mjs} +1 -1
- package/dist/{chunk-IEQX4UVP.mjs → chunk-EY36WDCF.mjs} +1 -1
- package/dist/{chunk-HB5BKRMH.mjs → chunk-F3CU6KEI.mjs} +11 -1
- package/dist/chunk-H65NB7KI.mjs +182 -0
- package/dist/{chunk-TRM3KIHT.mjs → chunk-ICCPK3J2.mjs} +1 -1
- package/dist/{chunk-KGVVK6OS.mjs → chunk-ORMC3TV3.mjs} +3 -1
- package/dist/{chunk-HSXMTFIM.mjs → chunk-UD5UF5OC.mjs} +1 -1
- package/dist/{chunk-IW33VLL5.mjs → chunk-X3VEDQPO.mjs} +7 -3
- package/dist/{chunk-AAZSLTER.mjs → chunk-XGRSPFFC.mjs} +16 -7
- package/dist/components/ui/about-you-form.js +9 -6
- package/dist/components/ui/about-you-form.mjs +2 -2
- package/dist/components/ui/ai-conversations/index.js +4 -1
- package/dist/components/ui/ai-conversations/index.mjs +2 -2
- package/dist/components/ui/appointment-availability-settings.js +24 -12
- package/dist/components/ui/appointment-availability-settings.mjs +3 -3
- package/dist/components/ui/appointment-book-dialog.js +33 -24
- package/dist/components/ui/appointment-book-dialog.mjs +1 -1
- package/dist/components/ui/appointment-detail-sheet.js +3 -1
- package/dist/components/ui/appointment-detail-sheet.mjs +1 -1
- package/dist/components/ui/appointment-gmail-connect.js +127 -70
- package/dist/components/ui/appointment-gmail-connect.mjs +1 -1
- package/dist/components/ui/backoffice-signup-steps.js +23 -16
- package/dist/components/ui/backoffice-signup-steps.mjs +3 -3
- package/dist/components/ui/bank-statement-generate-dialog.js +12 -9
- package/dist/components/ui/bank-statement-generate-dialog.mjs +3 -3
- package/dist/components/ui/color-picker.js +21 -14
- package/dist/components/ui/color-picker.mjs +2 -2
- package/dist/components/ui/date-picker.js +6 -3
- package/dist/components/ui/date-picker.mjs +2 -2
- package/dist/components/ui/opportunity-edit-modals.js +45 -42
- package/dist/components/ui/opportunity-edit-modals.mjs +3 -3
- package/dist/components/ui/opportunity-summary-tab.js +48 -45
- package/dist/components/ui/opportunity-summary-tab.mjs +4 -4
- package/dist/components/ui/pipeline-dialogs.js +12 -9
- package/dist/components/ui/pipeline-dialogs.mjs +3 -3
- package/dist/components/ui/popover.js +22 -1
- package/dist/components/ui/popover.mjs +3 -1
- package/dist/components/ui/savings-goal-modal.js +11 -8
- package/dist/components/ui/savings-goal-modal.mjs +2 -2
- package/dist/index.js +349 -257
- package/dist/index.mjs +15 -13
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/components/index.tsx +4 -0
- package/src/components/ui/appointment-availability-settings.tsx +32 -19
- package/src/components/ui/appointment-book-dialog.tsx +52 -73
- package/src/components/ui/appointment-detail-sheet.tsx +3 -1
- package/src/components/ui/appointment-gmail-connect.tsx +89 -29
- package/src/components/ui/color-picker.tsx +12 -4
- package/src/components/ui/popover.tsx +33 -2
- package/src/styles/styles-css.ts +1 -1
- 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
|
-
|
|
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
|
|
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 =
|
|
4919
|
-
|
|
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
|
|
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 =
|
|
5451
|
-
const [name, setName] =
|
|
5452
|
-
const [warningDays, setWarningDays] =
|
|
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] =
|
|
5465
|
+
const [priorityDays, setPriorityDays] = React13.useState(
|
|
5456
5466
|
(editData == null ? void 0 : editData.priorityDays) != null ? String(editData.priorityDays) : ""
|
|
5457
5467
|
);
|
|
5458
|
-
const [tasks, setTasks] =
|
|
5459
|
-
|
|
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
|
|
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] =
|
|
6019
|
-
|
|
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
|
|
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] =
|
|
6395
|
-
const messagesEndRef =
|
|
6396
|
-
const textareaRef =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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] =
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
|
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 =
|
|
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] =
|
|
8838
|
+
const [internalValue, setInternalValue] = React21.useState(defaultValue);
|
|
8820
8839
|
const numericValue = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
8821
|
-
const [inputText, setInputText] =
|
|
8840
|
+
const [inputText, setInputText] = React21.useState(
|
|
8822
8841
|
formatNumberToCurrency(numericValue)
|
|
8823
8842
|
);
|
|
8824
|
-
const [isFocused, setIsFocused] =
|
|
8825
|
-
|
|
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] =
|
|
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] =
|
|
9000
|
+
const [internalValue, setInternalValue] = React21.useState("");
|
|
8982
9001
|
const inputValue = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
8983
|
-
const [open, setOpen] =
|
|
8984
|
-
const [activeIndex, setActiveIndex] =
|
|
8985
|
-
const containerRef =
|
|
8986
|
-
const listRef =
|
|
8987
|
-
const filtered =
|
|
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
|
-
|
|
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] =
|
|
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
|
-
|
|
9332
|
-
|
|
9333
|
-
|
|
9334
|
-
|
|
9335
|
-
|
|
9336
|
-
|
|
9337
|
-
|
|
9338
|
-
|
|
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)(
|
|
10505
|
-
|
|
10506
|
-
|
|
10507
|
-
|
|
10508
|
-
|
|
10509
|
-
|
|
10510
|
-
|
|
10511
|
-
|
|
10512
|
-
/* @__PURE__ */ (0, import_jsx_runtime56.
|
|
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
|
-
|
|
10569
|
+
"div",
|
|
10552
10570
|
{
|
|
10553
|
-
|
|
10554
|
-
|
|
10555
|
-
|
|
10556
|
-
|
|
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.
|
|
10560
|
-
|
|
10561
|
-
|
|
10562
|
-
|
|
10563
|
-
|
|
10564
|
-
|
|
10565
|
-
|
|
10566
|
-
|
|
10567
|
-
|
|
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.
|
|
10579
|
-
|
|
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
|
|
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] =
|
|
13837
|
-
|
|
13838
|
-
|
|
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 (
|
|
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] =
|
|
14015
|
+
const [internalValue, setInternalValue] = React33.useState(defaultValue);
|
|
13925
14016
|
const color = isControlled ? controlledValue : internalValue;
|
|
13926
|
-
const [open, setOpen] =
|
|
13927
|
-
|
|
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
|
|
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] =
|
|
14367
|
-
|
|
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
|
|
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] =
|
|
14538
|
-
const [snooze, setSnooze] =
|
|
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
|
-
|
|
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
|
|
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
|
|
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 =
|
|
15464
|
+
const longestFieldLabel = React36.useMemo(
|
|
15374
15465
|
() => longestOf(fields.map((f) => f.label)),
|
|
15375
15466
|
[fields]
|
|
15376
15467
|
);
|
|
15377
|
-
const longestOperatorLabel =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
15533
|
-
const [severity, setSeverity] =
|
|
15534
|
-
const [tree, setTree] =
|
|
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] =
|
|
15628
|
+
const [shareAcrossCompany, setShareAcrossCompany] = React37.useState(
|
|
15538
15629
|
initialShareAcrossCompany
|
|
15539
15630
|
);
|
|
15540
|
-
|
|
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 =
|
|
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
|
|
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] =
|
|
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] =
|
|
15735
|
-
const [body, setBody] =
|
|
15736
|
-
|
|
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] =
|
|
15804
|
-
const [search, setSearch] =
|
|
15805
|
-
const [selectedId, setSelectedId] =
|
|
15806
|
-
const [internalNotes, setInternalNotes] =
|
|
15807
|
-
const [firstName, setFirstName] =
|
|
15808
|
-
const [lastName, setLastName] =
|
|
15809
|
-
const [email, setEmail] =
|
|
15810
|
-
const [externalNotes, setExternalNotes] =
|
|
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
|
|
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] =
|
|
16105
|
-
|
|
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
|
|
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] =
|
|
16600
|
+
const [internalSorting, setInternalSorting] = React40.useState(
|
|
16510
16601
|
[]
|
|
16511
16602
|
);
|
|
16512
|
-
const [internalColumnFilters, setInternalColumnFilters] =
|
|
16513
|
-
const [internalPagination, setInternalPagination] =
|
|
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] =
|
|
16518
|
-
const [rowSelection, setRowSelection] =
|
|
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 =
|
|
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
|
|
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 =
|
|
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 } =
|
|
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
|
|
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] =
|
|
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
|
|
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 =
|
|
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
|
|
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] =
|
|
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
|
|
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 =
|
|
20034
|
+
var StepperContext = React48.createContext({
|
|
19944
20035
|
activeStep: 0,
|
|
19945
20036
|
orientation: "horizontal",
|
|
19946
20037
|
totalSteps: 0
|
|
19947
20038
|
});
|
|
19948
|
-
var StepContext =
|
|
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 =
|
|
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:
|
|
20062
|
+
children: React48.Children.map(
|
|
19972
20063
|
children,
|
|
19973
|
-
(step, index) =>
|
|
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 } =
|
|
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 } =
|
|
20011
|
-
const { index, isActive, isCompleted, isFirst, isLast } =
|
|
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 } =
|
|
20084
|
-
const { isActive, isCompleted, isLast } =
|
|
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 } =
|
|
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
|
|
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] =
|
|
20611
|
-
const initialSnapshot =
|
|
20612
|
-
|
|
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] =
|
|
20963
|
+
const [items, setItems] = React49.useState(
|
|
20873
20964
|
initialItems.length > 0 ? initialItems : [makeDefaultAssetItem()]
|
|
20874
20965
|
);
|
|
20875
|
-
const initialSnapshot =
|
|
20876
|
-
|
|
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] =
|
|
21260
|
+
const [items, setItems] = React49.useState(
|
|
21170
21261
|
initialItems.length > 0 ? initialItems : [makeDefaultDebtItem()]
|
|
21171
21262
|
);
|
|
21172
|
-
const initialSnapshot =
|
|
21173
|
-
|
|
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] =
|
|
21496
|
-
const initialSnapshot =
|
|
21497
|
-
|
|
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 =
|
|
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] =
|
|
21778
|
-
const initialSnapshot =
|
|
21779
|
-
|
|
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 =
|
|
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] =
|
|
22005
|
-
const initialSnapshot =
|
|
22006
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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] =
|
|
23122
|
-
|
|
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] =
|
|
23232
|
-
const navScrollRef =
|
|
23233
|
-
const expandedScrollRef =
|
|
23234
|
-
|
|
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
|
-
|
|
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
|
|
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] =
|
|
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
|
|
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] =
|
|
23842
|
-
const [customDate, setCustomDate] =
|
|
23843
|
-
const today =
|
|
23844
|
-
const resolvedDate =
|
|
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
|
-
|
|
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
|
|
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 =
|
|
24910
|
+
var PasswordStrengthTooltip = React57.forwardRef(function PasswordStrengthTooltip2({ open = false, password, children, side = "right" }, forwardedRef) {
|
|
24820
24911
|
const themeVars = useThemeVars();
|
|
24821
|
-
const anchorRef =
|
|
24822
|
-
const composedRef =
|
|
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
|
|
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] =
|
|
26915
|
+
const [openItems, setOpenItems] = React64.useState(
|
|
26825
26916
|
sources.length > 0 ? [sources[0].id] : []
|
|
26826
26917
|
);
|
|
26827
|
-
|
|
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
|
|
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)(
|
|
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,
|