@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/dist/index.js CHANGED
@@ -3105,6 +3105,31 @@ var MEETING_LABEL = {
3105
3105
  phone: "Phone Call",
3106
3106
  "in-person": "In Person"
3107
3107
  };
3108
+ var MEETING_DETAIL_ICON = {
3109
+ video: import_lucide_react6.Link2,
3110
+ phone: import_lucide_react6.PhoneCall,
3111
+ "in-person": import_lucide_react6.Navigation
3112
+ };
3113
+ function MeetingDetailRow({
3114
+ meetingType,
3115
+ detail
3116
+ }) {
3117
+ const DetailIcon = MEETING_DETAIL_ICON[meetingType];
3118
+ const isLink = detail.startsWith("http");
3119
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center gap-2", children: [
3120
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DetailIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
3121
+ isLink ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3122
+ "a",
3123
+ {
3124
+ href: detail,
3125
+ target: "_blank",
3126
+ rel: "noopener noreferrer",
3127
+ className: "text-sm text-primary underline underline-offset-2 break-all hover:text-primary/80",
3128
+ children: detail
3129
+ }
3130
+ ) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm text-muted-foreground break-all", children: detail })
3131
+ ] });
3132
+ }
3108
3133
  function AppointmentSection({
3109
3134
  appointment,
3110
3135
  contactId,
@@ -3124,6 +3149,13 @@ function AppointmentSection({
3124
3149
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AppointmentIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
3125
3150
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm text-muted-foreground", children: MEETING_LABEL[appointment.meetingType] })
3126
3151
  ] }),
3152
+ appointment.meetingDetail && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3153
+ MeetingDetailRow,
3154
+ {
3155
+ meetingType: appointment.meetingType,
3156
+ detail: appointment.meetingDetail
3157
+ }
3158
+ ),
3127
3159
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3128
3160
  "span",
3129
3161
  {
@@ -9233,7 +9265,7 @@ function AppointmentBookDialog({
9233
9265
  ] })
9234
9266
  ] }),
9235
9267
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Separator, {}),
9236
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex flex-col gap-4", children: [
9268
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex flex-col gap-4 overflow-y-auto max-h-[calc(90vh-200px)]", children: [
9237
9269
  !isClientMode && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
