@wealthx/shadcn 1.5.1 → 1.5.3

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 (36) hide show
  1. package/.turbo/turbo-build.log +115 -115
  2. package/CHANGELOG.md +12 -0
  3. package/dist/chunk-G2EWIP2N.mjs +960 -0
  4. package/dist/{chunk-MHHA7QGO.mjs → chunk-ODO6BUOF.mjs} +1 -1
  5. package/dist/chunk-PX4M67XQ.mjs +301 -0
  6. package/dist/{chunk-FYUSF5KO.mjs → chunk-QRVEI6J3.mjs} +1 -1
  7. package/dist/{chunk-42NEC57Y.mjs → chunk-RAKBWNQH.mjs} +272 -3
  8. package/dist/components/ui/{contact-alert-dialog.js → contact-alert-dialog/index.js} +1029 -593
  9. package/dist/components/ui/contact-alert-dialog/index.mjs +31 -0
  10. package/dist/components/ui/file-preview-dialog.js +407 -100
  11. package/dist/components/ui/file-preview-dialog.mjs +3 -1
  12. package/dist/components/ui/kanban-column.js +408 -113
  13. package/dist/components/ui/kanban-column.mjs +3 -2
  14. package/dist/components/ui/opportunity-card.js +383 -88
  15. package/dist/components/ui/opportunity-card.mjs +2 -1
  16. package/dist/components/ui/pipeline-board.js +424 -129
  17. package/dist/components/ui/pipeline-board.mjs +4 -3
  18. package/dist/index.js +3081 -2282
  19. package/dist/index.mjs +39 -35
  20. package/dist/styles.css +1 -1
  21. package/package.json +5 -4
  22. package/src/components/index.tsx +3 -2
  23. package/src/components/ui/contact-alert-dialog/builder-ui.tsx +556 -0
  24. package/src/components/ui/contact-alert-dialog/config.ts +262 -0
  25. package/src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx +214 -0
  26. package/src/components/ui/contact-alert-dialog/index.tsx +15 -0
  27. package/src/components/ui/contact-alert-dialog/types.ts +61 -0
  28. package/src/components/ui/contact-alert-dialog/utils.ts +93 -0
  29. package/src/components/ui/file-preview-dialog.tsx +299 -99
  30. package/src/components/ui/opportunity-card.tsx +328 -1
  31. package/src/styles/styles-css.ts +1 -1
  32. package/tsup.config.ts +1 -1
  33. package/dist/chunk-5WMFKQZ6.mjs +0 -180
  34. package/dist/chunk-Y24TXIFJ.mjs +0 -518
  35. package/dist/components/ui/contact-alert-dialog.mjs +0 -27
  36. package/src/components/ui/contact-alert-dialog.tsx +0 -710
@@ -402,6 +402,7 @@ function DropdownMenuSeparator(_a) {
402
402
  }
403
403
 
404
404
  // src/components/ui/opportunity-card.tsx
405
+ var import_react5 = require("react");
405
406
  var import_lucide_react6 = require("lucide-react");
406
407
 
407
408
  // src/lib/format-date.ts
@@ -690,16 +691,48 @@ function TaskCheckItem({
690
691
  );
691
692
  }
692
693
 
694
+ // src/components/ui/progress.tsx
695
+ var import_progress = require("@base-ui/react/progress");
696
+ var import_jsx_runtime11 = require("react/jsx-runtime");
697
+ function Progress(_a) {
698
+ var _b = _a, {
699
+ className,
700
+ value
701
+ } = _b, props = __objRest(_b, [
702
+ "className",
703
+ "value"
704
+ ]);
705
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
706
+ import_progress.Progress.Root,
707
+ __spreadProps(__spreadValues({
708
+ className: cn(
709
+ "relative h-2 w-full overflow-hidden bg-muted",
710
+ className
711
+ ),
712
+ "data-slot": "progress",
713
+ value
714
+ }, props), {
715
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_progress.Progress.Track, { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
716
+ import_progress.Progress.Indicator,
717
+ {
718
+ className: "h-full bg-primary transition-all",
719
+ "data-slot": "progress-indicator"
720
+ }
721
+ ) })
722
+ })
723
+ );
724
+ }
725
+
693
726
  // src/components/ui/tooltip.tsx
