@wealthx/shadcn 1.5.10 → 1.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/.turbo/turbo-build.log +114 -114
  2. package/CHANGELOG.md +12 -0
  3. package/dist/{chunk-AANINK2B.mjs → chunk-2KNQZG5S.mjs} +1 -1
  4. package/dist/chunk-3KLJ4XRE.mjs +375 -0
  5. package/dist/{chunk-6U4NQGVM.mjs → chunk-4X4MGYHE.mjs} +2 -2
  6. package/dist/{chunk-CEEVYRQA.mjs → chunk-67DGIPQ4.mjs} +1 -1
  7. package/dist/{chunk-7UIL5UN3.mjs → chunk-7II6QRCZ.mjs} +1 -1
  8. package/dist/{chunk-W5QJ57PU.mjs → chunk-7LN5OGC2.mjs} +1 -1
  9. package/dist/{chunk-ZXEUBBHJ.mjs → chunk-7TMPOZDE.mjs} +1 -1
  10. package/dist/{chunk-AHSCWXYJ.mjs → chunk-AJUAJC5O.mjs} +1 -1
  11. package/dist/{chunk-3CGM3QXQ.mjs → chunk-AKWN5ZQG.mjs} +2 -2
  12. package/dist/{chunk-O5CP6VP6.mjs → chunk-CPM6P63C.mjs} +56 -44
  13. package/dist/{chunk-FRT3S72S.mjs → chunk-CQ7HKBEX.mjs} +1 -1
  14. package/dist/{chunk-54TRNCID.mjs → chunk-EB626HVW.mjs} +78 -11
  15. package/dist/{chunk-E2BNCA6L.mjs → chunk-EHQL64B7.mjs} +1 -1
  16. package/dist/{chunk-2WCIORP7.mjs → chunk-EXI64H46.mjs} +1 -1
  17. package/dist/{chunk-BBXSNDS3.mjs → chunk-FQYFPHDO.mjs} +1 -1
  18. package/dist/{chunk-3VZ6CYY2.mjs → chunk-GAXNO4JB.mjs} +1 -1
  19. package/dist/{chunk-3WGFIFP6.mjs → chunk-I4P7RXAE.mjs} +1 -1
  20. package/dist/{chunk-Z2BW5T7P.mjs → chunk-IODGRCQG.mjs} +1 -1
  21. package/dist/{chunk-GS47ZSSA.mjs → chunk-J7KQON2N.mjs} +20 -5
  22. package/dist/{chunk-IQGKOT7A.mjs → chunk-K35TFQUB.mjs} +1 -1
  23. package/dist/{chunk-4DO3WM7V.mjs → chunk-K4VWSDJJ.mjs} +1 -1
  24. package/dist/{chunk-KWD6GANL.mjs → chunk-MPA2HV5U.mjs} +1 -1
  25. package/dist/{chunk-5LZZYODG.mjs → chunk-QHAMVWDG.mjs} +19 -1
  26. package/dist/{chunk-XUCDPAVI.mjs → chunk-R6U246E4.mjs} +2 -2
  27. package/dist/{chunk-VCDGLN25.mjs → chunk-S6AYZJYO.mjs} +47 -21
  28. package/dist/{chunk-WL6WVV47.mjs → chunk-X6RC5UWB.mjs} +1 -1
  29. package/dist/{chunk-4BHDDLWK.mjs → chunk-XAS6KBIG.mjs} +2 -2
  30. package/dist/{chunk-VWZS32ZQ.mjs → chunk-XYWEGBAA.mjs} +1 -1
  31. package/dist/{chunk-54MTIKNC.mjs → chunk-YV7XF32X.mjs} +49 -24
  32. package/dist/{chunk-E5EDZQ5J.mjs → chunk-ZA44WICP.mjs} +1 -1
  33. package/dist/components/ui/advisor-card.js +144 -55
  34. package/dist/components/ui/advisor-card.mjs +5 -2
  35. package/dist/components/ui/agent-evaluation-toast.js +1 -1
  36. package/dist/components/ui/agent-evaluation-toast.mjs +2 -2
  37. package/dist/components/ui/ai-assistant-drawer.js +1 -1
  38. package/dist/components/ui/ai-assistant-drawer.mjs +2 -2
  39. package/dist/components/ui/ai-builder.js +1 -1
  40. package/dist/components/ui/ai-builder.mjs +2 -2
  41. package/dist/components/ui/ai-conversations.js +71 -4
  42. package/dist/components/ui/ai-conversations.mjs +3 -3
  43. package/dist/components/ui/appointment-action-dialogs.js +1 -1
  44. package/dist/components/ui/appointment-action-dialogs.mjs +3 -3
  45. package/dist/components/ui/appointment-book-dialog.js +19 -4
  46. package/dist/components/ui/appointment-book-dialog.mjs +3 -3
  47. package/dist/components/ui/appointment-calendar-view.js +1 -1
  48. package/dist/components/ui/appointment-calendar-view.mjs +2 -2
  49. package/dist/components/ui/appointment-detail-sheet.js +1 -1
  50. package/dist/components/ui/appointment-detail-sheet.mjs +4 -4
  51. package/dist/components/ui/appointment-gmail-connect.js +1 -1
  52. package/dist/components/ui/appointment-gmail-connect.mjs +2 -2
  53. package/dist/components/ui/appointment-time-slot-picker.js +1 -1
  54. package/dist/components/ui/appointment-time-slot-picker.mjs +2 -2
  55. package/dist/components/ui/appointment-upcoming-card.js +1 -1
  56. package/dist/components/ui/appointment-upcoming-card.mjs +3 -3
  57. package/dist/components/ui/badge.js +1 -1
  58. package/dist/components/ui/badge.mjs +1 -1
  59. package/dist/components/ui/bank-statement-generate-dialog.js +61 -46
  60. package/dist/components/ui/bank-statement-generate-dialog.mjs +1 -1
  61. package/dist/components/ui/chat-widget-primitives.js +1 -1
  62. package/dist/components/ui/chat-widget-primitives.mjs +2 -2
  63. package/dist/components/ui/chat-widget.js +1 -1
  64. package/dist/components/ui/chat-widget.mjs +3 -3
  65. package/dist/components/ui/chip.js +1 -1
  66. package/dist/components/ui/chip.mjs +2 -2
  67. package/dist/components/ui/contact-alert-dialog/index.js +19 -1
  68. package/dist/components/ui/contact-alert-dialog/index.mjs +1 -1
  69. package/dist/components/ui/dashboard-transactions-table.js +1 -1
  70. package/dist/components/ui/dashboard-transactions-table.mjs +2 -2
  71. package/dist/components/ui/financial-cards.js +1 -1
  72. package/dist/components/ui/financial-cards.mjs +2 -2
  73. package/dist/components/ui/financial-sections.js +1 -1
  74. package/dist/components/ui/financial-sections.mjs +3 -3
  75. package/dist/components/ui/income-summary-component.js +1 -1
  76. package/dist/components/ui/income-summary-component.mjs +1 -1
  77. package/dist/components/ui/integration-card.js +1 -1
  78. package/dist/components/ui/integration-card.mjs +2 -2
  79. package/dist/components/ui/kanban-column.js +46 -23
  80. package/dist/components/ui/kanban-column.mjs +4 -4
  81. package/dist/components/ui/loan-applicant-information.js +1 -1
  82. package/dist/components/ui/loan-applicant-information.mjs +1 -1
  83. package/dist/components/ui/loan-application-badge.js +1 -1
  84. package/dist/components/ui/loan-application-badge.mjs +2 -2
  85. package/dist/components/ui/opportunity-card.js +46 -23
  86. package/dist/components/ui/opportunity-card.mjs +3 -3
  87. package/dist/components/ui/opportunity-summary-tab.js +1 -1
  88. package/dist/components/ui/opportunity-summary-tab.mjs +3 -3
  89. package/dist/components/ui/pipeline-board.js +46 -23
  90. package/dist/components/ui/pipeline-board.mjs +5 -5
  91. package/dist/components/ui/pipeline-primitives.js +1 -1
  92. package/dist/components/ui/pipeline-primitives.mjs +2 -2
  93. package/dist/components/ui/property-asset-card.js +1 -1
  94. package/dist/components/ui/property-asset-card.mjs +1 -1
  95. package/dist/components/ui/resource-center.js +1 -1
  96. package/dist/components/ui/resource-center.mjs +2 -2
  97. package/dist/components/ui/share-details-dialog.js +326 -30
  98. package/dist/components/ui/share-details-dialog.mjs +4 -1
  99. package/dist/components/ui/stage-timeline.js +1 -1
  100. package/dist/components/ui/stage-timeline.mjs +3 -3
  101. package/dist/index.js +583 -232
  102. package/dist/index.mjs +45 -43
  103. package/dist/styles.css +1 -1
  104. package/package.json +1 -1
  105. package/src/components/index.tsx +4 -0
  106. package/src/components/ui/advisor-card.tsx +75 -25
  107. package/src/components/ui/ai-conversations.tsx +157 -23
  108. package/src/components/ui/appointment-book-dialog.tsx +26 -3
  109. package/src/components/ui/appointment-time-slot-picker.tsx +1 -0
  110. package/src/components/ui/badge.tsx +1 -1
  111. package/src/components/ui/bank-statement-generate-dialog.tsx +84 -61
  112. package/src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx +19 -1
  113. package/src/components/ui/opportunity-card.tsx +56 -20
  114. package/src/components/ui/share-details-dialog.tsx +251 -0
  115. package/src/styles/styles-css.ts +1 -1
  116. package/dist/chunk-OZ2R6ERP.mjs +0 -174
