@ringg/react-native 0.0.1-alpha.10

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 (112) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +250 -0
  3. package/app.plugin.js +51 -0
  4. package/lib/module/adapters/index.js +4 -0
  5. package/lib/module/adapters/index.js.map +1 -0
  6. package/lib/module/adapters/livekit-rn-adapter.js +216 -0
  7. package/lib/module/adapters/livekit-rn-adapter.js.map +1 -0
  8. package/lib/module/components/RinggWidget.js +554 -0
  9. package/lib/module/components/RinggWidget.js.map +1 -0
  10. package/lib/module/components/steps/ButtonsStep.js +146 -0
  11. package/lib/module/components/steps/ButtonsStep.js.map +1 -0
  12. package/lib/module/components/steps/CalendarStep.js +190 -0
  13. package/lib/module/components/steps/CalendarStep.js.map +1 -0
  14. package/lib/module/components/steps/ConfirmationStep.js +175 -0
  15. package/lib/module/components/steps/ConfirmationStep.js.map +1 -0
  16. package/lib/module/components/steps/FormStep.js +346 -0
  17. package/lib/module/components/steps/FormStep.js.map +1 -0
  18. package/lib/module/components/steps/InteractiveFlow.js +249 -0
  19. package/lib/module/components/steps/InteractiveFlow.js.map +1 -0
  20. package/lib/module/components/ui/ActionButton.js +92 -0
  21. package/lib/module/components/ui/ActionButton.js.map +1 -0
  22. package/lib/module/components/ui/CallControls.js +168 -0
  23. package/lib/module/components/ui/CallControls.js.map +1 -0
  24. package/lib/module/components/ui/FeedbackScreen.js +180 -0
  25. package/lib/module/components/ui/FeedbackScreen.js.map +1 -0
  26. package/lib/module/components/ui/Icons.js +294 -0
  27. package/lib/module/components/ui/Icons.js.map +1 -0
  28. package/lib/module/components/ui/MessageBubble.js +80 -0
  29. package/lib/module/components/ui/MessageBubble.js.map +1 -0
  30. package/lib/module/components/ui/TabSelector.js +80 -0
  31. package/lib/module/components/ui/TabSelector.js.map +1 -0
  32. package/lib/module/components/ui/WidgetHeader.js +168 -0
  33. package/lib/module/components/ui/WidgetHeader.js.map +1 -0
  34. package/lib/module/context/RinggProvider.js +134 -0
  35. package/lib/module/context/RinggProvider.js.map +1 -0
  36. package/lib/module/context/index.js +4 -0
  37. package/lib/module/context/index.js.map +1 -0
  38. package/lib/module/globals.d.js +2 -0
  39. package/lib/module/globals.d.js.map +1 -0
  40. package/lib/module/hooks/index.js +10 -0
  41. package/lib/module/hooks/index.js.map +1 -0
  42. package/lib/module/hooks/useRinggCall.js +259 -0
  43. package/lib/module/hooks/useRinggCall.js.map +1 -0
  44. package/lib/module/hooks/useRinggChat.js +141 -0
  45. package/lib/module/hooks/useRinggChat.js.map +1 -0
  46. package/lib/module/hooks/useRinggComponents.js +236 -0
  47. package/lib/module/hooks/useRinggComponents.js.map +1 -0
  48. package/lib/module/hooks/useRinggFeedback.js +66 -0
  49. package/lib/module/hooks/useRinggFeedback.js.map +1 -0
  50. package/lib/module/hooks/useRinggTheme.js +39 -0
  51. package/lib/module/hooks/useRinggTheme.js.map +1 -0
  52. package/lib/module/hooks/useRinggTranscripts.js +70 -0
  53. package/lib/module/hooks/useRinggTranscripts.js.map +1 -0
  54. package/lib/module/hooks/useRinggWidgetState.js +51 -0
  55. package/lib/module/hooks/useRinggWidgetState.js.map +1 -0
  56. package/lib/module/index.js +56 -0
  57. package/lib/module/index.js.map +1 -0
  58. package/lib/module/package.json +1 -0
  59. package/lib/typescript/adapters/index.d.ts +2 -0
  60. package/lib/typescript/adapters/index.d.ts.map +1 -0
  61. package/lib/typescript/adapters/livekit-rn-adapter.d.ts +38 -0
  62. package/lib/typescript/adapters/livekit-rn-adapter.d.ts.map +1 -0
  63. package/lib/typescript/components/RinggWidget.d.ts +44 -0
  64. package/lib/typescript/components/RinggWidget.d.ts.map +1 -0
  65. package/lib/typescript/components/steps/ButtonsStep.d.ts +17 -0
  66. package/lib/typescript/components/steps/ButtonsStep.d.ts.map +1 -0
  67. package/lib/typescript/components/steps/CalendarStep.d.ts +16 -0
  68. package/lib/typescript/components/steps/CalendarStep.d.ts.map +1 -0
  69. package/lib/typescript/components/steps/ConfirmationStep.d.ts +16 -0
  70. package/lib/typescript/components/steps/ConfirmationStep.d.ts.map +1 -0
  71. package/lib/typescript/components/steps/FormStep.d.ts +17 -0
  72. package/lib/typescript/components/steps/FormStep.d.ts.map +1 -0
  73. package/lib/typescript/components/steps/InteractiveFlow.d.ts +23 -0
  74. package/lib/typescript/components/steps/InteractiveFlow.d.ts.map +1 -0
  75. package/lib/typescript/components/ui/ActionButton.d.ts +22 -0
  76. package/lib/typescript/components/ui/ActionButton.d.ts.map +1 -0
  77. package/lib/typescript/components/ui/CallControls.d.ts +22 -0
  78. package/lib/typescript/components/ui/CallControls.d.ts.map +1 -0
  79. package/lib/typescript/components/ui/FeedbackScreen.d.ts +24 -0
  80. package/lib/typescript/components/ui/FeedbackScreen.d.ts.map +1 -0
  81. package/lib/typescript/components/ui/Icons.d.ts +28 -0
  82. package/lib/typescript/components/ui/Icons.d.ts.map +1 -0
  83. package/lib/typescript/components/ui/MessageBubble.d.ts +17 -0
  84. package/lib/typescript/components/ui/MessageBubble.d.ts.map +1 -0
  85. package/lib/typescript/components/ui/TabSelector.d.ts +21 -0
  86. package/lib/typescript/components/ui/TabSelector.d.ts.map +1 -0
  87. package/lib/typescript/components/ui/WidgetHeader.d.ts +20 -0
  88. package/lib/typescript/components/ui/WidgetHeader.d.ts.map +1 -0
  89. package/lib/typescript/context/RinggProvider.d.ts +53 -0
  90. package/lib/typescript/context/RinggProvider.d.ts.map +1 -0
  91. package/lib/typescript/context/index.d.ts +3 -0
  92. package/lib/typescript/context/index.d.ts.map +1 -0
  93. package/lib/typescript/hooks/index.d.ts +15 -0
  94. package/lib/typescript/hooks/index.d.ts.map +1 -0
  95. package/lib/typescript/hooks/useRinggCall.d.ts +41 -0
  96. package/lib/typescript/hooks/useRinggCall.d.ts.map +1 -0
  97. package/lib/typescript/hooks/useRinggChat.d.ts +29 -0
  98. package/lib/typescript/hooks/useRinggChat.d.ts.map +1 -0
  99. package/lib/typescript/hooks/useRinggComponents.d.ts +52 -0
  100. package/lib/typescript/hooks/useRinggComponents.d.ts.map +1 -0
  101. package/lib/typescript/hooks/useRinggFeedback.d.ts +23 -0
  102. package/lib/typescript/hooks/useRinggFeedback.d.ts.map +1 -0
  103. package/lib/typescript/hooks/useRinggTheme.d.ts +40 -0
  104. package/lib/typescript/hooks/useRinggTheme.d.ts.map +1 -0
  105. package/lib/typescript/hooks/useRinggTranscripts.d.ts +30 -0
  106. package/lib/typescript/hooks/useRinggTranscripts.d.ts.map +1 -0
  107. package/lib/typescript/hooks/useRinggWidgetState.d.ts +38 -0
  108. package/lib/typescript/hooks/useRinggWidgetState.d.ts.map +1 -0
  109. package/lib/typescript/index.d.ts +44 -0
  110. package/lib/typescript/index.d.ts.map +1 -0
  111. package/lib/typescript/package.json +1 -0
  112. package/package.json +80 -0
