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.
Files changed (171) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +91 -0
  3. package/dist/api/conversation-api.d.ts +16 -0
  4. package/dist/api/conversation-api.d.ts.map +1 -0
  5. package/dist/api/conversation-api.js +44 -0
  6. package/dist/api/conversation-api.js.map +1 -0
  7. package/dist/api/file-api.d.ts +5 -0
  8. package/dist/api/file-api.d.ts.map +1 -0
  9. package/dist/api/file-api.js +15 -0
  10. package/dist/api/file-api.js.map +1 -0
  11. package/dist/api/widget-api.d.ts +4 -0
  12. package/dist/api/widget-api.d.ts.map +1 -0
  13. package/dist/api/widget-api.js +15 -0
  14. package/dist/api/widget-api.js.map +1 -0
  15. package/dist/axios/axios.d.ts +32 -0
  16. package/dist/axios/axios.d.ts.map +1 -0
  17. package/dist/axios/axios.js +120 -0
  18. package/dist/axios/axios.js.map +1 -0
  19. package/dist/core/config.d.ts +17 -0
  20. package/dist/core/config.d.ts.map +1 -0
  21. package/dist/core/config.js +42 -0
  22. package/dist/core/config.js.map +1 -0
  23. package/dist/core/http-client.d.ts +33 -0
  24. package/dist/core/http-client.d.ts.map +1 -0
  25. package/dist/core/http-client.js +104 -0
  26. package/dist/core/http-client.js.map +1 -0
  27. package/dist/core/identity.d.ts +7 -0
  28. package/dist/core/identity.d.ts.map +1 -0
  29. package/dist/core/identity.js +62 -0
  30. package/dist/core/identity.js.map +1 -0
  31. package/dist/core/visitor-params.d.ts +15 -0
  32. package/dist/core/visitor-params.d.ts.map +1 -0
  33. package/dist/core/visitor-params.js +45 -0
  34. package/dist/core/visitor-params.js.map +1 -0
  35. package/dist/hooks/use-conversations.d.ts +12 -0
  36. package/dist/hooks/use-conversations.d.ts.map +1 -0
  37. package/dist/hooks/use-conversations.js +177 -0
  38. package/dist/hooks/use-conversations.js.map +1 -0
  39. package/dist/hooks/use-live-chat.d.ts +30 -0
  40. package/dist/hooks/use-live-chat.d.ts.map +1 -0
  41. package/dist/hooks/use-live-chat.js +52 -0
  42. package/dist/hooks/use-live-chat.js.map +1 -0
  43. package/dist/hooks/use-messages.d.ts +11 -0
  44. package/dist/hooks/use-messages.d.ts.map +1 -0
  45. package/dist/hooks/use-messages.js +185 -0
  46. package/dist/hooks/use-messages.js.map +1 -0
  47. package/dist/hooks/use-send-message.d.ts +22 -0
  48. package/dist/hooks/use-send-message.d.ts.map +1 -0
  49. package/dist/hooks/use-send-message.js +125 -0
  50. package/dist/hooks/use-send-message.js.map +1 -0
  51. package/dist/index.d.ts +49 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +97 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/navigation/LiveChatPanel.d.ts +5 -0
  56. package/dist/navigation/LiveChatPanel.d.ts.map +1 -0
  57. package/dist/navigation/LiveChatPanel.js +81 -0
  58. package/dist/navigation/LiveChatPanel.js.map +1 -0
  59. package/dist/navigation/panel-router-context.d.ts +22 -0
  60. package/dist/navigation/panel-router-context.d.ts.map +1 -0
  61. package/dist/navigation/panel-router-context.js +42 -0
  62. package/dist/navigation/panel-router-context.js.map +1 -0
  63. package/dist/navigation/router-types.d.ts +2 -0
  64. package/dist/navigation/router-types.d.ts.map +1 -0
  65. package/dist/navigation/router-types.js +3 -0
  66. package/dist/navigation/router-types.js.map +1 -0
  67. package/dist/provider/LiveChatContext.d.ts +4 -0
  68. package/dist/provider/LiveChatContext.d.ts.map +1 -0
  69. package/dist/provider/LiveChatContext.js +35 -0
  70. package/dist/provider/LiveChatContext.js.map +1 -0
  71. package/dist/provider/LiveChatProvider.d.ts +3 -0
  72. package/dist/provider/LiveChatProvider.d.ts.map +1 -0
  73. package/dist/provider/LiveChatProvider.js +308 -0
  74. package/dist/provider/LiveChatProvider.js.map +1 -0
  75. package/dist/provider/types.d.ts +42 -0
  76. package/dist/provider/types.d.ts.map +1 -0
  77. package/dist/provider/types.js +3 -0
  78. package/dist/provider/types.js.map +1 -0
  79. package/dist/realtime/ws-client.d.ts +51 -0
  80. package/dist/realtime/ws-client.d.ts.map +1 -0
  81. package/dist/realtime/ws-client.js +322 -0
  82. package/dist/realtime/ws-client.js.map +1 -0
  83. package/dist/ui/components/AssigneeAvatar.d.ts +12 -0
  84. package/dist/ui/components/AssigneeAvatar.d.ts.map +1 -0
  85. package/dist/ui/components/AssigneeAvatar.js +58 -0
  86. package/dist/ui/components/AssigneeAvatar.js.map +1 -0
  87. package/dist/ui/components/Avatar.d.ts +10 -0
  88. package/dist/ui/components/Avatar.d.ts.map +1 -0
  89. package/dist/ui/components/Avatar.js +76 -0
  90. package/dist/ui/components/Avatar.js.map +1 -0
  91. package/dist/ui/components/ConversationHeader.d.ts +10 -0
  92. package/dist/ui/components/ConversationHeader.d.ts.map +1 -0
  93. package/dist/ui/components/ConversationHeader.js +90 -0
  94. package/dist/ui/components/ConversationHeader.js.map +1 -0
  95. package/dist/ui/components/ConversationListScreen.d.ts +9 -0
  96. package/dist/ui/components/ConversationListScreen.d.ts.map +1 -0
  97. package/dist/ui/components/ConversationListScreen.js +350 -0
  98. package/dist/ui/components/ConversationListScreen.js.map +1 -0
  99. package/dist/ui/components/ConversationScreen.d.ts +8 -0
  100. package/dist/ui/components/ConversationScreen.d.ts.map +1 -0
  101. package/dist/ui/components/ConversationScreen.js +235 -0
  102. package/dist/ui/components/ConversationScreen.js.map +1 -0
  103. package/dist/ui/components/HomeScreen.d.ts +6 -0
  104. package/dist/ui/components/HomeScreen.d.ts.map +1 -0
  105. package/dist/ui/components/HomeScreen.js +133 -0
  106. package/dist/ui/components/HomeScreen.js.map +1 -0
  107. package/dist/ui/components/LivechatMessageRenderer.d.ts +17 -0
  108. package/dist/ui/components/LivechatMessageRenderer.d.ts.map +1 -0
  109. package/dist/ui/components/LivechatMessageRenderer.js +122 -0
  110. package/dist/ui/components/LivechatMessageRenderer.js.map +1 -0
  111. package/dist/ui/components/LogMessage.d.ts +5 -0
  112. package/dist/ui/components/LogMessage.d.ts.map +1 -0
  113. package/dist/ui/components/LogMessage.js +83 -0
  114. package/dist/ui/components/LogMessage.js.map +1 -0
  115. package/dist/ui/components/MessageBubble.d.ts +15 -0
  116. package/dist/ui/components/MessageBubble.d.ts.map +1 -0
  117. package/dist/ui/components/MessageBubble.js +84 -0
  118. package/dist/ui/components/MessageBubble.js.map +1 -0
  119. package/dist/ui/components/MessageComposer.d.ts +31 -0
  120. package/dist/ui/components/MessageComposer.d.ts.map +1 -0
  121. package/dist/ui/components/MessageComposer.js +295 -0
  122. package/dist/ui/components/MessageComposer.js.map +1 -0
  123. package/dist/ui/components/WsStatusStrip.d.ts +2 -0
  124. package/dist/ui/components/WsStatusStrip.d.ts.map +1 -0
  125. package/dist/ui/components/WsStatusStrip.js +103 -0
  126. package/dist/ui/components/WsStatusStrip.js.map +1 -0
  127. package/dist/ui/icons.d.ts +22 -0
  128. package/dist/ui/icons.d.ts.map +1 -0
  129. package/dist/ui/icons.js +71 -0
  130. package/dist/ui/icons.js.map +1 -0
  131. package/dist/ui/theme.d.ts +72 -0
  132. package/dist/ui/theme.d.ts.map +1 -0
  133. package/dist/ui/theme.js +170 -0
  134. package/dist/ui/theme.js.map +1 -0
  135. package/docs/backend-contract.md +392 -0
  136. package/docs/migration-notes.md +32 -0
  137. package/package.json +60 -0
  138. package/src/api/conversation-api.ts +71 -0
  139. package/src/api/file-api.ts +14 -0
  140. package/src/api/widget-api.ts +12 -0
  141. package/src/axios/axios.ts +159 -0
  142. package/src/core/config.ts +54 -0
  143. package/src/core/http-client.ts +136 -0
  144. package/src/core/identity.ts +68 -0
  145. package/src/core/visitor-params.ts +48 -0
  146. package/src/hooks/use-conversations.ts +181 -0
  147. package/src/hooks/use-live-chat.ts +84 -0
  148. package/src/hooks/use-messages.ts +188 -0
  149. package/src/hooks/use-send-message.ts +159 -0
  150. package/src/index.ts +114 -0
  151. package/src/navigation/LiveChatPanel.tsx +118 -0
  152. package/src/navigation/panel-router-context.tsx +89 -0
  153. package/src/navigation/router-types.ts +1 -0
  154. package/src/provider/LiveChatContext.ts +33 -0
  155. package/src/provider/LiveChatProvider.tsx +380 -0
  156. package/src/provider/types.ts +57 -0
  157. package/src/realtime/ws-client.ts +369 -0
  158. package/src/types/react-native-svg.d.ts +10 -0
  159. package/src/ui/components/AssigneeAvatar.tsx +102 -0
  160. package/src/ui/components/Avatar.tsx +110 -0
  161. package/src/ui/components/ConversationHeader.tsx +202 -0
  162. package/src/ui/components/ConversationListScreen.tsx +454 -0
  163. package/src/ui/components/ConversationScreen.tsx +362 -0
  164. package/src/ui/components/HomeScreen.tsx +278 -0
  165. package/src/ui/components/LivechatMessageRenderer.tsx +268 -0
  166. package/src/ui/components/LogMessage.tsx +88 -0
  167. package/src/ui/components/MessageBubble.tsx +148 -0
  168. package/src/ui/components/MessageComposer.tsx +461 -0
  169. package/src/ui/components/WsStatusStrip.tsx +123 -0
  170. package/src/ui/icons.tsx +111 -0
  171. 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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"}
@@ -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,5 @@
1
+ export type LiveChatPanelProps = {
2
+ onClose?: () => void;
3
+ };
4
+ export declare function LiveChatPanel({ onClose }: LiveChatPanelProps): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=LiveChatPanel.d.ts.map
@@ -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