package/dist/index.js CHANGED
@@ -388,6 +388,7 @@ __export(index_exports, {
388
388
  SelectableCard: () => SelectableCard,
389
389
  Separator: () => Separator,
390
390
  ServiceConfigurationModal: () => ServiceConfigurationModal,
391
+ ShareContactDialog: () => ShareContactDialog,
391
392
  ShareDetailsDialog: () => ShareDetailsDialog,
392
393
  Sheet: () => Sheet,
393
394
  SheetClose: () => SheetClose,
@@ -845,7 +846,7 @@ Slot.displayName = "Slot";
845
846
  // src/components/ui/badge.tsx
846
847
  var import_jsx_runtime3 = require("react/jsx-runtime");
847
848
  var badgeVariants = (0, import_class_variance_authority.cva)(
848
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
849
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
849
850
  {
850
851
  variants: {
851
852
  variant: {
@@ -2614,15 +2615,19 @@ function ChatComposer({
2614
2615
  mode,
2615
2616
  channel: channelProp = "chat",
2616
2617
  onChannelChange,
2618
+ isEmailIntegrated = false,
2617
2619
  contactEmail = "",
2618
2620
  inputValue = "",
2619
2621
  onInputChange,
2620
2622
  onSend,
2623
+ onSendEmail,
2621
2624
  onTakeOver,
2622
2625
  onLetAiHandle,
2623
2626
  className
2624
2627
  }) {
2625
- const [channel, setChannel] = import_react5.default.useState(channelProp);
2628
+ const [channel, setChannel] = import_react5.default.useState(
2629
+ isEmailIntegrated ? channelProp : "chat"
2630
+ );
2626
2631
  const [emailTo, setEmailTo] = import_react5.default.useState(contactEmail);
2627
2632
  const [emailCc, setEmailCc] = import_react5.default.useState("");
2628
2633
  const [showCc, setShowCc] = import_react5.default.useState(false);
@@ -2672,7 +2677,7 @@ function ChatComposer({
2672
2677
  className
2673
2678
  ),
2674
2679
  children: [
2675
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2680
+ isEmailIntegrated && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2676
2681
  Tabs,
2677
2682
  {
2678
2683
  value: channel,
@@ -2807,7 +2812,12 @@ function ChatComposer({
2807
2812
  Button,
2808
2813
  {
2809
2814
  size: "sm",
2810
- onClick: () => onSend == null ? void 0 : onSend(inputValue),
2815
+ onClick: () => onSendEmail == null ? void 0 : onSendEmail({
2816
+ content: inputValue,
2817
+ to: emailTo,
2818
+ cc: emailCc,
2819
+ subject: emailSubject
2820
+ }),
2811
2821
  disabled: !inputValue.trim() || !emailTo.trim(),
2812
2822
  children: [
2813
2823
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react6.Send, { className: "mr-1.5 size-3.5" }),
@@ -2862,9 +2872,11 @@ function ChatThread({
2862
2872
  isAiTyping = false,
2863
2873
  channel,
2864
2874
  onChannelChange,
2875
+ isEmailIntegrated,
2865
2876
  inputValue,
2866
2877
  onInputChange,
2867
2878
  onSend,
2879
+ onSendEmail,
2868
2880
  onTakeOver,
2869
2881
  onLetAiHandle,
2870
2882
  onReopen,
@@ -2872,12 +2884,53 @@ function ChatThread({
2872
2884
  onUnmarkUrgent,
2873
2885
  onArchive,
2874
2886
  onAssignToAdvisor,
2887
+ hasMoreMessages,
2888
+ isLoadingMoreMessages,
2889
+ onLoadMoreMessages,
2875
2890
  onBack,
2876
2891
  onShowLeadInfo,
2877
2892
  className
2878
2893
  }) {
2879
2894
  const aiIsHandling = mode === "ai";
2880
2895
  const isClosed = status === "closed";
2896
+ const scrollRef = import_react5.default.useRef(null);
2897
+ const preLoadScrollHeightRef = import_react5.default.useRef(null);
2898
+ const handleScroll = (e) => {
2899
+ if (!hasMoreMessages || isLoadingMoreMessages || !onLoadMoreMessages) {
2900
+ return;
2901
+ }
2902
+ if (e.currentTarget.scrollTop <= 80) {
2903
+ preLoadScrollHeightRef.current = e.currentTarget.scrollHeight;
2904
+ onLoadMoreMessages();
2905
+ }
2906
+ };
2907
+ const prevLastMessageIdRef = import_react5.default.useRef(void 0);
2908
+ const prevContactIdRef = import_react5.default.useRef(contact.id);
2909
+ import_react5.default.useLayoutEffect(() => {
2910
+ var _a, _b;
2911
+ const el = scrollRef.current;
2912
+ if (!el) return;
2913
+ if (preLoadScrollHeightRef.current !== null) {
2914
+ el.scrollTop = el.scrollHeight - preLoadScrollHeightRef.current;
2915
+ preLoadScrollHeightRef.current = null;
2916
+ prevLastMessageIdRef.current = (_a = messages[messages.length - 1]) == null ? void 0 : _a.id;
2917
+ prevContactIdRef.current = contact.id;
2918
+ return;
2919
+ }
2920
+ const currentLastId = (_b = messages[messages.length - 1]) == null ? void 0 : _b.id;
2921
+ const contactChanged = prevContactIdRef.current !== contact.id;
2922
+ const tailChanged = prevLastMessageIdRef.current !== currentLastId;
2923
+ if (contactChanged || tailChanged) {
2924
+ el.scrollTop = el.scrollHeight;
2925
+ }
2926
+ prevLastMessageIdRef.current = currentLastId;
2927
+ prevContactIdRef.current = contact.id;
2928
+ }, [contact.id, messages]);
2929
+ import_react5.default.useLayoutEffect(() => {
2930
+ if (!isAiTyping) return;
2931
+ const el = scrollRef.current;
2932
+ if (el) el.scrollTop = el.scrollHeight;
2933
+ }, [isAiTyping]);
2881
2934
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: cn("flex flex-col bg-background", className), children: [
2882
2935
  /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2883
2936
  "div",
@@ -2967,9 +3020,12 @@ function ChatThread({
2967
3020
  /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2968
3021
  "div",
2969
3022
  {
3023
+ ref: scrollRef,
3024
+ onScroll: handleScroll,
2970
3025
  className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4",
2971
3026
  tabIndex: 0,
2972
3027
  children: [
3028
+ isLoadingMoreMessages && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex justify-center py-1 text-caption text-muted-foreground", children: "Loading older messages..." }),
2973
3029
  messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground", children: [
2974
3030
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react6.MessageSquare, { className: "size-8 opacity-30" }),
2975
3031
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-sm", children: "No messages yet" })
@@ -3007,10 +3063,12 @@ function ChatThread({
3007
3063
  mode,
3008
3064
  channel,
3009
3065
  onChannelChange,
3066
+ isEmailIntegrated,
3010
3067
  contactEmail: contact.email,
3011
3068
  inputValue,
3012
3069
  onInputChange,
3013
3070
  onSend,
3071
+ onSendEmail,
3014
3072
  onTakeOver,
3015
3073
  onLetAiHandle
3016
3074
  }
@@ -3361,11 +3419,15 @@ function ConversationsPage({
3361
3419
  onChannelFilterChange,
3362
3420
  channel,
3363
3421
  onChannelChange,
3422
+ isEmailIntegrated,
3364
3423
  inputValue,
3365
3424
  internalNotes,
3366
3425
  showLeadPanel = true,
3367
3426
  hasMore,
3368
3427
  isLoadingMore,
3428
+ hasMoreMessages,
3429
+ isLoadingMoreMessages,
3430
+ onLoadMoreMessages,
3369
3431
  isAiTyping,
3370
3432
  notesSaveStatus,
3371
3433
  onSelectConversation,
@@ -3374,6 +3436,7 @@ function ConversationsPage({
3374
3436
  onFilterChange,
3375
3437
  onInputChange,
3376
3438
  onSend,
3439
+ onSendEmail,
3377
3440
  onTakeOver,
3378
3441
  onLetAiHandle,
3379
3442
  onReopen,
@@ -3442,9 +3505,11 @@ function ConversationsPage({
3442
3505
  isAiTyping,
3443
3506
  channel,
3444
3507
  onChannelChange,
3508
+ isEmailIntegrated,
3445
3509
  inputValue,
3446
3510
  onInputChange,
3447
3511
  onSend,
3512
+ onSendEmail,
3448
3513
  onTakeOver,
3449
3514
  onLetAiHandle,
3450
3515
  onReopen,
@@ -3452,6 +3517,9 @@ function ConversationsPage({
3452
3517
  onUnmarkUrgent,
3453
3518
  onArchive,
3454
3519
  onAssignToAdvisor,
3520
+ hasMoreMessages,
3521
+ isLoadingMoreMessages,
3522
+ onLoadMoreMessages,
3455
3523
  onBack: () => setMobilePanel("list"),
3456
3524
  onShowLeadInfo: () => setMobilePanel("lead"),
3457
3525
  className: cn(
@@ -3654,6 +3722,7 @@ function AdvisorCard({
3654
3722
  isPrimary = false,
3655
3723
  appointments,
3656
3724
  onRefer,
3725
+ menuItems,
3657
3726
  onMoreOptions,
3658
3727
  onBookAppointment,
3659
3728
  onViewAppointment
@@ -3664,17 +3733,17 @@ function AdvisorCard({
3664
3733
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-start gap-4 p-4", children: [
3665
3734
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Avatar, { className: "h-10 w-10 shrink-0", children: [
3666
3735
  companyLogoUrl && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AvatarImage, { src: companyLogoUrl, alt: `${name} company logo` }),
3667
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AvatarFallback, { className: "text-sm", children: avatarInitials != null ? avatarInitials : companyName ? companyName.split(" ").map((w) => w[0]).join("").slice(0, 2).toUpperCase() : name.slice(0, 2).toUpperCase() })
3736
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AvatarFallback, { className: "text-caption", children: avatarInitials != null ? avatarInitials : companyName ? companyName.split(" ").map((w) => w[0]).join("").slice(0, 2).toUpperCase() : name.slice(0, 2).toUpperCase() })
3668
3737
  ] }),
3669
3738
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
3670
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm font-semibold leading-tight", children: name }),
3671
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm text-muted-foreground", children: role }),
3739
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-label-large leading-tight", children: name }),
3740
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-body-small text-muted-foreground", children: role }),
3672
3741
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "mt-2 flex flex-col gap-1", children: [
3673
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-1.5 text-sm text-muted-foreground", children: [
3742
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-1.5 text-body-small text-muted-foreground", children: [
3674
3743
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.Phone, { className: "h-4 w-4 shrink-0" }),
3675
3744
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { children: phone })
3676
3745
  ] }),
3677
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-1.5 text-sm text-muted-foreground", children: [
3746
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-1.5 text-body-small text-muted-foreground", children: [
3678
3747
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.Mail, { className: "h-4 w-4 shrink-0" }),
3679
3748
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { children: email })
3680
3749
  ] })
@@ -3682,7 +3751,33 @@ function AdvisorCard({
3682
3751
  ] }),
3683
3752
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex shrink-0 items-center gap-1.5", children: [
3684
3753
  isPrimary && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Badge, { variant: "success", children: "Primary" }),
3685
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3754
+ menuItems && menuItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownMenu, { children: [
3755
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3756
+ DropdownMenuTrigger,
3757
+ {
3758
+ render: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3759
+ Button,
3760
+ {
3761
+ variant: "ghost",
3762
+ size: "icon",
3763
+ className: "h-7 w-7",
3764
+ "aria-label": "More options"
3765
+ }
3766
+ ),
3767
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.MoreVertical, { className: "h-4 w-4" })
3768
+ }
3769
+ ),
3770
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DropdownMenuContent, { align: "end", children: menuItems.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3771
+ DropdownMenuItem,
3772
+ {
3773
+ variant: item.variant,
3774
+ disabled: item.disabled,
3775
+ onClick: item.onClick,
3776
+ children: item.label
3777
+ },
3778
+ i
3779
+ )) })
3780
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3686
3781
  Button,
3687
3782
  {
3688
3783
  variant: "ghost",
@@ -3707,17 +3802,10 @@ function AdvisorCard({
3707
3802
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.CalendarCheck, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
3708
3803
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
3709
3804
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-2", children: [
3710
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3711
- Badge,
3712
- {
3713
- variant: STATUS_VARIANT[appt.status],
3714
- className: "text-[10px]",
3715
- children: STATUS_LABEL[appt.status]
3716
- }
3717
- ),
3718
- appt.appointmentType && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "truncate text-sm font-semibold", children: appt.appointmentType })
3805
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Badge, { variant: STATUS_VARIANT[appt.status], children: STATUS_LABEL[appt.status] }),
3806
+ appt.appointmentType && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "truncate text-h6", children: appt.appointmentType })
3719
3807
  ] }),
3720
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("p", { className: "whitespace-nowrap text-sm text-muted-foreground", children: [
3808
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("p", { className: "whitespace-nowrap text-body-small text-muted-foreground", children: [
3721
3809
  appt.date,
3722
3810
  " \xB7 ",
3723
3811
  appt.timeStart,
@@ -3745,7 +3833,7 @@ function AdvisorCard({
3745
3833
  /* Empty state */
3746
3834
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-3 px-4 py-3", children: [
3747
3835
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.Calendar, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
3748
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "flex-1 text-xs text-muted-foreground", children: "No upcoming appointments" })
3836
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "flex-1 text-caption text-muted-foreground", children: "No upcoming appointments" })
3749
3837
  ] })
3750
3838
  )
3751
3839
  ] }),
@@ -3764,7 +3852,7 @@ function AdvisorCard({
3764
3852
  onRefer && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3765
3853
  Button,
3766
3854
  {
3767
- variant: "outline",
3855
+ variant: "default",
3768
3856
  size: "sm",
3769
3857
  className: "w-full",
3770
3858
  onClick: onRefer,
@@ -3788,8 +3876,8 @@ function AdvisorInviteCard({ onInvite }) {
3788
3876
  children: [
3789
3877
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex h-10 w-10 items-center justify-center border border-dashed border-muted-foreground/40", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.Plus, { className: "h-5 w-5 text-muted-foreground" }) }),
3790
3878
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex flex-col gap-1", children: [
3791
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm font-medium", children: "Add Another Advisor" }),
3792
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-xs text-muted-foreground", children: "Connect more advisors to your account" })
3879
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-label-large", children: "Add Another Advisor" }),
3880
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-caption text-muted-foreground", children: "Connect more advisors to your account" })
3793
3881
  ] })
3794
3882
  ]
3795
3883
  }
@@ -8904,6 +8992,19 @@ var FORMAT_OPTIONS = [
8904
8992
  icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react26.MapPin, { className: "h-4 w-4" })
8905
8993
  }
8906
8994
  ];
8995
+ var CLIENT_FORMAT_OPTIONS = [
8996
+ { value: "call", label: "Call", icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react26.Phone, { className: "h-4 w-4" }) },
8997
+ {
8998
+ value: "online",
8999
+ label: "Online Meeting",
9000
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react26.Video, { className: "h-4 w-4" })
9001
+ },
9002
+ {
9003
+ value: "offline",
9004
+ label: "Offline Meeting",
9005
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react26.MapPin, { className: "h-4 w-4" })
9006
+ }
9007
+ ];
8907
9008
  function MeetingFormatSection({
8908
9009
  format: format5,
8909
9010
  onFormatChange,
@@ -8913,10 +9014,11 @@ function MeetingFormatSection({
8913
9014
  onCustomAddressChange,
8914
9015
  advisorOfficeAddress,
8915
9016
  clientHomeAddress,
8916
- isClientMode
9017
+ isClientMode,
9018
+ formatOptions
8917
9019
  }) {
8918
9020
  return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex flex-col gap-2", children: [
8919
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex gap-2", children: FORMAT_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
9021
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex gap-2", children: formatOptions.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8920
9022
  Toggle,
8921
9023
  {
8922
9024
  variant: "outline",
@@ -9209,7 +9311,8 @@ function AppointmentBookDialog({
9209
9311
  onCustomAddressChange: setCustomAddress,
9210
9312
  advisorOfficeAddress,
9211
9313
  clientHomeAddress,
9212
- isClientMode
9314
+ isClientMode,
9315
+ formatOptions: isClientMode ? CLIENT_FORMAT_OPTIONS : FORMAT_OPTIONS
9213
9316
  }
9214
9317
  )
9215
9318
  ] }),
@@ -11955,6 +12058,10 @@ function BankStatementDocumentTable({
11955
12058
  var import_react21 = require("react");
11956
12059
  var import_date_fns3 = require("date-fns");
11957
12060
  var import_jsx_runtime61 = require("react/jsx-runtime");
12061
+ var APPLICANT_TYPE_LABELS = {
12062
+ primary: "Main applicant",
12063
+ secondary: "Co-applicant"
12064
+ };
11958
12065
  function toIsoDate(date) {
11959
12066
  return date.toISOString().slice(0, 10);
11960
12067
  }
@@ -11978,8 +12085,10 @@ function BankStatementGenerateDialog({
11978
12085
  }) {
11979
12086
  const [statementName, setStatementName] = (0, import_react21.useState)("Bank Statement 1");
11980
12087
  const [rangePreset, setRangePreset] = (0, import_react21.useState)(90);
11981
- const [fromDate, setFromDate] = (0, import_react21.useState)("");
11982
- const [toDate, setToDate] = (0, import_react21.useState)("");
12088
+ const [fromDate, setFromDate] = (0, import_react21.useState)(
12089
+ () => presetToDateRange(90).from
12090
+ );
12091
+ const [toDate, setToDate] = (0, import_react21.useState)(() => presetToDateRange(90).to);
11983
12092
  const [applicantType, setApplicantType] = (0, import_react21.useState)("");
11984
12093
  const [selectedAccountIds, setSelectedAccountIds] = (0, import_react21.useState)([]);
11985
12094
  (0, import_react21.useEffect)(() => {
@@ -12008,6 +12117,11 @@ function BankStatementGenerateDialog({
12008
12117
  setToDate(to);
12009
12118
  }
12010
12119
  };
12120
+ const handlePresetChange = (val) => {
12121
+ if (val.length === 0) return;
12122
+ const raw = val[0];
12123
+ applyPreset(raw === "custom" ? "custom" : Number(raw));
12124
+ };
12011
12125
  const areAllSelected = bankAccounts.length > 0 && selectedAccountIds.length === bankAccounts.length;
12012
12126
  const isSomeSelected = selectedAccountIds.length > 0 && !areAllSelected;
12013
12127
  const handleToggleAccount = (id) => {
@@ -12043,7 +12157,8 @@ function BankStatementGenerateDialog({
12043
12157
  return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
12044
12158
  DialogContent,
12045
12159
  {
12046
- className: cn("max-w-[700px]", className),
12160
+ size: "3xl",
12161
+ className,
12047
12162
  "data-slot": "bank-statement-generate-dialog",
12048
12163
  children: [
12049
12164
  /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(DialogTitle, { children: "Generate Bank Statement" }) }),
@@ -12067,15 +12182,7 @@ function BankStatementGenerateDialog({
12067
12182
  type: "single",
12068
12183
  variant: "outline",
12069
12184
  value: [String(rangePreset)],
12070
- onValueChange: (val) => {
12071
- if (val.length === 0) return;
12072
- const raw = val[0];
12073
- if (raw === "custom") {
12074
- applyPreset("custom");
12075
- } else {
12076
- applyPreset(Number(raw));
12077
- }
12078
- },
12185
+ onValueChange: handlePresetChange,
12079
12186
  className: "w-full",
12080
12187
  children: [
12081
12188
  /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ToggleGroupItem, { value: "90", className: "flex-1", children: "3 Months" }),
@@ -12111,11 +12218,12 @@ function BankStatementGenerateDialog({
12111
12218
  {
12112
12219
  value: applicantType,
12113
12220
  onValueChange: (v) => handleApplicantTypeChange(v),
12221
+ items: APPLICANT_TYPE_LABELS,
12114
12222
  children: [
12115
12223
  /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectValue, { placeholder: "Applicant Type" }) }),
12116
12224
  /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(SelectContent, { children: [
12117
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectItem, { value: "primary", children: "Main applicant" }),
12118
- hasCoApplicant && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectItem, { value: "secondary", children: "Co-applicant" })
12225
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectItem, { value: "primary", children: APPLICANT_TYPE_LABELS.primary }),
12226
+ hasCoApplicant && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectItem, { value: "secondary", children: APPLICANT_TYPE_LABELS.secondary })
12119
12227
  ] })
12120
12228
  ]
12121
12229
  }
@@ -12141,33 +12249,43 @@ function BankStatementGenerateDialog({
12141
12249
  ] }) }),
12142
12250
  /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableBody, { children: bankAccounts.map((account) => {
12143
12251
  var _a, _b;
12144
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(TableRow, { children: [
12145
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
12146
- Checkbox,
12147
- {
12148
- checked: selectedAccountIds.includes(account.id),
12149
- onCheckedChange: () => handleToggleAccount(account.id),
12150
- "aria-label": `Select ${account.name}`
12151
- }
12152
- ) }),
12153
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex items-center gap-2", children: [
12154
- account.institutionLogo && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
12155
- "img",
12156
- {
12157
- src: account.institutionLogo,
12158
- alt: (_a = account.institutionName) != null ? _a : "",
12159
- className: "size-8 rounded object-cover"
12160
- }
12161
- ),
12162
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium font-semibold", children: account.name || account.institutionName || "\u2014" })
12163
- ] }) }),
12164
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium", children: (_b = account.accountNo) != null ? _b : "\u2014" }) }),
12165
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium", children: periodLabel }) }),
12166
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium", children: account.lastUpdated ? (0, import_date_fns3.format)(
12167
- (0, import_date_fns3.parseISO)(account.lastUpdated),
12168
- "dd MMM yyyy"
12169
- ) : "\u2014" }) })
12170
- ] }, account.id);
12252
+ const isSelected = selectedAccountIds.includes(
12253
+ account.id
12254
+ );
12255
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
12256
+ TableRow,
12257
+ {
12258
+ "data-state": isSelected ? "selected" : void 0,
12259
+ children: [
12260
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
12261
+ Checkbox,
12262
+ {
12263
+ checked: isSelected,
12264
+ onCheckedChange: () => handleToggleAccount(account.id),
12265
+ "aria-label": `Select ${account.name}`
12266
+ }
12267
+ ) }),
12268
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex items-center gap-2", children: [
12269
+ account.institutionLogo && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
12270
+ "img",
12271
+ {
12272
+ src: account.institutionLogo,
12273
+ alt: (_a = account.institutionName) != null ? _a : "",
12274
+ className: "size-8 object-cover"
12275
+ }
12276
+ ),
12277
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium font-semibold", children: account.name || account.institutionName || "\u2014" })
12278
+ ] }) }),
12279
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium", children: (_b = account.accountNo) != null ? _b : "\u2014" }) }),
12280
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium", children: periodLabel }) }),
12281
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-body-medium", children: account.lastUpdated ? (0, import_date_fns3.format)(
12282
+ (0, import_date_fns3.parseISO)(account.lastUpdated),
12283
+ "dd MMM yyyy"
12284
+ ) : "\u2014" }) })
12285
+ ]
12286
+ },
12287
+ account.id
12288
+ );
12171
12289
  }) })
