turbodesk-livechat-react-native 0.1.0-alpha.0
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/CHANGELOG.md +30 -0
- package/README.md +91 -0
- package/dist/api/conversation-api.d.ts +16 -0
- package/dist/api/conversation-api.d.ts.map +1 -0
- package/dist/api/conversation-api.js +44 -0
- package/dist/api/conversation-api.js.map +1 -0
- package/dist/api/file-api.d.ts +5 -0
- package/dist/api/file-api.d.ts.map +1 -0
- package/dist/api/file-api.js +15 -0
- package/dist/api/file-api.js.map +1 -0
- package/dist/api/widget-api.d.ts +4 -0
- package/dist/api/widget-api.d.ts.map +1 -0
- package/dist/api/widget-api.js +15 -0
- package/dist/api/widget-api.js.map +1 -0
- package/dist/axios/axios.d.ts +32 -0
- package/dist/axios/axios.d.ts.map +1 -0
- package/dist/axios/axios.js +120 -0
- package/dist/axios/axios.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +42 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/http-client.d.ts +33 -0
- package/dist/core/http-client.d.ts.map +1 -0
- package/dist/core/http-client.js +104 -0
- package/dist/core/http-client.js.map +1 -0
- package/dist/core/identity.d.ts +7 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +62 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/visitor-params.d.ts +15 -0
- package/dist/core/visitor-params.d.ts.map +1 -0
- package/dist/core/visitor-params.js +45 -0
- package/dist/core/visitor-params.js.map +1 -0
- package/dist/hooks/use-conversations.d.ts +12 -0
- package/dist/hooks/use-conversations.d.ts.map +1 -0
- package/dist/hooks/use-conversations.js +177 -0
- package/dist/hooks/use-conversations.js.map +1 -0
- package/dist/hooks/use-live-chat.d.ts +30 -0
- package/dist/hooks/use-live-chat.d.ts.map +1 -0
- package/dist/hooks/use-live-chat.js +52 -0
- package/dist/hooks/use-live-chat.js.map +1 -0
- package/dist/hooks/use-messages.d.ts +11 -0
- package/dist/hooks/use-messages.d.ts.map +1 -0
- package/dist/hooks/use-messages.js +185 -0
- package/dist/hooks/use-messages.js.map +1 -0
- package/dist/hooks/use-send-message.d.ts +22 -0
- package/dist/hooks/use-send-message.d.ts.map +1 -0
- package/dist/hooks/use-send-message.js +125 -0
- package/dist/hooks/use-send-message.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/navigation/LiveChatPanel.d.ts +5 -0
- package/dist/navigation/LiveChatPanel.d.ts.map +1 -0
- package/dist/navigation/LiveChatPanel.js +81 -0
- package/dist/navigation/LiveChatPanel.js.map +1 -0
- package/dist/navigation/panel-router-context.d.ts +22 -0
- package/dist/navigation/panel-router-context.d.ts.map +1 -0
- package/dist/navigation/panel-router-context.js +42 -0
- package/dist/navigation/panel-router-context.js.map +1 -0
- package/dist/navigation/router-types.d.ts +2 -0
- package/dist/navigation/router-types.d.ts.map +1 -0
- package/dist/navigation/router-types.js +3 -0
- package/dist/navigation/router-types.js.map +1 -0
- package/dist/provider/LiveChatContext.d.ts +4 -0
- package/dist/provider/LiveChatContext.d.ts.map +1 -0
- package/dist/provider/LiveChatContext.js +35 -0
- package/dist/provider/LiveChatContext.js.map +1 -0
- package/dist/provider/LiveChatProvider.d.ts +3 -0
- package/dist/provider/LiveChatProvider.d.ts.map +1 -0
- package/dist/provider/LiveChatProvider.js +308 -0
- package/dist/provider/LiveChatProvider.js.map +1 -0
- package/dist/provider/types.d.ts +42 -0
- package/dist/provider/types.d.ts.map +1 -0
- package/dist/provider/types.js +3 -0
- package/dist/provider/types.js.map +1 -0
- package/dist/realtime/ws-client.d.ts +51 -0
- package/dist/realtime/ws-client.d.ts.map +1 -0
- package/dist/realtime/ws-client.js +322 -0
- package/dist/realtime/ws-client.js.map +1 -0
- package/dist/ui/components/AssigneeAvatar.d.ts +12 -0
- package/dist/ui/components/AssigneeAvatar.d.ts.map +1 -0
- package/dist/ui/components/AssigneeAvatar.js +58 -0
- package/dist/ui/components/AssigneeAvatar.js.map +1 -0
- package/dist/ui/components/Avatar.d.ts +10 -0
- package/dist/ui/components/Avatar.d.ts.map +1 -0
- package/dist/ui/components/Avatar.js +76 -0
- package/dist/ui/components/Avatar.js.map +1 -0
- package/dist/ui/components/ConversationHeader.d.ts +10 -0
- package/dist/ui/components/ConversationHeader.d.ts.map +1 -0
- package/dist/ui/components/ConversationHeader.js +90 -0
- package/dist/ui/components/ConversationHeader.js.map +1 -0
- package/dist/ui/components/ConversationListScreen.d.ts +9 -0
- package/dist/ui/components/ConversationListScreen.d.ts.map +1 -0
- package/dist/ui/components/ConversationListScreen.js +350 -0
- package/dist/ui/components/ConversationListScreen.js.map +1 -0
- package/dist/ui/components/ConversationScreen.d.ts +8 -0
- package/dist/ui/components/ConversationScreen.d.ts.map +1 -0
- package/dist/ui/components/ConversationScreen.js +235 -0
- package/dist/ui/components/ConversationScreen.js.map +1 -0
- package/dist/ui/components/HomeScreen.d.ts +6 -0
- package/dist/ui/components/HomeScreen.d.ts.map +1 -0
- package/dist/ui/components/HomeScreen.js +133 -0
- package/dist/ui/components/HomeScreen.js.map +1 -0
- package/dist/ui/components/LivechatMessageRenderer.d.ts +17 -0
- package/dist/ui/components/LivechatMessageRenderer.d.ts.map +1 -0
- package/dist/ui/components/LivechatMessageRenderer.js +122 -0
- package/dist/ui/components/LivechatMessageRenderer.js.map +1 -0
- package/dist/ui/components/LogMessage.d.ts +5 -0
- package/dist/ui/components/LogMessage.d.ts.map +1 -0
- package/dist/ui/components/LogMessage.js +83 -0
- package/dist/ui/components/LogMessage.js.map +1 -0
- package/dist/ui/components/MessageBubble.d.ts +15 -0
- package/dist/ui/components/MessageBubble.d.ts.map +1 -0
- package/dist/ui/components/MessageBubble.js +84 -0
- package/dist/ui/components/MessageBubble.js.map +1 -0
- package/dist/ui/components/MessageComposer.d.ts +31 -0
- package/dist/ui/components/MessageComposer.d.ts.map +1 -0
- package/dist/ui/components/MessageComposer.js +295 -0
- package/dist/ui/components/MessageComposer.js.map +1 -0
- package/dist/ui/components/WsStatusStrip.d.ts +2 -0
- package/dist/ui/components/WsStatusStrip.d.ts.map +1 -0
- package/dist/ui/components/WsStatusStrip.js +103 -0
- package/dist/ui/components/WsStatusStrip.js.map +1 -0
- package/dist/ui/icons.d.ts +22 -0
- package/dist/ui/icons.d.ts.map +1 -0
- package/dist/ui/icons.js +71 -0
- package/dist/ui/icons.js.map +1 -0
- package/dist/ui/theme.d.ts +72 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +170 -0
- package/dist/ui/theme.js.map +1 -0
- package/docs/backend-contract.md +392 -0
- package/docs/migration-notes.md +32 -0
- package/package.json +60 -0
- package/src/api/conversation-api.ts +71 -0
- package/src/api/file-api.ts +14 -0
- package/src/api/widget-api.ts +12 -0
- package/src/axios/axios.ts +159 -0
- package/src/core/config.ts +54 -0
- package/src/core/http-client.ts +136 -0
- package/src/core/identity.ts +68 -0
- package/src/core/visitor-params.ts +48 -0
- package/src/hooks/use-conversations.ts +181 -0
- package/src/hooks/use-live-chat.ts +84 -0
- package/src/hooks/use-messages.ts +188 -0
- package/src/hooks/use-send-message.ts +159 -0
- package/src/index.ts +114 -0
- package/src/navigation/LiveChatPanel.tsx +118 -0
- package/src/navigation/panel-router-context.tsx +89 -0
- package/src/navigation/router-types.ts +1 -0
- package/src/provider/LiveChatContext.ts +33 -0
- package/src/provider/LiveChatProvider.tsx +380 -0
- package/src/provider/types.ts +57 -0
- package/src/realtime/ws-client.ts +369 -0
- package/src/types/react-native-svg.d.ts +10 -0
- package/src/ui/components/AssigneeAvatar.tsx +102 -0
- package/src/ui/components/Avatar.tsx +110 -0
- package/src/ui/components/ConversationHeader.tsx +202 -0
- package/src/ui/components/ConversationListScreen.tsx +454 -0
- package/src/ui/components/ConversationScreen.tsx +362 -0
- package/src/ui/components/HomeScreen.tsx +278 -0
- package/src/ui/components/LivechatMessageRenderer.tsx +268 -0
- package/src/ui/components/LogMessage.tsx +88 -0
- package/src/ui/components/MessageBubble.tsx +148 -0
- package/src/ui/components/MessageComposer.tsx +461 -0
- package/src/ui/components/WsStatusStrip.tsx +123 -0
- package/src/ui/icons.tsx +111 -0
- package/src/ui/theme.ts +237 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useMessages = useMessages;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const conversation_api_1 = require("../api/conversation-api");
|
|
6
|
+
const LiveChatContext_1 = require("../provider/LiveChatContext");
|
|
7
|
+
const DEFAULT_LIMIT = 30;
|
|
8
|
+
function unwrapMessages(raw) {
|
|
9
|
+
var _a, _b, _c;
|
|
10
|
+
if (!raw)
|
|
11
|
+
return { messages: [], nextCursor: null };
|
|
12
|
+
const a = (raw === null || raw === void 0 ? void 0 : raw.data) !== undefined ? raw.data : raw;
|
|
13
|
+
const b = (a === null || a === void 0 ? void 0 : a.data) !== undefined && !Array.isArray(a) ? a.data : a;
|
|
14
|
+
const messages = (_a = b === null || b === void 0 ? void 0 : b.messages) !== null && _a !== void 0 ? _a : (Array.isArray(b) ? b : []);
|
|
15
|
+
const nextCursor = (_c = (_b = b === null || b === void 0 ? void 0 : b.pagination) === null || _b === void 0 ? void 0 : _b.nextCursor) !== null && _c !== void 0 ? _c : null;
|
|
16
|
+
return { messages, nextCursor };
|
|
17
|
+
}
|
|
18
|
+
function useMessages(conversationId) {
|
|
19
|
+
const { wsClient, visitorQueryParams, setTotalUnread } = (0, LiveChatContext_1.useLiveChatContext)();
|
|
20
|
+
const [messages, setMessages] = (0, react_1.useState)([]);
|
|
21
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
22
|
+
const [loadingOlder, setLoadingOlder] = (0, react_1.useState)(false);
|
|
23
|
+
const [hasOlder, setHasOlder] = (0, react_1.useState)(false);
|
|
24
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
25
|
+
const nextCursorRef = (0, react_1.useRef)(null);
|
|
26
|
+
const messagesRef = (0, react_1.useRef)([]);
|
|
27
|
+
messagesRef.current = messages;
|
|
28
|
+
const loadOlderInFlightRef = (0, react_1.useRef)(false);
|
|
29
|
+
const prevConvIdRef = (0, react_1.useRef)(null);
|
|
30
|
+
(0, react_1.useEffect)(() => {
|
|
31
|
+
const isNew = !conversationId || conversationId === "new";
|
|
32
|
+
if (isNew || !visitorQueryParams) {
|
|
33
|
+
if (!conversationId) {
|
|
34
|
+
setMessages([]);
|
|
35
|
+
setLoading(false);
|
|
36
|
+
setError(null);
|
|
37
|
+
setHasOlder(false);
|
|
38
|
+
nextCursorRef.current = null;
|
|
39
|
+
}
|
|
40
|
+
prevConvIdRef.current = conversationId;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const wasNew = !prevConvIdRef.current || prevConvIdRef.current === "new";
|
|
44
|
+
if (prevConvIdRef.current !== conversationId) {
|
|
45
|
+
if (!wasNew) {
|
|
46
|
+
setMessages([]);
|
|
47
|
+
nextCursorRef.current = null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
prevConvIdRef.current = conversationId;
|
|
51
|
+
const ac = new AbortController();
|
|
52
|
+
// Skip fetch entirely when transitioning from "new" and we already have messages from WS
|
|
53
|
+
if (wasNew && messagesRef.current.length > 0) {
|
|
54
|
+
return () => ac.abort();
|
|
55
|
+
}
|
|
56
|
+
setLoading(true);
|
|
57
|
+
setError(null);
|
|
58
|
+
(async () => {
|
|
59
|
+
try {
|
|
60
|
+
const raw = await conversation_api_1.conversationApi.getMessages(conversationId, {
|
|
61
|
+
params: { ...visitorQueryParams, limit: DEFAULT_LIMIT },
|
|
62
|
+
signal: ac.signal,
|
|
63
|
+
});
|
|
64
|
+
if (ac.signal.aborted)
|
|
65
|
+
return;
|
|
66
|
+
const { messages: msgs, nextCursor } = unwrapMessages(raw);
|
|
67
|
+
// Merge with existing messages (e.g. WS messages already appended during "new" state)
|
|
68
|
+
setMessages((prev) => {
|
|
69
|
+
if (prev.length === 0)
|
|
70
|
+
return msgs;
|
|
71
|
+
const merged = [...msgs];
|
|
72
|
+
for (const m of prev) {
|
|
73
|
+
if (!merged.some((x) => x._id === m._id || (m.localMessageId && x.localMessageId === m.localMessageId))) {
|
|
74
|
+
merged.push(m);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return merged.sort((a, b) => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
const ta = new Date((a === null || a === void 0 ? void 0 : a.createdAt) || ((_a = a === null || a === void 0 ? void 0 : a.livechat) === null || _a === void 0 ? void 0 : _a.timestamp) || 0).getTime();
|
|
80
|
+
const tb = new Date((b === null || b === void 0 ? void 0 : b.createdAt) || ((_b = b === null || b === void 0 ? void 0 : b.livechat) === null || _b === void 0 ? void 0 : _b.timestamp) || 0).getTime();
|
|
81
|
+
return ta - tb;
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
nextCursorRef.current = nextCursor;
|
|
85
|
+
setHasOlder(nextCursor !== null);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
if (ac.signal.aborted || (e === null || e === void 0 ? void 0 : e.name) === "AbortError")
|
|
89
|
+
return;
|
|
90
|
+
setError("Could not load messages.");
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
if (!ac.signal.aborted)
|
|
94
|
+
setLoading(false);
|
|
95
|
+
}
|
|
96
|
+
})();
|
|
97
|
+
return () => ac.abort();
|
|
98
|
+
}, [conversationId, visitorQueryParams]);
|
|
99
|
+
const loadOlder = (0, react_1.useCallback)(async () => {
|
|
100
|
+
if (loadOlderInFlightRef.current ||
|
|
101
|
+
!nextCursorRef.current ||
|
|
102
|
+
!conversationId ||
|
|
103
|
+
!visitorQueryParams)
|
|
104
|
+
return;
|
|
105
|
+
loadOlderInFlightRef.current = true;
|
|
106
|
+
setLoadingOlder(true);
|
|
107
|
+
try {
|
|
108
|
+
const raw = await conversation_api_1.conversationApi.getMessages(conversationId, {
|
|
109
|
+
params: {
|
|
110
|
+
...visitorQueryParams,
|
|
111
|
+
limit: DEFAULT_LIMIT,
|
|
112
|
+
nextCursor: nextCursorRef.current,
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
const { messages: older, nextCursor } = unwrapMessages(raw);
|
|
116
|
+
setMessages((prev) => [...older, ...prev]);
|
|
117
|
+
nextCursorRef.current = nextCursor;
|
|
118
|
+
setHasOlder(nextCursor !== null);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
/* ignore */
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
loadOlderInFlightRef.current = false;
|
|
125
|
+
setLoadingOlder(false);
|
|
126
|
+
}
|
|
127
|
+
}, [conversationId, visitorQueryParams]);
|
|
128
|
+
const markAsRead = (0, react_1.useCallback)(() => {
|
|
129
|
+
if (!conversationId || conversationId === "new" || !visitorQueryParams)
|
|
130
|
+
return;
|
|
131
|
+
conversation_api_1.conversationApi
|
|
132
|
+
.markMessageAsRead(conversationId, { params: visitorQueryParams })
|
|
133
|
+
.catch(() => { });
|
|
134
|
+
}, [conversationId, visitorQueryParams]);
|
|
135
|
+
// ── WS event handlers ──────────────────────────────────────────────────────
|
|
136
|
+
(0, react_1.useEffect)(() => {
|
|
137
|
+
if (!wsClient || !conversationId)
|
|
138
|
+
return;
|
|
139
|
+
const handleNewMessage = (payload) => {
|
|
140
|
+
var _a, _b;
|
|
141
|
+
const data = (_a = payload === null || payload === void 0 ? void 0 : payload.data) !== null && _a !== void 0 ? _a : payload;
|
|
142
|
+
const cid = (_b = data === null || data === void 0 ? void 0 : data.conversation) === null || _b === void 0 ? void 0 : _b._id;
|
|
143
|
+
// When conversationId is "new", accept messages for any conversation (first message)
|
|
144
|
+
if (conversationId !== "new" && cid !== conversationId)
|
|
145
|
+
return;
|
|
146
|
+
const incoming = data === null || data === void 0 ? void 0 : data.message;
|
|
147
|
+
if (!incoming)
|
|
148
|
+
return;
|
|
149
|
+
setMessages((prev) => {
|
|
150
|
+
if (incoming.localMessageId &&
|
|
151
|
+
prev.some((m) => (m === null || m === void 0 ? void 0 : m.localMessageId) === incoming.localMessageId))
|
|
152
|
+
return prev;
|
|
153
|
+
if (incoming._id && prev.some((m) => (m === null || m === void 0 ? void 0 : m._id) === incoming._id))
|
|
154
|
+
return prev;
|
|
155
|
+
const next = [...prev, incoming];
|
|
156
|
+
return next.sort((a, b) => {
|
|
157
|
+
var _a, _b;
|
|
158
|
+
const ta = new Date((a === null || a === void 0 ? void 0 : a.createdAt) || ((_a = a === null || a === void 0 ? void 0 : a.livechat) === null || _a === void 0 ? void 0 : _a.timestamp) || 0).getTime();
|
|
159
|
+
const tb = new Date((b === null || b === void 0 ? void 0 : b.createdAt) || ((_b = b === null || b === void 0 ? void 0 : b.livechat) === null || _b === void 0 ? void 0 : _b.timestamp) || 0).getTime();
|
|
160
|
+
return ta - tb;
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
const handleNewLogMessage = (payload) => {
|
|
165
|
+
var _a, _b;
|
|
166
|
+
const data = (_a = payload === null || payload === void 0 ? void 0 : payload.data) !== null && _a !== void 0 ? _a : payload;
|
|
167
|
+
const cid = (_b = data === null || data === void 0 ? void 0 : data.conversation) === null || _b === void 0 ? void 0 : _b._id;
|
|
168
|
+
if (conversationId !== "new" && cid !== conversationId)
|
|
169
|
+
return;
|
|
170
|
+
const incoming = data === null || data === void 0 ? void 0 : data.message;
|
|
171
|
+
if (!incoming)
|
|
172
|
+
return;
|
|
173
|
+
setMessages((prev) => {
|
|
174
|
+
if (incoming._id && prev.some((m) => (m === null || m === void 0 ? void 0 : m._id) === incoming._id))
|
|
175
|
+
return prev;
|
|
176
|
+
return [...prev, incoming];
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
const u1 = wsClient.subscribe("new_livechat_message", handleNewMessage);
|
|
180
|
+
const u2 = wsClient.subscribe("new_log_message", handleNewLogMessage);
|
|
181
|
+
return () => { u1(); u2(); };
|
|
182
|
+
}, [wsClient, conversationId]);
|
|
183
|
+
return { messages, loading, loadingOlder, hasOlder, error, loadOlder, markAsRead };
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=use-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-messages.js","sourceRoot":"","sources":["../../src/hooks/use-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type AttachmentMeta = {
|
|
2
|
+
fileId?: string;
|
|
3
|
+
fileUrl: string;
|
|
4
|
+
fileName: string;
|
|
5
|
+
fileExtension?: string;
|
|
6
|
+
type: "image" | "video" | "document" | "audio";
|
|
7
|
+
caption?: string;
|
|
8
|
+
};
|
|
9
|
+
export type InteractiveReplyMeta = {
|
|
10
|
+
type: "button_reply" | "list_reply";
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
};
|
|
14
|
+
export type UseSendMessageResult = {
|
|
15
|
+
sending: boolean;
|
|
16
|
+
error: string | null;
|
|
17
|
+
sendText: (text: string, conversationId?: string | null) => Promise<string | null>;
|
|
18
|
+
sendAttachment: (attachment: AttachmentMeta, conversationId?: string | null) => Promise<string | null>;
|
|
19
|
+
sendInteractive: (reply: InteractiveReplyMeta, conversationId?: string | null) => Promise<string | null>;
|
|
20
|
+
};
|
|
21
|
+
export declare function useSendMessage(): UseSendMessageResult;
|
|
22
|
+
//# sourceMappingURL=use-send-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-send-message.d.ts","sourceRoot":"","sources":["../../src/hooks/use-send-message.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5B,cAAc,EAAE,CACd,UAAU,EAAE,cAAc,EAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5B,eAAe,EAAE,CACf,KAAK,EAAE,oBAAoB,EAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEF,wBAAgB,cAAc,IAAI,oBAAoB,CAkHrD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSendMessage = useSendMessage;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const conversation_api_1 = require("../api/conversation-api");
|
|
6
|
+
const LiveChatContext_1 = require("../provider/LiveChatContext");
|
|
7
|
+
function pickConversationId(raw) {
|
|
8
|
+
var _a;
|
|
9
|
+
if (!raw)
|
|
10
|
+
return null;
|
|
11
|
+
const a = (raw === null || raw === void 0 ? void 0 : raw.data) !== undefined ? raw.data : raw;
|
|
12
|
+
const b = (a === null || a === void 0 ? void 0 : a.data) !== undefined ? a.data : a;
|
|
13
|
+
const id = (_a = b === null || b === void 0 ? void 0 : b.conversationId) !== null && _a !== void 0 ? _a : a === null || a === void 0 ? void 0 : a.conversationId;
|
|
14
|
+
return id != null && id !== "" ? String(id) : null;
|
|
15
|
+
}
|
|
16
|
+
function useSendMessage() {
|
|
17
|
+
const { visitorQueryParams } = (0, LiveChatContext_1.useLiveChatContext)();
|
|
18
|
+
const [sending, setSending] = (0, react_1.useState)(false);
|
|
19
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
20
|
+
const sendText = (0, react_1.useCallback)(async (text, conversationId) => {
|
|
21
|
+
var _a;
|
|
22
|
+
const trimmed = text.trim();
|
|
23
|
+
if (!trimmed || !visitorQueryParams)
|
|
24
|
+
return null;
|
|
25
|
+
const localMessageId = typeof crypto !== "undefined" && crypto.randomUUID
|
|
26
|
+
? crypto.randomUUID()
|
|
27
|
+
: "lc-" + Date.now();
|
|
28
|
+
const body = {
|
|
29
|
+
localMessageId,
|
|
30
|
+
message: { type: "text", text: { body: trimmed } },
|
|
31
|
+
};
|
|
32
|
+
if (conversationId)
|
|
33
|
+
body.conversationId = conversationId;
|
|
34
|
+
setSending(true);
|
|
35
|
+
setError(null);
|
|
36
|
+
try {
|
|
37
|
+
const raw = await conversation_api_1.conversationApi.sendVisitorMessage(body, {
|
|
38
|
+
params: visitorQueryParams,
|
|
39
|
+
});
|
|
40
|
+
return pickConversationId(raw);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
setError((_a = e === null || e === void 0 ? void 0 : e.message) !== null && _a !== void 0 ? _a : "Failed to send message");
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
setSending(false);
|
|
48
|
+
}
|
|
49
|
+
}, [visitorQueryParams]);
|
|
50
|
+
const sendAttachment = (0, react_1.useCallback)(async (attachment, conversationId) => {
|
|
51
|
+
var _a;
|
|
52
|
+
if (!visitorQueryParams)
|
|
53
|
+
return null;
|
|
54
|
+
const localMessageId = typeof crypto !== "undefined" && crypto.randomUUID
|
|
55
|
+
? crypto.randomUUID()
|
|
56
|
+
: "lc-" + Date.now();
|
|
57
|
+
const typeObj = { link: attachment.fileUrl };
|
|
58
|
+
if (attachment.caption)
|
|
59
|
+
typeObj.caption = attachment.caption;
|
|
60
|
+
if (attachment.type === "document")
|
|
61
|
+
typeObj.filename = attachment.fileName;
|
|
62
|
+
const body = {
|
|
63
|
+
localMessageId,
|
|
64
|
+
fileId: attachment.fileId,
|
|
65
|
+
fileUrl: attachment.fileUrl,
|
|
66
|
+
fileName: attachment.fileName,
|
|
67
|
+
fileExtension: attachment.fileExtension,
|
|
68
|
+
message: { type: attachment.type, [attachment.type]: typeObj },
|
|
69
|
+
};
|
|
70
|
+
if (conversationId)
|
|
71
|
+
body.conversationId = conversationId;
|
|
72
|
+
setSending(true);
|
|
73
|
+
setError(null);
|
|
74
|
+
try {
|
|
75
|
+
const raw = await conversation_api_1.conversationApi.sendVisitorMessage(body, {
|
|
76
|
+
params: visitorQueryParams,
|
|
77
|
+
});
|
|
78
|
+
return pickConversationId(raw);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
setError((_a = e === null || e === void 0 ? void 0 : e.message) !== null && _a !== void 0 ? _a : "Failed to send attachment");
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
setSending(false);
|
|
86
|
+
}
|
|
87
|
+
}, [visitorQueryParams]);
|
|
88
|
+
const sendInteractive = (0, react_1.useCallback)(async (reply, conversationId) => {
|
|
89
|
+
var _a;
|
|
90
|
+
if (!visitorQueryParams)
|
|
91
|
+
return null;
|
|
92
|
+
const localMessageId = typeof crypto !== "undefined" && crypto.randomUUID
|
|
93
|
+
? crypto.randomUUID()
|
|
94
|
+
: "lc-" + Date.now();
|
|
95
|
+
const body = {
|
|
96
|
+
localMessageId,
|
|
97
|
+
message: {
|
|
98
|
+
type: "interactive",
|
|
99
|
+
interactive: {
|
|
100
|
+
type: reply.type,
|
|
101
|
+
[reply.type]: { id: reply.id, title: reply.title },
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
if (conversationId)
|
|
106
|
+
body.conversationId = conversationId;
|
|
107
|
+
setSending(true);
|
|
108
|
+
setError(null);
|
|
109
|
+
try {
|
|
110
|
+
const raw = await conversation_api_1.conversationApi.sendVisitorMessage(body, {
|
|
111
|
+
params: visitorQueryParams,
|
|
112
|
+
});
|
|
113
|
+
return pickConversationId(raw);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
setError((_a = e === null || e === void 0 ? void 0 : e.message) !== null && _a !== void 0 ? _a : "Failed to send reply");
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
setSending(false);
|
|
121
|
+
}
|
|
122
|
+
}, [visitorQueryParams]);
|
|
123
|
+
return { sending, error, sendText, sendAttachment, sendInteractive };
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=use-send-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-send-message.js","sourceRoot":"","sources":["../../src/hooks/use-send-message.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export { LiveChatProvider } from "./provider/LiveChatProvider";
|
|
2
|
+
export { LiveChatContext, useLiveChatContext } from "./provider/LiveChatContext";
|
|
3
|
+
export type { LiveChatProviderProps, LiveChatContextValue, EmbedConfigLoadState } from "./provider/types";
|
|
4
|
+
export { useLiveChat } from "./hooks/use-live-chat";
|
|
5
|
+
export type { LiveChatState, LiveChatActions, UseLiveChatResult } from "./hooks/use-live-chat";
|
|
6
|
+
export { useConversations } from "./hooks/use-conversations";
|
|
7
|
+
export type { UseConversationsResult } from "./hooks/use-conversations";
|
|
8
|
+
export { useMessages } from "./hooks/use-messages";
|
|
9
|
+
export type { UseMessagesResult } from "./hooks/use-messages";
|
|
10
|
+
export { useSendMessage } from "./hooks/use-send-message";
|
|
11
|
+
export type { UseSendMessageResult, AttachmentMeta } from "./hooks/use-send-message";
|
|
12
|
+
export { ConversationListScreen, formatListMessageDate } from "./ui/components/ConversationListScreen";
|
|
13
|
+
export type { ConversationListScreenProps } from "./ui/components/ConversationListScreen";
|
|
14
|
+
export { ConversationScreen } from "./ui/components/ConversationScreen";
|
|
15
|
+
export type { ConversationScreenProps } from "./ui/components/ConversationScreen";
|
|
16
|
+
export { ConversationHeader } from "./ui/components/ConversationHeader";
|
|
17
|
+
export type { ConversationHeaderProps } from "./ui/components/ConversationHeader";
|
|
18
|
+
export { MessageBubble } from "./ui/components/MessageBubble";
|
|
19
|
+
export type { MessageBubbleProps, BubblePosition } from "./ui/components/MessageBubble";
|
|
20
|
+
export { LivechatMessageRenderer } from "./ui/components/LivechatMessageRenderer";
|
|
21
|
+
export type { LivechatMessageRendererProps, InteractiveReplyPayload, ShowListPickerFn } from "./ui/components/LivechatMessageRenderer";
|
|
22
|
+
export { LogMessage } from "./ui/components/LogMessage";
|
|
23
|
+
export type { LogMessageProps } from "./ui/components/LogMessage";
|
|
24
|
+
export { MessageComposer } from "./ui/components/MessageComposer";
|
|
25
|
+
export type { MessageComposerProps, PickedAttachment, PickedAttachmentKind, UploadedAttachment, PendingAttachment } from "./ui/components/MessageComposer";
|
|
26
|
+
export { Avatar } from "./ui/components/Avatar";
|
|
27
|
+
export type { AvatarProps } from "./ui/components/Avatar";
|
|
28
|
+
export { ArrowRightIcon, ArrowRightCircleIcon, ArrowLeftIcon, ChevronDownIcon, ChevronLeftIcon, CloseIcon, ChatBubbleIcon, MinimizeIcon, DotsIcon, HistoryChatsIcon, SendPlaneIcon, PaperclipIcon, DownloadIcon, PlayIcon, FileIcon, TurbodeskLogoIcon, } from "./ui/icons";
|
|
29
|
+
export type { IconProps } from "./ui/icons";
|
|
30
|
+
export { AssigneeAvatar } from "./ui/components/AssigneeAvatar";
|
|
31
|
+
export type { AssigneeAvatarProps, AssigneeType } from "./ui/components/AssigneeAvatar";
|
|
32
|
+
export { HomeScreen } from "./ui/components/HomeScreen";
|
|
33
|
+
export type { HomeScreenProps } from "./ui/components/HomeScreen";
|
|
34
|
+
export { LiveChatPanel } from "./navigation/LiveChatPanel";
|
|
35
|
+
export type { LiveChatPanelProps } from "./navigation/LiveChatPanel";
|
|
36
|
+
export { PanelRouterProvider, usePanelRouter } from "./navigation/panel-router-context";
|
|
37
|
+
export type { PanelRouterContextValue, WidgetPanelView } from "./navigation/panel-router-context";
|
|
38
|
+
export { defaultTheme, mergeTheme, buildThemeFromBrand, contrastingTextOnBrand, getBrandColor, getNotificationIconColor, getWidgetName, getWidgetGreeting, getWidgetTitle, getWidgetDescription, getBrandLogoUrl, useEffectiveAppearance, POWERED_BY_TEXT, } from "./ui/theme";
|
|
39
|
+
export type { ThemeConfig, ThemeColors, ThemeFontSizes, ThemeSpacing, ThemeBorderRadius, AppearanceMode, } from "./ui/theme";
|
|
40
|
+
export { WsClient } from "./realtime/ws-client";
|
|
41
|
+
export type { WsConnectionState } from "./realtime/ws-client";
|
|
42
|
+
export { default as getApiClient } from "./axios/axios";
|
|
43
|
+
export type { RequestOptions, ApiClient } from "./axios/axios";
|
|
44
|
+
export { widgetApi } from "./api/widget-api";
|
|
45
|
+
export { conversationApi } from "./api/conversation-api";
|
|
46
|
+
export { fileApi } from "./api/file-api";
|
|
47
|
+
export { buildVisitorQueryParams, getUserPresenceStatus } from "./core/visitor-params";
|
|
48
|
+
export type { VisitorQueryParams, VisitorProfile } from "./core/visitor-params";
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.POWERED_BY_TEXT = exports.useEffectiveAppearance = exports.getBrandLogoUrl = exports.getWidgetDescription = exports.getWidgetTitle = exports.getWidgetGreeting = exports.getWidgetName = exports.getNotificationIconColor = exports.getBrandColor = exports.contrastingTextOnBrand = exports.buildThemeFromBrand = exports.mergeTheme = exports.defaultTheme = exports.usePanelRouter = exports.PanelRouterProvider = exports.LiveChatPanel = exports.HomeScreen = exports.AssigneeAvatar = exports.TurbodeskLogoIcon = exports.FileIcon = exports.PlayIcon = exports.DownloadIcon = exports.PaperclipIcon = exports.SendPlaneIcon = exports.HistoryChatsIcon = exports.DotsIcon = exports.MinimizeIcon = exports.ChatBubbleIcon = exports.CloseIcon = exports.ChevronLeftIcon = exports.ChevronDownIcon = exports.ArrowLeftIcon = exports.ArrowRightCircleIcon = exports.ArrowRightIcon = exports.Avatar = exports.MessageComposer = exports.LogMessage = exports.LivechatMessageRenderer = exports.MessageBubble = exports.ConversationHeader = exports.ConversationScreen = exports.formatListMessageDate = exports.ConversationListScreen = exports.useSendMessage = exports.useMessages = exports.useConversations = exports.useLiveChat = exports.useLiveChatContext = exports.LiveChatContext = exports.LiveChatProvider = void 0;
|
|
7
|
+
exports.getUserPresenceStatus = exports.buildVisitorQueryParams = exports.fileApi = exports.conversationApi = exports.widgetApi = exports.getApiClient = exports.WsClient = void 0;
|
|
8
|
+
// ─── Provider ─────────────────────────────────────────────────────────────────
|
|
9
|
+
var LiveChatProvider_1 = require("./provider/LiveChatProvider");
|
|
10
|
+
Object.defineProperty(exports, "LiveChatProvider", { enumerable: true, get: function () { return LiveChatProvider_1.LiveChatProvider; } });
|
|
11
|
+
var LiveChatContext_1 = require("./provider/LiveChatContext");
|
|
12
|
+
Object.defineProperty(exports, "LiveChatContext", { enumerable: true, get: function () { return LiveChatContext_1.LiveChatContext; } });
|
|
13
|
+
Object.defineProperty(exports, "useLiveChatContext", { enumerable: true, get: function () { return LiveChatContext_1.useLiveChatContext; } });
|
|
14
|
+
// ─── Hooks ─────────────────────────────────────────────────────────────────────
|
|
15
|
+
var use_live_chat_1 = require("./hooks/use-live-chat");
|
|
16
|
+
Object.defineProperty(exports, "useLiveChat", { enumerable: true, get: function () { return use_live_chat_1.useLiveChat; } });
|
|
17
|
+
var use_conversations_1 = require("./hooks/use-conversations");
|
|
18
|
+
Object.defineProperty(exports, "useConversations", { enumerable: true, get: function () { return use_conversations_1.useConversations; } });
|
|
19
|
+
var use_messages_1 = require("./hooks/use-messages");
|
|
20
|
+
Object.defineProperty(exports, "useMessages", { enumerable: true, get: function () { return use_messages_1.useMessages; } });
|
|
21
|
+
var use_send_message_1 = require("./hooks/use-send-message");
|
|
22
|
+
Object.defineProperty(exports, "useSendMessage", { enumerable: true, get: function () { return use_send_message_1.useSendMessage; } });
|
|
23
|
+
// ─── UI Components ─────────────────────────────────────────────────────────────
|
|
24
|
+
var ConversationListScreen_1 = require("./ui/components/ConversationListScreen");
|
|
25
|
+
Object.defineProperty(exports, "ConversationListScreen", { enumerable: true, get: function () { return ConversationListScreen_1.ConversationListScreen; } });
|
|
26
|
+
Object.defineProperty(exports, "formatListMessageDate", { enumerable: true, get: function () { return ConversationListScreen_1.formatListMessageDate; } });
|
|
27
|
+
var ConversationScreen_1 = require("./ui/components/ConversationScreen");
|
|
28
|
+
Object.defineProperty(exports, "ConversationScreen", { enumerable: true, get: function () { return ConversationScreen_1.ConversationScreen; } });
|
|
29
|
+
var ConversationHeader_1 = require("./ui/components/ConversationHeader");
|
|
30
|
+
Object.defineProperty(exports, "ConversationHeader", { enumerable: true, get: function () { return ConversationHeader_1.ConversationHeader; } });
|
|
31
|
+
var MessageBubble_1 = require("./ui/components/MessageBubble");
|
|
32
|
+
Object.defineProperty(exports, "MessageBubble", { enumerable: true, get: function () { return MessageBubble_1.MessageBubble; } });
|
|
33
|
+
var LivechatMessageRenderer_1 = require("./ui/components/LivechatMessageRenderer");
|
|
34
|
+
Object.defineProperty(exports, "LivechatMessageRenderer", { enumerable: true, get: function () { return LivechatMessageRenderer_1.LivechatMessageRenderer; } });
|
|
35
|
+
var LogMessage_1 = require("./ui/components/LogMessage");
|
|
36
|
+
Object.defineProperty(exports, "LogMessage", { enumerable: true, get: function () { return LogMessage_1.LogMessage; } });
|
|
37
|
+
var MessageComposer_1 = require("./ui/components/MessageComposer");
|
|
38
|
+
Object.defineProperty(exports, "MessageComposer", { enumerable: true, get: function () { return MessageComposer_1.MessageComposer; } });
|
|
39
|
+
var Avatar_1 = require("./ui/components/Avatar");
|
|
40
|
+
Object.defineProperty(exports, "Avatar", { enumerable: true, get: function () { return Avatar_1.Avatar; } });
|
|
41
|
+
var icons_1 = require("./ui/icons");
|
|
42
|
+
Object.defineProperty(exports, "ArrowRightIcon", { enumerable: true, get: function () { return icons_1.ArrowRightIcon; } });
|
|
43
|
+
Object.defineProperty(exports, "ArrowRightCircleIcon", { enumerable: true, get: function () { return icons_1.ArrowRightCircleIcon; } });
|
|
44
|
+
Object.defineProperty(exports, "ArrowLeftIcon", { enumerable: true, get: function () { return icons_1.ArrowLeftIcon; } });
|
|
45
|
+
Object.defineProperty(exports, "ChevronDownIcon", { enumerable: true, get: function () { return icons_1.ChevronDownIcon; } });
|
|
46
|
+
Object.defineProperty(exports, "ChevronLeftIcon", { enumerable: true, get: function () { return icons_1.ChevronLeftIcon; } });
|
|
47
|
+
Object.defineProperty(exports, "CloseIcon", { enumerable: true, get: function () { return icons_1.CloseIcon; } });
|
|
48
|
+
Object.defineProperty(exports, "ChatBubbleIcon", { enumerable: true, get: function () { return icons_1.ChatBubbleIcon; } });
|
|
49
|
+
Object.defineProperty(exports, "MinimizeIcon", { enumerable: true, get: function () { return icons_1.MinimizeIcon; } });
|
|
50
|
+
Object.defineProperty(exports, "DotsIcon", { enumerable: true, get: function () { return icons_1.DotsIcon; } });
|
|
51
|
+
Object.defineProperty(exports, "HistoryChatsIcon", { enumerable: true, get: function () { return icons_1.HistoryChatsIcon; } });
|
|
52
|
+
Object.defineProperty(exports, "SendPlaneIcon", { enumerable: true, get: function () { return icons_1.SendPlaneIcon; } });
|
|
53
|
+
Object.defineProperty(exports, "PaperclipIcon", { enumerable: true, get: function () { return icons_1.PaperclipIcon; } });
|
|
54
|
+
Object.defineProperty(exports, "DownloadIcon", { enumerable: true, get: function () { return icons_1.DownloadIcon; } });
|
|
55
|
+
Object.defineProperty(exports, "PlayIcon", { enumerable: true, get: function () { return icons_1.PlayIcon; } });
|
|
56
|
+
Object.defineProperty(exports, "FileIcon", { enumerable: true, get: function () { return icons_1.FileIcon; } });
|
|
57
|
+
Object.defineProperty(exports, "TurbodeskLogoIcon", { enumerable: true, get: function () { return icons_1.TurbodeskLogoIcon; } });
|
|
58
|
+
var AssigneeAvatar_1 = require("./ui/components/AssigneeAvatar");
|
|
59
|
+
Object.defineProperty(exports, "AssigneeAvatar", { enumerable: true, get: function () { return AssigneeAvatar_1.AssigneeAvatar; } });
|
|
60
|
+
var HomeScreen_1 = require("./ui/components/HomeScreen");
|
|
61
|
+
Object.defineProperty(exports, "HomeScreen", { enumerable: true, get: function () { return HomeScreen_1.HomeScreen; } });
|
|
62
|
+
// ─── Navigation ──────────────────────────────────────────────────────────────
|
|
63
|
+
var LiveChatPanel_1 = require("./navigation/LiveChatPanel");
|
|
64
|
+
Object.defineProperty(exports, "LiveChatPanel", { enumerable: true, get: function () { return LiveChatPanel_1.LiveChatPanel; } });
|
|
65
|
+
var panel_router_context_1 = require("./navigation/panel-router-context");
|
|
66
|
+
Object.defineProperty(exports, "PanelRouterProvider", { enumerable: true, get: function () { return panel_router_context_1.PanelRouterProvider; } });
|
|
67
|
+
Object.defineProperty(exports, "usePanelRouter", { enumerable: true, get: function () { return panel_router_context_1.usePanelRouter; } });
|
|
68
|
+
// ─── Theme ─────────────────────────────────────────────────────────────────────
|
|
69
|
+
var theme_1 = require("./ui/theme");
|
|
70
|
+
Object.defineProperty(exports, "defaultTheme", { enumerable: true, get: function () { return theme_1.defaultTheme; } });
|
|
71
|
+
Object.defineProperty(exports, "mergeTheme", { enumerable: true, get: function () { return theme_1.mergeTheme; } });
|
|
72
|
+
Object.defineProperty(exports, "buildThemeFromBrand", { enumerable: true, get: function () { return theme_1.buildThemeFromBrand; } });
|
|
73
|
+
Object.defineProperty(exports, "contrastingTextOnBrand", { enumerable: true, get: function () { return theme_1.contrastingTextOnBrand; } });
|
|
74
|
+
Object.defineProperty(exports, "getBrandColor", { enumerable: true, get: function () { return theme_1.getBrandColor; } });
|
|
75
|
+
Object.defineProperty(exports, "getNotificationIconColor", { enumerable: true, get: function () { return theme_1.getNotificationIconColor; } });
|
|
76
|
+
Object.defineProperty(exports, "getWidgetName", { enumerable: true, get: function () { return theme_1.getWidgetName; } });
|
|
77
|
+
Object.defineProperty(exports, "getWidgetGreeting", { enumerable: true, get: function () { return theme_1.getWidgetGreeting; } });
|
|
78
|
+
Object.defineProperty(exports, "getWidgetTitle", { enumerable: true, get: function () { return theme_1.getWidgetTitle; } });
|
|
79
|
+
Object.defineProperty(exports, "getWidgetDescription", { enumerable: true, get: function () { return theme_1.getWidgetDescription; } });
|
|
80
|
+
Object.defineProperty(exports, "getBrandLogoUrl", { enumerable: true, get: function () { return theme_1.getBrandLogoUrl; } });
|
|
81
|
+
Object.defineProperty(exports, "useEffectiveAppearance", { enumerable: true, get: function () { return theme_1.useEffectiveAppearance; } });
|
|
82
|
+
Object.defineProperty(exports, "POWERED_BY_TEXT", { enumerable: true, get: function () { return theme_1.POWERED_BY_TEXT; } });
|
|
83
|
+
// ─── Low-level (advanced usage) ────────────────────────────────────────────────
|
|
84
|
+
var ws_client_1 = require("./realtime/ws-client");
|
|
85
|
+
Object.defineProperty(exports, "WsClient", { enumerable: true, get: function () { return ws_client_1.WsClient; } });
|
|
86
|
+
var axios_1 = require("./axios/axios");
|
|
87
|
+
Object.defineProperty(exports, "getApiClient", { enumerable: true, get: function () { return __importDefault(axios_1).default; } });
|
|
88
|
+
var widget_api_1 = require("./api/widget-api");
|
|
89
|
+
Object.defineProperty(exports, "widgetApi", { enumerable: true, get: function () { return widget_api_1.widgetApi; } });
|
|
90
|
+
var conversation_api_1 = require("./api/conversation-api");
|
|
91
|
+
Object.defineProperty(exports, "conversationApi", { enumerable: true, get: function () { return conversation_api_1.conversationApi; } });
|
|
92
|
+
var file_api_1 = require("./api/file-api");
|
|
93
|
+
Object.defineProperty(exports, "fileApi", { enumerable: true, get: function () { return file_api_1.fileApi; } });
|
|
94
|
+
var visitor_params_1 = require("./core/visitor-params");
|
|
95
|
+
Object.defineProperty(exports, "buildVisitorQueryParams", { enumerable: true, get: function () { return visitor_params_1.buildVisitorQueryParams; } });
|
|
96
|
+
Object.defineProperty(exports, "getUserPresenceStatus", { enumerable: true, get: function () { return visitor_params_1.getUserPresenceStatus; } });
|
|
97
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;AAAA,yNAAyN;AACzN,gEAA+D;AAAtD,oHAAA,gBAAgB,OAAA;AACzB,8DAAiF;AAAxE,kHAAA,eAAe,OAAA;AAAE,qHAAA,kBAAkB,OAAA;AAG5C,kOAAkO;AAClO,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AAGpB,+DAA6D;AAApD,qHAAA,gBAAgB,OAAA;AAGzB,qDAAmD;AAA1C,2GAAA,WAAW,OAAA;AAGpB,6DAA0D;AAAjD,kHAAA,cAAc,OAAA;AAGvB,kNAAkN;AAClN,iFAAuG;AAA9F,gIAAA,sBAAsB,OAAA;AAAE,+HAAA,qBAAqB,OAAA;AAGtD,yEAAwE;AAA/D,wHAAA,kBAAkB,OAAA;AAG3B,yEAAwE;AAA/D,wHAAA,kBAAkB,OAAA;AAG3B,+DAA8D;AAArD,8GAAA,aAAa,OAAA;AAGtB,mFAAkF;AAAzE,kIAAA,uBAAuB,OAAA;AAGhC,yDAAwD;AAA/C,wGAAA,UAAU,OAAA;AAGnB,mEAAkE;AAAzD,kHAAA,eAAe,OAAA;AAGxB,iDAAgD;AAAvC,gGAAA,MAAM,OAAA;AAGf,oCAiBoB;AAhBlB,uGAAA,cAAc,OAAA;AACd,6GAAA,oBAAoB,OAAA;AACpB,sGAAA,aAAa,OAAA;AACb,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,kGAAA,SAAS,OAAA;AACT,uGAAA,cAAc,OAAA;AACd,qGAAA,YAAY,OAAA;AACZ,iGAAA,QAAQ,OAAA;AACR,yGAAA,gBAAgB,OAAA;AAChB,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,0GAAA,iBAAiB,OAAA;AAInB,iEAAgE;AAAvD,gHAAA,cAAc,OAAA;AAGvB,yDAAwD;AAA/C,wGAAA,UAAU,OAAA;AAGnB,gFAAgF;AAChF,4DAA2D;AAAlD,8GAAA,aAAa,OAAA;AAGtB,0EAAwF;AAA/E,2HAAA,mBAAmB,OAAA;AAAE,sHAAA,cAAc,OAAA;AAG5C,kOAAkO;AAClO,oCAcoB;AAblB,qGAAA,YAAY,OAAA;AACZ,mGAAA,UAAU,OAAA;AACV,4GAAA,mBAAmB,OAAA;AACnB,+GAAA,sBAAsB,OAAA;AACtB,sGAAA,aAAa,OAAA;AACb,iHAAA,wBAAwB,OAAA;AACxB,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AACd,6GAAA,oBAAoB,OAAA;AACpB,wGAAA,eAAe,OAAA;AACf,+GAAA,sBAAsB,OAAA;AACtB,wGAAA,eAAe,OAAA;AAWjB,wLAAwL;AACxL,kDAAgD;AAAvC,qGAAA,QAAQ,OAAA;AAGjB,uCAAwD;AAA/C,sHAAA,OAAO,OAAgB;AAGhC,+CAA6C;AAApC,uGAAA,SAAS,OAAA;AAClB,2DAAyD;AAAhD,mHAAA,eAAe,OAAA;AACxB,2CAAyC;AAAhC,mGAAA,OAAO,OAAA;AAEhB,wDAAuF;AAA9E,yHAAA,uBAAuB,OAAA;AAAE,uHAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveChatPanel.d.ts","sourceRoot":"","sources":["../../src/navigation/LiveChatPanel.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AA6FF,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,2CAQ5D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LiveChatPanel = LiveChatPanel;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_native_1 = require("react-native");
|
|
7
|
+
const panel_router_context_1 = require("./panel-router-context");
|
|
8
|
+
const HomeScreen_1 = require("../ui/components/HomeScreen");
|
|
9
|
+
const ConversationListScreen_1 = require("../ui/components/ConversationListScreen");
|
|
10
|
+
const ConversationScreen_1 = require("../ui/components/ConversationScreen");
|
|
11
|
+
const LiveChatContext_1 = require("../provider/LiveChatContext");
|
|
12
|
+
const theme_1 = require("../ui/theme");
|
|
13
|
+
const WsStatusStrip_1 = require("../ui/components/WsStatusStrip");
|
|
14
|
+
// Mirrors web PanelShell — neutral chrome for chat screens, brand bg for home
|
|
15
|
+
function usePanelBackground(view) {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const { widgetConfig } = (0, LiveChatContext_1.useLiveChatContext)();
|
|
18
|
+
const settings = (_a = widgetConfig === null || widgetConfig === void 0 ? void 0 : widgetConfig.widgetSettings) !== null && _a !== void 0 ? _a : {};
|
|
19
|
+
const appearance = (0, theme_1.useEffectiveAppearance)(settings);
|
|
20
|
+
const customBg = (_b = settings === null || settings === void 0 ? void 0 : settings.backgroundColor) === null || _b === void 0 ? void 0 : _b.trim();
|
|
21
|
+
if (customBg)
|
|
22
|
+
return customBg;
|
|
23
|
+
const useNeutralChrome = view === "conversation" || view === "previousChats";
|
|
24
|
+
if (useNeutralChrome)
|
|
25
|
+
return appearance === "dark" ? "#111113" : "#f9fafb";
|
|
26
|
+
return (0, theme_1.getBrandColor)(settings);
|
|
27
|
+
}
|
|
28
|
+
const SWIPE_THRESHOLD = 80; // px — minimum horizontal swipe to trigger back
|
|
29
|
+
const SWIPE_VELOCITY = 0.3; // minimum velocity
|
|
30
|
+
function PanelContent({ onClose }) {
|
|
31
|
+
const { view, conversationId, goConversation, goPreviousChats, goBack } = (0, panel_router_context_1.usePanelRouter)();
|
|
32
|
+
const bg = usePanelBackground(view);
|
|
33
|
+
const canGoBack = view === "conversation" || view === "previousChats";
|
|
34
|
+
// Android hardware back button
|
|
35
|
+
(0, react_1.useEffect)(() => {
|
|
36
|
+
const handler = react_native_1.BackHandler.addEventListener("hardwareBackPress", () => {
|
|
37
|
+
if (canGoBack) {
|
|
38
|
+
goBack();
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
});
|
|
43
|
+
return () => handler.remove();
|
|
44
|
+
}, [canGoBack, goBack]);
|
|
45
|
+
// Swipe-back gesture (right swipe from left edge only)
|
|
46
|
+
const panResponder = (0, react_1.useRef)(react_native_1.PanResponder.create({
|
|
47
|
+
onMoveShouldSetPanResponder: (evt, gs) => {
|
|
48
|
+
const x = evt.nativeEvent.pageX;
|
|
49
|
+
return x < 40 && gs.dx > 10 && Math.abs(gs.dy) < Math.abs(gs.dx);
|
|
50
|
+
},
|
|
51
|
+
onPanResponderRelease: (_, gs) => {
|
|
52
|
+
var _a;
|
|
53
|
+
if (gs.dx > SWIPE_THRESHOLD && gs.vx > SWIPE_VELOCITY) {
|
|
54
|
+
(_a = goBackRef.current) === null || _a === void 0 ? void 0 : _a.call(goBackRef);
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
})).current;
|
|
58
|
+
// ref so panResponder closure always has latest goBack + canGoBack
|
|
59
|
+
const goBackRef = (0, react_1.useRef)(null);
|
|
60
|
+
goBackRef.current = canGoBack ? goBack : null;
|
|
61
|
+
const screenContent = (() => {
|
|
62
|
+
if (view === "home") {
|
|
63
|
+
return ((0, jsx_runtime_1.jsx)(HomeScreen_1.HomeScreen, { onStartConversation: () => goConversation(), onOpenPreviousChats: () => goPreviousChats() }));
|
|
64
|
+
}
|
|
65
|
+
if (view === "previousChats") {
|
|
66
|
+
return ((0, jsx_runtime_1.jsx)(ConversationListScreen_1.ConversationListScreen, { onSelectConversation: (id) => goConversation(id), onNewConversation: () => goConversation(), onBack: goBack, onClose: onClose }));
|
|
67
|
+
}
|
|
68
|
+
if (view === "conversation") {
|
|
69
|
+
return ((0, jsx_runtime_1.jsx)(ConversationScreen_1.ConversationScreen, { conversationId: conversationId, onBack: goBack, onClose: onClose, onConversationCreated: (id) => goConversation(id, { replace: true }) }));
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
})();
|
|
73
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: [styles.flex, { backgroundColor: bg }], ...(canGoBack ? panResponder.panHandlers : {}), children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.flex, children: screenContent }), (0, jsx_runtime_1.jsx)(WsStatusStrip_1.WsStatusStrip, {})] }));
|
|
74
|
+
}
|
|
75
|
+
function LiveChatPanel({ onClose }) {
|
|
76
|
+
return ((0, jsx_runtime_1.jsx)(panel_router_context_1.PanelRouterProvider, { children: (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.flex, children: (0, jsx_runtime_1.jsx)(PanelContent, { onClose: onClose }) }) }));
|
|
77
|
+
}
|
|
78
|
+
const styles = react_native_1.StyleSheet.create({
|
|
79
|
+
flex: { flex: 1 },
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=LiveChatPanel.js.map
|