@parlr/react-native 0.1.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 (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +918 -0
  3. package/lib/commonjs/components/AttachmentPicker.js +292 -0
  4. package/lib/commonjs/components/AttachmentPicker.js.map +1 -0
  5. package/lib/commonjs/components/AttachmentPreview.js +200 -0
  6. package/lib/commonjs/components/AttachmentPreview.js.map +1 -0
  7. package/lib/commonjs/components/ChatBubble.js +391 -0
  8. package/lib/commonjs/components/ChatBubble.js.map +1 -0
  9. package/lib/commonjs/components/EmptyState.js +115 -0
  10. package/lib/commonjs/components/EmptyState.js.map +1 -0
  11. package/lib/commonjs/components/ParlrChat.js +745 -0
  12. package/lib/commonjs/components/ParlrChat.js.map +1 -0
  13. package/lib/commonjs/components/ParlrConversationList.js +509 -0
  14. package/lib/commonjs/components/ParlrConversationList.js.map +1 -0
  15. package/lib/commonjs/components/PreChatForm.js +263 -0
  16. package/lib/commonjs/components/PreChatForm.js.map +1 -0
  17. package/lib/commonjs/components/RichMessage.js +284 -0
  18. package/lib/commonjs/components/RichMessage.js.map +1 -0
  19. package/lib/commonjs/components/SatisfactionSurvey.js +292 -0
  20. package/lib/commonjs/components/SatisfactionSurvey.js.map +1 -0
  21. package/lib/commonjs/components/TypingIndicator.js +86 -0
  22. package/lib/commonjs/components/TypingIndicator.js.map +1 -0
  23. package/lib/commonjs/core/api.js +310 -0
  24. package/lib/commonjs/core/api.js.map +1 -0
  25. package/lib/commonjs/core/config.js +40 -0
  26. package/lib/commonjs/core/config.js.map +1 -0
  27. package/lib/commonjs/core/errors.js +73 -0
  28. package/lib/commonjs/core/errors.js.map +1 -0
  29. package/lib/commonjs/core/offlineQueue.js +89 -0
  30. package/lib/commonjs/core/offlineQueue.js.map +1 -0
  31. package/lib/commonjs/core/pushNotifications.js +21 -0
  32. package/lib/commonjs/core/pushNotifications.js.map +1 -0
  33. package/lib/commonjs/core/session.js +130 -0
  34. package/lib/commonjs/core/session.js.map +1 -0
  35. package/lib/commonjs/core/theme.js +110 -0
  36. package/lib/commonjs/core/theme.js.map +1 -0
  37. package/lib/commonjs/core/types.js +6 -0
  38. package/lib/commonjs/core/types.js.map +1 -0
  39. package/lib/commonjs/core/websocket.js +245 -0
  40. package/lib/commonjs/core/websocket.js.map +1 -0
  41. package/lib/commonjs/hooks/useChat.js +462 -0
  42. package/lib/commonjs/hooks/useChat.js.map +1 -0
  43. package/lib/commonjs/hooks/useParlr.js +44 -0
  44. package/lib/commonjs/hooks/useParlr.js.map +1 -0
  45. package/lib/commonjs/index.js +185 -0
  46. package/lib/commonjs/index.js.map +1 -0
  47. package/lib/commonjs/package.json +1 -0
  48. package/lib/commonjs/provider/ParlrContext.js +38 -0
  49. package/lib/commonjs/provider/ParlrContext.js.map +1 -0
  50. package/lib/commonjs/provider/ParlrProvider.js +256 -0
  51. package/lib/commonjs/provider/ParlrProvider.js.map +1 -0
  52. package/lib/module/components/AttachmentPicker.js +287 -0
  53. package/lib/module/components/AttachmentPicker.js.map +1 -0
  54. package/lib/module/components/AttachmentPreview.js +195 -0
  55. package/lib/module/components/AttachmentPreview.js.map +1 -0
  56. package/lib/module/components/ChatBubble.js +386 -0
  57. package/lib/module/components/ChatBubble.js.map +1 -0
  58. package/lib/module/components/EmptyState.js +110 -0
  59. package/lib/module/components/EmptyState.js.map +1 -0
  60. package/lib/module/components/ParlrChat.js +740 -0
  61. package/lib/module/components/ParlrChat.js.map +1 -0
  62. package/lib/module/components/ParlrConversationList.js +504 -0
  63. package/lib/module/components/ParlrConversationList.js.map +1 -0
  64. package/lib/module/components/PreChatForm.js +258 -0
  65. package/lib/module/components/PreChatForm.js.map +1 -0
  66. package/lib/module/components/RichMessage.js +280 -0
  67. package/lib/module/components/RichMessage.js.map +1 -0
  68. package/lib/module/components/SatisfactionSurvey.js +287 -0
  69. package/lib/module/components/SatisfactionSurvey.js.map +1 -0
  70. package/lib/module/components/TypingIndicator.js +81 -0
  71. package/lib/module/components/TypingIndicator.js.map +1 -0
  72. package/lib/module/core/api.js +305 -0
  73. package/lib/module/core/api.js.map +1 -0
  74. package/lib/module/core/config.js +36 -0
  75. package/lib/module/core/config.js.map +1 -0
  76. package/lib/module/core/errors.js +64 -0
  77. package/lib/module/core/errors.js.map +1 -0
  78. package/lib/module/core/offlineQueue.js +82 -0
  79. package/lib/module/core/offlineQueue.js.map +1 -0
  80. package/lib/module/core/pushNotifications.js +16 -0
  81. package/lib/module/core/pushNotifications.js.map +1 -0
  82. package/lib/module/core/session.js +122 -0
  83. package/lib/module/core/session.js.map +1 -0
  84. package/lib/module/core/theme.js +105 -0
  85. package/lib/module/core/theme.js.map +1 -0
  86. package/lib/module/core/types.js +4 -0
  87. package/lib/module/core/types.js.map +1 -0
  88. package/lib/module/core/websocket.js +241 -0
  89. package/lib/module/core/websocket.js.map +1 -0
  90. package/lib/module/hooks/useChat.js +458 -0
  91. package/lib/module/hooks/useChat.js.map +1 -0
  92. package/lib/module/hooks/useParlr.js +40 -0
  93. package/lib/module/hooks/useParlr.js.map +1 -0
  94. package/lib/module/index.js +58 -0
  95. package/lib/module/index.js.map +1 -0
  96. package/lib/module/package.json +1 -0
  97. package/lib/module/provider/ParlrContext.js +35 -0
  98. package/lib/module/provider/ParlrContext.js.map +1 -0
  99. package/lib/module/provider/ParlrProvider.js +251 -0
  100. package/lib/module/provider/ParlrProvider.js.map +1 -0
  101. package/lib/typescript/commonjs/components/AttachmentPicker.d.ts +23 -0
  102. package/lib/typescript/commonjs/components/AttachmentPicker.d.ts.map +1 -0
  103. package/lib/typescript/commonjs/components/AttachmentPreview.d.ts +16 -0
  104. package/lib/typescript/commonjs/components/AttachmentPreview.d.ts.map +1 -0
  105. package/lib/typescript/commonjs/components/ChatBubble.d.ts +14 -0
  106. package/lib/typescript/commonjs/components/ChatBubble.d.ts.map +1 -0
  107. package/lib/typescript/commonjs/components/EmptyState.d.ts +10 -0
  108. package/lib/typescript/commonjs/components/EmptyState.d.ts.map +1 -0
  109. package/lib/typescript/commonjs/components/ParlrChat.d.ts +34 -0
  110. package/lib/typescript/commonjs/components/ParlrChat.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/components/ParlrConversationList.d.ts +17 -0
  112. package/lib/typescript/commonjs/components/ParlrConversationList.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/components/PreChatForm.d.ts +20 -0
  114. package/lib/typescript/commonjs/components/PreChatForm.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/components/RichMessage.d.ts +41 -0
  116. package/lib/typescript/commonjs/components/RichMessage.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/components/SatisfactionSurvey.d.ts +17 -0
  118. package/lib/typescript/commonjs/components/SatisfactionSurvey.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/components/TypingIndicator.d.ts +7 -0
  120. package/lib/typescript/commonjs/components/TypingIndicator.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/core/api.d.ts +37 -0
  122. package/lib/typescript/commonjs/core/api.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/core/config.d.ts +9 -0
  124. package/lib/typescript/commonjs/core/config.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/core/errors.d.ts +35 -0
  126. package/lib/typescript/commonjs/core/errors.d.ts.map +1 -0
  127. package/lib/typescript/commonjs/core/offlineQueue.d.ts +16 -0
  128. package/lib/typescript/commonjs/core/offlineQueue.d.ts.map +1 -0
  129. package/lib/typescript/commonjs/core/pushNotifications.d.ts +6 -0
  130. package/lib/typescript/commonjs/core/pushNotifications.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/core/session.d.ts +15 -0
  132. package/lib/typescript/commonjs/core/session.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/core/theme.d.ts +43 -0
  134. package/lib/typescript/commonjs/core/theme.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/core/types.d.ts +185 -0
  136. package/lib/typescript/commonjs/core/types.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/core/websocket.d.ts +17 -0
  138. package/lib/typescript/commonjs/core/websocket.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/hooks/useChat.d.ts +35 -0
  140. package/lib/typescript/commonjs/hooks/useChat.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/hooks/useParlr.d.ts +11 -0
  142. package/lib/typescript/commonjs/hooks/useParlr.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/index.d.ts +30 -0
  144. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/package.json +1 -0
  146. package/lib/typescript/commonjs/provider/ParlrContext.d.ts +13 -0
  147. package/lib/typescript/commonjs/provider/ParlrContext.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/provider/ParlrProvider.d.ts +5 -0
  149. package/lib/typescript/commonjs/provider/ParlrProvider.d.ts.map +1 -0
  150. package/lib/typescript/module/components/AttachmentPicker.d.ts +23 -0
  151. package/lib/typescript/module/components/AttachmentPicker.d.ts.map +1 -0
  152. package/lib/typescript/module/components/AttachmentPreview.d.ts +16 -0
  153. package/lib/typescript/module/components/AttachmentPreview.d.ts.map +1 -0
  154. package/lib/typescript/module/components/ChatBubble.d.ts +14 -0
  155. package/lib/typescript/module/components/ChatBubble.d.ts.map +1 -0
  156. package/lib/typescript/module/components/EmptyState.d.ts +10 -0
  157. package/lib/typescript/module/components/EmptyState.d.ts.map +1 -0
  158. package/lib/typescript/module/components/ParlrChat.d.ts +34 -0
  159. package/lib/typescript/module/components/ParlrChat.d.ts.map +1 -0
  160. package/lib/typescript/module/components/ParlrConversationList.d.ts +17 -0
  161. package/lib/typescript/module/components/ParlrConversationList.d.ts.map +1 -0
  162. package/lib/typescript/module/components/PreChatForm.d.ts +20 -0
  163. package/lib/typescript/module/components/PreChatForm.d.ts.map +1 -0
  164. package/lib/typescript/module/components/RichMessage.d.ts +41 -0
  165. package/lib/typescript/module/components/RichMessage.d.ts.map +1 -0
  166. package/lib/typescript/module/components/SatisfactionSurvey.d.ts +17 -0
  167. package/lib/typescript/module/components/SatisfactionSurvey.d.ts.map +1 -0
  168. package/lib/typescript/module/components/TypingIndicator.d.ts +7 -0
  169. package/lib/typescript/module/components/TypingIndicator.d.ts.map +1 -0
  170. package/lib/typescript/module/core/api.d.ts +37 -0
  171. package/lib/typescript/module/core/api.d.ts.map +1 -0
  172. package/lib/typescript/module/core/config.d.ts +9 -0
  173. package/lib/typescript/module/core/config.d.ts.map +1 -0
  174. package/lib/typescript/module/core/errors.d.ts +35 -0
  175. package/lib/typescript/module/core/errors.d.ts.map +1 -0
  176. package/lib/typescript/module/core/offlineQueue.d.ts +16 -0
  177. package/lib/typescript/module/core/offlineQueue.d.ts.map +1 -0
  178. package/lib/typescript/module/core/pushNotifications.d.ts +6 -0
  179. package/lib/typescript/module/core/pushNotifications.d.ts.map +1 -0
  180. package/lib/typescript/module/core/session.d.ts +15 -0
  181. package/lib/typescript/module/core/session.d.ts.map +1 -0
  182. package/lib/typescript/module/core/theme.d.ts +43 -0
  183. package/lib/typescript/module/core/theme.d.ts.map +1 -0
  184. package/lib/typescript/module/core/types.d.ts +185 -0
  185. package/lib/typescript/module/core/types.d.ts.map +1 -0
  186. package/lib/typescript/module/core/websocket.d.ts +17 -0
  187. package/lib/typescript/module/core/websocket.d.ts.map +1 -0
  188. package/lib/typescript/module/hooks/useChat.d.ts +35 -0
  189. package/lib/typescript/module/hooks/useChat.d.ts.map +1 -0
  190. package/lib/typescript/module/hooks/useParlr.d.ts +11 -0
  191. package/lib/typescript/module/hooks/useParlr.d.ts.map +1 -0
  192. package/lib/typescript/module/index.d.ts +30 -0
  193. package/lib/typescript/module/index.d.ts.map +1 -0
  194. package/lib/typescript/module/package.json +1 -0
  195. package/lib/typescript/module/provider/ParlrContext.d.ts +13 -0
  196. package/lib/typescript/module/provider/ParlrContext.d.ts.map +1 -0
  197. package/lib/typescript/module/provider/ParlrProvider.d.ts +5 -0
  198. package/lib/typescript/module/provider/ParlrProvider.d.ts.map +1 -0
  199. package/package.json +120 -0
  200. package/src/components/AttachmentPicker.tsx +310 -0
  201. package/src/components/AttachmentPreview.tsx +209 -0
  202. package/src/components/ChatBubble.tsx +424 -0
  203. package/src/components/EmptyState.tsx +118 -0
  204. package/src/components/ParlrChat.tsx +863 -0
  205. package/src/components/ParlrConversationList.tsx +559 -0
  206. package/src/components/PreChatForm.tsx +313 -0
  207. package/src/components/RichMessage.tsx +353 -0
  208. package/src/components/SatisfactionSurvey.tsx +333 -0
  209. package/src/components/TypingIndicator.tsx +89 -0
  210. package/src/core/api.ts +406 -0
  211. package/src/core/config.ts +39 -0
  212. package/src/core/errors.ts +68 -0
  213. package/src/core/offlineQueue.ts +94 -0
  214. package/src/core/pushNotifications.ts +22 -0
  215. package/src/core/session.ts +156 -0
  216. package/src/core/theme.ts +133 -0
  217. package/src/core/types.ts +237 -0
  218. package/src/core/websocket.ts +270 -0
  219. package/src/hooks/useChat.ts +534 -0
  220. package/src/hooks/useParlr.ts +43 -0
  221. package/src/index.ts +98 -0
  222. package/src/provider/ParlrContext.ts +40 -0
  223. package/src/provider/ParlrProvider.tsx +338 -0
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+
3
+ // ---------------------------------------------------------------------------
4
+ // Parlr React Native SDK - Provider
5
+ // ---------------------------------------------------------------------------
6
+ //
7
+ // Initializes the session, REST client and WebSocket on mount, then provides
8
+ // them to the rest of the tree through React context.
9
+ // ---------------------------------------------------------------------------
10
+
11
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
12
+ import { useColorScheme } from 'react-native';
13
+ import { createApiClient } from "../core/api.js";
14
+ import { resolveConfig } from "../core/config.js";
15
+ import { ParlrError } from "../core/errors.js";
16
+ import { clearSession, isSessionValid, loadSession, saveSession } from "../core/session.js";
17
+ import { defaultDarkTheme, defaultLightTheme, mergeTheme } from "../core/theme.js";
18
+ import { createWebSocket } from "../core/websocket.js";
19
+ import { ParlrContext } from "./ParlrContext.js";
20
+
21
+ // ---------------------------------------------------------------------------
22
+ // Props
23
+ // ---------------------------------------------------------------------------
24
+ import { jsx as _jsx } from "react/jsx-runtime";
25
+ // ---------------------------------------------------------------------------
26
+ // Debounce helper
27
+ // ---------------------------------------------------------------------------
28
+
29
+ function useDebouncedCallback(fn, delayMs) {
30
+ const timerRef = useRef(null);
31
+ const fnRef = useRef(fn);
32
+ fnRef.current = fn;
33
+ return useCallback((...args) => {
34
+ if (timerRef.current) clearTimeout(timerRef.current);
35
+ timerRef.current = setTimeout(() => fnRef.current(...args), delayMs);
36
+ }, [delayMs]);
37
+ }
38
+
39
+ // ---------------------------------------------------------------------------
40
+ // Component
41
+ // ---------------------------------------------------------------------------
42
+
43
+ export function ParlrProvider({
44
+ children,
45
+ ...configProps
46
+ }) {
47
+ // --- Resolved config (stable across renders unless props change) ----------
48
+ const config = useMemo(() => resolveConfig(configProps),
49
+ // eslint-disable-next-line react-hooks/exhaustive-deps
50
+ [configProps.workspaceId, configProps.apiBaseUrl, configProps.wsUrl, configProps.locale, configProps.debug, configProps.onError]);
51
+
52
+ // --- Resolve theme based on system color scheme + user overrides ----------
53
+ const colorScheme = useColorScheme();
54
+ const theme = useMemo(() => {
55
+ const base = colorScheme === 'dark' ? defaultDarkTheme : defaultLightTheme;
56
+ return configProps.theme ? mergeTheme(base, configProps.theme) : base;
57
+ }, [colorScheme, configProps.theme]);
58
+
59
+ // --- State -----------------------------------------------------------------
60
+ const [session, setSession] = useState(null);
61
+ const [isReady, setIsReady] = useState(false);
62
+ const [isConnected, setIsConnected] = useState(false);
63
+ const [conversations, setConversations] = useState([]);
64
+
65
+ // --- Refs (singletons across the provider lifecycle) -----------------------
66
+ const sessionRef = useRef(null);
67
+ const apiRef = useRef(null);
68
+ const wsRef = useRef(null);
69
+
70
+ // Keep ref in sync with state so the token accessor always returns latest.
71
+ sessionRef.current = session;
72
+
73
+ // --- Create API client (once per config) -----------------------------------
74
+ useEffect(() => {
75
+ const api = createApiClient(config, () => sessionRef.current?.token ?? null);
76
+ apiRef.current = api;
77
+ }, [config]);
78
+
79
+ // --- Fetch conversations (debounced) ---------------------------------------
80
+ const refreshConversationsImpl = useCallback(async () => {
81
+ const api = apiRef.current;
82
+ /* istanbul ignore next -- defensive: apiRef always set by preceding effect */
83
+ if (!api || !sessionRef.current) return;
84
+ try {
85
+ const res = await api.listConversations();
86
+ setConversations(res.data);
87
+ } catch (err) {
88
+ if (config.debug) {
89
+ console.warn('[@parlr/react-native] Failed to refresh conversations:', err);
90
+ }
91
+ config.onError?.(err instanceof ParlrError ? err : new ParlrError(err instanceof Error ? err.message : String(err)));
92
+ }
93
+ }, [config]);
94
+ const refreshConversations = useDebouncedCallback(refreshConversationsImpl, 500);
95
+
96
+ // --- Create WS client (once per config) ------------------------------------
97
+ useEffect(() => {
98
+ const ws = createWebSocket(config);
99
+ wsRef.current = ws;
100
+ const offConnected = ws.on('auth_ok', () => setIsConnected(true));
101
+ const offAuthError = ws.on('auth_error', () => setIsConnected(false));
102
+ const offDisconnected = ws.on('disconnected', () => setIsConnected(false));
103
+
104
+ // When a new message arrives for any conversation, refresh list.
105
+ const offMessage = ws.on('new_message', () => {
106
+ refreshConversations();
107
+ });
108
+ const offConvUpdated = ws.on('conversation_updated', () => {
109
+ refreshConversations();
110
+ });
111
+ return () => {
112
+ offConnected();
113
+ offAuthError();
114
+ offDisconnected();
115
+ offMessage();
116
+ offConvUpdated();
117
+ ws.disconnect();
118
+ };
119
+ // eslint-disable-next-line react-hooks/exhaustive-deps
120
+ }, [config]);
121
+
122
+ // --- Bootstrap session on mount --------------------------------------------
123
+ useEffect(() => {
124
+ let cancelled = false;
125
+ async function bootstrap() {
126
+ const api = apiRef.current;
127
+ if (!api) return;
128
+ try {
129
+ // 1. Try to restore a persisted session.
130
+ const existing = await loadSession(config.workspaceId);
131
+ if (existing && isSessionValid(existing)) {
132
+ if (!cancelled) {
133
+ setSession(existing);
134
+ sessionRef.current = existing;
135
+ }
136
+ } else {
137
+ // 2. Create a new session.
138
+ if (existing) {
139
+ await clearSession(config.workspaceId);
140
+ }
141
+ const newSession = await api.createSession();
142
+ await saveSession(config.workspaceId, newSession);
143
+ if (!cancelled) {
144
+ setSession(newSession);
145
+ sessionRef.current = newSession;
146
+ }
147
+ }
148
+ if (!cancelled) {
149
+ setIsReady(true);
150
+ }
151
+ } catch (err) {
152
+ console.error('[@parlr/react-native] Failed to bootstrap session:', err);
153
+ config.onError?.(err instanceof ParlrError ? err : new ParlrError(err instanceof Error ? err.message : String(err)));
154
+ if (!cancelled) {
155
+ setIsReady(true); // still "ready" so UI can render an error state
156
+ }
157
+ }
158
+ }
159
+ bootstrap();
160
+ return () => {
161
+ cancelled = true;
162
+ };
163
+ }, [config]);
164
+
165
+ // --- Connect WebSocket once session is available ---------------------------
166
+ useEffect(() => {
167
+ if (session?.token && wsRef.current) {
168
+ wsRef.current.connect(session.token);
169
+ }
170
+ }, [session]);
171
+
172
+ // --- Auto-refresh session when expired -------------------------------------
173
+ useEffect(() => {
174
+ if (!session || !apiRef.current) return;
175
+
176
+ // Check session validity periodically.
177
+ const interval = setInterval(async () => {
178
+ if (session && !isSessionValid(session)) {
179
+ if (config.debug) {
180
+ console.log('[@parlr/react-native] Session expired, refreshing...');
181
+ }
182
+ try {
183
+ const api = apiRef.current;
184
+ /* istanbul ignore next -- defensive: apiRef always set by preceding effect */
185
+ if (!api) return;
186
+ const newSession = await api.createSession();
187
+ await saveSession(config.workspaceId, newSession);
188
+ setSession(newSession);
189
+ sessionRef.current = newSession;
190
+ } catch (err) {
191
+ console.error('[@parlr/react-native] Failed to refresh session:', err);
192
+ config.onError?.(err instanceof ParlrError ? err : new ParlrError(err instanceof Error ? err.message : String(err)));
193
+ }
194
+ }
195
+ }, 60_000); // Check every minute.
196
+
197
+ return () => clearInterval(interval);
198
+ }, [session, config]);
199
+
200
+ // --- Fetch conversations once session is ready -----------------------------
201
+ useEffect(() => {
202
+ if (isReady && session) {
203
+ refreshConversationsImpl();
204
+ }
205
+ }, [isReady, session, refreshConversationsImpl]);
206
+
207
+ // --- Poll conversations when WebSocket is not connected --------------------
208
+ // Without WS, the conversation list (unread counts, new conversations from
209
+ // agent replies) would never update. Poll every 10 s as a fallback.
210
+ useEffect(() => {
211
+ if (!isReady || !session) return;
212
+ // Skip polling if WS is live — the new_message listener already refreshes.
213
+ if (isConnected) return;
214
+ const interval = setInterval(() => {
215
+ refreshConversationsImpl();
216
+ }, 10_000);
217
+ return () => clearInterval(interval);
218
+ }, [isReady, session, isConnected, refreshConversationsImpl]);
219
+
220
+ // --- Identify callback -----------------------------------------------------
221
+ const identify = useCallback(async user => {
222
+ const api = apiRef.current;
223
+ if (!api) {
224
+ throw new Error('[@parlr/react-native] Cannot identify before SDK is initialised.');
225
+ }
226
+ await api.identify(user);
227
+ }, []);
228
+
229
+ // --- Unread count (derived) ------------------------------------------------
230
+ const unreadCount = useMemo(() => conversations.reduce((sum, c) => sum + c.unreadCount, 0), [conversations]);
231
+
232
+ // --- Context value ---------------------------------------------------------
233
+ const value = useMemo(() => ({
234
+ config,
235
+ session,
236
+ isReady,
237
+ isConnected,
238
+ conversations,
239
+ unreadCount,
240
+ identify,
241
+ refreshConversations: refreshConversationsImpl,
242
+ theme,
243
+ api: apiRef.current,
244
+ ws: wsRef.current
245
+ }), [config, session, isReady, isConnected, conversations, unreadCount, identify, refreshConversationsImpl, theme]);
246
+ return /*#__PURE__*/_jsx(ParlrContext.Provider, {
247
+ value: value,
248
+ children: children
249
+ });
250
+ }
251
+ //# sourceMappingURL=ParlrProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","useColorScheme","createApiClient","resolveConfig","ParlrError","clearSession","isSessionValid","loadSession","saveSession","defaultDarkTheme","defaultLightTheme","mergeTheme","createWebSocket","ParlrContext","jsx","_jsx","useDebouncedCallback","fn","delayMs","timerRef","fnRef","current","args","clearTimeout","setTimeout","ParlrProvider","children","configProps","config","workspaceId","apiBaseUrl","wsUrl","locale","debug","onError","colorScheme","theme","base","session","setSession","isReady","setIsReady","isConnected","setIsConnected","conversations","setConversations","sessionRef","apiRef","wsRef","api","token","refreshConversationsImpl","res","listConversations","data","err","console","warn","Error","message","String","refreshConversations","ws","offConnected","on","offAuthError","offDisconnected","offMessage","offConvUpdated","disconnect","cancelled","bootstrap","existing","newSession","createSession","error","connect","interval","setInterval","log","clearInterval","identify","user","unreadCount","reduce","sum","c","value","Provider"],"sourceRoot":"../../../src","sources":["provider/ParlrProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ export interface PickedFile {
3
+ uri: string;
4
+ name: string;
5
+ type: string;
6
+ size: number;
7
+ }
8
+ export interface AttachmentPickerProps {
9
+ /** Called when a file is selected. */
10
+ onFilePicked: (file: PickedFile) => void;
11
+ /** Called to dismiss the picker. */
12
+ onDismiss: () => void;
13
+ /** Max file size in bytes. Default: 25MB. */
14
+ maxFileSize?: number;
15
+ /** Allowed MIME types. Default: images + documents. */
16
+ allowedTypes?: string[];
17
+ /** Accent color. */
18
+ accentColor?: string;
19
+ /** Locale. */
20
+ locale?: string;
21
+ }
22
+ export declare function AttachmentPicker({ onFilePicked, onDismiss, maxFileSize, accentColor: accentColorProp, locale, }: AttachmentPickerProps): React.JSX.Element;
23
+ //# sourceMappingURL=AttachmentPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentPicker.d.ts","sourceRoot":"","sources":["../../../../src/components/AttachmentPicker.tsx"],"names":[],"mappings":"AASA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAcvD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,oCAAoC;IACpC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkED,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,SAAS,EACT,WAAmC,EACnC,WAAW,EAAE,eAAe,EAC5B,MAAM,GACP,EAAE,qBAAqB,qBA4JvB"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { PickedFile } from './AttachmentPicker';
3
+ export interface AttachmentPreviewProps {
4
+ /** The file to preview. */
5
+ file: PickedFile;
6
+ /** Called when the user removes the attachment. */
7
+ onRemove: () => void;
8
+ /** Called when the user confirms and sends. */
9
+ onSend: () => void;
10
+ /** Accent color. */
11
+ accentColor?: string;
12
+ /** Locale. */
13
+ locale?: string;
14
+ }
15
+ export declare function AttachmentPreview({ file, onRemove, onSend, accentColor: accentColorProp, locale, }: AttachmentPreviewProps): React.JSX.Element;
16
+ //# sourceMappingURL=AttachmentPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentPreview.d.ts","sourceRoot":"","sources":["../../../../src/components/AttachmentPreview.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMrD,MAAM,WAAW,sBAAsB;IACrC,2BAA2B;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2BD,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EAAE,eAAe,EAC5B,MAAM,GACP,EAAE,sBAAsB,qBAuDxB"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { Message } from '../core/types';
3
+ import type { RichAction } from './RichMessage';
4
+ interface ChatBubbleProps {
5
+ message: Message;
6
+ accentColor?: string;
7
+ /** If true, apply the entrance animation (for newly-appended messages). */
8
+ animated?: boolean;
9
+ /** Called when a rich message action is triggered. */
10
+ onRichAction?: (action: RichAction) => void;
11
+ }
12
+ export declare function ChatBubble({ message, accentColor, animated, onRichAction, }: ChatBubbleProps): React.JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=ChatBubble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatBubble.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatBubble.tsx"],"names":[],"mappings":"AASA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAapD,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAC7C;AA+ID,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,WAAW,EACX,QAAgB,EAChB,YAAY,GACb,EAAE,eAAe,qBAsGjB"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ interface EmptyStateProps {
3
+ title?: string;
4
+ description?: string;
5
+ accentColor?: string;
6
+ locale?: string;
7
+ }
8
+ export declare function EmptyState({ title, description, accentColor, locale, }: EmptyStateProps): React.JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=EmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../../src/components/EmptyState.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmBD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,WAAW,EACX,MAAM,GACP,EAAE,eAAe,qBA2BjB"}
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import type { ParlrUser } from '../core/types';
3
+ export interface ParlrChatProps {
4
+ /** Identify the user on mount (optional — can also call `useParlr().identify`). */
5
+ user?: ParlrUser;
6
+ /** Existing conversation id. If omitted, a new one is created on first message. */
7
+ conversationId?: string;
8
+ /** Back button handler. If provided, a back arrow is shown in the header. */
9
+ onBack?: () => void;
10
+ /** Header title. Default: "Support". */
11
+ headerTitle?: string;
12
+ /** Input placeholder text. */
13
+ placeholder?: string;
14
+ /** Empty state title. */
15
+ emptyStateTitle?: string;
16
+ /** Empty state description. */
17
+ emptyStateDescription?: string;
18
+ /** Primary accent color for contact bubbles, send button, etc. */
19
+ accentColor?: string;
20
+ /** Show the header bar. Default: true. */
21
+ showHeader?: boolean;
22
+ /** Show the pre-chat form if user is not identified. Default: false. */
23
+ showPreChatForm?: boolean;
24
+ /** Fields for pre-chat form. Default: ['name', 'email']. */
25
+ preChatFields?: Array<'name' | 'email' | 'phone'>;
26
+ /** Show CSAT survey after conversation is closed. Default: true. */
27
+ showSatisfactionSurvey?: boolean;
28
+ /** Called when conversation is closed. */
29
+ onConversationClosed?: () => void;
30
+ /** Bottom safe-area inset the host app applies (default 0). Set this to your bottom inset so the input bar sits flush above the keyboard. */
31
+ safeAreaBottom?: number;
32
+ }
33
+ export declare function ParlrChat({ user, conversationId, onBack, headerTitle, placeholder, emptyStateTitle, emptyStateDescription, accentColor: accentColorProp, showHeader, showPreChatForm, preChatFields, showSatisfactionSurvey, onConversationClosed, safeAreaBottom, }: ParlrChatProps): React.JSX.Element;
34
+ //# sourceMappingURL=ParlrChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParlrChat.d.ts","sourceRoot":"","sources":["../../../../src/components/ParlrChat.tsx"],"names":[],"mappings":"AAWA,OAAO,KAMN,MAAM,OAAO,CAAC;AAsBf,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,eAAe,CAAC;AAgBxD,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAClD,oEAAoE;IACpE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,6IAA6I;IAC7I,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAmID,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,cAAc,EACd,MAAM,EACN,WAAW,EACX,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,WAAW,EAAE,eAAe,EAC5B,UAAiB,EACjB,eAAuB,EACvB,aAAiC,EACjC,sBAA6B,EAC7B,oBAAoB,EACpB,cAAkB,GACnB,EAAE,cAAc,qBA4dhB"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export interface ParlrConversationListProps {
3
+ /** Callback when a conversation is tapped. */
4
+ onSelectConversation: (conversationId: string) => void;
5
+ /** Callback for the "New Conversation" button. */
6
+ onNewConversation?: () => void;
7
+ /** Header title. Default: "Conversations". */
8
+ headerTitle?: string;
9
+ /** Primary accent color. */
10
+ accentColor?: string;
11
+ /** Show header bar. Default: true. */
12
+ showHeader?: boolean;
13
+ /** Filter conversations by status. */
14
+ statusFilter?: 'open' | 'closed' | 'pending';
15
+ }
16
+ export declare function ParlrConversationList({ onSelectConversation, onNewConversation, headerTitle, accentColor: accentColorProp, showHeader, statusFilter, }: ParlrConversationListProps): React.JSX.Element;
17
+ //# sourceMappingURL=ParlrConversationList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParlrConversationList.d.ts","sourceRoot":"","sources":["../../../../src/components/ParlrConversationList.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAmB5E,MAAM,WAAW,0BAA0B;IACzC,8CAA8C;IAC9C,oBAAoB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC9C;AAsMD,wBAAgB,qBAAqB,CAAC,EACpC,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,UAAiB,EACjB,YAAY,GACb,EAAE,0BAA0B,qBA8G5B"}
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import type { ParlrUser } from '../core/types';
3
+ export interface PreChatFormProps {
4
+ /** Called when the form is submitted with user data. */
5
+ onSubmit: (user: ParlrUser) => Promise<void>;
6
+ /** Fields to collect. Default: ['name', 'email']. */
7
+ fields?: Array<'name' | 'email' | 'phone'>;
8
+ /** Title text. */
9
+ title?: string;
10
+ /** Description text. */
11
+ description?: string;
12
+ /** Submit button label. */
13
+ submitLabel?: string;
14
+ /** Accent color for the submit button. */
15
+ accentColor?: string;
16
+ /** Locale for default text. */
17
+ locale?: string;
18
+ }
19
+ export declare function PreChatForm({ onSubmit, fields, title, description, submitLabel, accentColor: accentColorProp, locale, }: PreChatFormProps): React.JSX.Element;
20
+ //# sourceMappingURL=PreChatForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreChatForm.d.ts","sourceRoot":"","sources":["../../../../src/components/PreChatForm.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAYrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,qDAAqD;IACrD,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAC3C,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2CD,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,MAA0B,EAC1B,KAAK,EACL,WAAW,EACX,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,MAAM,GACP,EAAE,gBAAgB,qBA6IlB"}
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ export interface RichCard {
3
+ title?: string;
4
+ description?: string;
5
+ imageUrl?: string;
6
+ actions?: RichAction[];
7
+ }
8
+ export interface RichAction {
9
+ type: 'link' | 'postback' | 'reply';
10
+ label: string;
11
+ value: string;
12
+ }
13
+ export interface RichCarousel {
14
+ cards: RichCard[];
15
+ }
16
+ export interface RichQuickReplies {
17
+ text?: string;
18
+ replies: Array<{
19
+ label: string;
20
+ value: string;
21
+ }>;
22
+ }
23
+ export interface RichContent {
24
+ type: 'card' | 'carousel' | 'quick_replies' | 'buttons';
25
+ card?: RichCard;
26
+ carousel?: RichCarousel;
27
+ quickReplies?: RichQuickReplies;
28
+ buttons?: RichAction[];
29
+ }
30
+ export interface RichMessageProps {
31
+ /** The rich content to render. Parsed from message metadata. */
32
+ content: RichContent;
33
+ /** Called when a postback/reply action is triggered. */
34
+ onAction?: (action: RichAction) => void;
35
+ /** Accent color for buttons. */
36
+ accentColor?: string;
37
+ }
38
+ declare function tryParseRichContent(metadata?: Record<string, unknown>): RichContent | null;
39
+ export { tryParseRichContent };
40
+ export declare function RichMessage({ content, onAction, accentColor: accentColorProp, }: RichMessageProps): React.JSX.Element | null;
41
+ //# sourceMappingURL=RichMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/RichMessage.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,eAAe,GAAG,SAAS,CAAC;IACxD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,OAAO,EAAE,WAAW,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,iBAAS,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,IAAI,CAMnF;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC;AA+F/B,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,WAAW,EAAE,eAAe,GAC7B,EAAE,gBAAgB,4BAwFlB"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export interface SatisfactionSurveyProps {
3
+ /** Called when the survey is submitted. */
4
+ onSubmit: (score: number, comment?: string) => Promise<void>;
5
+ /** Called when the user dismisses without rating. */
6
+ onDismiss?: () => void;
7
+ /** Title text. */
8
+ title?: string;
9
+ /** Description text. */
10
+ description?: string;
11
+ /** Accent color. */
12
+ accentColor?: string;
13
+ /** Locale for default text. */
14
+ locale?: string;
15
+ }
16
+ export declare function SatisfactionSurvey({ onSubmit, onDismiss, title, description, accentColor: accentColorProp, locale, }: SatisfactionSurveyProps): React.JSX.Element;
17
+ //# sourceMappingURL=SatisfactionSurvey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SatisfactionSurvey.d.ts","sourceRoot":"","sources":["../../../../src/components/SatisfactionSurvey.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAerD,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2DD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,EACT,KAAK,EACL,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,MAAM,GACP,EAAE,uBAAuB,qBAqHzB"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface TypingIndicatorProps {
3
+ accentColor?: string;
4
+ }
5
+ export declare function TypingIndicator({ accentColor }: TypingIndicatorProps): React.JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=TypingIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypingIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/TypingIndicator.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAYzC,UAAU,oBAAoB;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8BD,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,EAAE,oBAAoB,qBAepE"}
@@ -0,0 +1,37 @@
1
+ import type { Attachment, Conversation, ParlrUser, Message, PaginatedResponse, ResolvedConfig, Session } from './types';
2
+ export interface ParlrApiClient {
3
+ /** Create a new anonymous session. */
4
+ createSession(): Promise<Session>;
5
+ /** Identify (or re-identify) the contact behind the current session. */
6
+ identify(user: ParlrUser): Promise<void>;
7
+ /** List conversations for the current contact. */
8
+ listConversations(page?: number): Promise<PaginatedResponse<Conversation>>;
9
+ /** Create a new conversation (optionally with a first message). */
10
+ createConversation(initialMessage?: string): Promise<Conversation>;
11
+ /** Fetch messages for a conversation. */
12
+ getMessages(conversationId: string, page?: number): Promise<PaginatedResponse<Message>>;
13
+ /** Send a message within a conversation. */
14
+ sendMessage(conversationId: string, content: string, clientId: string): Promise<Message>;
15
+ /** Notify the server that the contact is typing. */
16
+ sendTypingIndicator(conversationId: string, isTyping: boolean): Promise<void>;
17
+ /** Close a conversation. */
18
+ closeConversation(conversationId: string): Promise<Conversation>;
19
+ /** Reopen a closed conversation. */
20
+ reopenConversation(conversationId: string): Promise<Conversation>;
21
+ /** Upload an attachment to a conversation. */
22
+ uploadAttachment(conversationId: string, formData: FormData): Promise<Attachment>;
23
+ /** Subscribe to push notifications. */
24
+ subscribePush(token: string, platform: 'ios' | 'android'): Promise<void>;
25
+ /** Unsubscribe from push notifications. */
26
+ unsubscribePush(token: string): Promise<void>;
27
+ /** Submit a CSAT rating for a conversation. */
28
+ submitRating(conversationId: string, score: number, comment?: string): Promise<void>;
29
+ /** Search messages in a conversation. */
30
+ searchMessages(conversationId: string, query: string): Promise<PaginatedResponse<Message>>;
31
+ }
32
+ /**
33
+ * Create a configured API client bound to a resolved config and an optional
34
+ * session token accessor (so the token can be refreshed externally).
35
+ */
36
+ export declare function createApiClient(config: ResolvedConfig, getToken: () => string | null): ParlrApiClient;
37
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/core/api.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,OAAO,EACR,MAAM,SAAS,CAAC;AA6IjB,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAElC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,kDAAkD;IAClD,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;IAE3E,mEAAmE;IACnE,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnE,yCAAyC;IACzC,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IAEvC,4CAA4C;IAC5C,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,oDAAoD;IACpD,mBAAmB,CACjB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,4BAA4B;IAC5B,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEjE,oCAAoC;IACpC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAElE,8CAA8C;IAC9C,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAElF,uCAAuC;IACvC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,2CAA2C;IAC3C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,+CAA+C;IAC/C,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErF,yCAAyC;IACzC,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,GAC5B,cAAc,CAiLhB"}
@@ -0,0 +1,9 @@
1
+ import type { ParlrConfig, ResolvedConfig } from './types';
2
+ /**
3
+ * Resolve a partial user-supplied config into a fully-qualified config with
4
+ * all defaults applied.
5
+ *
6
+ * @throws {Error} if `workspaceId` is missing or empty.
7
+ */
8
+ export declare function resolveConfig(partial: ParlrConfig): ResolvedConfig;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/core/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAY3D;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAgBlE"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Base error class for all Parlr SDK errors.
3
+ */
4
+ export declare class ParlrError extends Error {
5
+ constructor(message: string, options?: ErrorOptions);
6
+ }
7
+ /**
8
+ * Network-level error (timeout, DNS failure, no internet).
9
+ */
10
+ export declare class ParlrNetworkError extends ParlrError {
11
+ readonly statusCode?: number;
12
+ constructor(message: string, statusCode?: number, options?: ErrorOptions);
13
+ }
14
+ /**
15
+ * Authentication / session error (expired token, invalid session).
16
+ */
17
+ export declare class ParlrAuthError extends ParlrError {
18
+ constructor(message: string, options?: ErrorOptions);
19
+ }
20
+ /**
21
+ * Validation error (invalid payload from API or WebSocket).
22
+ */
23
+ export declare class ParlrValidationError extends ParlrError {
24
+ readonly field?: string;
25
+ constructor(message: string, field?: string, options?: ErrorOptions);
26
+ }
27
+ /**
28
+ * WebSocket connection error (failed to connect, unexpected close).
29
+ */
30
+ export declare class ParlrConnectionError extends ParlrError {
31
+ readonly code?: number;
32
+ readonly reason?: string;
33
+ constructor(message: string, code?: number, reason?: string, options?: ErrorOptions);
34
+ }
35
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/core/errors.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAExB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKzE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;gBAChC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKpE;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAMpF"}