@@ -0,0 +1,554 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * RinggWidget — the pre-built drop-in widget for React Native.
5
+ *
6
+ * Renders a floating action button (FAB) that opens a modal with
7
+ * voice call or text chat capabilities. Mirrors the web CDN widget
8
+ * pixel-for-pixel.
9
+ *
10
+ * Usage:
11
+ * ```tsx
12
+ * import { RinggWidget } from "@ringg/react-native";
13
+ *
14
+ * function App() {
15
+ * return (
16
+ * <View style={{ flex: 1 }}>
17
+ * <YourApp />
18
+ * <RinggWidget
19
+ * config={{
20
+ * agentId: "your-agent-id",
21
+ * xApiKey: "your-api-key",
22
+ * variables: { callee_name: "John" },
23
+ * }}
24
+ * onEvent={(event, payload) => console.log(event, payload)}
25
+ * />
26
+ * </View>
27
+ * );
28
+ * }
29
+ * ```
30
+ *
31
+ * For custom UI, use <RinggProvider> with individual hooks instead.
32
+ */
33
+
34
+ import React, { useCallback, useEffect, useRef, useState } from "react";
35
+ import { View, TouchableOpacity, FlatList, StyleSheet, Text, Alert, Linking, Dimensions, Animated } from "react-native";
36
+ import { colorToSolid, DEFAULT_CONFIG } from "@ringg/core";
37
+ import { RinggProvider, useRinggContext } from "../context/RinggProvider.js";
38
+ import { useRinggCall } from "../hooks/useRinggCall.js";
39
+ import { useRinggChat } from "../hooks/useRinggChat.js";
40
+ import { useRinggTranscripts } from "../hooks/useRinggTranscripts.js";
41
+ import { useRinggComponents } from "../hooks/useRinggComponents.js";
42
+ import { useRinggWidgetState } from "../hooks/useRinggWidgetState.js";
43
+ import { useRinggFeedback } from "../hooks/useRinggFeedback.js";
44
+ import { useRinggTheme } from "../hooks/useRinggTheme.js";
45
+ import { WidgetHeader } from "./ui/WidgetHeader.js";
46
+ import { MessageBubble } from "./ui/MessageBubble.js";
47
+ import { ActionButton } from "./ui/ActionButton.js";
48
+ import { CallControls } from "./ui/CallControls.js";
49
+ import { FeedbackScreen } from "./ui/FeedbackScreen.js";
50
+ import { TabSelector } from "./ui/TabSelector.js";
51
+ import { WidgetPhoneIcon, CloseIcon, MinusIcon } from "./ui/Icons.js";
52
+ import { InteractiveFlow } from "./steps/InteractiveFlow.js";
53
+
54
+ // ─── Public API ──────────────────────────────────────────────────────────────
55
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
56
+ /**
57
+ * Drop-in widget — wraps RinggProvider + WidgetInner.
58
+ * This is the highest-level component consumers use.
59
+ */
60
+ export function RinggWidget({
61
+ config,
62
+ urls,
63
+ onEvent,
64
+ triggerIcon,
65
+ triggerSize = 56
66
+ }) {
67
+ return /*#__PURE__*/_jsx(RinggProvider, {
68
+ config: config,
69
+ urls: urls,
70
+ onEvent: onEvent,
71
+ children: /*#__PURE__*/_jsx(WidgetInner, {
72
+ triggerIcon: triggerIcon,
73
+ triggerSize: triggerSize
74
+ })
75
+ });
76
+ }
77
+
78
+ // ─── Internal Widget ─────────────────────────────────────────────────────────
79
+
80
+ function WidgetInner({
81
+ triggerIcon,
82
+ triggerSize
83
+ }) {
84
+ const {
85
+ config
86
+ } = useRinggContext();
87
+ const {
88
+ theme,
89
+ getSolidColor
90
+ } = useRinggTheme();
91
+ const widget = useRinggWidgetState();
92
+ const call = useRinggCall();
93
+ const chat = useRinggChat();
94
+ const transcriptHook = useRinggTranscripts();
95
+ const components = useRinggComponents();
96
+ const feedback = useRinggFeedback();
97
+ const [callMode, setCallMode] = useState(config.defaultTab ?? "audio");
98
+ const title = config.title ?? DEFAULT_CONFIG.title;
99
+ const description = config.description ?? DEFAULT_CONFIG.description;
100
+
101
+ // Determine which messages to display based on call mode.
102
+ // Text mode: only chat messages (lk.transcription text stream + user sends).
103
+ // Audio mode: only STT transcripts (RoomEvent.TranscriptionReceived).
104
+ // The agent sends the same content through both lk.transcription text stream
105
+ // AND TranscriptionReceived events, so using only one source avoids duplicates.
106
+ // TranscriptionReceived is preferred in audio mode because it includes
107
+ // both the agent's speech AND the user's speech-to-text.
108
+ const displayMessages = call.callMode === "text" ? chat.messages : transcriptHook.transcripts;
109
+
110
+ // ── Inject interactive components into the chat message timeline ────────────
111
+ // When a new component arrives via RPC, push it into the chat messages as a
112
+ // ChatMessage with componentType/componentData. This way it's interleaved
113
+ // chronologically in the message list — matching CDN behavior exactly.
114
+ const injectedComponentIds = useRef(new Set());
115
+ useEffect(() => {
116
+ for (const comp of components.components) {
117
+ if (!injectedComponentIds.current.has(comp.component_id)) {
118
+ injectedComponentIds.current.add(comp.component_id);
119
+ chat.addComponentMessage({
120
+ name: "Agent",
121
+ message: "",
122
+ isSelf: false,
123
+ timestamp: Date.now() + Math.random() * 0.001,
124
+ componentType: comp.component_type,
125
+ componentData: comp
126
+ });
127
+ }
128
+ }
129
+ }, [components.components, chat]);
130
+
131
+ // ── Auto-scroll (WhatsApp-style) ───────────────────────────────────────────
132
+ // Scroll to bottom when content grows, unless the user has scrolled up.
133
+ const flatListRef = useRef(null);
134
+ const isNearBottomRef = useRef(true);
135
+ const handleScroll = useCallback(event => {
136
+ const {
137
+ contentOffset,
138
+ contentSize,
139
+ layoutMeasurement
140
+ } = event.nativeEvent;
141
+ const distanceFromBottom = contentSize.height - layoutMeasurement.height - contentOffset.y;
142
+ isNearBottomRef.current = distanceFromBottom < 80;
143
+ }, []);
144
+
145
+ // Fires every time FlatList content height changes (i.e. new messages rendered).
146
+ const handleContentSizeChange = useCallback((_w, _h) => {
147
+ if (isNearBottomRef.current) {
148
+ flatListRef.current?.scrollToEnd({
149
+ animated: true
150
+ });
151
+ }
152
+ }, []);
153
+
154
+ // Force scroll to bottom after user sends a message
155
+ const handleSendMessage = useCallback(async text => {
156
+ await chat.sendMessage(text);
157
+ // Always scroll to bottom when the user sends
158
+ isNearBottomRef.current = true;
159
+ setTimeout(() => {
160
+ flatListRef.current?.scrollToEnd({
161
+ animated: true
162
+ });
163
+ }, 100);
164
+ }, [chat]);
165
+ const handleToggleMic = useCallback(async () => {
166
+ await call.toggleMic();
167
+ }, [call]);
168
+ const handleEndCallPress = useCallback(() => {
169
+ if (call.isConnected) {
170
+ Alert.alert(`End ${call.callMode === "audio" ? "Call" : "Chat"}?`, "Your current conversation will be closed and cannot be accessed later.", [{
171
+ text: "Cancel",
172
+ style: "cancel"
173
+ }, {
174
+ text: `End ${call.callMode === "audio" ? "Call" : "Chat"}`,
175
+ style: "destructive",
176
+ onPress: () => {
177
+ chat.clearMessages();
178
+ transcriptHook.clearTranscripts();
179
+ components.clearComponents();
180
+ injectedComponentIds.current.clear();
181
+ call.endCall();
182
+ }
183
+ }]);
184
+ }
185
+ }, [call, chat, transcriptHook, components]);
186
+ const handleCallStart = useCallback(mode => {
187
+ // Clear stale data from any previous call before starting a new one
188
+ chat.clearMessages();
189
+ transcriptHook.clearTranscripts();
190
+ components.clearComponents();
191
+ injectedComponentIds.current.clear();
192
+ widget.open();
193
+ setCallMode(mode);
194
+ call.startCall(mode);
195
+ }, [call, widget, chat, transcriptHook, components]);
196
+ const handleTabChange = useCallback(tab => {
197
+ setCallMode(tab);
198
+ }, []);
199
+ const handleFeedbackSubmit = useCallback((rating, comment) => {
200
+ feedback.submitFeedback(rating, comment);
201
+ }, [feedback]);
202
+ const renderMessage = useCallback(({
203
+ item
204
+ }) => {
205
+ // Render interactive component if this message carries component data
206
+ if (item.componentType && item.componentData) {
207
+ return /*#__PURE__*/_jsx(InteractiveFlow, {
208
+ initialComponent: item.componentData,
209
+ theme: theme,
210
+ onSendResponse: components.respondToComponent
211
+ });
212
+ }
213
+ return /*#__PURE__*/_jsx(MessageBubble, {
214
+ message: item,
215
+ theme: theme
216
+ });
217
+ }, [theme, components.respondToComponent]);
218
+ const handleClosePress = useCallback(() => {
219
+ if (call.isConnected) {
220
+ handleEndCallPress();
221
+ } else if (widget.isShowingFeedback) {
222
+ feedback.skipFeedback();
223
+ } else {
224
+ widget.minimize();
225
+ }
226
+ }, [call.isConnected, widget, feedback, handleEndCallPress]);
227
+ const handleMinimizePress = useCallback(() => {
228
+ widget.minimize();
229
+ }, [widget]);
230
+ const {
231
+ height: screenHeight
232
+ } = Dimensions.get("window");
233
+ // Cap panel height: ~48% of screen, max 420px (matches CDN's ~392px panel)
234
+ const panelHeight = Math.min(Math.round(screenHeight * 0.48), 420);
235
+
236
+ // ── Animations ──────────────────────────────────────────────────────────────
237
+ const panelAnim = useRef(new Animated.Value(0)).current; // 0 = hidden, 1 = visible
238
+ const fabAnim = useRef(new Animated.Value(1)).current; // 0 = hidden, 1 = visible
239
+ const [panelMounted, setPanelMounted] = useState(widget.isOpen);
240
+ useEffect(() => {
241
+ if (widget.isOpen) {
242
+ // Mount panel first, then animate in
243
+ setPanelMounted(true);
244
+ Animated.parallel([Animated.spring(panelAnim, {
245
+ toValue: 1,
246
+ useNativeDriver: true,
247
+ tension: 65,
248
+ friction: 11
249
+ }), Animated.timing(fabAnim, {
250
+ toValue: 0,
251
+ duration: 150,
252
+ useNativeDriver: true
253
+ })]).start();
254
+ } else {
255
+ // Animate out, then unmount
256
+ Animated.parallel([Animated.timing(panelAnim, {
257
+ toValue: 0,
258
+ duration: 200,
259
+ useNativeDriver: true
260
+ }), Animated.spring(fabAnim, {
261
+ toValue: 1,
262
+ useNativeDriver: true,
263
+ tension: 65,
264
+ friction: 11
265
+ })]).start(({
266
+ finished
267
+ }) => {
268
+ if (finished) setPanelMounted(false);
269
+ });
270
+ }
271
+ }, [widget.isOpen, panelAnim, fabAnim]);
272
+ const panelTranslateY = panelAnim.interpolate({
273
+ inputRange: [0, 1],
274
+ outputRange: [panelHeight * 0.3, 0]
275
+ });
276
+ const panelOpacity = panelAnim.interpolate({
277
+ inputRange: [0, 1],
278
+ outputRange: [0, 1]
279
+ });
280
+ const fabScale = fabAnim;
281
+ const fabOpacity = fabAnim;
282
+ return /*#__PURE__*/_jsxs(_Fragment, {
283
+ children: [/*#__PURE__*/_jsx(Animated.View, {
284
+ style: [styles.fab, {
285
+ width: triggerSize,
286
+ height: triggerSize,
287
+ borderRadius: triggerSize / 2,
288
+ backgroundColor: getSolidColor(theme.primaryColor),
289
+ transform: [{
290
+ scale: fabScale
291
+ }],
292
+ opacity: fabOpacity
293
+ }],
294
+ pointerEvents: widget.isOpen ? "none" : "auto",
295
+ children: /*#__PURE__*/_jsx(TouchableOpacity, {
296
+ style: styles.fabTouchable,
297
+ onPress: widget.toggle,
298
+ activeOpacity: 0.9,
299
+ children: /*#__PURE__*/_jsx(WidgetPhoneIcon, {
300
+ size: 25,
301
+ color: theme.primaryTextColor
302
+ })
303
+ })
304
+ }), panelMounted && /*#__PURE__*/_jsx(Animated.View, {
305
+ style: [styles.panel, {
306
+ height: panelHeight,
307
+ backgroundColor: theme.backgroundColor,
308
+ borderColor: theme.borderColor,
309
+ opacity: panelOpacity,
310
+ transform: [{
311
+ translateY: panelTranslateY
312
+ }]
313
+ }],
314
+ pointerEvents: widget.isOpen ? "auto" : "none",
315
+ children: /*#__PURE__*/_jsxs(View, {
316
+ style: [styles.panelInner, {
317
+ backgroundColor: theme.backgroundColor
318
+ }],
319
+ children: [/*#__PURE__*/_jsxs(View, {
320
+ style: styles.topButtonRow,
321
+ children: [call.isConnected && /*#__PURE__*/_jsx(TouchableOpacity, {
322
+ style: [styles.topButton, {
323
+ backgroundColor: theme.surfaceColor
324
+ }],
325
+ onPress: handleMinimizePress,
326
+ hitSlop: {
327
+ top: 10,
328
+ bottom: 10,
329
+ left: 10,
330
+ right: 10
331
+ },
332
+ activeOpacity: 0.6,
333
+ children: /*#__PURE__*/_jsx(MinusIcon, {
334
+ size: 16,
335
+ color: theme.mutedTextColor
336
+ })
337
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
338
+ style: [styles.topButton, {
339
+ backgroundColor: theme.surfaceColor
340
+ }],
341
+ onPress: handleClosePress,
342
+ hitSlop: {
343
+ top: 10,
344
+ bottom: 10,
345
+ left: 10,
346
+ right: 10
347
+ },
348
+ activeOpacity: 0.6,
349
+ children: /*#__PURE__*/_jsx(CloseIcon, {
350
+ size: 16,
351
+ color: theme.mutedTextColor
352
+ })
353
+ })]
354
+ }), widget.isShowingFeedback ? /*#__PURE__*/_jsx(FeedbackScreen, {
355
+ theme: theme,
356
+ feedbackConfig: config.feedbackScreen,
357
+ callMode: call.callMode,
358
+ isSubmitting: feedback.isSubmitting,
359
+ onSubmit: handleFeedbackSubmit,
360
+ onSkip: feedback.skipFeedback
361
+ }) : /*#__PURE__*/_jsxs(View, {
362
+ style: styles.mainContent,
363
+ children: [/*#__PURE__*/_jsxs(View, {
364
+ style: [styles.innerContent, (!call.isConnected || call.isLoading) && styles.innerContentPreCall],
365
+ children: [/*#__PURE__*/_jsx(WidgetHeader, {
366
+ title: title,
367
+ description: description,
368
+ logoUrl: config.logoUrl,
369
+ logoStyles: config.logoStyles,
370
+ isConnected: call.isConnected,
371
+ isLoading: call.isLoading,
372
+ theme: theme
373
+ }), call.isConnected && displayMessages.length > 0 && /*#__PURE__*/_jsx(FlatList, {
374
+ ref: flatListRef,
375
+ data: displayMessages,
376
+ renderItem: renderMessage,
377
+ keyExtractor: (item, index) => `${item.timestamp}_${index}`,
378
+ style: styles.messageList,
379
+ contentContainerStyle: styles.messageListContent,
380
+ inverted: false,
381
+ onScroll: handleScroll,
382
+ scrollEventThrottle: 16,
383
+ onContentSizeChange: handleContentSizeChange
384
+ }), call.isConnected && displayMessages.length === 0 && /*#__PURE__*/_jsx(View, {
385
+ style: styles.emptyState
386
+ }), /*#__PURE__*/_jsx(CallControls, {
387
+ callMode: call.callMode,
388
+ isConnected: call.isConnected,
389
+ isMicEnabled: call.isMicEnabled,
390
+ theme: theme,
391
+ onToggleMic: handleToggleMic,
392
+ onEndCall: handleEndCallPress,
393
+ onSendMessage: handleSendMessage
394
+ }), call.error != null && /*#__PURE__*/_jsx(Text, {
395
+ style: [styles.errorText, {
396
+ color: theme.errorColor
397
+ }],
398
+ children: call.error
399
+ }), !call.isConnected && /*#__PURE__*/_jsx(ActionButton, {
400
+ callMode: callMode,
401
+ isLoading: call.isLoading,
402
+ isConnected: call.isConnected,
403
+ buttonConfig: config.buttons,
404
+ theme: theme,
405
+ onPress: handleCallStart
406
+ }), !call.isConnected && /*#__PURE__*/_jsx(View, {
407
+ style: styles.disclaimerContainer,
408
+ children: config.legalDisclaimer ? /*#__PURE__*/_jsx(Text, {
409
+ style: [styles.disclaimerText, {
410
+ color: theme.mutedTextColor
411
+ }],
412
+ children: config.legalDisclaimer.text
413
+ }) : /*#__PURE__*/_jsxs(Text, {
414
+ style: [styles.disclaimerText, {
415
+ color: theme.mutedTextColor
416
+ }],
417
+ children: ["By starting call you agree to", " ", /*#__PURE__*/_jsx(Text, {
418
+ style: {
419
+ color: colorToSolid(theme.primaryColor)
420
+ },
421
+ onPress: () => Linking.openURL("https://www.ringg.ai/privacy"),
422
+ children: "Privacy policy"
423
+ }), " & ", /*#__PURE__*/_jsx(Text, {
424
+ style: {
425
+ color: colorToSolid(theme.primaryColor)
426
+ },
427
+ onPress: () => Linking.openURL("https://www.ringg.ai/terms"),
428
+ children: "T&C"
429
+ })]
430
+ })
431
+ })]
432
+ }), !call.isConnected && !config.hideTabSelector && /*#__PURE__*/_jsx(TabSelector, {
433
+ activeTab: callMode,
434
+ onTabChange: handleTabChange,
435
+ theme: theme
436
+ })]
437
+ })]
438
+ })
439
+ })]
440
+ });
441
+ }
442
+
443
+ // ─── Styles ──────────────────────────────────────────────────────────────────
444
+
445
+ const styles = StyleSheet.create({
446
+ // ── FAB ─────────────────────────────────────────────────────────────────────
447
+ fab: {
448
+ position: "absolute",
449
+ bottom: 24,
450
+ right: 24,
451
+ alignItems: "center",
452
+ justifyContent: "center",
453
+ elevation: 8,
454
+ shadowColor: "#000",
455
+ shadowOffset: {
456
+ width: 0,
457
+ height: 4
458
+ },
459
+ shadowOpacity: 0.25,
460
+ shadowRadius: 8,
461
+ zIndex: 9999
462
+ },
463
+ fabTouchable: {
464
+ flex: 1,
465
+ width: "100%",
466
+ alignItems: "center",
467
+ justifyContent: "center"
468
+ },
469
+ // ── Floating Panel ──────────────────────────────────────────────────────────
470
+ panel: {
471
+ position: "absolute",
472
+ bottom: 24,
473
+ right: 10,
474
+ left: 10,
475
+ borderRadius: 16,
476
+ borderWidth: 1,
477
+ overflow: "hidden",
478
+ elevation: 12,
479
+ shadowColor: "#000",
480
+ shadowOffset: {
481
+ width: 0,
482
+ height: 8
483
+ },
484
+ shadowOpacity: 0.25,
485
+ shadowRadius: 16,
486
+ zIndex: 10000
487
+ },
488
+ panelInner: {
489
+ flex: 1,
490
+ borderRadius: 16,
491
+ overflow: "hidden"
492
+ },
493
+ // ── Top buttons ─────────────────────────────────────────────────────────────
494
+ topButtonRow: {
495
+ position: "absolute",
496
+ top: 8,
497
+ right: 8,
498
+ zIndex: 9999,
499
+ flexDirection: "row",
500
+ gap: 6
501
+ },
502
+ topButton: {
503
+ width: 32,
504
+ height: 32,
505
+ borderRadius: 16,
506
+ alignItems: "center",
507
+ justifyContent: "center"
508
+ },
509
+ // ── Main content ────────────────────────────────────────────────────────────
510
+ mainContent: {
511
+ flex: 1
512
+ },
513
+ innerContent: {
514
+ flex: 1,
515
+ paddingHorizontal: 16,
516
+ paddingTop: 12,
517
+ paddingBottom: 8,
518
+ gap: 12
519
+ },
520
+ innerContentPreCall: {
521
+ justifyContent: "center",
522
+ alignItems: "stretch"
523
+ },
524
+ // ── Messages ────────────────────────────────────────────────────────────────
525
+ messageList: {
526
+ flex: 1,
527
+ marginTop: 68 // space below the absolute in-call header (48px logo + 16px padding + border)
528
+ },
529
+ messageListContent: {
530
+ paddingVertical: 8,
531
+ gap: 10
532
+ },
533
+ emptyState: {
534
+ flex: 1,
535
+ marginTop: 68
536
+ },
537
+ // ── Error ───────────────────────────────────────────────────────────────────
538
+ errorText: {
539
+ fontSize: 14,
540
+ textAlign: "center",
541
+ marginTop: -12,
542
+ marginBottom: -8
543
+ },
544
+ // ── Legal Disclaimer ────────────────────────────────────────────────────────
545
+ disclaimerContainer: {
546
+ paddingHorizontal: 20
547
+ },
548
+ disclaimerText: {
549
+ fontSize: 12,
550
+ textAlign: "center",
551
+ lineHeight: 18
552
+ }
553
+ });
554
+ //# sourceMappingURL=RinggWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","useState","View","TouchableOpacity","FlatList","StyleSheet","Text","Alert","Linking","Dimensions","Animated","colorToSolid","DEFAULT_CONFIG","RinggProvider","useRinggContext","useRinggCall","useRinggChat","useRinggTranscripts","useRinggComponents","useRinggWidgetState","useRinggFeedback","useRinggTheme","WidgetHeader","MessageBubble","ActionButton","CallControls","FeedbackScreen","TabSelector","WidgetPhoneIcon","CloseIcon","MinusIcon","InteractiveFlow","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","RinggWidget","config","urls","onEvent","triggerIcon","triggerSize","children","WidgetInner","theme","getSolidColor","widget","call","chat","transcriptHook","components","feedback","callMode","setCallMode","defaultTab","title","description","displayMessages","messages","transcripts","injectedComponentIds","Set","comp","current","has","component_id","add","addComponentMessage","name","message","isSelf","timestamp","Date","now","Math","random","componentType","component_type","componentData","flatListRef","isNearBottomRef","handleScroll","event","contentOffset","contentSize","layoutMeasurement","nativeEvent","distanceFromBottom","height","y","handleContentSizeChange","_w","_h","scrollToEnd","animated","handleSendMessage","text","sendMessage","setTimeout","handleToggleMic","toggleMic","handleEndCallPress","isConnected","alert","style","onPress","clearMessages","clearTranscripts","clearComponents","clear","endCall","handleCallStart","mode","open","startCall","handleTabChange","tab","handleFeedbackSubmit","rating","comment","submitFeedback","renderMessage","item","initialComponent","onSendResponse","respondToComponent","handleClosePress","isShowingFeedback","skipFeedback","minimize","handleMinimizePress","screenHeight","get","panelHeight","min","round","panelAnim","Value","fabAnim","panelMounted","setPanelMounted","isOpen","parallel","spring","toValue","useNativeDriver","tension","friction","timing","duration","start","finished","panelTranslateY","interpolate","inputRange","outputRange","panelOpacity","fabScale","fabOpacity","styles","fab","width","borderRadius","backgroundColor","primaryColor","transform","scale","opacity","pointerEvents","fabTouchable","toggle","activeOpacity","size","color","primaryTextColor","panel","borderColor","translateY","panelInner","topButtonRow","topButton","surfaceColor","hitSlop","top","bottom","left","right","mutedTextColor","feedbackConfig","feedbackScreen","isSubmitting","onSubmit","onSkip","mainContent","innerContent","isLoading","innerContentPreCall","logoUrl","logoStyles","length","ref","data","renderItem","keyExtractor","index","messageList","contentContainerStyle","messageListContent","inverted","onScroll","scrollEventThrottle","onContentSizeChange","emptyState","isMicEnabled","onToggleMic","onEndCall","onSendMessage","error","errorText","errorColor","buttonConfig","buttons","disclaimerContainer","legalDisclaimer","disclaimerText","openURL","hideTabSelector","activeTab","onTabChange","create","position","alignItems","justifyContent","elevation","shadowColor","shadowOffset","shadowOpacity","shadowRadius","zIndex","flex","borderWidth","overflow","flexDirection","gap","paddingHorizontal","paddingTop","paddingBottom","marginTop","paddingVertical","fontSize","textAlign","marginBottom","lineHeight"],"sourceRoot":"../../../src","sources":["components/RinggWidget.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACvE,SAASC,IAAI,EAAEC,gBAAgB,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,UAAU,EAAEC,QAAQ,QAAqF,cAAc;AAGpM,SAASC,YAAY,EAAEC,cAAc,QAAQ,aAAa;AAE1D,SAASC,aAAa,EAAEC,eAAe,QAAiC,6BAA0B;AAClG,SAASC,YAAY,QAAQ,0BAAuB;AACpD,SAASC,YAAY,QAAQ,0BAAuB;AACpD,SAASC,mBAAmB,QAAQ,iCAA8B;AAClE,SAASC,kBAAkB,QAAQ,gCAA6B;AAChE,SAASC,mBAAmB,QAAQ,iCAA8B;AAClE,SAASC,gBAAgB,QAAQ,8BAA2B;AAC5D,SAASC,aAAa,QAAQ,2BAAwB;AAEtD,SAASC,YAAY,QAAQ,sBAAmB;AAChD,SAASC,aAAa,QAAQ,uBAAoB;AAClD,SAASC,YAAY,QAAQ,sBAAmB;AAChD,SAASC,YAAY,QAAQ,sBAAmB;AAChD,SAASC,cAAc,QAAQ,wBAAqB;AACpD,SAASC,WAAW,QAAQ,qBAAkB;AAC9C,SAASC,eAAe,EAAEC,SAAS,EAAEC,SAAS,QAAQ,eAAY;AAClE,SAASC,eAAe,QAAQ,4BAAyB;;AAEzD;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAUA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAC;EAAEC,MAAM;EAAEC,IAAI;EAAEC,OAAO;EAAEC,WAAW;EAAEC,WAAW,GAAG;AAAqB,CAAC,EAAE;EACtG,oBACEV,IAAA,CAACpB,aAAa;IAAC0B,MAAM,EAAEA,MAAO;IAACC,IAAI,EAAEA,IAAK;IAACC,OAAO,EAAEA,OAAQ;IAAAG,QAAA,eAC1DX,IAAA,CAACY,WAAW;MAACH,WAAW,EAAEA,WAAY;MAACC,WAAW,EAAEA;IAAY,CAAE;EAAC,CACtD,CAAC;AAEpB;;AAEA;;AAOA,SAASE,WAAWA,CAAC;EAAEH,WAAW;EAAEC;AAA8B,CAAC,EAAE;EACnE,MAAM;IAAEJ;EAAO,CAAC,GAAGzB,eAAe,CAAC,CAAC;EACpC,MAAM;IAAEgC,KAAK;IAAEC;EAAc,CAAC,GAAG1B,aAAa,CAAC,CAAC;EAChD,MAAM2B,MAAM,GAAG7B,mBAAmB,CAAC,CAAC;EACpC,MAAM8B,IAAI,GAAGlC,YAAY,CAAC,CAAC;EAC3B,MAAMmC,IAAI,GAAGlC,YAAY,CAAC,CAAC;EAC3B,MAAMmC,cAAc,GAAGlC,mBAAmB,CAAC,CAAC;EAC5C,MAAMmC,UAAU,GAAGlC,kBAAkB,CAAC,CAAC;EACvC,MAAMmC,QAAQ,GAAGjC,gBAAgB,CAAC,CAAC;EAEnC,MAAM,CAACkC,QAAQ,EAAEC,WAAW,CAAC,GAAGtD,QAAQ,CAAYsC,MAAM,CAACiB,UAAU,IAAI,OAAO,CAAC;EAEjF,MAAMC,KAAK,GAAGlB,MAAM,CAACkB,KAAK,IAAI7C,cAAc,CAAC6C,KAAK;EAClD,MAAMC,WAAW,GAAGnB,MAAM,CAACmB,WAAW,IAAI9C,cAAc,CAAC8C,WAAW;;EAEpE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMC,eAA8B,GAAGV,IAAI,CAACK,QAAQ,KAAK,MAAM,GAAGJ,IAAI,CAACU,QAAQ,GAAGT,cAAc,CAACU,WAAW;;EAE5G;EACA;EACA;EACA;EACA,MAAMC,oBAAoB,GAAG9D,MAAM,CAAc,IAAI+D,GAAG,CAAC,CAAC,CAAC;EAE3DhE,SAAS,CAAC,MAAM;IACd,KAAK,MAAMiE,IAAI,IAAIZ,UAAU,CAACA,UAAU,EAAE;MACxC,IAAI,CAACU,oBAAoB,CAACG,OAAO,CAACC,GAAG,CAACF,IAAI,CAACG,YAAY,CAAC,EAAE;QACxDL,oBAAoB,CAACG,OAAO,CAACG,GAAG,CAACJ,IAAI,CAACG,YAAY,CAAC;QACnDjB,IAAI,CAACmB,mBAAmB,CAAC;UACvBC,IAAI,EAAE,OAAO;UACbC,OAAO,EAAE,EAAE;UACXC,MAAM,EAAE,KAAK;UACbC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGC,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,KAAK;UAC7CC,aAAa,EAAEd,IAAI,CAACe,cAAc;UAClCC,aAAa,EAAEhB;QACjB,CAAC,CAAC;MACJ;IACF;EACF,CAAC,EAAE,CAACZ,UAAU,CAACA,UAAU,EAAEF,IAAI,CAAC,CAAC;;EAEjC;EACA;EACA,MAAM+B,WAAW,GAAGjF,MAAM,CAAwB,IAAI,CAAC;EACvD,MAAMkF,eAAe,GAAGlF,MAAM,CAAC,IAAI,CAAC;EAEpC,MAAMmF,YAAY,GAAGrF,WAAW,CAAEsF,KAA8C,IAAK;IACnF,MAAM;MAAEC,aAAa;MAAEC,WAAW;MAAEC;IAAkB,CAAC,GAAGH,KAAK,CAACI,WAAW;IAC3E,MAAMC,kBAAkB,GAAGH,WAAW,CAACI,MAAM,GAAGH,iBAAiB,CAACG,MAAM,GAAGL,aAAa,CAACM,CAAC;IAC1FT,eAAe,CAACjB,OAAO,GAAGwB,kBAAkB,GAAG,EAAE;EACnD,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,MAAMG,uBAAuB,GAAG9F,WAAW,CAAC,CAAC+F,EAAU,EAAEC,EAAU,KAAK;IACtE,IAAIZ,eAAe,CAACjB,OAAO,EAAE;MAC3BgB,WAAW,CAAChB,OAAO,EAAE8B,WAAW,CAAC;QAAEC,QAAQ,EAAE;MAAK,CAAC,CAAC;IACtD;EACF,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,MAAMC,iBAAiB,GAAGnG,WAAW,CACnC,MAAOoG,IAAY,IAAK;IACtB,MAAMhD,IAAI,CAACiD,WAAW,CAACD,IAAI,CAAC;IAC5B;IACAhB,eAAe,CAACjB,OAAO,GAAG,IAAI;IAC9BmC,UAAU,CAAC,MAAM;MACfnB,WAAW,CAAChB,OAAO,EAAE8B,WAAW,CAAC;QAAEC,QAAQ,EAAE;MAAK,CAAC,CAAC;IACtD,CAAC,EAAE,GAAG,CAAC;EACT,CAAC,EACD,CAAC9C,IAAI,CACP,CAAC;EAED,MAAMmD,eAAe,GAAGvG,WAAW,CAAC,YAAY;IAC9C,MAAMmD,IAAI,CAACqD,SAAS,CAAC,CAAC;EACxB,CAAC,EAAE,CAACrD,IAAI,CAAC,CAAC;EAEV,MAAMsD,kBAAkB,GAAGzG,WAAW,CAAC,MAAM;IAC3C,IAAImD,IAAI,CAACuD,WAAW,EAAE;MACpBjG,KAAK,CAACkG,KAAK,CAAC,OAAOxD,IAAI,CAACK,QAAQ,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,wEAAwE,EAAE,CAC3I;QAAE4C,IAAI,EAAE,QAAQ;QAAEQ,KAAK,EAAE;MAAS,CAAC,EACnC;QACER,IAAI,EAAE,OAAOjD,IAAI,CAACK,QAAQ,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE;QAC1DoD,KAAK,EAAE,aAAa;QACpBC,OAAO,EAAEA,CAAA,KAAM;UACbzD,IAAI,CAAC0D,aAAa,CAAC,CAAC;UACpBzD,cAAc,CAAC0D,gBAAgB,CAAC,CAAC;UACjCzD,UAAU,CAAC0D,eAAe,CAAC,CAAC;UAC5BhD,oBAAoB,CAACG,OAAO,CAAC8C,KAAK,CAAC,CAAC;UACpC9D,IAAI,CAAC+D,OAAO,CAAC,CAAC;QAChB;MACF,CAAC,CACF,CAAC;IACJ;EACF,CAAC,EAAE,CAAC/D,IAAI,EAAEC,IAAI,EAAEC,cAAc,EAAEC,UAAU,CAAC,CAAC;EAE5C,MAAM6D,eAAe,GAAGnH,WAAW,CAChCoH,IAAe,IAAK;IACnB;IACAhE,IAAI,CAAC0D,aAAa,CAAC,CAAC;IACpBzD,cAAc,CAAC0D,gBAAgB,CAAC,CAAC;IACjCzD,UAAU,CAAC0D,eAAe,CAAC,CAAC;IAC5BhD,oBAAoB,CAACG,OAAO,CAAC8C,KAAK,CAAC,CAAC;IAEpC/D,MAAM,CAACmE,IAAI,CAAC,CAAC;IACb5D,WAAW,CAAC2D,IAAI,CAAC;IACjBjE,IAAI,CAACmE,SAAS,CAACF,IAAI,CAAC;EACtB,CAAC,EACD,CAACjE,IAAI,EAAED,MAAM,EAAEE,IAAI,EAAEC,cAAc,EAAEC,UAAU,CACjD,CAAC;EAED,MAAMiE,eAAe,GAAGvH,WAAW,CAAEwH,GAAc,IAAK;IACtD/D,WAAW,CAAC+D,GAAG,CAAC;EAClB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,oBAAoB,GAAGzH,WAAW,CACtC,CAAC0H,MAAc,EAAEC,OAAe,KAAK;IACnCpE,QAAQ,CAACqE,cAAc,CAACF,MAAM,EAAEC,OAAO,CAAC;EAC1C,CAAC,EACD,CAACpE,QAAQ,CACX,CAAC;EAED,MAAMsE,aAAa,GAAG7H,WAAW,CAC/B,CAAC;IAAE8H;EAA4B,CAAC,KAAK;IACnC;IACA,IAAIA,IAAI,CAAC9C,aAAa,IAAI8C,IAAI,CAAC5C,aAAa,EAAE;MAC5C,oBAAO/C,IAAA,CAACF,eAAe;QAAC8F,gBAAgB,EAAED,IAAI,CAAC5C,aAAiE;QAAClC,KAAK,EAAEA,KAAM;QAACgF,cAAc,EAAE1E,UAAU,CAAC2E;MAAmB,CAAE,CAAC;IAClL;IACA,oBAAO9F,IAAA,CAACV,aAAa;MAACgD,OAAO,EAAEqD,IAAK;MAAC9E,KAAK,EAAEA;IAAM,CAAE,CAAC;EACvD,CAAC,EACD,CAACA,KAAK,EAAEM,UAAU,CAAC2E,kBAAkB,CACvC,CAAC;EAED,MAAMC,gBAAgB,GAAGlI,WAAW,CAAC,MAAM;IACzC,IAAImD,IAAI,CAACuD,WAAW,EAAE;MACpBD,kBAAkB,CAAC,CAAC;IACtB,CAAC,MAAM,IAAIvD,MAAM,CAACiF,iBAAiB,EAAE;MACnC5E,QAAQ,CAAC6E,YAAY,CAAC,CAAC;IACzB,CAAC,MAAM;MACLlF,MAAM,CAACmF,QAAQ,CAAC,CAAC;IACnB;EACF,CAAC,EAAE,CAAClF,IAAI,CAACuD,WAAW,EAAExD,MAAM,EAAEK,QAAQ,EAAEkD,kBAAkB,CAAC,CAAC;EAE5D,MAAM6B,mBAAmB,GAAGtI,WAAW,CAAC,MAAM;IAC5CkD,MAAM,CAACmF,QAAQ,CAAC,CAAC;EACnB,CAAC,EAAE,CAACnF,MAAM,CAAC,CAAC;EAEZ,MAAM;IAAE0C,MAAM,EAAE2C;EAAa,CAAC,GAAG5H,UAAU,CAAC6H,GAAG,CAAC,QAAQ,CAAC;EACzD;EACA,MAAMC,WAAW,GAAG3D,IAAI,CAAC4D,GAAG,CAAC5D,IAAI,CAAC6D,KAAK,CAACJ,YAAY,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;;EAElE;EACA,MAAMK,SAAS,GAAG1I,MAAM,CAAC,IAAIU,QAAQ,CAACiI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC1E,OAAO,CAAC,CAAC;EACzD,MAAM2E,OAAO,GAAG5I,MAAM,CAAC,IAAIU,QAAQ,CAACiI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC1E,OAAO,CAAC,CAAC;EACvD,MAAM,CAAC4E,YAAY,EAAEC,eAAe,CAAC,GAAG7I,QAAQ,CAAC+C,MAAM,CAAC+F,MAAM,CAAC;EAE/DhJ,SAAS,CAAC,MAAM;IACd,IAAIiD,MAAM,CAAC+F,MAAM,EAAE;MACjB;MACAD,eAAe,CAAC,IAAI,CAAC;MACrBpI,QAAQ,CAACsI,QAAQ,CAAC,CAACtI,QAAQ,CAACuI,MAAM,CAACP,SAAS,EAAE;QAAEQ,OAAO,EAAE,CAAC;QAAEC,eAAe,EAAE,IAAI;QAAEC,OAAO,EAAE,EAAE;QAAEC,QAAQ,EAAE;MAAG,CAAC,CAAC,EAAE3I,QAAQ,CAAC4I,MAAM,CAACV,OAAO,EAAE;QAAEM,OAAO,EAAE,CAAC;QAAEK,QAAQ,EAAE,GAAG;QAAEJ,eAAe,EAAE;MAAK,CAAC,CAAC,CAAC,CAAC,CAACK,KAAK,CAAC,CAAC;IAC3M,CAAC,MAAM;MACL;MACA9I,QAAQ,CAACsI,QAAQ,CAAC,CAACtI,QAAQ,CAAC4I,MAAM,CAACZ,SAAS,EAAE;QAAEQ,OAAO,EAAE,CAAC;QAAEK,QAAQ,EAAE,GAAG;QAAEJ,eAAe,EAAE;MAAK,CAAC,CAAC,EAAEzI,QAAQ,CAACuI,MAAM,CAACL,OAAO,EAAE;QAAEM,OAAO,EAAE,CAAC;QAAEC,eAAe,EAAE,IAAI;QAAEC,OAAO,EAAE,EAAE;QAAEC,QAAQ,EAAE;MAAG,CAAC,CAAC,CAAC,CAAC,CAACG,KAAK,CAAC,CAAC;QAAEC;MAAS,CAAC,KAAK;QACxN,IAAIA,QAAQ,EAAEX,eAAe,CAAC,KAAK,CAAC;MACtC,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAAC9F,MAAM,CAAC+F,MAAM,EAAEL,SAAS,EAAEE,OAAO,CAAC,CAAC;EAEvC,MAAMc,eAAe,GAAGhB,SAAS,CAACiB,WAAW,CAAC;IAAEC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAAEC,WAAW,EAAE,CAACtB,WAAW,GAAG,GAAG,EAAE,CAAC;EAAE,CAAC,CAAC;EAC1G,MAAMuB,YAAY,GAAGpB,SAAS,CAACiB,WAAW,CAAC;IAAEC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAAEC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;EAAE,CAAC,CAAC;EACvF,MAAME,QAAQ,GAAGnB,OAAO;EACxB,MAAMoB,UAAU,GAAGpB,OAAO;EAE1B,oBACEzG,KAAA,CAAAE,SAAA;IAAAO,QAAA,gBAEEX,IAAA,CAACvB,QAAQ,CAACR,IAAI;MACZwG,KAAK,EAAE,CACLuD,MAAM,CAACC,GAAG,EACV;QACEC,KAAK,EAAExH,WAAW;QAClB+C,MAAM,EAAE/C,WAAW;QACnByH,YAAY,EAAEzH,WAAW,GAAG,CAAC;QAC7B0H,eAAe,EAAEtH,aAAa,CAACD,KAAK,CAACwH,YAAY,CAAC;QAClDC,SAAS,EAAE,CAAC;UAAEC,KAAK,EAAET;QAAS,CAAC,CAAC;QAChCU,OAAO,EAAET;MACX,CAAC,CACD;MACFU,aAAa,EAAE1H,MAAM,CAAC+F,MAAM,GAAG,MAAM,GAAG,MAAO;MAAAnG,QAAA,eAE/CX,IAAA,CAAC9B,gBAAgB;QAACuG,KAAK,EAAEuD,MAAM,CAACU,YAAa;QAAChE,OAAO,EAAE3D,MAAM,CAAC4H,MAAO;QAACC,aAAa,EAAE,GAAI;QAAAjI,QAAA,eACvFX,IAAA,CAACL,eAAe;UAACkJ,IAAI,EAAE,EAAG;UAACC,KAAK,EAAEjI,KAAK,CAACkI;QAAiB,CAAE;MAAC,CAC5C;IAAC,CACN,CAAC,EAGfnC,YAAY,iBACX5G,IAAA,CAACvB,QAAQ,CAACR,IAAI;MACZwG,KAAK,EAAE,CACLuD,MAAM,CAACgB,KAAK,EACZ;QACEvF,MAAM,EAAE6C,WAAW;QACnB8B,eAAe,EAAEvH,KAAK,CAACuH,eAAe;QACtCa,WAAW,EAAEpI,KAAK,CAACoI,WAAW;QAC9BT,OAAO,EAAEX,YAAY;QACrBS,SAAS,EAAE,CAAC;UAAEY,UAAU,EAAEzB;QAAgB,CAAC;MAC7C,CAAC,CACD;MACFgB,aAAa,EAAE1H,MAAM,CAAC+F,MAAM,GAAG,MAAM,GAAG,MAAO;MAAAnG,QAAA,eAE/CT,KAAA,CAACjC,IAAI;QAACwG,KAAK,EAAE,CAACuD,MAAM,CAACmB,UAAU,EAAE;UAAEf,eAAe,EAAEvH,KAAK,CAACuH;QAAgB,CAAC,CAAE;QAAAzH,QAAA,gBAE3ET,KAAA,CAACjC,IAAI;UAACwG,KAAK,EAAEuD,MAAM,CAACoB,YAAa;UAAAzI,QAAA,GAC9BK,IAAI,CAACuD,WAAW,iBACfvE,IAAA,CAAC9B,gBAAgB;YAACuG,KAAK,EAAE,CAACuD,MAAM,CAACqB,SAAS,EAAE;cAAEjB,eAAe,EAAEvH,KAAK,CAACyI;YAAa,CAAC,CAAE;YAAC5E,OAAO,EAAEyB,mBAAoB;YAACoD,OAAO,EAAE;cAAEC,GAAG,EAAE,EAAE;cAAEC,MAAM,EAAE,EAAE;cAAEC,IAAI,EAAE,EAAE;cAAEC,KAAK,EAAE;YAAG,CAAE;YAACf,aAAa,EAAE,GAAI;YAAAjI,QAAA,eAC5LX,IAAA,CAACH,SAAS;cAACgJ,IAAI,EAAE,EAAG;cAACC,KAAK,EAAEjI,KAAK,CAAC+I;YAAe,CAAE;UAAC,CACpC,CACnB,eACD5J,IAAA,CAAC9B,gBAAgB;YAACuG,KAAK,EAAE,CAACuD,MAAM,CAACqB,SAAS,EAAE;cAAEjB,eAAe,EAAEvH,KAAK,CAACyI;YAAa,CAAC,CAAE;YAAC5E,OAAO,EAAEqB,gBAAiB;YAACwD,OAAO,EAAE;cAAEC,GAAG,EAAE,EAAE;cAAEC,MAAM,EAAE,EAAE;cAAEC,IAAI,EAAE,EAAE;cAAEC,KAAK,EAAE;YAAG,CAAE;YAACf,aAAa,EAAE,GAAI;YAAAjI,QAAA,eACzLX,IAAA,CAACJ,SAAS;cAACiJ,IAAI,EAAE,EAAG;cAACC,KAAK,EAAEjI,KAAK,CAAC+I;YAAe,CAAE;UAAC,CACpC,CAAC;QAAA,CACf,CAAC,EAGN7I,MAAM,CAACiF,iBAAiB,gBACvBhG,IAAA,CAACP,cAAc;UAACoB,KAAK,EAAEA,KAAM;UAACgJ,cAAc,EAAEvJ,MAAM,CAACwJ,cAAe;UAACzI,QAAQ,EAAEL,IAAI,CAACK,QAAS;UAAC0I,YAAY,EAAE3I,QAAQ,CAAC2I,YAAa;UAACC,QAAQ,EAAE1E,oBAAqB;UAAC2E,MAAM,EAAE7I,QAAQ,CAAC6E;QAAa,CAAE,CAAC,gBAEpM/F,KAAA,CAACjC,IAAI;UAACwG,KAAK,EAAEuD,MAAM,CAACkC,WAAY;UAAAvJ,QAAA,gBAE9BT,KAAA,CAACjC,IAAI;YAACwG,KAAK,EAAE,CAACuD,MAAM,CAACmC,YAAY,EAAE,CAAC,CAACnJ,IAAI,CAACuD,WAAW,IAAIvD,IAAI,CAACoJ,SAAS,KAAKpC,MAAM,CAACqC,mBAAmB,CAAE;YAAA1J,QAAA,gBAEtGX,IAAA,CAACX,YAAY;cAACmC,KAAK,EAAEA,KAAM;cAACC,WAAW,EAAEA,WAAY;cAAC6I,OAAO,EAAEhK,MAAM,CAACgK,OAAQ;cAACC,UAAU,EAAEjK,MAAM,CAACiK,UAAW;cAAChG,WAAW,EAAEvD,IAAI,CAACuD,WAAY;cAAC6F,SAAS,EAAEpJ,IAAI,CAACoJ,SAAU;cAACvJ,KAAK,EAAEA;YAAM,CAAE,CAAC,EAGvLG,IAAI,CAACuD,WAAW,IAAI7C,eAAe,CAAC8I,MAAM,GAAG,CAAC,iBAC7CxK,IAAA,CAAC7B,QAAQ;cACPsM,GAAG,EAAEzH,WAAY;cACjB0H,IAAI,EAAEhJ,eAAgB;cACtBiJ,UAAU,EAAEjF,aAAc;cAC1BkF,YAAY,EAAEA,CAACjF,IAAI,EAAEkF,KAAK,KAAK,GAAGlF,IAAI,CAACnD,SAAS,IAAIqI,KAAK,EAAG;cAC5DpG,KAAK,EAAEuD,MAAM,CAAC8C,WAAY;cAC1BC,qBAAqB,EAAE/C,MAAM,CAACgD,kBAAmB;cACjDC,QAAQ,EAAE,KAAM;cAChBC,QAAQ,EAAEhI,YAAa;cACvBiI,mBAAmB,EAAE,EAAG;cACxBC,mBAAmB,EAAEzH;YAAwB,CAC9C,CACF,EAGA3C,IAAI,CAACuD,WAAW,IAAI7C,eAAe,CAAC8I,MAAM,KAAK,CAAC,iBAAIxK,IAAA,CAAC/B,IAAI;cAACwG,KAAK,EAAEuD,MAAM,CAACqD;YAAW,CAAE,CAAC,eAGvFrL,IAAA,CAACR,YAAY;cAAC6B,QAAQ,EAAEL,IAAI,CAACK,QAAS;cAACkD,WAAW,EAAEvD,IAAI,CAACuD,WAAY;cAAC+G,YAAY,EAAEtK,IAAI,CAACsK,YAAa;cAACzK,KAAK,EAAEA,KAAM;cAAC0K,WAAW,EAAEnH,eAAgB;cAACoH,SAAS,EAAElH,kBAAmB;cAACmH,aAAa,EAAEzH;YAAkB,CAAE,CAAC,EAGrNhD,IAAI,CAAC0K,KAAK,IAAI,IAAI,iBAAI1L,IAAA,CAAC3B,IAAI;cAACoG,KAAK,EAAE,CAACuD,MAAM,CAAC2D,SAAS,EAAE;gBAAE7C,KAAK,EAAEjI,KAAK,CAAC+K;cAAW,CAAC,CAAE;cAAAjL,QAAA,EAAEK,IAAI,CAAC0K;YAAK,CAAO,CAAC,EAGvG,CAAC1K,IAAI,CAACuD,WAAW,iBAAIvE,IAAA,CAACT,YAAY;cAAC8B,QAAQ,EAAEA,QAAS;cAAC+I,SAAS,EAAEpJ,IAAI,CAACoJ,SAAU;cAAC7F,WAAW,EAAEvD,IAAI,CAACuD,WAAY;cAACsH,YAAY,EAAEvL,MAAM,CAACwL,OAAQ;cAACjL,KAAK,EAAEA,KAAM;cAAC6D,OAAO,EAAEM;YAAgB,CAAE,CAAC,EAGzL,CAAChE,IAAI,CAACuD,WAAW,iBAChBvE,IAAA,CAAC/B,IAAI;cAACwG,KAAK,EAAEuD,MAAM,CAAC+D,mBAAoB;cAAApL,QAAA,EACrCL,MAAM,CAAC0L,eAAe,gBACrBhM,IAAA,CAAC3B,IAAI;gBAACoG,KAAK,EAAE,CAACuD,MAAM,CAACiE,cAAc,EAAE;kBAAEnD,KAAK,EAAEjI,KAAK,CAAC+I;gBAAe,CAAC,CAAE;gBAAAjJ,QAAA,EAAEL,MAAM,CAAC0L,eAAe,CAAC/H;cAAI,CAAO,CAAC,gBAE3G/D,KAAA,CAAC7B,IAAI;gBAACoG,KAAK,EAAE,CAACuD,MAAM,CAACiE,cAAc,EAAE;kBAAEnD,KAAK,EAAEjI,KAAK,CAAC+I;gBAAe,CAAC,CAAE;gBAAAjJ,QAAA,GAAC,+BACxC,EAAC,GAAG,eACjCX,IAAA,CAAC3B,IAAI;kBAACoG,KAAK,EAAE;oBAAEqE,KAAK,EAAEpK,YAAY,CAACmC,KAAK,CAACwH,YAAY;kBAAE,CAAE;kBAAC3D,OAAO,EAAEA,CAAA,KAAMnG,OAAO,CAAC2N,OAAO,CAAC,8BAA8B,CAAE;kBAAAvL,QAAA,EAAC;gBAE1H,CAAM,CAAC,EACN,KAAK,eACNX,IAAA,CAAC3B,IAAI;kBAACoG,KAAK,EAAE;oBAAEqE,KAAK,EAAEpK,YAAY,CAACmC,KAAK,CAACwH,YAAY;kBAAE,CAAE;kBAAC3D,OAAO,EAAEA,CAAA,KAAMnG,OAAO,CAAC2N,OAAO,CAAC,4BAA4B,CAAE;kBAAAvL,QAAA,EAAC;gBAExH,CAAM,CAAC;cAAA,CACH;YACP,CACG,CACP;UAAA,CACG,CAAC,EAGN,CAACK,IAAI,CAACuD,WAAW,IAAI,CAACjE,MAAM,CAAC6L,eAAe,iBAAInM,IAAA,CAACN,WAAW;YAAC0M,SAAS,EAAE/K,QAAS;YAACgL,WAAW,EAAEjH,eAAgB;YAACvE,KAAK,EAAEA;UAAM,CAAE,CAAC;QAAA,CAC7H,CACP;MAAA,CACG;IAAC,CACM,CAChB;EAAA,CACD,CAAC;AAEP;;AAEA;;AAEA,MAAMmH,MAAM,GAAG5J,UAAU,CAACkO,MAAM,CAAC;EAC/B;EACArE,GAAG,EAAE;IACHsE,QAAQ,EAAE,UAAU;IACpB9C,MAAM,EAAE,EAAE;IACVE,KAAK,EAAE,EAAE;IACT6C,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,SAAS,EAAE,CAAC;IACZC,WAAW,EAAE,MAAM;IACnBC,YAAY,EAAE;MAAE1E,KAAK,EAAE,CAAC;MAAEzE,MAAM,EAAE;IAAE,CAAC;IACrCoJ,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE,CAAC;IACfC,MAAM,EAAE;EACV,CAAC;EACDrE,YAAY,EAAE;IACZsE,IAAI,EAAE,CAAC;IACP9E,KAAK,EAAE,MAAM;IACbsE,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EAED;EACAzD,KAAK,EAAE;IACLuD,QAAQ,EAAE,UAAU;IACpB9C,MAAM,EAAE,EAAE;IACVE,KAAK,EAAE,EAAE;IACTD,IAAI,EAAE,EAAE;IACRvB,YAAY,EAAE,EAAE;IAChB8E,WAAW,EAAE,CAAC;IACdC,QAAQ,EAAE,QAAQ;IAClBR,SAAS,EAAE,EAAE;IACbC,WAAW,EAAE,MAAM;IACnBC,YAAY,EAAE;MAAE1E,KAAK,EAAE,CAAC;MAAEzE,MAAM,EAAE;IAAE,CAAC;IACrCoJ,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE,EAAE;IAChBC,MAAM,EAAE;EACV,CAAC;EACD5D,UAAU,EAAE;IACV6D,IAAI,EAAE,CAAC;IACP7E,YAAY,EAAE,EAAE;IAChB+E,QAAQ,EAAE;EACZ,CAAC;EAED;EACA9D,YAAY,EAAE;IACZmD,QAAQ,EAAE,UAAU;IACpB/C,GAAG,EAAE,CAAC;IACNG,KAAK,EAAE,CAAC;IACRoD,MAAM,EAAE,IAAI;IACZI,aAAa,EAAE,KAAK;IACpBC,GAAG,EAAE;EACP,CAAC;EACD/D,SAAS,EAAE;IACTnB,KAAK,EAAE,EAAE;IACTzE,MAAM,EAAE,EAAE;IACV0E,YAAY,EAAE,EAAE;IAChBqE,UAAU,EAAE,QAAiB;IAC7BC,cAAc,EAAE;EAClB,CAAC;EAED;EACAvC,WAAW,EAAE;IACX8C,IAAI,EAAE;EACR,CAAC;EACD7C,YAAY,EAAE;IACZ6C,IAAI,EAAE,CAAC;IACPK,iBAAiB,EAAE,EAAE;IACrBC,UAAU,EAAE,EAAE;IACdC,aAAa,EAAE,CAAC;IAChBH,GAAG,EAAE;EACP,CAAC;EACD/C,mBAAmB,EAAE;IACnBoC,cAAc,EAAE,QAAQ;IACxBD,UAAU,EAAE;EACd,CAAC;EAED;EACA1B,WAAW,EAAE;IACXkC,IAAI,EAAE,CAAC;IACPQ,SAAS,EAAE,EAAE,CAAE;EACjB,CAAC;EACDxC,kBAAkB,EAAE;IAClByC,eAAe,EAAE,CAAC;IAClBL,GAAG,EAAE;EACP,CAAC;EACD/B,UAAU,EAAE;IACV2B,IAAI,EAAE,CAAC;IACPQ,SAAS,EAAE;EACb,CAAC;EAED;EACA7B,SAAS,EAAE;IACT+B,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE,QAAQ;IACnBH,SAAS,EAAE,CAAC,EAAE;IACdI,YAAY,EAAE,CAAC;EACjB,CAAC;EAED;EACA7B,mBAAmB,EAAE;IACnBsB,iBAAiB,EAAE;EACrB,CAAC;EACDpB,cAAc,EAAE;IACdyB,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE,QAAQ;IACnBE,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}