12172
12290
  ] })
12173
12291
  ] })
@@ -14117,6 +14235,7 @@ function ReviewAlertsDialog({
14117
14235
 
14118
14236
  // src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx
14119
14237
  var React33 = __toESM(require("react"));
14238
+ var import_lucide_react42 = require("lucide-react");
14120
14239
  var import_ui4 = require("@react-awesome-query-builder/ui");
14121
14240
 
14122
14241
  // src/components/ui/contact-alert-dialog/types.ts
@@ -15064,7 +15183,24 @@ function ContactAlertDialog({
15064
15183
  size: "sm",
15065
15184
  value: severity,
15066
15185
  onValueChange: (v) => v && setSeverity(v),
15067
- children: ["NEED_ACTION", "WATCH", "HEALTHY"].map((s) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(ToggleGroupItem, { value: s, children: SEVERITY_LABELS[s] }, s))
15186
+ children: ["NEED_ACTION", "WATCH", "HEALTHY"].map((s) => /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
15187
+ ToggleGroupItem,
15188
+ {
15189
+ value: s,
15190
+ className: cn(
15191
+ s === "NEED_ACTION" && "data-pressed:bg-destructive/10 data-pressed:inset-ring-destructive data-pressed:text-destructive-text data-pressed:hover:bg-destructive/10",
15192
+ s === "WATCH" && "data-pressed:bg-warning/10 data-pressed:inset-ring-warning data-pressed:text-warning-text data-pressed:hover:bg-warning/10",
15193
+ s === "HEALTHY" && "data-pressed:bg-info/10 data-pressed:inset-ring-info data-pressed:text-info-text data-pressed:hover:bg-info/10"
15194
+ ),
15195
+ children: [
15196
+ s === "NEED_ACTION" && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react42.AlertCircleIcon, { className: "size-3.5" }),
15197
+ s === "WATCH" && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react42.EyeIcon, { className: "size-3.5" }),
15198
+ s === "HEALTHY" && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react42.InfoIcon, { className: "size-3.5" }),
15199
+ SEVERITY_LABELS[s]
15200
+ ]
15201
+ },
15202
+ s
15203
+ ))
15068
15204
  }
15069
15205
  )
15070
15206
  ] }),
@@ -15118,7 +15254,7 @@ function ContactAlertDialog({
15118
15254
 
15119
15255
  // src/components/ui/share-details-dialog.tsx
15120
15256
  var React34 = __toESM(require("react"));
15121
- var import_lucide_react42 = require("lucide-react");
15257
+ var import_lucide_react43 = require("lucide-react");
15122
15258
  var import_jsx_runtime78 = require("react/jsx-runtime");
15123
15259
  function Field3({
15124
15260
  id,
@@ -15177,7 +15313,7 @@ function ShareDetailsDialog({
15177
15313
  onClick: handleCopy,
15178
15314
  "aria-label": copied ? "Copied" : "Copy link",
15179
15315
  className: "shrink-0",
15180
- children: copied ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react42.CheckIcon, { className: "size-4 text-success" }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react42.CopyIcon, { className: "size-4" })
15316
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react43.CheckIcon, { className: "size-4 text-success" }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react43.CopyIcon, { className: "size-4" })
15181
15317
  }
15182
15318
  )
15183
15319
  ] }),
@@ -15262,10 +15398,201 @@ function EmailTemplateDialog({
15262
15398
  ] })
15263
15399
  ] }) });
15264
15400
  }
