@mobileai/react-native 0.9.10 → 0.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +11 -0
  2. package/lib/module/components/AIAgent.js +513 -36
  3. package/lib/module/components/AIAgent.js.map +1 -1
  4. package/lib/module/components/AgentChatBar.js +320 -13
  5. package/lib/module/components/AgentChatBar.js.map +1 -1
  6. package/lib/module/config/endpoints.js +22 -0
  7. package/lib/module/config/endpoints.js.map +1 -0
  8. package/lib/module/core/systemPrompt.js +126 -100
  9. package/lib/module/core/systemPrompt.js.map +1 -1
  10. package/lib/module/services/AudioInputService.js +9 -0
  11. package/lib/module/services/AudioInputService.js.map +1 -1
  12. package/lib/module/services/flags/FlagService.js +1 -1
  13. package/lib/module/services/flags/FlagService.js.map +1 -1
  14. package/lib/module/services/telemetry/TelemetryService.js +39 -13
  15. package/lib/module/services/telemetry/TelemetryService.js.map +1 -1
  16. package/lib/module/services/telemetry/device.js +80 -10
  17. package/lib/module/services/telemetry/device.js.map +1 -1
  18. package/lib/module/support/EscalationSocket.js +46 -7
  19. package/lib/module/support/EscalationSocket.js.map +1 -1
  20. package/lib/module/support/SupportChatModal.js +516 -0
  21. package/lib/module/support/SupportChatModal.js.map +1 -0
  22. package/lib/module/support/TicketStore.js +93 -0
  23. package/lib/module/support/TicketStore.js.map +1 -0
  24. package/lib/module/support/escalateTool.js +39 -13
  25. package/lib/module/support/escalateTool.js.map +1 -1
  26. package/lib/module/support/index.js.map +1 -1
  27. package/lib/typescript/src/components/AIAgent.d.ts +24 -1
  28. package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
  29. package/lib/typescript/src/components/AgentChatBar.d.ts +24 -2
  30. package/lib/typescript/src/components/AgentChatBar.d.ts.map +1 -1
  31. package/lib/typescript/src/config/endpoints.d.ts +18 -0
  32. package/lib/typescript/src/config/endpoints.d.ts.map +1 -0
  33. package/lib/typescript/src/core/systemPrompt.d.ts +4 -13
  34. package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -1
  35. package/lib/typescript/src/core/types.d.ts +1 -1
  36. package/lib/typescript/src/core/types.d.ts.map +1 -1
  37. package/lib/typescript/src/hooks/useAction.d.ts +2 -2
  38. package/lib/typescript/src/hooks/useAction.d.ts.map +1 -1
  39. package/lib/typescript/src/index.d.ts +1 -1
  40. package/lib/typescript/src/index.d.ts.map +1 -1
  41. package/lib/typescript/src/services/AudioInputService.d.ts.map +1 -1
  42. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -1
  43. package/lib/typescript/src/services/telemetry/device.d.ts +15 -4
  44. package/lib/typescript/src/services/telemetry/device.d.ts.map +1 -1
  45. package/lib/typescript/src/support/EscalationSocket.d.ts +7 -1
  46. package/lib/typescript/src/support/EscalationSocket.d.ts.map +1 -1
  47. package/lib/typescript/src/support/SupportChatModal.d.ts +19 -0
  48. package/lib/typescript/src/support/SupportChatModal.d.ts.map +1 -0
  49. package/lib/typescript/src/support/TicketStore.d.ts +34 -0
  50. package/lib/typescript/src/support/TicketStore.d.ts.map +1 -0
  51. package/lib/typescript/src/support/escalateTool.d.ts +15 -1
  52. package/lib/typescript/src/support/escalateTool.d.ts.map +1 -1
  53. package/lib/typescript/src/support/index.d.ts +1 -1
  54. package/lib/typescript/src/support/index.d.ts.map +1 -1
  55. package/lib/typescript/src/support/types.d.ts +15 -0
  56. package/lib/typescript/src/support/types.d.ts.map +1 -1
  57. package/package.json +5 -1
  58. package/src/components/AIAgent.tsx +507 -36
  59. package/src/components/AgentChatBar.tsx +355 -9
  60. package/src/config/endpoints.ts +22 -0
  61. package/src/core/systemPrompt.ts +126 -100
  62. package/src/core/types.ts +1 -1
  63. package/src/hooks/useAction.ts +2 -2
  64. package/src/index.ts +1 -0
  65. package/src/services/AudioInputService.ts +9 -0
  66. package/src/services/flags/FlagService.ts +1 -1
  67. package/src/services/telemetry/TelemetryService.ts +40 -13
  68. package/src/services/telemetry/device.ts +88 -11
  69. package/src/support/EscalationSocket.ts +47 -8
  70. package/src/support/SupportChatModal.tsx +527 -0
  71. package/src/support/TicketStore.ts +100 -0
  72. package/src/support/escalateTool.ts +47 -13
  73. package/src/support/index.ts +1 -0
  74. package/src/support/types.ts +14 -0
