@wealthx/shadcn 1.5.9 → 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 (112) hide show
  1. package/.turbo/turbo-build.log +157 -157
  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-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-TAFL4WDY.mjs → chunk-IODGRCQG.mjs} +17 -10
  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 +17 -10
  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 +473 -197
  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-calendar-view.tsx +7 -6
  106. package/src/components/ui/appointment-time-slot-picker.tsx +1 -0
  107. package/src/components/ui/badge.tsx +1 -1
  108. package/src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx +19 -1
  109. package/src/components/ui/opportunity-card.tsx +56 -20
  110. package/src/components/ui/share-details-dialog.tsx +251 -0
  111. package/src/styles/styles-css.ts +1 -1
  112. package/dist/chunk-OZ2R6ERP.mjs +0 -174
@@ -60,6 +60,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
60
60
  var share_details_dialog_exports = {};
61
61
  __export(share_details_dialog_exports, {
62
62
  EmailTemplateDialog: () => EmailTemplateDialog,
63
+ ShareContactDialog: () => ShareContactDialog,
63
64
  ShareDetailsDialog: () => ShareDetailsDialog
64
65
  });
65
66
  module.exports = __toCommonJS(share_details_dialog_exports);
@@ -485,18 +486,121 @@ function Textarea(_a) {
485
486
  );
486
487
  }
487
488
 
488
- // src/components/ui/share-details-dialog.tsx
489
+ // src/components/ui/tabs.tsx
490
+ var import_class_variance_authority3 = require("class-variance-authority");
491
+ var import_tabs = require("@base-ui/react/tabs");
489
492
  var import_jsx_runtime8 = require("react/jsx-runtime");
493
+ function Tabs(_a) {
494
+ var _b = _a, {
495
+ className,
496
+ orientation = "horizontal"
497
+ } = _b, props = __objRest(_b, [
498
+ "className",
499
+ "orientation"
500
+ ]);
501
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
502
+ import_tabs.Tabs.Root,
503
+ __spreadValues({
504
+ className: cn(
505
+ "group/tabs flex gap-2 data-[orientation=horizontal]:flex-col",
506
+ className
507
+ ),
508
+ "data-orientation": orientation,
509
+ "data-slot": "tabs"
510
+ }, props)
511
+ );
512
+ }
513
+ var tabsListVariants = (0, import_class_variance_authority3.cva)(
514
+ "group/tabs-list inline-flex w-fit items-center justify-center gap-1 rounded-none p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col",
515
+ {
516
+ variants: {
517
+ variant: {
518
+ default: "bg-muted",
519
+ line: "bg-transparent p-0"
520
+ }
521
+ },
522
+ defaultVariants: {
523
+ variant: "default"
524
+ }
525
+ }
526
+ );
527
+ function TabsList(_a) {
528
+ var _b = _a, {
529
+ className,
530
+ variant = "default"
531
+ } = _b, props = __objRest(_b, [
532
+ "className",
533
+ "variant"
534
+ ]);
535
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
536
+ import_tabs.Tabs.List,
537
+ __spreadValues({
538
+ className: cn(tabsListVariants({ variant }), className),
539
+ "data-slot": "tabs-list",
540
+ "data-variant": variant
541
+ }, props)
542
+ );
543
+ }
544
+ function TabsTrigger(_a) {
545
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
546
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
547
+ import_tabs.Tabs.Tab,
548
+ __spreadValues({
549
+ className: cn(
550
+ // Base layout & typography
551
+ "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 whitespace-nowrap",
552
+ "rounded-none border border-transparent px-1.5 py-1 text-label-medium",
553
+ "text-muted-foreground transition-all",
554
+ // Vertical orientation
555
+ "group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start",
556
+ // Hover & focus
557
+ "hover:text-foreground",
558
+ "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring",
559
+ // Disabled
560
+ "disabled:pointer-events-none disabled:opacity-50",
561
+ // Active state — Default variant: primary/10 bg + subtle shadow
562
+ // Base UI uses data-active attribute for the active/selected tab
563
+ "data-active:bg-primary/10 data-active:text-foreground",
564
+ "group-data-[variant=default]/tabs-list:data-active:shadow-sm",
565
+ // Active state — Line variant: suppress bg & shadow
566
+ "group-data-[variant=line]/tabs-list:data-active:bg-transparent",
567
+ "group-data-[variant=line]/tabs-list:data-active:shadow-none",
568
+ // Indicator pseudo-element (visible only for Line variant, active state)
569
+ "after:absolute after:bg-primary after:opacity-0 after:transition-opacity",
570
+ "group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5",
571
+ "group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5",
572
+ "group-data-[variant=line]/tabs-list:data-active:after:opacity-100",
573
+ // SVG icons
574
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
575
+ className
576
+ ),
577
+ "data-slot": "tabs-trigger"
578
+ }, props)
579
+ );
580
+ }
581
+ function TabsContent(_a) {
582
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
583
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
584
+ import_tabs.Tabs.Panel,
585
+ __spreadValues({
586
+ className: cn("flex-1 outline-none", className),
587
+ "data-slot": "tabs-content"
588
+ }, props)
589
+ );
590
+ }
591
+
592
+ // src/components/ui/share-details-dialog.tsx
593
+ var import_jsx_runtime9 = require("react/jsx-runtime");
490
594
  function Field({
491
595
  id,
492
596
  label,
493
597
  required,
494
598
  children
495
599
  }) {
496
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
497
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Label, { htmlFor: id, children: [
600
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
601
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Label, { htmlFor: id, children: [
498
602
  label,
499
- required && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "ml-0.5 text-destructive", children: "*" })
603
+ required && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "ml-0.5 text-destructive", children: "*" })
500
604
  ] }),