694
727
  var import_tooltip = require("@base-ui/react/tooltip");
695
- var import_jsx_runtime11 = require("react/jsx-runtime");
728
+ var import_jsx_runtime12 = require("react/jsx-runtime");
696
729
  function TooltipProvider(_a) {
697
730
  var _b = _a, {
698
731
  delay = 0
699
732
  } = _b, props = __objRest(_b, [
700
733
  "delay"
701
734
  ]);
702
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
735
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
703
736
  import_tooltip.Tooltip.Provider,
704
737
  __spreadValues({
705
738
  "data-slot": "tooltip-provider",
@@ -709,11 +742,11 @@ function TooltipProvider(_a) {
709
742
  }
710
743
  function Tooltip(_a) {
711
744
  var props = __objRest(_a, []);
712
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
745
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
713
746
  }
714
747
  function TooltipTrigger(_a) {
715
748
  var props = __objRest(_a, []);
716
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
749
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
717
750
  }
718
751
  function TooltipContent(_a) {
719
752
  var _b = _a, {
@@ -730,7 +763,7 @@ function TooltipContent(_a) {
730
763
  "style"
731
764
  ]);
732
765
  const themeVars = useThemeVars();
733
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Positioner, { sideOffset, side, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
766
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tooltip.Tooltip.Positioner, { sideOffset, side, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
734
767
  import_tooltip.Tooltip.Popup,
735
768
  __spreadProps(__spreadValues({
736
769
  className: cn(
@@ -742,14 +775,14 @@ function TooltipContent(_a) {
742
775
  }, props), {
743
776
  children: [
744
777
  children,
745
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Arrow, { className: "z-50 size-2.5 rotate-45 bg-brand-secondary data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=right]:-left-1 data-[side=top]:-bottom-1" })
778
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tooltip.Tooltip.Arrow, { className: "z-50 size-2.5 rotate-45 bg-brand-secondary data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=right]:-left-1 data-[side=top]:-bottom-1" })
746
779
  ]
747
780
  })
748
781
  ) }) });
749
782
  }
750
783
 
751
784
  // src/components/ui/opportunity-card.tsx
