@wealthx/shadcn 1.5.6 → 1.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +141 -135
- package/CHANGELOG.md +6 -0
- package/dist/{chunk-2LLFNGJZ.mjs → chunk-3OOUI5TO.mjs} +1 -1
- package/dist/{chunk-AUEUTZIC.mjs → chunk-3QAQQBCM.mjs} +2 -2
- package/dist/chunk-3Z75IKFO.mjs +34 -0
- package/dist/{chunk-RAKBWNQH.mjs → chunk-5WCIGJ3E.mjs} +26 -65
- package/dist/chunk-65PZNG4Y.mjs +129 -0
- package/dist/{chunk-D447W45Z.mjs → chunk-7OLKVKJF.mjs} +41 -49
- package/dist/{chunk-UEREFDAE.mjs → chunk-AZGLSIHF.mjs} +1 -1
- package/dist/{chunk-QRVEI6J3.mjs → chunk-BQBSYM2I.mjs} +1 -3
- package/dist/{chunk-BFB3UH7V.mjs → chunk-C2QMHKLT.mjs} +1 -1
- package/dist/chunk-CEEVYRQA.mjs +61 -0
- package/dist/{chunk-VJ3GC7W3.mjs → chunk-CXGZSIQN.mjs} +4 -30
- package/dist/{chunk-VLELWBEW.mjs → chunk-E2BNCA6L.mjs} +1 -1
- package/dist/{chunk-46Q4335I.mjs → chunk-F73QFUZH.mjs} +10 -20
- package/dist/{chunk-Q35PNFJ7.mjs → chunk-FBNEIYSE.mjs} +1 -1
- package/dist/{chunk-HO6S3ECM.mjs → chunk-G4WLCKFV.mjs} +1 -1
- package/dist/{chunk-ODO6BUOF.mjs → chunk-HRHXZIX5.mjs} +1 -3
- package/dist/{chunk-IXR4BQSQ.mjs → chunk-I6QVWQCD.mjs} +1 -1
- package/dist/{chunk-Q5SGEIJV.mjs → chunk-IXKE6LHN.mjs} +1 -1
- package/dist/{chunk-OL65UQHQ.mjs → chunk-JCH2BG24.mjs} +26 -60
- package/dist/{chunk-PV3Y7QGK.mjs → chunk-LHWJQNLG.mjs} +3 -3
- package/dist/{chunk-JTG5R5YV.mjs → chunk-MS4PDUSU.mjs} +284 -58
- package/dist/{chunk-VFH632TB.mjs → chunk-SDNG4XL6.mjs} +1 -1
- package/dist/{chunk-DFL5CV75.mjs → chunk-T6MMCOX6.mjs} +1 -1
- package/dist/{chunk-6TX73WG7.mjs → chunk-TCE5L44O.mjs} +3 -2
- package/dist/{chunk-HROG643K.mjs → chunk-W5QJ57PU.mjs} +1 -1
- package/dist/{chunk-EW72FINW.mjs → chunk-XVZGXPIX.mjs} +1 -1
- package/dist/components/ui/about-you-form.mjs +3 -3
- package/dist/components/ui/add-column-modal.js +56 -227
- package/dist/components/ui/add-column-modal.mjs +1 -2
- package/dist/components/ui/ai-conversations.js +278 -58
- package/dist/components/ui/ai-conversations.mjs +1 -1
- package/dist/components/ui/appointment-action-dialogs.mjs +3 -3
- package/dist/components/ui/appointment-availability-settings.js +2 -28
- package/dist/components/ui/appointment-availability-settings.mjs +4 -4
- package/dist/components/ui/appointment-book-dialog.js +11 -21
- package/dist/components/ui/appointment-book-dialog.mjs +3 -3
- package/dist/components/ui/appointment-calendar-view.mjs +2 -2
- package/dist/components/ui/appointment-detail-sheet.mjs +4 -4
- package/dist/components/ui/appointment-upcoming-card.mjs +3 -3
- package/dist/components/ui/bank-statement-generate-dialog.mjs +4 -4
- package/dist/components/ui/calendar.mjs +2 -2
- package/dist/components/ui/dashboard-transactions-table.mjs +1 -1
- package/dist/components/ui/date-picker.mjs +3 -3
- package/dist/components/ui/financial-cards.mjs +2 -2
- package/dist/components/ui/financial-sections.mjs +3 -3
- package/dist/components/ui/integration-card.js +326 -0
- package/dist/components/ui/integration-card.mjs +11 -0
- package/dist/components/ui/kanban-column.js +151 -243
- package/dist/components/ui/kanban-column.mjs +3 -4
- package/dist/components/ui/loan-application-cards.mjs +1 -1
- package/dist/components/ui/onboarding-layout.js +65 -4
- package/dist/components/ui/onboarding-layout.mjs +6 -4
- package/dist/components/ui/opportunity-card.js +126 -216
- package/dist/components/ui/opportunity-card.mjs +2 -3
- package/dist/components/ui/opportunity-edit-modals.mjs +4 -4
- package/dist/components/ui/opportunity-summary-tab.mjs +6 -6
- package/dist/components/ui/pipeline-board.js +167 -261
- package/dist/components/ui/pipeline-board.mjs +4 -5
- package/dist/components/ui/pipeline-chart.js +128 -55
- package/dist/components/ui/pipeline-chart.mjs +2 -1
- package/dist/components/ui/pipeline-dialogs.mjs +4 -4
- package/dist/components/ui/savings-goal-modal.mjs +3 -3
- package/dist/components/ui/selectable-card.js +163 -0
- package/dist/components/ui/selectable-card.mjs +9 -0
- package/dist/components/ui/signup-shell.js +3 -2
- package/dist/components/ui/signup-shell.mjs +2 -2
- package/dist/components/ui/stepper.js +3 -2
- package/dist/components/ui/stepper.mjs +1 -1
- package/dist/index.js +2121 -1878
- package/dist/index.mjs +56 -46
- package/dist/styles.css +1 -1
- package/package.json +11 -1
- package/src/components/index.tsx +13 -1
- package/src/components/ui/add-column-modal.tsx +9 -58
- package/src/components/ui/ai-conversations.tsx +308 -42
- package/src/components/ui/appointment-availability-settings.tsx +2 -35
- package/src/components/ui/appointment-book-dialog.tsx +25 -48
- package/src/components/ui/integration-card.tsx +88 -0
- package/src/components/ui/kanban-column.tsx +0 -7
- package/src/components/ui/onboarding-layout.tsx +102 -1
- package/src/components/ui/opportunity-card.tsx +5 -53
- package/src/components/ui/pipeline-board.tsx +0 -3
- package/src/components/ui/pipeline-chart.tsx +47 -53
- package/src/components/ui/selectable-card.tsx +37 -0
- package/src/components/ui/stepper.tsx +3 -2
- package/src/lib/format-date.ts +6 -6
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +2 -0
- package/dist/chunk-2P7HP7LR.mjs +0 -68
|
@@ -723,66 +723,8 @@ function Progress(_a) {
|
|
|
723
723
|
);
|
|
724
724
|
}
|
|
725
725
|
|
|
726
|
-
// src/components/ui/tooltip.tsx
|
|
727
|
-
var import_tooltip = require("@base-ui/react/tooltip");
|
|
728
|
-
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
729
|
-
function TooltipProvider(_a) {
|
|
730
|
-
var _b = _a, {
|
|
731
|
-
delay = 0
|
|
732
|
-
} = _b, props = __objRest(_b, [
|
|
733
|
-
"delay"
|
|
734
|
-
]);
|
|
735
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
736
|
-
import_tooltip.Tooltip.Provider,
|
|
737
|
-
__spreadValues({
|
|
738
|
-
"data-slot": "tooltip-provider",
|
|
739
|
-
delay
|
|
740
|
-
}, props)
|
|
741
|
-
);
|
|
742
|
-
}
|
|
743
|
-
function Tooltip(_a) {
|
|
744
|
-
var props = __objRest(_a, []);
|
|
745
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
|
|
746
|
-
}
|
|
747
|
-
function TooltipTrigger(_a) {
|
|
748
|
-
var props = __objRest(_a, []);
|
|
749
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
|
|
750
|
-
}
|
|
751
|
-
function TooltipContent(_a) {
|
|
752
|
-
var _b = _a, {
|
|
753
|
-
className,
|
|
754
|
-
sideOffset = 8,
|
|
755
|
-
side,
|
|
756
|
-
children,
|
|
757
|
-
style
|
|
758
|
-
} = _b, props = __objRest(_b, [
|
|
759
|
-
"className",
|
|
760
|
-
"sideOffset",
|
|
761
|
-
"side",
|
|
762
|
-
"children",
|
|
763
|
-
"style"
|
|
764
|
-
]);
|
|
765
|
-
const themeVars = useThemeVars();
|
|
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)(
|
|
767
|
-
import_tooltip.Tooltip.Popup,
|
|
768
|
-
__spreadProps(__spreadValues({
|
|
769
|
-
className: cn(
|
|
770
|
-
"relative z-50 w-fit animate-in overflow-visible bg-brand-secondary px-3 py-1.5 text-caption text-balance text-brand-secondary-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards",
|
|
771
|
-
className
|
|
772
|
-
),
|
|
773
|
-
"data-slot": "tooltip-content",
|
|
774
|
-
style: __spreadValues(__spreadValues({}, themeVars), style)
|
|
775
|
-
}, props), {
|
|
776
|
-
children: [
|
|
777
|
-
children,
|
|
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" })
|
|
779
|
-
]
|
|
780
|
-
})
|
|
781
|
-
) }) });
|
|
782
|
-
}
|
|
783
|
-
|
|
784
726
|
// src/components/ui/opportunity-card.tsx
|
|
785
|
-
var
|
|
727
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
786
728
|
var PRIORITY_COLORS = {
|
|
787
729
|
HIGH: "var(--color-destructive)",
|
|
788
730
|
MEDIUM: "var(--color-warning)",
|
|
@@ -829,7 +771,6 @@ function TaskViewCard({
|
|
|
829
771
|
onDragStart,
|
|
830
772
|
className
|
|
831
773
|
}) {
|
|
832
|
-
var _a;
|
|
833
774
|
const resolvedPriority = resolvePriority(
|
|
834
775
|
daysSinceColumnChanged,
|
|
835
776
|
warningDays,
|
|
@@ -841,8 +782,6 @@ function TaskViewCard({
|
|
|
841
782
|
const totalCount = tasks.length;
|
|
842
783
|
const hasTasks = totalCount > 0;
|
|
843
784
|
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
785
|
const [subtasksExpanded, setSubtasksExpanded] = (0, import_react5.useState)(false);
|
|
847
786
|
const hasMenu = onViewDetails || onChangePriority || onPutOnHold || onDelete;
|
|
848
787
|
const stopProp = (e) => {
|
|
@@ -856,35 +795,23 @@ function TaskViewCard({
|
|
|
856
795
|
].filter(Boolean).join(" \xB7 ");
|
|
857
796
|
let taskHeader;
|
|
858
797
|
if (allDone) {
|
|
859
|
-
taskHeader = /* @__PURE__ */ (0,
|
|
798
|
+
taskHeader = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
860
799
|
"p",
|
|
861
800
|
{
|
|
862
801
|
className: "flex items-center gap-1.5 text-sm font-semibold",
|
|
863
802
|
style: { color: "var(--color-success-text)" },
|
|
864
803
|
children: [
|
|
865
|
-
/* @__PURE__ */ (0,
|
|
804
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Check, { className: "size-3.5 shrink-0" }),
|
|
866
805
|
"All tasks complete"
|
|
867
806
|
]
|
|
868
807
|
}
|
|
869
808
|
);
|
|
870
809
|
} else if (nextTask) {
|
|
871
|
-
taskHeader = /* @__PURE__ */ (0,
|
|
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
|
-
] });
|
|
810
|
+
taskHeader = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "truncate text-sm font-semibold leading-snug", children: nextTask });
|
|
884
811
|
} else {
|
|
885
|
-
taskHeader = /* @__PURE__ */ (0,
|
|
812
|
+
taskHeader = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-xs text-muted-foreground", children: "No tasks defined for this stage" });
|
|
886
813
|
}
|
|
887
|
-
return /* @__PURE__ */ (0,
|
|
814
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
888
815
|
"div",
|
|
889
816
|
{
|
|
890
817
|
className: cn(
|
|
@@ -899,9 +826,9 @@ function TaskViewCard({
|
|
|
899
826
|
onDragStart,
|
|
900
827
|
onClick: onCardClick,
|
|
901
828
|
children: [
|
|
902
|
-
/* @__PURE__ */ (0,
|
|
903
|
-
/* @__PURE__ */ (0,
|
|
904
|
-
/* @__PURE__ */ (0,
|
|
829
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start gap-2", children: [
|
|
830
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "min-w-0 flex-1", children: taskHeader }),
|
|
831
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
905
832
|
"span",
|
|
906
833
|
{
|
|
907
834
|
role: "img",
|
|
@@ -911,13 +838,13 @@ function TaskViewCard({
|
|
|
911
838
|
}
|
|
912
839
|
)
|
|
913
840
|
] }),
|
|
914
|
-
hasTasks && /* @__PURE__ */ (0,
|
|
915
|
-
/* @__PURE__ */ (0,
|
|
841
|
+
hasTasks && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
842
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "shrink-0 tabular-nums text-xs text-muted-foreground", children: [
|
|
916
843
|
completedCount,
|
|
917
844
|
"/",
|
|
918
845
|
totalCount
|
|
919
846
|
] }),
|
|
920
|
-
/* @__PURE__ */ (0,
|
|
847
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
921
848
|
Progress,
|
|
922
849
|
{
|
|
923
850
|
value: completedCount / totalCount * 100,
|
|
@@ -928,7 +855,7 @@ function TaskViewCard({
|
|
|
928
855
|
}
|
|
929
856
|
)
|
|
930
857
|
] }),
|
|
931
|
-
hasTasks && /* @__PURE__ */ (0,
|
|
858
|
+
hasTasks && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
932
859
|
"div",
|
|
933
860
|
{
|
|
934
861
|
className: "space-y-1 border-t border-border pt-2",
|
|
@@ -936,18 +863,18 @@ function TaskViewCard({
|
|
|
936
863
|
role: "presentation",
|
|
937
864
|
onKeyDown: (e) => e.stopPropagation(),
|
|
938
865
|
children: [
|
|
939
|
-
/* @__PURE__ */ (0,
|
|
866
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
940
867
|
"button",
|
|
941
868
|
{
|
|
942
869
|
type: "button",
|
|
943
870
|
onClick: () => setSubtasksExpanded((v) => !v),
|
|
944
871
|
className: "flex w-full items-center justify-between text-xs text-muted-foreground hover:text-foreground",
|
|
945
872
|
children: [
|
|
946
|
-
/* @__PURE__ */ (0,
|
|
947
|
-
subtasksExpanded ? /* @__PURE__ */ (0,
|
|
873
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1", children: [
|
|
874
|
+
subtasksExpanded ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.ChevronRight, { className: "size-3" }),
|
|
948
875
|
"Subtasks"
|
|
949
876
|
] }),
|
|
950
|
-
/* @__PURE__ */ (0,
|
|
877
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { children: [
|
|
951
878
|
completedCount,
|
|
952
879
|
" / ",
|
|
953
880
|
totalCount
|
|
@@ -955,12 +882,11 @@ function TaskViewCard({
|
|
|
955
882
|
]
|
|
956
883
|
}
|
|
957
884
|
),
|
|
958
|
-
subtasksExpanded && /* @__PURE__ */ (0,
|
|
885
|
+
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)(
|
|
959
886
|
TaskCheckItem,
|
|
960
887
|
{
|
|
961
888
|
title: task.title,
|
|
962
889
|
completed: task.completed,
|
|
963
|
-
aiAgentName: task.aiAgentName,
|
|
964
890
|
onToggle: () => onTaskToggle == null ? void 0 : onTaskToggle(task.id),
|
|
965
891
|
size: "xs"
|
|
966
892
|
},
|
|
@@ -969,14 +895,14 @@ function TaskViewCard({
|
|
|
969
895
|
]
|
|
970
896
|
}
|
|
971
897
|
),
|
|
972
|
-
/* @__PURE__ */ (0,
|
|
973
|
-
/* @__PURE__ */ (0,
|
|
974
|
-
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0,
|
|
898
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: dealRef }),
|
|
899
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-1.5", onClick: stopProp, children: [
|
|
900
|
+
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "px-1.5 text-[10px] font-normal", children: [
|
|
975
901
|
daysSinceColumnChanged,
|
|
976
902
|
"d"
|
|
977
903
|
] }),
|
|
978
|
-
hasMenu && /* @__PURE__ */ (0,
|
|
979
|
-
/* @__PURE__ */ (0,
|
|
904
|
+
hasMenu && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "ml-auto", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
|
|
905
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
980
906
|
DropdownMenuTrigger,
|
|
981
907
|
{
|
|
982
908
|
className: cn(
|
|
@@ -984,23 +910,23 @@ function TaskViewCard({
|
|
|
984
910
|
"size-7 shrink-0"
|
|
985
911
|
),
|
|
986
912
|
"aria-label": "Opportunity actions",
|
|
987
|
-
children: /* @__PURE__ */ (0,
|
|
913
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
|
|
988
914
|
}
|
|
989
915
|
),
|
|
990
|
-
/* @__PURE__ */ (0,
|
|
991
|
-
onViewDetails && /* @__PURE__ */ (0,
|
|
992
|
-
onChangePriority && /* @__PURE__ */ (0,
|
|
993
|
-
onPutOnHold && /* @__PURE__ */ (0,
|
|
994
|
-
onDelete && /* @__PURE__ */ (0,
|
|
995
|
-
/* @__PURE__ */ (0,
|
|
996
|
-
/* @__PURE__ */ (0,
|
|
916
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenuContent, { align: "end", children: [
|
|
917
|
+
onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
|
|
918
|
+
onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
|
|
919
|
+
onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
|
|
920
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
921
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuSeparator, {}),
|
|
922
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
|
|
997
923
|
] })
|
|
998
924
|
] })
|
|
999
925
|
] }) })
|
|
1000
926
|
] }),
|
|
1001
|
-
allDone && onMoveToNextStage && /* @__PURE__ */ (0,
|
|
1002
|
-
/* @__PURE__ */ (0,
|
|
1003
|
-
/* @__PURE__ */ (0,
|
|
927
|
+
allDone && onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
928
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
929
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1004
930
|
Button,
|
|
1005
931
|
{
|
|
1006
932
|
variant: "outline",
|
|
@@ -1012,9 +938,9 @@ function TaskViewCard({
|
|
|
1012
938
|
}
|
|
1013
939
|
) })
|
|
1014
940
|
] }),
|
|
1015
|
-
!allDone && nextTask && onMarkAsDone && /* @__PURE__ */ (0,
|
|
1016
|
-
/* @__PURE__ */ (0,
|
|
1017
|
-
/* @__PURE__ */ (0,
|
|
941
|
+
!allDone && nextTask && onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
942
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
943
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1018
944
|
Button,
|
|
1019
945
|
{
|
|
1020
946
|
variant: "default",
|
|
@@ -1053,7 +979,6 @@ function OpportunityCard({
|
|
|
1053
979
|
onTaskToggle,
|
|
1054
980
|
onMarkAsDone,
|
|
1055
981
|
onMoveToNextStage,
|
|
1056
|
-
onLaunchAssistant,
|
|
1057
982
|
onChangePriority,
|
|
1058
983
|
onDelete,
|
|
1059
984
|
onPutOnHold,
|
|
@@ -1064,7 +989,7 @@ function OpportunityCard({
|
|
|
1064
989
|
viewMode = "deal"
|
|
1065
990
|
}) {
|
|
1066
991
|
if (viewMode === "task") {
|
|
1067
|
-
return /* @__PURE__ */ (0,
|
|
992
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1068
993
|
TaskViewCard,
|
|
1069
994
|
{
|
|
1070
995
|
customerName,
|
|
@@ -1111,7 +1036,7 @@ function OpportunityCard({
|
|
|
1111
1036
|
const stopProp = (e) => {
|
|
1112
1037
|
e.stopPropagation();
|
|
1113
1038
|
};
|
|
1114
|
-
return /* @__PURE__ */ (0,
|
|
1039
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1115
1040
|
"div",
|
|
1116
1041
|
{
|
|
1117
1042
|
className: cn(
|
|
@@ -1126,19 +1051,19 @@ function OpportunityCard({
|
|
|
1126
1051
|
onDragStart,
|
|
1127
1052
|
onClick: onCardClick,
|
|
1128
1053
|
children: [
|
|
1129
|
-
onHoldTo && /* @__PURE__ */ (0,
|
|
1054
|
+
onHoldTo && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1130
1055
|
"div",
|
|
1131
1056
|
{
|
|
1132
1057
|
className: "flex items-center gap-1.5 rounded border border-warning/30 bg-warning/10 px-2 py-1 text-xs font-medium",
|
|
1133
1058
|
style: { color: "var(--color-warning-text)" },
|
|
1134
1059
|
children: [
|
|
1135
|
-
/* @__PURE__ */ (0,
|
|
1060
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Clock, { className: "size-3 shrink-0" }),
|
|
1136
1061
|
"On hold until ",
|
|
1137
1062
|
formatDateDayMonth(onHoldTo)
|
|
1138
1063
|
]
|
|
1139
1064
|
}
|
|
1140
1065
|
),
|
|
1141
|
-
isModifyCompletedLoan && /* @__PURE__ */ (0,
|
|
1066
|
+
isModifyCompletedLoan && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1142
1067
|
"div",
|
|
1143
1068
|
{
|
|
1144
1069
|
className: "flex items-center gap-1.5 rounded border border-info/30 bg-info/10 px-2 py-1 text-xs font-medium",
|
|
@@ -1146,81 +1071,64 @@ function OpportunityCard({
|
|
|
1146
1071
|
children: "Modify completed loan"
|
|
1147
1072
|
}
|
|
1148
1073
|
),
|
|
1149
|
-
/* @__PURE__ */ (0,
|
|
1150
|
-
/* @__PURE__ */ (0,
|
|
1151
|
-
(loanPurposeLabel || loanType) && /* @__PURE__ */ (0,
|
|
1152
|
-
/* @__PURE__ */ (0,
|
|
1074
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
|
|
1075
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
1076
|
+
(loanPurposeLabel || loanType) && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
|
|
1077
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
|
|
1153
1078
|
] }),
|
|
1154
|
-
/* @__PURE__ */ (0,
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
) }),
|
|
1168
|
-
/* @__PURE__ */ (0,
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
{
|
|
1174
|
-
className: cn(
|
|
1175
|
-
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
1176
|
-
"size-7 shrink-0"
|
|
1177
|
-
),
|
|
1178
|
-
"aria-label": "Opportunity actions",
|
|
1179
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
|
|
1180
|
-
}
|
|
1181
|
-
),
|
|
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" })
|
|
1189
|
-
] })
|
|
1079
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex items-center gap-1 -mr-1 -mt-1", onClick: stopProp, children: hasMenu && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
|
|
1080
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1081
|
+
DropdownMenuTrigger,
|
|
1082
|
+
{
|
|
1083
|
+
className: cn(
|
|
1084
|
+
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
1085
|
+
"size-7 shrink-0"
|
|
1086
|
+
),
|
|
1087
|
+
"aria-label": "Opportunity actions",
|
|
1088
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
|
|
1089
|
+
}
|
|
1090
|
+
),
|
|
1091
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenuContent, { align: "end", children: [
|
|
1092
|
+
onViewDetails && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onViewDetails, children: "View details" }),
|
|
1093
|
+
onChangePriority && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onChangePriority, children: "Change priority" }),
|
|
1094
|
+
onPutOnHold && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onPutOnHold, children: "Put on hold" }),
|
|
1095
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
1096
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuSeparator, {}),
|
|
1097
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuItem, { onClick: onDelete, variant: "destructive", children: "Delete" })
|
|
1190
1098
|
] })
|
|
1191
1099
|
] })
|
|
1192
|
-
] })
|
|
1100
|
+
] }) })
|
|
1193
1101
|
] }),
|
|
1194
|
-
/* @__PURE__ */ (0,
|
|
1195
|
-
/* @__PURE__ */ (0,
|
|
1196
|
-
/* @__PURE__ */ (0,
|
|
1197
|
-
/* @__PURE__ */ (0,
|
|
1198
|
-
additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0,
|
|
1199
|
-
/* @__PURE__ */ (0,
|
|
1102
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1103
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
1104
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
1105
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: customerName }),
|
|
1106
|
+
additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
|
|
1107
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Users, { className: "size-3", "aria-hidden": "true" }),
|
|
1200
1108
|
"Joint"
|
|
1201
|
-
] }) : /* @__PURE__ */ (0,
|
|
1202
|
-
/* @__PURE__ */ (0,
|
|
1109
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
|
|
1110
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.User, { className: "size-3", "aria-hidden": "true" }),
|
|
1203
1111
|
"Individual"
|
|
1204
1112
|
] })
|
|
1205
1113
|
] }),
|
|
1206
|
-
customerPhone && /* @__PURE__ */ (0,
|
|
1207
|
-
/* @__PURE__ */ (0,
|
|
1114
|
+
customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1115
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1208
1116
|
customerPhone
|
|
1209
1117
|
] }),
|
|
1210
|
-
customerEmail && /* @__PURE__ */ (0,
|
|
1211
|
-
/* @__PURE__ */ (0,
|
|
1212
|
-
/* @__PURE__ */ (0,
|
|
1118
|
+
customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1119
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1120
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
|
|
1213
1121
|
] })
|
|
1214
1122
|
] }),
|
|
1215
|
-
/* @__PURE__ */ (0,
|
|
1216
|
-
/* @__PURE__ */ (0,
|
|
1217
|
-
/* @__PURE__ */ (0,
|
|
1218
|
-
/* @__PURE__ */ (0,
|
|
1123
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1124
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
1125
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1126
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1219
1127
|
formatDateShort(date)
|
|
1220
1128
|
] }),
|
|
1221
|
-
/* @__PURE__ */ (0,
|
|
1222
|
-
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0,
|
|
1223
|
-
/* @__PURE__ */ (0,
|
|
1129
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5", children: [
|
|
1130
|
+
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
1131
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1224
1132
|
import_lucide_react6.Clock,
|
|
1225
1133
|
{
|
|
1226
1134
|
className: "size-3 shrink-0",
|
|
@@ -1228,7 +1136,7 @@ function OpportunityCard({
|
|
|
1228
1136
|
"aria-hidden": "true"
|
|
1229
1137
|
}
|
|
1230
1138
|
),
|
|
1231
|
-
/* @__PURE__ */ (0,
|
|
1139
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1232
1140
|
"span",
|
|
1233
1141
|
{
|
|
1234
1142
|
className: "text-xs font-medium tabular-nums",
|
|
@@ -1240,7 +1148,7 @@ function OpportunityCard({
|
|
|
1240
1148
|
}
|
|
1241
1149
|
)
|
|
1242
1150
|
] }),
|
|
1243
|
-
/* @__PURE__ */ (0,
|
|
1151
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1244
1152
|
"span",
|
|
1245
1153
|
{
|
|
1246
1154
|
role: "img",
|
|
@@ -1252,8 +1160,8 @@ function OpportunityCard({
|
|
|
1252
1160
|
] })
|
|
1253
1161
|
] }),
|
|
1254
1162
|
hasTasks && // stopPropagation: accordion expand/collapse + task checkboxes must not bubble to onCardClick
|
|
1255
|
-
/* @__PURE__ */ (0,
|
|
1256
|
-
/* @__PURE__ */ (0,
|
|
1163
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
1164
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1257
1165
|
"div",
|
|
1258
1166
|
{
|
|
1259
1167
|
className: "flex gap-0.5",
|
|
@@ -1262,7 +1170,7 @@ function OpportunityCard({
|
|
|
1262
1170
|
"aria-valuemin": 0,
|
|
1263
1171
|
"aria-valuemax": tasks.length,
|
|
1264
1172
|
"aria-label": `${completedCount} of ${tasks.length} tasks complete`,
|
|
1265
|
-
children: tasks.map((t, i) => /* @__PURE__ */ (0,
|
|
1173
|
+
children: tasks.map((t, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1266
1174
|
"div",
|
|
1267
1175
|
{
|
|
1268
1176
|
className: cn(
|
|
@@ -1274,43 +1182,42 @@ function OpportunityCard({
|
|
|
1274
1182
|
))
|
|
1275
1183
|
}
|
|
1276
1184
|
),
|
|
1277
|
-
/* @__PURE__ */ (0,
|
|
1278
|
-
/* @__PURE__ */ (0,
|
|
1185
|
+
/* @__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: [
|
|
1186
|
+
/* @__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: [
|
|
1279
1187
|
"Tasks (",
|
|
1280
1188
|
completedCount,
|
|
1281
1189
|
"/",
|
|
1282
1190
|
tasks.length,
|
|
1283
1191
|
")"
|
|
1284
1192
|
] }),
|
|
1285
|
-
/* @__PURE__ */ (0,
|
|
1193
|
+
/* @__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)(
|
|
1286
1194
|
TaskCheckItem,
|
|
1287
1195
|
{
|
|
1288
1196
|
title: task.title,
|
|
1289
1197
|
completed: task.completed,
|
|
1290
|
-
aiAgentName: task.aiAgentName,
|
|
1291
1198
|
onToggle: onTaskToggle ? () => onTaskToggle(task.id) : void 0,
|
|
1292
1199
|
disabled: isSubmitting
|
|
1293
1200
|
},
|
|
1294
1201
|
task.id
|
|
1295
1202
|
)) }) })
|
|
1296
1203
|
] }) }),
|
|
1297
|
-
nextTask && /* @__PURE__ */ (0,
|
|
1298
|
-
/* @__PURE__ */ (0,
|
|
1204
|
+
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: [
|
|
1205
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1299
1206
|
import_lucide_react6.ArrowRight,
|
|
1300
1207
|
{
|
|
1301
1208
|
className: "mt-0.5 size-3 shrink-0 text-primary",
|
|
1302
1209
|
"aria-hidden": "true"
|
|
1303
1210
|
}
|
|
1304
1211
|
),
|
|
1305
|
-
/* @__PURE__ */ (0,
|
|
1306
|
-
/* @__PURE__ */ (0,
|
|
1212
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-medium", children: "Next:" }),
|
|
1213
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-muted-foreground", children: nextTask })
|
|
1307
1214
|
] })
|
|
1308
1215
|
] }),
|
|
1309
1216
|
hasActions && // stopPropagation: button clicks must not bubble to onCardClick
|
|
1310
|
-
/* @__PURE__ */ (0,
|
|
1311
|
-
/* @__PURE__ */ (0,
|
|
1312
|
-
(onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0,
|
|
1313
|
-
onMoveToNextStage && /* @__PURE__ */ (0,
|
|
1217
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: stopProp, children: [
|
|
1218
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1219
|
+
(onMoveToNextStage || onMarkAsDone) && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex gap-2 pt-2", children: [
|
|
1220
|
+
onMoveToNextStage && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1314
1221
|
Button,
|
|
1315
1222
|
{
|
|
1316
1223
|
variant: "outline",
|
|
@@ -1321,7 +1228,7 @@ function OpportunityCard({
|
|
|
1321
1228
|
children: "Move to next stage"
|
|
1322
1229
|
}
|
|
1323
1230
|
),
|
|
1324
|
-
onMarkAsDone && /* @__PURE__ */ (0,
|
|
1231
|
+
onMarkAsDone && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1325
1232
|
Button,
|
|
1326
1233
|
{
|
|
1327
1234
|
variant: "default",
|
|
@@ -1348,7 +1255,7 @@ function LeadCard({
|
|
|
1348
1255
|
isSubmitting = false,
|
|
1349
1256
|
className
|
|
1350
1257
|
}) {
|
|
1351
|
-
return /* @__PURE__ */ (0,
|
|
1258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1352
1259
|
"div",
|
|
1353
1260
|
{
|
|
1354
1261
|
className: cn(
|
|
@@ -1358,20 +1265,20 @@ function LeadCard({
|
|
|
1358
1265
|
),
|
|
1359
1266
|
"data-slot": "lead-card",
|
|
1360
1267
|
children: [
|
|
1361
|
-
/* @__PURE__ */ (0,
|
|
1362
|
-
/* @__PURE__ */ (0,
|
|
1363
|
-
/* @__PURE__ */ (0,
|
|
1364
|
-
customerPhone && /* @__PURE__ */ (0,
|
|
1365
|
-
/* @__PURE__ */ (0,
|
|
1268
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
|
|
1269
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
1270
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm font-semibold text-foreground", children: customerName }),
|
|
1271
|
+
customerPhone && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1272
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1366
1273
|
customerPhone
|
|
1367
1274
|
] }),
|
|
1368
|
-
customerEmail && /* @__PURE__ */ (0,
|
|
1369
|
-
/* @__PURE__ */ (0,
|
|
1370
|
-
/* @__PURE__ */ (0,
|
|
1275
|
+
customerEmail && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1276
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
1277
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "truncate", children: customerEmail })
|
|
1371
1278
|
] })
|
|
1372
1279
|
] }),
|
|
1373
|
-
onDelete && /* @__PURE__ */ (0,
|
|
1374
|
-
/* @__PURE__ */ (0,
|
|
1280
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenu, { children: [
|
|
1281
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1375
1282
|
DropdownMenuTrigger,
|
|
1376
1283
|
{
|
|
1377
1284
|
className: cn(
|
|
@@ -1379,10 +1286,10 @@ function LeadCard({
|
|
|
1379
1286
|
"-mr-1 -mt-1 size-7 shrink-0"
|
|
1380
1287
|
),
|
|
1381
1288
|
"aria-label": "Lead actions",
|
|
1382
|
-
children: /* @__PURE__ */ (0,
|
|
1289
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react6.MoreVertical, { className: "size-4" })
|
|
1383
1290
|
}
|
|
1384
1291
|
),
|
|
1385
|
-
/* @__PURE__ */ (0,
|
|
1292
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1386
1293
|
DropdownMenuItem,
|
|
1387
1294
|
{
|
|
1388
1295
|
onClick: onDelete,
|
|
@@ -1392,9 +1299,9 @@ function LeadCard({
|
|
|
1392
1299
|
) })
|
|
1393
1300
|
] })
|
|
1394
1301
|
] }),
|
|
1395
|
-
/* @__PURE__ */ (0,
|
|
1396
|
-
onSendLoanApplication && /* @__PURE__ */ (0,
|
|
1397
|
-
/* @__PURE__ */ (0,
|
|
1302
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Separator, {}),
|
|
1303
|
+
onSendLoanApplication && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
1304
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1398
1305
|
Button,
|
|
1399
1306
|
{
|
|
1400
1307
|
variant: "outline",
|
|
@@ -1405,13 +1312,16 @@ function LeadCard({
|
|
|
1405
1312
|
children: "Send Loan Application Request"
|
|
1406
1313
|
}
|
|
1407
1314
|
),
|
|
1408
|
-
loanApplicationUrl && /* @__PURE__ */ (0,
|
|
1315
|
+
loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
|
|
1409
1316
|
"Or the link below to fill out the loan application directly.",
|
|
1410
|
-
/* @__PURE__ */ (0,
|
|
1411
|
-
/* @__PURE__ */ (0,
|
|
1317
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("br", {}),
|
|
1318
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1412
1319
|
"a",
|
|
1413
1320
|
{
|
|
1414
|
-
href: `https://${loanApplicationUrl.replace(
|
|
1321
|
+
href: `https://${loanApplicationUrl.replace(
|
|
1322
|
+
/^https?:\/\//,
|
|
1323
|
+
""
|
|
1324
|
+
)}`,
|
|
1415
1325
|
target: "_blank",
|
|
1416
1326
|
rel: "noreferrer",
|
|
1417
1327
|
className: "text-primary underline-offset-2 hover:underline",
|
|
@@ -1426,7 +1336,7 @@ function LeadCard({
|
|
|
1426
1336
|
}
|
|
1427
1337
|
|
|
1428
1338
|
// src/components/ui/kanban-column.tsx
|
|
1429
|
-
var
|
|
1339
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1430
1340
|
function formatTotalValue(value) {
|
|
1431
1341
|
return formatCurrency(value);
|
|
1432
1342
|
}
|
|
@@ -1452,7 +1362,6 @@ function KanbanColumn({
|
|
|
1452
1362
|
onCardClick,
|
|
1453
1363
|
onViewDetails,
|
|
1454
1364
|
onChangePriority,
|
|
1455
|
-
onLaunchAssistant,
|
|
1456
1365
|
onPutOnHold,
|
|
1457
1366
|
onDeleteOpportunity,
|
|
1458
1367
|
onCardDrop,
|
|
@@ -1482,7 +1391,7 @@ function KanbanColumn({
|
|
|
1482
1391
|
const cardId = e.dataTransfer.getData("text/plain");
|
|
1483
1392
|
if (cardId) onCardDrop(cardId);
|
|
1484
1393
|
}
|
|
1485
|
-
return /* @__PURE__ */ (0,
|
|
1394
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1486
1395
|
"div",
|
|
1487
1396
|
{
|
|
1488
1397
|
className: cn(
|
|
@@ -1496,15 +1405,15 @@ function KanbanColumn({
|
|
|
1496
1405
|
}),
|
|
1497
1406
|
"data-slot": "kanban-column",
|
|
1498
1407
|
children: [
|
|
1499
|
-
/* @__PURE__ */ (0,
|
|
1500
|
-
/* @__PURE__ */ (0,
|
|
1501
|
-
/* @__PURE__ */ (0,
|
|
1502
|
-
/* @__PURE__ */ (0,
|
|
1408
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-2 border-b border-border bg-background px-3 py-3", children: [
|
|
1409
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
1410
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("h2", { className: "text-sm font-semibold text-foreground", children: [
|
|
1411
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-muted-foreground", children: stage.count }),
|
|
1503
1412
|
" ",
|
|
1504
1413
|
stage.name
|
|
1505
1414
|
] }),
|
|
1506
|
-
hasMenu && /* @__PURE__ */ (0,
|
|
1507
|
-
/* @__PURE__ */ (0,
|
|
1415
|
+
hasMenu && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenu, { children: [
|
|
1416
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1508
1417
|
DropdownMenuTrigger,
|
|
1509
1418
|
{
|
|
1510
1419
|
className: cn(
|
|
@@ -1512,14 +1421,14 @@ function KanbanColumn({
|
|
|
1512
1421
|
"-mr-1 size-7 shrink-0"
|
|
1513
1422
|
),
|
|
1514
1423
|
"aria-label": "Column actions",
|
|
1515
|
-
children: /* @__PURE__ */ (0,
|
|
1424
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react7.MoreVertical, { className: "size-4" })
|
|
1516
1425
|
}
|
|
1517
1426
|
),
|
|
1518
|
-
/* @__PURE__ */ (0,
|
|
1519
|
-
onEditColumn && /* @__PURE__ */ (0,
|
|
1520
|
-
!isDefault && onDeleteColumn && /* @__PURE__ */ (0,
|
|
1521
|
-
onEditColumn && /* @__PURE__ */ (0,
|
|
1522
|
-
/* @__PURE__ */ (0,
|
|
1427
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenuContent, { align: "end", children: [
|
|
1428
|
+
onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
|
|
1429
|
+
!isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
1430
|
+
onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropdownMenuSeparator, {}),
|
|
1431
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1523
1432
|
DropdownMenuItem,
|
|
1524
1433
|
{
|
|
1525
1434
|
onClick: onDeleteColumn,
|
|
@@ -1531,8 +1440,8 @@ function KanbanColumn({
|
|
|
1531
1440
|
] })
|
|
1532
1441
|
] })
|
|
1533
1442
|
] }),
|
|
1534
|
-
/* @__PURE__ */ (0,
|
|
1535
|
-
stage.growth != null ? /* @__PURE__ */ (0,
|
|
1443
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
1444
|
+
stage.growth != null ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1536
1445
|
Badge,
|
|
1537
1446
|
{
|
|
1538
1447
|
variant: "outline",
|
|
@@ -1542,11 +1451,11 @@ function KanbanColumn({
|
|
|
1542
1451
|
stage.growth
|
|
1543
1452
|
]
|
|
1544
1453
|
}
|
|
1545
|
-
) : /* @__PURE__ */ (0,
|
|
1546
|
-
/* @__PURE__ */ (0,
|
|
1454
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", {}),
|
|
1455
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: formatTotalValue(stage.totalValue) })
|
|
1547
1456
|
] })
|
|
1548
1457
|
] }),
|
|
1549
|
-
/* @__PURE__ */ (0,
|
|
1458
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1550
1459
|
"div",
|
|
1551
1460
|
{
|
|
1552
1461
|
className: cn(
|
|
@@ -1557,13 +1466,13 @@ function KanbanColumn({
|
|
|
1557
1466
|
onDragLeave: handleDragLeave,
|
|
1558
1467
|
onDrop: handleDrop,
|
|
1559
1468
|
children: [
|
|
1560
|
-
(isDropTarget || isDragOver) && /* @__PURE__ */ (0,
|
|
1469
|
+
(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: [
|
|
1561
1470
|
"Drop here \u2192 ",
|
|
1562
1471
|
stage.name
|
|
1563
1472
|
] }),
|
|
1564
|
-
isLoading ? /* @__PURE__ */ (0,
|
|
1473
|
+
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: [
|
|
1565
1474
|
opportunities.map(
|
|
1566
|
-
(opp) => onSendLoanApplication ? /* @__PURE__ */ (0,
|
|
1475
|
+
(opp) => onSendLoanApplication ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1567
1476
|
LeadCard,
|
|
1568
1477
|
{
|
|
1569
1478
|
id: opp.id,
|
|
@@ -1576,7 +1485,7 @@ function KanbanColumn({
|
|
|
1576
1485
|
isSubmitting: submittingOpportunityId === opp.id
|
|
1577
1486
|
},
|
|
1578
1487
|
opp.id
|
|
1579
|
-
) : /* @__PURE__ */ (0,
|
|
1488
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1580
1489
|
OpportunityCard,
|
|
1581
1490
|
__spreadProps(__spreadValues({}, opp), {
|
|
1582
1491
|
draggable: !!onCardDrop,
|
|
@@ -1590,7 +1499,6 @@ function KanbanColumn({
|
|
|
1590
1499
|
onMoveToNextStage: onMoveToNextStage ? () => onMoveToNextStage(opp.id) : void 0,
|
|
1591
1500
|
onViewDetails: onViewDetails ? () => onViewDetails(opp.id) : void 0,
|
|
1592
1501
|
onChangePriority: onChangePriority ? () => onChangePriority(opp.id) : void 0,
|
|
1593
|
-
onLaunchAssistant: onLaunchAssistant ? () => onLaunchAssistant(opp.id) : void 0,
|
|
1594
1502
|
onPutOnHold: onPutOnHold ? () => onPutOnHold(opp.id) : void 0,
|
|
1595
1503
|
onDelete: onDeleteOpportunity ? () => onDeleteOpportunity(opp.id) : void 0,
|
|
1596
1504
|
isSubmitting: submittingOpportunityId === opp.id
|
|
@@ -1598,12 +1506,12 @@ function KanbanColumn({
|
|
|
1598
1506
|
opp.id
|
|
1599
1507
|
)
|
|
1600
1508
|
),
|
|
1601
|
-
hasMore && /* @__PURE__ */ (0,
|
|
1509
|
+
hasMore && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1602
1510
|
"div",
|
|
1603
1511
|
{
|
|
1604
1512
|
ref: loaderRef,
|
|
1605
1513
|
className: "flex min-h-[50px] items-center justify-center",
|
|
1606
|
-
children: isLoadingMore && /* @__PURE__ */ (0,
|
|
1514
|
+
children: isLoadingMore && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Spinner, { className: "size-5 text-muted-foreground" })
|
|
1607
1515
|
}
|
|
1608
1516
|
)
|
|
1609
1517
|
] })
|