501
605
  children
502
606
  ] });
@@ -517,17 +621,17 @@ function ShareDetailsDialog({
517
621
  setCopied(true);
518
622
  setTimeout(() => setCopied(false), 2e3);
519
623
  }
520
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DialogContent, { size: "md", className, children: [
521
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DialogTitle, { children: "Share Contact Details" }) }),
522
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
624
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(DialogContent, { size: "md", className, children: [
625
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogTitle, { children: "Share Contact Details" }) }),
626
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
523
627
  "Share a secure link to",
524
628
  " ",
525
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "font-medium text-foreground", children: contactName }),
629
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-medium text-foreground", children: contactName }),
526
630
  "'s financial summary report."
527
631
  ] }),
528
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Field, { label: "Shareable link", children: [
529
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex gap-2", children: [
530
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
632
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Field, { label: "Shareable link", children: [
633
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex gap-2", children: [
634
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
531
635
  Input,
532
636
  {
533
637
  readOnly: true,
@@ -536,7 +640,7 @@ function ShareDetailsDialog({
536
640
  onClick: (e) => e.target.select()
537
641
  }
538
642
  ),
539
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
643
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
540
644
  Button,
541
645
  {
542
646
  variant: "outline",
@@ -544,16 +648,16 @@ function ShareDetailsDialog({
544
648
  onClick: handleCopy,
545
649
  "aria-label": copied ? "Copied" : "Copy link",
546
650
  className: "shrink-0",
547
- children: copied ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react4.CheckIcon, { className: "size-4 text-success" }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react4.CopyIcon, { className: "size-4" })
651
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react4.CheckIcon, { className: "size-4 text-success" }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react4.CopyIcon, { className: "size-4" })
548
652
  }
549
653
  )
550
654
  ] }),
551
- copied && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "text-xs text-success", children: "Link copied to clipboard!" })
655
+ copied && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-xs text-success", children: "Link copied to clipboard!" })
552
656
  ] }),
553
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DialogFooter, { children: [
554
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Button, { variant: "outline", onClick: () => onOpenChange(false), children: "Close" }),
555
- onEmailLink && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Button, { onClick: onEmailLink, disabled: isSendingEmail, children: isSendingEmail ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
556
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Spinner, { className: "size-3.5" }),
657
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(DialogFooter, { children: [
658
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { variant: "outline", onClick: () => onOpenChange(false), children: "Close" }),
659
+ onEmailLink && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { onClick: onEmailLink, disabled: isSendingEmail, children: isSendingEmail ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
660
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { className: "size-3.5" }),
557
661
  "Sending\u2026"
558
662
  ] }) : "Email link" })