752
- var import_jsx_runtime12 = require("react/jsx-runtime");
785
+ var import_jsx_runtime13 = require("react/jsx-runtime");
753
786
  var PRIORITY_COLORS = {
754
787
  HIGH: "var(--color-destructive)",
755
788
  MEDIUM: "var(--color-warning)",
@@ -772,7 +805,233 @@ function resolvePriority(days, warningDays, priorityDays, priority) {
772
805
  function formatLoanType(type) {
773
806
  return type.split("-").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
774
807
  }
808
+ function TaskViewCard({
809
+ customerName,
810
+ loanType,
811
+ loanPurposeLabel,
812
+ amount,
813
+ priority,
814
+ daysSinceColumnChanged,
815
+ warningDays,
816
+ priorityDays,
817
+ tasks = [],
818
+ nextTask,
819
+ onCardClick,
820
+ onViewDetails,
821
+ onTaskToggle,
822
+ onMarkAsDone,
823
+ onMoveToNextStage,
824
+ onChangePriority,
825
+ onDelete,
826
+ onPutOnHold,
827
+ isSubmitting = false,
828
+ draggable = false,
829
+ onDragStart,
830
+ className
831
+ }) {
832
+ var _a;
833
+ const resolvedPriority = resolvePriority(
834
+ daysSinceColumnChanged,
835
+ warningDays,
836
+ priorityDays,
837
+ priority
838
+ );
839
+ const priorityColor = PRIORITY_COLORS[resolvedPriority];
840
+ const completedCount = tasks.filter((t) => t.completed).length;
841
+ const totalCount = tasks.length;
842
+ const hasTasks = totalCount > 0;
843
+ const allDone = hasTasks && completedCount === totalCount;
844
+ const nextPendingTask = tasks.find((t) => !t.completed);
845
+ const agentName = (_a = nextPendingTask == null ? void 0 : nextPendingTask.aiAgentName) != null ? _a : null;
846
+ const [subtasksExpanded, setSubtasksExpanded] = (0, import_react5.useState)(false);
847
+ const hasMenu = onViewDetails || onChangePriority || onPutOnHold || onDelete;
848
+ const stopProp = (e) => {
849
+ e.stopPropagation();
850
+ };
851
+ const purposeLabel = loanPurposeLabel != null ? loanPurposeLabel : loanType ? formatLoanType(loanType) : null;
852
+ const dealRef = [
853
+ customerName,
854
+ purposeLabel,
855
+ amount > 0 ? formatCurrency(amount) : null
856
+ ].filter(Boolean).join(" \xB7 ");
857
+ let taskHeader;
858
+ if (allDone) {
859
+ taskHeader = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
860
+ "p",
861
+ {
862
+ className: "flex items-center gap-1.5 text-sm font-semibold",
863
+ style: { color: "var(--color-success-text)" },
864
+ children: [
865
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Check, { className: "size-3.5 shrink-0" }),
866
+ "All tasks complete"
867
+ ]
868
+ }
869
+ );
870
+ } else if (nextTask) {
871
+ taskHeader = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
872
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-1.5", children: [
873
+ agentName && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
874
+ import_lucide_react6.Bot,
875
+ {
876
+ className: "size-3.5 shrink-0 text-primary",
877
+ "aria-hidden": "true"
878
+ }
879
+ ),
880
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "truncate text-sm font-semibold leading-snug", children: nextTask })
881
+ ] }),
882
+ agentName && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: agentName })
883
+ ] });
884
+ } else {
885
+ taskHeader = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs text-muted-foreground", children: "No tasks defined for this stage" });
886
+ }
887
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
888
+ "div",
889
+ {
890
+ className: cn(
891
+ "flex flex-col gap-2.5 border border-border bg-background p-3 text-foreground shadow-sm",
892
+ onCardClick && "cursor-pointer",
893
+ draggable && "cursor-grab active:cursor-grabbing",
894
+ isSubmitting && "opacity-60",
895
+ className
896
+ ),
897
+ "data-slot": "opportunity-card",
898
+ draggable,
899
+ onDragStart,
900
+ onClick: onCardClick,
901
+ children: [
902
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-start gap-2", children: [
903
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "min-w-0 flex-1", children: taskHeader }),
904
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
905
+ "span",
906
+ {
907
+ role: "img",
908
+ className: "mt-0.5 inline-block size-2.5 shrink-0 rounded-full",
909
+ style: { backgroundColor: priorityColor },
910
+ "aria-label": `Priority: ${resolvedPriority}`
911
+ }
912
+ )
913
+ ] }),
914
+ hasTasks && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-2", children: [
915
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "shrink-0 tabular-nums text-xs text-muted-foreground", children: [
916
+ completedCount,
917
+ "/",
918
+ totalCount
919
+ ] }),
920
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
921
+ Progress,
922
+ {
923
+ value: completedCount / totalCount * 100,
924
+ className: cn(
925
+ "h-1.5 flex-1",
926
+ allDone && "[&_[data-slot=progress-indicator]]:bg-success"
927
+ )
928
+ }
929
+ )
930
+ ] }),
931
+ hasTasks && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
932
+ "div",
933
+ {
934
+ className: "space-y-1 border-t border-border pt-2",
935
+ onClick: stopProp,
936
+ role: "presentation",
937
+ onKeyDown: (e) => e.stopPropagation(),
938
+ children: [
939
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
940
+ "button",
941
+ {
942
+ type: "button",
943
+ onClick: () => setSubtasksExpanded((v) => !v),
944
+ className: "flex w-full items-center justify-between text-xs text-muted-foreground hover:text-foreground",
945
+ children: [
946
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1", children: [
947
+ subtasksExpanded ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.ChevronRight, { className: "size-3" }),
948
+ "Subtasks"
949
+ ] }),
950
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { children: [
951
+ completedCount,
952
+ " / ",
953
+ totalCount
954
+ ] })
955
+ ]
956
+ }
957
+ ),
958
+ subtasksExpanded && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "space-y-1.5 pt-1", children: tasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
959
+ TaskCheckItem,
960
+ {
961
+ title: task.title,
962
+ completed: task.completed,
963
+ aiAgentName: task.aiAgentName,
964
+ onToggle: () => onTaskToggle == null ? void 0 : onTaskToggle(task.id),
965
+ size: "xs"
966
+ },
967
+ task.id
968
+ )) })
969
+ ]
970
+ }
971
+ ),
972
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: dealRef }),
973
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-1.5", onClick: stopProp, children: [
974
+ daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Badge, { variant: "secondary", className: "px-1.5 text-[10px] font-normal", children: [
975
+ daysSinceColumnChanged,
976
+ "d"
977
+ ] }),
978
+ hasMenu && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "ml-auto", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenu, { children: [
979
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
980
+ DropdownMenuTrigger,
981
+ {
982
+ className: cn(
983
+ buttonVariants({ variant: "ghost", size: "icon" }),
984
+ "size-7 shrink-0"
985
+ ),
986
+ "aria-label": "Opportunity actions",
987
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
988
+ }
989
+ ),
990
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenuContent, { align: "end", children: [
991
+ onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
992
+ onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
993
+ onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
994
+ onDelete && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
995
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuSeparator, {}),
996
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
997
+ ] })
998
+ ] })
999
+ ] }) })
1000
+ ] }),
1001
+ allDone && onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { onClick: stopProp, children: [
1002
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Separator, {}),
1003
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1004
+ Button,
1005
+ {
1006
+ variant: "outline",
1007
+ size: "sm",
1008
+ className: "w-full text-caption",
1009
+ onClick: onMoveToNextStage,
1010
+ disabled: isSubmitting,
1011
+ children: "Move to next stage"
1012
+ }
1013
+ ) })
1014
+ ] }),
1015
+ !allDone && nextTask && onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { onClick: stopProp, children: [
1016
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Separator, {}),
1017
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1018
+ Button,
1019
+ {
1020
+ variant: "default",
1021
+ size: "sm",
1022
+ className: "w-full text-caption",
1023
+ onClick: onMarkAsDone,
1024
+ disabled: isSubmitting,
1025
+ children: "Mark as done"
1026
+ }
1027
+ ) })
1028
+ ] })
1029
+ ]
1030
+ }
1031
+ );
1032
+ }
775
1033
  function OpportunityCard({
1034
+ id,
776
1035
  customerName,
777
1036
  customerPhone,
778
1037
  customerEmail,
@@ -801,8 +1060,42 @@ function OpportunityCard({
801
1060
  isSubmitting = false,
802
1061
  draggable = false,
803
1062
  onDragStart,
804
- className
1063
+ className,
1064
+ viewMode = "deal"
805
1065
  }) {
1066
+ if (viewMode === "task") {
1067
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1068
+ TaskViewCard,
1069
+ {
1070
+ customerName,
1071
+ customerPhone,
1072
+ customerEmail,
1073
+ additionalContacts,
1074
+ loanType,
1075
+ loanPurposeLabel,
1076
+ amount,
1077
+ date,
1078
+ priority,
1079
+ daysSinceColumnChanged,
1080
+ warningDays,
1081
+ priorityDays,
1082
+ tasks,
1083
+ nextTask,
1084
+ onCardClick,
1085
+ onViewDetails,
1086
+ onTaskToggle,
1087
+ onMarkAsDone,
1088
+ onMoveToNextStage,
1089
+ onChangePriority,
1090
+ onDelete,
1091
+ onPutOnHold,
1092
+ isSubmitting,
1093
+ draggable,
1094
+ onDragStart,
1095
+ className
1096
+ }
1097
+ );
1098
+ }
806
1099
  const resolvedPriority = resolvePriority(
807
1100
  daysSinceColumnChanged,
808
1101
  warningDays,
@@ -815,8 +1108,10 @@ function OpportunityCard({
815
1108
  const hasTasks = tasks.length > 0;
816
1109
  const hasActions = onMarkAsDone || onMoveToNextStage;
817
1110
  const hasMenu = onViewDetails || onChangePriority || onPutOnHold || onDelete;
818
- const stopProp = (e) => e.stopPropagation();
819
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1111
+ const stopProp = (e) => {
1112
+ e.stopPropagation();
1113
+ };
1114
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
820
1115
  "div",
821
1116
  {
822
1117
  className: cn(
@@ -831,19 +1126,19 @@ function OpportunityCard({
831
1126
  onDragStart,
832
1127
  onClick: onCardClick,
833
1128
  children: [
834
- onHoldTo && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1129
+ onHoldTo && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
835
1130
  "div",
836
1131
  {
837
1132
  className: "flex items-center gap-1.5 rounded border border-warning/30 bg-warning/10 px-2 py-1 text-xs font-medium",
838
1133
  style: { color: "var(--color-warning-text)" },
839
1134
  children: [
840
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Clock, { className: "size-3 shrink-0" }),
1135
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Clock, { className: "size-3 shrink-0" }),
841
1136
  "On hold until ",
842
1137
  formatDateDayMonth(onHoldTo)
843
1138
  ]
844
1139
  }
845
1140
  ),
846
- isModifyCompletedLoan && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1141
+ isModifyCompletedLoan && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
847
1142
  "div",
848
1143
  {
849
1144
  className: "flex items-center gap-1.5 rounded border border-info/30 bg-info/10 px-2 py-1 text-xs font-medium",
@@ -851,14 +1146,14 @@ function OpportunityCard({
851
1146
  children: "Modify completed loan"
852
1147
  }
853
1148
  ),
854
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
855
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
856
- (loanPurposeLabel || loanType) && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
857
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
1149
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
1150
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
1151
+ (loanPurposeLabel || loanType) && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
1152
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
858
1153
  ] }),
859
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-1 -mr-1 -mt-1", onClick: stopProp, children: [
860
- onLaunchAssistant && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipProvider, { delay: 0, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Tooltip, { children: [
861
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1154
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-1 -mr-1 -mt-1", onClick: stopProp, children: [
1155
+ onLaunchAssistant && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TooltipProvider, { delay: 0, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Tooltip, { children: [
1156
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
862
1157
  Button,
863
1158
  {
864
1159
  type: "button",
@@ -867,13 +1162,13 @@ function OpportunityCard({
867
1162
  className: "size-7 shrink-0",
868
1163
  onClick: onLaunchAssistant,
869
1164
  "aria-label": "Launch AI",
870
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Bot, { className: "size-4" })
1165
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Bot, { className: "size-4" })
871
1166
  }
872
1167
  ) }),
873
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipContent, { children: "Launch AI" })
1168
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TooltipContent, { children: "Launch AI" })
874
1169
  ] }) }),
875
- hasMenu && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
876
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1170
+ hasMenu && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenu, { children: [
1171
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
877
1172
  DropdownMenuTrigger,
878
1173
  {
879
1174
  className: cn(
@@ -881,51 +1176,51 @@ function OpportunityCard({
881
1176
  "size-7 shrink-0"
882
1177
  ),
883
1178
  "aria-label": "Opportunity actions",
884
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
1179
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
885
1180
  }
886
1181
  ),
887
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenuContent, { align: "end", children: [
888
- onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
889
- onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
890
- onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
891
- onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
892
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuSeparator, {}),
893
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
1182
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenuContent, { align: "end", children: [
1183
+ onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
1184
+ onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
1185
+ onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
1186
+ onDelete && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1187
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuSeparator, {}),
1188
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
894
1189
  ] })
895
1190
  ] })
