@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.
Files changed (95) hide show
  1. package/.turbo/turbo-build.log +164 -158
  2. package/CHANGELOG.md +12 -0
  3. package/dist/{chunk-2LLFNGJZ.mjs → chunk-3OOUI5TO.mjs} +1 -1
  4. package/dist/{chunk-AUEUTZIC.mjs → chunk-3QAQQBCM.mjs} +2 -2
  5. package/dist/chunk-3Z75IKFO.mjs +34 -0
  6. package/dist/{chunk-RAKBWNQH.mjs → chunk-5WCIGJ3E.mjs} +26 -65
  7. package/dist/chunk-65PZNG4Y.mjs +129 -0
  8. package/dist/{chunk-D447W45Z.mjs → chunk-7OLKVKJF.mjs} +41 -49
  9. package/dist/{chunk-UEREFDAE.mjs → chunk-AZGLSIHF.mjs} +1 -1
  10. package/dist/{chunk-QRVEI6J3.mjs → chunk-BQBSYM2I.mjs} +1 -3
  11. package/dist/{chunk-BFB3UH7V.mjs → chunk-C2QMHKLT.mjs} +1 -1
  12. package/dist/chunk-CEEVYRQA.mjs +61 -0
  13. package/dist/{chunk-VJ3GC7W3.mjs → chunk-CXGZSIQN.mjs} +4 -30
  14. package/dist/{chunk-VLELWBEW.mjs → chunk-E2BNCA6L.mjs} +1 -1
  15. package/dist/{chunk-46Q4335I.mjs → chunk-F73QFUZH.mjs} +10 -20
  16. package/dist/{chunk-Q35PNFJ7.mjs → chunk-FBNEIYSE.mjs} +1 -1
  17. package/dist/{chunk-HO6S3ECM.mjs → chunk-G4WLCKFV.mjs} +1 -1
  18. package/dist/{chunk-ODO6BUOF.mjs → chunk-HRHXZIX5.mjs} +1 -3
  19. package/dist/{chunk-IXR4BQSQ.mjs → chunk-I6QVWQCD.mjs} +1 -1
  20. package/dist/{chunk-PV7PNA6K.mjs → chunk-IKDTOCSY.mjs} +2 -4
  21. package/dist/{chunk-Q5SGEIJV.mjs → chunk-IXKE6LHN.mjs} +1 -1
  22. package/dist/{chunk-OL65UQHQ.mjs → chunk-JCH2BG24.mjs} +26 -60
  23. package/dist/{chunk-PV3Y7QGK.mjs → chunk-LHWJQNLG.mjs} +3 -3
  24. package/dist/{chunk-JTG5R5YV.mjs → chunk-MS4PDUSU.mjs} +284 -58
  25. package/dist/{chunk-VFH632TB.mjs → chunk-SDNG4XL6.mjs} +1 -1
  26. package/dist/{chunk-DFL5CV75.mjs → chunk-T6MMCOX6.mjs} +1 -1
  27. package/dist/{chunk-6TX73WG7.mjs → chunk-TCE5L44O.mjs} +3 -2
  28. package/dist/{chunk-HROG643K.mjs → chunk-W5QJ57PU.mjs} +1 -1
  29. package/dist/{chunk-EW72FINW.mjs → chunk-XVZGXPIX.mjs} +1 -1
  30. package/dist/components/ui/about-you-form.mjs +3 -3
  31. package/dist/components/ui/add-column-modal.js +56 -227
  32. package/dist/components/ui/add-column-modal.mjs +1 -2
  33. package/dist/components/ui/ai-conversations.js +278 -58
  34. package/dist/components/ui/ai-conversations.mjs +1 -1
  35. package/dist/components/ui/appointment-action-dialogs.mjs +3 -3
  36. package/dist/components/ui/appointment-availability-settings.js +2 -28
  37. package/dist/components/ui/appointment-availability-settings.mjs +4 -4
  38. package/dist/components/ui/appointment-book-dialog.js +11 -21
  39. package/dist/components/ui/appointment-book-dialog.mjs +3 -3
  40. package/dist/components/ui/appointment-calendar-view.mjs +2 -2
  41. package/dist/components/ui/appointment-detail-sheet.mjs +4 -4
  42. package/dist/components/ui/appointment-upcoming-card.mjs +3 -3
  43. package/dist/components/ui/bank-statement-generate-dialog.mjs +4 -4
  44. package/dist/components/ui/calendar.mjs +2 -2
  45. package/dist/components/ui/dashboard-transactions-table.mjs +1 -1
  46. package/dist/components/ui/date-picker.mjs +3 -3
  47. package/dist/components/ui/financial-cards.mjs +2 -2
  48. package/dist/components/ui/financial-sections.mjs +3 -3
  49. package/dist/components/ui/integration-card.js +326 -0
  50. package/dist/components/ui/integration-card.mjs +11 -0
  51. package/dist/components/ui/kanban-column.js +151 -243
  52. package/dist/components/ui/kanban-column.mjs +3 -4
  53. package/dist/components/ui/loan-application-cards.mjs +1 -1
  54. package/dist/components/ui/onboarding-layout.js +65 -4
  55. package/dist/components/ui/onboarding-layout.mjs +6 -4
  56. package/dist/components/ui/opportunity-card.js +126 -216
  57. package/dist/components/ui/opportunity-card.mjs +2 -3
  58. package/dist/components/ui/opportunity-edit-modals.mjs +4 -4
  59. package/dist/components/ui/opportunity-summary-tab.mjs +6 -6
  60. package/dist/components/ui/pipeline-board.js +167 -261
  61. package/dist/components/ui/pipeline-board.mjs +4 -5
  62. package/dist/components/ui/pipeline-chart.js +128 -55
  63. package/dist/components/ui/pipeline-chart.mjs +2 -1
  64. package/dist/components/ui/pipeline-dialogs.mjs +4 -4
  65. package/dist/components/ui/savings-goal-modal.mjs +3 -3
  66. package/dist/components/ui/selectable-card.js +163 -0
  67. package/dist/components/ui/selectable-card.mjs +9 -0
  68. package/dist/components/ui/sidebar-nav.js +2 -4
  69. package/dist/components/ui/sidebar-nav.mjs +1 -1
  70. package/dist/components/ui/signup-shell.js +3 -2
  71. package/dist/components/ui/signup-shell.mjs +2 -2
  72. package/dist/components/ui/stepper.js +3 -2
  73. package/dist/components/ui/stepper.mjs +1 -1
  74. package/dist/index.js +2122 -1881
  75. package/dist/index.mjs +56 -46
  76. package/dist/styles.css +1 -1
  77. package/package.json +11 -1
  78. package/src/components/index.tsx +26 -2
  79. package/src/components/ui/add-column-modal.tsx +9 -58
  80. package/src/components/ui/ai-conversations.tsx +308 -42
  81. package/src/components/ui/appointment-availability-settings.tsx +2 -35
  82. package/src/components/ui/appointment-book-dialog.tsx +25 -48
  83. package/src/components/ui/integration-card.tsx +88 -0
  84. package/src/components/ui/kanban-column.tsx +0 -7
  85. package/src/components/ui/onboarding-layout.tsx +102 -1
  86. package/src/components/ui/opportunity-card.tsx +5 -53
  87. package/src/components/ui/pipeline-board.tsx +0 -3
  88. package/src/components/ui/pipeline-chart.tsx +47 -53
  89. package/src/components/ui/selectable-card.tsx +37 -0
  90. package/src/components/ui/sidebar-nav.tsx +0 -2
  91. package/src/components/ui/stepper.tsx +3 -2
  92. package/src/lib/format-date.ts +6 -6
  93. package/src/styles/styles-css.ts +1 -1
  94. package/tsup.config.ts +2 -0
  95. package/dist/chunk-2P7HP7LR.mjs +0 -68
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @wealthx/shadcn
2
2
 
