@rannah-labs/react-voice-orb 1.1.3

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 (60) hide show
  1. package/README.md +240 -0
  2. package/assets/orb-ss.png +0 -0
  3. package/assets/thing.png +0 -0
  4. package/dist/bun-server/src/types/index.d.ts +37 -0
  5. package/dist/bun-server/src/types/index.js +2 -0
  6. package/dist/src/app/Types/TranscriberStuff.d.ts +0 -0
  7. package/dist/src/app/Types/TranscriberStuff.js +1 -0
  8. package/dist/src/app/Types/apiModels.d.ts +31 -0
  9. package/dist/src/app/Types/apiModels.js +2 -0
  10. package/dist/src/app/Types/api_types.d.ts +34 -0
  11. package/dist/src/app/Types/api_types.js +2 -0
  12. package/dist/src/app/Types/better-trpc.d.ts +5 -0
  13. package/dist/src/app/Types/better-trpc.js +23 -0
  14. package/dist/src/app/Types/browser-only.d.ts +1 -0
  15. package/dist/src/app/Types/browser-only.js +12 -0
  16. package/dist/src/app/Types/builltInNodesTemplates.d.ts +1070 -0
  17. package/dist/src/app/Types/builltInNodesTemplates.js +1341 -0
  18. package/dist/src/app/Types/defaults.d.ts +7 -0
  19. package/dist/src/app/Types/defaults.js +210 -0
  20. package/dist/src/app/Types/demo_extension.d.ts +11 -0
  21. package/dist/src/app/Types/demo_extension.js +190 -0
  22. package/dist/src/app/Types/envObject.d.ts +97 -0
  23. package/dist/src/app/Types/envObject.js +5 -0
  24. package/dist/src/app/Types/firebase.d.ts +30413 -0
  25. package/dist/src/app/Types/firebase.js +6696 -0
  26. package/dist/src/app/Types/gen_openapi.d.ts +130 -0
  27. package/dist/src/app/Types/gen_openapi.js +2 -0
  28. package/dist/src/app/Types/global_types.d.ts +254 -0
  29. package/dist/src/app/Types/global_types.js +6 -0
  30. package/dist/src/app/Types/messages_types.d.ts +76 -0
  31. package/dist/src/app/Types/messages_types.js +1 -0
  32. package/dist/src/app/Types/vapi_types.d.ts +358 -0
  33. package/dist/src/app/Types/vapi_types.js +2 -0
  34. package/dist/src/app/Types/vf_types.d.ts +33 -0
  35. package/dist/src/app/Types/vf_types.js +2 -0
  36. package/dist/src/public_packages/react-voice-orb/src/animation-orb.d.ts +11 -0
  37. package/dist/src/public_packages/react-voice-orb/src/animation-orb.js +397 -0
  38. package/dist/src/public_packages/react-voice-orb/src/index.d.ts +5 -0
  39. package/dist/src/public_packages/react-voice-orb/src/index.js +16 -0
  40. package/dist/src/public_packages/react-voice-orb/src/providers/AIAudioProvider.d.ts +21 -0
  41. package/dist/src/public_packages/react-voice-orb/src/providers/AIAudioProvider.js +81 -0
  42. package/dist/src/public_packages/react-voice-orb/src/providers/ThemeProvider.d.ts +23 -0
  43. package/dist/src/public_packages/react-voice-orb/src/providers/ThemeProvider.js +202 -0
  44. package/dist/src/public_packages/react-voice-orb/src/scripts/same-script.d.ts +1 -0
  45. package/dist/src/public_packages/react-voice-orb/src/scripts/same-script.js +79 -0
  46. package/dist/src/public_packages/react-voice-orb/src/spinner.d.ts +3 -0
  47. package/dist/src/public_packages/react-voice-orb/src/spinner.js +17 -0
  48. package/dist/src/public_packages/react-voice-orb/tsconfig.tsbuildinfo +1 -0
  49. package/dist/vg-docker/src/+global_consts/client.d.ts +84 -0
  50. package/dist/vg-docker/src/+global_consts/client.js +105 -0
  51. package/package.json +46 -0
  52. package/scripts/post-tsc.ts +74 -0
  53. package/src/animation-orb.tsx +441 -0
  54. package/src/index.ts +5 -0
  55. package/src/providers/AIAudioProvider.tsx +100 -0
  56. package/src/providers/ThemeProvider.tsx +211 -0
  57. package/src/scripts/same-script.ts +73 -0
  58. package/src/spinner.tsx +19 -0
  59. package/tsconfig.json +34 -0
  60. package/webpack.config.js +141 -0
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ "use client";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const react_1 = __importStar(require("react"));
28
+ const THREE = __importStar(require("three"));
29
+ const ThemeProvider_1 = require("./providers/ThemeProvider");
30
+ const AIAudioProvider_1 = require("./providers/AIAudioProvider");
31
+ const AudioAnimationOrb = (props) => {
32
+ const { webCall, callState, isMuted } = (0, AIAudioProvider_1.useAIVoice)();
33
+ const { getColor, customStyles } = (0, ThemeProvider_1.useOrbTheme)();
34
+ const mountRef = (0, react_1.useRef)(null);
35
+ // if (!webCall) {
36
+ // throw new Error("webCall is not found");
37
+ // }
38
+ // ======== Sensitivity factor ========
39
+ const SENSITIVITY = props.animationSensitivity ?? 1.5; // Adjust this to increase or decrease overall responsiveness
40
+ (0, react_1.useEffect)(() => {
41
+ const scene = new THREE.Scene();
42
+ // Calculate aspect ratio
43
+ const aspect = props.width / props.height;
44
+ // Define the size of the visible area
45
+ const innerRadius = 2; // Circle radius
46
+ const frustumHeight = innerRadius * 2; // Diameter of the circle
47
+ const frustumWidth = frustumHeight * aspect;
48
+ // Create an OrthographicCamera
49
+ const camera = new THREE.OrthographicCamera(-frustumWidth / 2, frustumWidth / 2, frustumHeight / 2, -frustumHeight / 2, -1000, 1000);
50
+ camera.position.z = 0;
51
+ const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
52
+ renderer.setSize(props.width, props.height);
53
+ renderer.setPixelRatio(window.devicePixelRatio);
54
+ mountRef.current?.appendChild(renderer.domElement);
55
+ // Audio context and analyser
56
+ const audioContext = new (window.AudioContext ||
57
+ window.webkitAudioContext)();
58
+ const analyser = audioContext.createAnalyser();
59
+ analyser.fftSize = 256;
60
+ const dataArray = new Uint8Array(analyser.frequencyBinCount);
61
+ const outerSegments = 1024;
62
+ // Circle geometry
63
+ const innerGeometry = new THREE.CircleGeometry(innerRadius, outerSegments);
64
+ const innerMaterial = new THREE.ShaderMaterial({
65
+ vertexShader: `
66
+ uniform float time;
67
+ varying vec2 vUv;
68
+ varying vec3 vPosition;
69
+ // Now we'll receive an array of 4 colors
70
+ uniform vec3 uColor[4];
71
+ varying vec3 vColor;
72
+
73
+ uniform float uFreqData;
74
+ uniform float freqInfluencedTime;
75
+
76
+ // Simplex noise utility functions
77
+ vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}
78
+ vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}
79
+
80
+ float snoise(vec3 v){
81
+ const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
82
+ const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
83
+
84
+ vec3 i = floor(v + dot(v, C.yyy) );
85
+ vec3 x0 = v - i + dot(i, C.xxx);
86
+
87
+ vec3 g = step(x0.yzx, x0.xyz);
88
+ vec3 l = 1.0 - g;
89
+ vec3 i1 = min( g.xyz, l.zxy );
90
+ vec3 i2 = max( g.xyz, l.zxy );
91
+
92
+ vec3 x1 = x0 - i1 + 1.0 * C.xxx;
93
+ vec3 x2 = x0 - i2 + 2.0 * C.xxx;
94
+ vec3 x3 = x0 - 1.0 + 3.0 * C.xxx;
95
+
96
+ i = mod(i, 289.0 );
97
+ vec4 p = permute( permute( permute(
98
+ i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
99
+ + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
100
+ + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
101
+
102
+ float n_ = 1.0/7.0;
103
+ vec3 ns = n_ * D.wyz - D.xzx;
104
+
105
+ vec4 j = p - 49.0 * floor(p * ns.z * ns.z);
106
+
107
+ vec4 x_ = floor(j * ns.z);
108
+ vec4 y_ = floor(j - 7.0 * x_ );
109
+ vec4 x = x_ *ns.x + ns.yyyy;
110
+ vec4 y = y_ *ns.x + ns.yyyy;
111
+ vec4 h = 1.0 - abs(x) - abs(y);
112
+
113
+ vec4 b0 = vec4( x.xy, y.xy );
114
+ vec4 b1 = vec4( x.zw, y.zw );
115
+
116
+ vec4 s0 = floor(b0)*2.0 + 1.0;
117
+ vec4 s1 = floor(b1)*2.0 + 1.0;
118
+ vec4 sh = -step(h, vec4(0.0));
119
+
120
+ vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
121
+ vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
122
+
123
+ vec3 p0 = vec3(a0.xy,h.x);
124
+ vec3 p1 = vec3(a0.zw,h.y);
125
+ vec3 p2 = vec3(a1.xy,h.z);
126
+ vec3 p3 = vec3(a1.zw,h.w);
127
+
128
+ vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2,p2), dot(p3,p3)));
129
+ p0 *= norm.x;
130
+ p1 *= norm.y;
131
+ p2 *= norm.z;
132
+ p3 *= norm.w;
133
+
134
+ vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
135
+ m = m * m;
136
+ return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
137
+ dot(p2,x2), dot(p3,x3) ) );
138
+ }
139
+
140
+ void main() {
141
+ float frequencyInfluence = uFreqData * 0.005;
142
+ float modified_time = freqInfluencedTime;
143
+
144
+ vUv = uv;
145
+
146
+ vec2 noiseCoord = uv * vec2(3.0, 4.0);
147
+ float noise = snoise(vec3(noiseCoord, modified_time * 0.3));
148
+
149
+ float distToCenter = length(uv - 0.5) * 2.0;
150
+ float influence = smoothstep(0.9, 0.8, distToCenter);
151
+
152
+ float displacement = influence * sin(vUv.x * 5.0 + freqInfluencedTime * 1.0) * 0.05 * uFreqData / 30.0;
153
+ displacement += influence * cos(vUv.y * 5.0 + freqInfluencedTime * 1.5) * 0.05 * uFreqData / 30.0;
154
+
155
+ vec3 pos = vec3(position.x, position.y + displacement, position.z - abs(displacement));
156
+
157
+ // Start from a neutral color instead of one of the array colors
158
+ vColor = vec3(0.0);
159
+
160
+ // Incorporate all 4 colors
161
+ for (int i = 0; i < 4; i++) {
162
+ float noiseFlow = 5.0 + float(i) * 0.3;
163
+ float noiseSpeed = 10.0 + float(i) * 0.3;
164
+ float noiseSeed = 1.0 + float(i) * 10.0;
165
+ vec2 noiseFreq = vec2(0.3, 0.4);
166
+ float noiseFloor = 0.1;
167
+ float noiseCeil = 0.6 + float(i) * 0.07;
168
+
169
+ float localNoise = smoothstep(
170
+ noiseFloor,
171
+ noiseCeil,
172
+ snoise(vec3(
173
+ noiseCoord * noiseFreq + vec2(modified_time * noiseFlow, modified_time * noiseSpeed),
174
+ noiseSeed
175
+ ))
176
+ );
177
+
178
+ // Mix each color in
179
+ vColor = mix(vColor, uColor[i], localNoise);
180
+ }
181
+
182
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
183
+ }
184
+ `,
185
+ fragmentShader: `
186
+ uniform float time;
187
+ varying vec2 vUv;
188
+ varying vec3 vPosition;
189
+ varying vec3 vColor;
190
+ uniform float freqInfluencedTime;
191
+
192
+ void main() {
193
+ gl_FragColor = vec4(vColor, 1.0);
194
+ }
195
+ `,
196
+ side: THREE.DoubleSide,
197
+ uniforms: {
198
+ time: { value: 0.0 },
199
+ uFreqData: { value: 0.0 },
200
+ // Change to 4 colors in the shader
201
+ uColor: {
202
+ value: [
203
+ new THREE.Color().set(getColor("primary-500")),
204
+ new THREE.Color().set(getColor("primary-800")),
205
+ new THREE.Color().set(getColor("primary-200")),
206
+ new THREE.Color().set(getColor("primary-600")),
207
+ ],
208
+ },
209
+ resolution: { value: new THREE.Vector4() },
210
+ freqInfluencedTime: { value: 0.0 },
211
+ },
212
+ transparent: true,
213
+ });
214
+ const innerCircle = new THREE.Mesh(innerGeometry, innerMaterial);
215
+ scene.add(innerCircle);
216
+ // Green spot
217
+ const smallerInnerGeometry = new THREE.CircleGeometry(innerRadius, outerSegments);
218
+ const greenMaterial = new THREE.ShaderMaterial({
219
+ vertexShader: `
220
+ varying vec2 vUv;
221
+ uniform float uTime;
222
+ uniform float uFreqData;
223
+ void main() {
224
+ vUv = uv;
225
+ vec3 pos = position;
226
+
227
+ float distToCenter = length(vUv - 0.5);
228
+ float influence = smoothstep(0.5, 0.45, distToCenter);
229
+
230
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
231
+ }
232
+ `,
233
+ fragmentShader: `
234
+ varying vec2 vUv;
235
+ uniform float uTime;
236
+ uniform float uFreqData;
237
+ uniform float uMargin;
238
+ uniform float uOpacity;
239
+ uniform vec3 uSpotColor;
240
+
241
+ vec4 permute(vec4 x) {
242
+ return mod(((x*34.0)+1.0)*x, 289.0);
243
+ }
244
+
245
+ float perlinNoise(vec2 p) {
246
+ vec2 i = floor(p);
247
+ vec2 f = fract(p);
248
+
249
+ vec4 v = vec4(
250
+ dot(i, vec2(127.1, 311.7)),
251
+ dot(i + vec2(1.0, 0.0), vec2(127.1, 311.7)),
252
+ dot(i + vec2(0.0, 1.0), vec2(127.1, 311.7)),
253
+ dot(i + vec2(1.0, 1.0), vec2(127.1, 311.7))
254
+ );
255
+
256
+ v = fract(sin(v) * 43758.5453123);
257
+ vec2 u = f * f * (3.0 - 2.0 * f);
258
+
259
+ return mix(
260
+ mix(v.x, v.y, u.x),
261
+ mix(v.z, v.w, u.x),
262
+ u.y
263
+ );
264
+ }
265
+
266
+ void main() {
267
+ vec2 centeredUv = vUv - 0.5;
268
+ float distToCenter = length(centeredUv);
269
+
270
+ float maxRadius = 0.5 - uMargin;
271
+ float dynamicRadius = maxRadius;
272
+ float normalizedFreq = (uFreqData / 256.0);
273
+
274
+ float noiseScale = 3.0;
275
+ float adjustedTime = uTime * 0.1;
276
+ float edgeNoise = perlinNoise(centeredUv * noiseScale + adjustedTime);
277
+ edgeNoise = smoothstep(normalizedFreq, 1.0, edgeNoise);
278
+
279
+ float noisyRadius = dynamicRadius - edgeNoise * 0.2;
280
+ float edge = smoothstep(noisyRadius - 0.03, noisyRadius + 0.03, distToCenter);
281
+
282
+ vec3 spotColor = uSpotColor;
283
+ float alpha = (1.0 - edge) * uOpacity;
284
+
285
+ if (uMargin == 0.0) {
286
+ alpha = uOpacity * (1.0 - smoothstep(0.5 - 0.001, 0.5, distToCenter));
287
+ }
288
+
289
+ gl_FragColor = vec4(spotColor, alpha);
290
+ }
291
+ `,
292
+ uniforms: {
293
+ uTime: { value: 0.0 },
294
+ uFreqData: { value: 0.0 },
295
+ uMargin: { value: 0.0001 },
296
+ uOpacity: { value: 0.3 },
297
+ uSpotColor: { value: new THREE.Color().set(getColor("primary-100")) },
298
+ },
299
+ transparent: true,
300
+ });
301
+ const InnerCircle = new THREE.Mesh(smallerInnerGeometry, greenMaterial);
302
+ scene.add(InnerCircle);
303
+ InnerCircle.position.z = 0.01;
304
+ let animationFrameId;
305
+ const animate = () => {
306
+ animationFrameId = requestAnimationFrame(animate);
307
+ analyser.getByteFrequencyData(dataArray);
308
+ // Calculate average frequency and scale by SENSITIVITY
309
+ let freqData = dataArray.reduce((acc, value) => acc + value, 0) / dataArray.length;
310
+ freqData *= SENSITIVITY; // Apply sensitivity here
311
+ // Update uniforms
312
+ innerMaterial.uniforms.time.value += 0.0005;
313
+ innerMaterial.uniforms.freqInfluencedTime.value +=
314
+ 0.0001 + freqData * 0.00001;
315
+ innerMaterial.uniforms.uFreqData.value = freqData;
316
+ greenMaterial.uniforms.uTime.value += 0.05;
317
+ greenMaterial.uniforms.uFreqData.value = freqData;
318
+ renderer.render(scene, camera);
319
+ };
320
+ let source;
321
+ let stream;
322
+ navigator.mediaDevices
323
+ .getUserMedia({ audio: true })
324
+ .then((s) => {
325
+ stream = s;
326
+ source = audioContext.createMediaStreamSource(stream);
327
+ source.connect(analyser);
328
+ animate();
329
+ })
330
+ .catch((err) => {
331
+ console.error("Failed microphone access: ", err);
332
+ });
333
+ // Handle window resize
334
+ const handleResize = () => {
335
+ if (!mountRef.current)
336
+ return;
337
+ const aspect = props.width / props.height;
338
+ const frustumHeight = innerRadius * 2;
339
+ const frustumWidth = frustumHeight * aspect;
340
+ camera.left = -frustumWidth / 2;
341
+ camera.right = frustumWidth / 2;
342
+ camera.top = frustumHeight / 2;
343
+ camera.bottom = -frustumHeight / 2;
344
+ camera.updateProjectionMatrix();
345
+ renderer.setSize(props.width, props.height);
346
+ };
347
+ window.addEventListener("resize", handleResize);
348
+ return () => {
349
+ // Cancel animation loop
350
+ if (animationFrameId) {
351
+ cancelAnimationFrame(animationFrameId);
352
+ }
353
+ // Remove event listener
354
+ window.removeEventListener("resize", handleResize);
355
+ // Clean up WebGL
356
+ if (mountRef.current) {
357
+ try {
358
+ mountRef.current.removeChild(renderer.domElement);
359
+ }
360
+ catch (error) {
361
+ console.error(`error removing dom element`, error);
362
+ }
363
+ }
364
+ renderer.dispose();
365
+ // Stop audio streams/tracks immediately
366
+ if (stream) {
367
+ console.log(`stopping stream`);
368
+ stream.getTracks().forEach((track) => track.stop());
369
+ }
370
+ else {
371
+ console.log(`stream not found`);
372
+ }
373
+ // Disconnect audio source if exists
374
+ if (source) {
375
+ console.log(`disconnecting source`);
376
+ source.disconnect();
377
+ }
378
+ else {
379
+ console.log(`source not found`);
380
+ }
381
+ // Close the audio context
382
+ audioContext
383
+ .close()
384
+ .catch((err) => console.error("Error closing audioContext: ", err));
385
+ };
386
+ }, [customStyles, props.width, props.height, props.showOrb]);
387
+ return (react_1.default.createElement("div", { className: "ta-orb-wrapper", style: { position: "relative", width: props.width, height: props.height } },
388
+ react_1.default.createElement("div", { className: "ta-orb-container", style: {
389
+ position: "absolute",
390
+ top: 0,
391
+ left: 0,
392
+ width: "100%",
393
+ height: "100%",
394
+ } }, props.children),
395
+ props.showOrb ? (react_1.default.createElement("div", { className: "ta-orb-placeholder", ref: mountRef, style: { width: props.width, height: props.height } })) : (props.orbPlaceholder)));
396
+ };
397
+ exports.default = AudioAnimationOrb;
@@ -0,0 +1,5 @@
1
+ export { default as VoiceProvider } from "./providers/AIAudioProvider";
2
+ export { default as OrbThemeProvider } from "./providers/ThemeProvider";
3
+ export { useAIVoice } from "./providers/AIAudioProvider";
4
+ export { default as AudioAnimationOrb } from "./animation-orb";
5
+ export { default as Spinner } from "./spinner";
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Spinner = exports.AudioAnimationOrb = exports.useAIVoice = exports.OrbThemeProvider = exports.VoiceProvider = void 0;
7
+ var AIAudioProvider_1 = require("./providers/AIAudioProvider");
8
+ Object.defineProperty(exports, "VoiceProvider", { enumerable: true, get: function () { return __importDefault(AIAudioProvider_1).default; } });
9
+ var ThemeProvider_1 = require("./providers/ThemeProvider");
10
+ Object.defineProperty(exports, "OrbThemeProvider", { enumerable: true, get: function () { return __importDefault(ThemeProvider_1).default; } });
11
+ var AIAudioProvider_2 = require("./providers/AIAudioProvider");
12
+ Object.defineProperty(exports, "useAIVoice", { enumerable: true, get: function () { return AIAudioProvider_2.useAIVoice; } });
13
+ var animation_orb_1 = require("./animation-orb");
14
+ Object.defineProperty(exports, "AudioAnimationOrb", { enumerable: true, get: function () { return __importDefault(animation_orb_1).default; } });
15
+ var spinner_1 = require("./spinner");
16
+ Object.defineProperty(exports, "Spinner", { enumerable: true, get: function () { return __importDefault(spinner_1).default; } });
@@ -0,0 +1,21 @@
1
+ import React, { ReactNode } from "react";
2
+ declare module "react" {
3
+ interface CSSProperties {
4
+ [key: `--${string}`]: string | number;
5
+ }
6
+ }
7
+ import { WebCall } from "@rannah-labs/web-sdk";
8
+ import { InitCallOptionsType } from "../../../../app/Types/firebase";
9
+ export type VoiceProviderProps = {
10
+ webCall: WebCall;
11
+ callState: "idle" | "connecting" | "connected";
12
+ isMuted: boolean;
13
+ };
14
+ export declare function useAIVoice(): VoiceProviderProps;
15
+ declare const VoiceProvider: (props: {
16
+ children: ReactNode;
17
+ agentId: string;
18
+ region: "eu" | "na";
19
+ initCallOptions?: InitCallOptionsType;
20
+ }) => React.JSX.Element;
21
+ export default VoiceProvider;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ "use client";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.useAIVoice = useAIVoice;
28
+ const react_1 = __importStar(require("react"));
29
+ const web_sdk_1 = require("@rannah-labs/web-sdk");
30
+ const VoiceContext = (0, react_1.createContext)(null);
31
+ function useAIVoice() {
32
+ const context = (0, react_1.useContext)(VoiceContext);
33
+ if (!context) {
34
+ throw new Error("use tixae voice must be used within a tixae voice provider");
35
+ }
36
+ return context;
37
+ }
38
+ const VoiceProvider = (props) => {
39
+ const [tixaeVoice, setTixaeVoice] = react_1.default.useState(new web_sdk_1.WebCall());
40
+ const [callState, setCallState] = react_1.default.useState("idle");
41
+ const [isMuted, setIsMuted] = react_1.default.useState(false);
42
+ async function initVoice() {
43
+ await tixaeVoice.init({
44
+ agentId: props.agentId,
45
+ region: props.region,
46
+ options: props.initCallOptions,
47
+ });
48
+ setTixaeVoice(tixaeVoice);
49
+ tixaeVoice.on("call-start", () => {
50
+ console.log(`call has started..`);
51
+ });
52
+ tixaeVoice.on("call-end", () => {
53
+ console.log(`call has ended..`);
54
+ });
55
+ // must handle errors
56
+ tixaeVoice.on("error", (error) => {
57
+ console.error(`error`, error);
58
+ });
59
+ tixaeVoice.on("conversation-update", (payload) => {
60
+ console.log(`conversation-update`, payload);
61
+ });
62
+ tixaeVoice.on("state-change", (state) => {
63
+ console.log(`state-change`, state);
64
+ setCallState(state);
65
+ });
66
+ tixaeVoice.on("mute-change", (isMuted) => {
67
+ console.log(`mute-change`, isMuted);
68
+ setIsMuted(isMuted);
69
+ });
70
+ }
71
+ react_1.default.useEffect(() => {
72
+ initVoice();
73
+ }, []);
74
+ const value = {
75
+ webCall: tixaeVoice,
76
+ callState: callState,
77
+ isMuted: isMuted,
78
+ };
79
+ return (react_1.default.createElement(VoiceContext.Provider, { value: value }, props.children));
80
+ };
81
+ exports.default = VoiceProvider;
@@ -0,0 +1,23 @@
1
+ import React, { ReactNode } from "react";
2
+ declare module "react" {
3
+ interface CSSProperties {
4
+ [key: `--${string}`]: string | number;
5
+ }
6
+ }
7
+ export type ThemeProviderProps = {
8
+ children: ReactNode;
9
+ setCustomStyles?: (styles: React.CSSProperties) => void;
10
+ customStyles?: React.CSSProperties;
11
+ target?: string;
12
+ initTheme?: string;
13
+ useLocalStorage?: boolean;
14
+ getColor: (colorToGet: string, opacity?: number) => string;
15
+ };
16
+ export declare function useOrbTheme(): ThemeProviderProps;
17
+ declare const OrbThemeProvider: (props: {
18
+ children: ReactNode;
19
+ customStyles?: React.CSSProperties;
20
+ isDark?: boolean;
21
+ primaryColor?: string;
22
+ }) => React.JSX.Element;
23
+ export default OrbThemeProvider;