896
1191
  ] })
897
1192
  ] })
898
1193
  ] }),
899
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
900
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-1", children: [
901
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
902
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: customerName }),
903
- additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
904
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Users, { className: "size-3", "aria-hidden": "true" }),
1194
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Separator, {}),
1195
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-1", children: [
1196
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1197
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: customerName }),
1198
+ additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
1199
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Users, { className: "size-3", "aria-hidden": "true" }),
905
1200
  "Joint"
906
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
907
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.User, { className: "size-3", "aria-hidden": "true" }),
1201
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
1202
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.User, { className: "size-3", "aria-hidden": "true" }),
908
1203
  "Individual"
909
1204
  ] })
910
1205
  ] }),
911
- customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
912
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1206
+ customerPhone && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1207
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
913
1208
  customerPhone
914
1209
  ] }),
915
- customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
916
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
917
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
1210
+ customerEmail && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1211
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1212
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "truncate", children: customerEmail })
918
1213
  ] })
919
1214
  ] }),
920
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
921
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between", children: [
922
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
923
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1215
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Separator, {}),
1216
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between", children: [
1217
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1218
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
924
1219
  formatDateShort(date)
925
1220
  ] }),
926
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5", children: [
927
- daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
928
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1221
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5", children: [
1222
+ daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1223
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
929
1224
  import_lucide_react6.Clock,
