@wealthx/shadcn 1.5.10 → 1.5.11

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 (111) hide show
  1. package/.turbo/turbo-build.log +126 -126
  2. package/CHANGELOG.md +6 -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-FRT3S72S.mjs → chunk-CQ7HKBEX.mjs} +1 -1
  13. package/dist/{chunk-E2BNCA6L.mjs → chunk-EHQL64B7.mjs} +1 -1
  14. package/dist/{chunk-2WCIORP7.mjs → chunk-EXI64H46.mjs} +1 -1
  15. package/dist/{chunk-BBXSNDS3.mjs → chunk-FQYFPHDO.mjs} +1 -1
  16. package/dist/{chunk-3VZ6CYY2.mjs → chunk-GAXNO4JB.mjs} +1 -1
  17. package/dist/{chunk-3WGFIFP6.mjs → chunk-I4P7RXAE.mjs} +1 -1
  18. package/dist/{chunk-Z2BW5T7P.mjs → chunk-IODGRCQG.mjs} +1 -1
  19. package/dist/{chunk-GS47ZSSA.mjs → chunk-J7KQON2N.mjs} +20 -5
  20. package/dist/{chunk-IQGKOT7A.mjs → chunk-K35TFQUB.mjs} +1 -1
  21. package/dist/{chunk-4DO3WM7V.mjs → chunk-K4VWSDJJ.mjs} +1 -1
  22. package/dist/{chunk-KWD6GANL.mjs → chunk-MPA2HV5U.mjs} +1 -1
  23. package/dist/{chunk-5LZZYODG.mjs → chunk-QHAMVWDG.mjs} +19 -1
  24. package/dist/{chunk-XUCDPAVI.mjs → chunk-R6U246E4.mjs} +2 -2
  25. package/dist/{chunk-VCDGLN25.mjs → chunk-S6AYZJYO.mjs} +47 -21
  26. package/dist/{chunk-WL6WVV47.mjs → chunk-X6RC5UWB.mjs} +1 -1
  27. package/dist/{chunk-4BHDDLWK.mjs → chunk-XAS6KBIG.mjs} +2 -2
  28. package/dist/{chunk-VWZS32ZQ.mjs → chunk-XYWEGBAA.mjs} +1 -1
  29. package/dist/{chunk-54MTIKNC.mjs → chunk-YV7XF32X.mjs} +49 -24
  30. package/dist/{chunk-E5EDZQ5J.mjs → chunk-ZA44WICP.mjs} +1 -1
  31. package/dist/{chunk-54TRNCID.mjs → chunk-ZMTCMP2G.mjs} +8 -8
  32. package/dist/components/ui/advisor-card.js +144 -55
  33. package/dist/components/ui/advisor-card.mjs +5 -2
  34. package/dist/components/ui/agent-evaluation-toast.js +1 -1
  35. package/dist/components/ui/agent-evaluation-toast.mjs +2 -2
  36. package/dist/components/ui/ai-assistant-drawer.js +1 -1
  37. package/dist/components/ui/ai-assistant-drawer.mjs +2 -2
  38. package/dist/components/ui/ai-builder.js +1 -1
  39. package/dist/components/ui/ai-builder.mjs +2 -2
  40. package/dist/components/ui/ai-conversations.js +1 -1
  41. package/dist/components/ui/ai-conversations.mjs +3 -3
  42. package/dist/components/ui/appointment-action-dialogs.js +1 -1
  43. package/dist/components/ui/appointment-action-dialogs.mjs +3 -3
  44. package/dist/components/ui/appointment-book-dialog.js +19 -4
  45. package/dist/components/ui/appointment-book-dialog.mjs +3 -3
  46. package/dist/components/ui/appointment-calendar-view.js +1 -1
  47. package/dist/components/ui/appointment-calendar-view.mjs +2 -2
  48. package/dist/components/ui/appointment-detail-sheet.js +1 -1
  49. package/dist/components/ui/appointment-detail-sheet.mjs +4 -4
  50. package/dist/components/ui/appointment-gmail-connect.js +1 -1
  51. package/dist/components/ui/appointment-gmail-connect.mjs +2 -2
  52. package/dist/components/ui/appointment-time-slot-picker.js +1 -1
  53. package/dist/components/ui/appointment-time-slot-picker.mjs +2 -2
  54. package/dist/components/ui/appointment-upcoming-card.js +1 -1
  55. package/dist/components/ui/appointment-upcoming-card.mjs +3 -3
  56. package/dist/components/ui/badge.js +1 -1
  57. package/dist/components/ui/badge.mjs +1 -1
  58. package/dist/components/ui/chat-widget-primitives.js +1 -1
  59. package/dist/components/ui/chat-widget-primitives.mjs +2 -2
  60. package/dist/components/ui/chat-widget.js +1 -1
  61. package/dist/components/ui/chat-widget.mjs +3 -3
  62. package/dist/components/ui/chip.js +1 -1
  63. package/dist/components/ui/chip.mjs +2 -2
  64. package/dist/components/ui/contact-alert-dialog/index.js +19 -1
  65. package/dist/components/ui/contact-alert-dialog/index.mjs +1 -1
  66. package/dist/components/ui/dashboard-transactions-table.js +1 -1
  67. package/dist/components/ui/dashboard-transactions-table.mjs +2 -2
  68. package/dist/components/ui/financial-cards.js +1 -1
  69. package/dist/components/ui/financial-cards.mjs +2 -2
  70. package/dist/components/ui/financial-sections.js +1 -1
  71. package/dist/components/ui/financial-sections.mjs +3 -3
  72. package/dist/components/ui/income-summary-component.js +1 -1
  73. package/dist/components/ui/income-summary-component.mjs +1 -1
  74. package/dist/components/ui/integration-card.js +1 -1
  75. package/dist/components/ui/integration-card.mjs +2 -2
  76. package/dist/components/ui/kanban-column.js +46 -23
  77. package/dist/components/ui/kanban-column.mjs +4 -4
  78. package/dist/components/ui/loan-applicant-information.js +1 -1
  79. package/dist/components/ui/loan-applicant-information.mjs +1 -1
  80. package/dist/components/ui/loan-application-badge.js +1 -1
  81. package/dist/components/ui/loan-application-badge.mjs +2 -2
  82. package/dist/components/ui/opportunity-card.js +46 -23
  83. package/dist/components/ui/opportunity-card.mjs +3 -3
  84. package/dist/components/ui/opportunity-summary-tab.js +1 -1
  85. package/dist/components/ui/opportunity-summary-tab.mjs +3 -3
  86. package/dist/components/ui/pipeline-board.js +46 -23
  87. package/dist/components/ui/pipeline-board.mjs +5 -5
  88. package/dist/components/ui/pipeline-primitives.js +1 -1
  89. package/dist/components/ui/pipeline-primitives.mjs +2 -2
  90. package/dist/components/ui/property-asset-card.js +1 -1
  91. package/dist/components/ui/property-asset-card.mjs +1 -1
  92. package/dist/components/ui/resource-center.js +1 -1
  93. package/dist/components/ui/resource-center.mjs +2 -2
  94. package/dist/components/ui/share-details-dialog.js +326 -30
  95. package/dist/components/ui/share-details-dialog.mjs +4 -1
  96. package/dist/components/ui/stage-timeline.js +1 -1
  97. package/dist/components/ui/stage-timeline.mjs +3 -3
  98. package/dist/index.js +457 -188
  99. package/dist/index.mjs +44 -42
  100. package/dist/styles.css +1 -1
  101. package/package.json +1 -1
  102. package/src/components/index.tsx +4 -0
  103. package/src/components/ui/advisor-card.tsx +75 -25
  104. package/src/components/ui/appointment-book-dialog.tsx +26 -3
  105. package/src/components/ui/appointment-time-slot-picker.tsx +1 -0
  106. package/src/components/ui/badge.tsx +1 -1
  107. package/src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx +19 -1
  108. package/src/components/ui/opportunity-card.tsx +56 -20
  109. package/src/components/ui/share-details-dialog.tsx +251 -0
  110. package/src/styles/styles-css.ts +1 -1
  111. package/dist/chunk-OZ2R6ERP.mjs +0 -174
