@wealthx/shadcn 1.5.6 → 1.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +177 -171
- package/CHANGELOG.md +12 -0
- package/dist/{chunk-XHGISOX5.mjs → chunk-33VT74R4.mjs} +1 -1
- package/dist/{chunk-M4LTX3MH.mjs → chunk-3C4DZTGA.mjs} +1 -1
- package/dist/{chunk-ODO6BUOF.mjs → chunk-3CGM3QXQ.mjs} +3 -5
- package/dist/{chunk-QBPNYXTI.mjs → chunk-3NJPNSJG.mjs} +1 -1
- package/dist/{chunk-6SR4K5T5.mjs → chunk-3S6KVFF5.mjs} +1 -1
- package/dist/{chunk-7KT5HPYM.mjs → chunk-3VZ6CYY2.mjs} +1 -1
- package/dist/chunk-3Z75IKFO.mjs +34 -0
- package/dist/{chunk-DFL5CV75.mjs → chunk-4BHDDLWK.mjs} +2 -2
- package/dist/{chunk-KLJLDNCA.mjs → chunk-4LLTZ45R.mjs} +1 -1
- package/dist/{chunk-RAKBWNQH.mjs → chunk-54MTIKNC.mjs} +27 -66
- package/dist/{chunk-JTG5R5YV.mjs → chunk-54TRNCID.mjs} +287 -61
- package/dist/{chunk-KCKYGQVQ.mjs → chunk-5DAQU3B6.mjs} +1 -1
- package/dist/{chunk-CKPEFZNH.mjs → chunk-5LZZYODG.mjs} +2 -2
- package/dist/{chunk-2A53WPEC.mjs → chunk-5YVJSKFH.mjs} +2 -2
- package/dist/{chunk-JUBUN65Q.mjs → chunk-5YWUGE6F.mjs} +1 -1
- package/dist/chunk-65PZNG4Y.mjs +129 -0
- package/dist/{chunk-K7WSRWOU.mjs → chunk-6LWCFAB4.mjs} +1 -1
- package/dist/{chunk-Q5SGEIJV.mjs → chunk-6MDNL5I2.mjs} +3 -3
- package/dist/{chunk-AUEUTZIC.mjs → chunk-6U4NQGVM.mjs} +3 -3
- package/dist/{chunk-V4CUTCHS.mjs → chunk-77L3UPBW.mjs} +1 -1
- package/dist/{chunk-CW32WTZU.mjs → chunk-7UIL5UN3.mjs} +1 -1
- package/dist/{chunk-2LLFNGJZ.mjs → chunk-AANINK2B.mjs} +3 -3
- package/dist/{chunk-UEREFDAE.mjs → chunk-AZGLSIHF.mjs} +1 -1
- package/dist/{chunk-XN37434W.mjs → chunk-B3CTBLIY.mjs} +2 -2
- package/dist/{chunk-XTWAJWCQ.mjs → chunk-BAONSY54.mjs} +1 -1
- package/dist/{chunk-XIY5DJXI.mjs → chunk-BXL74CM2.mjs} +1 -1
- package/dist/{chunk-OYBIUEGE.mjs → chunk-BZGFW6L7.mjs} +1 -1
- package/dist/chunk-CEEVYRQA.mjs +61 -0
- package/dist/{chunk-BD3DWDT4.mjs → chunk-CEYEK3TI.mjs} +1 -1
- package/dist/{chunk-I3UDLWQ7.mjs → chunk-D3HKFRQO.mjs} +1 -1
- package/dist/{chunk-3AREQTZU.mjs → chunk-DCKT635J.mjs} +1 -1
- package/dist/{chunk-VLELWBEW.mjs → chunk-E2BNCA6L.mjs} +1 -1
- package/dist/{chunk-QRVEI6J3.mjs → chunk-E5EDZQ5J.mjs} +1 -3
- package/dist/{chunk-QHJDGB54.mjs → chunk-EAKRTKHJ.mjs} +2 -2
- package/dist/{chunk-Q35PNFJ7.mjs → chunk-FBNEIYSE.mjs} +1 -1
- package/dist/{chunk-KB7MZMED.mjs → chunk-FGMDBJCF.mjs} +1 -1
- package/dist/{chunk-S4CTM3UE.mjs → chunk-FRCTOAKZ.mjs} +35 -4
- package/dist/{chunk-K7TWMLLW.mjs → chunk-FW4U543X.mjs} +4 -4
- package/dist/{chunk-PGR53HMH.mjs → chunk-G2W754UJ.mjs} +1 -1
- package/dist/{chunk-46Q4335I.mjs → chunk-GS47ZSSA.mjs} +12 -22
- package/dist/{chunk-AHKHVBWR.mjs → chunk-GYWOD2YI.mjs} +1 -1
- package/dist/{chunk-HNDTLT5X.mjs → chunk-H5DTKPJ2.mjs} +1 -1
- package/dist/{chunk-C6SWS7OW.mjs → chunk-HB5BKRMH.mjs} +1 -1
- package/dist/{chunk-WUA546RX.mjs → chunk-IFSQWDRN.mjs} +1 -1
- package/dist/{chunk-KAD26MCC.mjs → chunk-IRZWYTGV.mjs} +1 -1
- package/dist/{chunk-AL6GOL2Y.mjs → chunk-IW33VLL5.mjs} +1 -1
- package/dist/{chunk-A6ER36CW.mjs → chunk-JGBV3XMQ.mjs} +1 -1
- package/dist/{chunk-Y6UM3VTN.mjs → chunk-JUMEIPII.mjs} +1 -1
- package/dist/{chunk-VFH632TB.mjs → chunk-K4WDPVFY.mjs} +3 -3
- package/dist/{chunk-PV3Y7QGK.mjs → chunk-LHWJQNLG.mjs} +3 -3
- package/dist/{chunk-NCUH54IZ.mjs → chunk-LI2CTS5O.mjs} +1 -1
- package/dist/{chunk-F24U4QQQ.mjs → chunk-LPVXO3TD.mjs} +1 -1
- package/dist/{chunk-VJ3GC7W3.mjs → chunk-MNMSHB2J.mjs} +5 -5
- package/dist/{chunk-J5NW5NCT.mjs → chunk-NCMV3LTP.mjs} +1 -1
- package/dist/{chunk-IXR4BQSQ.mjs → chunk-O5CP6VP6.mjs} +3 -3
- package/dist/{chunk-TGVXRD53.mjs → chunk-OZ2R6ERP.mjs} +1 -1
- package/dist/{chunk-D447W45Z.mjs → chunk-PCULNQWA.mjs} +42 -50
- package/dist/{chunk-CDVG7SFT.mjs → chunk-PGJRZHN7.mjs} +1 -1
- package/dist/{chunk-IKDTOCSY.mjs → chunk-RSEVIQEO.mjs} +1 -1
- package/dist/{chunk-GNER6MCO.mjs → chunk-SSUK6C2K.mjs} +1 -1
- package/dist/{chunk-6TX73WG7.mjs → chunk-TCE5L44O.mjs} +3 -2
- package/dist/{chunk-OECGKCVF.mjs → chunk-TLLD5IU6.mjs} +1 -1
- package/dist/{chunk-BFB3UH7V.mjs → chunk-TRM3KIHT.mjs} +2 -2
- package/dist/{chunk-TLYSVRSK.mjs → chunk-TUC2BNUR.mjs} +3 -3
- package/dist/{chunk-HXU5JGLQ.mjs → chunk-UBHBIWIA.mjs} +3 -3
- package/dist/{chunk-TXUBGKB7.mjs → chunk-UJMVXREM.mjs} +2 -2
- package/dist/{chunk-TAX3KL66.mjs → chunk-USOVLDGS.mjs} +1 -1
- package/dist/{chunk-HF4FUBCY.mjs → chunk-UTCW5YUX.mjs} +1 -1
- package/dist/{chunk-OL65UQHQ.mjs → chunk-UYRHYJPX.mjs} +27 -61
- package/dist/{chunk-BDESHD25.mjs → chunk-VLVEZHFE.mjs} +1 -1
- package/dist/{chunk-EUYPMDQG.mjs → chunk-VWZS32ZQ.mjs} +1 -1
- package/dist/{chunk-HROG643K.mjs → chunk-W5QJ57PU.mjs} +1 -1
- package/dist/{chunk-F4O2YPXJ.mjs → chunk-WHIW6KOB.mjs} +1 -1
- package/dist/{chunk-TOIVHWNC.mjs → chunk-WWIWRNBK.mjs} +1 -1
- package/dist/{chunk-2QNOPXMQ.mjs → chunk-XMP24PWA.mjs} +1 -1
- package/dist/{chunk-HO6S3ECM.mjs → chunk-XUCDPAVI.mjs} +2 -2
- package/dist/{chunk-EW72FINW.mjs → chunk-XVZGXPIX.mjs} +1 -1
- package/dist/{chunk-WDTXHLYM.mjs → chunk-XYSRRDBH.mjs} +17 -11
- package/dist/{chunk-QAX6HCUH.mjs → chunk-ZAXZBOWI.mjs} +1 -1
- package/dist/{chunk-E3PQDBYI.mjs → chunk-ZFKAYRFQ.mjs} +1 -1
- package/dist/components/ui/about-you-form.mjs +6 -6
- package/dist/components/ui/add-column-modal.js +56 -227
- package/dist/components/ui/add-column-modal.mjs +4 -5
- package/dist/components/ui/add-lead-modal.mjs +6 -6
- package/dist/components/ui/ai-assistant-drawer.mjs +4 -4
- package/dist/components/ui/ai-builder.mjs +4 -4
- package/dist/components/ui/ai-conversations.js +278 -58
- package/dist/components/ui/ai-conversations.mjs +6 -6
- package/dist/components/ui/alert-dialog.mjs +3 -3
- package/dist/components/ui/appointment-action-dialogs.mjs +7 -7
- package/dist/components/ui/appointment-availability-settings.js +1 -1
- package/dist/components/ui/appointment-availability-settings.mjs +9 -9
- package/dist/components/ui/appointment-book-dialog.js +11 -21
- package/dist/components/ui/appointment-book-dialog.mjs +7 -7
- package/dist/components/ui/appointment-calendar-view.mjs +2 -2
- package/dist/components/ui/appointment-detail-sheet.mjs +9 -9
- package/dist/components/ui/appointment-upcoming-card.mjs +6 -6
- package/dist/components/ui/assets-liabilities-side-card.mjs +3 -3
- package/dist/components/ui/backoffice-alert-history-chart.mjs +3 -3
- package/dist/components/ui/backoffice-alert-matching-chart.mjs +3 -3
- package/dist/components/ui/backoffice-alerts-chart.mjs +3 -3
- package/dist/components/ui/backoffice-connections-chart.mjs +3 -3
- package/dist/components/ui/backoffice-contact-history-chart.mjs +3 -3
- package/dist/components/ui/backoffice-contact-matching-chart.mjs +3 -3
- package/dist/components/ui/backoffice-signup-steps.mjs +9 -9
- package/dist/components/ui/bank-statement-generate-dialog.mjs +9 -9
- package/dist/components/ui/bank-statement-pdf-viewer.mjs +4 -4
- package/dist/components/ui/borrowing-capacity-card.mjs +3 -3
- package/dist/components/ui/borrowing-capacity-line-chart.mjs +3 -3
- package/dist/components/ui/calculator-section.mjs +4 -4
- package/dist/components/ui/calendar.mjs +2 -2
- package/dist/components/ui/cash-balance-line-chart.mjs +3 -3
- package/dist/components/ui/cashflow-bar-chart.mjs +3 -3
- package/dist/components/ui/category-edit-dialog.mjs +4 -4
- package/dist/components/ui/color-picker.mjs +4 -4
- package/dist/components/ui/contact-alert-dialog/index.mjs +5 -5
- package/dist/components/ui/create-contact-modal.mjs +5 -5
- package/dist/components/ui/csv-import-modal.mjs +4 -4
- package/dist/components/ui/dashboard-transactions-table.mjs +5 -5
- package/dist/components/ui/data-table.mjs +6 -6
- package/dist/components/ui/date-picker.mjs +6 -6
- package/dist/components/ui/delete-contact-component.mjs +4 -4
- package/dist/components/ui/dialog.mjs +3 -3
- package/dist/components/ui/document-checklist-template.mjs +4 -4
- package/dist/components/ui/drawer.mjs +3 -3
- package/dist/components/ui/dropdown-menu.mjs +3 -3
- package/dist/components/ui/dynamic-tabs.mjs +3 -3
- package/dist/components/ui/editable-money-item.mjs +4 -4
- package/dist/components/ui/expense-bar-chart.mjs +3 -3
- package/dist/components/ui/expense-work-details.mjs +4 -4
- package/dist/components/ui/file-preview-dialog.mjs +6 -6
- package/dist/components/ui/financial-cards.mjs +2 -2
- package/dist/components/ui/financial-drawers.mjs +4 -4
- package/dist/components/ui/financial-sections.mjs +3 -3
- package/dist/components/ui/frontend-signup-steps.mjs +7 -7
- package/dist/components/ui/income-bar-chart.mjs +3 -3
- package/dist/components/ui/income-work-details.mjs +4 -4
- package/dist/components/ui/integration-card.js +326 -0
- package/dist/components/ui/integration-card.mjs +11 -0
- package/dist/components/ui/kanban-column.js +151 -243
- package/dist/components/ui/kanban-column.mjs +6 -7
- package/dist/components/ui/loan-application-cards.mjs +1 -1
- package/dist/components/ui/money-item-with-color-indicator.mjs +4 -4
- package/dist/components/ui/onboarding-layout.js +65 -4
- package/dist/components/ui/onboarding-layout.mjs +6 -4
- package/dist/components/ui/opportunity-card.js +126 -216
- package/dist/components/ui/opportunity-card.mjs +5 -6
- package/dist/components/ui/opportunity-edit-modals.mjs +9 -9
- package/dist/components/ui/opportunity-summary-tab.mjs +11 -11
- package/dist/components/ui/pagination.mjs +4 -4
- package/dist/components/ui/password-strength-tooltip.mjs +4 -4
- package/dist/components/ui/pipeline-board.js +167 -261
- package/dist/components/ui/pipeline-board.mjs +7 -8
- package/dist/components/ui/pipeline-chart.js +128 -55
- package/dist/components/ui/pipeline-chart.mjs +4 -3
- package/dist/components/ui/pipeline-dialogs.mjs +9 -9
- package/dist/components/ui/popover.mjs +3 -3
- package/dist/components/ui/property-cashflow-doughnut-chart.mjs +3 -3
- package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +3 -3
- package/dist/components/ui/property-mobile-estimate-line-chart.mjs +3 -3
- package/dist/components/ui/property-report-dialog.mjs +4 -4
- package/dist/components/ui/resource-center.mjs +4 -4
- package/dist/components/ui/review-alerts-dialog.mjs +4 -4
- package/dist/components/ui/savings-goal-modal.mjs +7 -7
- package/dist/components/ui/scenario-drawer.mjs +3 -3
- package/dist/components/ui/scenario-item.mjs +4 -4
- package/dist/components/ui/scenario-list.mjs +4 -4
- package/dist/components/ui/select.mjs +3 -3
- package/dist/components/ui/selectable-card.js +163 -0
- package/dist/components/ui/selectable-card.mjs +9 -0
- package/dist/components/ui/share-details-dialog.mjs +4 -4
- package/dist/components/ui/sheet.mjs +3 -3
- package/dist/components/ui/sidebar-nav.mjs +4 -4
- package/dist/components/ui/signup-form-primitives.mjs +6 -6
- package/dist/components/ui/signup-shell.js +3 -2
- package/dist/components/ui/signup-shell.mjs +2 -2
- package/dist/components/ui/stepper.js +3 -2
- package/dist/components/ui/stepper.mjs +1 -1
- package/dist/components/ui/tooltip.mjs +3 -3
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +3 -3
- package/dist/components/ui/transactions-income-expense-bar-chart.mjs +3 -3
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +3 -3
- package/dist/index.js +2144 -1875
- package/dist/index.mjs +105 -95
- package/dist/lib/colors.js +36 -3
- package/dist/lib/colors.mjs +5 -1
- package/dist/lib/theme-provider.js +60 -13
- package/dist/lib/theme-provider.mjs +2 -2
- package/dist/styles.css +1 -1
- package/package.json +11 -1
- package/src/components/index.tsx +13 -1
- package/src/components/ui/add-column-modal.tsx +9 -58
- package/src/components/ui/ai-conversations.tsx +308 -42
- package/src/components/ui/appointment-availability-settings.tsx +1 -1
- package/src/components/ui/appointment-book-dialog.tsx +25 -48
- package/src/components/ui/integration-card.tsx +88 -0
- package/src/components/ui/kanban-column.tsx +0 -7
- package/src/components/ui/onboarding-layout.tsx +102 -1
- package/src/components/ui/opportunity-card.tsx +5 -53
- package/src/components/ui/pipeline-board.tsx +0 -3
- package/src/components/ui/pipeline-chart.tsx +47 -53
- package/src/components/ui/selectable-card.tsx +37 -0
- package/src/components/ui/stepper.tsx +3 -2
- package/src/lib/colors.ts +73 -5
- package/src/lib/format-date.ts +6 -6
- package/src/lib/theme-provider.tsx +13 -8
- package/src/styles/globals.css +37 -9
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +2 -0
- package/dist/chunk-2P7HP7LR.mjs +0 -68
|
@@ -71,7 +71,7 @@ __export(ai_conversations_exports, {
|
|
|
71
71
|
LeadInfoPanel: () => LeadInfoPanel
|
|
72
72
|
});
|
|
73
73
|
module.exports = __toCommonJS(ai_conversations_exports);
|
|
74
|
-
var import_react3 = require("react");
|
|
74
|
+
var import_react3 = __toESM(require("react"));
|
|
75
75
|
var import_lucide_react4 = require("lucide-react");
|
|
76
76
|
|
|
77
77
|
// src/lib/utils.ts
|
|
@@ -980,6 +980,7 @@ function ConversationListItem({
|
|
|
980
980
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "truncate text-sm font-semibold text-foreground", children: displayContactName(data.contact.name) }),
|
|
981
981
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
982
982
|
data.status === "needs-attention" && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Flag, { className: "size-3 text-warning-text" }),
|
|
983
|
+
data.channel === "email" ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Mail, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.MessageSquare, { className: "size-3 text-muted-foreground" }),
|
|
983
984
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "whitespace-nowrap text-xs text-muted-foreground", children: data.timestamp })
|
|
984
985
|
] })
|
|
985
986
|
] }),
|
|
@@ -1013,12 +1014,14 @@ function ConversationListItem({
|
|
|
1013
1014
|
}
|
|
1014
1015
|
);
|
|
1015
1016
|
}
|
|
1016
|
-
function filterConversations(conversations, query, filter) {
|
|
1017
|
+
function filterConversations(conversations, query, filter, channelFilter) {
|
|
1017
1018
|
const q = query.toLowerCase();
|
|
1018
1019
|
return conversations.filter((c) => {
|
|
1020
|
+
var _a;
|
|
1019
1021
|
const matchesFilter = filter === "all" || (filter === "open" ? c.status !== "closed" : c.status === filter);
|
|
1022
|
+
const matchesChannel = channelFilter === "all" || ((_a = c.channel) != null ? _a : "chat") === channelFilter;
|
|
1020
1023
|
const matchesSearch = !q || c.contact.name.toLowerCase().includes(q) || c.lastMessage.toLowerCase().includes(q);
|
|
1021
|
-
return matchesFilter && matchesSearch;
|
|
1024
|
+
return matchesFilter && matchesChannel && matchesSearch;
|
|
1022
1025
|
});
|
|
1023
1026
|
}
|
|
1024
1027
|
var FILTER_TABS = [
|
|
@@ -1033,15 +1036,25 @@ function ConversationList({
|
|
|
1033
1036
|
activeId,
|
|
1034
1037
|
searchQuery = "",
|
|
1035
1038
|
activeFilter = "all",
|
|
1039
|
+
channelFilter: channelFilterProp = "all",
|
|
1036
1040
|
hasMore,
|
|
1037
1041
|
isLoadingMore,
|
|
1038
1042
|
onSearchChange,
|
|
1039
1043
|
onFilterChange,
|
|
1044
|
+
onChannelFilterChange,
|
|
1040
1045
|
onSelect,
|
|
1041
1046
|
onRead,
|
|
1042
1047
|
onLoadMore,
|
|
1043
1048
|
className
|
|
1044
1049
|
}) {
|
|
1050
|
+
const [channelFilter, setChannelFilter] = (0, import_react3.useState)(channelFilterProp);
|
|
1051
|
+
function handleChannelFilterChange(vals) {
|
|
1052
|
+
const v = vals[0];
|
|
1053
|
+
if (v) {
|
|
1054
|
+
setChannelFilter(v);
|
|
1055
|
+
onChannelFilterChange == null ? void 0 : onChannelFilterChange(v);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1045
1058
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1046
1059
|
"div",
|
|
1047
1060
|
{
|
|
@@ -1051,18 +1064,37 @@ function ConversationList({
|
|
|
1051
1064
|
),
|
|
1052
1065
|
children: [
|
|
1053
1066
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: cn(PANEL_HEADER_HEIGHT, "flex shrink-0 flex-col"), children: [
|
|
1054
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.
|
|
1055
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.
|
|
1056
|
-
|
|
1057
|
-
|
|
1067
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5", children: [
|
|
1068
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "relative flex-1", children: [
|
|
1069
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Search, { className: "absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" }),
|
|
1070
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1071
|
+
Input,
|
|
1072
|
+
{
|
|
1073
|
+
value: searchQuery,
|
|
1074
|
+
onChange: (e) => onSearchChange == null ? void 0 : onSearchChange(e.target.value),
|
|
1075
|
+
placeholder: "Search conversations...",
|
|
1076
|
+
className: "h-8 pl-8 text-sm"
|
|
1077
|
+
}
|
|
1078
|
+
)
|
|
1079
|
+
] }),
|
|
1080
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1081
|
+
ToggleGroup,
|
|
1058
1082
|
{
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1083
|
+
type: "single",
|
|
1084
|
+
variant: "outline",
|
|
1085
|
+
size: "sm",
|
|
1086
|
+
spacing: 0,
|
|
1087
|
+
value: [channelFilter],
|
|
1088
|
+
onValueChange: handleChannelFilterChange,
|
|
1089
|
+
className: "shrink-0",
|
|
1090
|
+
children: [
|
|
1091
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ToggleGroupItem, { value: "all", "aria-label": "All channels", children: "All" }),
|
|
1092
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ToggleGroupItem, { value: "chat", "aria-label": "Chat", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.MessageSquare, { className: "size-3.5" }) }),
|
|
1093
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ToggleGroupItem, { value: "email", "aria-label": "Email", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Mail, { className: "size-3.5" }) })
|
|
1094
|
+
]
|
|
1063
1095
|
}
|
|
1064
1096
|
)
|
|
1065
|
-
] })
|
|
1097
|
+
] }),
|
|
1066
1098
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-1 items-center border-b border-border", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1067
1099
|
Tabs,
|
|
1068
1100
|
{
|
|
@@ -1092,7 +1124,8 @@ function ConversationList({
|
|
|
1092
1124
|
const filtered = filterConversations(
|
|
1093
1125
|
conversations,
|
|
1094
1126
|
searchQuery,
|
|
1095
|
-
activeFilter
|
|
1127
|
+
activeFilter,
|
|
1128
|
+
channelFilter
|
|
1096
1129
|
);
|
|
1097
1130
|
return filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col items-center justify-center gap-2 p-8 text-muted-foreground", children: [
|
|
1098
1131
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.MessageSquare, { className: "size-8 opacity-30" }),
|
|
@@ -1209,6 +1242,9 @@ function ChatBubble({ message, className }) {
|
|
|
1209
1242
|
}
|
|
1210
1243
|
function ChatComposer({
|
|
1211
1244
|
mode,
|
|
1245
|
+
channel: channelProp = "chat",
|
|
1246
|
+
onChannelChange,
|
|
1247
|
+
contactEmail = "",
|
|
1212
1248
|
inputValue = "",
|
|
1213
1249
|
onInputChange,
|
|
1214
1250
|
onSend,
|
|
@@ -1216,68 +1252,234 @@ function ChatComposer({
|
|
|
1216
1252
|
onLetAiHandle,
|
|
1217
1253
|
className
|
|
1218
1254
|
}) {
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1255
|
+
const [channel, setChannel] = import_react3.default.useState(channelProp);
|
|
1256
|
+
const [emailTo, setEmailTo] = import_react3.default.useState(contactEmail);
|
|
1257
|
+
const [emailCc, setEmailCc] = import_react3.default.useState("");
|
|
1258
|
+
const [showCc, setShowCc] = import_react3.default.useState(false);
|
|
1259
|
+
const [emailSubject, setEmailSubject] = import_react3.default.useState("");
|
|
1260
|
+
const [bold, setBold] = import_react3.default.useState(false);
|
|
1261
|
+
const [italic, setItalic] = import_react3.default.useState(false);
|
|
1262
|
+
const [underline, setUnderline] = import_react3.default.useState(false);
|
|
1263
|
+
const handleChannelChange = (c) => {
|
|
1264
|
+
setChannel(c);
|
|
1265
|
+
onChannelChange == null ? void 0 : onChannelChange(c);
|
|
1266
|
+
};
|
|
1267
|
+
function ToolbarButton({
|
|
1268
|
+
label,
|
|
1269
|
+
icon: Icon,
|
|
1270
|
+
pressed,
|
|
1271
|
+
onToggle
|
|
1272
|
+
}) {
|
|
1273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1274
|
+
"button",
|
|
1222
1275
|
{
|
|
1276
|
+
type: "button",
|
|
1277
|
+
"aria-label": label,
|
|
1278
|
+
"aria-pressed": pressed,
|
|
1279
|
+
onClick: onToggle,
|
|
1223
1280
|
className: cn(
|
|
1224
|
-
"flex items-center
|
|
1225
|
-
|
|
1281
|
+
"flex size-7 items-center justify-center transition-colors",
|
|
1282
|
+
pressed ? "bg-foreground text-background" : "text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
1226
1283
|
),
|
|
1227
|
-
children:
|
|
1228
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Bot, { className: "size-3.5 shrink-0 text-muted-foreground" }),
|
|
1229
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: "AI is handling this conversation." }),
|
|
1230
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1231
|
-
Button,
|
|
1232
|
-
{
|
|
1233
|
-
variant: "link",
|
|
1234
|
-
size: "sm",
|
|
1235
|
-
className: "h-auto p-0 text-[12px] font-medium text-foreground",
|
|
1236
|
-
onClick: onTakeOver,
|
|
1237
|
-
children: "Take Over"
|
|
1238
|
-
}
|
|
1239
|
-
),
|
|
1240
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: "to reply directly." })
|
|
1241
|
-
]
|
|
1284
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon, { className: "size-3.5" })
|
|
1242
1285
|
}
|
|
1243
1286
|
);
|
|
1244
1287
|
}
|
|
1288
|
+
function EmailFieldRow({
|
|
1289
|
+
label,
|
|
1290
|
+
children
|
|
1291
|
+
}) {
|
|
1292
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-3 border-b border-border px-4 py-2.5", children: [
|
|
1293
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "w-14 shrink-0 text-sm text-muted-foreground", children: label }),
|
|
1294
|
+
children
|
|
1295
|
+
] });
|
|
1296
|
+
}
|
|
1245
1297
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1246
1298
|
"div",
|
|
1247
1299
|
{
|
|
1248
1300
|
className: cn(
|
|
1249
|
-
"flex flex-col
|
|
1301
|
+
"flex flex-col border-t border-border bg-background",
|
|
1250
1302
|
className
|
|
1251
1303
|
),
|
|
1252
1304
|
children: [
|
|
1253
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1254
|
-
|
|
1305
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1306
|
+
Tabs,
|
|
1255
1307
|
{
|
|
1256
|
-
value:
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1308
|
+
value: channel,
|
|
1309
|
+
onValueChange: (v) => v && handleChannelChange(v),
|
|
1310
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(TabsList, { variant: "default", className: "w-full", children: [
|
|
1311
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(TabsTrigger, { value: "chat", className: "flex-1 gap-1.5", children: [
|
|
1312
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.MessageSquare, { className: "size-3.5" }),
|
|
1313
|
+
"Chat"
|
|
1314
|
+
] }),
|
|
1315
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(TabsTrigger, { value: "email", className: "flex-1 gap-1.5", children: [
|
|
1316
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Mail, { className: "size-3.5" }),
|
|
1317
|
+
"Email"
|
|
1318
|
+
] })
|
|
1319
|
+
] })
|
|
1261
1320
|
}
|
|
1262
|
-
),
|
|
1263
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center
|
|
1264
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
] }),
|
|
1268
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1321
|
+
) }),
|
|
1322
|
+
mode === "ai" ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-2 bg-muted/30 px-4 py-2.5 text-[12px] text-muted-foreground", children: [
|
|
1323
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Bot, { className: "size-3.5 shrink-0 text-muted-foreground" }),
|
|
1324
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: "AI is handling this conversation." }),
|
|
1325
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1269
1326
|
Button,
|
|
1270
1327
|
{
|
|
1328
|
+
variant: "link",
|
|
1271
1329
|
size: "sm",
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
children:
|
|
1275
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Send, { className: "mr-1.5 size-3.5" }),
|
|
1276
|
-
"Send"
|
|
1277
|
-
]
|
|
1330
|
+
className: "h-auto p-0 text-[12px] font-medium text-foreground",
|
|
1331
|
+
onClick: onTakeOver,
|
|
1332
|
+
children: "Take Over"
|
|
1278
1333
|
}
|
|
1279
|
-
)
|
|
1280
|
-
|
|
1334
|
+
),
|
|
1335
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: "to reply directly." })
|
|
1336
|
+
] }) : (
|
|
1337
|
+
/* Email panel stays in normal flow to anchor container height;
|
|
1338
|
+
chat panel is an absolute overlay so both tabs share identical dimensions */
|
|
1339
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "relative", children: [
|
|
1340
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1341
|
+
"div",
|
|
1342
|
+
{
|
|
1343
|
+
className: cn(
|
|
1344
|
+
"flex flex-col",
|
|
1345
|
+
channel !== "email" && "invisible pointer-events-none"
|
|
1346
|
+
),
|
|
1347
|
+
"aria-hidden": channel !== "email",
|
|
1348
|
+
children: [
|
|
1349
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(EmailFieldRow, { label: "To", children: [
|
|
1350
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1351
|
+
"input",
|
|
1352
|
+
{
|
|
1353
|
+
type: "email",
|
|
1354
|
+
value: emailTo,
|
|
1355
|
+
onChange: (e) => setEmailTo(e.target.value),
|
|
1356
|
+
placeholder: "Recipient email",
|
|
1357
|
+
className: "min-w-0 flex-1 bg-transparent text-base text-foreground outline-none placeholder:text-muted-foreground"
|
|
1358
|
+
}
|
|
1359
|
+
),
|
|
1360
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1361
|
+
"button",
|
|
1362
|
+
{
|
|
1363
|
+
type: "button",
|
|
1364
|
+
onClick: () => setShowCc((v) => !v),
|
|
1365
|
+
className: "flex shrink-0 items-center gap-0.5 text-sm text-muted-foreground hover:text-foreground",
|
|
1366
|
+
children: [
|
|
1367
|
+
"CC",
|
|
1368
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.ChevronDown, { className: "size-3.5" })
|
|
1369
|
+
]
|
|
1370
|
+
}
|
|
1371
|
+
)
|
|
1372
|
+
] }),
|
|
1373
|
+
showCc && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmailFieldRow, { label: "CC", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1374
|
+
"input",
|
|
1375
|
+
{
|
|
1376
|
+
type: "email",
|
|
1377
|
+
value: emailCc,
|
|
1378
|
+
onChange: (e) => setEmailCc(e.target.value),
|
|
1379
|
+
placeholder: "CC email",
|
|
1380
|
+
className: "min-w-0 flex-1 bg-transparent text-base text-foreground outline-none placeholder:text-muted-foreground"
|
|
1381
|
+
}
|
|
1382
|
+
) }),
|
|
1383
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmailFieldRow, { label: "Subject", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1384
|
+
"input",
|
|
1385
|
+
{
|
|
1386
|
+
type: "text",
|
|
1387
|
+
value: emailSubject,
|
|
1388
|
+
onChange: (e) => setEmailSubject(e.target.value),
|
|
1389
|
+
placeholder: "Email subject",
|
|
1390
|
+
className: "min-w-0 flex-1 bg-transparent text-base text-foreground outline-none placeholder:text-muted-foreground"
|
|
1391
|
+
}
|
|
1392
|
+
) }),
|
|
1393
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1394
|
+
Textarea,
|
|
1395
|
+
{
|
|
1396
|
+
value: inputValue,
|
|
1397
|
+
onChange: (e) => onInputChange == null ? void 0 : onInputChange(e.target.value),
|
|
1398
|
+
placeholder: "Write your email...",
|
|
1399
|
+
rows: 6,
|
|
1400
|
+
className: "resize-y border-0 px-4 py-3 text-base shadow-none focus-visible:ring-0"
|
|
1401
|
+
}
|
|
1402
|
+
),
|
|
1403
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center justify-between border-t border-border px-3 py-2", children: [
|
|
1404
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-0.5", children: [
|
|
1405
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1406
|
+
ToolbarButton,
|
|
1407
|
+
{
|
|
1408
|
+
label: "Bold",
|
|
1409
|
+
icon: import_lucide_react4.Bold,
|
|
1410
|
+
pressed: bold,
|
|
1411
|
+
onToggle: () => setBold((v) => !v)
|
|
1412
|
+
}
|
|
1413
|
+
),
|
|
1414
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1415
|
+
ToolbarButton,
|
|
1416
|
+
{
|
|
1417
|
+
label: "Italic",
|
|
1418
|
+
icon: import_lucide_react4.Italic,
|
|
1419
|
+
pressed: italic,
|
|
1420
|
+
onToggle: () => setItalic((v) => !v)
|
|
1421
|
+
}
|
|
1422
|
+
),
|
|
1423
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1424
|
+
ToolbarButton,
|
|
1425
|
+
{
|
|
1426
|
+
label: "Underline",
|
|
1427
|
+
icon: import_lucide_react4.Underline,
|
|
1428
|
+
pressed: underline,
|
|
1429
|
+
onToggle: () => setUnderline((v) => !v)
|
|
1430
|
+
}
|
|
1431
|
+
),
|
|
1432
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Separator, { orientation: "vertical", className: "mx-1.5 h-4" }),
|
|
1433
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ToolbarButton, { label: "Link", icon: import_lucide_react4.Link2 }),
|
|
1434
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ToolbarButton, { label: "Attach file", icon: import_lucide_react4.Paperclip })
|
|
1435
|
+
] }),
|
|
1436
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1437
|
+
Button,
|
|
1438
|
+
{
|
|
1439
|
+
size: "sm",
|
|
1440
|
+
onClick: () => onSend == null ? void 0 : onSend(inputValue),
|
|
1441
|
+
disabled: !inputValue.trim() || !emailTo.trim(),
|
|
1442
|
+
children: [
|
|
1443
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Send, { className: "mr-1.5 size-3.5" }),
|
|
1444
|
+
"Send Email"
|
|
1445
|
+
]
|
|
1446
|
+
}
|
|
1447
|
+
)
|
|
1448
|
+
] })
|
|
1449
|
+
]
|
|
1450
|
+
}
|
|
1451
|
+
),
|
|
1452
|
+
channel === "chat" && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "absolute inset-0 flex flex-col gap-3 p-4", children: [
|
|
1453
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1454
|
+
Textarea,
|
|
1455
|
+
{
|
|
1456
|
+
value: inputValue,
|
|
1457
|
+
onChange: (e) => onInputChange == null ? void 0 : onInputChange(e.target.value),
|
|
1458
|
+
placeholder: "Reply to lead...",
|
|
1459
|
+
className: "min-h-0 flex-1 resize-none text-base"
|
|
1460
|
+
}
|
|
1461
|
+
),
|
|
1462
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
1463
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Button, { variant: "outline", size: "sm", onClick: onLetAiHandle, children: [
|
|
1464
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Bot, { className: "mr-1.5 size-3.5" }),
|
|
1465
|
+
"Let AI Handle"
|
|
1466
|
+
] }),
|
|
1467
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1468
|
+
Button,
|
|
1469
|
+
{
|
|
1470
|
+
size: "sm",
|
|
1471
|
+
onClick: () => onSend == null ? void 0 : onSend(inputValue),
|
|
1472
|
+
disabled: !inputValue.trim(),
|
|
1473
|
+
children: [
|
|
1474
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Send, { className: "mr-1.5 size-3.5" }),
|
|
1475
|
+
"Send"
|
|
1476
|
+
]
|
|
1477
|
+
}
|
|
1478
|
+
)
|
|
1479
|
+
] })
|
|
1480
|
+
] })
|
|
1481
|
+
] })
|
|
1482
|
+
)
|
|
1281
1483
|
]
|
|
1282
1484
|
}
|
|
1283
1485
|
);
|
|
@@ -1288,6 +1490,8 @@ function ChatThread({
|
|
|
1288
1490
|
mode,
|
|
1289
1491
|
messages,
|
|
1290
1492
|
isAiTyping = false,
|
|
1493
|
+
channel,
|
|
1494
|
+
onChannelChange,
|
|
1291
1495
|
inputValue,
|
|
1292
1496
|
onInputChange,
|
|
1293
1497
|
onSend,
|
|
@@ -1431,6 +1635,9 @@ function ChatThread({
|
|
|
1431
1635
|
ChatComposer,
|
|
1432
1636
|
{
|
|
1433
1637
|
mode,
|
|
1638
|
+
channel,
|
|
1639
|
+
onChannelChange,
|
|
1640
|
+
contactEmail: contact.email,
|
|
1434
1641
|
inputValue,
|
|
1435
1642
|
onInputChange,
|
|
1436
1643
|
onSend,
|
|
@@ -1548,6 +1755,7 @@ function LeadInfoPanel({
|
|
|
1548
1755
|
contact,
|
|
1549
1756
|
firstSeen,
|
|
1550
1757
|
source = "Website Chatbot",
|
|
1758
|
+
topic,
|
|
1551
1759
|
aiFields = [],
|
|
1552
1760
|
appointment,
|
|
1553
1761
|
internalNotes = "",
|
|
@@ -1625,7 +1833,8 @@ function LeadInfoPanel({
|
|
|
1625
1833
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ContactAvatar, { name: contact.name, size: "lg" }),
|
|
1626
1834
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
1627
1835
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "truncate text-sm font-semibold text-foreground", children: displayContactName(contact.name) }),
|
|
1628
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-sm text-muted-foreground", children: source })
|
|
1836
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-sm text-muted-foreground", children: source }),
|
|
1837
|
+
topic && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Badge, { variant: "secondary", className: "mt-1 text-xs", children: topic })
|
|
1629
1838
|
] })
|
|
1630
1839
|
] }),
|
|
1631
1840
|
(contact.email || contact.phone || firstSeen) && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "mt-3 flex flex-col gap-1.5", children: [
|
|
@@ -1775,8 +1984,13 @@ function ConversationsPage({
|
|
|
1775
1984
|
appointment,
|
|
1776
1985
|
leadFirstSeen,
|
|
1777
1986
|
leadSource,
|
|
1987
|
+
leadTopic,
|
|
1778
1988
|
searchQuery,
|
|
1779
1989
|
activeFilter,
|
|
1990
|
+
channelFilter,
|
|
1991
|
+
onChannelFilterChange,
|
|
1992
|
+
channel,
|
|
1993
|
+
onChannelChange,
|
|
1780
1994
|
inputValue,
|
|
1781
1995
|
internalNotes,
|
|
1782
1996
|
showLeadPanel = true,
|
|
@@ -1832,10 +2046,12 @@ function ConversationsPage({
|
|
|
1832
2046
|
activeId: activeConversationId,
|
|
1833
2047
|
searchQuery,
|
|
1834
2048
|
activeFilter,
|
|
2049
|
+
channelFilter,
|
|
1835
2050
|
hasMore,
|
|
1836
2051
|
isLoadingMore,
|
|
1837
2052
|
onSearchChange,
|
|
1838
2053
|
onFilterChange,
|
|
2054
|
+
onChannelFilterChange,
|
|
1839
2055
|
onSelect: handleSelectConversation,
|
|
1840
2056
|
onRead,
|
|
1841
2057
|
onLoadMore,
|
|
@@ -1854,6 +2070,8 @@ function ConversationsPage({
|
|
|
1854
2070
|
mode,
|
|
1855
2071
|
messages,
|
|
1856
2072
|
isAiTyping,
|
|
2073
|
+
channel,
|
|
2074
|
+
onChannelChange,
|
|
1857
2075
|
inputValue,
|
|
1858
2076
|
onInputChange,
|
|
1859
2077
|
onSend,
|
|
@@ -1870,7 +2088,8 @@ function ConversationsPage({
|
|
|
1870
2088
|
"min-w-0 flex-1 border-r border-border",
|
|
1871
2089
|
mobilePanel === "chat" ? "flex flex-col md:flex" : "hidden md:flex"
|
|
1872
2090
|
)
|
|
1873
|
-
}
|
|
2091
|
+
},
|
|
2092
|
+
contact.id
|
|
1874
2093
|
) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1875
2094
|
"div",
|
|
1876
2095
|
{
|
|
@@ -1901,6 +2120,7 @@ function ConversationsPage({
|
|
|
1901
2120
|
contact,
|
|
1902
2121
|
firstSeen: leadFirstSeen,
|
|
1903
2122
|
source: leadSource,
|
|
2123
|
+
topic: leadTopic,
|
|
1904
2124
|
aiFields,
|
|
1905
2125
|
appointment,
|
|
1906
2126
|
internalNotes,
|
|
@@ -9,20 +9,20 @@ import {
|
|
|
9
9
|
ConversationStatusChip,
|
|
10
10
|
ConversationsPage,
|
|
11
11
|
LeadInfoPanel
|
|
12
|
-
} from "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
14
|
-
import "../../chunk-
|
|
12
|
+
} from "../../chunk-54TRNCID.mjs";
|
|
13
|
+
import "../../chunk-H5DTKPJ2.mjs";
|
|
14
|
+
import "../../chunk-3S6KVFF5.mjs";
|
|
15
15
|
import "../../chunk-WE4YKBDE.mjs";
|
|
16
16
|
import "../../chunk-2GIYVERS.mjs";
|
|
17
17
|
import "../../chunk-BS75ICOO.mjs";
|
|
18
|
-
import "../../chunk-
|
|
18
|
+
import "../../chunk-LI2CTS5O.mjs";
|
|
19
19
|
import "../../chunk-H6NQTIF4.mjs";
|
|
20
20
|
import "../../chunk-WL6WVV47.mjs";
|
|
21
21
|
import "../../chunk-OWFQSXVD.mjs";
|
|
22
22
|
import "../../chunk-6QAFGZC2.mjs";
|
|
23
23
|
import "../../chunk-LBTHZSBT.mjs";
|
|
24
|
-
import "../../chunk-
|
|
25
|
-
import "../../chunk-
|
|
24
|
+
import "../../chunk-XYSRRDBH.mjs";
|
|
25
|
+
import "../../chunk-FRCTOAKZ.mjs";
|
|
26
26
|
import "../../chunk-NOOEKOWY.mjs";
|
|
27
27
|
import "../../chunk-R4HCRDU5.mjs";
|
|
28
28
|
import "../../chunk-AFML43VJ.mjs";
|
|
@@ -11,9 +11,9 @@ import {
|
|
|
11
11
|
AlertDialogPortal,
|
|
12
12
|
AlertDialogTitle,
|
|
13
13
|
AlertDialogTrigger
|
|
14
|
-
} from "../../chunk-
|
|
15
|
-
import "../../chunk-
|
|
16
|
-
import "../../chunk-
|
|
14
|
+
} from "../../chunk-CEYEK3TI.mjs";
|
|
15
|
+
import "../../chunk-XYSRRDBH.mjs";
|
|
16
|
+
import "../../chunk-FRCTOAKZ.mjs";
|
|
17
17
|
import "../../chunk-NOOEKOWY.mjs";
|
|
18
18
|
import "../../chunk-R4HCRDU5.mjs";
|
|
19
19
|
import "../../chunk-AFML43VJ.mjs";
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AppointmentConfirmDialog,
|
|
3
3
|
AppointmentRescheduleDialog
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-AANINK2B.mjs";
|
|
5
5
|
import "../../chunk-FRT3S72S.mjs";
|
|
6
6
|
import "../../chunk-2GIYVERS.mjs";
|
|
7
7
|
import "../../chunk-BS75ICOO.mjs";
|
|
8
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-LI2CTS5O.mjs";
|
|
9
9
|
import "../../chunk-WL6WVV47.mjs";
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
12
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-CEYEK3TI.mjs";
|
|
11
|
+
import "../../chunk-FBNEIYSE.mjs";
|
|
12
|
+
import "../../chunk-LHWJQNLG.mjs";
|
|
13
13
|
import "../../chunk-P7CEBZM6.mjs";
|
|
14
14
|
import "../../chunk-6QAFGZC2.mjs";
|
|
15
|
-
import "../../chunk-
|
|
16
|
-
import "../../chunk-
|
|
15
|
+
import "../../chunk-XYSRRDBH.mjs";
|
|
16
|
+
import "../../chunk-FRCTOAKZ.mjs";
|
|
17
17
|
import "../../chunk-NOOEKOWY.mjs";
|
|
18
18
|
import "../../chunk-R4HCRDU5.mjs";
|
|
19
19
|
import "../../chunk-AFML43VJ.mjs";
|
|
@@ -1229,7 +1229,7 @@ function TimeSelect({
|
|
|
1229
1229
|
onValueChange: (v) => onChange(v),
|
|
1230
1230
|
disabled,
|
|
1231
1231
|
children: [
|
|
1232
|
-
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-36", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, {}) }),
|
|
1232
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { className: "w-36", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { children: (v) => selectLabel(TIME_OPTIONS, v) }) }),
|
|
1233
1233
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectContent, { children: TIME_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
|
|
1234
1234
|
]
|
|
1235
1235
|
}
|
|
@@ -2,20 +2,20 @@ import {
|
|
|
2
2
|
AppointmentAvailabilitySettings,
|
|
3
3
|
MEETING_PLATFORM_OPTIONS,
|
|
4
4
|
TIMEZONE_OPTIONS
|
|
5
|
-
} from "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
5
|
+
} from "../../chunk-MNMSHB2J.mjs";
|
|
6
|
+
import "../../chunk-USOVLDGS.mjs";
|
|
7
7
|
import "../../chunk-PNSYFE3K.mjs";
|
|
8
8
|
import "../../chunk-WE4YKBDE.mjs";
|
|
9
9
|
import "../../chunk-2GIYVERS.mjs";
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
12
|
-
import "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
14
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-LI2CTS5O.mjs";
|
|
11
|
+
import "../../chunk-TRM3KIHT.mjs";
|
|
12
|
+
import "../../chunk-HB5BKRMH.mjs";
|
|
13
|
+
import "../../chunk-FBNEIYSE.mjs";
|
|
14
|
+
import "../../chunk-LHWJQNLG.mjs";
|
|
15
15
|
import "../../chunk-P7CEBZM6.mjs";
|
|
16
16
|
import "../../chunk-LBTHZSBT.mjs";
|
|
17
|
-
import "../../chunk-
|
|
18
|
-
import "../../chunk-
|
|
17
|
+
import "../../chunk-XYSRRDBH.mjs";
|
|
18
|
+
import "../../chunk-FRCTOAKZ.mjs";
|
|
19
19
|
import "../../chunk-NOOEKOWY.mjs";
|
|
20
20
|
import "../../chunk-R4HCRDU5.mjs";
|
|
21
21
|
import "../../chunk-AFML43VJ.mjs";
|