930
1225
  {
931
1226
  className: "size-3 shrink-0",
@@ -933,7 +1228,7 @@ function OpportunityCard({
933
1228
  "aria-hidden": "true"
934
1229
  }
935
1230
  ),
936
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1231
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
937
1232
  "span",
938
1233
  {
939
1234
  className: "text-xs font-medium tabular-nums",
@@ -945,7 +1240,7 @@ function OpportunityCard({
945
1240
  }
946
1241
  )
947
1242
  ] }),
948
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1243
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
949
1244
  "span",
950
1245
  {
951
1246
  role: "img",
@@ -957,8 +1252,8 @@ function OpportunityCard({
957
1252
  ] })
958
1253
  ] }),
959
1254
  hasTasks && // stopPropagation: accordion expand/collapse + task checkboxes must not bubble to onCardClick
960
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
961
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1255
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { onClick: stopProp, children: [
1256
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
962
1257
  "div",
963
1258
  {
964
1259
  className: "flex gap-0.5",
@@ -967,7 +1262,7 @@ function OpportunityCard({
967
1262
  "aria-valuemin": 0,
968
1263
  "aria-valuemax": tasks.length,
969
1264
  "aria-label": `${completedCount} of ${tasks.length} tasks complete`,
970
- children: tasks.map((t, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1265
+ children: tasks.map((t, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
971
1266
  "div",
972
1267
  {
973
1268
  className: cn(
@@ -979,15 +1274,15 @@ function OpportunityCard({
979
1274
  ))
980
1275
  }
981
1276
  ),
982
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Accordion, { type: "single", collapsible: true, className: "-mx-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(AccordionItem, { value: "tasks", className: "border-0", children: [
983
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(AccordionTrigger, { className: "px-4 py-1.5 text-xs font-normal text-muted-foreground hover:no-underline hover:text-foreground [&>svg]:size-3.5", children: [
1277
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Accordion, { type: "single", collapsible: true, className: "-mx-4", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(AccordionItem, { value: "tasks", className: "border-0", children: [
1278
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(AccordionTrigger, { className: "px-4 py-1.5 text-xs font-normal text-muted-foreground hover:no-underline hover:text-foreground [&>svg]:size-3.5", children: [
984
1279
  "Tasks (",
985
1280
  completedCount,
986
1281
  "/",
987
1282
  tasks.length,
988
1283
  ")"
989
1284
  ] }),
990
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(AccordionContent, { className: "px-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex flex-col", children: tasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1285
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AccordionContent, { className: "px-4", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col", children: tasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
991
1286
  TaskCheckItem,
992
1287
  {
993
1288
  title: task.title,
@@ -999,23 +1294,23 @@ function OpportunityCard({
999
1294
  task.id
1000
1295
  )) }) })
1001
1296
  ] }) }),
1002
- nextTask && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start gap-1.5 border border-primary/30 bg-primary/5 px-2 py-1.5 text-xs", children: [
1003
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1297
+ nextTask && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-start gap-1.5 border border-primary/30 bg-primary/5 px-2 py-1.5 text-xs", children: [
1298
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1004
1299
  import_lucide_react6.ArrowRight,
1005
1300
  {
1006
1301
  className: "mt-0.5 size-3 shrink-0 text-primary",
1007
1302
  "aria-hidden": "true"
1008
1303
  }
1009
1304
  ),
1010
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-medium", children: "Next:" }),
1011
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-muted-foreground", children: nextTask })
1305
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "font-medium", children: "Next:" }),
1306
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-muted-foreground", children: nextTask })
1012
1307
  ] })
1013
1308
  ] }),
1014
1309
  hasActions && // stopPropagation: button clicks must not bubble to onCardClick
1015
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
1016
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
1017
- (onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex gap-2 pt-2", children: [
1018
- onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1310
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { onClick: stopProp, children: [
1311
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Separator, {}),
1312
+ (onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex gap-2 pt-2", children: [
1313
+ onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1019
1314
  Button,
1020
1315
  {
1021
1316
  variant: "outline",
@@ -1026,7 +1321,7 @@ function OpportunityCard({
1026
1321
  children: "Move to next stage"
1027
1322
  }
1028
1323
  ),
1029
- onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1324
+ onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1030
1325
  Button,
1031
1326
  {
1032
1327
  variant: "default",
@@ -1053,7 +1348,7 @@ function LeadCard({
1053
1348
  isSubmitting = false,
1054
1349
  className
1055
1350
  }) {
1056
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1351
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1057
1352
  "div",
1058
1353
  {
1059
1354
  className: cn(
@@ -1063,20 +1358,20 @@ function LeadCard({
1063
1358
  ),
1064
1359
  "data-slot": "lead-card",
1065
1360
  children: [
1066
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
1067
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
1068
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm font-semibold text-foreground", children: customerName }),
1069
- customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1070
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1361
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
1362
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
1363
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-sm font-semibold text-foreground", children: customerName }),
1364
+ customerPhone && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1365
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1071
1366
  customerPhone
1072
1367
  ] }),
1073
- customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1074
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1075
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
1368
+ customerEmail && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1369
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
1370
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "truncate", children: customerEmail })
1076
1371
  ] })
1077
1372
  ] }),
1078
- onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
1079
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1373
+ onDelete && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenu, { children: [
1374
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1080
1375
  DropdownMenuTrigger,
1081
1376
  {
1082
1377
  className: cn(
@@ -1084,10 +1379,10 @@ function LeadCard({
1084
1379
  "-mr-1 -mt-1 size-7 shrink-0"
1085
1380
  ),
1086
1381
  "aria-label": "Lead actions",
1087
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
1382
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
1088
1383
  }
1089
1384
  ),
1090
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1385
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1091
1386
  DropdownMenuItem,
1092
1387
  {
1093
1388
  onClick: onDelete,
@@ -1097,9 +1392,9 @@ function LeadCard({
1097
1392
  ) })
1098
1393
  ] })
1099
1394
  ] }),