559
663
  ] })
@@ -579,18 +683,18 @@ function EmailTemplateDialog({
579
683
  }
580
684
  }, [open, defaultSubject, defaultBody]);
581
685
  const canSend = subject.trim() !== "" && body.trim() !== "" && !isSending;
582
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Dialog, { open, onOpenChange: isSending ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DialogContent, { size: "lg", className, children: [
583
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DialogTitle, { children: "Send Email" }) }),
584
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-col gap-4", children: [
585
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { label: "To", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center gap-2 border border-border bg-muted/40 px-3 py-2 text-sm", children: [
586
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "font-medium text-foreground", children: contactName }),
587
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "text-muted-foreground", children: [
686
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Dialog, { open, onOpenChange: isSending ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(DialogContent, { size: "lg", className, children: [
687
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogTitle, { children: "Send Email" }) }),
688
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-4", children: [
689
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { label: "To", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-2 border border-border bg-muted/40 px-3 py-2 text-sm", children: [
690
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-medium text-foreground", children: contactName }),
691
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "text-muted-foreground", children: [
588
692
  "<",
589
693
  contactEmail,
590
694
  ">"
591
695
  ] })
592
696
  ] }) }),
593
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { id: "etd-subject", label: "Subject", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
697
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { id: "etd-subject", label: "Subject", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
594
698
  Input,
595
699
  {
596
700
  id: "etd-subject",
@@ -600,7 +704,7 @@ function EmailTemplateDialog({
600
704
  disabled: isSending
601
705
  }
602
706
  ) }),
603
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { id: "etd-body", label: "Message", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
707
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { id: "etd-body", label: "Message", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
604
708
  Textarea,
605
709
  {
606
710
  id: "etd-body",
@@ -612,8 +716,8 @@ function EmailTemplateDialog({
612
716
  }
613
717
  ) })
614
718
  ] }),
615
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DialogFooter, { children: [
616
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
719
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(DialogFooter, { children: [
720
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
617
721
  Button,
618
722
  {
619
723
  variant: "outline",
@@ -622,15 +726,207 @@ function EmailTemplateDialog({
622
726
  children: "Cancel"
623
727
  }
624
728
  ),
625
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Button, { onClick: () => onSend({ subject, body }), disabled: !canSend, children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
626
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Spinner, { className: "size-3.5" }),
729
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { onClick: () => onSend({ subject, body }), disabled: !canSend, children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
730
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { className: "size-3.5" }),
627
731
  "Sending\u2026"
628
732
  ] }) : "Send Email" })
629
733
  ] })
630
734
  ] }) });
631
735
  }