15401
+ function ShareContactDialog({
15402
+ open,
15403
+ onOpenChange,
15404
+ contactName,
15405
+ internalAdvisors,
15406
+ onShareInternal,
15407
+ onShareExternal,
15408
+ isSending = false,
15409
+ className
15410
+ }) {
15411
+ const [tab, setTab] = React34.useState("internal");
15412
+ const [search, setSearch] = React34.useState("");
15413
+ const [selectedId, setSelectedId] = React34.useState(null);
15414
+ const [internalNotes, setInternalNotes] = React34.useState("");
15415
+ const [firstName, setFirstName] = React34.useState("");
15416
+ const [lastName, setLastName] = React34.useState("");
15417
+ const [email, setEmail] = React34.useState("");
15418
+ const [externalNotes, setExternalNotes] = React34.useState("");
15419
+ function reset() {
15420
+ setTab("internal");
15421
+ setSearch("");
15422
+ setSelectedId(null);
15423
+ setInternalNotes("");
15424
+ setFirstName("");
15425
+ setLastName("");
15426
+ setEmail("");
15427
+ setExternalNotes("");
15428
+ }
15429
+ function handleOpenChange(v) {
15430
+ if (!v) reset();
15431
+ onOpenChange(v);
15432
+ }
15433
+ const filtered = internalAdvisors.filter((a) => {
15434
+ const q = search.toLowerCase();
15435
+ return a.name.toLowerCase().includes(q) || a.role.toLowerCase().includes(q);
15436
+ });
15437
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Dialog, { open, onOpenChange: isSending ? void 0 : handleOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(DialogContent, { size: "md", className, children: [
15438
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(DialogTitle, { children: "Share Contact's Information" }) }),
15439
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
15440
+ "Share",
15441
+ " ",
15442
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "font-medium text-foreground", children: contactName }),
15443
+ "'s information with an advisor."
15444
+ ] }),
15445
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(Tabs, { value: tab, onValueChange: setTab, children: [
15446
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(TabsList, { className: "w-full", children: [
15447
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(TabsTrigger, { value: "internal", className: "flex-1", children: "Internal Advisor" }),
15448
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(TabsTrigger, { value: "external", className: "flex-1", children: "External / Referral" })
15449
+ ] }),
15450
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(TabsContent, { value: "internal", className: "mt-4 flex flex-col gap-4", children: [
15451
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Field3, { label: "Search Advisor", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15452
+ Input,
15453
+ {
15454
+ placeholder: "Search by name or role\u2026",
15455
+ value: search,
15456
+ onChange: (e) => setSearch(e.target.value)
15457
+ }
15458
+ ) }),
15459
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "max-h-[200px] overflow-y-auto border border-border divide-y divide-border", children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("p", { className: "px-3 py-4 text-center text-sm text-muted-foreground", children: "No advisors found." }) : filtered.map((a) => {
15460
+ const isSelected = selectedId === a.id;
15461
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
15462
+ "button",
15463
+ {
15464
+ type: "button",
15465
+ onClick: () => setSelectedId(a.id),
15466
+ className: cn(
15467
+ "flex w-full items-center gap-3 px-3 py-2.5 text-left transition-colors hover:bg-muted/40",
15468
+ isSelected && "bg-primary/5"
15469
+ ),
15470
+ children: [
15471
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15472
+ "div",
15473
+ {
15474
+ className: cn(
15475
+ "flex size-4 shrink-0 items-center justify-center rounded-full border-2",
15476
+ isSelected ? "border-primary" : "border-border bg-background"
15477
+ ),
15478
+ children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "size-2 rounded-full bg-primary" })
15479
+ }
15480
+ ),
15481
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
15482
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("p", { className: "text-sm font-medium", children: a.name }),
15483
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
15484
+ a.role,
15485
+ " \xB7 ",
15486
+ a.practice
15487
+ ] })
15488
+ ] })
15489
+ ]
15490
+ },
15491
+ a.id
15492
+ );
15493
+ }) }),
15494
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Field3, { id: "sc-int-notes", label: "Notes", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15495
+ Textarea,
15496
+ {
15497
+ id: "sc-int-notes",
15498
+ placeholder: "Optional message for the advisor\u2026",
15499
+ rows: 3,
15500
+ value: internalNotes,
15501
+ onChange: (e) => setInternalNotes(e.target.value),
15502
+ disabled: isSending
15503
+ }
15504
+ ) })
15505
+ ] }),
15506
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(TabsContent, { value: "external", className: "mt-4 flex flex-col gap-4", children: [
15507
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
15508
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Field3, { id: "sc-first", label: "First Name", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15509
+ Input,
15510
+ {
15511
+ id: "sc-first",
15512
+ placeholder: "First name",
15513
+ value: firstName,
15514
+ onChange: (e) => setFirstName(e.target.value),
15515
+ disabled: isSending
15516
+ }
15517
+ ) }),
15518
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Field3, { id: "sc-last", label: "Last Name", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15519
+ Input,
15520
+ {
15521
+ id: "sc-last",
15522
+ placeholder: "Last name",
15523
+ value: lastName,
15524
+ onChange: (e) => setLastName(e.target.value),
15525
+ disabled: isSending
15526
+ }
15527
+ ) })
15528
+ ] }),
15529
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Field3, { id: "sc-email", label: "Email", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15530
+ Input,
15531
+ {
15532
+ id: "sc-email",
15533
+ type: "email",
15534
+ placeholder: "advisor@company.com.au",
15535
+ value: email,
15536
+ onChange: (e) => setEmail(e.target.value),
15537
+ disabled: isSending
15538
+ }
15539
+ ) }),
15540
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Field3, { id: "sc-ext-notes", label: "Notes", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15541
+ Textarea,
15542
+ {
15543
+ id: "sc-ext-notes",
15544
+ placeholder: "Optional message\u2026",
15545
+ rows: 3,
15546
+ value: externalNotes,
15547
+ onChange: (e) => setExternalNotes(e.target.value),
15548
+ disabled: isSending
15549
+ }
15550
+ ) })
15551
+ ] })
15552
+ ] }),
15553
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(DialogFooter, { children: [
15554
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15555
+ Button,
15556
+ {
15557
+ variant: "outline",
15558
+ onClick: () => handleOpenChange(false),
15559
+ disabled: isSending,
15560
+ children: "Cancel"
15561
+ }
15562
+ ),
15563
+ tab === "internal" ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15564
+ Button,
15565
+ {
15566
+ onClick: () => onShareInternal(selectedId, internalNotes),
15567
+ disabled: !selectedId || isSending,
15568
+ children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
15569
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Spinner, { className: "size-3.5" }),
15570
+ "Sharing\u2026"
15571
+ ] }) : "Share Contact"
15572
+ }
15573
+ ) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15574
+ Button,
15575
+ {
15576
+ onClick: () => onShareExternal({
15577
+ firstName,
15578
+ lastName,
15579
+ email,
15580
+ notes: externalNotes
15581
+ }),
15582
+ disabled: !email || isSending,
15583
+ children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
15584
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Spinner, { className: "size-3.5" }),
15585
+ "Sending\u2026"
15586
+ ] }) : "Send Invite"
15587
+ }
15588
+ )
15589
+ ] })
15590
+ ] }) });
15591
+ }
15265
15592
 
15266
15593
  // src/components/ui/file-preview-dialog.tsx
15267
15594
  var React35 = __toESM(require("react"));
15268
- var import_lucide_react43 = require("lucide-react");
15595
+ var import_lucide_react44 = require("lucide-react");
15269
15596
 
15270
15597
  // src/components/ui/progress.tsx
15271
15598
  var import_progress = require("@base-ui/react/progress");
@@ -15310,14 +15637,14 @@ function LoadingState({ columnCount }) {
15310
15637
  }
15311
15638
  function EmptyState() {
15312
15639
  return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "flex flex-col items-center gap-3 py-12 text-center", children: [
15313
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react43.FileTextIcon, { className: "size-10 text-muted-foreground/40" }),
15640
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react44.FileTextIcon, { className: "size-10 text-muted-foreground/40" }),
15314
15641
  /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "text-sm font-medium text-foreground", children: "No data found" }),
15315
15642
  /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "text-xs text-muted-foreground", children: "The CSV file appears to be empty or contains only headers." })
15316
15643
  ] });
15317
15644
  }
15318
15645
  function ErrorState({ message }) {
15319
15646
  return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "flex flex-col items-center gap-3 py-12 text-center", children: [
15320
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react43.AlertCircleIcon, { className: "size-10 text-destructive/60" }),
15647
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react44.AlertCircleIcon, { className: "size-10 text-destructive/60" }),
15321
15648
  /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "text-sm font-medium text-foreground", children: "Unable to parse file" }),
15322
15649
  /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "text-xs text-muted-foreground", children: message != null ? message : "The file could not be read. Please check the format and try again." })
15323
15650
  ] });
@@ -15350,11 +15677,11 @@ function ImportingState({
15350
15677
  function RowStatusCell({ row }) {
15351
15678
  const { _status, _statusMessage } = row;
15352
15679
  if (_status === "success") {
15353
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "flex items-center justify-center h-full px-2", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react43.CheckCircle2Icon, { className: "size-4 text-success" }) });
15680
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "flex items-center justify-center h-full px-2", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react44.CheckCircle2Icon, { className: "size-4 text-success" }) });
15354
15681
  }
15355
15682
  if (_status === "failed") {
15356
15683
  return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Tooltip, { children: [
15357
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "flex items-center justify-center h-full px-2 cursor-default", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react43.CircleAlertIcon, { className: "size-4 text-destructive" }) }) }),
15684
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "flex items-center justify-center h-full px-2 cursor-default", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react44.CircleAlertIcon, { className: "size-4 text-destructive" }) }) }),
15358
15685
  _statusMessage && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(TooltipContent, { side: "top", children: _statusMessage })
15359
15686
  ] }) });
15360
15687
  }
@@ -15493,7 +15820,7 @@ function FilePreviewDialog({
15493
15820
  "aria-label": `Delete row ${absoluteIdx + 1}`,
15494
15821
  onClick: () => onRowDelete(absoluteIdx),
15495
15822
  className: "text-muted-foreground hover:text-destructive",
15496
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react43.Trash2Icon, { className: "size-3.5" })
15823
+ children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react44.Trash2Icon, { className: "size-3.5" })
15497
15824
  }
15498
15825
  ) })
15499
15826
  ]
@@ -15550,7 +15877,7 @@ function FilePreviewDialog({
15550
15877
  // src/components/ui/data-table.tsx
15551
15878
  var React36 = __toESM(require("react"));
15552
15879
  var import_react_table = require("@tanstack/react-table");
15553
- var import_lucide_react44 = require("lucide-react");
15880
+ var import_lucide_react45 = require("lucide-react");
15554
15881
  var import_jsx_runtime81 = require("react/jsx-runtime");
15555
15882
  function DataTableColumnHeader({
15556
15883
  column,
@@ -15563,11 +15890,11 @@ function DataTableColumnHeader({
15563
15890
  const sorted = column.getIsSorted();
15564
15891
  let sortIcon;
15565
15892
  if (sorted === "asc") {
15566
- sortIcon = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react44.ArrowUp, { className: "ml-1 size-3.5" });
15893
+ sortIcon = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react45.ArrowUp, { className: "ml-1 size-3.5" });
15567
15894
  } else if (sorted === "desc") {
15568
- sortIcon = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react44.ArrowDown, { className: "ml-1 size-3.5" });
15895
+ sortIcon = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react45.ArrowDown, { className: "ml-1 size-3.5" });
15569
15896
  } else {
15570
- sortIcon = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react44.ArrowUpDown, { className: "ml-1 size-3.5" });
15897
+ sortIcon = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react45.ArrowUpDown, { className: "ml-1 size-3.5" });
15571
15898
  }
15572
15899
  return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
15573
15900
  Button,
@@ -15654,7 +15981,7 @@ function DataTableToolbar({
15654
15981
  }
15655
15982
  ),
15656
15983
  children: [
15657
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react44.SlidersHorizontal, { className: "size-3.5" }),
15984
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react45.SlidersHorizontal, { className: "size-3.5" }),
15658
15985
  /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "hidden sm:inline", children: "Columns" })
15659
15986
  ]
15660
15987
  }
@@ -15891,13 +16218,13 @@ function DataTable({
15891
16218
 
15892
16219
  // src/components/ui/applicant-document-checklist.tsx
15893
16220
  var React37 = __toESM(require("react"));
15894
- var import_lucide_react45 = require("lucide-react");
16221
+ var import_lucide_react46 = require("lucide-react");
15895
16222
  var import_jsx_runtime82 = require("react/jsx-runtime");
15896
16223
  function StatusIcon({ status }) {
15897
16224
  if (status === "uploaded") {
15898
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react45.CheckCircle2, { className: "size-5 shrink-0 text-primary" });
16225
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react46.CheckCircle2, { className: "size-5 shrink-0 text-primary" });
15899
16226
  }
15900
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react45.Circle, { className: "size-5 shrink-0 text-muted-foreground" });
16227
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react46.Circle, { className: "size-5 shrink-0 text-muted-foreground" });
15901
16228
  }
15902
16229
  function ApplicantDocumentChecklist({
15903
16230
  applicantName,
@@ -15979,7 +16306,7 @@ function ApplicantDocumentChecklist({
15979
16306
  return (_a = inputRefs.current[item.id]) == null ? void 0 : _a.click();
15980
16307
  },
15981
16308
  children: [
15982
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react45.Upload, { className: "size-3.5" }),
16309
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react46.Upload, { className: "size-3.5" }),
15983
16310
  "Upload"
15984
16311
  ]
15985
16312
  }