1100
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
1101
- onSendLoanApplication && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-2", children: [
1102
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1395
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Separator, {}),
1396
+ onSendLoanApplication && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-2", children: [
1397
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1103
1398
  Button,
1104
1399
  {
1105
1400
  variant: "outline",
@@ -1110,10 +1405,10 @@ function LeadCard({
1110
1405
  children: "Send Loan Application Request"
1111
1406
  }
1112
1407
  ),
1113
- loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1408
+ loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1114
1409
  "Or the link below to fill out the loan application directly.",
1115
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("br", {}),
1116
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1410
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("br", {}),
1411
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1117
1412
  "a",
1118
1413
  {
1119
1414
  href: `https://${loanApplicationUrl.replace(/^https?:\/\//, "")}`,
@@ -1131,7 +1426,7 @@ function LeadCard({
1131
1426
  }
1132
1427
 
1133
1428
  // src/components/ui/kanban-column.tsx
1134
- var import_jsx_runtime13 = require("react/jsx-runtime");
1429
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1135
1430
  function formatTotalValue(value) {
1136
1431
  return formatCurrency(value);
1137
1432
  }
@@ -1187,7 +1482,7 @@ function KanbanColumn({
1187
1482
  const cardId = e.dataTransfer.getData("text/plain");
1188
1483
  if (cardId) onCardDrop(cardId);
1189
1484
  }
1190
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1485
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1191
1486
  "div",
1192
1487
  {
1193
1488
  className: cn(
@@ -1201,15 +1496,15 @@ function KanbanColumn({
1201
1496
  }),
1202
1497
  "data-slot": "kanban-column",
1203
1498
  children: [
1204
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-2 border-b border-border bg-background px-3 py-3", children: [
1205
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1206
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("h2", { className: "text-sm font-semibold text-foreground", children: [
1207
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-muted-foreground", children: stage.count }),
1499
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col gap-2 border-b border-border bg-background px-3 py-3", children: [
1500
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1501
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("h2", { className: "text-sm font-semibold text-foreground", children: [
1502
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-muted-foreground", children: stage.count }),
1208
1503
  " ",
1209
1504
  stage.name
1210
1505
  ] }),
1211
- hasMenu && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenu, { children: [
1212
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1506
+ hasMenu && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(DropdownMenu, { children: [
1507
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1213
1508
  DropdownMenuTrigger,
1214
1509
  {
1215
1510
  className: cn(
@@ -1217,14 +1512,14 @@ function KanbanColumn({
1217
1512
  "-mr-1 size-7 shrink-0"
1218
1513
  ),
1219
1514
  "aria-label": "Column actions",
1220
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react7.MoreVertical, { className: "size-4" })
1515
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react7.MoreVertical, { className: "size-4" })
1221
1516
  }
1222
1517
  ),
1223
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenuContent, { align: "end", children: [
1224
- onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
1225
- !isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1226
- onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuSeparator, {}),
1227
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1518
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(DropdownMenuContent, { align: "end", children: [
1519
+ onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
1520
+ !isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1521
+ onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuSeparator, {}),
1522
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1228
1523
  DropdownMenuItem,
1229
1524
  {
1230
1525
  onClick: onDeleteColumn,
@@ -1236,8 +1531,8 @@ function KanbanColumn({
1236
1531
  ] })
1237
1532
  ] })
1238
1533
  ] }),
1239
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1240
- stage.growth != null ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1534
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
1535
+ stage.growth != null ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1241
1536
  Badge,
1242
1537
  {
1243
1538
  variant: "outline",
@@ -1247,11 +1542,11 @@ function KanbanColumn({
1247
1542
  stage.growth
1248
1543
  ]
1249
1544
  }
1250
- ) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", {}),
1251
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: formatTotalValue(stage.totalValue) })
1545
+ ) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", {}),
1546
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: formatTotalValue(stage.totalValue) })
1252
1547
  ] })
1253
1548
  ] }),