736
+ function ShareContactDialog({
737
+ open,
738
+ onOpenChange,
739
+ contactName,
740
+ internalAdvisors,
741
+ onShareInternal,
742
+ onShareExternal,
743
+ isSending = false,
744
+ className
745
+ }) {
746
+ const [tab, setTab] = React3.useState("internal");
747
+ const [search, setSearch] = React3.useState("");
748
+ const [selectedId, setSelectedId] = React3.useState(null);
749
+ const [internalNotes, setInternalNotes] = React3.useState("");
750
+ const [firstName, setFirstName] = React3.useState("");
751
+ const [lastName, setLastName] = React3.useState("");
752
+ const [email, setEmail] = React3.useState("");
753
+ const [externalNotes, setExternalNotes] = React3.useState("");
754
+ function reset() {
755
+ setTab("internal");
756
+ setSearch("");
757
+ setSelectedId(null);
758
+ setInternalNotes("");
759
+ setFirstName("");
760
+ setLastName("");
761
+ setEmail("");
762
+ setExternalNotes("");
763
+ }
764
+ function handleOpenChange(v) {
765
+ if (!v) reset();
766
+ onOpenChange(v);
767
+ }
768
+ const filtered = internalAdvisors.filter((a) => {
769
+ const q = search.toLowerCase();
770
+ return a.name.toLowerCase().includes(q) || a.role.toLowerCase().includes(q);
771
+ });
772
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Dialog, { open, onOpenChange: isSending ? void 0 : handleOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(DialogContent, { size: "md", className, children: [
773
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogTitle, { children: "Share Contact's Information" }) }),
774
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
775
+ "Share",
776
+ " ",
777
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-medium text-foreground", children: contactName }),
778
+ "'s information with an advisor."
779
+ ] }),
780
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Tabs, { value: tab, onValueChange: setTab, children: [
781
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(TabsList, { className: "w-full", children: [
782
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TabsTrigger, { value: "internal", className: "flex-1", children: "Internal Advisor" }),
783
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TabsTrigger, { value: "external", className: "flex-1", children: "External / Referral" })
784
+ ] }),
785
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(TabsContent, { value: "internal", className: "mt-4 flex flex-col gap-4", children: [
786
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { label: "Search Advisor", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
787
+ Input,
788
+ {
789
+ placeholder: "Search by name or role\u2026",
790
+ value: search,
791
+ onChange: (e) => setSearch(e.target.value)
792
+ }
793
+ ) }),
794
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "max-h-[200px] overflow-y-auto border border-border divide-y divide-border", children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "px-3 py-4 text-center text-sm text-muted-foreground", children: "No advisors found." }) : filtered.map((a) => {
795
+ const isSelected = selectedId === a.id;
796
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
797
+ "button",
798
+ {
799
+ type: "button",
800
+ onClick: () => setSelectedId(a.id),
801
+ className: cn(
802
+ "flex w-full items-center gap-3 px-3 py-2.5 text-left transition-colors hover:bg-muted/40",
803
+ isSelected && "bg-primary/5"
804
+ ),
805
+ children: [
806
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
807
+ "div",
808
+ {
809
+ className: cn(
810
+ "flex size-4 shrink-0 items-center justify-center rounded-full border-2",
811
+ isSelected ? "border-primary" : "border-border bg-background"
812
+ ),
813
+ children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "size-2 rounded-full bg-primary" })
814
+ }
815
+ ),
816
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { children: [
817
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-sm font-medium", children: a.name }),
818
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
819
+ a.role,
820
+ " \xB7 ",
821
+ a.practice
822
+ ] })
823
+ ] })
824
+ ]
825
+ },
826
+ a.id
827
+ );
828
+ }) }),
829
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { id: "sc-int-notes", label: "Notes", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
830
+ Textarea,
831
+ {
832
+ id: "sc-int-notes",
833
+ placeholder: "Optional message for the advisor\u2026",
834
+ rows: 3,
835
+ value: internalNotes,
836
+ onChange: (e) => setInternalNotes(e.target.value),
837
+ disabled: isSending
838
+ }
839
+ ) })
840
+ ] }),
841
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(TabsContent, { value: "external", className: "mt-4 flex flex-col gap-4", children: [
842
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
843
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { id: "sc-first", label: "First Name", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
844
+ Input,
845
+ {
846
+ id: "sc-first",
847
+ placeholder: "First name",
848
+ value: firstName,
849
+ onChange: (e) => setFirstName(e.target.value),
850
+ disabled: isSending
851
+ }
852
+ ) }),
853
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { id: "sc-last", label: "Last Name", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
854
+ Input,
855
+ {
856
+ id: "sc-last",
857
+ placeholder: "Last name",
858
+ value: lastName,
859
+ onChange: (e) => setLastName(e.target.value),
860
+ disabled: isSending
861
+ }
862
+ ) })
863
+ ] }),
864
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { id: "sc-email", label: "Email", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
865
+ Input,
866
+ {
867
+ id: "sc-email",
868
+ type: "email",
869
+ placeholder: "advisor@company.com.au",
870
+ value: email,
871
+ onChange: (e) => setEmail(e.target.value),
872
+ disabled: isSending
873
+ }
874
+ ) }),
875
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Field, { id: "sc-ext-notes", label: "Notes", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
876
+ Textarea,
877
+ {
878
+ id: "sc-ext-notes",
879
+ placeholder: "Optional message\u2026",
880
+ rows: 3,
881
+ value: externalNotes,
882
+ onChange: (e) => setExternalNotes(e.target.value),
883
+ disabled: isSending
884
+ }
885
+ ) })
886
+ ] })
887
+ ] }),
888
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(DialogFooter, { children: [
889
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
890
+ Button,
891
+ {
892
+ variant: "outline",
893
+ onClick: () => handleOpenChange(false),
894
+ disabled: isSending,
895
+ children: "Cancel"
896
+ }
897
+ ),
898
+ tab === "internal" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
899
+ Button,
900
+ {
901
+ onClick: () => onShareInternal(selectedId, internalNotes),
902
+ disabled: !selectedId || isSending,
903
+ children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
904
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { className: "size-3.5" }),
905
+ "Sharing\u2026"
906
+ ] }) : "Share Contact"
907
+ }
908
+ ) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
909
+ Button,
910
+ {
911
+ onClick: () => onShareExternal({
912
+ firstName,
913
+ lastName,
914
+ email,
915
+ notes: externalNotes
916
+ }),
917
+ disabled: !email || isSending,
918
+ children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
919
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { className: "size-3.5" }),
920
+ "Sending\u2026"
921
+ ] }) : "Send Invite"
922
+ }
923
+ )
924
+ ] })
925
+ ] }) });
926
+ }
632
927
  // Annotate the CommonJS export names for ESM import in node:
