@wealthx/shadcn 1.5.1 → 1.5.2
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 +118 -118
- package/CHANGELOG.md +6 -0
- package/dist/chunk-G2EWIP2N.mjs +960 -0
- package/dist/{chunk-MHHA7QGO.mjs → chunk-ODO6BUOF.mjs} +1 -1
- package/dist/chunk-PX4M67XQ.mjs +301 -0
- package/dist/{chunk-FYUSF5KO.mjs → chunk-QRVEI6J3.mjs} +1 -1
- package/dist/{chunk-42NEC57Y.mjs → chunk-RAKBWNQH.mjs} +272 -3
- package/dist/components/ui/{contact-alert-dialog.js → contact-alert-dialog/index.js} +1029 -593
- package/dist/components/ui/contact-alert-dialog/index.mjs +31 -0
- package/dist/components/ui/file-preview-dialog.js +407 -100
- package/dist/components/ui/file-preview-dialog.mjs +3 -1
- package/dist/components/ui/kanban-column.js +408 -113
- package/dist/components/ui/kanban-column.mjs +3 -2
- package/dist/components/ui/opportunity-card.js +383 -88
- package/dist/components/ui/opportunity-card.mjs +2 -1
- package/dist/components/ui/pipeline-board.js +424 -129
- package/dist/components/ui/pipeline-board.mjs +4 -3
- package/dist/index.js +3081 -2282
- package/dist/index.mjs +39 -35
- package/dist/styles.css +1 -1
- package/package.json +5 -4
- package/src/components/index.tsx +3 -2
- package/src/components/ui/contact-alert-dialog/builder-ui.tsx +556 -0
- package/src/components/ui/contact-alert-dialog/config.ts +262 -0
- package/src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx +214 -0
- package/src/components/ui/contact-alert-dialog/index.tsx +15 -0
- package/src/components/ui/contact-alert-dialog/types.ts +61 -0
- package/src/components/ui/contact-alert-dialog/utils.ts +93 -0
- package/src/components/ui/file-preview-dialog.tsx +299 -99
- package/src/components/ui/opportunity-card.tsx +328 -1
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +1 -1
- package/dist/chunk-5WMFKQZ6.mjs +0 -180
- package/dist/chunk-Y24TXIFJ.mjs +0 -518
- package/dist/components/ui/contact-alert-dialog.mjs +0 -27
- package/src/components/ui/contact-alert-dialog.tsx +0 -710
|
@@ -63,6 +63,7 @@ __export(opportunity_card_exports, {
|
|
|
63
63
|
OpportunityCard: () => OpportunityCard
|
|
64
64
|
});
|
|
65
65
|
module.exports = __toCommonJS(opportunity_card_exports);
|
|
66
|
+
var import_react5 = require("react");
|
|
66
67
|
var import_lucide_react5 = require("lucide-react");
|
|
67
68
|
|
|
68
69
|
// src/lib/utils.ts
|
|
@@ -660,16 +661,48 @@ function TaskCheckItem({
|
|
|
660
661
|
);
|
|
661
662
|
}
|
|
662
663
|
|
|
664
|
+
// src/components/ui/progress.tsx
|
|
665
|
+
var import_progress = require("@base-ui/react/progress");
|
|
666
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
667
|
+
function Progress(_a) {
|
|
668
|
+
var _b = _a, {
|
|
669
|
+
className,
|
|
670
|
+
value
|
|
671
|
+
} = _b, props = __objRest(_b, [
|
|
672
|
+
"className",
|
|
673
|
+
"value"
|
|
674
|
+
]);
|
|
675
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
676
|
+
import_progress.Progress.Root,
|
|
677
|
+
__spreadProps(__spreadValues({
|
|
678
|
+
className: cn(
|
|
679
|
+
"relative h-2 w-full overflow-hidden bg-muted",
|
|
680
|
+
className
|
|
681
|
+
),
|
|
682
|
+
"data-slot": "progress",
|
|
683
|
+
value
|
|
684
|
+
}, props), {
|
|
685
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_progress.Progress.Track, { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
686
|
+
import_progress.Progress.Indicator,
|
|
687
|
+
{
|
|
688
|
+
className: "h-full bg-primary transition-all",
|
|
689
|
+
"data-slot": "progress-indicator"
|
|
690
|
+
}
|
|
691
|
+
) })
|
|
692
|
+
})
|
|
693
|
+
);
|
|
694
|
+
}
|
|
695
|
+
|
|
663
696
|
// src/components/ui/tooltip.tsx
|
|
664
697
|
var import_tooltip = require("@base-ui/react/tooltip");
|
|
665
|
-
var
|
|
698
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
666
699
|
function TooltipProvider(_a) {
|
|
667
700
|
var _b = _a, {
|
|
668
701
|
delay = 0
|
|
669
702
|
} = _b, props = __objRest(_b, [
|
|
670
703
|
"delay"
|
|
671
704
|
]);
|
|
672
|
-
return /* @__PURE__ */ (0,
|
|
705
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
673
706
|
import_tooltip.Tooltip.Provider,
|
|
674
707
|
__spreadValues({
|
|
675
708
|
"data-slot": "tooltip-provider",
|
|
@@ -679,11 +712,11 @@ function TooltipProvider(_a) {
|
|
|
679
712
|
}
|
|
680
713
|
function Tooltip(_a) {
|
|
681
714
|
var props = __objRest(_a, []);
|
|
682
|
-
return /* @__PURE__ */ (0,
|
|
715
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
|
|
683
716
|
}
|
|
684
717
|
function TooltipTrigger(_a) {
|
|
685
718
|
var props = __objRest(_a, []);
|
|
686
|
-
return /* @__PURE__ */ (0,
|
|
719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
|
|
687
720
|
}
|
|
688
721
|
function TooltipContent(_a) {
|
|
689
722
|
var _b = _a, {
|
|
@@ -700,7 +733,7 @@ function TooltipContent(_a) {
|
|
|
700
733
|
"style"
|
|
701
734
|
]);
|
|
702
735
|
const themeVars = useThemeVars();
|
|
703
|
-
return /* @__PURE__ */ (0,
|
|
736
|
+
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)(
|
|
704
737
|
import_tooltip.Tooltip.Popup,
|
|
705
738
|
__spreadProps(__spreadValues({
|
|
706
739
|
className: cn(
|
|
@@ -712,14 +745,14 @@ function TooltipContent(_a) {
|
|
|
712
745
|
}, props), {
|
|
713
746
|
children: [
|
|
714
747
|
children,
|
|
715
|
-
/* @__PURE__ */ (0,
|
|
748
|
+
/* @__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" })
|
|
716
749
|
]
|
|
717
750
|
})
|
|
718
751
|
) }) });
|
|
719
752
|
}
|
|
720
753
|
|
|
721
754
|
// src/components/ui/opportunity-card.tsx
|
|
722
|
-
var
|
|
755
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
723
756
|
var PRIORITY_COLORS = {
|
|
724
757
|
HIGH: "var(--color-destructive)",
|
|
725
758
|
MEDIUM: "var(--color-warning)",
|
|
@@ -742,7 +775,233 @@ function resolvePriority(days, warningDays, priorityDays, priority) {
|
|
|
742
775
|
function formatLoanType(type) {
|
|
743
776
|
return type.split("-").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
|
|
744
777
|
}
|
|
778
|
+
function TaskViewCard({
|
|
779
|
+
customerName,
|
|
780
|
+
loanType,
|
|
781
|
+
loanPurposeLabel,
|
|
782
|
+
amount,
|
|
783
|
+
priority,
|
|
784
|
+
daysSinceColumnChanged,
|
|
785
|
+
warningDays,
|
|
786
|
+
priorityDays,
|
|
787
|
+
tasks = [],
|
|
788
|
+
nextTask,
|
|
789
|
+
onCardClick,
|
|
790
|
+
onViewDetails,
|
|
791
|
+
onTaskToggle,
|
|
792
|
+
onMarkAsDone,
|
|
793
|
+
onMoveToNextStage,
|
|
794
|
+
onChangePriority,
|
|
795
|
+
onDelete,
|
|
796
|
+
onPutOnHold,
|
|
797
|
+
isSubmitting = false,
|
|
798
|
+
draggable = false,
|
|
799
|
+
onDragStart,
|
|
800
|
+
className
|
|
801
|
+
}) {
|
|
802
|
+
var _a;
|
|
803
|
+
const resolvedPriority = resolvePriority(
|
|
804
|
+
daysSinceColumnChanged,
|
|
805
|
+
warningDays,
|
|
806
|
+
priorityDays,
|
|
807
|
+
priority
|
|
808
|
+
);
|
|
809
|
+
const priorityColor = PRIORITY_COLORS[resolvedPriority];
|
|
810
|
+
const completedCount = tasks.filter((t) => t.completed).length;
|
|
811
|
+
const totalCount = tasks.length;
|
|
812
|
+
const hasTasks = totalCount > 0;
|
|
813
|
+
const allDone = hasTasks && completedCount === totalCount;
|
|
814
|
+
const nextPendingTask = tasks.find((t) => !t.completed);
|
|
815
|
+
const agentName = (_a = nextPendingTask == null ? void 0 : nextPendingTask.aiAgentName) != null ? _a : null;
|
|
816
|
+
const [subtasksExpanded, setSubtasksExpanded] = (0, import_react5.useState)(false);
|
|
817
|
+
const hasMenu = onViewDetails || onChangePriority || onPutOnHold || onDelete;
|
|
818
|
+
const stopProp = (e) => {
|
|
819
|
+
e.stopPropagation();
|
|
820
|
+
};
|
|
821
|
+
const purposeLabel = loanPurposeLabel != null ? loanPurposeLabel : loanType ? formatLoanType(loanType) : null;
|
|
822
|
+
const dealRef = [
|
|
823
|
+
customerName,
|
|
824
|
+
purposeLabel,
|
|
825
|
+
amount > 0 ? formatCurrency(amount) : null
|
|
826
|
+
].filter(Boolean).join(" \xB7 ");
|
|
827
|
+
let taskHeader;
|
|
828
|
+
if (allDone) {
|
|
829
|
+
taskHeader = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
830
|
+
"p",
|
|
831
|
+
{
|
|
832
|
+
className: "flex items-center gap-1.5 text-sm font-semibold",
|
|
833
|
+
style: { color: "var(--color-success-text)" },
|
|
834
|
+
children: [
|
|
835
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Check, { className: "size-3.5 shrink-0" }),
|
|
836
|
+
"All tasks complete"
|
|
837
|
+
]
|
|
838
|
+
}
|
|
839
|
+
);
|
|
840
|
+
} else if (nextTask) {
|
|
841
|
+
taskHeader = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
842
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
843
|
+
agentName && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
844
|
+
import_lucide_react5.Bot,
|
|
845
|
+
{
|
|
846
|
+
className: "size-3.5 shrink-0 text-primary",
|
|
847
|
+
"aria-hidden": "true"
|
|
848
|
+
}
|
|
849
|
+
),
|
|
850
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "truncate text-sm font-semibold leading-snug", children: nextTask })
|
|
851
|
+
] }),
|
|
852
|
+
agentName && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: agentName })
|
|
853
|
+
] });
|
|
854
|
+
} else {
|
|
855
|
+
taskHeader = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-xs text-muted-foreground", children: "No tasks defined for this stage" });
|
|
856
|
+
}
|
|
857
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
858
|
+
"div",
|
|
859
|
+
{
|
|
860
|
+
className: cn(
|
|
861
|
+
"flex flex-col gap-2.5 border border-border bg-background p-3 text-foreground shadow-sm",
|
|
862
|
+
onCardClick && "cursor-pointer",
|
|
863
|
+
draggable && "cursor-grab active:cursor-grabbing",
|
|
864
|
+
isSubmitting && "opacity-60",
|
|
865
|
+
className
|
|
866
|
+
),
|
|
867
|
+
"data-slot": "opportunity-card",
|
|
868
|
+
draggable,
|
|
869
|
+
onDragStart,
|
|
870
|
+
onClick: onCardClick,
|
|
871
|
+
children: [
|
|
872
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start gap-2", children: [
|
|
873
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "min-w-0 flex-1", children: taskHeader }),
|
|
874
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
875
|
+
"span",
|
|
876
|
+
{
|
|
877
|
+
role: "img",
|
|
878
|
+
className: "mt-0.5 inline-block size-2.5 shrink-0 rounded-full",
|
|
879
|
+
style: { backgroundColor: priorityColor },
|
|
880
|
+
"aria-label": `Priority: ${resolvedPriority}`
|
|
881
|
+
}
|
|
882
|
+
)
|
|
883
|
+
] }),
|
|
884
|
+
hasTasks && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
885
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "shrink-0 tabular-nums text-xs text-muted-foreground", children: [
|
|
886
|
+
completedCount,
|
|
887
|
+
"/",
|
|
888
|
+
totalCount
|
|
889
|
+
] }),
|
|
890
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
891
|
+
Progress,
|
|
892
|
+
{
|
|
893
|
+
value: completedCount / totalCount * 100,
|
|
894
|
+
className: cn(
|
|
895
|
+
"h-1.5 flex-1",
|
|
896
|
+
allDone && "[&_[data-slot=progress-indicator]]:bg-success"
|
|
897
|
+
)
|
|
898
|
+
}
|
|
899
|
+
)
|
|
900
|
+
] }),
|
|
901
|
+
hasTasks && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
902
|
+
"div",
|
|
903
|
+
{
|
|
904
|
+
className: "space-y-1 border-t border-border pt-2",
|
|
905
|
+
onClick: stopProp,
|
|
906
|
+
role: "presentation",
|
|
907
|
+
onKeyDown: (e) => e.stopPropagation(),
|
|
908
|
+
children: [
|
|
909
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
910
|
+
"button",
|
|
911
|
+
{
|
|
912
|
+
type: "button",
|
|
913
|
+
onClick: () => setSubtasksExpanded((v) => !v),
|
|
914
|
+
className: "flex w-full items-center justify-between text-xs text-muted-foreground hover:text-foreground",
|
|
915
|
+
children: [
|
|
916
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1", children: [
|
|
917
|
+
subtasksExpanded ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.ChevronRight, { className: "size-3" }),
|
|
918
|
+
"Subtasks"
|
|
919
|
+
] }),
|
|
920
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { children: [
|
|
921
|
+
completedCount,
|
|
922
|
+
" / ",
|
|
923
|
+
totalCount
|
|
924
|
+
] })
|
|
925
|
+
]
|
|
926
|
+
}
|
|
927
|
+
),
|
|
928
|
+
subtasksExpanded && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "space-y-1.5 pt-1", children: tasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
929
|
+
TaskCheckItem,
|
|
930
|
+
{
|
|
931
|
+
title: task.title,
|
|
932
|
+
completed: task.completed,
|
|
933
|
+
aiAgentName: task.aiAgentName,
|
|
934
|
+
onToggle: () => onTaskToggle == null ? void 0 : onTaskToggle(task.id),
|
|
935
|
+
size: "xs"
|
|
936
|
+
},
|
|
937
|
+
task.id
|
|
938
|
+
)) })
|
|
939
|
+
]
|
|
940
|
+
}
|
|
941
|
+
),
|
|
942
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: dealRef }),
|
|
943
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-1.5", onClick: stopProp, children: [
|
|
944
|
+
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "px-1.5 text-[10px] font-normal", children: [
|
|
945
|
+
daysSinceColumnChanged,
|
|
946
|
+
"d"
|
|
947
|
+
] }),
|
|
948
|
+
hasMenu && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "ml-auto", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
|
|
949
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
950
|
+
DropdownMenuTrigger,
|
|
951
|
+
{
|
|
952
|
+
className: cn(
|
|
953
|
+
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
954
|
+
"size-7 shrink-0"
|
|
955
|
+
),
|
|
956
|
+
"aria-label": "Opportunity actions",
|
|
957
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.MoreVertical, { className: "size-4" })
|
|
958
|
+
}
|
|
959
|
+
),
|
|
960
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenuContent, { align: "end", children: [
|
|
961
|
+
onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
|
|
962
|
+
onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
|
|
963
|
+
onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
|
|
964
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
965
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuSeparator, {}),
|
|
966
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
|
|
967
|
+
] })
|
|
968
|
+
] })
|
|
969
|
+
] }) })
|
|
970
|
+
] }),
|
|
971
|
+
allDone && onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
972
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
973
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
974
|
+
Button,
|
|
975
|
+
{
|
|
976
|
+
variant: "outline",
|
|
977
|
+
size: "sm",
|
|
978
|
+
className: "w-full text-caption",
|
|
979
|
+
onClick: onMoveToNextStage,
|
|
980
|
+
disabled: isSubmitting,
|
|
981
|
+
children: "Move to next stage"
|
|
982
|
+
}
|
|
983
|
+
) })
|
|
984
|
+
] }),
|
|
985
|
+
!allDone && nextTask && onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
987
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
988
|
+
Button,
|
|
989
|
+
{
|
|
990
|
+
variant: "default",
|
|
991
|
+
size: "sm",
|
|
992
|
+
className: "w-full text-caption",
|
|
993
|
+
onClick: onMarkAsDone,
|
|
994
|
+
disabled: isSubmitting,
|
|
995
|
+
children: "Mark as done"
|
|
996
|
+
}
|
|
997
|
+
) })
|
|
998
|
+
] })
|
|
999
|
+
]
|
|
1000
|
+
}
|
|
1001
|
+
);
|
|
1002
|
+
}
|
|
745
1003
|
function OpportunityCard({
|
|
1004
|
+
id,
|
|
746
1005
|
customerName,
|
|
747
1006
|
customerPhone,
|
|
748
1007
|
customerEmail,
|
|
@@ -771,8 +1030,42 @@ function OpportunityCard({
|
|
|
771
1030
|
isSubmitting = false,
|
|
772
1031
|
draggable = false,
|
|
773
1032
|
onDragStart,
|
|
774
|
-
className
|
|
1033
|
+
className,
|
|
1034
|
+
viewMode = "deal"
|
|
775
1035
|
}) {
|
|
1036
|
+
if (viewMode === "task") {
|
|
1037
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1038
|
+
TaskViewCard,
|
|
1039
|
+
{
|
|
1040
|
+
customerName,
|
|
1041
|
+
customerPhone,
|
|
1042
|
+
customerEmail,
|
|
1043
|
+
additionalContacts,
|
|
1044
|
+
loanType,
|
|
1045
|
+
loanPurposeLabel,
|
|
1046
|
+
amount,
|
|
1047
|
+
date,
|
|
1048
|
+
priority,
|
|
1049
|
+
daysSinceColumnChanged,
|
|
1050
|
+
warningDays,
|
|
1051
|
+
priorityDays,
|
|
1052
|
+
tasks,
|
|
1053
|
+
nextTask,
|
|
1054
|
+
onCardClick,
|
|
1055
|
+
onViewDetails,
|
|
1056
|
+
onTaskToggle,
|
|
1057
|
+
onMarkAsDone,
|
|
1058
|
+
onMoveToNextStage,
|
|
1059
|
+
onChangePriority,
|
|
1060
|
+
onDelete,
|
|
1061
|
+
onPutOnHold,
|
|
1062
|
+
isSubmitting,
|
|
1063
|
+
draggable,
|
|
1064
|
+
onDragStart,
|
|
1065
|
+
className
|
|
1066
|
+
}
|
|
1067
|
+
);
|
|
1068
|
+
}
|
|
776
1069
|
const resolvedPriority = resolvePriority(
|
|
777
1070
|
daysSinceColumnChanged,
|
|
778
1071
|
warningDays,
|
|
@@ -785,8 +1078,10 @@ function OpportunityCard({
|
|
|
785
1078
|
const hasTasks = tasks.length > 0;
|
|
786
1079
|
const hasActions = onMarkAsDone || onMoveToNextStage;
|
|
787
1080
|
const hasMenu = onViewDetails || onChangePriority || onPutOnHold || onDelete;
|
|
788
|
-
const stopProp = (e) =>
|
|
789
|
-
|
|
1081
|
+
const stopProp = (e) => {
|
|
1082
|
+
e.stopPropagation();
|
|
1083
|
+
};
|
|
1084
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
790
1085
|
"div",
|
|
791
1086
|
{
|
|
792
1087
|
className: cn(
|
|
@@ -801,19 +1096,19 @@ function OpportunityCard({
|
|
|
801
1096
|
onDragStart,
|
|
802
1097
|
onClick: onCardClick,
|
|
803
1098
|
children: [
|
|
804
|
-
onHoldTo && /* @__PURE__ */ (0,
|
|
1099
|
+
onHoldTo && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
805
1100
|
"div",
|
|
806
1101
|
{
|
|
807
1102
|
className: "flex items-center gap-1.5 rounded border border-warning/30 bg-warning/10 px-2 py-1 text-xs font-medium",
|
|
808
1103
|
style: { color: "var(--color-warning-text)" },
|
|
809
1104
|
children: [
|
|
810
|
-
/* @__PURE__ */ (0,
|
|
1105
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Clock, { className: "size-3 shrink-0" }),
|
|
811
1106
|
"On hold until ",
|
|
812
1107
|
formatDateDayMonth(onHoldTo)
|
|
813
1108
|
]
|
|
814
1109
|
}
|
|
815
1110
|
),
|
|
816
|
-
isModifyCompletedLoan && /* @__PURE__ */ (0,
|
|
1111
|
+
isModifyCompletedLoan && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
817
1112
|
"div",
|
|
818
1113
|
{
|
|
819
1114
|
className: "flex items-center gap-1.5 rounded border border-info/30 bg-info/10 px-2 py-1 text-xs font-medium",
|
|
@@ -821,14 +1116,14 @@ function OpportunityCard({
|
|
|
821
1116
|
children: "Modify completed loan"
|
|
822
1117
|
}
|
|
823
1118
|
),
|
|
824
|
-
/* @__PURE__ */ (0,
|
|
825
|
-
/* @__PURE__ */ (0,
|
|
826
|
-
(loanPurposeLabel || loanType) && /* @__PURE__ */ (0,
|
|
827
|
-
/* @__PURE__ */ (0,
|
|
1119
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
|
|
1120
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
1121
|
+
(loanPurposeLabel || loanType) && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
|
|
1122
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
|
|
828
1123
|
] }),
|
|
829
|
-
/* @__PURE__ */ (0,
|
|
830
|
-
onLaunchAssistant && /* @__PURE__ */ (0,
|
|
831
|
-
/* @__PURE__ */ (0,
|
|
1124
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-1 -mr-1 -mt-1", onClick: stopProp, children: [
|
|
1125
|
+
onLaunchAssistant && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipProvider, { delay: 0, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Tooltip, { children: [
|
|
1126
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
832
1127
|
Button,
|
|
833
1128
|
{
|
|
834
1129
|
type: "button",
|
|
@@ -837,13 +1132,13 @@ function OpportunityCard({
|
|
|
837
1132
|
className: "size-7 shrink-0",
|
|
838
1133
|
onClick: onLaunchAssistant,
|
|
839
1134
|
"aria-label": "Launch AI",
|
|
840
|
-
children: /* @__PURE__ */ (0,
|
|
1135
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Bot, { className: "size-4" })
|
|
841
1136
|
}
|
|
842
1137
|
) }),
|
|
843
|
-
/* @__PURE__ */ (0,
|
|
1138
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipContent, { children: "Launch AI" })
|
|
844
1139
|
] }) }),
|
|
845
|
-
hasMenu && /* @__PURE__ */ (0,
|
|
846
|
-
/* @__PURE__ */ (0,
|
|
1140
|
+
hasMenu && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
|
|
1141
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
847
1142
|
DropdownMenuTrigger,
|
|
848
1143
|
{
|
|
849
1144
|
className: cn(
|
|
@@ -851,51 +1146,51 @@ function OpportunityCard({
|
|
|
851
1146
|
"size-7 shrink-0"
|
|
852
1147
|
),
|
|
853
1148
|
"aria-label": "Opportunity actions",
|
|
854
|
-
children: /* @__PURE__ */ (0,
|
|
1149
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.MoreVertical, { className: "size-4" })
|
|
855
1150
|
}
|
|
856
1151
|
),
|
|
857
|
-
/* @__PURE__ */ (0,
|
|
858
|
-
onViewDetails && /* @__PURE__ */ (0,
|
|
859
|
-
onChangePriority && /* @__PURE__ */ (0,
|
|
860
|
-
onPutOnHold && /* @__PURE__ */ (0,
|
|
861
|
-
onDelete && /* @__PURE__ */ (0,
|
|
862
|
-
/* @__PURE__ */ (0,
|
|
863
|
-
/* @__PURE__ */ (0,
|
|
1152
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenuContent, { align: "end", children: [
|
|
1153
|
+
onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
|
|
1154
|
+
onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
|
|
1155
|
+
onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
|
|
1156
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
1157
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuSeparator, {}),
|
|
1158
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
|
|
864
1159
|
] })
|
|
865
1160
|
] })
|
|
866
1161
|
] })
|
|
867
1162
|
] })
|
|
868
1163
|
] }),
|
|
869
|
-
/* @__PURE__ */ (0,
|
|
870
|
-
/* @__PURE__ */ (0,
|
|
871
|
-
/* @__PURE__ */ (0,
|
|
872
|
-
/* @__PURE__ */ (0,
|
|
873
|
-
additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0,
|
|
874
|
-
/* @__PURE__ */ (0,
|
|
1164
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1165
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
1166
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
1167
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: customerName }),
|
|
1168
|
+
additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
|
|
1169
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Users, { className: "size-3", "aria-hidden": "true" }),
|
|
875
1170
|
"Joint"
|
|
876
|
-
] }) : /* @__PURE__ */ (0,
|
|
877
|
-
/* @__PURE__ */ (0,
|
|
1171
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
|
|
1172
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.User, { className: "size-3", "aria-hidden": "true" }),
|
|
878
1173
|
"Individual"
|
|
879
1174
|
] })
|
|
880
1175
|
] }),
|
|
881
|
-
customerPhone && /* @__PURE__ */ (0,
|
|
882
|
-
/* @__PURE__ */ (0,
|
|
1176
|
+
customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1177
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
883
1178
|
customerPhone
|
|
884
1179
|
] }),
|
|
885
|
-
customerEmail && /* @__PURE__ */ (0,
|
|
886
|
-
/* @__PURE__ */ (0,
|
|
887
|
-
/* @__PURE__ */ (0,
|
|
1180
|
+
customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1181
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1182
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
|
|
888
1183
|
] })
|
|
889
1184
|
] }),
|
|
890
|
-
/* @__PURE__ */ (0,
|
|
891
|
-
/* @__PURE__ */ (0,
|
|
892
|
-
/* @__PURE__ */ (0,
|
|
893
|
-
/* @__PURE__ */ (0,
|
|
1185
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1186
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
1187
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1188
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
894
1189
|
formatDateShort(date)
|
|
895
1190
|
] }),
|
|
896
|
-
/* @__PURE__ */ (0,
|
|
897
|
-
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0,
|
|
898
|
-
/* @__PURE__ */ (0,
|
|
1191
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5", children: [
|
|
1192
|
+
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
1193
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
899
1194
|
import_lucide_react5.Clock,
|
|
900
1195
|
{
|
|
901
1196
|
className: "size-3 shrink-0",
|
|
@@ -903,7 +1198,7 @@ function OpportunityCard({
|
|
|
903
1198
|
"aria-hidden": "true"
|
|
904
1199
|
}
|
|
905
1200
|
),
|
|
906
|
-
/* @__PURE__ */ (0,
|
|
1201
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
907
1202
|
"span",
|
|
908
1203
|
{
|
|
909
1204
|
className: "text-xs font-medium tabular-nums",
|
|
@@ -915,7 +1210,7 @@ function OpportunityCard({
|
|
|
915
1210
|
}
|
|
916
1211
|
)
|
|
917
1212
|
] }),
|
|
918
|
-
/* @__PURE__ */ (0,
|
|
1213
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
919
1214
|
"span",
|
|
920
1215
|
{
|
|
921
1216
|
role: "img",
|
|
@@ -927,8 +1222,8 @@ function OpportunityCard({
|
|
|
927
1222
|
] })
|
|
928
1223
|
] }),
|
|
929
1224
|
hasTasks && // stopPropagation: accordion expand/collapse + task checkboxes must not bubble to onCardClick
|
|
930
|
-
/* @__PURE__ */ (0,
|
|
931
|
-
/* @__PURE__ */ (0,
|
|
1225
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
1226
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
932
1227
|
"div",
|
|
933
1228
|
{
|
|
934
1229
|
className: "flex gap-0.5",
|
|
@@ -937,7 +1232,7 @@ function OpportunityCard({
|
|
|
937
1232
|
"aria-valuemin": 0,
|
|
938
1233
|
"aria-valuemax": tasks.length,
|
|
939
1234
|
"aria-label": `${completedCount} of ${tasks.length} tasks complete`,
|
|
940
|
-
children: tasks.map((t, i) => /* @__PURE__ */ (0,
|
|
1235
|
+
children: tasks.map((t, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
941
1236
|
"div",
|
|
942
1237
|
{
|
|
943
1238
|
className: cn(
|
|
@@ -949,15 +1244,15 @@ function OpportunityCard({
|
|
|
949
1244
|
))
|
|
950
1245
|
}
|
|
951
1246
|
),
|
|
952
|
-
/* @__PURE__ */ (0,
|
|
953
|
-
/* @__PURE__ */ (0,
|
|
1247
|
+
/* @__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: [
|
|
1248
|
+
/* @__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: [
|
|
954
1249
|
"Tasks (",
|
|
955
1250
|
completedCount,
|
|
956
1251
|
"/",
|
|
957
1252
|
tasks.length,
|
|
958
1253
|
")"
|
|
959
1254
|
] }),
|
|
960
|
-
/* @__PURE__ */ (0,
|
|
1255
|
+
/* @__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)(
|
|
961
1256
|
TaskCheckItem,
|
|
962
1257
|
{
|
|
963
1258
|
title: task.title,
|
|
@@ -969,23 +1264,23 @@ function OpportunityCard({
|
|
|
969
1264
|
task.id
|
|
970
1265
|
)) }) })
|
|
971
1266
|
] }) }),
|
|
972
|
-
nextTask && /* @__PURE__ */ (0,
|
|
973
|
-
/* @__PURE__ */ (0,
|
|
1267
|
+
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: [
|
|
1268
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
974
1269
|
import_lucide_react5.ArrowRight,
|
|
975
1270
|
{
|
|
976
1271
|
className: "mt-0.5 size-3 shrink-0 text-primary",
|
|
977
1272
|
"aria-hidden": "true"
|
|
978
1273
|
}
|
|
979
1274
|
),
|
|
980
|
-
/* @__PURE__ */ (0,
|
|
981
|
-
/* @__PURE__ */ (0,
|
|
1275
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-medium", children: "Next:" }),
|
|
1276
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-muted-foreground", children: nextTask })
|
|
982
1277
|
] })
|
|
983
1278
|
] }),
|
|
984
1279
|
hasActions && // stopPropagation: button clicks must not bubble to onCardClick
|
|
985
|
-
/* @__PURE__ */ (0,
|
|
986
|
-
/* @__PURE__ */ (0,
|
|
987
|
-
(onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0,
|
|
988
|
-
onMoveToNextStage && /* @__PURE__ */ (0,
|
|
1280
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
1281
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1282
|
+
(onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex gap-2 pt-2", children: [
|
|
1283
|
+
onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
989
1284
|
Button,
|
|
990
1285
|
{
|
|
991
1286
|
variant: "outline",
|
|
@@ -996,7 +1291,7 @@ function OpportunityCard({
|
|
|
996
1291
|
children: "Move to next stage"
|
|
997
1292
|
}
|
|
998
1293
|
),
|
|
999
|
-
onMarkAsDone && /* @__PURE__ */ (0,
|
|
1294
|
+
onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1000
1295
|
Button,
|
|
1001
1296
|
{
|
|
1002
1297
|
variant: "default",
|
|
@@ -1023,7 +1318,7 @@ function LeadCard({
|
|
|
1023
1318
|
isSubmitting = false,
|
|
1024
1319
|
className
|
|
1025
1320
|
}) {
|
|
1026
|
-
return /* @__PURE__ */ (0,
|
|
1321
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1027
1322
|
"div",
|
|
1028
1323
|
{
|
|
1029
1324
|
className: cn(
|
|
@@ -1033,20 +1328,20 @@ function LeadCard({
|
|
|
1033
1328
|
),
|
|
1034
1329
|
"data-slot": "lead-card",
|
|
1035
1330
|
children: [
|
|
1036
|
-
/* @__PURE__ */ (0,
|
|
1037
|
-
/* @__PURE__ */ (0,
|
|
1038
|
-
/* @__PURE__ */ (0,
|
|
1039
|
-
customerPhone && /* @__PURE__ */ (0,
|
|
1040
|
-
/* @__PURE__ */ (0,
|
|
1331
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
|
|
1332
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
1333
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm font-semibold text-foreground", children: customerName }),
|
|
1334
|
+
customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1335
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1041
1336
|
customerPhone
|
|
1042
1337
|
] }),
|
|
1043
|
-
customerEmail && /* @__PURE__ */ (0,
|
|
1044
|
-
/* @__PURE__ */ (0,
|
|
1045
|
-
/* @__PURE__ */ (0,
|
|
1338
|
+
customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1339
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1340
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
|
|
1046
1341
|
] })
|
|
1047
1342
|
] }),
|
|
1048
|
-
onDelete && /* @__PURE__ */ (0,
|
|
1049
|
-
/* @__PURE__ */ (0,
|
|
1343
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
|
|
1344
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1050
1345
|
DropdownMenuTrigger,
|
|
1051
1346
|
{
|
|
1052
1347
|
className: cn(
|
|
@@ -1054,10 +1349,10 @@ function LeadCard({
|
|
|
1054
1349
|
"-mr-1 -mt-1 size-7 shrink-0"
|
|
1055
1350
|
),
|
|
1056
1351
|
"aria-label": "Lead actions",
|
|
1057
|
-
children: /* @__PURE__ */ (0,
|
|
1352
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.MoreVertical, { className: "size-4" })
|
|
1058
1353
|
}
|
|
1059
1354
|
),
|
|
1060
|
-
/* @__PURE__ */ (0,
|
|
1355
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1061
1356
|
DropdownMenuItem,
|
|
1062
1357
|
{
|
|
1063
1358
|
onClick: onDelete,
|
|
@@ -1067,9 +1362,9 @@ function LeadCard({
|
|
|
1067
1362
|
) })
|
|
1068
1363
|
] })
|
|
1069
1364
|
] }),
|
|
1070
|
-
/* @__PURE__ */ (0,
|
|
1071
|
-
onSendLoanApplication && /* @__PURE__ */ (0,
|
|
1072
|
-
/* @__PURE__ */ (0,
|
|
1365
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1366
|
+
onSendLoanApplication && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
1367
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1073
1368
|
Button,
|
|
1074
1369
|
{
|
|
1075
1370
|
variant: "outline",
|
|
@@ -1080,10 +1375,10 @@ function LeadCard({
|
|
|
1080
1375
|
children: "Send Loan Application Request"
|
|
1081
1376
|
}
|
|
1082
1377
|
),
|
|
1083
|
-
loanApplicationUrl && /* @__PURE__ */ (0,
|
|
1378
|
+
loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
|
|
1084
1379
|
"Or the link below to fill out the loan application directly.",
|
|
1085
|
-
/* @__PURE__ */ (0,
|
|
1086
|
-
/* @__PURE__ */ (0,
|
|
1380
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("br", {}),
|
|
1381
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1087
1382
|
"a",
|
|
1088
1383
|
{
|
|
1089
1384
|
href: `https://${loanApplicationUrl.replace(/^https?:\/\//, "")}`,
|