1254
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1549
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1255
1550
  "div",
1256
1551
  {
1257
1552
  className: cn(
@@ -1262,13 +1557,13 @@ function KanbanColumn({
1262
1557
  onDragLeave: handleDragLeave,
1263
1558
  onDrop: handleDrop,
1264
1559
  children: [
1265
- (isDropTarget || isDragOver) && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "border border-dashed border-primary/40 bg-primary/5 px-3 py-2 text-center text-xs text-primary", children: [
1560
+ (isDropTarget || isDragOver) && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "border border-dashed border-primary/40 bg-primary/5 px-3 py-2 text-center text-xs text-primary", children: [
1266
1561
  "Drop here \u2192 ",
1267
1562
  stage.name
1268
1563
  ] }),
1269
- isLoading ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Spinner, { className: "size-5 text-muted-foreground" }) }) : opportunities.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs text-muted-foreground", children: "No opportunities in this stage" }) }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1564
+ isLoading ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Spinner, { className: "size-5 text-muted-foreground" }) }) : opportunities.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-xs text-muted-foreground", children: "No opportunities in this stage" }) }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1270
1565
  opportunities.map(
1271
- (opp) => onSendLoanApplication ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1566
+ (opp) => onSendLoanApplication ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1272
1567
  LeadCard,
1273
1568
  {
1274
1569
  id: opp.id,
@@ -1281,7 +1576,7 @@ function KanbanColumn({
1281
1576
  isSubmitting: submittingOpportunityId === opp.id
1282
1577
  },
1283
1578
  opp.id
1284
- ) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1579
+ ) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1285
1580
  OpportunityCard,
1286
1581
  __spreadProps(__spreadValues({}, opp), {
1287
1582
  draggable: !!onCardDrop,
@@ -1303,12 +1598,12 @@ function KanbanColumn({
1303
1598
  opp.id
1304
1599
  )
1305
1600
  ),
1306
- hasMore && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1601
+ hasMore && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1307
1602
  "div",
1308
1603
  {
1309
1604
  ref: loaderRef,
1310
1605
  className: "flex min-h-[50px] items-center justify-center",
1311
- children: isLoadingMore && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Spinner, { className: "size-5 text-muted-foreground" })
1606
+ children: isLoadingMore && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Spinner, { className: "size-5 text-muted-foreground" })
1312
1607
  }
1313
1608
  )
1314
1609
  ] })