@@ -0,0 +1,375 @@
1
+ import {
2
+ Spinner
3
+ } from "./chunk-JVMXMFBB.mjs";
4
+ import {
5
+ Tabs,
6
+ TabsContent,
7
+ TabsList,
8
+ TabsTrigger
9
+ } from "./chunk-WE4YKBDE.mjs";
10
+ import {
11
+ Textarea
12
+ } from "./chunk-BS75ICOO.mjs";
13
+ import {
14
+ Dialog,
15
+ DialogContent,
16
+ DialogFooter,
17
+ DialogHeader,
18
+ DialogTitle
19
+ } from "./chunk-LI2CTS5O.mjs";
20
+ import {
21
+ Label
22
+ } from "./chunk-P7CEBZM6.mjs";
23
+ import {
24
+ Input
25
+ } from "./chunk-LBTHZSBT.mjs";
26
+ import {
27
+ Button
28
+ } from "./chunk-NOOEKOWY.mjs";
29
+ import {
30
+ cn
31
+ } from "./chunk-AFML43VJ.mjs";
32
+
33
+ // src/components/ui/share-details-dialog.tsx
34
+ import * as React from "react";
35
+ import { CheckIcon, CopyIcon } from "lucide-react";
36
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
37
+ function Field({
38
+ id,
39
+ label,
40
+ required,
41
+ children
42
+ }) {
43
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
44
+ /* @__PURE__ */ jsxs(Label, { htmlFor: id, children: [
45
+ label,
46
+ required && /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-destructive", children: "*" })
47
+ ] }),
48
+ children
49
+ ] });
50
+ }
51
+ function ShareDetailsDialog({
52
+ open,
53
+ onOpenChange,
54
+ contactName,
55
+ shareUrl,
56
+ onEmailLink,
57
+ isSendingEmail = false,
58
+ className
59
+ }) {
60
+ const [copied, setCopied] = React.useState(false);
61
+ function handleCopy() {
62
+ navigator.clipboard.writeText(shareUrl).catch(() => {
63
+ });
64
+ setCopied(true);
65
+ setTimeout(() => setCopied(false), 2e3);
66
+ }
67
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size: "md", className, children: [
68
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: "Share Contact Details" }) }),
69
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
70
+ "Share a secure link to",
71
+ " ",
72
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: contactName }),
73
+ "'s financial summary report."
74
+ ] }),
75
+ /* @__PURE__ */ jsxs(Field, { label: "Shareable link", children: [
76
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
77
+ /* @__PURE__ */ jsx(
78
+ Input,
79
+ {
80
+ readOnly: true,
81
+ value: shareUrl,
82
+ className: "flex-1 font-mono text-xs text-muted-foreground",
83
+ onClick: (e) => e.target.select()
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsx(
87
+ Button,
88
+ {
89
+ variant: "outline",
90
+ size: "icon",
91
+ onClick: handleCopy,
92
+ "aria-label": copied ? "Copied" : "Copy link",
93
+ className: "shrink-0",
94
+ children: copied ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 text-success" }) : /* @__PURE__ */ jsx(CopyIcon, { className: "size-4" })
95
+ }
96
+ )
97
+ ] }),
98
+ copied && /* @__PURE__ */ jsx("p", { className: "text-xs text-success", children: "Link copied to clipboard!" })
99
+ ] }),
100
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
101
+ /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), children: "Close" }),
102
+ onEmailLink && /* @__PURE__ */ jsx(Button, { onClick: onEmailLink, disabled: isSendingEmail, children: isSendingEmail ? /* @__PURE__ */ jsxs(Fragment, { children: [
103
+ /* @__PURE__ */ jsx(Spinner, { className: "size-3.5" }),
104
+ "Sending\u2026"
105
+ ] }) : "Email link" })
106
+ ] })
107
+ ] }) });
108
+ }
109
+ function EmailTemplateDialog({
110
+ open,
111
+ onOpenChange,
112
+ contactName,
113
+ contactEmail,
114
+ defaultSubject = "",
115
+ defaultBody = "",
116
+ onSend,
117
+ isSending = false,
118
+ className
119
+ }) {
120
+ const [subject, setSubject] = React.useState(defaultSubject);
121
+ const [body, setBody] = React.useState(defaultBody);
122
+ React.useEffect(() => {
123
+ if (open) {
124
+ setSubject(defaultSubject);
125
+ setBody(defaultBody);
126
+ }
127
+ }, [open, defaultSubject, defaultBody]);
128
+ const canSend = subject.trim() !== "" && body.trim() !== "" && !isSending;
129
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: isSending ? void 0 : onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size: "lg", className, children: [
130
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: "Send Email" }) }),
131
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
132
+ /* @__PURE__ */ jsx(Field, { label: "To", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border border-border bg-muted/40 px-3 py-2 text-sm", children: [
133
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: contactName }),
134
+ /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
135
+ "<",
136
+ contactEmail,
137
+ ">"
138
+ ] })
139
+ ] }) }),
140
+ /* @__PURE__ */ jsx(Field, { id: "etd-subject", label: "Subject", required: true, children: /* @__PURE__ */ jsx(
141
+ Input,
142
+ {
143
+ id: "etd-subject",
144
+ placeholder: "Email subject",
145
+ value: subject,
146
+ onChange: (e) => setSubject(e.target.value),
147
+ disabled: isSending
148
+ }
149
+ ) }),
150
+ /* @__PURE__ */ jsx(Field, { id: "etd-body", label: "Message", required: true, children: /* @__PURE__ */ jsx(
151
+ Textarea,
152
+ {
153
+ id: "etd-body",
154
+ rows: 8,
155
+ placeholder: "Write your message here\u2026",
156
+ value: body,
157
+ onChange: (e) => setBody(e.target.value),
158
+ disabled: isSending
159
+ }
160
+ ) })
161
+ ] }),
162
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
163
+ /* @__PURE__ */ jsx(
164
+ Button,
165
+ {
166
+ variant: "outline",
167
+ onClick: () => onOpenChange(false),
168
+ disabled: isSending,
169
+ children: "Cancel"
170
+ }
171
+ ),
172
+ /* @__PURE__ */ jsx(Button, { onClick: () => onSend({ subject, body }), disabled: !canSend, children: isSending ? /* @__PURE__ */ jsxs(Fragment, { children: [
173
+ /* @__PURE__ */ jsx(Spinner, { className: "size-3.5" }),
174
+ "Sending\u2026"
175
+ ] }) : "Send Email" })
176
+ ] })
177
+ ] }) });
178
+ }
179
+ function ShareContactDialog({
180
+ open,
181
+ onOpenChange,
182
+ contactName,
183
+ internalAdvisors,
184
+ onShareInternal,
185
+ onShareExternal,
186
+ isSending = false,
187
+ className
188
+ }) {
189
+ const [tab, setTab] = React.useState("internal");
190
+ const [search, setSearch] = React.useState("");
191
+ const [selectedId, setSelectedId] = React.useState(null);
192
+ const [internalNotes, setInternalNotes] = React.useState("");
193
+ const [firstName, setFirstName] = React.useState("");
194
+ const [lastName, setLastName] = React.useState("");
195
+ const [email, setEmail] = React.useState("");
196
+ const [externalNotes, setExternalNotes] = React.useState("");
197
+ function reset() {
198
+ setTab("internal");
199
+ setSearch("");
200
+ setSelectedId(null);
201
+ setInternalNotes("");
202
+ setFirstName("");
203
+ setLastName("");
204
+ setEmail("");
205
+ setExternalNotes("");
206
+ }
207
+ function handleOpenChange(v) {
208
+ if (!v) reset();
209
+ onOpenChange(v);
210
+ }
211
+ const filtered = internalAdvisors.filter((a) => {
212
+ const q = search.toLowerCase();
213
+ return a.name.toLowerCase().includes(q) || a.role.toLowerCase().includes(q);
214
+ });
215
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: isSending ? void 0 : handleOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size: "md", className, children: [
216
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: "Share Contact's Information" }) }),
217
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
218
+ "Share",
219
+ " ",
220
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: contactName }),
221
+ "'s information with an advisor."
222
+ ] }),
223
+ /* @__PURE__ */ jsxs(Tabs, { value: tab, onValueChange: setTab, children: [
224
+ /* @__PURE__ */ jsxs(TabsList, { className: "w-full", children: [
225
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "internal", className: "flex-1", children: "Internal Advisor" }),
226
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "external", className: "flex-1", children: "External / Referral" })
227
+ ] }),
228
+ /* @__PURE__ */ jsxs(TabsContent, { value: "internal", className: "mt-4 flex flex-col gap-4", children: [
229
+ /* @__PURE__ */ jsx(Field, { label: "Search Advisor", children: /* @__PURE__ */ jsx(
230
+ Input,
231
+ {
232
+ placeholder: "Search by name or role\u2026",
233
+ value: search,
234
+ onChange: (e) => setSearch(e.target.value)
235
+ }
236
+ ) }),
237
+ /* @__PURE__ */ jsx("div", { className: "max-h-[200px] overflow-y-auto border border-border divide-y divide-border", children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-3 py-4 text-center text-sm text-muted-foreground", children: "No advisors found." }) : filtered.map((a) => {
238
+ const isSelected = selectedId === a.id;
239
+ return /* @__PURE__ */ jsxs(
240
+ "button",
241
+ {
242
+ type: "button",
243
+ onClick: () => setSelectedId(a.id),
244
+ className: cn(
245
+ "flex w-full items-center gap-3 px-3 py-2.5 text-left transition-colors hover:bg-muted/40",
246
+ isSelected && "bg-primary/5"
247
+ ),
248
+ children: [
249
+ /* @__PURE__ */ jsx(
250
+ "div",
251
+ {
252
+ className: cn(
253
+ "flex size-4 shrink-0 items-center justify-center rounded-full border-2",
254
+ isSelected ? "border-primary" : "border-border bg-background"
255
+ ),
256
+ children: isSelected && /* @__PURE__ */ jsx("div", { className: "size-2 rounded-full bg-primary" })
257
+ }
258
+ ),
259
+ /* @__PURE__ */ jsxs("div", { children: [
260
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: a.name }),
261
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
262
+ a.role,
263
+ " \xB7 ",
264
+ a.practice
265
+ ] })
266
+ ] })
267
+ ]
268
+ },
269
+ a.id
270
+ );
271
+ }) }),
272
+ /* @__PURE__ */ jsx(Field, { id: "sc-int-notes", label: "Notes", children: /* @__PURE__ */ jsx(
273
+ Textarea,
274
+ {
275
+ id: "sc-int-notes",
276
+ placeholder: "Optional message for the advisor\u2026",
277
+ rows: 3,
278
+ value: internalNotes,
279
+ onChange: (e) => setInternalNotes(e.target.value),
280
+ disabled: isSending
281
+ }
282
+ ) })
283
+ ] }),
284
+ /* @__PURE__ */ jsxs(TabsContent, { value: "external", className: "mt-4 flex flex-col gap-4", children: [
285
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
286
+ /* @__PURE__ */ jsx(Field, { id: "sc-first", label: "First Name", children: /* @__PURE__ */ jsx(
287
+ Input,
288
+ {
289
+ id: "sc-first",
290
+ placeholder: "First name",
291
+ value: firstName,
292
+ onChange: (e) => setFirstName(e.target.value),
293
+ disabled: isSending
294
+ }
295
+ ) }),
296
+ /* @__PURE__ */ jsx(Field, { id: "sc-last", label: "Last Name", children: /* @__PURE__ */ jsx(
297
+ Input,
298
+ {
299
+ id: "sc-last",
300
+ placeholder: "Last name",
301
+ value: lastName,
302
+ onChange: (e) => setLastName(e.target.value),
303
+ disabled: isSending
304
+ }
305
+ ) })
306
+ ] }),
307
+ /* @__PURE__ */ jsx(Field, { id: "sc-email", label: "Email", required: true, children: /* @__PURE__ */ jsx(
308
+ Input,
309
+ {
310
+ id: "sc-email",
311
+ type: "email",
312
+ placeholder: "advisor@company.com.au",
313
+ value: email,
314
+ onChange: (e) => setEmail(e.target.value),
315
+ disabled: isSending
316
+ }
317
+ ) }),
318
+ /* @__PURE__ */ jsx(Field, { id: "sc-ext-notes", label: "Notes", children: /* @__PURE__ */ jsx(
319
+ Textarea,
320
+ {
321
+ id: "sc-ext-notes",
322
+ placeholder: "Optional message\u2026",
323
+ rows: 3,
324
+ value: externalNotes,
325
+ onChange: (e) => setExternalNotes(e.target.value),
326
+ disabled: isSending
327
+ }
328
+ ) })
329
+ ] })
330
+ ] }),
331
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
332
+ /* @__PURE__ */ jsx(
333
+ Button,
334
+ {
335
+ variant: "outline",
336
+ onClick: () => handleOpenChange(false),
337
+ disabled: isSending,
338
+ children: "Cancel"
339
+ }
340
+ ),
341
+ tab === "internal" ? /* @__PURE__ */ jsx(
342
+ Button,
343
+ {
344
+ onClick: () => onShareInternal(selectedId, internalNotes),
345
+ disabled: !selectedId || isSending,
346
+ children: isSending ? /* @__PURE__ */ jsxs(Fragment, { children: [
347
+ /* @__PURE__ */ jsx(Spinner, { className: "size-3.5" }),
348
+ "Sharing\u2026"
349
+ ] }) : "Share Contact"
350
+ }
351
+ ) : /* @__PURE__ */ jsx(
352
+ Button,
353
+ {
354
+ onClick: () => onShareExternal({
355
+ firstName,
356
+ lastName,
357
+ email,
358
+ notes: externalNotes
359
+ }),
360
+ disabled: !email || isSending,
361
+ children: isSending ? /* @__PURE__ */ jsxs(Fragment, { children: [
362
+ /* @__PURE__ */ jsx(Spinner, { className: "size-3.5" }),
363
+ "Sending\u2026"
364
+ ] }) : "Send Invite"
365
+ }
366
+ )
367
+ ] })
368
+ ] }) });
369
+ }
370
+
371
+ export {
372
+ ShareDetailsDialog,
373
+ EmailTemplateDialog,
374
+ ShareContactDialog
375
+ };
@@ -13,7 +13,7 @@ import {
13
13
  ExpensesCard,
14
14
  IncomeCard,
15
15
  PropertyCard
16
- } from "./chunk-W5QJ57PU.mjs";
16
+ } from "./chunk-7LN5OGC2.mjs";
17
17
  import {
18
18
  FinancialDetailField,
19
19
  FinancialLineItem,
@@ -38,7 +38,7 @@ import {
38
38
  } from "./chunk-WE4YKBDE.mjs";
39
39
  import {
40
40
  Badge
41
- } from "./chunk-WL6WVV47.mjs";
41
+ } from "./chunk-X6RC5UWB.mjs";
42
42
  import {
43
43
  formatCurrency
44
44
  } from "./chunk-MN5NYQCL.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
  Button
