@wealthx/shadcn 1.5.5 → 1.5.7
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 +164 -158
- package/CHANGELOG.md +12 -0
- package/dist/{chunk-2LLFNGJZ.mjs → chunk-3OOUI5TO.mjs} +1 -1
- package/dist/{chunk-AUEUTZIC.mjs → chunk-3QAQQBCM.mjs} +2 -2
- package/dist/chunk-3Z75IKFO.mjs +34 -0
- package/dist/{chunk-RAKBWNQH.mjs → chunk-5WCIGJ3E.mjs} +26 -65
- package/dist/chunk-65PZNG4Y.mjs +129 -0
- package/dist/{chunk-D447W45Z.mjs → chunk-7OLKVKJF.mjs} +41 -49
- package/dist/{chunk-UEREFDAE.mjs → chunk-AZGLSIHF.mjs} +1 -1
- package/dist/{chunk-QRVEI6J3.mjs → chunk-BQBSYM2I.mjs} +1 -3
- package/dist/{chunk-BFB3UH7V.mjs → chunk-C2QMHKLT.mjs} +1 -1
- package/dist/chunk-CEEVYRQA.mjs +61 -0
- package/dist/{chunk-VJ3GC7W3.mjs → chunk-CXGZSIQN.mjs} +4 -30
- package/dist/{chunk-VLELWBEW.mjs → chunk-E2BNCA6L.mjs} +1 -1
- package/dist/{chunk-46Q4335I.mjs → chunk-F73QFUZH.mjs} +10 -20
- package/dist/{chunk-Q35PNFJ7.mjs → chunk-FBNEIYSE.mjs} +1 -1
- package/dist/{chunk-HO6S3ECM.mjs → chunk-G4WLCKFV.mjs} +1 -1
- package/dist/{chunk-ODO6BUOF.mjs → chunk-HRHXZIX5.mjs} +1 -3
- package/dist/{chunk-IXR4BQSQ.mjs → chunk-I6QVWQCD.mjs} +1 -1
- package/dist/{chunk-PV7PNA6K.mjs → chunk-IKDTOCSY.mjs} +2 -4
- package/dist/{chunk-Q5SGEIJV.mjs → chunk-IXKE6LHN.mjs} +1 -1
- package/dist/{chunk-OL65UQHQ.mjs → chunk-JCH2BG24.mjs} +26 -60
- package/dist/{chunk-PV3Y7QGK.mjs → chunk-LHWJQNLG.mjs} +3 -3
- package/dist/{chunk-JTG5R5YV.mjs → chunk-MS4PDUSU.mjs} +284 -58
- package/dist/{chunk-VFH632TB.mjs → chunk-SDNG4XL6.mjs} +1 -1
- package/dist/{chunk-DFL5CV75.mjs → chunk-T6MMCOX6.mjs} +1 -1
- package/dist/{chunk-6TX73WG7.mjs → chunk-TCE5L44O.mjs} +3 -2
- package/dist/{chunk-HROG643K.mjs → chunk-W5QJ57PU.mjs} +1 -1
- package/dist/{chunk-EW72FINW.mjs → chunk-XVZGXPIX.mjs} +1 -1
- package/dist/components/ui/about-you-form.mjs +3 -3
- package/dist/components/ui/add-column-modal.js +56 -227
- package/dist/components/ui/add-column-modal.mjs +1 -2
- package/dist/components/ui/ai-conversations.js +278 -58
- package/dist/components/ui/ai-conversations.mjs +1 -1
- package/dist/components/ui/appointment-action-dialogs.mjs +3 -3
- package/dist/components/ui/appointment-availability-settings.js +2 -28
- package/dist/components/ui/appointment-availability-settings.mjs +4 -4
- package/dist/components/ui/appointment-book-dialog.js +11 -21
- package/dist/components/ui/appointment-book-dialog.mjs +3 -3
- package/dist/components/ui/appointment-calendar-view.mjs +2 -2
- package/dist/components/ui/appointment-detail-sheet.mjs +4 -4
- package/dist/components/ui/appointment-upcoming-card.mjs +3 -3
- package/dist/components/ui/bank-statement-generate-dialog.mjs +4 -4
- package/dist/components/ui/calendar.mjs +2 -2
- package/dist/components/ui/dashboard-transactions-table.mjs +1 -1
- package/dist/components/ui/date-picker.mjs +3 -3
- package/dist/components/ui/financial-cards.mjs +2 -2
- package/dist/components/ui/financial-sections.mjs +3 -3
- package/dist/components/ui/integration-card.js +326 -0
- package/dist/components/ui/integration-card.mjs +11 -0
- package/dist/components/ui/kanban-column.js +151 -243
- package/dist/components/ui/kanban-column.mjs +3 -4
- package/dist/components/ui/loan-application-cards.mjs +1 -1
- package/dist/components/ui/onboarding-layout.js +65 -4
- package/dist/components/ui/onboarding-layout.mjs +6 -4
- package/dist/components/ui/opportunity-card.js +126 -216
- package/dist/components/ui/opportunity-card.mjs +2 -3
- package/dist/components/ui/opportunity-edit-modals.mjs +4 -4
- package/dist/components/ui/opportunity-summary-tab.mjs +6 -6
- package/dist/components/ui/pipeline-board.js +167 -261
- package/dist/components/ui/pipeline-board.mjs +4 -5
- package/dist/components/ui/pipeline-chart.js +128 -55
- package/dist/components/ui/pipeline-chart.mjs +2 -1
- package/dist/components/ui/pipeline-dialogs.mjs +4 -4
- package/dist/components/ui/savings-goal-modal.mjs +3 -3
- package/dist/components/ui/selectable-card.js +163 -0
- package/dist/components/ui/selectable-card.mjs +9 -0
- package/dist/components/ui/sidebar-nav.js +2 -4
- package/dist/components/ui/sidebar-nav.mjs +1 -1
- package/dist/components/ui/signup-shell.js +3 -2
- package/dist/components/ui/signup-shell.mjs +2 -2
- package/dist/components/ui/stepper.js +3 -2
- package/dist/components/ui/stepper.mjs +1 -1
- package/dist/index.js +2122 -1881
- package/dist/index.mjs +56 -46
- package/dist/styles.css +1 -1
- package/package.json +11 -1
- package/src/components/index.tsx +26 -2
- package/src/components/ui/add-column-modal.tsx +9 -58
- package/src/components/ui/ai-conversations.tsx +308 -42
- package/src/components/ui/appointment-availability-settings.tsx +2 -35
- package/src/components/ui/appointment-book-dialog.tsx +25 -48
- package/src/components/ui/integration-card.tsx +88 -0
- package/src/components/ui/kanban-column.tsx +0 -7
- package/src/components/ui/onboarding-layout.tsx +102 -1
- package/src/components/ui/opportunity-card.tsx +5 -53
- package/src/components/ui/pipeline-board.tsx +0 -3
- package/src/components/ui/pipeline-chart.tsx +47 -53
- package/src/components/ui/selectable-card.tsx +37 -0
- package/src/components/ui/sidebar-nav.tsx +0 -2
- package/src/components/ui/stepper.tsx +3 -2
- package/src/lib/format-date.ts +6 -6
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +2 -0
- package/dist/chunk-2P7HP7LR.mjs +0 -68
package/CHANGELOG.md
CHANGED
|
@@ -6,14 +6,14 @@ import {
|
|
|
6
6
|
EditIncomeModal,
|
|
7
7
|
EditLoanScenarioModal,
|
|
8
8
|
PROPERTY_ASSET_TYPES
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-IXKE6LHN.mjs";
|
|
10
10
|
import {
|
|
11
11
|
AboutCard,
|
|
12
12
|
DebtCard,
|
|
13
13
|
ExpensesCard,
|
|
14
14
|
IncomeCard,
|
|
15
15
|
PropertyCard
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-W5QJ57PU.mjs";
|
|
17
17
|
import {
|
|
18
18
|
FinancialDetailField,
|
|
19
19
|
FinancialLineItem,
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RadioGroupItem
|
|
3
|
+
} from "./chunk-JTK6VJXY.mjs";
|
|
4
|
+
import {
|
|
5
|
+
cn
|
|
6
|
+
} from "./chunk-AFML43VJ.mjs";
|
|
7
|
+
|
|
8
|
+
// src/components/ui/selectable-card.tsx
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
function SelectableCard({
|
|
11
|
+
value,
|
|
12
|
+
selected = false,
|
|
13
|
+
children,
|
|
14
|
+
className
|
|
15
|
+
}) {
|
|
16
|
+
return /* @__PURE__ */ jsxs(
|
|
17
|
+
"label",
|
|
18
|
+
{
|
|
19
|
+
className: cn(
|
|
20
|
+
"flex cursor-pointer flex-col items-center justify-center gap-3 border border-border p-6 text-center transition-colors hover:border-primary/50",
|
|
21
|
+
selected && "border-primary bg-primary/5",
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx(RadioGroupItem, { value, className: "sr-only" }),
|
|
26
|
+
children
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
SelectableCard
|
|
34
|
+
};
|
|
@@ -11,12 +11,6 @@ import {
|
|
|
11
11
|
DropdownMenuSeparator,
|
|
12
12
|
DropdownMenuTrigger
|
|
13
13
|
} from "./chunk-HNDTLT5X.mjs";
|
|
14
|
-
import {
|
|
15
|
-
Tooltip,
|
|
16
|
-
TooltipContent,
|
|
17
|
-
TooltipProvider,
|
|
18
|
-
TooltipTrigger
|
|
19
|
-
} from "./chunk-6SR4K5T5.mjs";
|
|
20
14
|
import {
|
|
21
15
|
Separator
|
|
22
16
|
} from "./chunk-2GIYVERS.mjs";
|
|
@@ -26,7 +20,7 @@ import {
|
|
|
26
20
|
import {
|
|
27
21
|
formatDateDayMonth,
|
|
28
22
|
formatDateShort
|
|
29
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-LHWJQNLG.mjs";
|
|
30
24
|
import {
|
|
31
25
|
Accordion,
|
|
32
26
|
AccordionContent,
|
|
@@ -56,7 +50,6 @@ import {
|
|
|
56
50
|
MoreVertical,
|
|
57
51
|
Clock,
|
|
58
52
|
ArrowRight,
|
|
59
|
-
Bot,
|
|
60
53
|
ChevronDown,
|
|
61
54
|
ChevronRight
|
|
62
55
|
} from "lucide-react";
|
|
@@ -107,7 +100,6 @@ function TaskViewCard({
|
|
|
107
100
|
onDragStart,
|
|
108
101
|
className
|
|
109
102
|
}) {
|
|
110
|
-
var _a;
|
|
111
103
|
const resolvedPriority = resolvePriority(
|
|
112
104
|
daysSinceColumnChanged,
|
|
113
105
|
warningDays,
|
|
@@ -119,8 +111,6 @@ function TaskViewCard({
|
|
|
119
111
|
const totalCount = tasks.length;
|
|
120
112
|
const hasTasks = totalCount > 0;
|
|
121
113
|
const allDone = hasTasks && completedCount === totalCount;
|
|
122
|
-
const nextPendingTask = tasks.find((t) => !t.completed);
|
|
123
|
-
const agentName = (_a = nextPendingTask == null ? void 0 : nextPendingTask.aiAgentName) != null ? _a : null;
|
|
124
114
|
const [subtasksExpanded, setSubtasksExpanded] = useState(false);
|
|
125
115
|
const hasMenu = onViewDetails || onChangePriority || onPutOnHold || onDelete;
|
|
126
116
|
const stopProp = (e) => {
|
|
@@ -146,19 +136,7 @@ function TaskViewCard({
|
|
|
146
136
|
}
|
|
147
137
|
);
|
|
148
138
|
} else if (nextTask) {
|
|
149
|
-
taskHeader = /* @__PURE__ */
|
|
150
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
151
|
-
agentName && /* @__PURE__ */ jsx(
|
|
152
|
-
Bot,
|
|
153
|
-
{
|
|
154
|
-
className: "size-3.5 shrink-0 text-primary",
|
|
155
|
-
"aria-hidden": "true"
|
|
156
|
-
}
|
|
157
|
-
),
|
|
158
|
-
/* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold leading-snug", children: nextTask })
|
|
159
|
-
] }),
|
|
160
|
-
agentName && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: agentName })
|
|
161
|
-
] });
|
|
139
|
+
taskHeader = /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold leading-snug", children: nextTask });
|
|
162
140
|
} else {
|
|
163
141
|
taskHeader = /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "No tasks defined for this stage" });
|
|
164
142
|
}
|
|
@@ -238,7 +216,6 @@ function TaskViewCard({
|
|
|
238
216
|
{
|
|
239
217
|
title: task.title,
|
|
240
218
|
completed: task.completed,
|
|
241
|
-
aiAgentName: task.aiAgentName,
|
|
242
219
|
onToggle: () => onTaskToggle == null ? void 0 : onTaskToggle(task.id),
|
|
243
220
|
size: "xs"
|
|
244
221
|
},
|
|
@@ -331,7 +308,6 @@ function OpportunityCard({
|
|
|
331
308
|
onTaskToggle,
|
|
332
309
|
onMarkAsDone,
|
|
333
310
|
onMoveToNextStage,
|
|
334
|
-
onLaunchAssistant,
|
|
335
311
|
onChangePriority,
|
|
336
312
|
onDelete,
|
|
337
313
|
onPutOnHold,
|
|
@@ -429,45 +405,28 @@ function OpportunityCard({
|
|
|
429
405
|
(loanPurposeLabel || loanType) && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
|
|
430
406
|
/* @__PURE__ */ jsx("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
|
|
431
407
|
] }),
|
|
432
|
-
/* @__PURE__ */
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
/* @__PURE__ */ jsx(
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
{
|
|
452
|
-
className: cn(
|
|
453
|
-
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
454
|
-
"size-7 shrink-0"
|
|
455
|
-
),
|
|
456
|
-
"aria-label": "Opportunity actions",
|
|
457
|
-
children: /* @__PURE__ */ jsx(MoreVertical, { className: "size-4" })
|
|
458
|
-
}
|
|
459
|
-
),
|
|
460
|
-
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
|
|
461
|
-
onViewDetails && /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
|
|
462
|
-
onChangePriority && /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
|
|
463
|
-
onPutOnHold && /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
|
|
464
|
-
onDelete && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
465
|
-
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
466
|
-
/* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
|
|
467
|
-
] })
|
|
408
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1 -mr-1 -mt-1", onClick: stopProp, children: hasMenu && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
409
|
+
/* @__PURE__ */ jsx(
|
|
410
|
+
DropdownMenuTrigger,
|
|
411
|
+
{
|
|
412
|
+
className: cn(
|
|
413
|
+
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
414
|
+
"size-7 shrink-0"
|
|
415
|
+
),
|
|
416
|
+
"aria-label": "Opportunity actions",
|
|
417
|
+
children: /* @__PURE__ */ jsx(MoreVertical, { className: "size-4" })
|
|
418
|
+
}
|
|
419
|
+
),
|
|
420
|
+
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
|
|
421
|
+
onViewDetails && /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
|
|
422
|
+
onChangePriority && /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
|
|
423
|
+
onPutOnHold && /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
|
|
424
|
+
onDelete && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
425
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
426
|
+
/* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
|
|
468
427
|
] })
|
|
469
428
|
] })
|
|
470
|
-
] })
|
|
429
|
+
] }) })
|
|
471
430
|
] }),
|
|
472
431
|
/* @__PURE__ */ jsx(Separator, {}),
|
|
473
432
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
@@ -565,7 +524,6 @@ function OpportunityCard({
|
|
|
565
524
|
{
|
|
566
525
|
title: task.title,
|
|
567
526
|
completed: task.completed,
|
|
568
|
-
aiAgentName: task.aiAgentName,
|
|
569
527
|
onToggle: onTaskToggle ? () => onTaskToggle(task.id) : void 0,
|
|
570
528
|
disabled: isSubmitting
|
|
571
529
|
},
|
|
@@ -689,7 +647,10 @@ function LeadCard({
|
|
|
689
647
|
/* @__PURE__ */ jsx(
|
|
690
648
|
"a",
|
|
691
649
|
{
|
|
692
|
-
href: `https://${loanApplicationUrl.replace(
|
|
650
|
+
href: `https://${loanApplicationUrl.replace(
|
|
651
|
+
/^https?:\/\//,
|
|
652
|
+
""
|
|
653
|
+
)}`,
|
|
693
654
|
target: "_blank",
|
|
694
655
|
rel: "noreferrer",
|
|
695
656
|
className: "text-primary underline-offset-2 hover:underline",
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Step,
|
|
3
|
+
StepIndicator,
|
|
4
|
+
StepItem,
|
|
5
|
+
StepLabel,
|
|
6
|
+
Stepper
|
|
7
|
+
} from "./chunk-TCE5L44O.mjs";
|
|
8
|
+
import {
|
|
9
|
+
Button
|
|
10
|
+
} from "./chunk-NOOEKOWY.mjs";
|
|
11
|
+
import {
|
|
12
|
+
cn
|
|
13
|
+
} from "./chunk-AFML43VJ.mjs";
|
|
14
|
+
|
|
15
|
+
// src/components/ui/onboarding-layout.tsx
|
|
16
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
17
|
+
function OnboardingPanelLayout({
|
|
18
|
+
title,
|
|
19
|
+
subtitle,
|
|
20
|
+
steps,
|
|
21
|
+
currentStepIndex,
|
|
22
|
+
canProceed = true,
|
|
23
|
+
onBack,
|
|
24
|
+
onNext,
|
|
25
|
+
onSkip,
|
|
26
|
+
className,
|
|
27
|
+
children
|
|
28
|
+
}) {
|
|
29
|
+
const isFirstStep = currentStepIndex === 0;
|
|
30
|
+
const isLastStep = currentStepIndex === steps.length - 1;
|
|
31
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex h-screen bg-background font-sans", className), children: [
|
|
32
|
+
/* @__PURE__ */ jsxs("div", { className: "flex w-72 shrink-0 flex-col border-r border-border bg-muted/20 p-8", children: [
|
|
33
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 mb-8", children: [
|
|
34
|
+
/* @__PURE__ */ jsx("span", { className: "text-h1", children: title }),
|
|
35
|
+
subtitle && /* @__PURE__ */ jsx("span", { className: "text-body-medium text-muted-foreground", children: subtitle })
|
|
36
|
+
] }),
|
|
37
|
+
steps.length > 1 && /* @__PURE__ */ jsx(
|
|
38
|
+
Stepper,
|
|
39
|
+
{
|
|
40
|
+
activeStep: currentStepIndex,
|
|
41
|
+
orientation: "vertical",
|
|
42
|
+
className: "flex-1",
|
|
43
|
+
children: steps.map((step) => /* @__PURE__ */ jsxs(Step, { className: "flex-1", children: [
|
|
44
|
+
/* @__PURE__ */ jsx(StepIndicator, {}),
|
|
45
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col", children: /* @__PURE__ */ jsx(
|
|
46
|
+
StepLabel,
|
|
47
|
+
{
|
|
48
|
+
description: step.isLocked ? "Upgrade to unlock" : step.description,
|
|
49
|
+
children: step.title
|
|
50
|
+
}
|
|
51
|
+
) })
|
|
52
|
+
] }, step.id))
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [
|
|
57
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-10 py-8", children: /* @__PURE__ */ jsx("div", { className: "max-w-2xl", children }) }),
|
|
58
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-t border-border px-10 py-4", children: [
|
|
59
|
+
/* @__PURE__ */ jsx(
|
|
60
|
+
Button,
|
|
61
|
+
{
|
|
62
|
+
variant: "outline-primary",
|
|
63
|
+
size: "sm",
|
|
64
|
+
onClick: onNext,
|
|
65
|
+
disabled: !canProceed,
|
|
66
|
+
children: isLastStep ? "Finish Setup" : "Next"
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
!isFirstStep && /* @__PURE__ */ jsx(Button, { variant: "outline-secondary", size: "sm", onClick: onBack, children: "Back" }),
|
|
70
|
+
onSkip && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onSkip, children: "Skip for now" })
|
|
71
|
+
] })
|
|
72
|
+
] })
|
|
73
|
+
] });
|
|
74
|
+
}
|
|
75
|
+
function OnboardingLayout({
|
|
76
|
+
steps,
|
|
77
|
+
currentStepIndex,
|
|
78
|
+
nextLabel,
|
|
79
|
+
canProceed = true,
|
|
80
|
+
onBack,
|
|
81
|
+
onNext,
|
|
82
|
+
onSkip,
|
|
83
|
+
onUpgrade,
|
|
84
|
+
className,
|
|
85
|
+
children
|
|
86
|
+
}) {
|
|
87
|
+
var _a;
|
|
88
|
+
const isFirstStep = currentStepIndex === 0;
|
|
89
|
+
const isLastStep = currentStepIndex === steps.length - 1;
|
|
90
|
+
const currentStep = steps[currentStepIndex];
|
|
91
|
+
const isLocked = (_a = currentStep == null ? void 0 : currentStep.isLocked) != null ? _a : false;
|
|
92
|
+
const primaryLabel = isLocked ? "Upgrade Plan" : isLastStep ? "Finish Setup" : nextLabel != null ? nextLabel : "Next";
|
|
93
|
+
return /* @__PURE__ */ jsxs(
|
|
94
|
+
"div",
|
|
95
|
+
{
|
|
96
|
+
className: cn("flex h-full flex-col bg-background font-sans", className),
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ jsx("div", { className: "px-8 pt-5 pb-3", children: /* @__PURE__ */ jsx(Stepper, { activeStep: currentStepIndex, children: steps.map((step) => /* @__PURE__ */ jsx(Step, { children: /* @__PURE__ */ jsx(
|
|
99
|
+
StepItem,
|
|
100
|
+
{
|
|
101
|
+
label: step.title,
|
|
102
|
+
description: step.isLocked ? "Upgrade to unlock" : step.isOptional ? "Optional" : void 0
|
|
103
|
+
}
|
|
104
|
+
) }, step.id)) }) }),
|
|
105
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-8 pt-4 pb-6", children }),
|
|
106
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-t border-border px-8 py-4", children: [
|
|
107
|
+
/* @__PURE__ */ jsx("div", { children: onSkip && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onSkip, children: "Skip for now" }) }),
|
|
108
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
109
|
+
!isFirstStep && /* @__PURE__ */ jsx(Button, { variant: "outline-secondary", size: "sm", onClick: onBack, children: "Back" }),
|
|
110
|
+
/* @__PURE__ */ jsx(
|
|
111
|
+
Button,
|
|
112
|
+
{
|
|
113
|
+
size: "sm",
|
|
114
|
+
onClick: isLocked ? onUpgrade : onNext,
|
|
115
|
+
disabled: !isLocked && !canProceed,
|
|
116
|
+
children: primaryLabel
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
] })
|
|
120
|
+
] })
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export {
|
|
127
|
+
OnboardingPanelLayout,
|
|
128
|
+
OnboardingLayout
|
|
129
|
+
};
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tooltip,
|
|
3
|
+
TooltipContent,
|
|
4
|
+
TooltipProvider,
|
|
5
|
+
TooltipTrigger
|
|
6
|
+
} from "./chunk-6SR4K5T5.mjs";
|
|
1
7
|
import {
|
|
2
8
|
useThemeVars
|
|
3
9
|
} from "./chunk-WDTXHLYM.mjs";
|
|
@@ -28,8 +34,6 @@ function PipelineChart({
|
|
|
28
34
|
}) {
|
|
29
35
|
const themeVars = useThemeVars();
|
|
30
36
|
const [activeId, setActiveId] = React.useState(null);
|
|
31
|
-
const [tooltipX, setTooltipX] = React.useState(0);
|
|
32
|
-
const barRef = React.useRef(null);
|
|
33
37
|
const nonEmpty = stages.filter((s) => s.value > 0);
|
|
34
38
|
const total = nonEmpty.reduce((sum, s) => sum + s.value, 0);
|
|
35
39
|
if (total === 0 || stages.length === 0) {
|
|
@@ -46,7 +50,6 @@ function PipelineChart({
|
|
|
46
50
|
}
|
|
47
51
|
);
|
|
48
52
|
}
|
|
49
|
-
const activeStage = activeId ? stages.find((s) => s.id === activeId) : null;
|
|
50
53
|
return /* @__PURE__ */ jsxs(
|
|
51
54
|
"div",
|
|
52
55
|
{
|
|
@@ -54,58 +57,47 @@ function PipelineChart({
|
|
|
54
57
|
"data-slot": "pipeline-chart",
|
|
55
58
|
style: themeVars,
|
|
56
59
|
children: [
|
|
57
|
-
/* @__PURE__ */
|
|
60
|
+
/* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(
|
|
58
61
|
"div",
|
|
59
62
|
{
|
|
60
|
-
ref: barRef,
|
|
61
63
|
className: "relative flex w-full overflow-hidden",
|
|
62
64
|
style: { height: barHeight },
|
|
63
|
-
children:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
children: nonEmpty.map((stage, i) => {
|
|
66
|
+
var _a;
|
|
67
|
+
const pct = stage.value / total * 100;
|
|
68
|
+
const color = (_a = stage.color) != null ? _a : FALLBACK_COLORS[i % FALLBACK_COLORS.length];
|
|
69
|
+
const isActive = activeId === stage.id;
|
|
70
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
71
|
+
/* @__PURE__ */ jsx(
|
|
72
|
+
TooltipTrigger,
|
|
71
73
|
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
stage.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
className: "pointer-events-none absolute -top-8 z-10 whitespace-nowrap border border-border bg-popover px-2 py-1 text-xs text-popover-foreground shadow-sm",
|
|
98
|
-
style: { left: tooltipX, transform: "translateX(-50%)" },
|
|
99
|
-
children: [
|
|
100
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium", children: activeStage.name }),
|
|
101
|
-
" \u2014 ",
|
|
102
|
-
formatValue(activeStage.value)
|
|
103
|
-
]
|
|
104
|
-
}
|
|
105
|
-
)
|
|
106
|
-
]
|
|
74
|
+
render: /* @__PURE__ */ jsx(
|
|
75
|
+
"div",
|
|
76
|
+
{
|
|
77
|
+
role: "img",
|
|
78
|
+
className: "relative h-full cursor-pointer transition-opacity",
|
|
79
|
+
style: {
|
|
80
|
+
width: `${pct}%`,
|
|
81
|
+
backgroundColor: color,
|
|
82
|
+
opacity: activeId && !isActive ? 0.5 : 1,
|
|
83
|
+
minWidth: 2
|
|
84
|
+
},
|
|
85
|
+
onMouseEnter: () => setActiveId(stage.id),
|
|
86
|
+
onMouseLeave: () => setActiveId(null),
|
|
87
|
+
"aria-label": `${stage.name}: ${formatValue(stage.value)}`
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
/* @__PURE__ */ jsxs(TooltipContent, { side: "top", children: [
|
|
93
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium", children: stage.name }),
|
|
94
|
+
" \u2014 ",
|
|
95
|
+
formatValue(stage.value)
|
|
96
|
+
] })
|
|
97
|
+
] }, stage.id);
|
|
98
|
+
})
|
|
107
99
|
}
|
|
108
|
-
),
|
|
100
|
+
) }),
|
|
109
101
|
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-x-4 gap-y-1.5", children: nonEmpty.map((stage, i) => {
|
|
110
102
|
var _a;
|
|
111
103
|
const color = (_a = stage.color) != null ? _a : FALLBACK_COLORS[i % FALLBACK_COLORS.length];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KanbanColumn
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HRHXZIX5.mjs";
|
|
4
4
|
import {
|
|
5
5
|
ToggleGroup,
|
|
6
6
|
ToggleGroupItem
|
|
@@ -98,7 +98,6 @@ function PipelineBoard({
|
|
|
98
98
|
onMoveToNextStage,
|
|
99
99
|
onViewDetails,
|
|
100
100
|
onChangePriority,
|
|
101
|
-
onLaunchAssistant,
|
|
102
101
|
onPutOnHold,
|
|
103
102
|
onDeleteOpportunity,
|
|
104
103
|
submittingOpportunityId,
|
|
@@ -147,7 +146,6 @@ function PipelineBoard({
|
|
|
147
146
|
onSendLoanApplication: col.onSendLoanApplication,
|
|
148
147
|
onViewDetails,
|
|
149
148
|
onChangePriority,
|
|
150
|
-
onLaunchAssistant,
|
|
151
149
|
onPutOnHold,
|
|
152
150
|
onDeleteOpportunity,
|
|
153
151
|
submittingOpportunityId
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Badge
|
|
3
|
+
} from "./chunk-WL6WVV47.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Button
|
|
6
|
+
} from "./chunk-NOOEKOWY.mjs";
|
|
7
|
+
import {
|
|
8
|
+
cn
|
|
9
|
+
} from "./chunk-AFML43VJ.mjs";
|
|
10
|
+
|
|
11
|
+
// src/components/ui/integration-card.tsx
|
|
12
|
+
import { Check } from "lucide-react";
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
function IntegrationCard({
|
|
15
|
+
name,
|
|
16
|
+
description,
|
|
17
|
+
logoSrc,
|
|
18
|
+
logoFallback,
|
|
19
|
+
connected = false,
|
|
20
|
+
onConnect,
|
|
21
|
+
onDisconnect,
|
|
22
|
+
children,
|
|
23
|
+
className
|
|
24
|
+
}) {
|
|
25
|
+
const hasLogo = Boolean(logoSrc || logoFallback);
|
|
26
|
+
return /* @__PURE__ */ jsxs(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
className: cn(
|
|
30
|
+
"flex flex-col gap-3 border border-border p-4",
|
|
31
|
+
connected && "bg-muted/20",
|
|
32
|
+
className
|
|
33
|
+
),
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
36
|
+
hasLogo && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: logoSrc ? /* @__PURE__ */ jsx(
|
|
37
|
+
"img",
|
|
38
|
+
{
|
|
39
|
+
src: logoSrc,
|
|
40
|
+
alt: `${name} logo`,
|
|
41
|
+
className: "h-8 w-16 object-contain object-left"
|
|
42
|
+
}
|
|
43
|
+
) : /* @__PURE__ */ jsx("div", { className: "flex h-9 w-9 items-center justify-center", children: logoFallback }) }),
|
|
44
|
+
/* @__PURE__ */ jsx("span", { className: "text-label-medium", children: name }),
|
|
45
|
+
connected && /* @__PURE__ */ jsxs(Badge, { variant: "success", className: "gap-1", children: [
|
|
46
|
+
/* @__PURE__ */ jsx(Check, { className: "h-3 w-3" }),
|
|
47
|
+
"Connected"
|
|
48
|
+
] })
|
|
49
|
+
] }),
|
|
50
|
+
/* @__PURE__ */ jsx("p", { className: "text-body-small text-muted-foreground", children: description }),
|
|
51
|
+
children,
|
|
52
|
+
!connected && onConnect && /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: onConnect, children: "Connect" }) }),
|
|
53
|
+
connected && onDisconnect && /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: onDisconnect, children: "Disconnect" }) })
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
IntegrationCard
|
|
61
|
+
};
|
|
@@ -27,10 +27,10 @@ import {
|
|
|
27
27
|
} from "./chunk-NCUH54IZ.mjs";
|
|
28
28
|
import {
|
|
29
29
|
DatePicker
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-C2QMHKLT.mjs";
|
|
31
31
|
import {
|
|
32
32
|
formatDateWithWeekday
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-LHWJQNLG.mjs";
|
|
34
34
|
import {
|
|
35
35
|
Label
|
|
36
36
|
} from "./chunk-P7CEBZM6.mjs";
|
|
@@ -79,32 +79,6 @@ var MEETING_PLATFORM_OPTIONS = [
|
|
|
79
79
|
{ value: "microsoft-teams", label: "Microsoft Teams" },
|
|
80
80
|
{ value: "any", label: "Let client choose" }
|
|
81
81
|
];
|
|
82
|
-
var MEETING_DURATION_OPTIONS = [
|
|
83
|
-
{ value: "15", label: "15 minutes" },
|
|
84
|
-
{ value: "30", label: "30 minutes" },
|
|
85
|
-
{ value: "45", label: "45 minutes" },
|
|
86
|
-
{ value: "60", label: "60 minutes" },
|
|
87
|
-
{ value: "90", label: "90 minutes" }
|
|
88
|
-
];
|
|
89
|
-
var SCHEDULING_BUFFER_OPTIONS = [
|
|
90
|
-
{ value: "0", label: "No buffer" },
|
|
91
|
-
{ value: "5", label: "5 minutes" },
|
|
92
|
-
{ value: "10", label: "10 minutes" },
|
|
93
|
-
{ value: "15", label: "15 minutes" },
|
|
94
|
-
{ value: "30", label: "30 minutes" }
|
|
95
|
-
];
|
|
96
|
-
var MAX_SLOTS_OPTIONS = [
|
|
97
|
-
{ value: "2", label: "2 per day" },
|
|
98
|
-
{ value: "4", label: "4 per day" },
|
|
99
|
-
{ value: "6", label: "6 per day" },
|
|
100
|
-
{ value: "8", label: "8 per day" },
|
|
101
|
-
{ value: "10", label: "10 per day" },
|
|
102
|
-
{ value: "unlimited", label: "Unlimited" }
|
|
103
|
-
];
|
|
104
|
-
var selectLabel = (opts, v) => {
|
|
105
|
-
var _a, _b;
|
|
106
|
-
return (_b = (_a = opts.find((o) => o.value === String(v))) == null ? void 0 : _a.label) != null ? _b : String(v != null ? v : "");
|
|
107
|
-
};
|
|
108
82
|
var TIME_OPTIONS = (() => {
|
|
109
83
|
const opts = [];
|
|
110
84
|
for (let h = 6; h <= 21; h++) {
|
|
@@ -490,7 +464,7 @@ function AppointmentAvailabilitySettings({
|
|
|
490
464
|
value: timezone,
|
|
491
465
|
onValueChange: (v) => setTimezone(v),
|
|
492
466
|
children: [
|
|
493
|
-
/* @__PURE__ */ jsx(SelectTrigger, { className: "w-56", children: /* @__PURE__ */ jsx(SelectValue, {
|
|
467
|
+
/* @__PURE__ */ jsx(SelectTrigger, { className: "w-56", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
494
468
|
/* @__PURE__ */ jsx(SelectContent, { children: TIMEZONE_OPTIONS.map((opt) => /* @__PURE__ */ jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
|
|
495
469
|
]
|
|
496
470
|
}
|
|
@@ -510,7 +484,7 @@ function AppointmentAvailabilitySettings({
|
|
|
510
484
|
v
|
|
511
485
|
),
|
|
512
486
|
children: [
|
|
513
|
-
/* @__PURE__ */ jsx(SelectTrigger, { className: "w-48", children: /* @__PURE__ */ jsx(SelectValue, {
|
|
487
|
+
/* @__PURE__ */ jsx(SelectTrigger, { className: "w-48", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
514
488
|
/* @__PURE__ */ jsx(SelectContent, { children: MEETING_PLATFORM_OPTIONS.map((opt) => /* @__PURE__ */ jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
|
|
515
489
|
]
|
|
516
490
|
}
|