9238
9270
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Label, { children: "Client" }),
9239
9271
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -19361,9 +19393,6 @@ function LeadCard({
19361
19393
 
19362
19394
  // src/components/ui/kanban-column.tsx
19363
19395
  var import_jsx_runtime96 = require("react/jsx-runtime");
19364
- function formatTotalValue(value) {
19365
- return formatCurrency(value);
19366
- }
19367
19396
  function growthColor(growth) {
19368
19397
  return growth > 0 ? "var(--color-success-text)" : "var(--color-destructive-text)";
19369
19398
  }
@@ -19379,6 +19408,7 @@ function KanbanColumn({
19379
19408
  loaderRef,
19380
19409
  onEditColumn,
19381
19410
  onDeleteColumn,
19411
+ onAddLead,
19382
19412
  onTaskToggle,
19383
19413
  onMarkAsDone,
19384
19414
  onMoveToNextStage,
@@ -19432,34 +19462,58 @@ function KanbanColumn({
19432
19462
  /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex flex-col gap-2 border-b border-border bg-background px-3 py-3", children: [
19433
19463
  /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
19434
19464
  /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("h2", { className: "text-sm font-semibold text-foreground", children: [
19435
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "text-muted-foreground", children: stage.count }),
19436
- " ",
19437
- stage.name
19438
- ] }),
19439
- hasMenu && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(DropdownMenu, { children: [
19440
19465
  /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
19441
- DropdownMenuTrigger,
19466
+ "span",
19442
19467
  {
19443
- className: cn(
19444
- buttonVariants({ variant: "ghost", size: "icon" }),
19445
- "-mr-1 size-7 shrink-0"
19446
- ),
19447
- "aria-label": "Column actions",
19448
- children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react53.MoreVertical, { className: "size-4" })
19468
+ className: cn(!stage.countColor && "text-muted-foreground"),
19469
+ style: stage.countColor ? { color: stage.countColor } : void 0,
19470
+ children: stage.count
19449
19471
  }
19450
19472
  ),
19451
- /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(DropdownMenuContent, { align: "end", children: [
19452
- onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
19453
- !isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [
19454
- onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(DropdownMenuSeparator, {}),
19455
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
19456
- DropdownMenuItem,
19457
- {
19458
- onClick: onDeleteColumn,
19459
- className: "text-destructive focus:text-destructive",
19460
- children: "Delete column"
19461
- }
19462
- )
19473
+ " ",
19474
+ stage.name
19475
+ ] }),
19476
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex items-center gap-0.5", children: [
19477
+ onAddLead && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(Tooltip, { children: [
19478
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
19479
+ "button",
19480
+ {
19481
+ className: cn(
19482
+ buttonVariants({ variant: "ghost", size: "icon" }),
19483
+ "size-7 shrink-0"
19484
+ ),
19485
+ onClick: onAddLead,
19486
+ "aria-label": "Add lead",
19487
+ children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react53.Plus, { className: "size-4" })
19488
+ }
19489
+ ) }),
19490
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(TooltipContent, { children: "Add lead" })
19491
+ ] }) }),
19492
+ hasMenu && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(DropdownMenu, { children: [
19493
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
19494
+ DropdownMenuTrigger,
19495
+ {
19496
+ className: cn(
19497
+ buttonVariants({ variant: "ghost", size: "icon" }),
19498
+ "-mr-1 size-7 shrink-0"
19499
+ ),
19500
+ "aria-label": "Column actions",
19501
+ children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react53.MoreVertical, { className: "size-4" })
19502
+ }
19503
+ ),
19504
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(DropdownMenuContent, { align: "end", children: [
19505
+ onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(DropdownMenuItem, { onClick: onEditColumn, children: "Edit column settings" }),
19506
+ !isDefault && onDeleteColumn && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [
19507
+ onEditColumn && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(DropdownMenuSeparator, {}),
19508
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
19509
+ DropdownMenuItem,
19510
+ {
19511
+ onClick: onDeleteColumn,
19512
+ className: "text-destructive focus:text-destructive",
19513
+ children: "Delete column"
19514
+ }
19515
+ )
19516
+ ] })
19463
19517
  ] })
19464
19518
  ] })
19465
19519
  ] })
@@ -19476,7 +19530,7 @@ function KanbanColumn({
19476
19530
  ]
19477
19531
  }
19478
19532
  ) : /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", {}),
19479
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: formatTotalValue(stage.totalValue) })
19533
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "text-sm font-bold tabular-nums text-foreground", children: formatCurrency(stage.totalValue) })
19480
19534
  ] })
19481
19535
  ] }),
19482
19536
  /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
@@ -23161,6 +23215,37 @@ function PipelineBoard({
23161
23215
  className
23162
23216
  }) {
23163
23217
  const hasToolbar = onSearchChange || filterOptions.length > 0 && onFilterChange;
23218
+ const pinnedCols = columns.filter((c) => c.isPinned);
23219
+ const scrollableCols = columns.filter((c) => !c.isPinned);
23220
+ const renderColumn = (col) => /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
23221
+ KanbanColumn,
23222
+ {
23223
+ stage: col.stage,
23224
+ opportunities: col.opportunities,
23225
+ isDragging: col.isDragging,
23226
+ isDropTarget: col.isDropTarget,
23227
+ isDefault: col.isDefault,
23228
+ isLoading: col.isLoading,
23229
+ isLoadingMore: col.isLoadingMore,
23230
+ hasMore: col.hasMore,
23231
+ loaderRef: col.loaderRef,
23232
+ onEditColumn: !col.isPinned && onEditColumn ? () => onEditColumn(col.stage.id) : void 0,
23233
+ onDeleteColumn: onDeleteColumn && !col.isDefault && !col.isPinned ? () => onDeleteColumn(col.stage.id) : void 0,
23234
+ onCardDrop: onMoveCard ? (cardId) => onMoveCard(cardId, col.key) : void 0,
23235
+ onCardClick,
23236
+ onTaskToggle,
23237
+ onMarkAsDone,
23238
+ onMoveToNextStage,
23239
+ onSendLoanApplication: col.onSendLoanApplication,
23240
+ onViewDetails,
23241
+ onChangePriority,
23242
+ onPutOnHold,
23243
+ onDeleteOpportunity,
23244
+ onAddLead: col.onAddLead,
23245
+ submittingOpportunityId
23246
+ },
23247
+ col.key
23248
+ );
23164
23249
  return /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