@@ -0,0 +1,516 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * SupportChatModal — full-screen chat modal for human support conversations.
5
+ * Shows message history (bubbles with timestamps/avatars), typing indicator, and reply input.
6
+ * Supports native swipe-down-to-dismiss on iOS pageSheet.
7
+ */
8
+
9
+ import { useState, useEffect, useRef } from 'react';
10
+ import { Modal, View, Text, TextInput, Pressable, ScrollView, StyleSheet, Platform, StatusBar, Keyboard } from 'react-native';
11
+ import { CloseIcon, SendArrowIcon, LoadingDots } from "../components/Icons.js";
12
+
13
+ // ─── Props ─────────────────────────────────────────────────────
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ // ─── Helpers ───────────────────────────────────────────────────
16
+
17
+ function formatRelativeTime(timestamp) {
18
+ const diff = Date.now() - timestamp;
19
+ if (diff < 60000) return 'just now';
20
+ if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;
21
+ if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;
22
+ return new Date(timestamp).toLocaleDateString();
23
+ }
24
+ function shouldShowDateSeparator(prev, curr) {
25
+ if (!prev) return true;
26
+ const prevDay = new Date(prev.timestamp).toDateString();
27
+ const currDay = new Date(curr.timestamp).toDateString();
28
+ return prevDay !== currDay;
29
+ }
30
+ function formatDateSeparator(timestamp) {
31
+ const now = new Date();
32
+ const date = new Date(timestamp);
33
+ if (date.toDateString() === now.toDateString()) return 'Today';
34
+ const yesterday = new Date(now);
35
+ yesterday.setDate(yesterday.getDate() - 1);
36
+ if (date.toDateString() === yesterday.toDateString()) return 'Yesterday';
37
+ return date.toLocaleDateString(undefined, {
38
+ month: 'short',
39
+ day: 'numeric'
40
+ });
41
+ }
42
+
43
+ // ─── Agent Avatar ──────────────────────────────────────────────
44
+
45
+ function AgentAvatar() {
46
+ return /*#__PURE__*/_jsxs(View, {
47
+ style: s.agentAvatar,
48
+ children: [/*#__PURE__*/_jsx(View, {
49
+ style: s.avatarHead
50
+ }), /*#__PURE__*/_jsx(View, {
51
+ style: s.avatarBody
52
+ })]
53
+ });
54
+ }
55
+
56
+ // ─── Main Component ────────────────────────────────────────────
57
+
58
+ export function SupportChatModal({
59
+ visible,
60
+ messages,
61
+ onSend,
62
+ onClose,
63
+ isAgentTyping = false,
64
+ isThinking = false,
65
+ scrollToEndTrigger = 0
66
+ }) {
67
+ const [text, setText] = useState('');
68
+ const [keyboardHeight, setKeyboardHeight] = useState(0);
69
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
70
+ const scrollRef = useRef(null);
71
+
72
+ // Scroll to bottom when new messages arrive or typing indicator changes
73
+ useEffect(() => {
74
+ if (messages.length > 0 || isAgentTyping) {
75
+ setTimeout(() => scrollRef.current?.scrollToEnd?.({
76
+ animated: true
77
+ }), 150);
78
+ }
79
+ }, [messages.length, isAgentTyping]);
80
+
81
+ // Scroll when externally triggered (e.g., after message update in parent)
82
+ useEffect(() => {
83
+ if (scrollToEndTrigger && scrollToEndTrigger > 0) {
84
+ setTimeout(() => scrollRef.current?.scrollToEnd?.({
85
+ animated: true
86
+ }), 200);
87
+ }
88
+ }, [scrollToEndTrigger]);
89
+
90
+ // Manually track keyboard height — reliable inside iOS pageSheet modals
91
+ // where KeyboardAvoidingView miscalculates the offset from screen origin.
92
+ useEffect(() => {
93
+ const showSub = Keyboard.addListener('keyboardWillShow', e => {
94
+ setKeyboardHeight(e.endCoordinates.height);
95
+ setTimeout(() => scrollRef.current?.scrollToEnd?.({
96
+ animated: true
97
+ }), 100);
98
+ });
99
+ const hideSub = Keyboard.addListener('keyboardWillHide', () => {
100
+ setKeyboardHeight(0);
101
+ });
102
+ return () => {
103
+ showSub.remove();
104
+ hideSub.remove();
105
+ };
106
+ }, []);
107
+ const handleSend = () => {
108
+ if (!text.trim() || isThinking) return;
109
+ onSend(text.trim());
110
+ setText('');
111
+ };
112
+ const isEmpty = messages.length === 0 && !isAgentTyping;
113
+ return /*#__PURE__*/_jsxs(Modal, {
114
+ visible: visible,
115
+ animationType: "slide",
116
+ presentationStyle: "pageSheet",
117
+ onRequestClose: onClose,
118
+ children: [/*#__PURE__*/_jsx(StatusBar, {
119
+ barStyle: "light-content"
120
+ }), /*#__PURE__*/_jsxs(View, {
121
+ style: [s.container, keyboardHeight > 0 && {
122
+ paddingBottom: keyboardHeight
123
+ }],
124
+ children: [/*#__PURE__*/_jsx(View, {
125
+ style: s.dragHandle,
126
+ children: /*#__PURE__*/_jsx(View, {
127
+ style: s.dragGrip
128
+ })
129
+ }), /*#__PURE__*/_jsxs(View, {
130
+ style: s.header,
131
+ children: [/*#__PURE__*/_jsx(Pressable, {
132
+ onPress: onClose,
133
+ style: s.headerBtn,
134
+ hitSlop: 12,
135
+ children: /*#__PURE__*/_jsx(CloseIcon, {
136
+ size: 20,
137
+ color: "rgba(255,255,255,0.7)"
138
+ })
139
+ }), /*#__PURE__*/_jsxs(View, {
140
+ style: s.headerCenter,
141
+ children: [/*#__PURE__*/_jsx(Text, {
142
+ style: s.headerTitle,
143
+ children: "Support Chat"
144
+ }), /*#__PURE__*/_jsxs(View, {
145
+ style: s.headerStatus,
146
+ children: [/*#__PURE__*/_jsx(View, {
147
+ style: s.statusDot
148
+ }), /*#__PURE__*/_jsx(Text, {
149
+ style: s.headerSubtitle,
150
+ children: "Agent online"
151
+ })]
152
+ })]
153
+ }), /*#__PURE__*/_jsx(View, {
154
+ style: s.headerBtn
155
+ })]
156
+ }), isEmpty ? /*#__PURE__*/_jsxs(View, {
157
+ style: s.emptyState,
158
+ children: [/*#__PURE__*/_jsxs(View, {
159
+ style: s.emptyIcon,
160
+ children: [/*#__PURE__*/_jsx(View, {
161
+ style: s.emptyBubble
162
+ }), /*#__PURE__*/_jsx(View, {
163
+ style: s.emptyTail
164
+ })]
165
+ }), /*#__PURE__*/_jsx(Text, {
166
+ style: s.emptyTitle,
167
+ children: "No messages yet"
168
+ }), /*#__PURE__*/_jsx(Text, {
169
+ style: s.emptySubtitle,
170
+ children: "Start the conversation below"
171
+ })]
172
+ }) : /*#__PURE__*/_jsxs(ScrollView, {
173
+ ref: scrollRef,
174
+ style: s.messagesList,
175
+ contentContainerStyle: s.messagesContent,
176
+ showsVerticalScrollIndicator: false,
177
+ keyboardShouldPersistTaps: "handled",
178
+ children: [messages.map((msg, i) => {
179
+ const isUser = msg.role === 'user';
180
+ const prev = messages[i - 1];
181
+ const showDate = shouldShowDateSeparator(prev, msg);
182
+ return /*#__PURE__*/_jsxs(View, {
183
+ children: [showDate && /*#__PURE__*/_jsxs(View, {
184
+ style: s.dateSeparator,
185
+ children: [/*#__PURE__*/_jsx(View, {
186
+ style: s.dateLine
187
+ }), /*#__PURE__*/_jsx(Text, {
188
+ style: s.dateText,
189
+ children: formatDateSeparator(msg.timestamp)
190
+ }), /*#__PURE__*/_jsx(View, {
191
+ style: s.dateLine
192
+ })]
193
+ }), /*#__PURE__*/_jsxs(View, {
194
+ style: [s.messageRow, isUser && s.messageRowUser],
195
+ children: [!isUser && /*#__PURE__*/_jsx(AgentAvatar, {}), /*#__PURE__*/_jsxs(View, {
196
+ style: s.bubbleColumn,
197
+ children: [/*#__PURE__*/_jsx(View, {
198
+ style: [s.bubble, isUser ? s.bubbleUser : s.bubbleAgent],
199
+ children: /*#__PURE__*/_jsx(Text, {
200
+ style: [s.bubbleText, !isUser && s.bubbleTextAgent],
201
+ children: msg.content
202
+ })
203
+ }), /*#__PURE__*/_jsx(Text, {
204
+ style: [s.timestamp, isUser && s.timestampUser],
205
+ children: formatRelativeTime(msg.timestamp)
206
+ })]
207
+ })]
208
+ })]
209
+ }, msg.id);
210
+ }), isAgentTyping && /*#__PURE__*/_jsxs(View, {
211
+ style: s.messageRow,
212
+ children: [/*#__PURE__*/_jsx(AgentAvatar, {}), /*#__PURE__*/_jsx(View, {
213
+ style: s.bubbleColumn,
214
+ children: /*#__PURE__*/_jsx(View, {
215
+ style: [s.bubble, s.bubbleAgent, s.typingBubble],
216
+ children: /*#__PURE__*/_jsx(LoadingDots, {
217
+ size: 20,
218
+ color: "rgba(255,255,255,0.6)"
219
+ })
220
+ })
221
+ })]
222
+ })]
223
+ }), /*#__PURE__*/_jsxs(View, {
224
+ style: s.inputRow,
225
+ children: [/*#__PURE__*/_jsx(TextInput, {
226
+ style: s.input,
227
+ placeholder: "Type a message...",
228
+ placeholderTextColor: "rgba(255,255,255,0.35)",
229
+ value: text,
230
+ onChangeText: setText,
231
+ onSubmitEditing: handleSend,
232
+ returnKeyType: "send",
233
+ editable: !isThinking
234
+ }), /*#__PURE__*/_jsx(Pressable, {
235
+ style: [s.sendBtn, text.trim() && !isThinking ? s.sendBtnActive : s.sendBtnInactive],
236
+ onPress: handleSend,
237
+ disabled: !text.trim() || isThinking,
238
+ children: /*#__PURE__*/_jsx(SendArrowIcon, {
239
+ size: 18,
240
+ color: text.trim() && !isThinking ? '#fff' : 'rgba(255,255,255,0.3)'
241
+ })
242
+ })]
243
+ })]
244
+ })]
245
+ });
246
+ }
247
+
248
+ // ─── Styles ────────────────────────────────────────────────────
249
+
250
+ const s = StyleSheet.create({
251
+ container: {
252
+ flex: 1,
253
+ backgroundColor: '#0f0f1e'
254
+ },
255
+ // ── Drag Handle ──
256
+ dragHandle: {
257
+ alignItems: 'center',
258
+ paddingTop: Platform.OS === 'ios' ? 52 : 16,
259
+ paddingBottom: 6
260
+ },
261
+ dragGrip: {
262
+ width: 36,
263
+ height: 5,
264
+ borderRadius: 3,
265
+ backgroundColor: 'rgba(255,255,255,0.2)'
266
+ },
267
+ // ── Header ──
268
+ header: {
269
+ flexDirection: 'row',
270
+ alignItems: 'center',
271
+ justifyContent: 'space-between',
272
+ paddingHorizontal: 12,
273
+ paddingTop: 10,
274
+ paddingBottom: 14,
275
+ backgroundColor: 'rgba(255,255,255,0.03)',
276
+ borderBottomWidth: StyleSheet.hairlineWidth,
277
+ borderBottomColor: 'rgba(255,255,255,0.08)'
278
+ },
279
+ headerBtn: {
280
+ width: 36,
281
+ height: 36,
282
+ alignItems: 'center',
283
+ justifyContent: 'center'
284
+ },
285
+ headerCenter: {
286
+ alignItems: 'center'
287
+ },
288
+ headerTitle: {
289
+ color: '#fff',
290
+ fontSize: 17,
291
+ fontWeight: '700',
292
+ letterSpacing: 0.3
293
+ },
294
+ headerStatus: {
295
+ flexDirection: 'row',
296
+ alignItems: 'center',
297
+ gap: 5,
298
+ marginTop: 3
299
+ },
300
+ statusDot: {
301
+ width: 7,
302
+ height: 7,
303
+ borderRadius: 4,
304
+ backgroundColor: '#34C759'
305
+ },
306
+ headerSubtitle: {
307
+ color: 'rgba(255,255,255,0.5)',
308
+ fontSize: 12,
309
+ fontWeight: '500'
310
+ },
311
+ // ── Messages ──
312
+ messagesList: {
313
+ flex: 1
314
+ },
315
+ messagesContent: {
316
+ paddingHorizontal: 16,
317
+ paddingVertical: 12,
318
+ paddingBottom: 16
319
+ },
320
+ // ── Date Separator ──
321
+ dateSeparator: {
322
+ flexDirection: 'row',
323
+ alignItems: 'center',
324
+ paddingVertical: 16,
325
+ gap: 12
326
+ },
327
+ dateLine: {
328
+ flex: 1,
329
+ height: StyleSheet.hairlineWidth,
330
+ backgroundColor: 'rgba(255,255,255,0.08)'
331
+ },
332
+ dateText: {
333
+ color: 'rgba(255,255,255,0.3)',
334
+ fontSize: 11,
335
+ fontWeight: '600',
336
+ textTransform: 'uppercase',
337
+ letterSpacing: 0.5
338
+ },
339
+ // ── Message Row ──
340
+ messageRow: {
341
+ flexDirection: 'row',
342
+ alignItems: 'flex-end',
343
+ marginBottom: 4,
344
+ gap: 8
345
+ },
346
+ messageRowUser: {
347
+ justifyContent: 'flex-end'
348
+ },
349
+ bubbleColumn: {
350
+ maxWidth: '72%'
351
+ },
352
+ // ── Bubble ──
353
+ bubble: {
354
+ borderRadius: 18,
355
+ paddingHorizontal: 14,
356
+ paddingVertical: 10
357
+ },
358
+ bubbleUser: {
359
+ backgroundColor: '#7B68EE',
360
+ borderBottomRightRadius: 6,
361
+ elevation: 2,
362
+ shadowColor: '#7B68EE',
363
+ shadowOffset: {
364
+ width: 0,
365
+ height: 2
366
+ },
367
+ shadowOpacity: 0.25,
368
+ shadowRadius: 4
369
+ },
370
+ bubbleAgent: {
371
+ backgroundColor: 'rgba(255,255,255,0.08)',
372
+ borderBottomLeftRadius: 6
373
+ },
374
+ bubbleText: {
375
+ fontSize: 15,
376
+ lineHeight: 21,
377
+ color: '#fff'
378
+ },
379
+ bubbleTextAgent: {
380
+ color: 'rgba(255,255,255,0.9)'
381
+ },
382
+ // ── Timestamp ──
383
+ timestamp: {
384
+ color: 'rgba(255,255,255,0.25)',
385
+ fontSize: 11,
386
+ marginTop: 4,
387
+ marginLeft: 4,
388
+ marginBottom: 6
389
+ },
390
+ timestampUser: {
391
+ textAlign: 'right',
392
+ marginRight: 4,
393
+ marginLeft: 0
394
+ },
395
+ // ── Agent Avatar ──
396
+ agentAvatar: {
397
+ width: 30,
398
+ height: 30,
399
+ borderRadius: 15,
400
+ backgroundColor: '#7B68EE',
401
+ alignItems: 'center',
402
+ justifyContent: 'center',
403
+ marginBottom: 14
404
+ },
405
+ avatarHead: {
406
+ width: 10,
407
+ height: 10,
408
+ borderRadius: 5,
409
+ backgroundColor: 'rgba(255,255,255,0.9)',
410
+ marginTop: 2
411
+ },
412
+ avatarBody: {
413
+ width: 16,
414
+ height: 6,
415
+ borderTopLeftRadius: 8,
416
+ borderTopRightRadius: 8,
417
+ backgroundColor: 'rgba(255,255,255,0.9)',
418
+ marginTop: 1
419
+ },
420
+ // ── Typing Indicator ──
421
+ typingBubble: {
422
+ flexDirection: 'row',
423
+ alignItems: 'center',
424
+ paddingVertical: 12,
425
+ paddingHorizontal: 16,
426
+ minWidth: 60
427
+ },
428
+ // ── Empty State ──
429
+ emptyState: {
430
+ flex: 1,
431
+ alignItems: 'center',
432
+ justifyContent: 'center',
433
+ paddingBottom: 60
434
+ },
435
+ emptyIcon: {
436
+ width: 64,
437
+ height: 64,
438
+ alignItems: 'center',
439
+ justifyContent: 'center',
440
+ marginBottom: 20
441
+ },
442
+ emptyBubble: {
443
+ width: 48,
444
+ height: 36,
445
+ borderRadius: 12,
446
+ backgroundColor: 'rgba(255,255,255,0.08)',
447
+ borderWidth: 1,
448
+ borderColor: 'rgba(255,255,255,0.12)'
449
+ },
450
+ emptyTail: {
451
+ position: 'absolute',
452
+ bottom: 10,
453
+ left: 16,
454
+ width: 0,
455
+ height: 0,
456
+ borderTopWidth: 8,
457
+ borderTopColor: 'rgba(255,255,255,0.08)',
458
+ borderRightWidth: 8,
459
+ borderRightColor: 'transparent'
460
+ },
461
+ emptyTitle: {
462
+ color: 'rgba(255,255,255,0.5)',
463
+ fontSize: 17,
464
+ fontWeight: '600',
465
+ marginBottom: 6
466
+ },
467
+ emptySubtitle: {
468
+ color: 'rgba(255,255,255,0.25)',
469
+ fontSize: 14
470
+ },
471
+ // ── Input Row ──
472
+ inputRow: {
473
+ flexDirection: 'row',
474
+ alignItems: 'center',
475
+ gap: 10,
476
+ paddingHorizontal: 16,
477
+ paddingVertical: 12,
478
+ paddingBottom: Platform.OS === 'ios' ? 36 : 16,
479
+ backgroundColor: 'rgba(255,255,255,0.02)',
480
+ borderTopWidth: StyleSheet.hairlineWidth,
481
+ borderTopColor: 'rgba(255,255,255,0.06)'
482
+ },
483
+ input: {
484
+ flex: 1,
485
+ backgroundColor: 'rgba(255,255,255,0.06)',
486
+ borderWidth: 1,
487
+ borderColor: 'rgba(255,255,255,0.08)',
488
+ borderRadius: 24,
489
+ paddingHorizontal: 18,
490
+ paddingVertical: 11,
491
+ color: '#fff',
492
+ fontSize: 16
493
+ },
494
+ sendBtn: {
495
+ width: 42,
496
+ height: 42,
497
+ borderRadius: 21,
498
+ justifyContent: 'center',
499
+ alignItems: 'center'
500
+ },
501
+ sendBtnActive: {
502
+ backgroundColor: '#7B68EE',
503
+ elevation: 3,
504
+ shadowColor: '#7B68EE',
505
+ shadowOffset: {
506
+ width: 0,
507
+ height: 2
508
+ },
509
+ shadowOpacity: 0.3,
510
+ shadowRadius: 4
511
+ },
512
+ sendBtnInactive: {
513
+ backgroundColor: 'rgba(255,255,255,0.06)'
514
+ }
515
+ });
516
+ //# sourceMappingURL=SupportChatModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useEffect","useRef","Modal","View","Text","TextInput","Pressable","ScrollView","StyleSheet","Platform","StatusBar","Keyboard","CloseIcon","SendArrowIcon","LoadingDots","jsx","_jsx","jsxs","_jsxs","formatRelativeTime","timestamp","diff","Date","now","Math","floor","toLocaleDateString","shouldShowDateSeparator","prev","curr","prevDay","toDateString","currDay","formatDateSeparator","date","yesterday","setDate","getDate","undefined","month","day","AgentAvatar","style","s","agentAvatar","children","avatarHead","avatarBody","SupportChatModal","visible","messages","onSend","onClose","isAgentTyping","isThinking","scrollToEndTrigger","text","setText","keyboardHeight","setKeyboardHeight","scrollRef","length","setTimeout","current","scrollToEnd","animated","showSub","addListener","e","endCoordinates","height","hideSub","remove","handleSend","trim","isEmpty","animationType","presentationStyle","onRequestClose","barStyle","container","paddingBottom","dragHandle","dragGrip","header","onPress","headerBtn","hitSlop","size","color","headerCenter","headerTitle","headerStatus","statusDot","headerSubtitle","emptyState","emptyIcon","emptyBubble","emptyTail","emptyTitle","emptySubtitle","ref","messagesList","contentContainerStyle","messagesContent","showsVerticalScrollIndicator","keyboardShouldPersistTaps","map","msg","i","isUser","role","showDate","dateSeparator","dateLine","dateText","messageRow","messageRowUser","bubbleColumn","bubble","bubbleUser","bubbleAgent","bubbleText","bubbleTextAgent","content","timestampUser","id","typingBubble","inputRow","input","placeholder","placeholderTextColor","value","onChangeText","onSubmitEditing","returnKeyType","editable","sendBtn","sendBtnActive","sendBtnInactive","disabled","create","flex","backgroundColor","alignItems","paddingTop","OS","width","borderRadius","flexDirection","justifyContent","paddingHorizontal","borderBottomWidth","hairlineWidth","borderBottomColor","fontSize","fontWeight","letterSpacing","gap","marginTop","paddingVertical","textTransform","marginBottom","maxWidth","borderBottomRightRadius","elevation","shadowColor","shadowOffset","shadowOpacity","shadowRadius","borderBottomLeftRadius","lineHeight","marginLeft","textAlign","marginRight","borderTopLeftRadius","borderTopRightRadius","minWidth","borderWidth","borderColor","position","bottom","left","borderTopWidth","borderTopColor","borderRightWidth","borderRightColor"],"sourceRoot":"../../../src","sources":["support/SupportChatModal.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * TicketStore — persists the active support ticket across app restarts.
5
+ *
6
+ * Uses @react-native-async-storage/async-storage as an optional peer dependency.
7
+ * If AsyncStorage is not installed, all methods silently no-op and the feature
8
+ * degrades gracefully (tickets are still shown while the app is open, just not
9
+ * restored after a restart).
10
+ *
11
+ * Usage:
12
+ * await TicketStore.save(ticketId, analyticsKey); // on escalation start
13
+ * const pending = await TicketStore.get(); // on AIAgent mount
14
+ * await TicketStore.clear(); // on modal close / ticket closed
15
+ */
16
+
17
+ const STORAGE_KEY = '@mobileai_pending_ticket';
18
+ /** Try to load AsyncStorage at runtime. Optional peer dep — not bundled. */
19
+ function getAsyncStorage() {
20
+ try {
21
+ // Suppress the RN red box that AsyncStorage triggers when its native module
22
+ // isn't linked ("NativeModule: AsyncStorage is null").
23
+ const origError = console.error;
24
+ console.error = (...args) => {
25
+ const msg = args[0];
26
+ if (typeof msg === 'string' && msg.includes('AsyncStorage')) return;
27
+ origError.apply(console, args);
28
+ };
29
+ try {
30
+ const mod = require('@react-native-async-storage/async-storage');
31
+ const candidate = mod?.default ?? mod?.AsyncStorage ?? null;
32
+ if (candidate && typeof candidate.getItem === 'function') {
33
+ return candidate;
34
+ }
35
+ return null;
36
+ } finally {
37
+ console.error = origError;
38
+ }
39
+ } catch {
40
+ return null;
41
+ }
42
+ }
43
+ export const TicketStore = {
44
+ /**
45
+ * Persist the active ticket so it survives an app restart.
46
+ */
47
+ async save(ticketId, analyticsKey) {
48
+ const AS = getAsyncStorage();
49
+ if (!AS) {
50
+ console.warn('[TicketStore] @react-native-async-storage/async-storage is not installed — ' + 'ticket will not persist across app restarts. ' + 'Run: npx expo install @react-native-async-storage/async-storage');
51
+ return;
52
+ }
53
+ try {
54
+ await AS.setItem(STORAGE_KEY, JSON.stringify({
55
+ ticketId,
56
+ analyticsKey
57
+ }));
58
+ console.log('[TicketStore] Ticket saved:', ticketId);
59
+ } catch (err) {
60
+ console.error('[TicketStore] Failed to save ticket:', err);
61
+ }
62
+ },
63
+ /**
64
+ * Retrieve the persisted pending ticket, if any.
65
+ * Returns null if nothing is stored or AsyncStorage is unavailable.
66
+ */
67
+ async get() {
68
+ const AS = getAsyncStorage();
69
+ if (!AS) return null;
70
+ try {
71
+ const raw = await AS.getItem(STORAGE_KEY);
72
+ if (!raw) return null;
73
+ return JSON.parse(raw);
74
+ } catch (err) {
75
+ console.error('[TicketStore] Failed to read ticket:', err);
76
+ return null;
77
+ }
78
+ },
79
+ /**
80
+ * Remove the stored ticket (ticket closed or user dismissed modal).
81
+ */
82
+ async clear() {
83
+ const AS = getAsyncStorage();
84
+ if (!AS) return;
85
+ try {
86
+ await AS.removeItem(STORAGE_KEY);
87
+ console.log('[TicketStore] Pending ticket cleared');
88
+ } catch (err) {
89
+ console.error('[TicketStore] Failed to clear ticket:', err);
90
+ }
91
+ }
92
+ };
93
+ //# sourceMappingURL=TicketStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["STORAGE_KEY","getAsyncStorage","origError","console","error","args","msg","includes","apply","mod","require","candidate","default","AsyncStorage","getItem","TicketStore","save","ticketId","analyticsKey","AS","warn","setItem","JSON","stringify","log","err","get","raw","parse","clear","removeItem"],"sourceRoot":"../../../src","sources":["support/TicketStore.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,WAAW,GAAG,0BAA0B;AAO9C;AACA,SAASC,eAAeA,CAAA,EAAe;EACrC,IAAI;IACF;IACA;IACA,MAAMC,SAAS,GAAGC,OAAO,CAACC,KAAK;IAC/BD,OAAO,CAACC,KAAK,GAAG,CAAC,GAAGC,IAAe,KAAK;MACtC,MAAMC,GAAG,GAAGD,IAAI,CAAC,CAAC,CAAC;MACnB,IAAI,OAAOC,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACC,QAAQ,CAAC,cAAc,CAAC,EAAE;MAC7DL,SAAS,CAACM,KAAK,CAACL,OAAO,EAAEE,IAAI,CAAC;IAChC,CAAC;IACD,IAAI;MACF,MAAMI,GAAG,GAAGC,OAAO,CAAC,2CAA2C,CAAC;MAChE,MAAMC,SAAS,GAAGF,GAAG,EAAEG,OAAO,IAAIH,GAAG,EAAEI,YAAY,IAAI,IAAI;MAC3D,IAAIF,SAAS,IAAI,OAAOA,SAAS,CAACG,OAAO,KAAK,UAAU,EAAE;QACxD,OAAOH,SAAS;MAClB;MACA,OAAO,IAAI;IACb,CAAC,SAAS;MACRR,OAAO,CAACC,KAAK,GAAGF,SAAS;IAC3B;EACF,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEA,OAAO,MAAMa,WAAW,GAAG;EACzB;AACF;AACA;EACE,MAAMC,IAAIA,CAACC,QAAgB,EAAEC,YAAoB,EAAiB;IAChE,MAAMC,EAAE,GAAGlB,eAAe,CAAC,CAAC;IAC5B,IAAI,CAACkB,EAAE,EAAE;MACPhB,OAAO,CAACiB,IAAI,CACV,6EAA6E,GAC7E,+CAA+C,GAC/C,iEACF,CAAC;MACD;IACF;IACA,IAAI;MACF,MAAMD,EAAE,CAACE,OAAO,CAACrB,WAAW,EAAEsB,IAAI,CAACC,SAAS,CAAC;QAAEN,QAAQ;QAAEC;MAAa,CAAC,CAAC,CAAC;MACzEf,OAAO,CAACqB,GAAG,CAAC,6BAA6B,EAAEP,QAAQ,CAAC;IACtD,CAAC,CAAC,OAAOQ,GAAG,EAAE;MACZtB,OAAO,CAACC,KAAK,CAAC,sCAAsC,EAAEqB,GAAG,CAAC;IAC5D;EACF,CAAC;EAED;AACF;AACA;AACA;EACE,MAAMC,GAAGA,CAAA,EAAkC;IACzC,MAAMP,EAAE,GAAGlB,eAAe,CAAC,CAAC;IAC5B,IAAI,CAACkB,EAAE,EAAE,OAAO,IAAI;IACpB,IAAI;MACF,MAAMQ,GAAG,GAAG,MAAMR,EAAE,CAACL,OAAO,CAACd,WAAW,CAAC;MACzC,IAAI,CAAC2B,GAAG,EAAE,OAAO,IAAI;MACrB,OAAOL,IAAI,CAACM,KAAK,CAACD,GAAG,CAAC;IACxB,CAAC,CAAC,OAAOF,GAAG,EAAE;MACZtB,OAAO,CAACC,KAAK,CAAC,sCAAsC,EAAEqB,GAAG,CAAC;MAC1D,OAAO,IAAI;IACb;EACF,CAAC;EAED;AACF;AACA;EACE,MAAMI,KAAKA,CAAA,EAAkB;IAC3B,MAAMV,EAAE,GAAGlB,eAAe,CAAC,CAAC;IAC5B,IAAI,CAACkB,EAAE,EAAE;IACT,IAAI;MACF,MAAMA,EAAE,CAACW,UAAU,CAAC9B,WAAW,CAAC;MAChCG,OAAO,CAACqB,GAAG,CAAC,sCAAsC,CAAC;IACrD,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZtB,OAAO,CAACC,KAAK,CAAC,uCAAuC,EAAEqB,GAAG,CAAC;IAC7D;EACF;AACF,CAAC","ignoreList":[]}