@@ -16004,7 +16331,7 @@ function ApplicantDocumentChecklist({
16004
16331
 
16005
16332
  // src/components/ui/document-checklist-template.tsx
16006
16333
  var import_react27 = require("react");
16007
- var import_lucide_react46 = require("lucide-react");
16334
+ var import_lucide_react47 = require("lucide-react");
16008
16335
  var import_jsx_runtime83 = require("react/jsx-runtime");
16009
16336
  var DOCUMENT_TYPES = [
16010
16337
  "Income Verification",
@@ -16103,7 +16430,7 @@ function DocumentChecklistTemplate({
16103
16430
  {
16104
16431
  className: cn("grid items-center gap-3 px-6 py-3", COLS),
16105
16432
  children: [
16106
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_lucide_react46.GripVertical, { className: "size-4 shrink-0 text-muted-foreground/30" }),
16433
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_lucide_react47.GripVertical, { className: "size-4 shrink-0 text-muted-foreground/30" }),
16107
16434
  cat.custom ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
16108
16435
  Input,
16109
16436
  {
@@ -16150,7 +16477,7 @@ function DocumentChecklistTemplate({
16150
16477
  size: "icon",
16151
16478
  className: "size-8 text-muted-foreground hover:text-destructive",
16152
16479
  onClick: () => handleDelete(cat.id),
16153
- children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_lucide_react46.Trash2, { className: "size-4" })
16480
+ children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_lucide_react47.Trash2, { className: "size-4" })
16154
16481
  }
16155
16482
  )
16156
16483
  ]
@@ -16165,7 +16492,7 @@ function DocumentChecklistTemplate({
16165
16492
  className: "gap-1.5",
16166
16493
  onClick: handleAdd,
16167
16494
  children: [
16168
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_lucide_react46.Plus, { className: "size-4" }),
16495
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_lucide_react47.Plus, { className: "size-4" }),
16169
16496
  "Add Category"
16170
16497
  ]
16171
16498
  }
@@ -16501,7 +16828,7 @@ function ExpenseBarChart({
16501
16828
 
16502
16829
  // src/components/ui/financial-cards.tsx
16503
16830
  var React39 = __toESM(require("react"));
16504
- var import_lucide_react47 = require("lucide-react");
16831
+ var import_lucide_react48 = require("lucide-react");
16505
16832
 
16506
16833
  // src/components/ui/financial-primitives.tsx
16507
16834
  var import_jsx_runtime86 = require("react/jsx-runtime");
@@ -16684,7 +17011,7 @@ function PropertyCard({
16684
17011
  /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "flex-1 min-w-0 truncate text-label-medium text-foreground", children: address }),
16685
17012
  type && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Badge, { className: "shrink-0", variant: "outline", children: type }),
16686
17013
  /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16687
- import_lucide_react47.ChevronDown,
17014
+ import_lucide_react48.ChevronDown,
16688
17015
  {
16689
17016
  className: cn(
16690
17017
  "h-5 w-5 shrink-0 text-muted-foreground transition-transform duration-200",
@@ -17326,35 +17653,35 @@ function IncomeCard({
17326
17653
  );
17327
17654
  }
17328
17655
  var EXPENSE_ICON_MAP = {
17329
- groceries: import_lucide_react47.ShoppingCart,
17330
- "dining out": import_lucide_react47.UtensilsCrossed,
17331
- dining: import_lucide_react47.UtensilsCrossed,
17332
- restaurants: import_lucide_react47.UtensilsCrossed,
17333
- transport: import_lucide_react47.Car,
17334
- transportation: import_lucide_react47.Car,
17335
- vehicle: import_lucide_react47.Car,
17336
- utilities: import_lucide_react47.Zap,
17337
- electricity: import_lucide_react47.Zap,
17338
- insurance: import_lucide_react47.Shield,
17339
- "council rates": import_lucide_react47.Landmark,
17340
- council: import_lucide_react47.Landmark,
17341
- rates: import_lucide_react47.Landmark,
17342
- medical: import_lucide_react47.HeartPulse,
17343
- health: import_lucide_react47.HeartPulse,
17344
- subscriptions: import_lucide_react47.RefreshCw,
17345
- subscription: import_lucide_react47.RefreshCw,
17346
- "credit card": import_lucide_react47.CreditCard,
17347
- education: import_lucide_react47.GraduationCap,
17348
- childcare: import_lucide_react47.Baby,
17349
- entertainment: import_lucide_react47.Tv,
17350
- gym: import_lucide_react47.Dumbbell,
17351
- fitness: import_lucide_react47.Dumbbell,
17352
- clothing: import_lucide_react47.Shirt,
17353
- rent: import_lucide_react47.Building2
17656
+ groceries: import_lucide_react48.ShoppingCart,
17657
+ "dining out": import_lucide_react48.UtensilsCrossed,
17658
+ dining: import_lucide_react48.UtensilsCrossed,
17659
+ restaurants: import_lucide_react48.UtensilsCrossed,
17660
+ transport: import_lucide_react48.Car,
17661
+ transportation: import_lucide_react48.Car,
17662
+ vehicle: import_lucide_react48.Car,
17663
+ utilities: import_lucide_react48.Zap,
17664
+ electricity: import_lucide_react48.Zap,
17665
+ insurance: import_lucide_react48.Shield,
17666
+ "council rates": import_lucide_react48.Landmark,
17667
+ council: import_lucide_react48.Landmark,
17668
+ rates: import_lucide_react48.Landmark,
17669
+ medical: import_lucide_react48.HeartPulse,
17670
+ health: import_lucide_react48.HeartPulse,
17671
+ subscriptions: import_lucide_react48.RefreshCw,
17672
+ subscription: import_lucide_react48.RefreshCw,
17673
+ "credit card": import_lucide_react48.CreditCard,
17674
+ education: import_lucide_react48.GraduationCap,
17675
+ childcare: import_lucide_react48.Baby,
17676
+ entertainment: import_lucide_react48.Tv,
17677
+ gym: import_lucide_react48.Dumbbell,
17678
+ fitness: import_lucide_react48.Dumbbell,
17679
+ clothing: import_lucide_react48.Shirt,
17680
+ rent: import_lucide_react48.Building2
17354
17681
  };
17355
17682
  function getExpenseIcon(expenseType) {
17356
17683
  var _a;
17357
- return (_a = EXPENSE_ICON_MAP[expenseType.toLowerCase()]) != null ? _a : import_lucide_react47.Receipt;
17684
+ return (_a = EXPENSE_ICON_MAP[expenseType.toLowerCase()]) != null ? _a : import_lucide_react48.Receipt;
17358
17685
  }
17359
17686
  function ExpensesCard({
17360
17687
  items,
@@ -17405,7 +17732,7 @@ function ExpensesCard({
17405
17732
  }
17406
17733
 
17407
17734
  // src/components/ui/financial-drawers.tsx
17408
- var import_lucide_react48 = require("lucide-react");
17735
+ var import_lucide_react49 = require("lucide-react");
17409
17736
  var import_jsx_runtime88 = require("react/jsx-runtime");
17410
17737
  function SummaryReportDrawer({
17411
17738
  open,
@@ -17487,7 +17814,7 @@ function SummaryReportDrawer({
17487
17814
  size: "icon-sm",
17488
17815
  onClick: () => onOpenChange(false),
17489
17816
  "aria-label": "Close drawer",
17490
- children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_lucide_react48.X, { className: "h-4 w-4" })
17817
+ children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_lucide_react49.X, { className: "h-4 w-4" })
17491
17818
  }
17492
17819
  )
17493
17820
  ] }),
@@ -17564,7 +17891,7 @@ function OpportunityDetailsDrawer({
17564
17891
  size: "icon-sm",
17565
17892
  onClick: () => onOpenChange(false),
17566
17893
  "aria-label": "Close drawer",
17567
- children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_lucide_react48.X, { className: "h-4 w-4" })
17894
+ children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_lucide_react49.X, { className: "h-4 w-4" })
17568
17895
  }
17569
17896
  ) })
17570
17897
  ] }),
@@ -18140,7 +18467,7 @@ function IncomeBarChart({
18140
18467
  // src/components/ui/input-otp.tsx
18141
18468
  var React42 = __toESM(require("react"));
18142
18469
  var import_input_otp = require("input-otp");
18143
- var import_lucide_react49 = require("lucide-react");
18470
+ var import_lucide_react50 = require("lucide-react");
18144
18471
  var import_jsx_runtime91 = require("react/jsx-runtime");
18145
18472
  function InputOTP(_a) {
18146
18473
  var _b = _a, {
@@ -18206,11 +18533,11 @@ function InputOTPSlot(_a) {
18206
18533
  }
18207
18534
  function InputOTPSeparator(_a) {
18208
18535
  var props = __objRest(_a, []);
18209
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", __spreadProps(__spreadValues({ "data-slot": "input-otp-separator", role: "separator" }, props), { children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_lucide_react49.MinusIcon, {}) }));
18536
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", __spreadProps(__spreadValues({ "data-slot": "input-otp-separator", role: "separator" }, props), { children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_lucide_react50.MinusIcon, {}) }));
18210
18537
  }
18211
18538
 
18212
18539
  // src/components/ui/integration-card.tsx
18213
- var import_lucide_react50 = require("lucide-react");
18540
+ var import_lucide_react51 = require("lucide-react");
18214
18541
  var import_jsx_runtime92 = require("react/jsx-runtime");
18215
18542
  function IntegrationCard({
18216
18543
  name,
@@ -18244,7 +18571,7 @@ function IntegrationCard({
18244
18571
  ) : /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "flex h-9 w-9 items-center justify-center", children: logoFallback }) }),
18245
18572
  /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "text-label-medium", children: name }),
18246
18573
  connected && /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(Badge, { variant: "success", className: "gap-1", children: [
18247
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_lucide_react50.Check, { className: "h-3 w-3" }),
18574
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_lucide_react51.Check, { className: "h-3 w-3" }),
18248
18575
  "Connected"
18249
18576
  ] })
18250
18577
  ] }),
@@ -18283,11 +18610,11 @@ function SelectableCard({
18283
18610
 
18284
18611
  // src/components/ui/kanban-column.tsx
18285
18612
  var React43 = __toESM(require("react"));
18286
- var import_lucide_react52 = require("lucide-react");
18613
+ var import_lucide_react53 = require("lucide-react");
18287
18614
 
18288
18615
  // src/components/ui/opportunity-card.tsx
18289
18616
  var import_react31 = require("react");
18290
- var import_lucide_react51 = require("lucide-react");
18617
+ var import_lucide_react52 = require("lucide-react");
18291
18618
 
18292
18619
  // src/components/ui/pipeline-primitives.tsx
18293
18620
  var import_jsx_runtime94 = require("react/jsx-runtime");
@@ -18447,7 +18774,7 @@ function TaskViewCard({
18447
18774
  className: "flex items-center gap-1.5 text-sm font-semibold",
18448
18775
  style: { color: "var(--color-success-text)" },
18449
18776
  children: [
18450
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Check, { className: "size-3.5 shrink-0" }),
18777
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Check, { className: "size-3.5 shrink-0" }),
18451
18778
  "All tasks complete"
18452
18779
  ]
18453
18780
  }
@@ -18517,7 +18844,7 @@ function TaskViewCard({
18517
18844
  className: "flex w-full items-center justify-between text-xs text-muted-foreground hover:text-foreground",
18518
18845
  children: [
18519
18846
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1", children: [
18520
- subtasksExpanded ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.ChevronRight, { className: "size-3" }),
18847
+ subtasksExpanded ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.ChevronRight, { className: "size-3" }),
18521
18848
  "Subtasks"
18522
18849
  ] }),
18523
18850
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { children: [
@@ -18556,7 +18883,7 @@ function TaskViewCard({
18556
18883
  "size-7 shrink-0"
18557
18884
  ),
18558
18885
  "aria-label": "Opportunity actions",
18559
- children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.MoreVertical, { className: "size-4" })
18886
+ children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.MoreVertical, { className: "size-4" })
18560
18887
  }
18561
18888
  ),
18562
18889
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(DropdownMenuContent, { align: "end", children: [
@@ -18703,7 +19030,7 @@ function OpportunityCard({
18703
19030
  className: "flex items-center gap-1.5 rounded border border-warning/30 bg-warning/10 px-2 py-1 text-xs font-medium",
18704
19031
  style: { color: "var(--color-warning-text)" },
18705
19032
  children: [
18706
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Clock, { className: "size-3 shrink-0" }),
19033
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Clock, { className: "size-3 shrink-0" }),
18707
19034
  "On hold until ",
18708
19035
  formatDateDayMonth(onHoldTo)
18709
19036
  ]
@@ -18731,7 +19058,7 @@ function OpportunityCard({
18731
19058
  "size-7 shrink-0"
18732
19059
  ),
18733
19060
  "aria-label": "Opportunity actions",
18734
- children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.MoreVertical, { className: "size-4" })
19061
+ children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.MoreVertical, { className: "size-4" })
18735
19062
  }
18736
19063
  ),
18737
19064
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(DropdownMenuContent, { align: "end", children: [
@@ -18750,32 +19077,32 @@ function OpportunityCard({
18750
19077
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
18751
19078
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: customerName }),
18752
19079
  additionalContacts && additionalContacts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
18753
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Users, { className: "size-3", "aria-hidden": "true" }),
19080
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Users, { className: "size-3", "aria-hidden": "true" }),
18754
19081
  "Joint"
18755
19082
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(Badge, { variant: "secondary", className: "shrink-0 gap-1", children: [
18756
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.User, { className: "size-3", "aria-hidden": "true" }),
19083
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.User, { className: "size-3", "aria-hidden": "true" }),
18757
19084
  "Individual"
18758
19085
  ] })
18759
19086
  ] }),
18760
19087
  customerPhone && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
18761
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
19088
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
18762
19089
  customerPhone
18763
19090
  ] }),