23165
23250
  "div",
23166
23251
  {
@@ -23180,36 +23265,12 @@ function PipelineBoard({
23180
23265
  onRefresh
23181
23266
  }
23182
23267
  ),
23183
- /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "flex flex-1 gap-3 overflow-x-auto p-4", children: [
23184
- columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
23185
- KanbanColumn,
23186
- {
23187
- stage: col.stage,
23188
- opportunities: col.opportunities,
23189
- isDragging: col.isDragging,
23190
- isDropTarget: col.isDropTarget,
23191
- isDefault: col.isDefault,
23192
- isLoading: col.isLoading,
23193
- isLoadingMore: col.isLoadingMore,
23194
- hasMore: col.hasMore,
23195
- loaderRef: col.loaderRef,
23196
- onEditColumn: onEditColumn ? () => onEditColumn(col.stage.id) : void 0,
23197
- onDeleteColumn: onDeleteColumn && !col.isDefault ? () => onDeleteColumn(col.stage.id) : void 0,
23198
- onCardDrop: onMoveCard ? (cardId) => onMoveCard(cardId, col.key) : void 0,
23199
- onCardClick,
23200
- onTaskToggle,
23201
- onMarkAsDone,
23202
- onMoveToNextStage,
23203
- onSendLoanApplication: col.onSendLoanApplication,
23204
- onViewDetails,
23205
- onChangePriority,
23206
- onPutOnHold,
23207
- onDeleteOpportunity,
23208
- submittingOpportunityId
23209
- },
23210
- col.key
23211
- )),
23212
- columns.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { className: "flex flex-1 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("p", { className: "text-sm text-muted-foreground", children: "No columns to display." }) })
23268
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "flex flex-1 overflow-hidden", children: [
23269
+ pinnedCols.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { className: "flex shrink-0 gap-3 border-r border-border p-4", children: pinnedCols.map(renderColumn) }),
23270
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "flex flex-1 gap-3 overflow-x-auto p-4", children: [
23271
+ scrollableCols.map(renderColumn),
23272
+ columns.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { className: "flex flex-1 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("p", { className: "text-sm text-muted-foreground", children: "No columns to display." }) })
23273
+ ] })
23213
23274
  ] })
23214
23275
  ]
23215
23276
  }
package/dist/index.mjs CHANGED
@@ -71,7 +71,7 @@ import {
71
71
  } from "./chunk-KFH36NKF.mjs";
72
72
  import {
73
73
  PipelineBoard
74
- } from "./chunk-ZA44WICP.mjs";
74
+ } from "./chunk-FGHM34AV.mjs";
75
75
  import {
76
76
  PipelineChart
77
77
  } from "./chunk-PCULNQWA.mjs";
@@ -117,7 +117,7 @@ import {
117
117
  } from "./chunk-PUJ42INK.mjs";
118
118
  import {
119
119
  KanbanColumn
120
- } from "./chunk-AKWN5ZQG.mjs";
120
+ } from "./chunk-A43XIVO6.mjs";
121
121
  import {
122
122
  LeadCard,
123
123
  OpportunityCard
@@ -364,7 +364,7 @@ import {
364
364
  } from "./chunk-R2ON6CAN.mjs";
365
365
  import {
366
366
  AppointmentBookDialog
367
- } from "./chunk-J7KQON2N.mjs";
367
+ } from "./chunk-RKHKBEE6.mjs";
368
368
  import {
369
369
  RadioGroup,
370
370
  RadioGroupCard,
@@ -516,7 +516,7 @@ import {
516
516
  ConversationStatusChip,
517
517
  ConversationsPage,
518
518
  LeadInfoPanel
519
- } from "./chunk-EB626HVW.mjs";
519
+ } from "./chunk-LRQSY3TP.mjs";
520
520
  import {
521
521
  Tooltip,
522
522
  TooltipContent,