6
6
  } from "./chunk-NOOEKOWY.mjs";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-BS75ICOO.mjs";
11
11
  import {
12
12
  Badge
13
- } from "./chunk-WL6WVV47.mjs";
13
+ } from "./chunk-X6RC5UWB.mjs";
14
14
  import {
15
15
  Button
16
16
  } from "./chunk-NOOEKOWY.mjs";
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-JTK6VJXY.mjs";
12
12
  import {
13
13
  Badge
14
- } from "./chunk-WL6WVV47.mjs";
14
+ } from "./chunk-X6RC5UWB.mjs";
15
15
  import {
16
16
  formatDateShort
17
17
  } from "./chunk-LHWJQNLG.mjs";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2GIYVERS.mjs";
4
4
  import {
5
5
  Badge
6
- } from "./chunk-WL6WVV47.mjs";
6
+ } from "./chunk-X6RC5UWB.mjs";
7
7
  import {
8
8
  Input
9
9
  } from "./chunk-LBTHZSBT.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,7 +1,7 @@
1
1
  import {
2
2
  LeadCard,
3
3
  OpportunityCard
4
- } from "./chunk-54MTIKNC.mjs";
4
+ } from "./chunk-YV7XF32X.mjs";
5
5
  import {
6
6
  Spinner
7
7
  } from "./chunk-JVMXMFBB.mjs";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-H5DTKPJ2.mjs";
15
15
  import {
16
16
  Badge
17
- } from "./chunk-WL6WVV47.mjs";
17
+ } from "./chunk-X6RC5UWB.mjs";
18
18
  import {
19
19
  useThemeVars
20
20
  } from "./chunk-XYSRRDBH.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
  Toggle
6
6
  } from "./chunk-6QAFGZC2.mjs";
@@ -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";