@ringg/react-native 0.0.1-alpha.9 → 0.2.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 (118) hide show
  1. package/dist/index.d.mts +964 -0
  2. package/dist/index.d.ts +964 -0
  3. package/dist/index.js +1164 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +1129 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +24 -66
  8. package/LICENSE +0 -21
  9. package/README.md +0 -250
  10. package/app.plugin.js +0 -51
  11. package/lib/module/adapters/index.js +0 -4
  12. package/lib/module/adapters/index.js.map +0 -1
  13. package/lib/module/adapters/livekit-rn-adapter.js +0 -216
  14. package/lib/module/adapters/livekit-rn-adapter.js.map +0 -1
  15. package/lib/module/components/RinggWidget.js +0 -554
  16. package/lib/module/components/RinggWidget.js.map +0 -1
  17. package/lib/module/components/steps/ButtonsStep.js +0 -146
  18. package/lib/module/components/steps/ButtonsStep.js.map +0 -1
  19. package/lib/module/components/steps/CalendarStep.js +0 -190
  20. package/lib/module/components/steps/CalendarStep.js.map +0 -1
  21. package/lib/module/components/steps/ConfirmationStep.js +0 -175
  22. package/lib/module/components/steps/ConfirmationStep.js.map +0 -1
  23. package/lib/module/components/steps/FormStep.js +0 -346
  24. package/lib/module/components/steps/FormStep.js.map +0 -1
  25. package/lib/module/components/steps/InteractiveFlow.js +0 -249
  26. package/lib/module/components/steps/InteractiveFlow.js.map +0 -1
  27. package/lib/module/components/ui/ActionButton.js +0 -92
  28. package/lib/module/components/ui/ActionButton.js.map +0 -1
  29. package/lib/module/components/ui/CallControls.js +0 -168
  30. package/lib/module/components/ui/CallControls.js.map +0 -1
  31. package/lib/module/components/ui/FeedbackScreen.js +0 -180
  32. package/lib/module/components/ui/FeedbackScreen.js.map +0 -1
  33. package/lib/module/components/ui/Icons.js +0 -294
  34. package/lib/module/components/ui/Icons.js.map +0 -1
  35. package/lib/module/components/ui/MessageBubble.js +0 -80
  36. package/lib/module/components/ui/MessageBubble.js.map +0 -1
  37. package/lib/module/components/ui/TabSelector.js +0 -80
  38. package/lib/module/components/ui/TabSelector.js.map +0 -1
  39. package/lib/module/components/ui/WidgetHeader.js +0 -168
  40. package/lib/module/components/ui/WidgetHeader.js.map +0 -1
  41. package/lib/module/context/RinggProvider.js +0 -134
  42. package/lib/module/context/RinggProvider.js.map +0 -1
  43. package/lib/module/context/index.js +0 -4
  44. package/lib/module/context/index.js.map +0 -1
  45. package/lib/module/globals.d.js +0 -2
  46. package/lib/module/globals.d.js.map +0 -1
  47. package/lib/module/hooks/index.js +0 -10
  48. package/lib/module/hooks/index.js.map +0 -1
  49. package/lib/module/hooks/useRinggCall.js +0 -259
  50. package/lib/module/hooks/useRinggCall.js.map +0 -1
  51. package/lib/module/hooks/useRinggChat.js +0 -141
  52. package/lib/module/hooks/useRinggChat.js.map +0 -1
  53. package/lib/module/hooks/useRinggComponents.js +0 -236
  54. package/lib/module/hooks/useRinggComponents.js.map +0 -1
  55. package/lib/module/hooks/useRinggFeedback.js +0 -66
  56. package/lib/module/hooks/useRinggFeedback.js.map +0 -1
  57. package/lib/module/hooks/useRinggTheme.js +0 -39
  58. package/lib/module/hooks/useRinggTheme.js.map +0 -1
  59. package/lib/module/hooks/useRinggTranscripts.js +0 -70
  60. package/lib/module/hooks/useRinggTranscripts.js.map +0 -1
  61. package/lib/module/hooks/useRinggWidgetState.js +0 -51
  62. package/lib/module/hooks/useRinggWidgetState.js.map +0 -1
  63. package/lib/module/index.js +0 -56
  64. package/lib/module/index.js.map +0 -1
  65. package/lib/module/package.json +0 -1
  66. package/lib/typescript/adapters/index.d.ts +0 -2
  67. package/lib/typescript/adapters/index.d.ts.map +0 -1
  68. package/lib/typescript/adapters/livekit-rn-adapter.d.ts +0 -38
  69. package/lib/typescript/adapters/livekit-rn-adapter.d.ts.map +0 -1
  70. package/lib/typescript/components/RinggWidget.d.ts +0 -44
  71. package/lib/typescript/components/RinggWidget.d.ts.map +0 -1
  72. package/lib/typescript/components/steps/ButtonsStep.d.ts +0 -17
  73. package/lib/typescript/components/steps/ButtonsStep.d.ts.map +0 -1
  74. package/lib/typescript/components/steps/CalendarStep.d.ts +0 -16
  75. package/lib/typescript/components/steps/CalendarStep.d.ts.map +0 -1
  76. package/lib/typescript/components/steps/ConfirmationStep.d.ts +0 -16
  77. package/lib/typescript/components/steps/ConfirmationStep.d.ts.map +0 -1
  78. package/lib/typescript/components/steps/FormStep.d.ts +0 -17
  79. package/lib/typescript/components/steps/FormStep.d.ts.map +0 -1
  80. package/lib/typescript/components/steps/InteractiveFlow.d.ts +0 -23
  81. package/lib/typescript/components/steps/InteractiveFlow.d.ts.map +0 -1
  82. package/lib/typescript/components/ui/ActionButton.d.ts +0 -22
  83. package/lib/typescript/components/ui/ActionButton.d.ts.map +0 -1
  84. package/lib/typescript/components/ui/CallControls.d.ts +0 -22
  85. package/lib/typescript/components/ui/CallControls.d.ts.map +0 -1
  86. package/lib/typescript/components/ui/FeedbackScreen.d.ts +0 -24
  87. package/lib/typescript/components/ui/FeedbackScreen.d.ts.map +0 -1
  88. package/lib/typescript/components/ui/Icons.d.ts +0 -28
  89. package/lib/typescript/components/ui/Icons.d.ts.map +0 -1
  90. package/lib/typescript/components/ui/MessageBubble.d.ts +0 -17
  91. package/lib/typescript/components/ui/MessageBubble.d.ts.map +0 -1
  92. package/lib/typescript/components/ui/TabSelector.d.ts +0 -21
  93. package/lib/typescript/components/ui/TabSelector.d.ts.map +0 -1
  94. package/lib/typescript/components/ui/WidgetHeader.d.ts +0 -20
  95. package/lib/typescript/components/ui/WidgetHeader.d.ts.map +0 -1
  96. package/lib/typescript/context/RinggProvider.d.ts +0 -53
  97. package/lib/typescript/context/RinggProvider.d.ts.map +0 -1
  98. package/lib/typescript/context/index.d.ts +0 -3
  99. package/lib/typescript/context/index.d.ts.map +0 -1
  100. package/lib/typescript/hooks/index.d.ts +0 -15
  101. package/lib/typescript/hooks/index.d.ts.map +0 -1
  102. package/lib/typescript/hooks/useRinggCall.d.ts +0 -41
  103. package/lib/typescript/hooks/useRinggCall.d.ts.map +0 -1
  104. package/lib/typescript/hooks/useRinggChat.d.ts +0 -29
  105. package/lib/typescript/hooks/useRinggChat.d.ts.map +0 -1
  106. package/lib/typescript/hooks/useRinggComponents.d.ts +0 -52
  107. package/lib/typescript/hooks/useRinggComponents.d.ts.map +0 -1
  108. package/lib/typescript/hooks/useRinggFeedback.d.ts +0 -23
  109. package/lib/typescript/hooks/useRinggFeedback.d.ts.map +0 -1
  110. package/lib/typescript/hooks/useRinggTheme.d.ts +0 -40
  111. package/lib/typescript/hooks/useRinggTheme.d.ts.map +0 -1
  112. package/lib/typescript/hooks/useRinggTranscripts.d.ts +0 -30
  113. package/lib/typescript/hooks/useRinggTranscripts.d.ts.map +0 -1
  114. package/lib/typescript/hooks/useRinggWidgetState.d.ts +0 -38
  115. package/lib/typescript/hooks/useRinggWidgetState.d.ts.map +0 -1
  116. package/lib/typescript/index.d.ts +0 -44
  117. package/lib/typescript/index.d.ts.map +0 -1
  118. package/lib/typescript/package.json +0 -1