18764
19091
  customerEmail && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
18765
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
19092
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
18766
19093
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "truncate", children: customerEmail })
18767
19094
  ] })
18768
19095
  ] }),
18769
19096
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Separator, {}),
18770
19097
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex items-center justify-between", children: [
18771
19098
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
18772
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
19099
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
18773
19100
  formatDateShort(date)
18774
19101
  ] }),
18775
19102
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5", children: [
18776
19103
  daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_jsx_runtime95.Fragment, { children: [
18777
19104
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
18778
- import_lucide_react51.Clock,
19105
+ import_lucide_react52.Clock,
18779
19106
  {
18780
19107
  className: "size-3 shrink-0",
18781
19108
  style: { color: priorityTextColor },
@@ -18849,7 +19176,7 @@ function OpportunityCard({
18849
19176
  ] }) }),
18850
19177
  nextTask && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex items-start gap-1.5 border border-primary/30 bg-primary/5 px-2 py-1.5 text-xs", children: [
18851
19178
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
18852
- import_lucide_react51.ArrowRight,
19179
+ import_lucide_react52.ArrowRight,
18853
19180
  {
18854
19181
  className: "mt-0.5 size-3 shrink-0 text-primary",
18855
19182
  "aria-hidden": "true"
@@ -18891,6 +19218,45 @@ function OpportunityCard({
18891
19218
  }
18892
19219
  );
18893
19220
  }
19221
+ function normalizeUrl(url) {
19222
+ return `https://${url.replace(/^https?:\/\//, "")}`;
19223
+ }
19224
+ function LoanApplicationLink({ url }) {
19225
+ const [copied, setCopied] = (0, import_react31.useState)(false);
19226
+ const href = normalizeUrl(url);
19227
+ function handleCopy() {
19228
+ navigator.clipboard.writeText(href).then(() => {
19229
+ setCopied(true);
19230
+ setTimeout(() => setCopied(false), 2e3);
19231
+ });
19232
+ }
19233
+ return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex flex-col gap-1", children: [
19234
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("p", { className: "text-caption text-muted-foreground", children: "Or the link below to fill out the loan application directly." }),
19235
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex items-center gap-1.5", children: [
19236
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Link2, { className: "size-4 shrink-0 text-muted-foreground" }),
19237
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
19238
+ "a",
19239
+ {
19240
+ href,
19241
+ target: "_blank",
19242
+ rel: "noreferrer",
19243
+ className: "min-w-0 flex-1 truncate text-body-small text-primary underline-offset-2 hover:underline",
19244
+ children: url
19245
+ }
19246
+ ),
19247
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
19248
+ "button",
19249
+ {
19250
+ type: "button",
19251
+ onClick: handleCopy,
19252
+ className: "shrink-0 rounded p-1 text-muted-foreground transition-colors hover:text-foreground",
19253
+ "aria-label": "Copy link",
19254
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Check, { className: "size-4 text-success-text" }) : /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Copy, { className: "size-4" })
19255
+ }
19256
+ )
19257
+ ] })
19258
+ ] });
19259
+ }
18894
19260
  function LeadCard({
18895
19261
  customerName,
18896
19262
  customerPhone,
@@ -18913,13 +19279,13 @@ function LeadCard({
18913
19279
  children: [
18914
19280
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
18915
19281
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
18916
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "text-sm font-semibold text-foreground", children: customerName }),
18917
- customerPhone && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
18918
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Phone, { className: "size-3 shrink-0", "aria-hidden": "true" }),
19282
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "text-label-medium text-foreground", children: customerName }),
19283
+ customerPhone && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5 text-caption text-muted-foreground", children: [
19284
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Phone, { className: "size-3.5 shrink-0", "aria-hidden": "true" }),
18919
19285
  customerPhone
18920
19286
  ] }),
18921
- customerEmail && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
18922
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.Mail, { className: "size-3 shrink-0", "aria-hidden": "true" }),
19287
+ customerEmail && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "flex items-center gap-1.5 text-caption text-muted-foreground", children: [
19288
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.Mail, { className: "size-3.5 shrink-0", "aria-hidden": "true" }),
18923
19289
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "truncate", children: customerEmail })
18924
19290
  ] })
18925
19291
  ] }),
@@ -18932,7 +19298,7 @@ function LeadCard({
18932
19298
  "-mr-1 -mt-1 size-7 shrink-0"
18933
19299
  ),
18934
19300
  "aria-label": "Lead actions",
18935
- children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react51.MoreVertical, { className: "size-4" })
19301
+ children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react52.MoreVertical, { className: "size-4" })
18936
19302
  }
18937
19303
  ),
18938
19304
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(DropdownMenuContent, { align: "end", children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
@@ -18958,23 +19324,7 @@ function LeadCard({
18958
19324
  children: "Send Loan Application Request"
18959
19325
  }
18960
19326
  ),
18961
- loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
18962
- "Or the link below to fill out the loan application directly.",
18963
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("br", {}),
18964
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
18965
- "a",
18966
- {
18967
- href: `https://${loanApplicationUrl.replace(
18968
- /^https?:\/\//,
18969
- ""
18970
- )}`,
18971
- target: "_blank",
18972
- rel: "noreferrer",
18973
- className: "text-primary underline-offset-2 hover:underline",
18974
- children: loanApplicationUrl
18975
- }
18976
- )
18977
- ] })
19327
+ loanApplicationUrl && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(LoanApplicationLink, { url: loanApplicationUrl })
18978
19328
  ] })
18979
19329
  ]
18980
19330
  }
@@ -19067,7 +19417,7 @@ function KanbanColumn({
19067
19417
  "-mr-1 size-7 shrink-0"
19068
19418
  ),
19069
19419
  "aria-label": "Column actions",
19070
- children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react52.MoreVertical, { className: "size-4" })
19420
+ children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react53.MoreVertical, { className: "size-4" })
19071
19421
  }
19072
19422
  ),
19073
19423
  /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(DropdownMenuContent, { align: "end", children: [
@@ -19171,7 +19521,7 @@ function KanbanColumn({
19171
19521
 
19172
19522
  // src/components/ui/stepper.tsx
19173
19523
  var React44 = __toESM(require("react"));
19174
- var import_lucide_react53 = require("lucide-react");
19524
+ var import_lucide_react54 = require("lucide-react");
19175
19525
  var import_jsx_runtime97 = require("react/jsx-runtime");
19176
19526
  var StepperContext = React44.createContext({
19177
19527
  activeStep: 0,
@@ -19253,7 +19603,7 @@ function StepIndicator({ error, className }) {
19253
19603
  isCompleted && !error && "bg-primary text-primary-foreground",
19254
19604
  error && "border-2 border-destructive bg-destructive text-destructive-foreground"
19255
19605
  ),
19256
- children: isCompleted && !error ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react53.Check, { className: "size-4", strokeWidth: 2.5 }) : /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { children: index + 1 })
19606
+ children: isCompleted && !error ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react54.Check, { className: "size-4", strokeWidth: 2.5 }) : /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { children: index + 1 })
19257
19607
  }
19258
19608
  );
19259
19609
  if (orientation === "horizontal") {
@@ -19478,7 +19828,7 @@ function OnboardingLayout({
19478
19828
 
19479
19829
  // src/components/ui/opportunity-edit-modals.tsx
19480
19830
  var React45 = __toESM(require("react"));
19481
- var import_lucide_react54 = require("lucide-react");
19831
+ var import_lucide_react55 = require("lucide-react");
19482
19832
 
19483
19833
  // src/lib/opportunity-constants.ts
19484
19834
  var PROPERTY_ASSET_TYPES = /* @__PURE__ */ new Set([
@@ -19724,7 +20074,7 @@ function AccordionItemHeader({
19724
20074
  ),
19725
20075
  children: [
19726
20076
  label,
19727
- /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react54.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
20077
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react55.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
19728
20078
  ]
19729
20079
  }
19730
20080
  ),
@@ -19737,7 +20087,7 @@ function AccordionItemHeader({
19737
20087
  onClick: onRemove,
19738
20088
  className: "size-8 shrink-0",
19739
20089
  "aria-label": removeLabel,
19740
- children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react54.Trash2, { className: "size-3.5 text-destructive" })
20090
+ children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react55.Trash2, { className: "size-3.5 text-destructive" })
19741
20091
  }
19742
20092
  )
19743
20093
  ] });
@@ -20365,7 +20715,7 @@ function EditAssetsModal({
20365
20715
  onClick: addItem,
20366
20716
  className: "w-full gap-1.5",
20367
20717
  children: [
20368
- /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react54.Plus, { className: "h-4 w-4" }),
20718
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react55.Plus, { className: "h-4 w-4" }),
20369
20719
  "Add More"
20370
20720
  ]
20371
20721
  }
@@ -20692,7 +21042,7 @@ function EditDebtsModal({
20692
21042
  onClick: addItem,
20693
21043
  className: "w-full gap-1.5",
20694
21044
  children: [
20695
- /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react54.Plus, { className: "h-4 w-4" }),
21045
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react55.Plus, { className: "h-4 w-4" }),
20696
21046
  "Add More"
20697
21047
  ]
20698
21048
  }
@@ -21193,7 +21543,7 @@ function EditIncomeModal({
21193
21543
  onClick: addItem,
21194
21544
  className: "w-full gap-1.5",
21195
21545
  children: [
21196
- /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react54.Plus, { className: "h-4 w-4" }),
21546
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react55.Plus, { className: "h-4 w-4" }),
21197
21547
  "Add More"
21198
21548
  ]
21199
21549
  }
@@ -21343,7 +21693,7 @@ function EditExpensesModal({
21343
21693
  onClick: addItem,
21344
21694
  className: "w-full gap-1.5",
21345
21695
  children: [
21346
- /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react54.Plus, { className: "h-4 w-4" }),
21696
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react55.Plus, { className: "h-4 w-4" }),
21347
21697
  "Add More"
21348
21698
  ]
21349
21699
  }
@@ -21371,7 +21721,7 @@ function EditExpensesModal({
21371
21721
  // src/components/ui/opportunity-summary-tab.tsx
21372
21722
  var React46 = __toESM(require("react"));
21373
21723
  var import_react32 = require("react");
21374
- var import_lucide_react55 = require("lucide-react");
21724
+ var import_lucide_react56 = require("lucide-react");
21375
21725
  var import_jsx_runtime100 = require("react/jsx-runtime");
21376
21726
  function toMonthly(amount, freq) {
21377
21727
  return freq === "Monthly" ? amount : amount * 52 / 12;
@@ -21422,7 +21772,7 @@ function SectionEditButton({
21422
21772
  },
21423
21773
  "aria-label": title,
21424
21774
  title,
21425
- children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.Pencil, { className: "size-3.5" })
21775
+ children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.Pencil, { className: "size-3.5" })
21426
21776
  }
21427
21777
  );
21428
21778
  }
@@ -21458,7 +21808,7 @@ function HeroBand({
21458
21808
  href: `tel:${mainAbout.phone}`,
21459
21809
  className: "inline-flex size-7 items-center justify-center text-muted-foreground hover:text-foreground",
21460
21810
  title: `Call: ${mainAbout.phone}`,
21461
- children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.Phone, { className: "size-3.5" })
21811
+ children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.Phone, { className: "size-3.5" })
21462
21812
  }
21463
21813
  ),
21464
21814
  mainAbout.email && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
@@ -21467,7 +21817,7 @@ function HeroBand({
21467
21817
  href: `mailto:${mainAbout.email}`,
21468
21818
  className: "inline-flex size-7 items-center justify-center text-muted-foreground hover:text-foreground",
21469
21819
  title: `Email: ${mainAbout.email}`,
21470
- children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.Mail, { className: "size-3.5" })
21820
+ children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.Mail, { className: "size-3.5" })
21471
21821
  }
21472
21822
  )
21473
21823
  ] })