3
+ ## 1.5.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 42c9830: Updates to loan-crm, signup flow, ai conversation
8
+
9
+ ## 1.5.6
10
+
11
+ ### Patch Changes
12
+
13
+ - 11fe18f: Update sidebar logo display
14
+
3
15
  ## 1.5.5
4
16
 
5
17
  ### Patch Changes
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-BD3DWDT4.mjs";
29
29
  import {
30
30
  Calendar
31
- } from "./chunk-Q35PNFJ7.mjs";
31
+ } from "./chunk-FBNEIYSE.mjs";
32
32
  import {
33
33
  Label
34
34
  } from "./chunk-P7CEBZM6.mjs";
@@ -6,14 +6,14 @@ import {
6
6
  EditIncomeModal,
7
7
  EditLoanScenarioModal,
8
8
  PROPERTY_ASSET_TYPES
9
- } from "./chunk-Q5SGEIJV.mjs";
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-HROG643K.mjs";
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-PV3Y7QGK.mjs";
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__ */ jsxs(Fragment, { children: [
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__ */ jsxs("div", { className: "flex items-center gap-1 -mr-1 -mt-1", onClick: stopProp, children: [
433
- onLaunchAssistant && /* @__PURE__ */ jsx(TooltipProvider, { delay: 0, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
434
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
435
- Button,
436
- {
437
- type: "button",
438
- variant: "ghost",
439
- size: "icon",
440
- className: "size-7 shrink-0",
441
- onClick: onLaunchAssistant,
442
- "aria-label": "Launch AI",
443
- children: /* @__PURE__ */ jsx(Bot, { className: "size-4" })
444
- }
445
- ) }),
446
- /* @__PURE__ */ jsx(TooltipContent, { children: "Launch AI" })
447
- ] }) }),
448
- hasMenu && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
449
- /* @__PURE__ */ jsx(
450
- DropdownMenuTrigger,
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(/^https?:\/\//, "")}`,
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__ */ jsxs(
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
- nonEmpty.map((stage, i) => {
65
- var _a;
66
- const pct = stage.value / total * 100;
67
- const color = (_a = stage.color) != null ? _a : FALLBACK_COLORS[i % FALLBACK_COLORS.length];
68
- const isActive = activeId === stage.id;
69
- return /* @__PURE__ */ jsx(
70
- "div",
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
- role: "img",
73
- className: "relative h-full cursor-pointer transition-opacity",
74
- style: {
75
- width: `${pct}%`,
76
- backgroundColor: color,
77
- opacity: activeId && !isActive ? 0.5 : 1,
78
- minWidth: 2
79
- },
80
- onMouseEnter: (e) => {
81
- setActiveId(stage.id);
82
- const bar = barRef.current;
83
- if (!bar) return;
84
- const rect = e.currentTarget.getBoundingClientRect();
85
- const barRect = bar.getBoundingClientRect();
86
- setTooltipX(rect.left + rect.width / 2 - barRect.left);
87
- },
88
- onMouseLeave: () => setActiveId(null),
89
- "aria-label": `${stage.name}: ${formatValue(stage.value)}`
90
- },
91
- stage.id
92
- );
93
- }),
94
- activeStage && /* @__PURE__ */ jsxs(
95
- "div",
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];
@@ -2,7 +2,7 @@ import {
2
2
  Step,
3
3
  StepItem,
4
4
  Stepper
5
- } from "./chunk-6TX73WG7.mjs";
5
+ } from "./chunk-TCE5L44O.mjs";
6
6
 
7
7
  // src/components/ui/signup-shell.tsx
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  KanbanColumn
3
- } from "./chunk-ODO6BUOF.mjs";
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
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-C6SWS7OW.mjs";
6
6
  import {
7
7
  Calendar
8
- } from "./chunk-Q35PNFJ7.mjs";
8
+ } from "./chunk-FBNEIYSE.mjs";
9
9
  import {
10
10
  Input
11
11
  } from "./chunk-LBTHZSBT.mjs";
@@ -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-BFB3UH7V.mjs";
30
+ } from "./chunk-C2QMHKLT.mjs";
31
31
  import {
32
32
  formatDateWithWeekday
33
- } from "./chunk-PV3Y7QGK.mjs";
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, { children: (v) => selectLabel(TIMEZONE_OPTIONS, v) }) }),
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, { children: (v) => selectLabel(MEETING_PLATFORM_OPTIONS, v) }) }),
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
  }