@@ -1,236 +0,0 @@
1
- "use strict";
2
-
3
- /**
4
- * useRinggComponents — headless hook for receiving interactive components from the agent.
5
- *
6
- * During a call, the backend can push interactive UI components
7
- * (calendar, form, buttons, confirmation, multi-step flows)
8
- * via LiveKit RPC. This hook handles:
9
- *
10
- * - Registering RPC handlers for component delivery
11
- * - Transforming backend RPC format to internal component format
12
- * - Tracking pending component responses
13
- * - Sending user responses back to the agent
14
- *
15
- * Usage:
16
- * ```tsx
17
- * const { components, respondToComponent } = useRinggComponents();
18
- *
19
- * {components.map(comp => (
20
- * <InteractiveComponent
21
- * key={comp.component_id}
22
- * data={comp}
23
- * onSubmit={(response) => respondToComponent(comp.component_id, response)}
24
- * />
25
- * ))}
26
- * ```
27
- */
28
-
29
- import { useCallback, useEffect, useRef, useState } from "react";
30
- import { transformRpcToComponent, formatComponentResponse, formatDiseaseSubmission, formatDiseaseSearch, formatSlashCommand } from "@ringg/core";
31
- import { useRinggContext } from "../context/RinggProvider.js";
32
- export function useRinggComponents() {
33
- const {
34
- livekit,
35
- eventBus
36
- } = useRinggContext();
37
- const [components, setComponents] = useState([]);
38
- const [lastSourceUrl, setLastSourceUrl] = useState("");
39
- const [connState, setConnState] = useState("disconnected");
40
- const pendingResponses = useRef(new Map());
41
- const diseaseSearchResolver = useRef(null);
42
-
43
- // Track connection state
44
- useEffect(() => {
45
- const unsub = livekit.onConnectionStateChange(state => {
46
- setConnState(state);
47
- });
48
- setConnState(livekit.getConnectionState());
49
- return unsub;
50
- }, [livekit]);
51
- const addComponent = useCallback(component => {
52
- setComponents(prev => {
53
- // Deduplicate by component_id — if the agent re-sends the same
54
- // component (e.g. on every message), replace rather than stack.
55
- const existingIndex = prev.findIndex(c => c.component_id === component.component_id);
56
- if (existingIndex !== -1) {
57
- const updated = [...prev];
58
- updated[existingIndex] = component;
59
- return updated;
60
- }
61
- return [...prev, component];
62
- });
63
- eventBus.emit("ringg:calendar_booking", {
64
- status: "shown",
65
- componentId: component.component_id
66
- });
67
- }, [eventBus]);
68
-
69
- // Register RPC handlers when connected
70
- useEffect(() => {
71
- if (connState !== "connected") return;
72
-
73
- // Handler for source URLs
74
- livekit.registerRpcMethod("send_source_urls", async data => {
75
- try {
76
- const parsed = JSON.parse(data.payload);
77
- if (Array.isArray(parsed.source_urls)) {
78
- setLastSourceUrl(parsed.source_urls.join(", "));
79
- } else if (parsed.source_url) {
80
- setLastSourceUrl(parsed.source_url);
81
- }
82
- return JSON.stringify({
83
- status: "received"
84
- });
85
- } catch (e) {
86
- console.error("[useRinggComponents] Failed to parse send_source_urls:", e);
87
- throw new Error("Invalid payload for send_source_urls");
88
- }
89
- });
90
-
91
- // Legacy handler for render_component
92
- livekit.registerRpcMethod("render_component", async data => {
93
- try {
94
- const parsed = JSON.parse(data.payload);
95
- if (parsed.component_type && parsed.component_id) {
96
- addComponent(parsed);
97
- }
98
- return JSON.stringify({
99
- status: "received"
100
- });
101
- } catch (e) {
102
- console.error("[useRinggComponents] Failed to parse render_component:", e);
103
- throw new Error("Invalid component payload");
104
- }
105
- });
106
-
107
- // New handler for send_dynamic_data
108
- livekit.registerRpcMethod("send_dynamic_data", async data => {
109
- try {
110
- const parsed = JSON.parse(data.payload);
111
- const componentType = parsed.component_type;
112
- if (!componentType) {
113
- return JSON.stringify({
114
- status: "error",
115
- message: "No component_type provided"
116
- });
117
- }
118
- const componentName = componentType.replace("render_component_", "");
119
-
120
- // Handle disease search results — resolve pending promise
121
- if (componentName === "disease_search_results") {
122
- const results = parsed.results ?? [];
123
- if (diseaseSearchResolver.current) {
124
- diseaseSearchResolver.current(results);
125
- diseaseSearchResolver.current = null;
126
- }
127
- return JSON.stringify({
128
- status: "received"
129
- });
130
- }
131
-
132
- // Transform backend format to internal format
133
- const component = transformRpcToComponent(componentName, parsed);
134
- if (component) {
135
- pendingResponses.current.set(component.component_id, {
136
- name: componentName,
137
- originalConfig: parsed.component_config
138
- });
139
- addComponent(component);
140
- return JSON.stringify({
141
- status: "received",
142
- component_id: component.component_id
143
- });
144
- }
145
- return JSON.stringify({
146
- status: "error",
147
- message: `Unknown component type: ${componentName}`
148
- });
149
- } catch (e) {
150
- console.error("[useRinggComponents] Failed to parse send_dynamic_data:", e);
151
- throw new Error("Invalid send_dynamic_data payload");
152
- }
153
- });
154
- return () => {
155
- livekit.unregisterRpcMethod("send_source_urls");
156
- livekit.unregisterRpcMethod("render_component");
157
- livekit.unregisterRpcMethod("send_dynamic_data");
158
- };
159
- }, [livekit, connState, addComponent]);
160
- const respondToComponent = useCallback(async (componentId, responseData) => {
161
- const pendingInfo = pendingResponses.current.get(componentId);
162
- const agentIdentity = livekit.getAgentIdentity();
163
- if (!pendingInfo || !agentIdentity) return;
164
- const {
165
- method,
166
- payload
167
- } = formatComponentResponse(pendingInfo.name, componentId, responseData, pendingInfo.originalConfig);
168
- try {
169
- await livekit.performRpc(agentIdentity, method, payload);
170
- pendingResponses.current.delete(componentId);
171
- } catch (err) {
172
- console.error("[useRinggComponents] Failed to send response:", err);
173
- }
174
- }, [livekit]);
175
- const searchDiseases = useCallback(query => {
176
- return new Promise(resolve => {
177
- const agentIdentity = livekit.getAgentIdentity();
178
- if (!agentIdentity) {
179
- resolve([]);
180
- return;
181
- }
182
- diseaseSearchResolver.current = resolve;
183
- const {
184
- method,
185
- payload
186
- } = formatDiseaseSearch(query);
187
- livekit.performRpc(agentIdentity, method, payload).catch(err => {
188
- console.error("[useRinggComponents] Disease search RPC failed:", err);
189
- diseaseSearchResolver.current = null;
190
- resolve([]);
191
- });
192
- });
193
- }, [livekit]);
194
- const submitDiseaseWidget = useCallback(async (componentId, selections) => {
195
- const agentIdentity = livekit.getAgentIdentity();
196
- if (!agentIdentity) return;
197
- const {
198
- method,
199
- payload
200
- } = formatDiseaseSubmission(componentId, selections);
201
- try {
202
- await livekit.performRpc(agentIdentity, method, payload);
203
- } catch (err) {
204
- console.error("[useRinggComponents] Disease submit RPC failed:", err);
205
- }
206
- }, [livekit]);
207
- const sendSlashCommand = useCallback(async command => {
208
- const agentIdentity = livekit.getAgentIdentity();
209
- if (!agentIdentity) return;
210
- const {
211
- method,
212
- payload
213
- } = formatSlashCommand(command);
214
- try {
215
- await livekit.performRpc(agentIdentity, method, payload);
216
- } catch (err) {
217
- console.error("[useRinggComponents] Slash command RPC failed:", err);
218
- }
219
- }, [livekit]);
220
- const clearComponents = useCallback(() => {
221
- setComponents([]);
222
- pendingResponses.current.clear();
223
- diseaseSearchResolver.current = null;
224
- setLastSourceUrl("");
225
- }, []);
226
- return {
227
- components,
228
- respondToComponent,
229
- searchDiseases,
230
- submitDiseaseWidget,
231
- sendSlashCommand,
232
- clearComponents,
233
- lastSourceUrl
234
- };
235
- }
236
- //# sourceMappingURL=useRinggComponents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useState","transformRpcToComponent","formatComponentResponse","formatDiseaseSubmission","formatDiseaseSearch","formatSlashCommand","useRinggContext","useRinggComponents","livekit","eventBus","components","setComponents","lastSourceUrl","setLastSourceUrl","connState","setConnState","pendingResponses","Map","diseaseSearchResolver","unsub","onConnectionStateChange","state","getConnectionState","addComponent","component","prev","existingIndex","findIndex","c","component_id","updated","emit","status","componentId","registerRpcMethod","data","parsed","JSON","parse","payload","Array","isArray","source_urls","join","source_url","stringify","e","console","error","Error","component_type","componentType","message","componentName","replace","results","current","set","name","originalConfig","component_config","unregisterRpcMethod","respondToComponent","responseData","pendingInfo","get","agentIdentity","getAgentIdentity","method","performRpc","delete","err","searchDiseases","query","Promise","resolve","catch","submitDiseaseWidget","selections","sendSlashCommand","command","clearComponents","clear"],"sourceRoot":"../../../src","sources":["hooks/useRinggComponents.ts"],"mappings":"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","ignoreList":[]}
@@ -1,66 +0,0 @@
1
- "use strict";
2
-
3
- /**
4
- * useRinggFeedback — headless hook for post-call feedback submission.
5
- *
6
- * Usage:
7
- * ```tsx
8
- * const { submitFeedback, skipFeedback, isSubmitting } = useRinggFeedback();
9
- *
10
- * <StarRating onRate={(rating) => setRating(rating)} />
11
- * <TextInput onChangeText={setComment} />
12
- * <Button onPress={() => submitFeedback(rating, comment)} title="Submit" />
13
- * <Button onPress={skipFeedback} title="Skip" />
14
- * ```
15
- */
16
-
17
- import { useCallback, useState } from "react";
18
- import { useRinggContext } from "../context/RinggProvider.js";
19
- export function useRinggFeedback() {
20
- const {
21
- api,
22
- widgetState,
23
- eventBus
24
- } = useRinggContext();
25
- const [isSubmitting, setIsSubmitting] = useState(false);
26
- const submitFeedback = useCallback(async (rating, comment) => {
27
- const callId = widgetState.getSnapshot().currentCallId;
28
- if (!callId) {
29
- widgetState.close();
30
- return;
31
- }
32
- setIsSubmitting(true);
33
- try {
34
- await api.submitFeedback(callId, {
35
- rating,
36
- comment
37
- });
38
- eventBus.emit("ringg:feedback_status", {
39
- status: "submitted",
40
- callId,
41
- rating
42
- });
43
- } catch (err) {
44
- console.error("[useRinggFeedback] Error submitting feedback:", err);
45
- } finally {
46
- setIsSubmitting(false);
47
- widgetState.close();
48
- }
49
- }, [api, widgetState, eventBus]);
50
- const skipFeedback = useCallback(() => {
51
- const callId = widgetState.getSnapshot().currentCallId;
52
- if (callId) {
53
- eventBus.emit("ringg:feedback_status", {
54
- status: "skipped",
55
- callId
56
- });
57
- }
58
- widgetState.close();
59
- }, [widgetState, eventBus]);
60
- return {
61
- submitFeedback,
62
- skipFeedback,
63
- isSubmitting
64
- };
65
- }
66
- //# sourceMappingURL=useRinggFeedback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useState","useRinggContext","useRinggFeedback","api","widgetState","eventBus","isSubmitting","setIsSubmitting","submitFeedback","rating","comment","callId","getSnapshot","currentCallId","close","emit","status","err","console","error","skipFeedback"],"sourceRoot":"../../../src","sources":["hooks/useRinggFeedback.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAE7C,SAASC,eAAe,QAAQ,6BAA0B;AAa1D,OAAO,SAASC,gBAAgBA,CAAA,EAA2B;EACzD,MAAM;IAAEC,GAAG;IAAEC,WAAW;IAAEC;EAAS,CAAC,GAAGJ,eAAe,CAAC,CAAC;EAExD,MAAM,CAACK,YAAY,EAAEC,eAAe,CAAC,GAAGP,QAAQ,CAAC,KAAK,CAAC;EAEvD,MAAMQ,cAAc,GAAGT,WAAW,CAChC,OAAOU,MAAc,EAAEC,OAAe,KAAK;IACzC,MAAMC,MAAM,GAAGP,WAAW,CAACQ,WAAW,CAAC,CAAC,CAACC,aAAa;IACtD,IAAI,CAACF,MAAM,EAAE;MACXP,WAAW,CAACU,KAAK,CAAC,CAAC;MACnB;IACF;IAEAP,eAAe,CAAC,IAAI,CAAC;IACrB,IAAI;MACF,MAAMJ,GAAG,CAACK,cAAc,CAACG,MAAM,EAAE;QAAEF,MAAM;QAAEC;MAAQ,CAAC,CAAC;MACrDL,QAAQ,CAACU,IAAI,CAAC,uBAAuB,EAAE;QACrCC,MAAM,EAAE,WAAW;QACnBL,MAAM;QACNF;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOQ,GAAG,EAAE;MACZC,OAAO,CAACC,KAAK,CAAC,+CAA+C,EAAEF,GAAG,CAAC;IACrE,CAAC,SAAS;MACRV,eAAe,CAAC,KAAK,CAAC;MACtBH,WAAW,CAACU,KAAK,CAAC,CAAC;IACrB;EACF,CAAC,EACD,CAACX,GAAG,EAAEC,WAAW,EAAEC,QAAQ,CAC7B,CAAC;EAED,MAAMe,YAAY,GAAGrB,WAAW,CAAC,MAAM;IACrC,MAAMY,MAAM,GAAGP,WAAW,CAACQ,WAAW,CAAC,CAAC,CAACC,aAAa;IACtD,IAAIF,MAAM,EAAE;MACVN,QAAQ,CAACU,IAAI,CAAC,uBAAuB,EAAE;QACrCC,MAAM,EAAE,SAAS;QACjBL;MACF,CAAC,CAAC;IACJ;IACAP,WAAW,CAACU,KAAK,CAAC,CAAC;EACrB,CAAC,EAAE,CAACV,WAAW,EAAEC,QAAQ,CAAC,CAAC;EAE3B,OAAO;IACLG,cAAc;IACdY,YAAY;IACZd;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,39 +0,0 @@
1
- "use strict";
2
-
3
- /**
4
- * useRinggTheme — hook to access the resolved widget theme.
5
- *
6
- * Returns the fully resolved theme (all defaults filled in),
7
- * plus utility functions for gradient-aware styling.
8
- *
9
- * Usage:
10
- * ```tsx
11
- * const { theme, getBackgroundStyle, getSolidColor } = useRinggTheme();
12
- *
13
- * <View style={{ backgroundColor: theme.backgroundColor }}>
14
- * <View style={getBackgroundStyle(theme.primaryColor)}>
15
- * <Text style={{ color: theme.primaryTextColor }}>Hello</Text>
16
- * </View>
17
- * </View>
18
- * ```
19
- */
20
-
21
- import { useMemo } from "react";
22
- import { colorToSolid, getButtonRadius, getContrastingTextColor, isLightColor } from "@ringg/core";
23
- import { useRinggContext } from "../context/RinggProvider.js";
24
- export function useRinggTheme() {
25
- const {
26
- theme
27
- } = useRinggContext();
28
- return useMemo(() => ({
29
- theme,
30
- getSolidColor: colorToSolid,
31
- buttonRadius: getButtonRadius(theme.buttonStyle),
32
- isLight: isLightColor,
33
- getContrastText: getContrastingTextColor,
34
- getBackgroundStyle: color => ({
35
- backgroundColor: colorToSolid(color)
36
- })
37
- }), [theme]);
38
- }
39
- //# sourceMappingURL=useRinggTheme.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useMemo","colorToSolid","getButtonRadius","getContrastingTextColor","isLightColor","useRinggContext","useRinggTheme","theme","getSolidColor","buttonRadius","buttonStyle","isLight","getContrastText","getBackgroundStyle","color","backgroundColor"],"sourceRoot":"../../../src","sources":["hooks/useRinggTheme.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,YAAY,EAAEC,eAAe,EAAEC,uBAAuB,EAAEC,YAAY,QAAkC,aAAa;AAE5H,SAASC,eAAe,QAAQ,6BAA0B;AA0B1D,OAAO,SAASC,aAAaA,CAAA,EAAwB;EACnD,MAAM;IAAEC;EAAM,CAAC,GAAGF,eAAe,CAAC,CAAC;EAEnC,OAAOL,OAAO,CACZ,OAAO;IACLO,KAAK;IACLC,aAAa,EAAEP,YAAY;IAC3BQ,YAAY,EAAEP,eAAe,CAACK,KAAK,CAACG,WAAW,CAAC;IAChDC,OAAO,EAAEP,YAAY;IACrBQ,eAAe,EAAET,uBAAuB;IACxCU,kBAAkB,EAAGC,KAAa,KAAM;MACtCC,eAAe,EAAEd,YAAY,CAACa,KAAK;IACrC,CAAC;EACH,CAAC,CAAC,EACF,CAACP,KAAK,CACR,CAAC;AACH","ignoreList":[]}
@@ -1,70 +0,0 @@
1
- "use strict";
2
-
3
- /**
4
- * useRinggTranscripts — headless hook for live audio transcription.
5
- *
6
- * During a voice call, the AI agent's speech and the user's speech
7
- * are transcribed in real-time. This hook provides those transcripts
8
- * as a sorted message list.
9
- *
10
- * Usage:
11
- * ```tsx
12
- * const { transcripts } = useRinggTranscripts();
13
- *
14
- * <FlatList
15
- * data={transcripts}
16
- * renderItem={({ item }) => (
17
- * <Text style={{ color: item.isSelf ? 'blue' : 'black' }}>
18
- * {item.name}: {item.message}
19
- * </Text>
20
- * )}
21
- * />
22
- * ```
23
- */
24
-
25
- import { useCallback, useEffect, useRef, useState } from "react";
26
- import { useRinggContext } from "../context/RinggProvider.js";
27
- export function useRinggTranscripts() {
28
- const {
29
- livekit
30
- } = useRinggContext();
31
- const [transcripts, setTranscripts] = useState([]);
32
- const [connState, setConnState] = useState("disconnected");
33
- const segmentMap = useRef(new Map());
34
-
35
- // Track connection state
36
- useEffect(() => {
37
- const unsub = livekit.onConnectionStateChange(state => {
38
- setConnState(state);
39
- });
40
- setConnState(livekit.getConnectionState());
41
- return unsub;
42
- }, [livekit]);
43
- useEffect(() => {
44
- if (connState !== "connected") return;
45
- const unsub = livekit.onTranscription(segment => {
46
- const existing = segmentMap.current.get(segment.id);
47
- const msg = {
48
- name: segment.isAgent ? "Agent" : "You",
49
- message: segment.isFinal ? segment.text : `${segment.text} ...`,
50
- isSelf: !segment.isAgent,
51
- timestamp: existing?.timestamp ?? Date.now()
52
- };
53
- segmentMap.current.set(segment.id, msg);
54
-
55
- // Rebuild sorted list from map
56
- const sorted = Array.from(segmentMap.current.values()).sort((a, b) => a.timestamp - b.timestamp);
57
- setTranscripts(sorted);
58
- });
59
- return unsub;
60
- }, [livekit, connState]);
61
- const clearTranscripts = useCallback(() => {
62
- segmentMap.current.clear();
63
- setTranscripts([]);
64
- }, []);
65
- return {
66
- transcripts,
67
- clearTranscripts
68
- };
69
- }
70
- //# sourceMappingURL=useRinggTranscripts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useState","useRinggContext","useRinggTranscripts","livekit","transcripts","setTranscripts","connState","setConnState","segmentMap","Map","unsub","onConnectionStateChange","state","getConnectionState","onTranscription","segment","existing","current","get","id","msg","name","isAgent","message","isFinal","text","isSelf","timestamp","Date","now","set","sorted","Array","from","values","sort","a","b","clearTranscripts","clear"],"sourceRoot":"../../../src","sources":["hooks/useRinggTranscripts.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAIhE,SAASC,eAAe,QAAQ,6BAA0B;AAU1D,OAAO,SAASC,mBAAmBA,CAAA,EAA8B;EAC/D,MAAM;IAAEC;EAAQ,CAAC,GAAGF,eAAe,CAAC,CAAC;EAErC,MAAM,CAACG,WAAW,EAAEC,cAAc,CAAC,GAAGL,QAAQ,CAAgB,EAAE,CAAC;EACjE,MAAM,CAACM,SAAS,EAAEC,YAAY,CAAC,GAAGP,QAAQ,CAAkB,cAAc,CAAC;EAC3E,MAAMQ,UAAU,GAAGT,MAAM,CAA2B,IAAIU,GAAG,CAAC,CAAC,CAAC;;EAE9D;EACAX,SAAS,CAAC,MAAM;IACd,MAAMY,KAAK,GAAGP,OAAO,CAACQ,uBAAuB,CAAEC,KAAK,IAAK;MACvDL,YAAY,CAACK,KAAK,CAAC;IACrB,CAAC,CAAC;IACFL,YAAY,CAACJ,OAAO,CAACU,kBAAkB,CAAC,CAAC,CAAC;IAC1C,OAAOH,KAAK;EACd,CAAC,EAAE,CAACP,OAAO,CAAC,CAAC;EAEbL,SAAS,CAAC,MAAM;IACd,IAAIQ,SAAS,KAAK,WAAW,EAAE;IAE/B,MAAMI,KAAK,GAAGP,OAAO,CAACW,eAAe,CAAEC,OAA6B,IAAK;MACvE,MAAMC,QAAQ,GAAGR,UAAU,CAACS,OAAO,CAACC,GAAG,CAACH,OAAO,CAACI,EAAE,CAAC;MAEnD,MAAMC,GAAgB,GAAG;QACvBC,IAAI,EAAEN,OAAO,CAACO,OAAO,GAAG,OAAO,GAAG,KAAK;QACvCC,OAAO,EAAER,OAAO,CAACS,OAAO,GAAGT,OAAO,CAACU,IAAI,GAAG,GAAGV,OAAO,CAACU,IAAI,MAAM;QAC/DC,MAAM,EAAE,CAACX,OAAO,CAACO,OAAO;QACxBK,SAAS,EAAEX,QAAQ,EAAEW,SAAS,IAAIC,IAAI,CAACC,GAAG,CAAC;MAC7C,CAAC;MAEDrB,UAAU,CAACS,OAAO,CAACa,GAAG,CAACf,OAAO,CAACI,EAAE,EAAEC,GAAG,CAAC;;MAEvC;MACA,MAAMW,MAAM,GAAGC,KAAK,CAACC,IAAI,CAACzB,UAAU,CAACS,OAAO,CAACiB,MAAM,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACT,SAAS,GAAGU,CAAC,CAACV,SAAS,CAAC;MAChGtB,cAAc,CAAC0B,MAAM,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOrB,KAAK;EACd,CAAC,EAAE,CAACP,OAAO,EAAEG,SAAS,CAAC,CAAC;EAExB,MAAMgC,gBAAgB,GAAGzC,WAAW,CAAC,MAAM;IACzCW,UAAU,CAACS,OAAO,CAACsB,KAAK,CAAC,CAAC;IAC1BlC,cAAc,CAAC,EAAE,CAAC;EACpB,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLD,WAAW;IACXkC;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,51 +0,0 @@
1
- "use strict";
2
-
3
- /**
4
- * useRinggWidgetState — hook to observe the widget's open/close/feedback state.
5
- *
6
- * Subscribes to the WidgetStateController from @ringg/core and
7
- * re-renders when the state changes.
8
- *
9
- * Usage:
10
- * ```tsx
11
- * const { isOpen, isShowingFeedback, toggle, open, close } = useRinggWidgetState();
12
- *
13
- * <TouchableOpacity onPress={toggle}>
14
- * <PhoneIcon />
15
- * </TouchableOpacity>
16
- *
17
- * {isOpen && <WidgetPanel />}
18
- * {isShowingFeedback && <FeedbackScreen />}
19
- * ```
20
- */
21
-
22
- import { useCallback, useEffect, useState } from "react";
23
- import { useRinggContext } from "../context/RinggProvider.js";
24
- export function useRinggWidgetState() {
25
- const {
26
- widgetState
27
- } = useRinggContext();
28
- const [snapshot, setSnapshot] = useState(widgetState.getSnapshot());
29
- useEffect(() => {
30
- const unsub = widgetState.subscribe(newSnapshot => {
31
- setSnapshot(newSnapshot);
32
- });
33
- return unsub;
34
- }, [widgetState]);
35
- const open = useCallback(() => widgetState.open(), [widgetState]);
36
- const minimize = useCallback(() => widgetState.minimize(), [widgetState]);
37
- const close = useCallback(() => widgetState.close(), [widgetState]);
38
- const toggle = useCallback(() => widgetState.toggle(), [widgetState]);
39
- const showFeedback = useCallback(() => widgetState.showFeedback(), [widgetState]);
40
- return {
41
- isOpen: snapshot.viewState === "open" || snapshot.viewState === "feedback",
42
- isShowingFeedback: snapshot.viewState === "feedback",
43
- currentCallId: snapshot.currentCallId,
44
- open,
45
- minimize,
46
- close,
47
- toggle,
48
- showFeedback
49
- };
50
- }
51
- //# sourceMappingURL=useRinggWidgetState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useState","useRinggContext","useRinggWidgetState","widgetState","snapshot","setSnapshot","getSnapshot","unsub","subscribe","newSnapshot","open","minimize","close","toggle","showFeedback","isOpen","viewState","isShowingFeedback","currentCallId"],"sourceRoot":"../../../src","sources":["hooks/useRinggWidgetState.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAIxD,SAASC,eAAe,QAAQ,6BAA0B;AA4B1D,OAAO,SAASC,mBAAmBA,CAAA,EAA8B;EAC/D,MAAM;IAAEC;EAAY,CAAC,GAAGF,eAAe,CAAC,CAAC;EAEzC,MAAM,CAACG,QAAQ,EAAEC,WAAW,CAAC,GAAGL,QAAQ,CAAsBG,WAAW,CAACG,WAAW,CAAC,CAAC,CAAC;EAExFP,SAAS,CAAC,MAAM;IACd,MAAMQ,KAAK,GAAGJ,WAAW,CAACK,SAAS,CAAEC,WAAW,IAAK;MACnDJ,WAAW,CAACI,WAAW,CAAC;IAC1B,CAAC,CAAC;IACF,OAAOF,KAAK;EACd,CAAC,EAAE,CAACJ,WAAW,CAAC,CAAC;EAEjB,MAAMO,IAAI,GAAGZ,WAAW,CAAC,MAAMK,WAAW,CAACO,IAAI,CAAC,CAAC,EAAE,CAACP,WAAW,CAAC,CAAC;EACjE,MAAMQ,QAAQ,GAAGb,WAAW,CAAC,MAAMK,WAAW,CAACQ,QAAQ,CAAC,CAAC,EAAE,CAACR,WAAW,CAAC,CAAC;EACzE,MAAMS,KAAK,GAAGd,WAAW,CAAC,MAAMK,WAAW,CAACS,KAAK,CAAC,CAAC,EAAE,CAACT,WAAW,CAAC,CAAC;EACnE,MAAMU,MAAM,GAAGf,WAAW,CAAC,MAAMK,WAAW,CAACU,MAAM,CAAC,CAAC,EAAE,CAACV,WAAW,CAAC,CAAC;EACrE,MAAMW,YAAY,GAAGhB,WAAW,CAAC,MAAMK,WAAW,CAACW,YAAY,CAAC,CAAC,EAAE,CAACX,WAAW,CAAC,CAAC;EAEjF,OAAO;IACLY,MAAM,EAAEX,QAAQ,CAACY,SAAS,KAAK,MAAM,IAAIZ,QAAQ,CAACY,SAAS,KAAK,UAAU;IAC1EC,iBAAiB,EAAEb,QAAQ,CAACY,SAAS,KAAK,UAAU;IACpDE,aAAa,EAAEd,QAAQ,CAACc,aAAa;IACrCR,IAAI;IACJC,QAAQ;IACRC,KAAK;IACLC,MAAM;IACNC;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,56 +0,0 @@
1
- "use strict";
2
-
3
- /**
4
- * @ringg/react-native
5
- *
6
- * Ringg AI widget for React Native apps.
7
- *
8
- * Provides two consumption modes:
9
- *
10
- * 1. DROP-IN WIDGET — pre-built UI with FAB trigger + chat panel:
11
- * ```tsx
12
- * import { RinggWidget } from "@ringg/react-native";
13
- * <RinggWidget config={{ agentId: "...", xApiKey: "...", variables: {} }} />
14
- * ```
15
- *
16
- * 2. HEADLESS HOOKS — build your own UI:
17
- * ```tsx
18
- * import { RinggProvider, useRinggCall, useRinggChat } from "@ringg/react-native";
19
- *
20
- * <RinggProvider config={{ agentId: "...", xApiKey: "...", variables: {} }}>
21
- * <YourCustomUI />
22
- * </RinggProvider>
23
- * ```
24
- */
25
-
26
- // ─── Drop-in Widget ──────────────────────────────────────────────────────────
27
- export { RinggWidget } from "./components/RinggWidget.js";
28
- // ─── Provider ────────────────────────────────────────────────────────────────
29
- export { RinggProvider, useRinggContext } from "./context/index.js";
30
- // ─── Headless Hooks ──────────────────────────────────────────────────────────
31
- export { useRinggCall, useRinggChat, useRinggTranscripts, useRinggComponents, useRinggWidgetState, useRinggFeedback, useRinggTheme } from "./hooks/index.js";
32
- // ─── Adapters ────────────────────────────────────────────────────────────────
33
- export { LiveKitRNAdapter } from "./adapters/index.js";
34
-
35
- // ─── Re-export core types & utilities for convenience ────────────────────────
36
-
37
- export { DEFAULT_CONFIG, DEFAULT_WIDGET_THEME, WIDGET_PRESET_THEMES, mergeWidgetTheme, getButtonRadius, colorToSolid, isGradient, formatTimestamp, groupSlotsByDate, formatSlotTime, formatSlotDate, isAgentIdentity, filterSlashCommands } from "@ringg/core";
38
-
39
- // ─── UI Sub-components (for composition) ─────────────────────────────────────
40
- export { MessageBubble } from "./components/ui/MessageBubble.js";
41
- export { WidgetHeader } from "./components/ui/WidgetHeader.js";
42
- export { ActionButton } from "./components/ui/ActionButton.js";
43
- export { CallControls } from "./components/ui/CallControls.js";
44
- export { FeedbackScreen } from "./components/ui/FeedbackScreen.js";
45
- export { TabSelector } from "./components/ui/TabSelector.js";
46
-
47
- // ─── Interactive Step Components (for composition) ───────────────────────────
48
- export { InteractiveFlow } from "./components/steps/InteractiveFlow.js";
49
- export { CalendarStep } from "./components/steps/CalendarStep.js";
50
- export { FormStep } from "./components/steps/FormStep.js";
51
- export { ButtonsStep } from "./components/steps/ButtonsStep.js";
52
- export { ConfirmationStep } from "./components/steps/ConfirmationStep.js";
53
-
54
- // ─── Icons (uses @expo/vector-icons — ships with every Expo project) ─────────
55
- export { PhoneCallRingIcon, PhoneCallIcon, PhoneEndCallIcon, MicrophoneIcon, MicOffIcon, ChatIcon, SendIcon, StarIcon, CloseIcon, MinusIcon, WidgetPhoneIcon } from "./components/ui/Icons.js";
56
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["RinggWidget","RinggProvider","useRinggContext","useRinggCall","useRinggChat","useRinggTranscripts","useRinggComponents","useRinggWidgetState","useRinggFeedback","useRinggTheme","LiveKitRNAdapter","DEFAULT_CONFIG","DEFAULT_WIDGET_THEME","WIDGET_PRESET_THEMES","mergeWidgetTheme","getButtonRadius","colorToSolid","isGradient","formatTimestamp","groupSlotsByDate","formatSlotTime","formatSlotDate","isAgentIdentity","filterSlashCommands","MessageBubble","WidgetHeader","ActionButton","CallControls","FeedbackScreen","TabSelector","InteractiveFlow","CalendarStep","FormStep","ButtonsStep","ConfirmationStep","PhoneCallRingIcon","PhoneCallIcon","PhoneEndCallIcon","MicrophoneIcon","MicOffIcon","ChatIcon","SendIcon","StarIcon","CloseIcon","MinusIcon","WidgetPhoneIcon"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASA,WAAW,QAAQ,6BAA0B;AAGtD;AACA,SAASC,aAAa,EAAEC,eAAe,QAAQ,oBAAW;AAG1D;AACA,SAASC,YAAY,EAAEC,YAAY,EAAEC,mBAAmB,EAAEC,kBAAkB,EAAEC,mBAAmB,EAAEC,gBAAgB,EAAEC,aAAa,QAAQ,kBAAS;AAInJ;AACA,SAASC,gBAAgB,QAAQ,qBAAY;;AAE7C;;AAwBA,SACEC,cAAc,EACdC,oBAAoB,EACpBC,oBAAoB,EACpBC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,EACZC,UAAU,EACVC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,cAAc,EACdC,eAAe,EACfC,mBAAmB,QACd,aAAa;;AAEpB;AACA,SAASC,aAAa,QAAQ,kCAA+B;AAC7D,SAASC,YAAY,QAAQ,iCAA8B;AAC3D,SAASC,YAAY,QAAQ,iCAA8B;AAC3D,SAASC,YAAY,QAAQ,iCAA8B;AAC3D,SAASC,cAAc,QAAQ,mCAAgC;AAC/D,SAASC,WAAW,QAAQ,gCAA6B;;AAEzD;AACA,SAASC,eAAe,QAAQ,uCAAoC;AACpE,SAASC,YAAY,QAAQ,oCAAiC;AAC9D,SAASC,QAAQ,QAAQ,gCAA6B;AACtD,SAASC,WAAW,QAAQ,mCAAgC;AAC5D,SAASC,gBAAgB,QAAQ,wCAAqC;;AAEtE;AACA,SAASC,iBAAiB,EAAEC,aAAa,EAAEC,gBAAgB,EAAEC,cAAc,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,EAAEC,eAAe,QAAQ,0BAAuB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"type":"module"}
@@ -1,2 +0,0 @@
1
- export { LiveKitRNAdapter } from "./livekit-rn-adapter";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,38 +0,0 @@
1
- /**
2
- * React Native implementation of the LiveKitAdapter interface.
3
- *
4
- * Wraps `livekit-client` (which @livekit/react-native patches for RN compatibility)
5
- * to provide the same abstract interface that @ringg/core expects.
6
- *
7
- * Automatically calls `registerGlobals()` on first use — consumers don't need to
8
- * call it themselves.
9
- */
10
- import { Room } from "livekit-client";
11
- import type { LiveKitAdapter, ConnectionState, RpcInvocation, TextStreamInfo, TranscriptionSegment } from "@ringg/core";
12
- type Unsubscribe = () => void;
13
- export declare class LiveKitRNAdapter implements LiveKitAdapter {
14
- private room;
15
- private cleanupFns;
16
- constructor(roomOptions?: ConstructorParameters<typeof Room>[0]);
17
- /** Expose the underlying Room for advanced usage or LiveKit hooks. */
18
- getRoom(): Room;
19
- getConnectionState(): ConnectionState;
20
- connect(url: string, token: string): Promise<void>;
21
- disconnect(): void;
22
- setMicrophoneEnabled(enabled: boolean): Promise<void>;
23
- isMicrophoneEnabled(): boolean;
24
- registerRpcMethod(method: string, handler: (data: RpcInvocation) => Promise<string>): void;
25
- unregisterRpcMethod(method: string): void;
26
- performRpc(destinationIdentity: string, method: string, payload: string): Promise<string>;
27
- registerTextStreamHandler(topic: string, handler: (info: TextStreamInfo) => void): void;
28
- unregisterTextStreamHandler(topic: string): void;
29
- onConnectionStateChange(handler: (state: ConnectionState) => void): Unsubscribe;
30
- onParticipantDisconnected(handler: (identity: string) => void): Unsubscribe;
31
- onDisconnected(handler: () => void): Unsubscribe;
32
- onTranscription(handler: (segment: TranscriptionSegment) => void): Unsubscribe;
33
- getAgentIdentity(): string | null;
34
- getLocalIdentity(): string;
35
- dispose(): void;
36
- }
37
- export {};
38
- //# sourceMappingURL=livekit-rn-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"livekit-rn-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/livekit-rn-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,IAAI,EAA6J,MAAM,gBAAgB,CAAC;AAEjM,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxH,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAoB9B,qBAAa,gBAAiB,YAAW,cAAc;IACrD,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,UAAU,CAAqB;gBAE3B,WAAW,CAAC,EAAE,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAS/D,sEAAsE;IACtE,OAAO,IAAI,IAAI;IAMf,kBAAkB,IAAI,eAAe;IAa/B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,UAAU,IAAI,IAAI;IAaZ,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,mBAAmB,IAAI,OAAO;IAM9B,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAU1F,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAInC,UAAU,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU/F,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAcvF,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMhD,uBAAuB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,WAAW;IAwB/E,yBAAyB,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAe3E,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,WAAW;IAWhD,eAAe,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,WAAW;IA2B9E,gBAAgB,IAAI,MAAM,GAAG,IAAI;IASjC,gBAAgB,IAAI,MAAM;IAM1B,OAAO,IAAI,IAAI;CAShB"}