633
928
  0 && (module.exports = {
634
929
  EmailTemplateDialog,
930
+ ShareContactDialog,
635
931
  ShareDetailsDialog
636
932
  });
@@ -1,8 +1,10 @@
1
1
  import {
2
2
  EmailTemplateDialog,
3
+ ShareContactDialog,
3
4
  ShareDetailsDialog
4
- } from "../../chunk-OZ2R6ERP.mjs";
5
+ } from "../../chunk-3KLJ4XRE.mjs";
5
6
  import "../../chunk-JVMXMFBB.mjs";
7
+ import "../../chunk-WE4YKBDE.mjs";
6
8
  import "../../chunk-BS75ICOO.mjs";
7
9
  import "../../chunk-LI2CTS5O.mjs";
8
10
  import "../../chunk-P7CEBZM6.mjs";
@@ -15,5 +17,6 @@ import "../../chunk-AFML43VJ.mjs";
15
17
  import "../../chunk-WNQUEZJF.mjs";
16
18
  export {
17
19
  EmailTemplateDialog,
20
+ ShareContactDialog,
18
21
  ShareDetailsDialog
19
22
  };
@@ -263,7 +263,7 @@ Slot.displayName = "Slot";
263
263
  // src/components/ui/badge.tsx
264
264
  var import_jsx_runtime3 = require("react/jsx-runtime");
265
265
  var badgeVariants = (0, import_class_variance_authority.cva)(
266
- "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",
266
+ "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",
267
267
  {
268
268
  variants: {
269
269
  variant: {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  StageTimeline
3
- } from "../../chunk-IQGKOT7A.mjs";
4
- import "../../chunk-2WCIORP7.mjs";
3
+ } from "../../chunk-K35TFQUB.mjs";
4
+ import "../../chunk-EXI64H46.mjs";
5
5
  import "../../chunk-JPGL36WQ.mjs";
6
6
  import "../../chunk-IKXYTCSB.mjs";
7
7
  import "../../chunk-JVMXMFBB.mjs";
8
8
  import "../../chunk-PNSYFE3K.mjs";
9
- import "../../chunk-WL6WVV47.mjs";
9
+ import "../../chunk-X6RC5UWB.mjs";
10
10
  import "../../chunk-UNACI2YK.mjs";
11
11
  import "../../chunk-R4HCRDU5.mjs";
12
12
  import "../../chunk-AFML43VJ.mjs";