@wealthx/shadcn 1.5.14 → 1.5.16
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 +80 -80
- package/CHANGELOG.md +12 -0
- package/dist/{chunk-AKWN5ZQG.mjs → chunk-A43XIVO6.mjs} +57 -29
- package/dist/{chunk-ZA44WICP.mjs → chunk-FGHM34AV.mjs} +38 -31
- package/dist/{chunk-EB626HVW.mjs → chunk-LRQSY3TP.mjs} +33 -0
- package/dist/{chunk-J7KQON2N.mjs → chunk-RKHKBEE6.mjs} +1 -1
- package/dist/components/ui/ai-conversations.js +32 -0
- package/dist/components/ui/ai-conversations.mjs +1 -1
- package/dist/components/ui/appointment-book-dialog.js +1 -1
- package/dist/components/ui/appointment-book-dialog.mjs +1 -1
- package/dist/components/ui/kanban-column.js +123 -43
- package/dist/components/ui/kanban-column.mjs +2 -1
- package/dist/components/ui/pipeline-board.js +173 -86
- package/dist/components/ui/pipeline-board.mjs +3 -2
- package/dist/index.js +120 -59
- package/dist/index.mjs +4 -4
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/components/ui/ai-conversations.tsx +45 -0
- package/src/components/ui/appointment-book-dialog.tsx +1 -1
- package/src/components/ui/kanban-column.tsx +78 -37
- package/src/components/ui/pipeline-board.tsx +73 -49
- package/src/styles/styles-css.ts +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KanbanColumn
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A43XIVO6.mjs";
|
|
4
4
|
import {
|
|
5
5
|
ToggleGroup,
|
|
6
6
|
ToggleGroupItem
|
|
@@ -104,6 +104,37 @@ function PipelineBoard({
|
|
|
104
104
|
className
|
|
105
105
|
}) {
|
|
106
106
|
const hasToolbar = onSearchChange || filterOptions.length > 0 && onFilterChange;
|
|
107
|
+
const pinnedCols = columns.filter((c) => c.isPinned);
|
|
108
|
+
const scrollableCols = columns.filter((c) => !c.isPinned);
|
|
109
|
+
const renderColumn = (col) => /* @__PURE__ */ jsx(
|
|
110
|
+
KanbanColumn,
|
|
111
|
+
{
|
|
112
|
+
stage: col.stage,
|
|
113
|
+
opportunities: col.opportunities,
|
|
114
|
+
isDragging: col.isDragging,
|
|
115
|
+
isDropTarget: col.isDropTarget,
|
|
116
|
+
isDefault: col.isDefault,
|
|
117
|
+
isLoading: col.isLoading,
|
|
118
|
+
isLoadingMore: col.isLoadingMore,
|
|
119
|
+
hasMore: col.hasMore,
|
|
120
|
+
loaderRef: col.loaderRef,
|
|
121
|
+
onEditColumn: !col.isPinned && onEditColumn ? () => onEditColumn(col.stage.id) : void 0,
|
|
122
|
+
onDeleteColumn: onDeleteColumn && !col.isDefault && !col.isPinned ? () => onDeleteColumn(col.stage.id) : void 0,
|
|
123
|
+
onCardDrop: onMoveCard ? (cardId) => onMoveCard(cardId, col.key) : void 0,
|
|
124
|
+
onCardClick,
|
|
125
|
+
onTaskToggle,
|
|
126
|
+
onMarkAsDone,
|
|
127
|
+
onMoveToNextStage,
|
|
128
|
+
onSendLoanApplication: col.onSendLoanApplication,
|
|
129
|
+
onViewDetails,
|
|
130
|
+
onChangePriority,
|
|
131
|
+
onPutOnHold,
|
|
132
|
+
onDeleteOpportunity,
|
|
133
|
+
onAddLead: col.onAddLead,
|
|
134
|
+
submittingOpportunityId
|
|
135
|
+
},
|
|
136
|
+
col.key
|
|
137
|
+
);
|
|
107
138
|
return /* @__PURE__ */ jsxs(
|
|
108
139
|
"div",
|
|
109
140
|
{
|
|
@@ -123,36 +154,12 @@ function PipelineBoard({
|
|
|
123
154
|
onRefresh
|
|
124
155
|
}
|
|
125
156
|
),
|
|
126
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-1
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
isDragging: col.isDragging,
|
|
133
|
-
isDropTarget: col.isDropTarget,
|
|
134
|
-
isDefault: col.isDefault,
|
|
135
|
-
isLoading: col.isLoading,
|
|
136
|
-
isLoadingMore: col.isLoadingMore,
|
|
137
|
-
hasMore: col.hasMore,
|
|
138
|
-
loaderRef: col.loaderRef,
|
|
139
|
-
onEditColumn: onEditColumn ? () => onEditColumn(col.stage.id) : void 0,
|
|
140
|
-
onDeleteColumn: onDeleteColumn && !col.isDefault ? () => onDeleteColumn(col.stage.id) : void 0,
|
|
141
|
-
onCardDrop: onMoveCard ? (cardId) => onMoveCard(cardId, col.key) : void 0,
|
|
142
|
-
onCardClick,
|
|
143
|
-
onTaskToggle,
|
|
144
|
-
onMarkAsDone,
|
|
145
|
-
onMoveToNextStage,
|
|
146
|
-
onSendLoanApplication: col.onSendLoanApplication,
|
|
147
|
-
onViewDetails,
|
|
148
|
-
onChangePriority,
|
|
149
|
-
onPutOnHold,
|
|
150
|
-
onDeleteOpportunity,
|
|
151
|
-
submittingOpportunityId
|
|
152
|
-
},
|
|
153
|
-
col.key
|
|
154
|
-
)),
|
|
155
|
-
columns.length === 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center justify-center", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "No columns to display." }) })
|
|
157
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 overflow-hidden", children: [
|
|
158
|
+
pinnedCols.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 gap-3 border-r border-border p-4", children: pinnedCols.map(renderColumn) }),
|
|
159
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 gap-3 overflow-x-auto p-4", children: [
|
|
160
|
+
scrollableCols.map(renderColumn),
|
|
161
|
+
columns.length === 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center justify-center", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "No columns to display." }) })
|
|
162
|
+
] })
|
|
156
163
|
] })
|
|
157
164
|
]
|
|
158
165
|
}
|
|
@@ -75,6 +75,7 @@ import {
|
|
|
75
75
|
MapPin,
|
|
76
76
|
MessageSquare,
|
|
77
77
|
MoreHorizontal,
|
|
78
|
+
Navigation,
|
|
78
79
|
Paperclip,
|
|
79
80
|
Phone,
|
|
80
81
|
PhoneCall,
|
|
@@ -913,6 +914,31 @@ var MEETING_LABEL = {
|
|
|
913
914
|
phone: "Phone Call",
|
|
914
915
|
"in-person": "In Person"
|
|
915
916
|
};
|
|
917
|
+
var MEETING_DETAIL_ICON = {
|
|
918
|
+
video: Link2,
|
|
919
|
+
phone: PhoneCall,
|
|
920
|
+
"in-person": Navigation
|
|
921
|
+
};
|
|
922
|
+
function MeetingDetailRow({
|
|
923
|
+
meetingType,
|
|
924
|
+
detail
|
|
925
|
+
}) {
|
|
926
|
+
const DetailIcon = MEETING_DETAIL_ICON[meetingType];
|
|
927
|
+
const isLink = detail.startsWith("http");
|
|
928
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
929
|
+
/* @__PURE__ */ jsx(DetailIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
930
|
+
isLink ? /* @__PURE__ */ jsx(
|
|
931
|
+
"a",
|
|
932
|
+
{
|
|
933
|
+
href: detail,
|
|
934
|
+
target: "_blank",
|
|
935
|
+
rel: "noopener noreferrer",
|
|
936
|
+
className: "text-sm text-primary underline underline-offset-2 break-all hover:text-primary/80",
|
|
937
|
+
children: detail
|
|
938
|
+
}
|
|
939
|
+
) : /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground break-all", children: detail })
|
|
940
|
+
] });
|
|
941
|
+
}
|
|
916
942
|
function AppointmentSection({
|
|
917
943
|
appointment,
|
|
918
944
|
contactId,
|
|
@@ -932,6 +958,13 @@ function AppointmentSection({
|
|
|
932
958
|
/* @__PURE__ */ jsx(AppointmentIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
933
959
|
/* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: MEETING_LABEL[appointment.meetingType] })
|
|
934
960
|
] }),
|
|
961
|
+
appointment.meetingDetail && /* @__PURE__ */ jsx(
|
|
962
|
+
MeetingDetailRow,
|
|
963
|
+
{
|
|
964
|
+
meetingType: appointment.meetingType,
|
|
965
|
+
detail: appointment.meetingDetail
|
|
966
|
+
}
|
|
967
|
+
),
|
|
935
968
|
/* @__PURE__ */ jsx(
|
|
936
969
|
"span",
|
|
937
970
|
{
|
|
@@ -367,7 +367,7 @@ function AppointmentBookDialog({
|
|
|
367
367
|
] })
|
|
368
368
|
] }),
|
|
369
369
|
/* @__PURE__ */ jsx(Separator, {}),
|
|
370
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
370
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 overflow-y-auto max-h-[calc(90vh-200px)]", children: [
|
|
371
371
|
!isClientMode && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
372
372
|
/* @__PURE__ */ jsx(Label, { children: "Client" }),
|
|
373
373
|
/* @__PURE__ */ jsx(
|
|
@@ -1733,6 +1733,31 @@ var MEETING_LABEL = {
|
|
|
1733
1733
|
phone: "Phone Call",
|
|
1734
1734
|
"in-person": "In Person"
|
|
1735
1735
|
};
|
|
1736
|
+
var MEETING_DETAIL_ICON = {
|
|
1737
|
+
video: import_lucide_react4.Link2,
|
|
1738
|
+
phone: import_lucide_react4.PhoneCall,
|
|
1739
|
+
"in-person": import_lucide_react4.Navigation
|
|
1740
|
+
};
|
|
1741
|
+
function MeetingDetailRow({
|
|
1742
|
+
meetingType,
|
|
1743
|
+
detail
|
|
1744
|
+
}) {
|
|
1745
|
+
const DetailIcon = MEETING_DETAIL_ICON[meetingType];
|
|
1746
|
+
const isLink = detail.startsWith("http");
|
|
1747
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
1748
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DetailIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
1749
|
+
isLink ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1750
|
+
"a",
|
|
1751
|
+
{
|
|
1752
|
+
href: detail,
|
|
1753
|
+
target: "_blank",
|
|
1754
|
+
rel: "noopener noreferrer",
|
|
1755
|
+
className: "text-sm text-primary underline underline-offset-2 break-all hover:text-primary/80",
|
|
1756
|
+
children: detail
|
|
1757
|
+
}
|
|
1758
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-sm text-muted-foreground break-all", children: detail })
|
|
1759
|
+
] });
|
|
1760
|
+
}
|
|
1736
1761
|
function AppointmentSection({
|
|
1737
1762
|
appointment,
|
|
1738
1763
|
contactId,
|
|
@@ -1752,6 +1777,13 @@ function AppointmentSection({
|
|
|
1752
1777
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(AppointmentIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
1753
1778
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-sm text-muted-foreground", children: MEETING_LABEL[appointment.meetingType] })
|
|
1754
1779
|
] }),
|
|
1780
|
+
appointment.meetingDetail && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1781
|
+
MeetingDetailRow,
|
|
1782
|
+
{
|
|
1783
|
+
meetingType: appointment.meetingType,
|
|
1784
|
+
detail: appointment.meetingDetail
|
|
1785
|
+
}
|
|
1786
|
+
),
|
|
1755
1787
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1756
1788
|
"span",
|
|
1757
1789
|
{
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
ConversationStatusChip,
|
|
10
10
|
ConversationsPage,
|
|
11
11
|
LeadInfoPanel
|
|
12
|
-
} from "../../chunk-
|
|
12
|
+
} from "../../chunk-LRQSY3TP.mjs";
|
|
13
13
|
import "../../chunk-3S6KVFF5.mjs";
|
|
14
14
|
import "../../chunk-WE4YKBDE.mjs";
|
|
15
15
|
import "../../chunk-H5DTKPJ2.mjs";
|
|
@@ -1688,7 +1688,7 @@ function AppointmentBookDialog({
|
|
|
1688
1688
|
] })
|
|
1689
1689
|
] }),
|
|
1690
1690
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Separator, {}),
|
|
1691
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-col gap-4", children: [
|
|
1691
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-col gap-4 overflow-y-auto max-h-[calc(90vh-200px)]", children: [
|
|
1692
1692
|
!isClientMode && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
|
|
1693
1693
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Label, { children: "Client" }),
|
|
1694
1694
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
@@ -1358,11 +1358,66 @@ function LeadCard({
|
|
|
1358
1358
|
);
|
|
1359
1359
|
}
|
|
1360
1360
|
|
|
1361
|
-
// src/components/ui/
|
|
1361
|
+
// src/components/ui/tooltip.tsx
|
|
1362
|
+
var import_tooltip = require("@base-ui/react/tooltip");
|
|
1362
1363
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1363
|
-
function
|
|
1364
|
-
|
|
1364
|
+
function TooltipProvider(_a) {
|
|
1365
|
+
var _b = _a, {
|
|
1366
|
+
delay = 0
|
|
1367
|
+
} = _b, props = __objRest(_b, [
|
|
1368
|
+
"delay"
|
|
1369
|
+
]);
|
|
1370
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1371
|
+
import_tooltip.Tooltip.Provider,
|
|
1372
|
+
__spreadValues({
|
|
1373
|
+
"data-slot": "tooltip-provider",
|
|
1374
|
+
delay
|
|
1375
|
+
}, props)
|
|
1376
|
+
);
|
|
1365
1377
|
}
|
|
1378
|
+
function Tooltip(_a) {
|
|
1379
|
+
var props = __objRest(_a, []);
|
|
1380
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
|
|
1381
|
+
}
|
|
1382
|
+
function TooltipTrigger(_a) {
|
|
1383
|
+
var props = __objRest(_a, []);
|
|
1384
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
|
|
1385
|
+
}
|
|
1386
|
+
function TooltipContent(_a) {
|
|
1387
|
+
var _b = _a, {
|
|
1388
|
+
className,
|
|
1389
|
+
sideOffset = 8,
|
|
1390
|
+
side,
|
|
1391
|
+
children,
|
|
1392
|
+
style
|
|
1393
|
+
} = _b, props = __objRest(_b, [
|
|
1394
|
+
"className",
|
|
1395
|
+
"sideOffset",
|
|
1396
|
+
"side",
|
|
1397
|
+
"children",
|
|
1398
|
+
"style"
|
|
1399
|
+
]);
|
|
1400
|
+
const themeVars = useThemeVars();
|
|
1401
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_tooltip.Tooltip.Positioner, { sideOffset, side, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1402
|
+
import_tooltip.Tooltip.Popup,
|
|
1403
|
+
__spreadProps(__spreadValues({
|
|
1404
|
+
className: cn(
|
|
1405
|
+
"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",
|
|
1406
|
+
className
|
|
1407
|
+
),
|
|
1408
|
+
"data-slot": "tooltip-content",
|
|
1409
|
+
style: __spreadValues(__spreadValues({}, themeVars), style)
|
|
1410
|
+
}, props), {
|
|
1411
|
+
children: [
|
|
1412
|
+
children,
|
|
1413
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.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" })
|
|
1414
|
+
]
|
|
1415
|
+
})
|
|
1416
|
+
) }) });
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
// src/components/ui/kanban-column.tsx
|
|
1420
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1366
1421
|
function growthColor(growth) {
|
|
1367
1422
|
return growth > 0 ? "var(--color-success-text)" : "var(--color-destructive-text)";
|
|
1368
1423
|
}
|
|
@@ -1378,6 +1433,7 @@ function KanbanColumn({
|
|
|
1378
1433
|
loaderRef,
|
|
1379
1434
|
onEditColumn,
|
|
1380
1435
|
onDeleteColumn,
|
|
1436
|
+
onAddLead,
|
|
1381
1437
|
onTaskToggle,
|
|
1382
1438
|
onMarkAsDone,
|
|
1383
1439
|
onMoveToNextStage,
|
|
@@ -1414,7 +1470,7 @@ function KanbanColumn({
|
|
|
1414
1470
|
const cardId = e.dataTransfer.getData("text/plain");
|
|
1415
1471
|
if (cardId) onCardDrop(cardId);
|
|
1416
1472
|
}
|
|
1417
|
-
return /* @__PURE__ */ (0,
|
|
1473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1418
1474
|
"div",
|
|
1419
1475
|
{
|
|
1420
1476
|
className: cn(
|
|
@@ -1428,43 +1484,67 @@ function KanbanColumn({
|
|
|
1428
1484
|
}),
|
|
1429
1485
|
"data-slot": "kanban-column",
|
|
1430
1486
|
children: [
|
|
1431
|
-
/* @__PURE__ */ (0,
|
|
1432
|
-
/* @__PURE__ */ (0,
|
|
1433
|
-
/* @__PURE__ */ (0,
|
|
1434
|
-
/* @__PURE__ */ (0,
|
|
1435
|
-
|
|
1436
|
-
stage.name
|
|
1437
|
-
] }),
|
|
1438
|
-
hasMenu && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DropdownMenu, { children: [
|
|
1439
|
-
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1440
|
-
DropdownMenuTrigger,
|
|
1487
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col gap-2 border-b border-border bg-background px-3 py-3", children: [
|
|
1488
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
1489
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("h2", { className: "text-sm font-semibold text-foreground", children: [
|
|
1490
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1491
|
+
"span",
|
|
1441
1492
|
{
|
|
1442
|
-
className: cn(
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
),
|
|
1446
|
-
"aria-label": "Column actions",
|
|
1447
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react7.MoreVertical, { className: "size-4" })
|
|
1493
|
+
className: cn(!stage.countColor && "text-muted-foreground"),
|
|
1494
|
+
style: stage.countColor ? { color: stage.countColor } : void 0,
|
|
1495
|
+
children: stage.count
|
|
1448
1496
|
}
|
|
1449
1497
|
),
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1498
|
+
" ",
|
|
1499
|
+
stage.name
|
|
1500
|
+
] }),
|
|
1501
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-0.5", children: [
|
|
1502
|
+
onAddLead && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Tooltip, { children: [
|
|
1503
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1504
|
+
"button",
|
|
1505
|
+
{
|
|
1506
|
+
className: cn(
|
|
1507
|
+
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
1508
|
+
"size-7 shrink-0"
|
|
1509
|
+
),
|
|
1510
|
+
onClick: onAddLead,
|
|
1511
|
+
"aria-label": "Add lead",
|
|
1512
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react7.Plus, { className: "size-4" })
|
|
1513
|
+
}
|
|
1514
|
+
) }),
|
|
1515
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipContent, { children: "Add lead" })
|
|
1516
|
+
] }) }),
|
|
1517
|
+
hasMenu && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(DropdownMenu, { children: [
|
|
1518
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1519
|
+
DropdownMenuTrigger,
|
|
1520
|
+
{
|
|
1521
|
+
className: cn(
|
|
1522
|
+
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
1523
|
+
"-mr-1 size-7 shrink-0"
|
|
1524
|
+
),
|
|
1525
|
+
"aria-label": "Column actions",
|
|
1526
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react7.MoreVertical, { className: "size-4" })
|
|
1527
|
+
}
|
|
1528
|
+
),
|
|
1529
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(DropdownMenuContent, { align: "end", children: [
|
|
1530
|
+
onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
|
|
1531
|
+
!isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
|
|
1532
|
+
onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuSeparator, {}),
|
|
1533
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1534
|
+
DropdownMenuItem,
|
|
1535
|
+
{
|
|
1536
|
+
onClick: onDeleteColumn,
|
|
1537
|
+
className: "text-destructive focus:text-destructive",
|
|
1538
|
+
children: "Delete column"
|
|
1539
|
+
}
|
|
1540
|
+
)
|
|
1541
|
+
] })
|
|
1462
1542
|
] })
|
|
1463
1543
|
] })
|
|
1464
1544
|
] })
|
|
1465
1545
|
] }),
|
|
1466
|
-
/* @__PURE__ */ (0,
|
|
1467
|
-
stage.growth != null ? /* @__PURE__ */ (0,
|
|
1546
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
1547
|
+
stage.growth != null ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1468
1548
|
Badge,
|
|
1469
1549
|
{
|
|
1470
1550
|
variant: "outline",
|
|
@@ -1474,11 +1554,11 @@ function KanbanColumn({
|
|
|
1474
1554
|
stage.growth
|
|
1475
1555
|
]
|
|
1476
1556
|
}
|
|
1477
|
-
) : /* @__PURE__ */ (0,
|
|
1478
|
-
/* @__PURE__ */ (0,
|
|
1557
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", {}),
|
|
1558
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-sm font-bold tabular-nums text-foreground", children: formatCurrency(stage.totalValue) })
|
|
1479
1559
|
] })
|
|
1480
1560
|
] }),
|
|
1481
|
-
/* @__PURE__ */ (0,
|
|
1561
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1482
1562
|
"div",
|
|
1483
1563
|
{
|
|
1484
1564
|
className: cn(
|
|
@@ -1489,13 +1569,13 @@ function KanbanColumn({
|
|
|
1489
1569
|
onDragLeave: handleDragLeave,
|
|
1490
1570
|
onDrop: handleDrop,
|
|
1491
1571
|
children: [
|
|
1492
|
-
(isDropTarget || isDragOver) && /* @__PURE__ */ (0,
|
|
1572
|
+
(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: [
|
|
1493
1573
|
"Drop here \u2192 ",
|
|
1494
1574
|
stage.name
|
|
1495
1575
|
] }),
|
|
1496
|
-
isLoading ? /* @__PURE__ */ (0,
|
|
1576
|
+
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: [
|
|
1497
1577
|
opportunities.map(
|
|
1498
|
-
(opp) => onSendLoanApplication ? /* @__PURE__ */ (0,
|
|
1578
|
+
(opp) => onSendLoanApplication ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1499
1579
|
LeadCard,
|
|
1500
1580
|
{
|
|
1501
1581
|
id: opp.id,
|
|
@@ -1508,7 +1588,7 @@ function KanbanColumn({
|
|
|
1508
1588
|
isSubmitting: submittingOpportunityId === opp.id
|
|
1509
1589
|
},
|
|
1510
1590
|
opp.id
|
|
1511
|
-
) : /* @__PURE__ */ (0,
|
|
1591
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1512
1592
|
OpportunityCard,
|
|
1513
1593
|
__spreadProps(__spreadValues({}, opp), {
|
|
1514
1594
|
draggable: !!onCardDrop,
|
|
@@ -1529,12 +1609,12 @@ function KanbanColumn({
|
|
|
1529
1609
|
opp.id
|
|
1530
1610
|
)
|
|
1531
1611
|
),
|
|
1532
|
-
hasMore && /* @__PURE__ */ (0,
|
|
1612
|
+
hasMore && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1533
1613
|
"div",
|
|
1534
1614
|
{
|
|
1535
1615
|
ref: loaderRef,
|
|
1536
1616
|
className: "flex min-h-[50px] items-center justify-center",
|
|
1537
|
-
children: isLoadingMore && /* @__PURE__ */ (0,
|
|
1617
|
+
children: isLoadingMore && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Spinner, { className: "size-5 text-muted-foreground" })
|
|
1538
1618
|
}
|
|
1539
1619
|
)
|
|
1540
1620
|
] })
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KanbanColumn
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-A43XIVO6.mjs";
|
|
4
4
|
import "../../chunk-YV7XF32X.mjs";
|
|
5
5
|
import "../../chunk-EXI64H46.mjs";
|
|
6
6
|
import "../../chunk-JPGL36WQ.mjs";
|
|
7
7
|
import "../../chunk-IKXYTCSB.mjs";
|
|
8
8
|
import "../../chunk-JVMXMFBB.mjs";
|
|
9
9
|
import "../../chunk-PNSYFE3K.mjs";
|
|
10
|
+
import "../../chunk-3S6KVFF5.mjs";
|
|
10
11
|
import "../../chunk-H5DTKPJ2.mjs";
|
|
11
12
|
import "../../chunk-2GIYVERS.mjs";
|
|
12
13
|
import "../../chunk-X6RC5UWB.mjs";
|