@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
@@ -1,10 +1,3 @@
1
- import {
2
- DropdownMenu,
3
- DropdownMenuContent,
4
- DropdownMenuItem,
5
- DropdownMenuSeparator,
6
- DropdownMenuTrigger
7
- } from "./chunk-H5DTKPJ2.mjs";
8
1
  import {
9
2
  Tooltip,
10
3
  TooltipContent,
@@ -16,6 +9,13 @@ import {
16
9
  TabsList,
17
10
  TabsTrigger
18
11
  } from "./chunk-WE4YKBDE.mjs";
12
+ import {
13
+ DropdownMenu,
14
+ DropdownMenuContent,
15
+ DropdownMenuItem,
16
+ DropdownMenuSeparator,
17
+ DropdownMenuTrigger
18
+ } from "./chunk-H5DTKPJ2.mjs";
19
19
  import {
20
20
  Separator
21
21
  } from "./chunk-2GIYVERS.mjs";
@@ -36,7 +36,7 @@ import {
36
36
  } from "./chunk-H6NQTIF4.mjs";
37
37
  import {
38
38
  Badge
39
- } from "./chunk-WL6WVV47.mjs";
39
+ } from "./chunk-X6RC5UWB.mjs";
40
40
  import {
41
41
  ToggleGroup,
42
42
  ToggleGroupItem
@@ -424,15 +424,19 @@ function ChatComposer({
424
424
  mode,
425
425
  channel: channelProp = "chat",
426
426
  onChannelChange,
427
+ isEmailIntegrated = false,
427
428
  contactEmail = "",
428
429
  inputValue = "",
429
430
  onInputChange,
430
431
  onSend,
432
+ onSendEmail,
431
433
  onTakeOver,
432
434
  onLetAiHandle,
433
435
  className
434
436
  }) {
435
- const [channel, setChannel] = React.useState(channelProp);
437
+ const [channel, setChannel] = React.useState(
438
+ isEmailIntegrated ? channelProp : "chat"
439
+ );
436
440
  const [emailTo, setEmailTo] = React.useState(contactEmail);
437
441
  const [emailCc, setEmailCc] = React.useState("");
438
442
  const [showCc, setShowCc] = React.useState(false);
@@ -482,7 +486,7 @@ function ChatComposer({
482
486
  className
483
487
  ),
484
488
  children: [
485
- /* @__PURE__ */ jsx("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ jsx(
489
+ isEmailIntegrated && /* @__PURE__ */ jsx("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ jsx(
486
490
  Tabs,
487
491
  {
488
492
  value: channel,
@@ -617,7 +621,12 @@ function ChatComposer({
617
621
  Button,
618
622
  {
619
623
  size: "sm",
620
- onClick: () => onSend == null ? void 0 : onSend(inputValue),
624
+ onClick: () => onSendEmail == null ? void 0 : onSendEmail({
625
+ content: inputValue,
626
+ to: emailTo,
627
+ cc: emailCc,
628
+ subject: emailSubject
629
+ }),
621
630
  disabled: !inputValue.trim() || !emailTo.trim(),
622
631
  children: [
623
632
  /* @__PURE__ */ jsx(Send, { className: "mr-1.5 size-3.5" }),
@@ -672,9 +681,11 @@ function ChatThread({
672
681
  isAiTyping = false,
673
682
  channel,
674
683
  onChannelChange,
684
+ isEmailIntegrated,
675
685
  inputValue,
676
686
  onInputChange,
677
687
  onSend,
688
+ onSendEmail,
678
689
  onTakeOver,
679
690
  onLetAiHandle,
680
691
  onReopen,
@@ -682,12 +693,53 @@ function ChatThread({
682
693
  onUnmarkUrgent,
683
694
  onArchive,
684
695
  onAssignToAdvisor,
696
+ hasMoreMessages,
697
+ isLoadingMoreMessages,
698
+ onLoadMoreMessages,
685
699
  onBack,
686
700
  onShowLeadInfo,
687
701
  className
688
702
  }) {
689
703
  const aiIsHandling = mode === "ai";
690
704
  const isClosed = status === "closed";
705
+ const scrollRef = React.useRef(null);
706
+ const preLoadScrollHeightRef = React.useRef(null);
707
+ const handleScroll = (e) => {
708
+ if (!hasMoreMessages || isLoadingMoreMessages || !onLoadMoreMessages) {
709
+ return;
710
+ }
711
+ if (e.currentTarget.scrollTop <= 80) {
712
+ preLoadScrollHeightRef.current = e.currentTarget.scrollHeight;
713
+ onLoadMoreMessages();
714
+ }
715
+ };
716
+ const prevLastMessageIdRef = React.useRef(void 0);
717
+ const prevContactIdRef = React.useRef(contact.id);
718
+ React.useLayoutEffect(() => {
719
+ var _a, _b;
720
+ const el = scrollRef.current;
721
+ if (!el) return;
722
+ if (preLoadScrollHeightRef.current !== null) {
723
+ el.scrollTop = el.scrollHeight - preLoadScrollHeightRef.current;
724
+ preLoadScrollHeightRef.current = null;
725
+ prevLastMessageIdRef.current = (_a = messages[messages.length - 1]) == null ? void 0 : _a.id;
726
+ prevContactIdRef.current = contact.id;
727
+ return;
728
+ }
729
+ const currentLastId = (_b = messages[messages.length - 1]) == null ? void 0 : _b.id;
730
+ const contactChanged = prevContactIdRef.current !== contact.id;
731
+ const tailChanged = prevLastMessageIdRef.current !== currentLastId;
732
+ if (contactChanged || tailChanged) {
733
+ el.scrollTop = el.scrollHeight;
734
+ }
735
+ prevLastMessageIdRef.current = currentLastId;
736
+ prevContactIdRef.current = contact.id;
737
+ }, [contact.id, messages]);
738
+ React.useLayoutEffect(() => {
739
+ if (!isAiTyping) return;
740
+ const el = scrollRef.current;
741
+ if (el) el.scrollTop = el.scrollHeight;
742
+ }, [isAiTyping]);
691
743
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col bg-background", className), children: [
692
744
  /* @__PURE__ */ jsxs(
693
745
  "div",
@@ -777,9 +829,12 @@ function ChatThread({
777
829
  /* @__PURE__ */ jsxs(
778
830
  "div",
779
831
  {
832
+ ref: scrollRef,
833
+ onScroll: handleScroll,
780
834
  className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4",
781
835
  tabIndex: 0,
782
836
  children: [
837
+ isLoadingMoreMessages && /* @__PURE__ */ jsx("div", { className: "flex justify-center py-1 text-caption text-muted-foreground", children: "Loading older messages..." }),
783
838
  messages.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground", children: [
784
839
  /* @__PURE__ */ jsx(MessageSquare, { className: "size-8 opacity-30" }),
785
840
  /* @__PURE__ */ jsx("p", { className: "text-sm", children: "No messages yet" })
@@ -817,10 +872,12 @@ function ChatThread({
817
872
  mode,
818
873
  channel,
819
874
  onChannelChange,
875
+ isEmailIntegrated,
820
876
  contactEmail: contact.email,
821
877
  inputValue,
822
878
  onInputChange,
823
879
  onSend,
880
+ onSendEmail,
824
881
  onTakeOver,
825
882
  onLetAiHandle
826
883
  }
@@ -1171,11 +1228,15 @@ function ConversationsPage({
1171
1228
  onChannelFilterChange,
1172
1229
  channel,
1173
1230
  onChannelChange,
1231
+ isEmailIntegrated,
1174
1232
  inputValue,
1175
1233
  internalNotes,
1176
1234
  showLeadPanel = true,
1177
1235
  hasMore,
1178
1236
  isLoadingMore,
1237
+ hasMoreMessages,
1238
+ isLoadingMoreMessages,
1239
+ onLoadMoreMessages,
1179
1240
  isAiTyping,
1180
1241
  notesSaveStatus,
1181
1242
  onSelectConversation,
@@ -1184,6 +1245,7 @@ function ConversationsPage({
1184
1245
  onFilterChange,
1185
1246
  onInputChange,
1186
1247
  onSend,
1248
+ onSendEmail,
1187
1249
  onTakeOver,
1188
1250
  onLetAiHandle,
1189
1251
  onReopen,
@@ -1252,9 +1314,11 @@ function ConversationsPage({
1252
1314
  isAiTyping,
1253
1315
  channel,
1254
1316
  onChannelChange,
1317
+ isEmailIntegrated,
1255
1318
  inputValue,
1256
1319
  onInputChange,
1257
1320
  onSend,
1321
+ onSendEmail,
1258
1322
  onTakeOver,
1259
1323
  onLetAiHandle,
1260
1324
  onReopen,
@@ -1262,6 +1326,9 @@ function ConversationsPage({
1262
1326
  onUnmarkUrgent,
1263
1327
  onArchive,
1264
1328
  onAssignToAdvisor,
1329
+ hasMoreMessages,
1330
+ isLoadingMoreMessages,
1331
+ onLoadMoreMessages,
1265
1332
  onBack: () => setMobilePanel("list"),
1266
1333
  onShowLeadInfo: () => setMobilePanel("lead"),
1267
1334
  className: cn(
@@ -3,7 +3,7 @@ import {
3
3
  DebtCard,
4
4
  OtherLiabilityCard,
5
5
  PropertyCard
6
- } from "./chunk-W5QJ57PU.mjs";
6
+ } from "./chunk-7LN5OGC2.mjs";
7
7
  import {
8
8
  FinancialCardHeader,
9
9
  FinancialDetailField,
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-PNSYFE3K.mjs";
7
7
  import {
8
8
  Badge
9
- } from "./chunk-WL6WVV47.mjs";
9
+ } from "./chunk-X6RC5UWB.mjs";
10
10
  import {
11
11
  cn
12
12
  } from "./chunk-AFML43VJ.mjs";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-H6NQTIF4.mjs";
5
5
  import {
6
6
  Badge
7
- } from "./chunk-WL6WVV47.mjs";
7
+ } from "./chunk-X6RC5UWB.mjs";
8
8
  import {
9
9
  Input
10
10
  } from "./chunk-LBTHZSBT.mjs";
@@ -20,7 +20,7 @@ import {
20
20
  } from "./chunk-H6NQTIF4.mjs";
21
21
  import {
22
22
  Badge
23
- } from "./chunk-WL6WVV47.mjs";
23
+ } from "./chunk-X6RC5UWB.mjs";
24
24
  import {
25
25
  Button
26
26
  } from "./chunk-NOOEKOWY.mjs";
@@ -3,7 +3,7 @@ import {
3
3
  ChatWidgetInputBar,
4
4
  ChatWidgetLauncher,
5
5
  ChatWidgetMessage
6
- } from "./chunk-BBXSNDS3.mjs";
6
+ } from "./chunk-FQYFPHDO.mjs";
7
7
  import {
8
8
  Field,
9
9
  FieldError,
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-H6NQTIF4.mjs";
14
14
  import {
15
15
  Badge
16
- } from "./chunk-WL6WVV47.mjs";
16
+ } from "./chunk-X6RC5UWB.mjs";
17
17
  import {
18
18
  formatWeekdayShort
19
19
  } from "./chunk-LHWJQNLG.mjs";
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-MXP2RX2V.mjs";
9
9
  import {
10
10
  AppointmentSlotSection
11
- } from "./chunk-FRT3S72S.mjs";
11
+ } from "./chunk-CQ7HKBEX.mjs";
12
12
  import {
13
13
  Select,
14
14
  SelectContent,
@@ -37,7 +37,7 @@ import {
37
37
  } from "./chunk-H6NQTIF4.mjs";
38
38
  import {
39
39
  Badge
40
- } from "./chunk-WL6WVV47.mjs";
40
+ } from "./chunk-X6RC5UWB.mjs";
41
41
  import {
42
42
  Calendar
43
43
  } from "./chunk-FBNEIYSE.mjs";
@@ -127,6 +127,19 @@ var FORMAT_OPTIONS = [
127
127
  icon: /* @__PURE__ */ jsx(MapPin, { className: "h-4 w-4" })
128
128
  }
129
129
  ];
130
+ var CLIENT_FORMAT_OPTIONS = [
131
+ { value: "call", label: "Call", icon: /* @__PURE__ */ jsx(Phone, { className: "h-4 w-4" }) },
132
+ {
133
+ value: "online",
134
+ label: "Online Meeting",
135
+ icon: /* @__PURE__ */ jsx(Video, { className: "h-4 w-4" })
136
+ },
137
+ {
138
+ value: "offline",
139
+ label: "Offline Meeting",
140
+ icon: /* @__PURE__ */ jsx(MapPin, { className: "h-4 w-4" })
141
+ }
142
+ ];
130
143
  function MeetingFormatSection({
131
144
  format,
132
145
  onFormatChange,
@@ -136,10 +149,11 @@ function MeetingFormatSection({
136
149
  onCustomAddressChange,
137
150
  advisorOfficeAddress,
138
151
  clientHomeAddress,
139
- isClientMode
152
+ isClientMode,
153
+ formatOptions
140
154
  }) {
141
155
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
142
- /* @__PURE__ */ jsx("div", { className: "flex gap-2", children: FORMAT_OPTIONS.map((opt) => /* @__PURE__ */ jsxs(
156
+ /* @__PURE__ */ jsx("div", { className: "flex gap-2", children: formatOptions.map((opt) => /* @__PURE__ */ jsxs(
143
157
  Toggle,
144
158
  {
145
159
  variant: "outline",
@@ -432,7 +446,8 @@ function AppointmentBookDialog({
432
446
  onCustomAddressChange: setCustomAddress,
433
447
  advisorOfficeAddress,
434
448
  clientHomeAddress,
435
- isClientMode
449
+ isClientMode,
450
+ formatOptions: isClientMode ? CLIENT_FORMAT_OPTIONS : FORMAT_OPTIONS
436
451
  }
437
452
  )
438
453
  ] }),
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TaskCheckItem
3
- } from "./chunk-2WCIORP7.mjs";
3
+ } from "./chunk-EXI64H46.mjs";
4
4
  import {
5
5
  Progress
6
6
  } from "./chunk-JPGL36WQ.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Badge
3
- } from "./chunk-WL6WVV47.mjs";
3
+ } from "./chunk-X6RC5UWB.mjs";
4
4
  import {
5
5
  cn
6
6
  } from "./chunk-AFML43VJ.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  badgeVariants
3
- } from "./chunk-WL6WVV47.mjs";
3
+ } from "./chunk-X6RC5UWB.mjs";
4
4
  import {
5
5
  Button
6
6
  } from "./chunk-NOOEKOWY.mjs";
@@ -48,6 +48,7 @@ import {
48
48
 
49
49
  // src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx
50
50
  import * as React2 from "react";
51
+ import { AlertCircleIcon, EyeIcon, InfoIcon } from "lucide-react";
51
52
  import {
52
53
  Query,
53
54
  Utils as QbUtils4
@@ -837,7 +838,24 @@ function ContactAlertDialog({
837
838
  size: "sm",
838
839
  value: severity,
839
840
  onValueChange: (v) => v && setSeverity(v),
840
- children: ["NEED_ACTION", "WATCH", "HEALTHY"].map((s) => /* @__PURE__ */ jsx2(ToggleGroupItem, { value: s, children: SEVERITY_LABELS[s] }, s))
841
+ children: ["NEED_ACTION", "WATCH", "HEALTHY"].map((s) => /* @__PURE__ */ jsxs2(
842
+ ToggleGroupItem,
843
+ {
844
+ value: s,
845
+ className: cn(
846
+ s === "NEED_ACTION" && "data-pressed:bg-destructive/10 data-pressed:inset-ring-destructive data-pressed:text-destructive-text data-pressed:hover:bg-destructive/10",
847
+ s === "WATCH" && "data-pressed:bg-warning/10 data-pressed:inset-ring-warning data-pressed:text-warning-text data-pressed:hover:bg-warning/10",
848
+ s === "HEALTHY" && "data-pressed:bg-info/10 data-pressed:inset-ring-info data-pressed:text-info-text data-pressed:hover:bg-info/10"
849
+ ),
850
+ children: [
851
+ s === "NEED_ACTION" && /* @__PURE__ */ jsx2(AlertCircleIcon, { className: "size-3.5" }),
852
+ s === "WATCH" && /* @__PURE__ */ jsx2(EyeIcon, { className: "size-3.5" }),
853
+ s === "HEALTHY" && /* @__PURE__ */ jsx2(InfoIcon, { className: "size-3.5" }),
854
+ SEVERITY_LABELS[s]
855
+ ]
856
+ },
857
+ s
858
+ ))
841
859
  }
842
860
  )
843
861
  ] }),
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AppointmentConfirmDialog,
3
3
  AppointmentRescheduleDialog
4
- } from "./chunk-AANINK2B.mjs";
4
+ } from "./chunk-2KNQZG5S.mjs";
5
5
  import {
6
6
  Sheet,
7
7
  SheetContent
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-H6NQTIF4.mjs";
16
16
  import {
17
17
  Badge
18
- } from "./chunk-WL6WVV47.mjs";
18
+ } from "./chunk-X6RC5UWB.mjs";
19
19
  import {
20
20
  Button
21
21
  } from "./chunk-NOOEKOWY.mjs";
@@ -1,3 +1,9 @@
1
+ import {
2
+ DropdownMenu,
3
+ DropdownMenuContent,
4
+ DropdownMenuItem,
5
+ DropdownMenuTrigger
6
+ } from "./chunk-H5DTKPJ2.mjs";
1
7
  import {
2
8
  Separator
3
9
  } from "./chunk-2GIYVERS.mjs";
@@ -8,7 +14,7 @@ import {
8
14
  } from "./chunk-H6NQTIF4.mjs";
9
15
  import {
10
16
  Badge
11
- } from "./chunk-WL6WVV47.mjs";
17
+ } from "./chunk-X6RC5UWB.mjs";
12
18
  import {
13
19
  Button
14
20
  } from "./chunk-NOOEKOWY.mjs";
@@ -54,6 +60,7 @@ function AdvisorCard({
54
60
  isPrimary = false,
55
61
  appointments,
56
62
  onRefer,
63
+ menuItems,
57
64
  onMoreOptions,
58
65
  onBookAppointment,
59
66
  onViewAppointment
@@ -64,17 +71,17 @@ function AdvisorCard({
64
71
  /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-4 p-4", children: [
65
72
  /* @__PURE__ */ jsxs(Avatar, { className: "h-10 w-10 shrink-0", children: [
66
73
  companyLogoUrl && /* @__PURE__ */ jsx(AvatarImage, { src: companyLogoUrl, alt: `${name} company logo` }),
67
- /* @__PURE__ */ 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() })
74
+ /* @__PURE__ */ 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() })
68
75
  ] }),
69
76
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
70
- /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold leading-tight", children: name }),
71
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: role }),
77
+ /* @__PURE__ */ jsx("p", { className: "text-label-large leading-tight", children: name }),
78
+ /* @__PURE__ */ jsx("p", { className: "text-body-small text-muted-foreground", children: role }),
72
79
  /* @__PURE__ */ jsxs("div", { className: "mt-2 flex flex-col gap-1", children: [
73
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-sm text-muted-foreground", children: [
80
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-body-small text-muted-foreground", children: [
74
81
  /* @__PURE__ */ jsx(Phone, { className: "h-4 w-4 shrink-0" }),
75
82
  /* @__PURE__ */ jsx("span", { children: phone })
76
83
  ] }),
77
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-sm text-muted-foreground", children: [
84
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-body-small text-muted-foreground", children: [
78
85
  /* @__PURE__ */ jsx(Mail, { className: "h-4 w-4 shrink-0" }),
79
86
  /* @__PURE__ */ jsx("span", { children: email })
80
87
  ] })
@@ -82,7 +89,33 @@ function AdvisorCard({
82
89
  ] }),
83
90
  /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [
84
91
  isPrimary && /* @__PURE__ */ jsx(Badge, { variant: "success", children: "Primary" }),
85
- /* @__PURE__ */ jsx(
92
+ menuItems && menuItems.length > 0 ? /* @__PURE__ */ jsxs(DropdownMenu, { children: [
93
+ /* @__PURE__ */ jsx(
94
+ DropdownMenuTrigger,
95
+ {
96
+ render: /* @__PURE__ */ jsx(
97
+ Button,
98
+ {
99
+ variant: "ghost",
100
+ size: "icon",
101
+ className: "h-7 w-7",
102
+ "aria-label": "More options"
103
+ }
104
+ ),
105
+ children: /* @__PURE__ */ jsx(MoreVertical, { className: "h-4 w-4" })
106
+ }
107
+ ),
108
+ /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", children: menuItems.map((item, i) => /* @__PURE__ */ jsx(
109
+ DropdownMenuItem,
110
+ {
111
+ variant: item.variant,
112
+ disabled: item.disabled,
113
+ onClick: item.onClick,
114
+ children: item.label
115
+ },
116
+ i
117
+ )) })
118
+ ] }) : /* @__PURE__ */ jsx(
86
119
  Button,
87
120
  {
88
121
  variant: "ghost",
@@ -107,17 +140,10 @@ function AdvisorCard({
107
140
  /* @__PURE__ */ jsx(CalendarCheck, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
108
141
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
109
142
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
110
- /* @__PURE__ */ jsx(
111
- Badge,
112
- {
113
- variant: STATUS_VARIANT[appt.status],
114
- className: "text-[10px]",
115
- children: STATUS_LABEL[appt.status]
116
- }
117
- ),
118
- appt.appointmentType && /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-semibold", children: appt.appointmentType })
143
+ /* @__PURE__ */ jsx(Badge, { variant: STATUS_VARIANT[appt.status], children: STATUS_LABEL[appt.status] }),
144
+ appt.appointmentType && /* @__PURE__ */ jsx("span", { className: "truncate text-h6", children: appt.appointmentType })
119
145
  ] }),
120
- /* @__PURE__ */ jsxs("p", { className: "whitespace-nowrap text-sm text-muted-foreground", children: [
146
+ /* @__PURE__ */ jsxs("p", { className: "whitespace-nowrap text-body-small text-muted-foreground", children: [
121
147
  appt.date,
122
148
  " \xB7 ",
123
149
  appt.timeStart,
@@ -145,7 +171,7 @@ function AdvisorCard({
145
171
  /* Empty state */
146
172
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [
147
173
  /* @__PURE__ */ jsx(Calendar, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
148
- /* @__PURE__ */ jsx("p", { className: "flex-1 text-xs text-muted-foreground", children: "No upcoming appointments" })
174
+ /* @__PURE__ */ jsx("p", { className: "flex-1 text-caption text-muted-foreground", children: "No upcoming appointments" })
149
175
  ] })
150
176
  )
151
177
  ] }),
@@ -164,7 +190,7 @@ function AdvisorCard({
164
190
  onRefer && /* @__PURE__ */ jsxs(
165
191
  Button,
166
192
  {
167
- variant: "outline",
193
+ variant: "default",
168
194
  size: "sm",
169
195
  className: "w-full",
170
196
  onClick: onRefer,
@@ -188,8 +214,8 @@ function AdvisorInviteCard({ onInvite }) {
188
214
  children: [
189
215
  /* @__PURE__ */ jsx("div", { className: "flex h-10 w-10 items-center justify-center border border-dashed border-muted-foreground/40", children: /* @__PURE__ */ jsx(Plus, { className: "h-5 w-5 text-muted-foreground" }) }),
190
216
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
191
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Add Another Advisor" }),
192
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Connect more advisors to your account" })
217
+ /* @__PURE__ */ jsx("p", { className: "text-label-large", children: "Add Another Advisor" }),
218
+ /* @__PURE__ */ jsx("p", { className: "text-caption text-muted-foreground", children: "Connect more advisors to your account" })
193
219
  ] })
194
220
  ]
195
221
  }
@@ -13,7 +13,7 @@ import {
13
13
  import { cva } from "class-variance-authority";
14
14
  import { jsx } from "react/jsx-runtime";
15
15
  var badgeVariants = cva(
16
- "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",
16
+ "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",
17
17
  {
18
18
  variants: {
19
19
  variant: {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AppointmentSlotSection
3
- } from "./chunk-FRT3S72S.mjs";
3
+ } from "./chunk-CQ7HKBEX.mjs";
4
4
  import {
5
5
  Separator
6
6
  } from "./chunk-2GIYVERS.mjs";
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-H6NQTIF4.mjs";
23
23
  import {
24
24
  Badge
25
- } from "./chunk-WL6WVV47.mjs";
25
+ } from "./chunk-X6RC5UWB.mjs";
26
26
  import {
27
27
  Calendar
28
28
  } from "./chunk-FBNEIYSE.mjs";
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-LI2CTS5O.mjs";
7
7
  import {
8
8
  Badge
9
- } from "./chunk-WL6WVV47.mjs";
9
+ } from "./chunk-X6RC5UWB.mjs";
10
10
  import {
11
11
  Button
12
12
  } from "./chunk-NOOEKOWY.mjs";