@@ -21606,19 +21956,19 @@ function ApplicantCardTab({
21606
21956
  var STATUS_OPTIONS = ["verified", "pending", "rejected"];
21607
21957
  var STATUS_CONFIG4 = {
21608
21958
  verified: {
21609
- Icon: import_lucide_react55.CheckCircle2,
21959
+ Icon: import_lucide_react56.CheckCircle2,
21610
21960
  label: "Verified",
21611
21961
  iconCls: "text-success",
21612
21962
  triggerCls: "border-success text-success"
21613
21963
  },
21614
21964
  pending: {
21615
- Icon: import_lucide_react55.AlertCircle,
21965
+ Icon: import_lucide_react56.AlertCircle,
21616
21966
  label: "Pending",
21617
21967
  iconCls: "text-warning",
21618
21968
  triggerCls: "border-warning text-warning"
21619
21969
  },
21620
21970
  rejected: {
21621
- Icon: import_lucide_react55.AlertCircle,
21971
+ Icon: import_lucide_react56.AlertCircle,
21622
21972
  label: "Rejected",
21623
21973
  iconCls: "text-destructive",
21624
21974
  triggerCls: "border-destructive text-destructive"
@@ -21648,7 +21998,7 @@ function DocRow({
21648
21998
  ),
21649
21999
  children: [
21650
22000
  /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("span", { className: "shrink-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(Checkbox, { checked: isSelected, onCheckedChange: () => onRowClick() }) }),
21651
- /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.FileText, { className: "size-4 shrink-0 text-muted-foreground" }),
22001
+ /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.FileText, { className: "size-4 shrink-0 text-muted-foreground" }),
21652
22002
  /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col", children: [
21653
22003
  doc.url ? /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
21654
22004
  "a",
@@ -21702,7 +22052,7 @@ function DocRow({
21702
22052
  download: true,
21703
22053
  onClick: (e) => e.stopPropagation(),
21704
22054
  className: "shrink-0 text-muted-foreground transition-colors hover:text-foreground",
21705
- children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.Download, { className: "size-4" })
22055
+ children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.Download, { className: "size-4" })
21706
22056
  }
21707
22057
  )
21708
22058
  ]
@@ -21988,7 +22338,7 @@ function OpportunitySummaryTab({
21988
22338
  onDocumentsDownload == null ? void 0 : onDocumentsDownload(selected);
21989
22339
  },
21990
22340
  children: [
21991
- /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.Download, { className: "size-3.5" }),
22341
+ /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.Download, { className: "size-3.5" }),
21992
22342
  "Download (",
21993
22343
  selectedDocIds.size,
21994
22344
  ")"
@@ -22010,7 +22360,7 @@ function OpportunitySummaryTab({
22010
22360
  cat.hasVerified ? "text-success" : "text-warning"
22011
22361
  ),
22012
22362
  children: [
22013
- cat.hasVerified ? /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.CheckCircle2, { className: "size-3.5 shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react55.AlertCircle, { className: "size-3.5 shrink-0" }),
22363
+ cat.hasVerified ? /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.CheckCircle2, { className: "size-3.5 shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react56.AlertCircle, { className: "size-3.5 shrink-0" }),
22014
22364
  cat.name,
22015
22365
  /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("span", { className: "text-muted-foreground", children: [
22016
22366
  "(",
@@ -22251,7 +22601,7 @@ function OpportunitySummaryTab({
22251
22601
 
22252
22602
  // src/components/ui/sidebar-nav.tsx
22253
22603
  var React47 = __toESM(require("react"));
22254
- var import_lucide_react56 = require("lucide-react");
22604
+ var import_lucide_react57 = require("lucide-react");
22255
22605
  var import_accordion8 = require("@base-ui/react/accordion");
22256
22606
  var import_jsx_runtime101 = require("react/jsx-runtime");
22257
22607
  function navIconCn(isActive) {
@@ -22285,7 +22635,7 @@ function MetricsGroup({ group }) {
22285
22635
  }
22286
22636
  ),
22287
22637
  item.info && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
22288
- import_lucide_react56.Info,
22638
+ import_lucide_react57.Info,
22289
22639
  {
22290
22640
  size: 11,
22291
22641
  strokeWidth: 2,
@@ -22404,7 +22754,7 @@ function CollapsibleNavItem({
22404
22754
  ),
22405
22755
  /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("span", { className: "flex-1 truncate text-left", children: item.title }),
22406
22756
  /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
22407
- import_lucide_react56.ChevronDown,
22757
+ import_lucide_react57.ChevronDown,
22408
22758
  {
22409
22759
  className: cn(
22410
22760
  "ml-auto shrink-0 text-brand-secondary-foreground/40 transition-transform duration-200",
@@ -22430,7 +22780,7 @@ function CollapsibleNavItem({
22430
22780
  ),
22431
22781
  children: [
22432
22782
  /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
22433
- import_lucide_react56.ChevronRight,
22783
+ import_lucide_react57.ChevronRight,
22434
22784
  {
22435
22785
  size: 11,
22436
22786
  strokeWidth: 2,
@@ -22539,7 +22889,7 @@ function SidebarNav({
22539
22889
  /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center font-semibold text-xs bg-primary text-primary-foreground", children: getInitials(userName) }),
22540
22890
  /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("span", { className: "flex-1 truncate text-left font-medium text-brand-secondary-foreground", children: userName }),
22541
22891
  /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
22542
- import_lucide_react56.ChevronDown,
22892
+ import_lucide_react57.ChevronDown,
22543
22893
  {
22544
22894
  className: "ml-auto shrink-0 text-brand-secondary-foreground/50 transition-transform duration-200 group-data-[panel-open]:rotate-180",
22545
22895
  size: 16,
@@ -22561,7 +22911,7 @@ function SidebarNav({
22561
22911
  ),
22562
22912
  children: [
22563
22913
  /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
22564
- import_lucide_react56.LogOut,
22914
+ import_lucide_react57.LogOut,
22565
22915
  {
22566
22916
  size: 16,
22567
22917
  strokeWidth: 1.75,
@@ -22634,14 +22984,14 @@ function SidebarNav({
22634
22984
  ),
22635
22985
  children: [
22636
22986
  collapsed ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
22637
- import_lucide_react56.PanelLeftOpen,
22987
+ import_lucide_react57.PanelLeftOpen,
22638
22988
  {
22639
22989
  size: 24,
22640
22990
  strokeWidth: 1.75,
22641
22991
  className: "shrink-0"
22642
22992
  }
22643
22993
  ) : /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
22644
- import_lucide_react56.PanelLeftClose,
22994
+ import_lucide_react57.PanelLeftClose,
22645
22995
  {
22646
22996
  size: 24,
22647
22997
  strokeWidth: 1.75,
@@ -22695,7 +23045,7 @@ function PipelineAlerts({ counts, className }) {
22695
23045
  }
22696
23046
 
22697
23047
  // src/components/ui/pipeline-board.tsx
22698
- var import_lucide_react57 = require("lucide-react");
23048
+ var import_lucide_react58 = require("lucide-react");
22699
23049
  var import_jsx_runtime103 = require("react/jsx-runtime");
22700
23050
  function Toolbar({
22701
23051
  searchValue,
@@ -22707,7 +23057,7 @@ function Toolbar({
22707
23057
  }) {
22708
23058
  return /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "flex flex-wrap items-center gap-3 border-b border-border bg-background px-4 py-3", children: [
22709
23059
  /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "relative w-56 shrink-0", children: [
22710
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react57.Search, { className: "absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" }),
23060
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react58.Search, { className: "absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" }),
22711
23061
  /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
22712
23062
  Input,
22713
23063
  {
@@ -22726,7 +23076,7 @@ function Toolbar({
22726
23076
  onClick: () => onSearchChange(""),
22727
23077
  className: "absolute right-2 top-1/2 size-6 -translate-y-1/2 text-muted-foreground hover:text-foreground",
22728
23078
  "aria-label": "Clear search",
22729
- children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react57.X, { className: "size-3.5" })
23079
+ children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react58.X, { className: "size-3.5" })
22730
23080
  }
22731
23081
  )
22732
23082
  ] }),
@@ -22755,7 +23105,7 @@ function Toolbar({
22755
23105
  onClick: onRefresh,
22756
23106
  className: "ml-auto text-muted-foreground hover:text-foreground",
22757
23107
  "aria-label": "Refresh board",
22758
- children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react57.RefreshCw, { className: "size-4" })
23108
+ children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react58.RefreshCw, { className: "size-4" })
22759
23109
  }
22760
23110
  )
22761
23111
  ] });
@@ -23714,7 +24064,7 @@ function PropertyMobileEstimateLineChart({
23714
24064
  }
23715
24065
 
23716
24066
  // src/components/ui/sonner.tsx
23717
- var import_lucide_react58 = require("lucide-react");
24067
+ var import_lucide_react59 = require("lucide-react");
23718
24068
  var import_sonner2 = require("sonner");
23719
24069
  var import_jsx_runtime111 = require("react/jsx-runtime");
23720
24070
  function Toaster(_a) {
@@ -23724,11 +24074,11 @@ function Toaster(_a) {
23724
24074
  __spreadValues({
23725
24075
  className: "toaster group",
23726
24076
  icons: {
23727
- success: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react58.CircleCheckIcon, { className: "size-4" }),
23728
- info: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react58.InfoIcon, { className: "size-4" }),
23729
- warning: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react58.TriangleAlertIcon, { className: "size-4" }),
23730
- error: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react58.OctagonXIcon, { className: "size-4" }),
23731
- loading: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react58.Loader2Icon, { className: "size-4 animate-spin" })
24077
+ success: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react59.CircleCheckIcon, { className: "size-4" }),
24078
+ info: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react59.InfoIcon, { className: "size-4" }),
24079
+ warning: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react59.TriangleAlertIcon, { className: "size-4" }),
24080
+ error: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react59.OctagonXIcon, { className: "size-4" }),
24081
+ loading: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react59.Loader2Icon, { className: "size-4 animate-spin" })
23732
24082
  },
23733
24083
  style: {
23734
24084
  "--normal-bg": "var(--popover)",
@@ -23747,7 +24097,7 @@ function Toaster(_a) {
23747
24097
  }
23748
24098
 
23749
24099
  // src/components/ui/stage-timeline.tsx
23750
- var import_lucide_react59 = require("lucide-react");
24100
+ var import_lucide_react60 = require("lucide-react");
23751
24101
  var import_jsx_runtime112 = require("react/jsx-runtime");
23752
24102
  function StageTimeline({
23753
24103
  stages,
@@ -23838,7 +24188,7 @@ function StageTimeline({
23838
24188
  className: "flex size-5 shrink-0 items-center justify-center rounded-full bg-primary",
23839
24189
  "aria-hidden": "true",
23840
24190
  children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
23841
- import_lucide_react59.Check,
24191
+ import_lucide_react60.Check,
23842
24192
  {
23843
24193
  className: "size-3 text-primary-foreground",
23844
24194
  strokeWidth: 2.5
@@ -24025,10 +24375,10 @@ function FrontendShell({
24025
24375
 
24026
24376
  // src/components/ui/signup-form-primitives.tsx
24027
24377
  var import_react36 = require("react");
24028
- var import_lucide_react61 = require("lucide-react");
24378
+ var import_lucide_react62 = require("lucide-react");
24029
24379
 
24030
24380
  // src/components/ui/password-strength-tooltip.tsx
24031
- var import_lucide_react60 = require("lucide-react");
24381
+ var import_lucide_react61 = require("lucide-react");
24032
24382
  var import_jsx_runtime116 = require("react/jsx-runtime");
24033
24383
  var RULES = [
24034
24384
  { label: "Minimum 8 characters", test: (p) => p.length >= 8 },
@@ -24063,7 +24413,7 @@ function PasswordStrengthTooltip({
24063
24413
  {
24064
24414
  className: `flex items-center gap-1.5 text-[13px] leading-[18px] ${valid ? "text-success" : "text-destructive"}`,
24065
24415
  children: [
24066
- valid ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react60.Check, { size: 14, className: "shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react60.X, { size: 14, className: "shrink-0" }),
24416
+ valid ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react61.Check, { size: 14, className: "shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react61.X, { size: 14, className: "shrink-0" }),
24067
24417
  /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { children: rule.label })
24068
24418
  ]
24069
24419
  },
@@ -24142,7 +24492,7 @@ function PasswordField({
24142
24492
  "aria-label": show ? "Hide password" : "Show password",
24143
24493
  className: "absolute right-3 top-2.5 text-muted-foreground hover:text-foreground",
24144
24494
  onClick: () => setShow((s) => !s),
24145
- children: show ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react61.EyeOffIcon, { className: "size-4" }) : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react61.EyeIcon, { className: "size-4" })
24495
+ children: show ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react62.EyeOffIcon, { className: "size-4" }) : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react62.EyeIcon, { className: "size-4" })
24146
24496
  }
24147
24497
  )
24148
24498
  ] });
@@ -24199,7 +24549,7 @@ function StaffRowItem({
24199
24549
  size: "icon-sm",
24200
24550
  onClick: () => onRemove(member.id),
24201
24551
  "aria-label": "Remove staff member",
24202
- children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react61.Trash2Icon, { className: "size-4" })
24552
+ children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react62.Trash2Icon, { className: "size-4" })
24203
24553
  }
24204
24554
  )
24205
24555
  ] });
@@ -24207,7 +24557,7 @@ function StaffRowItem({
24207
24557
 
24208
24558
  // src/components/ui/backoffice-signup-steps.tsx
24209
24559
  var import_react37 = __toESM(require("react"));
24210
- var import_lucide_react62 = require("lucide-react");
24560
+ var import_lucide_react63 = require("lucide-react");
24211
24561
  var import_jsx_runtime118 = require("react/jsx-runtime");
24212
24562
  var BASE_PLAN_PRICE = 299;
24213
24563
  var ROLE_INFO = {
@@ -24514,7 +24864,7 @@ function InviteStaffView({
24514
24864
  m.id
24515
24865
  )),
24516
24866
  /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(Button, { variant: "outline", onClick: addStaff, className: "w-full", children: [
24517
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react62.PlusIcon, { className: "size-4" }),
24867
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react63.PlusIcon, { className: "size-4" }),
24518
24868
  "Add Staff"
24519
24869
  ] })
24520
24870
  ] })
@@ -24572,7 +24922,7 @@ function PaymentView({
24572
24922
  /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { className: "flex items-center gap-2", children: [
24573
24923
  /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("span", { className: "text-base w-[60px]", children: role }),
24574
24924
  /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(Tooltip, { children: [
24575
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(TooltipTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Info", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react62.InfoIcon, { className: "size-4" }) }) }),
24925
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(TooltipTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Info", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react63.InfoIcon, { className: "size-4" }) }) }),
24576
24926
  /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(TooltipContent, { side: "top", children: ROLE_INFO[role] })
24577
24927
  ] })
24578
24928
  ] }),
@@ -24648,15 +24998,15 @@ function BackofficeSuccessStep() {
24648
24998
  /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { className: "border border-border p-6 flex flex-col gap-4 text-left w-full max-w-[400px]", children: [
24649
24999
  /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("p", { className: "font-semibold text-base text-foreground", children: "Contact us anytime if you have any concerns." }),
24650
25000
  /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { className: "flex items-center gap-2.5", children: [
24651
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react62.PhoneIcon, { className: "size-5 text-success shrink-0" }),
25001
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react63.PhoneIcon, { className: "size-5 text-success shrink-0" }),
24652
25002
  /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("span", { className: "text-base text-foreground", children: "0416 338 438" })
24653
25003
  ] }),
24654
25004
  /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { className: "flex items-center gap-2.5", children: [
24655
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react62.CalendarIcon, { className: "size-5 text-success shrink-0" }),
25005
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react63.CalendarIcon, { className: "size-5 text-success shrink-0" }),
24656
25006
  /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("span", { className: "text-base text-foreground", children: "Book call back" })
24657
25007
  ] }),
24658
25008
  /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { className: "flex items-center gap-2.5", children: [
24659
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react62.MailIcon, { className: "size-5 text-success shrink-0" }),
25009
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_lucide_react63.MailIcon, { className: "size-5 text-success shrink-0" }),
24660
25010
  /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("span", { className: "text-base text-foreground", children: "clint@wealthx.au" })
24661
25011
  ] })
24662
25012
  ] })
@@ -24665,7 +25015,7 @@ function BackofficeSuccessStep() {
24665
25015
 
24666
25016
  // src/components/ui/frontend-signup-steps.tsx
24667
25017
  var import_react38 = require("react");
24668
- var import_lucide_react63 = require("lucide-react");
25018
+ var import_lucide_react64 = require("lucide-react");
24669
25019
  var import_jsx_runtime119 = require("react/jsx-runtime");
24670
25020
  var fmt = (v) => new Intl.NumberFormat("en-AU", {
24671
25021
  style: "currency",
@@ -24853,7 +25203,7 @@ function ConnectBankStep({ onConnect }) {
24853
25203
  {
24854
25204
  "aria-hidden": "true",
24855
25205
  className: "flex h-7 w-7 items-center justify-center bg-primary text-primary-foreground",
24856
- children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_lucide_react63.PlusIcon, { className: "size-4" })
25206
+ children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_lucide_react64.PlusIcon, { className: "size-4" })
24857
25207
  }
24858
25208
  )
24859
25209
  ] })
@@ -24933,7 +25283,7 @@ function ConnectPropertyStep({
24933
25283
  children: [
24934
25284
  /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("div", { className: "flex items-center gap-3", children: [
24935
25285
  /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
24936
- import_lucide_react63.HomeIcon,
25286
+ import_lucide_react64.HomeIcon,
24937
25287
  {
24938
25288
  "aria-hidden": "true",
24939
25289
  className: "size-4 shrink-0 text-muted-foreground"
@@ -24949,7 +25299,7 @@ function ConnectPropertyStep({
24949
25299
  ] })
24950
25300
  ] }),
24951
25301
  /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
24952
- import_lucide_react63.CheckIcon,
25302
+ import_lucide_react64.CheckIcon,
24953
25303
  {
24954
25304
  "aria-hidden": "true",
24955
25305
  className: "size-4 text-success"
@@ -25062,7 +25412,7 @@ function FrontendSuccessStep({
25062
25412
  {
25063
25413
  "aria-hidden": "true",
25064
25414
  className: "flex size-16 items-center justify-center bg-success/10",
25065
- children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_lucide_react63.CheckIcon, { className: "size-8 text-success", strokeWidth: 2 })
25415
+ children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_lucide_react64.CheckIcon, { className: "size-8 text-success", strokeWidth: 2 })
25066
25416
  }
25067
25417
  ),
25068
25418
  /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("div", { className: "flex flex-col gap-2", children: [
@@ -25079,7 +25429,7 @@ function FrontendSuccessStep({
25079
25429
 
25080
25430
  // src/components/ui/two-fa-setup-form.tsx
25081
25431
  var import_react39 = require("react");
25082
- var import_lucide_react64 = require("lucide-react");
25432
+ var import_lucide_react65 = require("lucide-react");
25083
25433
  var import_jsx_runtime120 = require("react/jsx-runtime");
25084
25434
  var DEFAULT_APPS = [
25085
25435
  { name: "Google Authenticator" },
@@ -25100,7 +25450,7 @@ function AppDownloadStep({
25100
25450
  className: "flex flex-1 flex-col items-center gap-3 border border-border bg-muted/30 p-4 text-center",
25101
25451
  children: [
25102
25452
  /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("div", { className: "flex items-center gap-2 text-sm font-medium text-foreground", children: [
25103
- (_a = app.icon) != null ? _a : /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_lucide_react64.Smartphone, { size: 18, className: "text-muted-foreground" }),
25453
+ (_a = app.icon) != null ? _a : /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_lucide_react65.Smartphone, { size: 18, className: "text-muted-foreground" }),
25104
25454
  app.name
25105
25455
  ] }),
25106
25456
  app.qrNode ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("div", { className: "flex items-center justify-center", children: app.qrNode }) : /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("div", { className: "flex h-[100px] w-[100px] items-center justify-center border border-dashed border-border bg-muted/50 text-[11px] text-muted-foreground", children: "Scan to download" })
@@ -26082,7 +26432,7 @@ function IncomeWorkDetails({
26082
26432
  }
26083
26433
 
26084
26434
  // src/components/ui/loan-application-badge.tsx
26085
- var import_lucide_react65 = require("lucide-react");
26435
+ var import_lucide_react66 = require("lucide-react");
26086
26436
  var import_jsx_runtime128 = require("react/jsx-runtime");
26087
26437
  var STATUS_CONFIG5 = {
26088
26438
  SENT: {
@@ -26112,7 +26462,7 @@ function LoanApplicationBadge({
26112
26462
  variant: "outline",
26113
26463
  className: cn("w-fit text-xs gap-1", statusClassName, className),
26114
26464
  children: [
26115
- showCheck && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react65.CheckIcon, { "aria-hidden": "true", className: "size-3" }),
26465
+ showCheck && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react66.CheckIcon, { "aria-hidden": "true", className: "size-3" }),
26116
26466
  label
26117
26467
  ]
26118
26468
  }
@@ -26283,7 +26633,7 @@ function ChevronRightIcon4({ className }) {
26283
26633
 
26284
26634
  // src/components/ui/resource-center.tsx
26285
26635
  var import_react43 = require("react");
26286
- var import_lucide_react66 = require("lucide-react");
26636
+ var import_lucide_react67 = require("lucide-react");
26287
26637
  var import_jsx_runtime131 = require("react/jsx-runtime");
26288
26638
  function ResourceModal({
26289
26639
  open,
@@ -26322,7 +26672,7 @@ function ResourceModal({
26322
26672
  download: true,
26323
26673
  className: "flex items-center gap-2 text-sm text-primary hover:underline",
26324
26674
  children: [
26325
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.Download, { className: "size-3.5 shrink-0" }),
26675
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.Download, { className: "size-3.5 shrink-0" }),
26326
26676
  attachment.name
26327
26677
  ]
26328
26678
  },
@@ -26352,8 +26702,8 @@ function ResourceVideoCard({ video }) {
26352
26702
  alt: video.title,
26353
26703
  className: "h-full w-full object-cover transition-transform duration-200 group-hover:scale-105"
26354
26704
  }
26355
- ) : /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.Play, { className: "size-10 text-muted-foreground opacity-40" }) }),
26356
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "absolute inset-0 flex items-center justify-center bg-black/30 opacity-0 transition-opacity duration-200 group-hover:opacity-100", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "flex size-12 items-center justify-center bg-background/90", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.Play, { className: "size-5 text-foreground" }) }) }),
26705
+ ) : /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.Play, { className: "size-10 text-muted-foreground opacity-40" }) }),
26706
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "absolute inset-0 flex items-center justify-center bg-black/30 opacity-0 transition-opacity duration-200 group-hover:opacity-100", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "flex size-12 items-center justify-center bg-background/90", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.Play, { className: "size-5 text-foreground" }) }) }),
26357
26707
  video.duration && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", { className: "absolute bottom-2 right-2 bg-black/70 px-1.5 py-0.5 text-xs font-medium text-white", children: video.duration })
26358
26708
  ] }),
26359
26709
  /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("p", { className: "text-sm font-medium text-foreground leading-snug line-clamp-2 group-hover:text-primary", children: video.title })
@@ -26456,7 +26806,7 @@ function ResourceDocumentCard({
26456
26806
  className: "h-full w-full object-cover"
26457
26807
  }
26458
26808
  ) : /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("div", { className: "flex h-full w-full flex-col items-center justify-center gap-2", children: [
26459
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "flex items-center justify-center bg-muted-foreground/10 p-4", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.Download, { className: "size-8 text-muted-foreground opacity-50" }) }),
26809
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "flex items-center justify-center bg-muted-foreground/10 p-4", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.Download, { className: "size-8 text-muted-foreground opacity-50" }) }),
26460
26810
  /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", { className: "text-xs text-muted-foreground", children: document2.title })
26461
26811
  ] }),
26462
26812
  /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "absolute inset-0 bg-foreground/40 opacity-0 transition-opacity duration-200 group-hover:opacity-100" })
@@ -26476,7 +26826,7 @@ function ResourceDocumentCard({
26476
26826
  onClick: (e) => e.stopPropagation(),
26477
26827
  className: "shrink-0",
26478
26828
  "aria-label": `Download ${document2.title}`,
26479
- children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(Button, { variant: "outline", size: "icon", className: "size-8", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.Download, { className: "size-4" }) })
26829
+ children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(Button, { variant: "outline", size: "icon", className: "size-8", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.Download, { className: "size-4" }) })
26480
26830
  }
26481
26831
  )
26482
26832
  ] })
@@ -26516,7 +26866,7 @@ function ResourceCarousel({
26516
26866
  "opacity-0 transition-opacity duration-200 group-hover:opacity-100",
26517
26867
  "hover:bg-muted focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
26518
26868
  ),
26519
- children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.ChevronLeft, { className: "size-4 text-foreground" })
26869
+ children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.ChevronLeft, { className: "size-4 text-foreground" })
26520
26870
  }
26521
26871
  ),
26522
26872
  /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
@@ -26541,7 +26891,7 @@ function ResourceCarousel({
26541
26891
  "opacity-0 transition-opacity duration-200 group-hover:opacity-100",
26542
26892
  "hover:bg-muted focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
26543
26893
  ),
26544
- children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.ChevronRight, { className: "size-4 text-foreground" })
26894
+ children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.ChevronRight, { className: "size-4 text-foreground" })
26545
26895
  }
26546
26896
  )
26547
26897
  ] })
@@ -26584,7 +26934,7 @@ function ResourceCenterHeader({
26584
26934
  className: "border-background text-background bg-transparent hover:bg-background/10 hover:text-background",
26585
26935
  onClick: () => setWatchModalOpen(true),
26586
26936
  children: [
26587
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react66.Play, { className: "mr-2 size-4" }),
26937
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(import_lucide_react67.Play, { className: "mr-2 size-4" }),
26588
26938
  "Watch Now"
26589
26939
  ]
26590
26940
  }
@@ -26915,6 +27265,7 @@ function ResourceCenterHeader({
26915
27265
  SelectableCard,
26916
27266
  Separator,
26917
27267
  ServiceConfigurationModal,
27268
+ ShareContactDialog,
26918
27269
  ShareDetailsDialog,
26919
27270
  Sheet,
26920
27271
  SheetClose,