vox-ai-react 1.1.0 → 1.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.
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +28 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +27 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState,
|
|
2
|
+
import { useState, useEffect, useRef, useCallback } from 'react';
|
|
3
3
|
|
|
4
4
|
var ConnectionState;
|
|
5
5
|
(function (ConnectionState) {
|
|
@@ -413,10 +413,36 @@ const VoiceInterface = ({ geminiApiKey, voiceName, systemInstruction, onEndCall
|
|
|
413
413
|
}, children: [jsx(PhoneOffIcon, {}), "End Call"] }))] }));
|
|
414
414
|
};
|
|
415
415
|
// Main VoxChat Component
|
|
416
|
-
const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', agentName = 'VOX-01', voiceName = 'Kore', systemInstruction = 'You are a helpful AI assistant.', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 56, borderRadius = 0, iconColor, onOpen, onClose }) => {
|
|
416
|
+
const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', agentName: propAgentName = 'VOX-01', voiceName: propVoiceName = 'Kore', systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 56, borderRadius = 0, iconColor, onOpen, onClose, useServerConfig = false }) => {
|
|
417
417
|
const [isOpen, setIsOpen] = useState(false);
|
|
418
418
|
const [activeTab, setActiveTab] = useState('text');
|
|
419
419
|
const [isVoiceActive, setIsVoiceActive] = useState(false);
|
|
420
|
+
// Server config state
|
|
421
|
+
const [serverConfig, setServerConfig] = useState(null);
|
|
422
|
+
const [configLoaded, setConfigLoaded] = useState(!useServerConfig);
|
|
423
|
+
// Fetch config from server if useServerConfig is true
|
|
424
|
+
useEffect(() => {
|
|
425
|
+
if (useServerConfig && apiKey && apiUrl) {
|
|
426
|
+
fetch(`${apiUrl}/api/v1/config`, {
|
|
427
|
+
headers: { 'x-api-key': apiKey }
|
|
428
|
+
})
|
|
429
|
+
.then(res => res.json())
|
|
430
|
+
.then(data => {
|
|
431
|
+
if (data.agentConfig) {
|
|
432
|
+
setServerConfig(data.agentConfig);
|
|
433
|
+
}
|
|
434
|
+
setConfigLoaded(true);
|
|
435
|
+
})
|
|
436
|
+
.catch(err => {
|
|
437
|
+
console.error('[VOX] Failed to fetch server config:', err);
|
|
438
|
+
setConfigLoaded(true);
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
}, [useServerConfig, apiKey, apiUrl]);
|
|
442
|
+
// Use server config if available, otherwise use props
|
|
443
|
+
const agentName = (serverConfig === null || serverConfig === void 0 ? void 0 : serverConfig.name) || propAgentName;
|
|
444
|
+
const voiceName = (serverConfig === null || serverConfig === void 0 ? void 0 : serverConfig.voiceName) || propVoiceName;
|
|
445
|
+
const systemInstruction = (serverConfig === null || serverConfig === void 0 ? void 0 : serverConfig.systemInstruction) || propSystemInstruction;
|
|
420
446
|
const handleOpen = () => { setIsOpen(true); onOpen === null || onOpen === void 0 ? void 0 : onOpen(); };
|
|
421
447
|
const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose === null || onClose === void 0 ? void 0 : onClose(); };
|
|
422
448
|
const handleTabChange = (tab) => {
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n geminiApiKey: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n voiceName?: string;\r\n systemInstruction?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n}\r\n\r\nenum ConnectionState {\r\n DISCONNECTED = 'DISCONNECTED',\r\n CONNECTING = 'CONNECTING',\r\n CONNECTED = 'CONNECTED',\r\n ERROR = 'ERROR',\r\n}\r\n\r\n// Audio utilities\r\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\r\n const buffer = new ArrayBuffer(inputData.length * 2);\r\n const view = new DataView(buffer);\r\n for (let i = 0; i < inputData.length; i++) {\r\n const s = Math.max(-1, Math.min(1, inputData[i]));\r\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\r\n }\r\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\r\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\r\n}\r\n\r\nfunction decode(base64: string): ArrayBuffer {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\r\n const dataView = new DataView(arrayBuffer);\r\n const numSamples = arrayBuffer.byteLength / 2;\r\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\r\n const channelData = audioBuffer.getChannelData(0);\r\n for (let i = 0; i < numSamples; i++) {\r\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons - matching exact website icons\r\nconst MessageCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n);\r\n\r\nconst MicIcon = ({ size = 14 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst MicOffIcon = ({ size = 40 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\r\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\r\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\r\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\r\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst XIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\r\n </svg>\r\n);\r\n\r\nconst PhoneOffIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\" />\r\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst BotIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\r\n </svg>\r\n);\r\n\r\nconst UserIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst Loader2Icon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\r\n </svg>\r\n);\r\n\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationRef = useRef<number>();\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const draw = () => {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n if (!analyser || !isActive) {\r\n ctx.strokeStyle = '#3f3f46';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.moveTo(0, height / 2);\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n return;\r\n }\r\n\r\n const bufferLength = analyser.frequencyBinCount;\r\n const dataArray = new Uint8Array(bufferLength);\r\n analyser.getByteTimeDomainData(dataArray);\r\n\r\n ctx.strokeStyle = '#ffffff';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n\r\n const sliceWidth = width / bufferLength;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n const v = dataArray[i] / 128.0;\r\n const y = (v * height) / 2;\r\n if (i === 0) ctx.moveTo(x, y);\r\n else ctx.lineTo(x, y);\r\n x += sliceWidth;\r\n }\r\n\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n draw();\r\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\r\n }, [analyser, isActive]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\r\n};\r\n\r\n// Text Interface Component\r\nconst TextInterface: React.FC<{\r\n apiKey: string;\r\n apiUrl: string;\r\n agentName: string;\r\n systemInstruction: string;\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction }) => {\r\n const [messages, setMessages] = useState<Message[]>([\r\n { id: 'welcome', role: 'assistant', text: `VOX INITIALIZED. GREETINGS. I AM ${agentName}. HOW MAY I ASSIST YOUR INQUIRY?` }\r\n ]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }, [messages]);\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const messageText = input;\r\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\r\n setMessages(prev => [...prev, userMsg]);\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\r\n body: JSON.stringify({ message: messageText, history, systemInstruction })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'API request failed');\r\n }\r\n const data = await response.json();\r\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response?.toUpperCase() || 'ERROR: NO RESPONSE' };\r\n setMessages(prev => [...prev, botMsg]);\r\n } catch (err: any) {\r\n console.error('VOX Chat Error:', err);\r\n const errorMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: `ERROR: ${err.message || 'SIGNAL LOST. RETRY.'}` };\r\n setMessages(prev => [...prev, errorMsg]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: '#000000' }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '24px' }}>\r\n {messages.map((msg) => (\r\n <div key={msg.id} style={{ display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }}>\r\n <div style={{ display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '12px', maxWidth: '85%' }}>\r\n <div style={{\r\n flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: msg.role === 'user' ? '1px solid #ffffff' : '1px solid #52525b',\r\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\r\n color: msg.role === 'user' ? '#000000' : '#ffffff'\r\n }}>\r\n {msg.role === 'user' ? <UserIcon /> : <BotIcon />}\r\n </div>\r\n <div style={{\r\n padding: '12px 16px', fontSize: '11px', fontWeight: 700, letterSpacing: '0.05em', lineHeight: 1.6,\r\n border: '1px solid #3f3f46', background: msg.role === 'user' ? '#27272a' : '#000000',\r\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\r\n }}>\r\n {msg.text}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}>\r\n <div style={{ flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: '1px solid #3f3f46', color: '#ffffff', opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a' }}>\r\n <Loader2Icon />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n <div style={{ padding: '24px' }}>\r\n <form onSubmit={handleSend} style={{ display: 'flex', gap: '16px' }}>\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"INPUT COMMAND...\"\r\n disabled={isLoading}\r\n style={{\r\n flex: 1, padding: '16px 24px', border: '1px solid #52525b', background: '#000000', color: '#ffffff',\r\n outline: 'none', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em'\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '16px 24px', background: '#ffffff', color: '#000000', border: 'none', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em',\r\n opacity: !input.trim() || isLoading ? 0.2 : 1\r\n }}\r\n >\r\n EXECUTE\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Voice Interface Component\r\nconst VoiceInterface: React.FC<{\r\n geminiApiKey: string;\r\n voiceName: string;\r\n systemInstruction: string;\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\r\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\r\n const [errorMsg, setErrorMsg] = useState('');\r\n const [isMuted, setIsMuted] = useState(false);\r\n const [callDuration, setCallDuration] = useState(0);\r\n const [isSpeaking, setIsSpeaking] = useState(false);\r\n const [speakingIntensity, setSpeakingIntensity] = useState(0);\r\n\r\n const callStartTimeRef = useRef<number | null>(null);\r\n const durationIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n const inputAudioContextRef = useRef<AudioContext | null>(null);\r\n const outputAudioContextRef = useRef<AudioContext | null>(null);\r\n const inputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputGainRef = useRef<GainNode | null>(null);\r\n const nextStartTimeRef = useRef<number>(0);\r\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\r\n const speakingAnimationRef = useRef<number | null>(null);\r\n const sessionRef = useRef<WebSocket | null>(null);\r\n const streamRef = useRef<MediaStream | null>(null);\r\n const scriptProcessorRef = useRef<ScriptProcessorNode | null>(null);\r\n const sourceNodeRef = useRef<MediaStreamAudioSourceNode | null>(null);\r\n\r\n const cleanupAudio = useCallback(() => {\r\n if (speakingAnimationRef.current) { cancelAnimationFrame(speakingAnimationRef.current); speakingAnimationRef.current = null; }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\r\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\r\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\r\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\r\n if (outputAnalyserRef.current) { try { outputAnalyserRef.current.disconnect(); } catch (e) {} outputAnalyserRef.current = null; }\r\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\r\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\r\n inputAudioContextRef.current = null;\r\n outputAudioContextRef.current = null;\r\n inputAnalyserRef.current = null;\r\n sessionRef.current = null;\r\n }, []);\r\n\r\n const connect = async () => {\r\n try {\r\n setConnectionState(ConnectionState.CONNECTING);\r\n setErrorMsg('');\r\n\r\n callStartTimeRef.current = Date.now();\r\n durationIntervalRef.current = setInterval(() => {\r\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\r\n }, 1000);\r\n\r\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\r\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\r\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\r\n inputAudioContextRef.current = inputCtx;\r\n outputAudioContextRef.current = outputCtx;\r\n\r\n const analyser = inputCtx.createAnalyser();\r\n analyser.fftSize = 256;\r\n inputAnalyserRef.current = analyser;\r\n\r\n const outputAnalyser = outputCtx.createAnalyser();\r\n outputAnalyser.fftSize = 256;\r\n outputAnalyserRef.current = outputAnalyser;\r\n\r\n const outputGain = outputCtx.createGain();\r\n outputGain.gain.value = 1;\r\n outputGainRef.current = outputGain;\r\n outputGain.connect(outputAnalyser);\r\n outputAnalyser.connect(outputCtx.destination);\r\n\r\n const monitorSpeaking = () => {\r\n if (!outputAnalyserRef.current) return;\r\n const dataArray = new Uint8Array(outputAnalyserRef.current.frequencyBinCount);\r\n outputAnalyserRef.current.getByteFrequencyData(dataArray);\r\n const average = dataArray.reduce((a, b) => a + b, 0) / dataArray.length;\r\n const intensity = Math.min(average / 128, 1);\r\n setIsSpeaking(intensity > 0.05);\r\n setSpeakingIntensity(intensity);\r\n speakingAnimationRef.current = requestAnimationFrame(monitorSpeaking);\r\n };\r\n monitorSpeaking();\r\n\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\r\n console.log('[VOX] Connecting to Gemini Live API...');\r\n const ws = new WebSocket(wsUrl);\r\n sessionRef.current = ws;\r\n\r\n ws.onopen = () => {\r\n console.log('[VOX] WebSocket connected, sending setup...');\r\n const setupMsg = {\r\n setup: {\r\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\r\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\r\n systemInstruction: { parts: [{ text: systemInstruction }] }\r\n }\r\n };\r\n ws.send(JSON.stringify(setupMsg));\r\n };\r\n\r\n ws.onmessage = async (event) => {\r\n let data;\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try { data = JSON.parse(text); } catch (e) { return; }\r\n } else {\r\n try { data = JSON.parse(event.data); } catch (e) { return; }\r\n }\r\n console.log('[VOX] Received:', data);\r\n\r\n if (data.setupComplete) {\r\n console.log('[VOX] Setup complete, voice ready!');\r\n setConnectionState(ConnectionState.CONNECTED);\r\n\r\n const source = inputCtx.createMediaStreamSource(stream);\r\n sourceNodeRef.current = source;\r\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\r\n scriptProcessorRef.current = processor;\r\n\r\n processor.onaudioprocess = (e) => {\r\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\r\n const inputData = e.inputBuffer.getChannelData(0);\r\n const pcmBlob = createBlob(inputData);\r\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\r\n };\r\n\r\n source.connect(analyser);\r\n source.connect(processor);\r\n processor.connect(inputCtx.destination);\r\n }\r\n\r\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\r\n if (audioData) {\r\n const ctx = outputAudioContextRef.current;\r\n if (!ctx) return;\r\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\r\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\r\n const source = ctx.createBufferSource();\r\n source.buffer = audioBuffer;\r\n if (outputGainRef.current) source.connect(outputGainRef.current);\r\n else source.connect(ctx.destination);\r\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\r\n source.start(nextStartTimeRef.current);\r\n nextStartTimeRef.current += audioBuffer.duration;\r\n sourcesRef.current.add(source);\r\n }\r\n\r\n if (data.serverContent?.interrupted) {\r\n sourcesRef.current.forEach(s => s.stop());\r\n sourcesRef.current.clear();\r\n nextStartTimeRef.current = 0;\r\n }\r\n };\r\n\r\n ws.onclose = (event) => {\r\n console.log('[VOX] WebSocket closed:', event.code, event.reason);\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n };\r\n ws.onerror = (error) => {\r\n console.error('[VOX] WebSocket error:', error);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg('Connection failed. Check your Gemini API key.');\r\n cleanupAudio();\r\n };\r\n\r\n } catch (err: any) {\r\n console.error('[VOX] Connection error:', err);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\r\n cleanupAudio();\r\n }\r\n };\r\n\r\n const disconnect = useCallback(() => {\r\n callStartTimeRef.current = null;\r\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\r\n setCallDuration(0);\r\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\r\n cleanupAudio();\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n }, [cleanupAudio]);\r\n\r\n useEffect(() => {\r\n connect();\r\n return () => disconnect();\r\n }, []);\r\n\r\n const toggleMute = () => {\r\n setIsMuted(!isMuted);\r\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }}>\r\n <div style={{ position: 'relative' }}>\r\n {connectionState === ConnectionState.CONNECTED && isSpeaking && (\r\n <>\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.2)', transform: `scale(${1 + speakingIntensity * 0.3})`, animation: 'vox-ping 1s infinite' }} />\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.1)', transform: `scale(${1 + speakingIntensity * 0.5})`, transition: 'transform 0.1s ease-out' }} />\r\n </>\r\n )}\r\n <div style={{\r\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px rgba(255,255,255,${0.15 + speakingIntensity * 0.25})` : 'none',\r\n transform: isSpeaking ? `scale(${1 + speakingIntensity * 0.08})` : 'scale(1)', transition: 'all 0.3s'\r\n }}>\r\n {connectionState === ConnectionState.CONNECTING ? (\r\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon size={40} />}\r\n </div>\r\n )}\r\n </div>\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\r\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: isSpeaking ? 1 : 0.75, animation: isSpeaking ? 'vox-ping 1s infinite' : 'none' }} />\r\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\r\n <p style={{ textAlign: 'center', fontSize: '10px', fontWeight: 900, color: '#71717a', textTransform: 'uppercase', letterSpacing: '0.2em', height: '20px' }}>\r\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\r\n {connectionState === ConnectionState.CONNECTED && (isSpeaking ? 'Agent Speaking...' : isMuted ? 'Signal Muted' : 'Listening...')}\r\n {connectionState === ConnectionState.ERROR && 'Connection Error'}\r\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\r\n </p>\r\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\r\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\r\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\r\n </p>\r\n )}\r\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\r\n </div>\r\n\r\n {connectionState === ConnectionState.ERROR && (\r\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.1em', padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46' }}>\r\n <AlertCircleIcon />\r\n <span style={{ marginLeft: '12px' }}>{errorMsg}</span>\r\n </div>\r\n )}\r\n\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\r\n padding: '12px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em', display: 'flex', alignItems: 'center', gap: '8px'\r\n }}>\r\n <PhoneOffIcon />\r\n End Call\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Main VoxChat Component\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n geminiApiKey,\r\n apiUrl = 'https://your-server.com',\r\n agentName = 'VOX-01',\r\n voiceName = 'Kore',\r\n systemInstruction = 'You are a helpful AI assistant.',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 56,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\r\n const [isVoiceActive, setIsVoiceActive] = useState(false);\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\r\n\r\n const handleTabChange = (tab: 'text' | 'voice') => {\r\n if (tab === 'voice' && activeTab !== 'voice') {\r\n setActiveTab('voice');\r\n setIsVoiceActive(true);\r\n } else if (tab === 'text') {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n }\r\n };\r\n\r\n const handleEndCall = () => {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\r\n // Button colors based on theme\r\n const btnBg = buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\r\n const btnIcon = iconColor || (theme === 'light' ? '#ffffff' : '#000000');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\r\n @keyframes vox-spin { to { transform: rotate(360deg); } }\r\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\r\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\r\n `}</style>\r\n\r\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: position === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }}>\r\n {isOpen && (\r\n <div className=\"vox-widget\" style={{\r\n width: 'min(calc(100vw - 32px), 400px)', height: 'min(calc(100vh - 100px), 640px)', maxHeight: '640px',\r\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: '1px solid #3f3f46', boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: '#000000', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46' }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: '1px solid #52525b', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff' }}>\r\n <MessageCircleIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: '#ffffff', fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: '#a1a1aa', fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: '#ffffff', borderRadius: '50%', marginRight: '8px' }} />\r\n Active\r\n </p>\r\n </div>\r\n </div>\r\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: '#18181b', borderBottom: '1px solid #3f3f46', flexShrink: 0 }}>\r\n <button onClick={() => handleTabChange('text')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: '#3f3f46' }} />\r\n <button onClick={() => handleTabChange('voice')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Voice Protocol\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n ) : (\r\n isVoiceActive ? (\r\n <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\r\n ) : (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toggle Button - only show when widget is closed */}\r\n {!isOpen && (\r\n <button onClick={handleOpen} style={{\r\n width: `${buttonSize}px`, height: `${buttonSize}px`, borderRadius: `${borderRadius}%`,\r\n background: btnBg, color: btnIcon, border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', transition: 'transform 0.2s'\r\n }}>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n geminiApiKey: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n voiceName?: string;\r\n systemInstruction?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n useServerConfig?: boolean; // If true, fetch config from server using API key\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n}\r\n\r\nenum ConnectionState {\r\n DISCONNECTED = 'DISCONNECTED',\r\n CONNECTING = 'CONNECTING',\r\n CONNECTED = 'CONNECTED',\r\n ERROR = 'ERROR',\r\n}\r\n\r\n// Audio utilities\r\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\r\n const buffer = new ArrayBuffer(inputData.length * 2);\r\n const view = new DataView(buffer);\r\n for (let i = 0; i < inputData.length; i++) {\r\n const s = Math.max(-1, Math.min(1, inputData[i]));\r\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\r\n }\r\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\r\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\r\n}\r\n\r\nfunction decode(base64: string): ArrayBuffer {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\r\n const dataView = new DataView(arrayBuffer);\r\n const numSamples = arrayBuffer.byteLength / 2;\r\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\r\n const channelData = audioBuffer.getChannelData(0);\r\n for (let i = 0; i < numSamples; i++) {\r\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons - matching exact website icons\r\nconst MessageCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n);\r\n\r\nconst MicIcon = ({ size = 14 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst MicOffIcon = ({ size = 40 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\r\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\r\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\r\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\r\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst XIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\r\n </svg>\r\n);\r\n\r\nconst PhoneOffIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\" />\r\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst BotIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\r\n </svg>\r\n);\r\n\r\nconst UserIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst Loader2Icon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\r\n </svg>\r\n);\r\n\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationRef = useRef<number>();\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const draw = () => {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n if (!analyser || !isActive) {\r\n ctx.strokeStyle = '#3f3f46';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.moveTo(0, height / 2);\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n return;\r\n }\r\n\r\n const bufferLength = analyser.frequencyBinCount;\r\n const dataArray = new Uint8Array(bufferLength);\r\n analyser.getByteTimeDomainData(dataArray);\r\n\r\n ctx.strokeStyle = '#ffffff';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n\r\n const sliceWidth = width / bufferLength;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n const v = dataArray[i] / 128.0;\r\n const y = (v * height) / 2;\r\n if (i === 0) ctx.moveTo(x, y);\r\n else ctx.lineTo(x, y);\r\n x += sliceWidth;\r\n }\r\n\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n draw();\r\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\r\n }, [analyser, isActive]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\r\n};\r\n\r\n// Text Interface Component\r\nconst TextInterface: React.FC<{\r\n apiKey: string;\r\n apiUrl: string;\r\n agentName: string;\r\n systemInstruction: string;\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction }) => {\r\n const [messages, setMessages] = useState<Message[]>([\r\n { id: 'welcome', role: 'assistant', text: `VOX INITIALIZED. GREETINGS. I AM ${agentName}. HOW MAY I ASSIST YOUR INQUIRY?` }\r\n ]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }, [messages]);\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const messageText = input;\r\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\r\n setMessages(prev => [...prev, userMsg]);\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\r\n body: JSON.stringify({ message: messageText, history, systemInstruction })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'API request failed');\r\n }\r\n const data = await response.json();\r\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response?.toUpperCase() || 'ERROR: NO RESPONSE' };\r\n setMessages(prev => [...prev, botMsg]);\r\n } catch (err: any) {\r\n console.error('VOX Chat Error:', err);\r\n const errorMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: `ERROR: ${err.message || 'SIGNAL LOST. RETRY.'}` };\r\n setMessages(prev => [...prev, errorMsg]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: '#000000' }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '24px' }}>\r\n {messages.map((msg) => (\r\n <div key={msg.id} style={{ display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }}>\r\n <div style={{ display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '12px', maxWidth: '85%' }}>\r\n <div style={{\r\n flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: msg.role === 'user' ? '1px solid #ffffff' : '1px solid #52525b',\r\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\r\n color: msg.role === 'user' ? '#000000' : '#ffffff'\r\n }}>\r\n {msg.role === 'user' ? <UserIcon /> : <BotIcon />}\r\n </div>\r\n <div style={{\r\n padding: '12px 16px', fontSize: '11px', fontWeight: 700, letterSpacing: '0.05em', lineHeight: 1.6,\r\n border: '1px solid #3f3f46', background: msg.role === 'user' ? '#27272a' : '#000000',\r\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\r\n }}>\r\n {msg.text}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}>\r\n <div style={{ flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: '1px solid #3f3f46', color: '#ffffff', opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a' }}>\r\n <Loader2Icon />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n <div style={{ padding: '24px' }}>\r\n <form onSubmit={handleSend} style={{ display: 'flex', gap: '16px' }}>\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"INPUT COMMAND...\"\r\n disabled={isLoading}\r\n style={{\r\n flex: 1, padding: '16px 24px', border: '1px solid #52525b', background: '#000000', color: '#ffffff',\r\n outline: 'none', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em'\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '16px 24px', background: '#ffffff', color: '#000000', border: 'none', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em',\r\n opacity: !input.trim() || isLoading ? 0.2 : 1\r\n }}\r\n >\r\n EXECUTE\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Voice Interface Component\r\nconst VoiceInterface: React.FC<{\r\n geminiApiKey: string;\r\n voiceName: string;\r\n systemInstruction: string;\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\r\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\r\n const [errorMsg, setErrorMsg] = useState('');\r\n const [isMuted, setIsMuted] = useState(false);\r\n const [callDuration, setCallDuration] = useState(0);\r\n const [isSpeaking, setIsSpeaking] = useState(false);\r\n const [speakingIntensity, setSpeakingIntensity] = useState(0);\r\n\r\n const callStartTimeRef = useRef<number | null>(null);\r\n const durationIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n const inputAudioContextRef = useRef<AudioContext | null>(null);\r\n const outputAudioContextRef = useRef<AudioContext | null>(null);\r\n const inputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputGainRef = useRef<GainNode | null>(null);\r\n const nextStartTimeRef = useRef<number>(0);\r\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\r\n const speakingAnimationRef = useRef<number | null>(null);\r\n const sessionRef = useRef<WebSocket | null>(null);\r\n const streamRef = useRef<MediaStream | null>(null);\r\n const scriptProcessorRef = useRef<ScriptProcessorNode | null>(null);\r\n const sourceNodeRef = useRef<MediaStreamAudioSourceNode | null>(null);\r\n\r\n const cleanupAudio = useCallback(() => {\r\n if (speakingAnimationRef.current) { cancelAnimationFrame(speakingAnimationRef.current); speakingAnimationRef.current = null; }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\r\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\r\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\r\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\r\n if (outputAnalyserRef.current) { try { outputAnalyserRef.current.disconnect(); } catch (e) {} outputAnalyserRef.current = null; }\r\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\r\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\r\n inputAudioContextRef.current = null;\r\n outputAudioContextRef.current = null;\r\n inputAnalyserRef.current = null;\r\n sessionRef.current = null;\r\n }, []);\r\n\r\n const connect = async () => {\r\n try {\r\n setConnectionState(ConnectionState.CONNECTING);\r\n setErrorMsg('');\r\n\r\n callStartTimeRef.current = Date.now();\r\n durationIntervalRef.current = setInterval(() => {\r\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\r\n }, 1000);\r\n\r\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\r\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\r\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\r\n inputAudioContextRef.current = inputCtx;\r\n outputAudioContextRef.current = outputCtx;\r\n\r\n const analyser = inputCtx.createAnalyser();\r\n analyser.fftSize = 256;\r\n inputAnalyserRef.current = analyser;\r\n\r\n const outputAnalyser = outputCtx.createAnalyser();\r\n outputAnalyser.fftSize = 256;\r\n outputAnalyserRef.current = outputAnalyser;\r\n\r\n const outputGain = outputCtx.createGain();\r\n outputGain.gain.value = 1;\r\n outputGainRef.current = outputGain;\r\n outputGain.connect(outputAnalyser);\r\n outputAnalyser.connect(outputCtx.destination);\r\n\r\n const monitorSpeaking = () => {\r\n if (!outputAnalyserRef.current) return;\r\n const dataArray = new Uint8Array(outputAnalyserRef.current.frequencyBinCount);\r\n outputAnalyserRef.current.getByteFrequencyData(dataArray);\r\n const average = dataArray.reduce((a, b) => a + b, 0) / dataArray.length;\r\n const intensity = Math.min(average / 128, 1);\r\n setIsSpeaking(intensity > 0.05);\r\n setSpeakingIntensity(intensity);\r\n speakingAnimationRef.current = requestAnimationFrame(monitorSpeaking);\r\n };\r\n monitorSpeaking();\r\n\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\r\n console.log('[VOX] Connecting to Gemini Live API...');\r\n const ws = new WebSocket(wsUrl);\r\n sessionRef.current = ws;\r\n\r\n ws.onopen = () => {\r\n console.log('[VOX] WebSocket connected, sending setup...');\r\n const setupMsg = {\r\n setup: {\r\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\r\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\r\n systemInstruction: { parts: [{ text: systemInstruction }] }\r\n }\r\n };\r\n ws.send(JSON.stringify(setupMsg));\r\n };\r\n\r\n ws.onmessage = async (event) => {\r\n let data;\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try { data = JSON.parse(text); } catch (e) { return; }\r\n } else {\r\n try { data = JSON.parse(event.data); } catch (e) { return; }\r\n }\r\n console.log('[VOX] Received:', data);\r\n\r\n if (data.setupComplete) {\r\n console.log('[VOX] Setup complete, voice ready!');\r\n setConnectionState(ConnectionState.CONNECTED);\r\n\r\n const source = inputCtx.createMediaStreamSource(stream);\r\n sourceNodeRef.current = source;\r\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\r\n scriptProcessorRef.current = processor;\r\n\r\n processor.onaudioprocess = (e) => {\r\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\r\n const inputData = e.inputBuffer.getChannelData(0);\r\n const pcmBlob = createBlob(inputData);\r\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\r\n };\r\n\r\n source.connect(analyser);\r\n source.connect(processor);\r\n processor.connect(inputCtx.destination);\r\n }\r\n\r\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\r\n if (audioData) {\r\n const ctx = outputAudioContextRef.current;\r\n if (!ctx) return;\r\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\r\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\r\n const source = ctx.createBufferSource();\r\n source.buffer = audioBuffer;\r\n if (outputGainRef.current) source.connect(outputGainRef.current);\r\n else source.connect(ctx.destination);\r\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\r\n source.start(nextStartTimeRef.current);\r\n nextStartTimeRef.current += audioBuffer.duration;\r\n sourcesRef.current.add(source);\r\n }\r\n\r\n if (data.serverContent?.interrupted) {\r\n sourcesRef.current.forEach(s => s.stop());\r\n sourcesRef.current.clear();\r\n nextStartTimeRef.current = 0;\r\n }\r\n };\r\n\r\n ws.onclose = (event) => {\r\n console.log('[VOX] WebSocket closed:', event.code, event.reason);\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n };\r\n ws.onerror = (error) => {\r\n console.error('[VOX] WebSocket error:', error);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg('Connection failed. Check your Gemini API key.');\r\n cleanupAudio();\r\n };\r\n\r\n } catch (err: any) {\r\n console.error('[VOX] Connection error:', err);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\r\n cleanupAudio();\r\n }\r\n };\r\n\r\n const disconnect = useCallback(() => {\r\n callStartTimeRef.current = null;\r\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\r\n setCallDuration(0);\r\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\r\n cleanupAudio();\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n }, [cleanupAudio]);\r\n\r\n useEffect(() => {\r\n connect();\r\n return () => disconnect();\r\n }, []);\r\n\r\n const toggleMute = () => {\r\n setIsMuted(!isMuted);\r\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }}>\r\n <div style={{ position: 'relative' }}>\r\n {connectionState === ConnectionState.CONNECTED && isSpeaking && (\r\n <>\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.2)', transform: `scale(${1 + speakingIntensity * 0.3})`, animation: 'vox-ping 1s infinite' }} />\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.1)', transform: `scale(${1 + speakingIntensity * 0.5})`, transition: 'transform 0.1s ease-out' }} />\r\n </>\r\n )}\r\n <div style={{\r\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px rgba(255,255,255,${0.15 + speakingIntensity * 0.25})` : 'none',\r\n transform: isSpeaking ? `scale(${1 + speakingIntensity * 0.08})` : 'scale(1)', transition: 'all 0.3s'\r\n }}>\r\n {connectionState === ConnectionState.CONNECTING ? (\r\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon size={40} />}\r\n </div>\r\n )}\r\n </div>\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\r\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: isSpeaking ? 1 : 0.75, animation: isSpeaking ? 'vox-ping 1s infinite' : 'none' }} />\r\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\r\n <p style={{ textAlign: 'center', fontSize: '10px', fontWeight: 900, color: '#71717a', textTransform: 'uppercase', letterSpacing: '0.2em', height: '20px' }}>\r\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\r\n {connectionState === ConnectionState.CONNECTED && (isSpeaking ? 'Agent Speaking...' : isMuted ? 'Signal Muted' : 'Listening...')}\r\n {connectionState === ConnectionState.ERROR && 'Connection Error'}\r\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\r\n </p>\r\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\r\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\r\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\r\n </p>\r\n )}\r\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\r\n </div>\r\n\r\n {connectionState === ConnectionState.ERROR && (\r\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.1em', padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46' }}>\r\n <AlertCircleIcon />\r\n <span style={{ marginLeft: '12px' }}>{errorMsg}</span>\r\n </div>\r\n )}\r\n\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\r\n padding: '12px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em', display: 'flex', alignItems: 'center', gap: '8px'\r\n }}>\r\n <PhoneOffIcon />\r\n End Call\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Main VoxChat Component\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n geminiApiKey,\r\n apiUrl = 'https://your-server.com',\r\n agentName: propAgentName = 'VOX-01',\r\n voiceName: propVoiceName = 'Kore',\r\n systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 56,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n useServerConfig = false\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\r\n const [isVoiceActive, setIsVoiceActive] = useState(false);\r\n \r\n // Server config state\r\n const [serverConfig, setServerConfig] = useState<{\r\n name?: string;\r\n systemInstruction?: string;\r\n voiceName?: string;\r\n } | null>(null);\r\n const [configLoaded, setConfigLoaded] = useState(!useServerConfig);\r\n\r\n // Fetch config from server if useServerConfig is true\r\n useEffect(() => {\r\n if (useServerConfig && apiKey && apiUrl) {\r\n fetch(`${apiUrl}/api/v1/config`, {\r\n headers: { 'x-api-key': apiKey }\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n if (data.agentConfig) {\r\n setServerConfig(data.agentConfig);\r\n }\r\n setConfigLoaded(true);\r\n })\r\n .catch(err => {\r\n console.error('[VOX] Failed to fetch server config:', err);\r\n setConfigLoaded(true);\r\n });\r\n }\r\n }, [useServerConfig, apiKey, apiUrl]);\r\n\r\n // Use server config if available, otherwise use props\r\n const agentName = serverConfig?.name || propAgentName;\r\n const voiceName = serverConfig?.voiceName || propVoiceName;\r\n const systemInstruction = serverConfig?.systemInstruction || propSystemInstruction;\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\r\n\r\n const handleTabChange = (tab: 'text' | 'voice') => {\r\n if (tab === 'voice' && activeTab !== 'voice') {\r\n setActiveTab('voice');\r\n setIsVoiceActive(true);\r\n } else if (tab === 'text') {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n }\r\n };\r\n\r\n const handleEndCall = () => {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\r\n // Button colors based on theme\r\n const btnBg = buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\r\n const btnIcon = iconColor || (theme === 'light' ? '#ffffff' : '#000000');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\r\n @keyframes vox-spin { to { transform: rotate(360deg); } }\r\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\r\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\r\n `}</style>\r\n\r\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: position === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }}>\r\n {isOpen && (\r\n <div className=\"vox-widget\" style={{\r\n width: 'min(calc(100vw - 32px), 400px)', height: 'min(calc(100vh - 100px), 640px)', maxHeight: '640px',\r\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: '1px solid #3f3f46', boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: '#000000', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46' }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: '1px solid #52525b', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff' }}>\r\n <MessageCircleIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: '#ffffff', fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: '#a1a1aa', fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: '#ffffff', borderRadius: '50%', marginRight: '8px' }} />\r\n Active\r\n </p>\r\n </div>\r\n </div>\r\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: '#18181b', borderBottom: '1px solid #3f3f46', flexShrink: 0 }}>\r\n <button onClick={() => handleTabChange('text')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: '#3f3f46' }} />\r\n <button onClick={() => handleTabChange('voice')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Voice Protocol\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n ) : (\r\n isVoiceActive ? (\r\n <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\r\n ) : (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toggle Button - only show when widget is closed */}\r\n {!isOpen && (\r\n <button onClick={handleOpen} style={{\r\n width: `${buttonSize}px`, height: `${buttonSize}px`, borderRadius: `${borderRadius}%`,\r\n background: btnBg, color: btnIcon, border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', transition: 'transform 0.2s'\r\n }}>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":";;;AA0BA,IAAK,eAKJ;AALD,CAAA,UAAK,eAAe,EAAA;AAClB,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,eAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EALI,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;AAOpB;AACA,SAAS,UAAU,CAAC,SAAuB,EAAA;IACzC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,IAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;AACjC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC;IAC7D;AACA,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3D;AAEA,SAAS,MAAM,CAAC,MAAc,EAAA;AAC5B,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;AACjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC;IACA,OAAO,KAAK,CAAC,MAAM;AACrB;AAEA,eAAe,eAAe,CAAC,WAAwB,EAAE,GAAiB,EAAE,UAAkB,EAAE,WAAmB,EAAA;AACjH,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC;AAC1C,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,GAAG,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;IACzE,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;AACjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK;IACzD;AACA,IAAA,OAAO,WAAW;AACpB;AAEA;AACA,MAAM,iBAAiB,GAAG,OACxBA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,YAC5IA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,gCAAgC,EAAA,CAAG,EAAA,CACvC,CACP;AAED,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB,MAC/CC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA,QAAA,EAAA,CAChJD,cAAM,CAAC,EAAC,sDAAsD,EAAA,CAAG,EACjEA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,4BAA4B,GAAG,EACvCA,GAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,CAAA,EAAA,CACpC,CACP;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB,MAClDC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA,QAAA,EAAA,CAChJD,GAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,EACtCA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,uCAAuC,EAAA,CAAG,EAClDA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,wBAAwB,GAAG,EACnCA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,gCAAgC,EAAA,CAAG,EAC3CA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,4BAA4B,EAAA,CAAG,EACvCA,cAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,CAAA,EAAA,CACpC,CACP;AAED,MAAM,KAAK,GAAG,OACZC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA,QAAA,EAAA,CAC5ID,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,YAAY,EAAA,CAAG,EAAAA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,YAAY,EAAA,CAAG,CAAA,EAAA,CAC1C,CACP;AAED,MAAM,YAAY,GAAG,OACnBC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA,QAAA,EAAA,CAC5ID,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,uTAAuT,EAAA,CAAG,EAClUA,GAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,CAAA,EAAA,CAClC,CACP;AAED,MAAM,OAAO,GAAG,OACdC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA,QAAA,EAAA,CAC5ID,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,WAAW,GAAG,EAAAA,GAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAA,CAAG,EAAAA,cAAM,CAAC,EAAC,SAAS,EAAA,CAAG,EAAAA,cAAM,CAAC,EAAC,UAAU,EAAA,CAAG,EAAAA,cAAM,CAAC,EAAC,UAAU,EAAA,CAAG,EAAAA,cAAM,CAAC,EAAC,SAAS,EAAA,CAAG,CAAA,EAAA,CACtJ,CACP;AAED,MAAM,QAAQ,GAAG,OACfC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA,QAAA,EAAA,CAC5ID,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,2CAA2C,EAAA,CAAG,EAAAA,GAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAA,CAAG,CAAA,EAAA,CACjF,CACP;AAED,MAAM,WAAW,GAAG,OAClBA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,EAAA,QAAA,EAChMA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,6BAA6B,EAAA,CAAG,EAAA,CACpC,CACP;AAED,MAAM,eAAe,GAAG,OACtBC,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA,QAAA,EAAA,CAC5ID,gBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAA,CAAG,EAAAA,cAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,EAAAA,cAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,CAAA,EAAA,CAC/G,CACP;AAGD;AACA,MAAM,UAAU,GAAmE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAI;AAC5G,IAAA,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC;AACjD,IAAA,MAAM,YAAY,GAAG,MAAM,EAAU;IAErC,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG;YAAE;QAEV,MAAM,IAAI,GAAG,MAAK;AAChB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC1B,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;YAC5B,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AAElC,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AAC1B,gBAAA,GAAG,CAAC,WAAW,GAAG,SAAS;AAC3B,gBAAA,GAAG,CAAC,SAAS,GAAG,CAAC;gBACjB,GAAG,CAAC,SAAS,EAAE;gBACf,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;gBAC7B,GAAG,CAAC,MAAM,EAAE;AACZ,gBAAA,YAAY,CAAC,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC;gBAClD;YACF;AAEA,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,iBAAiB;AAC/C,YAAA,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC;AAC9C,YAAA,QAAQ,CAAC,qBAAqB,CAAC,SAAS,CAAC;AAEzC,YAAA,GAAG,CAAC,WAAW,GAAG,SAAS;AAC3B,YAAA,GAAG,CAAC,SAAS,GAAG,CAAC;YACjB,GAAG,CAAC,SAAS,EAAE;AAEf,YAAA,MAAM,UAAU,GAAG,KAAK,GAAG,YAAY;YACvC,IAAI,CAAC,GAAG,CAAC;AAET,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;gBACrC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK;gBAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC;AAAE,oBAAA,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;AACxB,oBAAA,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrB,CAAC,IAAI,UAAU;YACjB;YAEA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;YAC7B,GAAG,CAAC,MAAM,EAAE;AACZ,YAAA,YAAY,CAAC,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC;AACpD,QAAA,CAAC;AAED,QAAA,IAAI,EAAE;AACN,QAAA,OAAO,MAAK,EAAG,IAAI,YAAY,CAAC,OAAO;YAAE,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxF,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAExB,IAAA,OAAOA,GAAA,CAAA,QAAA,EAAA,EAAQ,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAI;AAChI,CAAC;AAED;AACA,MAAM,aAAa,GAKd,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAI;AACxD,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAY;AAClD,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA,iCAAA,EAAoC,SAAS,kCAAkC;AAC1H,KAAA,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IACtC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACjD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC;IAE9C,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,CAAC,OAAO;YAAE,SAAS,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY;AACrF,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEd,IAAA,MAAM,UAAU,GAAG,OAAO,CAAmB,KAAI;;AAC/C,QAAA,CAAC,aAAD,CAAC,KAAA,MAAA,GAAA,MAAA,GAAD,CAAC,CAAE,cAAc,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS;YAAE;QAEhC,MAAM,WAAW,GAAG,KAAK;QACzB,MAAM,OAAO,GAAY,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE;AACvF,QAAA,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,EAAE,CAAC;QACZ,YAAY,CAAC,IAAI,CAAC;AAElB,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,WAAW,GAAG,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,MAAM,cAAc,EAAE;AACpD,gBAAA,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,EAAE;AACpE,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE;AAC1E,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,gBAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,oBAAoB,CAAC;YAC1D;AACA,YAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAClC,YAAA,MAAM,MAAM,GAAY,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,0CAAE,WAAW,EAAE,KAAI,oBAAoB,EAAE;AAC1I,YAAA,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC;QAAE,OAAO,GAAQ,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC;AACrC,YAAA,MAAM,QAAQ,GAAY,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA,OAAA,EAAU,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAA,CAAE,EAAE;AACxI,YAAA,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C;gBAAU;YACR,YAAY,CAAC,KAAK,CAAC;QACrB;AACF,IAAA,CAAC;AAED,IAAA,QACEC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAA,QAAA,EAAA,CAC7FA,IAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CAC/H,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAChBD,GAAA,CAAA,KAAA,EAAA,EAAkB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,UAAU,GAAG,YAAY,EAAE,EAAA,QAAA,EAC3GC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,aAAa,GAAG,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAA,QAAA,EAAA,CACjJD,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;wCACV,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ;AAC7G,wCAAA,MAAM,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,mBAAmB,GAAG,mBAAmB;AACvE,wCAAA,UAAU,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,aAAa;AAC3D,wCAAA,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG;qCAC1C,EAAA,QAAA,EACE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAGA,GAAA,CAAC,QAAQ,KAAG,GAAGA,GAAA,CAAC,OAAO,KAAG,EAAA,CAC7C,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;AACV,wCAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG;AACjG,wCAAA,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS;AACpF,wCAAA,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG;AAC1C,qCAAA,EAAA,QAAA,EACE,GAAG,CAAC,IAAI,GACL,CAAA,EAAA,CACF,EAAA,EAjBE,GAAG,CAAC,EAAE,CAkBV,CACP,CAAC,EACD,SAAS,KACRA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,EAAA,QAAA,EAC3DC,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CACpED,aAAK,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA,QAAA,EACxLA,GAAA,CAAC,OAAO,EAAA,EAAA,CAAG,EAAA,CACP,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,QAAA,EACxGA,GAAA,CAAC,WAAW,EAAA,EAAA,CAAG,GACX,CAAA,EAAA,CACF,EAAA,CACF,CACP,CAAA,EAAA,CACG,EACNA,aAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAA,QAAA,EAC7BC,eAAM,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CACjED,eACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAC,kBAAkB,EAC9B,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE;AACL,gCAAA,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS;AACnG,gCAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE;AAChG,6BAAA,EAAA,CACD,EACFA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,EACpC,KAAK,EAAE;AACL,gCAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;AAChG,gCAAA,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO;AACrF,gCAAA,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG;AAC7C,6BAAA,EAAA,QAAA,EAAA,SAAA,EAAA,CAGM,CAAA,EAAA,CACJ,EAAA,CACH,CAAA,EAAA,CACF;AAEV,CAAC;AAGD;AACA,MAAM,cAAc,GAKf,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAI;AACjE,IAAA,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAkB,eAAe,CAAC,YAAY,CAAC;IACrG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC5C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACnD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AAE7D,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAgB,IAAI,CAAC;AACpD,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAwC,IAAI,CAAC;AAC/E,IAAA,MAAM,oBAAoB,GAAG,MAAM,CAAsB,IAAI,CAAC;AAC9D,IAAA,MAAM,qBAAqB,GAAG,MAAM,CAAsB,IAAI,CAAC;AAC/D,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAsB,IAAI,CAAC;AAC1D,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAsB,IAAI,CAAC;AAC3D,IAAA,MAAM,aAAa,GAAG,MAAM,CAAkB,IAAI,CAAC;AACnD,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAS,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAA6B,IAAI,GAAG,EAAE,CAAC;AAChE,IAAA,MAAM,oBAAoB,GAAG,MAAM,CAAgB,IAAI,CAAC;AACxD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAmB,IAAI,CAAC;AACjD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAqB,IAAI,CAAC;AAClD,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAA6B,IAAI,CAAC;AACnE,IAAA,MAAM,aAAa,GAAG,MAAM,CAAoC,IAAI,CAAC;AAErE,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;;AACpC,QAAA,IAAI,oBAAoB,CAAC,OAAO,EAAE;AAAE,YAAA,oBAAoB,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAAE,YAAA,oBAAoB,CAAC,OAAO,GAAG,IAAI;QAAE;QAC7H,aAAa,CAAC,KAAK,CAAC;QACpB,oBAAoB,CAAC,CAAC,CAAC;QACvB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG,EAAG,IAAI;YAAE,MAAM,CAAC,IAAI,EAAE;QAAE;QAAE,OAAO,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,QAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,SAAS,CAAC,OAAO,EAAE;YAAE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAG,EAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,SAAS,CAAC,OAAO,GAAG,IAAI;QAAE;AAC7I,QAAA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI;AAAE,gBAAA,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE;YAAE;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;AAAE,YAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI;QAAE;AACnI,QAAA,IAAI,aAAa,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI;AAAE,gBAAA,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE;YAAE;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;AAAE,YAAA,aAAa,CAAC,OAAO,GAAG,IAAI;QAAE;AACpH,QAAA,IAAI,aAAa,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI;AAAE,gBAAA,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE;YAAE;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;AAAE,YAAA,aAAa,CAAC,OAAO,GAAG,IAAI;QAAE;AACpH,QAAA,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI;AAAE,gBAAA,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE;YAAE;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;AAAE,YAAA,iBAAiB,CAAC,OAAO,GAAG,IAAI;QAAE;QAChI,IAAI,CAAA,CAAA,EAAA,GAAA,oBAAoB,CAAC,OAAO,0CAAE,KAAK,MAAK,QAAQ,EAAE;AAAE,YAAA,IAAI;AAAE,gBAAA,CAAA,EAAA,GAAA,oBAAoB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,EAAE;YAAE;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;QAAE;QACpH,IAAI,CAAA,CAAA,EAAA,GAAA,qBAAqB,CAAC,OAAO,0CAAE,KAAK,MAAK,QAAQ,EAAE;AAAE,YAAA,IAAI;AAAE,gBAAA,CAAA,EAAA,GAAA,qBAAqB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,EAAE;YAAE;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;QAAE;AACtH,QAAA,oBAAoB,CAAC,OAAO,GAAG,IAAI;AACnC,QAAA,qBAAqB,CAAC,OAAO,GAAG,IAAI;AACpC,QAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;AAC/B,QAAA,UAAU,CAAC,OAAO,GAAG,IAAI;IAC3B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,OAAO,GAAG,YAAW;AACzB,QAAA,IAAI;AACF,YAAA,kBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC;YAC9C,WAAW,CAAC,EAAE,CAAC;AAEf,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AACrC,YAAA,mBAAmB,CAAC,OAAO,GAAG,WAAW,CAAC,MAAK;gBAC7C,IAAI,gBAAgB,CAAC,OAAO;AAAE,oBAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;YAC3G,CAAC,EAAE,IAAI,CAAC;YAER,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,IAAK,MAAc,CAAC,kBAAkB;YACnF,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC9D,YAAA,oBAAoB,CAAC,OAAO,GAAG,QAAQ;AACvC,YAAA,qBAAqB,CAAC,OAAO,GAAG,SAAS;AAEzC,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE;AAC1C,YAAA,QAAQ,CAAC,OAAO,GAAG,GAAG;AACtB,YAAA,gBAAgB,CAAC,OAAO,GAAG,QAAQ;AAEnC,YAAA,MAAM,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE;AACjD,YAAA,cAAc,CAAC,OAAO,GAAG,GAAG;AAC5B,YAAA,iBAAiB,CAAC,OAAO,GAAG,cAAc;AAE1C,YAAA,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE;AACzC,YAAA,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;AACzB,YAAA,aAAa,CAAC,OAAO,GAAG,UAAU;AAClC,YAAA,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;AAClC,YAAA,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;YAE7C,MAAM,eAAe,GAAG,MAAK;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,OAAO;oBAAE;gBAChC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC;AAC7E,gBAAA,iBAAiB,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC;gBACzD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;AACvE,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC;AAC5C,gBAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC/B,oBAAoB,CAAC,SAAS,CAAC;AAC/B,gBAAA,oBAAoB,CAAC,OAAO,GAAG,qBAAqB,CAAC,eAAe,CAAC;AACvE,YAAA,CAAC;AACD,YAAA,eAAe,EAAE;AAEjB,YAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzE,YAAA,SAAS,CAAC,OAAO,GAAG,MAAM;AAE1B,YAAA,MAAM,KAAK,GAAG,CAAA,yHAAA,EAA4H,YAAY,EAAE;AACxJ,YAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;AACrD,YAAA,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC;AAC/B,YAAA,UAAU,CAAC,OAAO,GAAG,EAAE;AAEvB,YAAA,EAAE,CAAC,MAAM,GAAG,MAAK;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC1D,gBAAA,MAAM,QAAQ,GAAG;AACf,oBAAA,KAAK,EAAE;AACL,wBAAA,KAAK,EAAE,sDAAsD;wBAC7D,gBAAgB,EAAE,EAAE,kBAAkB,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,mBAAmB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE;wBAC1H,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AAC1D;iBACF;gBACD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACnC,YAAA,CAAC;AAED,YAAA,EAAE,CAAC,SAAS,GAAG,OAAO,KAAK,KAAI;;AAC7B,gBAAA,IAAI,IAAI;AACR,gBAAA,IAAI,KAAK,CAAC,IAAI,YAAY,IAAI,EAAE;oBAC9B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACpC,oBAAA,IAAI;AAAE,wBAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE;oBAAE,OAAO,CAAC,EAAE;wBAAE;oBAAQ;gBACvD;qBAAO;AACL,oBAAA,IAAI;wBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE;oBAAE,OAAO,CAAC,EAAE;wBAAE;oBAAQ;gBAC7D;AACA,gBAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC;AAEpC,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;AACjD,oBAAA,kBAAkB,CAAC,eAAe,CAAC,SAAS,CAAC;oBAE7C,MAAM,MAAM,GAAG,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC;AACvD,oBAAA,aAAa,CAAC,OAAO,GAAG,MAAM;AAC9B,oBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,oBAAA,kBAAkB,CAAC,OAAO,GAAG,SAAS;AAEtC,oBAAA,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,KAAI;wBAC/B,IAAI,OAAO,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;4BAAE;wBACjD,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;AACjD,wBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;wBACrC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACxE,oBAAA,CAAC;AAED,oBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxB,oBAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AACzB,oBAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACzC;gBAEA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,0CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI;gBAC7E,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO;AACzC,oBAAA,IAAI,CAAC,GAAG;wBAAE;AACV,oBAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC;AAC9E,oBAAA,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,oBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,EAAE;AACvC,oBAAA,MAAM,CAAC,MAAM,GAAG,WAAW;oBAC3B,IAAI,aAAa,CAAC,OAAO;AAAE,wBAAA,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;;AAC3D,wBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACpC,oBAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzE,oBAAA,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACtC,oBAAA,gBAAgB,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ;AAChD,oBAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAChC;AAEA,gBAAA,IAAI,MAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE;AACnC,oBAAA,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,oBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE;AAC1B,oBAAA,gBAAgB,CAAC,OAAO,GAAG,CAAC;gBAC9B;AACF,YAAA,CAAC;AAED,YAAA,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACrB,gBAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;AAChE,gBAAA,kBAAkB,CAAC,eAAe,CAAC,YAAY,CAAC;AAClD,YAAA,CAAC;AACD,YAAA,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACrB,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,gBAAA,kBAAkB,CAAC,eAAe,CAAC,KAAK,CAAC;gBACzC,WAAW,CAAC,+CAA+C,CAAC;AAC5D,gBAAA,YAAY,EAAE;AAChB,YAAA,CAAC;QAEH;QAAE,OAAO,GAAQ,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC;AAC7C,YAAA,kBAAkB,CAAC,eAAe,CAAC,KAAK,CAAC;AACzC,YAAA,WAAW,CAAC,GAAG,CAAC,OAAO,IAAI,yCAAyC,CAAC;AACrE,YAAA,YAAY,EAAE;QAChB;AACF,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAK;AAClC,QAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;AAC/B,QAAA,IAAI,mBAAmB,CAAC,OAAO,EAAE;AAAE,YAAA,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAAE,YAAA,mBAAmB,CAAC,OAAO,GAAG,IAAI;QAAE;QACnH,eAAe,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,UAAU,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI;AAAE,gBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE;YAAE;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;QAAE;AAC3E,QAAA,YAAY,EAAE;AACd,QAAA,kBAAkB,CAAC,eAAe,CAAC,YAAY,CAAC;AAClD,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAElB,SAAS,CAAC,MAAK;AACb,QAAA,OAAO,EAAE;AACT,QAAA,OAAO,MAAM,UAAU,EAAE;IAC3B,CAAC,EAAE,EAAE,CAAC;AAON,IAAA,QACEC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CACpJA,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,CACjC,eAAe,KAAK,eAAe,CAAC,SAAS,IAAI,UAAU,KAC1DA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACEF,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,SAAS,EAAE,CAAA,MAAA,EAAS,CAAC,GAAG,iBAAiB,GAAG,GAAG,CAAA,CAAA,CAAG,EAAE,SAAS,EAAE,sBAAsB,EAAE,EAAA,CAAI,EACzMA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,iBAAiB,GAAG,GAAG,CAAA,CAAA,CAAG,EAAE,UAAU,EAAE,yBAAyB,EAAE,EAAA,CAAI,CAAA,EAAA,CAC5M,CACJ,EACDA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;4BACV,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ;AACrH,4BAAA,MAAM,EAAE,CAAA,UAAA,EAAa,eAAe,KAAK,eAAe,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE;4BAC5F,SAAS,EAAE,eAAe,KAAK,eAAe,CAAC,SAAS,GAAG,CAAA,IAAA,EAAO,EAAE,GAAG,iBAAiB,GAAG,EAAE,CAAA,oBAAA,EAAuB,IAAI,GAAG,iBAAiB,GAAG,IAAI,CAAA,CAAA,CAAG,GAAG,MAAM;AAC/J,4BAAA,SAAS,EAAE,UAAU,GAAG,CAAA,MAAA,EAAS,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAAA,CAAA,CAAG,GAAG,UAAU,EAAE,UAAU,EAAE;AAC5F,yBAAA,EAAA,QAAA,EACE,eAAe,KAAK,eAAe,CAAC,UAAU,IAC7CA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,6BAA6B,EAAE,EAAA,CAAI,KAE5KA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,EAAA,QAAA,EACpE,OAAO,GAAGA,GAAA,CAAC,UAAU,EAAA,EAAA,CAAG,GAAGA,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAC7C,CACP,EAAA,CACG,EACL,eAAe,KAAK,eAAe,CAAC,SAAS,KAC5CC,IAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CAClHD,GAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,UAAU,GAAG,sBAAsB,GAAG,MAAM,EAAE,EAAA,CAAI,EACrOA,GAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAA,CAAI,CAAA,EAAA,CACvI,CACR,CAAA,EAAA,CACG,EAENC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CACrGA,IAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CACvJ,eAAe,KAAK,eAAe,CAAC,UAAU,IAAI,iBAAiB,EACnE,eAAe,KAAK,eAAe,CAAC,SAAS,KAAK,UAAU,GAAG,mBAAmB,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC,EAC/H,eAAe,KAAK,eAAe,CAAC,KAAK,IAAI,kBAAkB,EAC/D,eAAe,KAAK,eAAe,CAAC,YAAY,IAAI,cAAc,CAAA,EAAA,CACjE,EACH,eAAe,KAAK,eAAe,CAAC,SAAS,IAAI,YAAY,GAAG,CAAC,KAChEA,IAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,QAAA,EAAA,CAC3F,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAA,GAAA,EAAG,CAAC,YAAY,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,EAAA,CAC1G,CACL,EACDD,GAAA,CAAC,UAAU,EAAA,EAAC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,KAAK,eAAe,CAAC,SAAS,IAAI,CAAC,OAAO,EAAA,CAAI,CAAA,EAAA,CACnH,EAEL,eAAe,KAAK,eAAe,CAAC,KAAK,KACxCC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAA,QAAA,EAAA,CAC7PD,GAAA,CAAC,eAAe,EAAA,EAAA,CAAG,EACnBA,GAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAQ,CAAA,EAAA,CAClD,CACP,EAEA,eAAe,KAAK,eAAe,CAAC,SAAS,KAC5CC,IAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,MAAK,EAAG,UAAU,EAAE,CAAC,CAAC,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,EAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AAC9D,oBAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;oBAC7G,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;AACpI,iBAAA,EAAA,QAAA,EAAA,CACCD,IAAC,YAAY,EAAA,EAAA,CAAG,gBAET,CACV,CAAA,EAAA,CACG;AAEV,CAAC;AAGD;AACO,MAAM,OAAO,GAA2B,CAAC,EAC9C,MAAM,EACN,YAAY,EACZ,MAAM,GAAG,yBAAyB,EAClC,SAAS,EAAE,aAAa,GAAG,QAAQ,EACnC,SAAS,EAAE,aAAa,GAAG,MAAM,EACjC,iBAAiB,EAAE,qBAAqB,GAAG,iCAAiC,EAC5E,QAAQ,GAAG,cAAc,EACzB,KAAK,GAAG,MAAM,EACd,WAAW,EACX,UAAU,GAAG,EAAE,EACf,YAAY,GAAG,CAAC,EAChB,SAAS,EACT,MAAM,EACN,OAAO,EACP,eAAe,GAAG,KAAK,EACxB,KAAI;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAmB,MAAM,CAAC;IACpE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAGzD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAItC,IAAI,CAAC;IACf,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,eAAe,CAAC;;IAGlE,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,eAAe,IAAI,MAAM,IAAI,MAAM,EAAE;AACvC,YAAA,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,cAAA,CAAgB,EAAE;AAC/B,gBAAA,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM;aAC/B;iBACE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;iBACtB,IAAI,CAAC,IAAI,IAAG;AACX,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,oBAAA,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;gBACnC;gBACA,eAAe,CAAC,IAAI,CAAC;AACvB,YAAA,CAAC;iBACA,KAAK,CAAC,GAAG,IAAG;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC;gBAC1D,eAAe,CAAC,IAAI,CAAC;AACvB,YAAA,CAAC,CAAC;QACN;IACF,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;AAGrC,IAAA,MAAM,SAAS,GAAG,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,IAAI,KAAI,aAAa;AACrD,IAAA,MAAM,SAAS,GAAG,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,SAAS,KAAI,aAAa;AAC1D,IAAA,MAAM,iBAAiB,GAAG,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,iBAAiB,KAAI,qBAAqB;IAElF,MAAM,UAAU,GAAG,QAAQ,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,EAAI,CAAC,CAAC,CAAC;AACzD,IAAA,MAAM,WAAW,GAAG,QAAQ,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,EAAI,CAAC,CAAC,CAAC;AAE3G,IAAA,MAAM,eAAe,GAAG,CAAC,GAAqB,KAAI;QAChD,IAAI,GAAG,KAAK,OAAO,IAAI,SAAS,KAAK,OAAO,EAAE;YAC5C,YAAY,CAAC,OAAO,CAAC;YACrB,gBAAgB,CAAC,IAAI,CAAC;QACxB;AAAO,aAAA,IAAI,GAAG,KAAK,MAAM,EAAE;YACzB,gBAAgB,CAAC,KAAK,CAAC;YACvB,YAAY,CAAC,MAAM,CAAC;QACtB;AACF,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,MAAK;QACzB,gBAAgB,CAAC,KAAK,CAAC;QACvB,YAAY,CAAC,MAAM,CAAC;AACtB,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,QAAQ,KAAK;UAChC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;UAC9B,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;AAGrC,IAAA,MAAM,KAAK,GAAG,WAAW,KAAK,KAAK,KAAK,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AACxE,IAAA,MAAM,OAAO,GAAG,SAAS,KAAK,KAAK,KAAK,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAExE,QACEC,4BACED,GAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAQ,CAAA;;;;;OAKP,EAAA,CAAS,EAEVC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,KAAK,aAAa,GAAG,YAAY,GAAG,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,EAAA,QAAA,EAAA,CAC3L,MAAM,KACLA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE;4BACjC,KAAK,EAAE,gCAAgC,EAAE,MAAM,EAAE,iCAAiC,EAAE,SAAS,EAAE,OAAO;AACtG,4BAAA,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ;AACnF,4BAAA,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE;AACzC,yBAAA,EAAA,QAAA,EAAA,CAECA,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,EAAA,QAAA,EAAA,CAChMA,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CAChED,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,QAAA,EAC3JA,GAAA,CAAC,iBAAiB,EAAA,EAAA,CAAG,EAAA,CACjB,EACNC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACED,GAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAA,QAAA,EAAG,SAAS,EAAA,CAAM,EACnJC,IAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CACpKD,GAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAA,CAAI,EAAA,QAAA,CAAA,EAAA,CAE9G,CAAA,EAAA,CACA,CAAA,EAAA,CACF,EACNA,GAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAA,QAAA,EACxJA,GAAA,CAAC,KAAK,EAAA,EAAA,CAAG,EAAA,CACF,CAAA,EAAA,CACL,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,EAAE,EAAA,QAAA,EAAA,CACtHD,GAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;4CACrD,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO;4CAC/G,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,UAAU,EAAE;yCACzH,EAAA,QAAA,EAAA,gBAAA,EAAA,CAEQ,EACTA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAA,CAAI,EACvDA,GAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;4CACtD,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO;4CAC/G,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,UAAU,EAAE;yCAC1H,EAAA,QAAA,EAAA,gBAAA,EAAA,CAEQ,CAAA,EAAA,CACL,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,EAAA,QAAA,EACrF,SAAS,KAAK,MAAM,IACnBA,GAAA,CAAC,aAAa,EAAA,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAA,CAAI,KAE7G,aAAa,IACXA,IAAC,cAAc,EAAA,EAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAA,CAAI,KAEpIA,GAAA,CAAC,aAAa,EAAA,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAA,CAAI,CAC9G,CACF,EAAA,CACG,CAAA,EAAA,CACF,CACP,EAGA,CAAC,MAAM,KACNA,GAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;AAClC,4BAAA,KAAK,EAAE,CAAA,EAAG,UAAU,CAAA,EAAA,CAAI,EAAE,MAAM,EAAE,CAAA,EAAG,UAAU,IAAI,EAAE,YAAY,EAAE,CAAA,EAAG,YAAY,CAAA,CAAA,CAAG;AACrF,4BAAA,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;4BACpE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ;AAC/D,4BAAA,SAAS,EAAE,4BAA4B,EAAE,UAAU,EAAE;AACtD,yBAAA,EAAA,QAAA,EACCA,aAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAA,QAAA,EACjGA,cAAM,CAAC,EAAC,gCAAgC,EAAA,CAAG,GACvC,EAAA,CACC,CACV,CAAA,EAAA,CACG,CAAA,EAAA,CACL;AAEP;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -417,10 +417,36 @@ const VoiceInterface = ({ geminiApiKey, voiceName, systemInstruction, onEndCall
|
|
|
417
417
|
}, children: [jsxRuntime.jsx(PhoneOffIcon, {}), "End Call"] }))] }));
|
|
418
418
|
};
|
|
419
419
|
// Main VoxChat Component
|
|
420
|
-
const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', agentName = 'VOX-01', voiceName = 'Kore', systemInstruction = 'You are a helpful AI assistant.', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 56, borderRadius = 0, iconColor, onOpen, onClose }) => {
|
|
420
|
+
const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', agentName: propAgentName = 'VOX-01', voiceName: propVoiceName = 'Kore', systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 56, borderRadius = 0, iconColor, onOpen, onClose, useServerConfig = false }) => {
|
|
421
421
|
const [isOpen, setIsOpen] = react.useState(false);
|
|
422
422
|
const [activeTab, setActiveTab] = react.useState('text');
|
|
423
423
|
const [isVoiceActive, setIsVoiceActive] = react.useState(false);
|
|
424
|
+
// Server config state
|
|
425
|
+
const [serverConfig, setServerConfig] = react.useState(null);
|
|
426
|
+
const [configLoaded, setConfigLoaded] = react.useState(!useServerConfig);
|
|
427
|
+
// Fetch config from server if useServerConfig is true
|
|
428
|
+
react.useEffect(() => {
|
|
429
|
+
if (useServerConfig && apiKey && apiUrl) {
|
|
430
|
+
fetch(`${apiUrl}/api/v1/config`, {
|
|
431
|
+
headers: { 'x-api-key': apiKey }
|
|
432
|
+
})
|
|
433
|
+
.then(res => res.json())
|
|
434
|
+
.then(data => {
|
|
435
|
+
if (data.agentConfig) {
|
|
436
|
+
setServerConfig(data.agentConfig);
|
|
437
|
+
}
|
|
438
|
+
setConfigLoaded(true);
|
|
439
|
+
})
|
|
440
|
+
.catch(err => {
|
|
441
|
+
console.error('[VOX] Failed to fetch server config:', err);
|
|
442
|
+
setConfigLoaded(true);
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}, [useServerConfig, apiKey, apiUrl]);
|
|
446
|
+
// Use server config if available, otherwise use props
|
|
447
|
+
const agentName = (serverConfig === null || serverConfig === void 0 ? void 0 : serverConfig.name) || propAgentName;
|
|
448
|
+
const voiceName = (serverConfig === null || serverConfig === void 0 ? void 0 : serverConfig.voiceName) || propVoiceName;
|
|
449
|
+
const systemInstruction = (serverConfig === null || serverConfig === void 0 ? void 0 : serverConfig.systemInstruction) || propSystemInstruction;
|
|
424
450
|
const handleOpen = () => { setIsOpen(true); onOpen === null || onOpen === void 0 ? void 0 : onOpen(); };
|
|
425
451
|
const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose === null || onClose === void 0 ? void 0 : onClose(); };
|
|
426
452
|
const handleTabChange = (tab) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n geminiApiKey: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n voiceName?: string;\r\n systemInstruction?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n}\r\n\r\nenum ConnectionState {\r\n DISCONNECTED = 'DISCONNECTED',\r\n CONNECTING = 'CONNECTING',\r\n CONNECTED = 'CONNECTED',\r\n ERROR = 'ERROR',\r\n}\r\n\r\n// Audio utilities\r\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\r\n const buffer = new ArrayBuffer(inputData.length * 2);\r\n const view = new DataView(buffer);\r\n for (let i = 0; i < inputData.length; i++) {\r\n const s = Math.max(-1, Math.min(1, inputData[i]));\r\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\r\n }\r\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\r\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\r\n}\r\n\r\nfunction decode(base64: string): ArrayBuffer {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\r\n const dataView = new DataView(arrayBuffer);\r\n const numSamples = arrayBuffer.byteLength / 2;\r\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\r\n const channelData = audioBuffer.getChannelData(0);\r\n for (let i = 0; i < numSamples; i++) {\r\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons - matching exact website icons\r\nconst MessageCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n);\r\n\r\nconst MicIcon = ({ size = 14 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst MicOffIcon = ({ size = 40 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\r\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\r\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\r\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\r\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst XIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\r\n </svg>\r\n);\r\n\r\nconst PhoneOffIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\" />\r\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst BotIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\r\n </svg>\r\n);\r\n\r\nconst UserIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst Loader2Icon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\r\n </svg>\r\n);\r\n\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationRef = useRef<number>();\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const draw = () => {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n if (!analyser || !isActive) {\r\n ctx.strokeStyle = '#3f3f46';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.moveTo(0, height / 2);\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n return;\r\n }\r\n\r\n const bufferLength = analyser.frequencyBinCount;\r\n const dataArray = new Uint8Array(bufferLength);\r\n analyser.getByteTimeDomainData(dataArray);\r\n\r\n ctx.strokeStyle = '#ffffff';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n\r\n const sliceWidth = width / bufferLength;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n const v = dataArray[i] / 128.0;\r\n const y = (v * height) / 2;\r\n if (i === 0) ctx.moveTo(x, y);\r\n else ctx.lineTo(x, y);\r\n x += sliceWidth;\r\n }\r\n\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n draw();\r\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\r\n }, [analyser, isActive]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\r\n};\r\n\r\n// Text Interface Component\r\nconst TextInterface: React.FC<{\r\n apiKey: string;\r\n apiUrl: string;\r\n agentName: string;\r\n systemInstruction: string;\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction }) => {\r\n const [messages, setMessages] = useState<Message[]>([\r\n { id: 'welcome', role: 'assistant', text: `VOX INITIALIZED. GREETINGS. I AM ${agentName}. HOW MAY I ASSIST YOUR INQUIRY?` }\r\n ]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }, [messages]);\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const messageText = input;\r\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\r\n setMessages(prev => [...prev, userMsg]);\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\r\n body: JSON.stringify({ message: messageText, history, systemInstruction })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'API request failed');\r\n }\r\n const data = await response.json();\r\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response?.toUpperCase() || 'ERROR: NO RESPONSE' };\r\n setMessages(prev => [...prev, botMsg]);\r\n } catch (err: any) {\r\n console.error('VOX Chat Error:', err);\r\n const errorMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: `ERROR: ${err.message || 'SIGNAL LOST. RETRY.'}` };\r\n setMessages(prev => [...prev, errorMsg]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: '#000000' }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '24px' }}>\r\n {messages.map((msg) => (\r\n <div key={msg.id} style={{ display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }}>\r\n <div style={{ display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '12px', maxWidth: '85%' }}>\r\n <div style={{\r\n flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: msg.role === 'user' ? '1px solid #ffffff' : '1px solid #52525b',\r\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\r\n color: msg.role === 'user' ? '#000000' : '#ffffff'\r\n }}>\r\n {msg.role === 'user' ? <UserIcon /> : <BotIcon />}\r\n </div>\r\n <div style={{\r\n padding: '12px 16px', fontSize: '11px', fontWeight: 700, letterSpacing: '0.05em', lineHeight: 1.6,\r\n border: '1px solid #3f3f46', background: msg.role === 'user' ? '#27272a' : '#000000',\r\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\r\n }}>\r\n {msg.text}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}>\r\n <div style={{ flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: '1px solid #3f3f46', color: '#ffffff', opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a' }}>\r\n <Loader2Icon />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n <div style={{ padding: '24px' }}>\r\n <form onSubmit={handleSend} style={{ display: 'flex', gap: '16px' }}>\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"INPUT COMMAND...\"\r\n disabled={isLoading}\r\n style={{\r\n flex: 1, padding: '16px 24px', border: '1px solid #52525b', background: '#000000', color: '#ffffff',\r\n outline: 'none', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em'\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '16px 24px', background: '#ffffff', color: '#000000', border: 'none', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em',\r\n opacity: !input.trim() || isLoading ? 0.2 : 1\r\n }}\r\n >\r\n EXECUTE\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Voice Interface Component\r\nconst VoiceInterface: React.FC<{\r\n geminiApiKey: string;\r\n voiceName: string;\r\n systemInstruction: string;\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\r\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\r\n const [errorMsg, setErrorMsg] = useState('');\r\n const [isMuted, setIsMuted] = useState(false);\r\n const [callDuration, setCallDuration] = useState(0);\r\n const [isSpeaking, setIsSpeaking] = useState(false);\r\n const [speakingIntensity, setSpeakingIntensity] = useState(0);\r\n\r\n const callStartTimeRef = useRef<number | null>(null);\r\n const durationIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n const inputAudioContextRef = useRef<AudioContext | null>(null);\r\n const outputAudioContextRef = useRef<AudioContext | null>(null);\r\n const inputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputGainRef = useRef<GainNode | null>(null);\r\n const nextStartTimeRef = useRef<number>(0);\r\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\r\n const speakingAnimationRef = useRef<number | null>(null);\r\n const sessionRef = useRef<WebSocket | null>(null);\r\n const streamRef = useRef<MediaStream | null>(null);\r\n const scriptProcessorRef = useRef<ScriptProcessorNode | null>(null);\r\n const sourceNodeRef = useRef<MediaStreamAudioSourceNode | null>(null);\r\n\r\n const cleanupAudio = useCallback(() => {\r\n if (speakingAnimationRef.current) { cancelAnimationFrame(speakingAnimationRef.current); speakingAnimationRef.current = null; }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\r\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\r\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\r\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\r\n if (outputAnalyserRef.current) { try { outputAnalyserRef.current.disconnect(); } catch (e) {} outputAnalyserRef.current = null; }\r\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\r\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\r\n inputAudioContextRef.current = null;\r\n outputAudioContextRef.current = null;\r\n inputAnalyserRef.current = null;\r\n sessionRef.current = null;\r\n }, []);\r\n\r\n const connect = async () => {\r\n try {\r\n setConnectionState(ConnectionState.CONNECTING);\r\n setErrorMsg('');\r\n\r\n callStartTimeRef.current = Date.now();\r\n durationIntervalRef.current = setInterval(() => {\r\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\r\n }, 1000);\r\n\r\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\r\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\r\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\r\n inputAudioContextRef.current = inputCtx;\r\n outputAudioContextRef.current = outputCtx;\r\n\r\n const analyser = inputCtx.createAnalyser();\r\n analyser.fftSize = 256;\r\n inputAnalyserRef.current = analyser;\r\n\r\n const outputAnalyser = outputCtx.createAnalyser();\r\n outputAnalyser.fftSize = 256;\r\n outputAnalyserRef.current = outputAnalyser;\r\n\r\n const outputGain = outputCtx.createGain();\r\n outputGain.gain.value = 1;\r\n outputGainRef.current = outputGain;\r\n outputGain.connect(outputAnalyser);\r\n outputAnalyser.connect(outputCtx.destination);\r\n\r\n const monitorSpeaking = () => {\r\n if (!outputAnalyserRef.current) return;\r\n const dataArray = new Uint8Array(outputAnalyserRef.current.frequencyBinCount);\r\n outputAnalyserRef.current.getByteFrequencyData(dataArray);\r\n const average = dataArray.reduce((a, b) => a + b, 0) / dataArray.length;\r\n const intensity = Math.min(average / 128, 1);\r\n setIsSpeaking(intensity > 0.05);\r\n setSpeakingIntensity(intensity);\r\n speakingAnimationRef.current = requestAnimationFrame(monitorSpeaking);\r\n };\r\n monitorSpeaking();\r\n\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\r\n console.log('[VOX] Connecting to Gemini Live API...');\r\n const ws = new WebSocket(wsUrl);\r\n sessionRef.current = ws;\r\n\r\n ws.onopen = () => {\r\n console.log('[VOX] WebSocket connected, sending setup...');\r\n const setupMsg = {\r\n setup: {\r\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\r\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\r\n systemInstruction: { parts: [{ text: systemInstruction }] }\r\n }\r\n };\r\n ws.send(JSON.stringify(setupMsg));\r\n };\r\n\r\n ws.onmessage = async (event) => {\r\n let data;\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try { data = JSON.parse(text); } catch (e) { return; }\r\n } else {\r\n try { data = JSON.parse(event.data); } catch (e) { return; }\r\n }\r\n console.log('[VOX] Received:', data);\r\n\r\n if (data.setupComplete) {\r\n console.log('[VOX] Setup complete, voice ready!');\r\n setConnectionState(ConnectionState.CONNECTED);\r\n\r\n const source = inputCtx.createMediaStreamSource(stream);\r\n sourceNodeRef.current = source;\r\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\r\n scriptProcessorRef.current = processor;\r\n\r\n processor.onaudioprocess = (e) => {\r\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\r\n const inputData = e.inputBuffer.getChannelData(0);\r\n const pcmBlob = createBlob(inputData);\r\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\r\n };\r\n\r\n source.connect(analyser);\r\n source.connect(processor);\r\n processor.connect(inputCtx.destination);\r\n }\r\n\r\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\r\n if (audioData) {\r\n const ctx = outputAudioContextRef.current;\r\n if (!ctx) return;\r\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\r\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\r\n const source = ctx.createBufferSource();\r\n source.buffer = audioBuffer;\r\n if (outputGainRef.current) source.connect(outputGainRef.current);\r\n else source.connect(ctx.destination);\r\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\r\n source.start(nextStartTimeRef.current);\r\n nextStartTimeRef.current += audioBuffer.duration;\r\n sourcesRef.current.add(source);\r\n }\r\n\r\n if (data.serverContent?.interrupted) {\r\n sourcesRef.current.forEach(s => s.stop());\r\n sourcesRef.current.clear();\r\n nextStartTimeRef.current = 0;\r\n }\r\n };\r\n\r\n ws.onclose = (event) => {\r\n console.log('[VOX] WebSocket closed:', event.code, event.reason);\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n };\r\n ws.onerror = (error) => {\r\n console.error('[VOX] WebSocket error:', error);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg('Connection failed. Check your Gemini API key.');\r\n cleanupAudio();\r\n };\r\n\r\n } catch (err: any) {\r\n console.error('[VOX] Connection error:', err);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\r\n cleanupAudio();\r\n }\r\n };\r\n\r\n const disconnect = useCallback(() => {\r\n callStartTimeRef.current = null;\r\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\r\n setCallDuration(0);\r\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\r\n cleanupAudio();\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n }, [cleanupAudio]);\r\n\r\n useEffect(() => {\r\n connect();\r\n return () => disconnect();\r\n }, []);\r\n\r\n const toggleMute = () => {\r\n setIsMuted(!isMuted);\r\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }}>\r\n <div style={{ position: 'relative' }}>\r\n {connectionState === ConnectionState.CONNECTED && isSpeaking && (\r\n <>\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.2)', transform: `scale(${1 + speakingIntensity * 0.3})`, animation: 'vox-ping 1s infinite' }} />\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.1)', transform: `scale(${1 + speakingIntensity * 0.5})`, transition: 'transform 0.1s ease-out' }} />\r\n </>\r\n )}\r\n <div style={{\r\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px rgba(255,255,255,${0.15 + speakingIntensity * 0.25})` : 'none',\r\n transform: isSpeaking ? `scale(${1 + speakingIntensity * 0.08})` : 'scale(1)', transition: 'all 0.3s'\r\n }}>\r\n {connectionState === ConnectionState.CONNECTING ? (\r\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon size={40} />}\r\n </div>\r\n )}\r\n </div>\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\r\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: isSpeaking ? 1 : 0.75, animation: isSpeaking ? 'vox-ping 1s infinite' : 'none' }} />\r\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\r\n <p style={{ textAlign: 'center', fontSize: '10px', fontWeight: 900, color: '#71717a', textTransform: 'uppercase', letterSpacing: '0.2em', height: '20px' }}>\r\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\r\n {connectionState === ConnectionState.CONNECTED && (isSpeaking ? 'Agent Speaking...' : isMuted ? 'Signal Muted' : 'Listening...')}\r\n {connectionState === ConnectionState.ERROR && 'Connection Error'}\r\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\r\n </p>\r\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\r\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\r\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\r\n </p>\r\n )}\r\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\r\n </div>\r\n\r\n {connectionState === ConnectionState.ERROR && (\r\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.1em', padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46' }}>\r\n <AlertCircleIcon />\r\n <span style={{ marginLeft: '12px' }}>{errorMsg}</span>\r\n </div>\r\n )}\r\n\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\r\n padding: '12px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em', display: 'flex', alignItems: 'center', gap: '8px'\r\n }}>\r\n <PhoneOffIcon />\r\n End Call\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Main VoxChat Component\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n geminiApiKey,\r\n apiUrl = 'https://your-server.com',\r\n agentName = 'VOX-01',\r\n voiceName = 'Kore',\r\n systemInstruction = 'You are a helpful AI assistant.',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 56,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\r\n const [isVoiceActive, setIsVoiceActive] = useState(false);\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\r\n\r\n const handleTabChange = (tab: 'text' | 'voice') => {\r\n if (tab === 'voice' && activeTab !== 'voice') {\r\n setActiveTab('voice');\r\n setIsVoiceActive(true);\r\n } else if (tab === 'text') {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n }\r\n };\r\n\r\n const handleEndCall = () => {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\r\n // Button colors based on theme\r\n const btnBg = buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\r\n const btnIcon = iconColor || (theme === 'light' ? '#ffffff' : '#000000');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\r\n @keyframes vox-spin { to { transform: rotate(360deg); } }\r\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\r\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\r\n `}</style>\r\n\r\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: position === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }}>\r\n {isOpen && (\r\n <div className=\"vox-widget\" style={{\r\n width: 'min(calc(100vw - 32px), 400px)', height: 'min(calc(100vh - 100px), 640px)', maxHeight: '640px',\r\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: '1px solid #3f3f46', boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: '#000000', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46' }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: '1px solid #52525b', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff' }}>\r\n <MessageCircleIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: '#ffffff', fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: '#a1a1aa', fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: '#ffffff', borderRadius: '50%', marginRight: '8px' }} />\r\n Active\r\n </p>\r\n </div>\r\n </div>\r\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: '#18181b', borderBottom: '1px solid #3f3f46', flexShrink: 0 }}>\r\n <button onClick={() => handleTabChange('text')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: '#3f3f46' }} />\r\n <button onClick={() => handleTabChange('voice')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Voice Protocol\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n ) : (\r\n isVoiceActive ? (\r\n <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\r\n ) : (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toggle Button - only show when widget is closed */}\r\n {!isOpen && (\r\n <button onClick={handleOpen} style={{\r\n width: `${buttonSize}px`, height: `${buttonSize}px`, borderRadius: `${borderRadius}%`,\r\n background: btnBg, color: btnIcon, border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', transition: 'transform 0.2s'\r\n }}>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs","useRef","useEffect","useState","useCallback","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n geminiApiKey: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n voiceName?: string;\r\n systemInstruction?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n useServerConfig?: boolean; // If true, fetch config from server using API key\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n}\r\n\r\nenum ConnectionState {\r\n DISCONNECTED = 'DISCONNECTED',\r\n CONNECTING = 'CONNECTING',\r\n CONNECTED = 'CONNECTED',\r\n ERROR = 'ERROR',\r\n}\r\n\r\n// Audio utilities\r\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\r\n const buffer = new ArrayBuffer(inputData.length * 2);\r\n const view = new DataView(buffer);\r\n for (let i = 0; i < inputData.length; i++) {\r\n const s = Math.max(-1, Math.min(1, inputData[i]));\r\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\r\n }\r\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\r\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\r\n}\r\n\r\nfunction decode(base64: string): ArrayBuffer {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\r\n const dataView = new DataView(arrayBuffer);\r\n const numSamples = arrayBuffer.byteLength / 2;\r\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\r\n const channelData = audioBuffer.getChannelData(0);\r\n for (let i = 0; i < numSamples; i++) {\r\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons - matching exact website icons\r\nconst MessageCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n);\r\n\r\nconst MicIcon = ({ size = 14 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst MicOffIcon = ({ size = 40 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\r\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\r\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\r\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\r\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst XIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\r\n </svg>\r\n);\r\n\r\nconst PhoneOffIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\" />\r\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst BotIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\r\n </svg>\r\n);\r\n\r\nconst UserIcon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst Loader2Icon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertCircleIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\r\n </svg>\r\n);\r\n\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationRef = useRef<number>();\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const draw = () => {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n if (!analyser || !isActive) {\r\n ctx.strokeStyle = '#3f3f46';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.moveTo(0, height / 2);\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n return;\r\n }\r\n\r\n const bufferLength = analyser.frequencyBinCount;\r\n const dataArray = new Uint8Array(bufferLength);\r\n analyser.getByteTimeDomainData(dataArray);\r\n\r\n ctx.strokeStyle = '#ffffff';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n\r\n const sliceWidth = width / bufferLength;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n const v = dataArray[i] / 128.0;\r\n const y = (v * height) / 2;\r\n if (i === 0) ctx.moveTo(x, y);\r\n else ctx.lineTo(x, y);\r\n x += sliceWidth;\r\n }\r\n\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n draw();\r\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\r\n }, [analyser, isActive]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\r\n};\r\n\r\n// Text Interface Component\r\nconst TextInterface: React.FC<{\r\n apiKey: string;\r\n apiUrl: string;\r\n agentName: string;\r\n systemInstruction: string;\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction }) => {\r\n const [messages, setMessages] = useState<Message[]>([\r\n { id: 'welcome', role: 'assistant', text: `VOX INITIALIZED. GREETINGS. I AM ${agentName}. HOW MAY I ASSIST YOUR INQUIRY?` }\r\n ]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }, [messages]);\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const messageText = input;\r\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\r\n setMessages(prev => [...prev, userMsg]);\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\r\n body: JSON.stringify({ message: messageText, history, systemInstruction })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'API request failed');\r\n }\r\n const data = await response.json();\r\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response?.toUpperCase() || 'ERROR: NO RESPONSE' };\r\n setMessages(prev => [...prev, botMsg]);\r\n } catch (err: any) {\r\n console.error('VOX Chat Error:', err);\r\n const errorMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: `ERROR: ${err.message || 'SIGNAL LOST. RETRY.'}` };\r\n setMessages(prev => [...prev, errorMsg]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: '#000000' }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '24px' }}>\r\n {messages.map((msg) => (\r\n <div key={msg.id} style={{ display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }}>\r\n <div style={{ display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '12px', maxWidth: '85%' }}>\r\n <div style={{\r\n flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: msg.role === 'user' ? '1px solid #ffffff' : '1px solid #52525b',\r\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\r\n color: msg.role === 'user' ? '#000000' : '#ffffff'\r\n }}>\r\n {msg.role === 'user' ? <UserIcon /> : <BotIcon />}\r\n </div>\r\n <div style={{\r\n padding: '12px 16px', fontSize: '11px', fontWeight: 700, letterSpacing: '0.05em', lineHeight: 1.6,\r\n border: '1px solid #3f3f46', background: msg.role === 'user' ? '#27272a' : '#000000',\r\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\r\n }}>\r\n {msg.text}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}>\r\n <div style={{ flexShrink: 0, width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: '1px solid #3f3f46', color: '#ffffff', opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a' }}>\r\n <Loader2Icon />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n <div style={{ padding: '24px' }}>\r\n <form onSubmit={handleSend} style={{ display: 'flex', gap: '16px' }}>\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"INPUT COMMAND...\"\r\n disabled={isLoading}\r\n style={{\r\n flex: 1, padding: '16px 24px', border: '1px solid #52525b', background: '#000000', color: '#ffffff',\r\n outline: 'none', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em'\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '16px 24px', background: '#ffffff', color: '#000000', border: 'none', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em',\r\n opacity: !input.trim() || isLoading ? 0.2 : 1\r\n }}\r\n >\r\n EXECUTE\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Voice Interface Component\r\nconst VoiceInterface: React.FC<{\r\n geminiApiKey: string;\r\n voiceName: string;\r\n systemInstruction: string;\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\r\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\r\n const [errorMsg, setErrorMsg] = useState('');\r\n const [isMuted, setIsMuted] = useState(false);\r\n const [callDuration, setCallDuration] = useState(0);\r\n const [isSpeaking, setIsSpeaking] = useState(false);\r\n const [speakingIntensity, setSpeakingIntensity] = useState(0);\r\n\r\n const callStartTimeRef = useRef<number | null>(null);\r\n const durationIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n const inputAudioContextRef = useRef<AudioContext | null>(null);\r\n const outputAudioContextRef = useRef<AudioContext | null>(null);\r\n const inputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputAnalyserRef = useRef<AnalyserNode | null>(null);\r\n const outputGainRef = useRef<GainNode | null>(null);\r\n const nextStartTimeRef = useRef<number>(0);\r\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\r\n const speakingAnimationRef = useRef<number | null>(null);\r\n const sessionRef = useRef<WebSocket | null>(null);\r\n const streamRef = useRef<MediaStream | null>(null);\r\n const scriptProcessorRef = useRef<ScriptProcessorNode | null>(null);\r\n const sourceNodeRef = useRef<MediaStreamAudioSourceNode | null>(null);\r\n\r\n const cleanupAudio = useCallback(() => {\r\n if (speakingAnimationRef.current) { cancelAnimationFrame(speakingAnimationRef.current); speakingAnimationRef.current = null; }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\r\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\r\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\r\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\r\n if (outputAnalyserRef.current) { try { outputAnalyserRef.current.disconnect(); } catch (e) {} outputAnalyserRef.current = null; }\r\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\r\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\r\n inputAudioContextRef.current = null;\r\n outputAudioContextRef.current = null;\r\n inputAnalyserRef.current = null;\r\n sessionRef.current = null;\r\n }, []);\r\n\r\n const connect = async () => {\r\n try {\r\n setConnectionState(ConnectionState.CONNECTING);\r\n setErrorMsg('');\r\n\r\n callStartTimeRef.current = Date.now();\r\n durationIntervalRef.current = setInterval(() => {\r\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\r\n }, 1000);\r\n\r\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\r\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\r\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\r\n inputAudioContextRef.current = inputCtx;\r\n outputAudioContextRef.current = outputCtx;\r\n\r\n const analyser = inputCtx.createAnalyser();\r\n analyser.fftSize = 256;\r\n inputAnalyserRef.current = analyser;\r\n\r\n const outputAnalyser = outputCtx.createAnalyser();\r\n outputAnalyser.fftSize = 256;\r\n outputAnalyserRef.current = outputAnalyser;\r\n\r\n const outputGain = outputCtx.createGain();\r\n outputGain.gain.value = 1;\r\n outputGainRef.current = outputGain;\r\n outputGain.connect(outputAnalyser);\r\n outputAnalyser.connect(outputCtx.destination);\r\n\r\n const monitorSpeaking = () => {\r\n if (!outputAnalyserRef.current) return;\r\n const dataArray = new Uint8Array(outputAnalyserRef.current.frequencyBinCount);\r\n outputAnalyserRef.current.getByteFrequencyData(dataArray);\r\n const average = dataArray.reduce((a, b) => a + b, 0) / dataArray.length;\r\n const intensity = Math.min(average / 128, 1);\r\n setIsSpeaking(intensity > 0.05);\r\n setSpeakingIntensity(intensity);\r\n speakingAnimationRef.current = requestAnimationFrame(monitorSpeaking);\r\n };\r\n monitorSpeaking();\r\n\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\r\n console.log('[VOX] Connecting to Gemini Live API...');\r\n const ws = new WebSocket(wsUrl);\r\n sessionRef.current = ws;\r\n\r\n ws.onopen = () => {\r\n console.log('[VOX] WebSocket connected, sending setup...');\r\n const setupMsg = {\r\n setup: {\r\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\r\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\r\n systemInstruction: { parts: [{ text: systemInstruction }] }\r\n }\r\n };\r\n ws.send(JSON.stringify(setupMsg));\r\n };\r\n\r\n ws.onmessage = async (event) => {\r\n let data;\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try { data = JSON.parse(text); } catch (e) { return; }\r\n } else {\r\n try { data = JSON.parse(event.data); } catch (e) { return; }\r\n }\r\n console.log('[VOX] Received:', data);\r\n\r\n if (data.setupComplete) {\r\n console.log('[VOX] Setup complete, voice ready!');\r\n setConnectionState(ConnectionState.CONNECTED);\r\n\r\n const source = inputCtx.createMediaStreamSource(stream);\r\n sourceNodeRef.current = source;\r\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\r\n scriptProcessorRef.current = processor;\r\n\r\n processor.onaudioprocess = (e) => {\r\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\r\n const inputData = e.inputBuffer.getChannelData(0);\r\n const pcmBlob = createBlob(inputData);\r\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\r\n };\r\n\r\n source.connect(analyser);\r\n source.connect(processor);\r\n processor.connect(inputCtx.destination);\r\n }\r\n\r\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\r\n if (audioData) {\r\n const ctx = outputAudioContextRef.current;\r\n if (!ctx) return;\r\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\r\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\r\n const source = ctx.createBufferSource();\r\n source.buffer = audioBuffer;\r\n if (outputGainRef.current) source.connect(outputGainRef.current);\r\n else source.connect(ctx.destination);\r\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\r\n source.start(nextStartTimeRef.current);\r\n nextStartTimeRef.current += audioBuffer.duration;\r\n sourcesRef.current.add(source);\r\n }\r\n\r\n if (data.serverContent?.interrupted) {\r\n sourcesRef.current.forEach(s => s.stop());\r\n sourcesRef.current.clear();\r\n nextStartTimeRef.current = 0;\r\n }\r\n };\r\n\r\n ws.onclose = (event) => {\r\n console.log('[VOX] WebSocket closed:', event.code, event.reason);\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n };\r\n ws.onerror = (error) => {\r\n console.error('[VOX] WebSocket error:', error);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg('Connection failed. Check your Gemini API key.');\r\n cleanupAudio();\r\n };\r\n\r\n } catch (err: any) {\r\n console.error('[VOX] Connection error:', err);\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\r\n cleanupAudio();\r\n }\r\n };\r\n\r\n const disconnect = useCallback(() => {\r\n callStartTimeRef.current = null;\r\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\r\n setCallDuration(0);\r\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\r\n cleanupAudio();\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n }, [cleanupAudio]);\r\n\r\n useEffect(() => {\r\n connect();\r\n return () => disconnect();\r\n }, []);\r\n\r\n const toggleMute = () => {\r\n setIsMuted(!isMuted);\r\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }}>\r\n <div style={{ position: 'relative' }}>\r\n {connectionState === ConnectionState.CONNECTED && isSpeaking && (\r\n <>\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.2)', transform: `scale(${1 + speakingIntensity * 0.3})`, animation: 'vox-ping 1s infinite' }} />\r\n <div style={{ position: 'absolute', inset: 0, borderRadius: '50%', border: '1px solid rgba(255,255,255,0.1)', transform: `scale(${1 + speakingIntensity * 0.5})`, transition: 'transform 0.1s ease-out' }} />\r\n </>\r\n )}\r\n <div style={{\r\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px rgba(255,255,255,${0.15 + speakingIntensity * 0.25})` : 'none',\r\n transform: isSpeaking ? `scale(${1 + speakingIntensity * 0.08})` : 'scale(1)', transition: 'all 0.3s'\r\n }}>\r\n {connectionState === ConnectionState.CONNECTING ? (\r\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon size={40} />}\r\n </div>\r\n )}\r\n </div>\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\r\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: isSpeaking ? 1 : 0.75, animation: isSpeaking ? 'vox-ping 1s infinite' : 'none' }} />\r\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\r\n <p style={{ textAlign: 'center', fontSize: '10px', fontWeight: 900, color: '#71717a', textTransform: 'uppercase', letterSpacing: '0.2em', height: '20px' }}>\r\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\r\n {connectionState === ConnectionState.CONNECTED && (isSpeaking ? 'Agent Speaking...' : isMuted ? 'Signal Muted' : 'Listening...')}\r\n {connectionState === ConnectionState.ERROR && 'Connection Error'}\r\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\r\n </p>\r\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\r\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\r\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\r\n </p>\r\n )}\r\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\r\n </div>\r\n\r\n {connectionState === ConnectionState.ERROR && (\r\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.1em', padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46' }}>\r\n <AlertCircleIcon />\r\n <span style={{ marginLeft: '12px' }}>{errorMsg}</span>\r\n </div>\r\n )}\r\n\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\r\n padding: '12px 24px', border: '1px solid #3f3f46', background: '#000000', color: '#71717a', cursor: 'pointer',\r\n fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.1em', display: 'flex', alignItems: 'center', gap: '8px'\r\n }}>\r\n <PhoneOffIcon />\r\n End Call\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n\r\n// Main VoxChat Component\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n geminiApiKey,\r\n apiUrl = 'https://your-server.com',\r\n agentName: propAgentName = 'VOX-01',\r\n voiceName: propVoiceName = 'Kore',\r\n systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 56,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n useServerConfig = false\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\r\n const [isVoiceActive, setIsVoiceActive] = useState(false);\r\n \r\n // Server config state\r\n const [serverConfig, setServerConfig] = useState<{\r\n name?: string;\r\n systemInstruction?: string;\r\n voiceName?: string;\r\n } | null>(null);\r\n const [configLoaded, setConfigLoaded] = useState(!useServerConfig);\r\n\r\n // Fetch config from server if useServerConfig is true\r\n useEffect(() => {\r\n if (useServerConfig && apiKey && apiUrl) {\r\n fetch(`${apiUrl}/api/v1/config`, {\r\n headers: { 'x-api-key': apiKey }\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n if (data.agentConfig) {\r\n setServerConfig(data.agentConfig);\r\n }\r\n setConfigLoaded(true);\r\n })\r\n .catch(err => {\r\n console.error('[VOX] Failed to fetch server config:', err);\r\n setConfigLoaded(true);\r\n });\r\n }\r\n }, [useServerConfig, apiKey, apiUrl]);\r\n\r\n // Use server config if available, otherwise use props\r\n const agentName = serverConfig?.name || propAgentName;\r\n const voiceName = serverConfig?.voiceName || propVoiceName;\r\n const systemInstruction = serverConfig?.systemInstruction || propSystemInstruction;\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\r\n\r\n const handleTabChange = (tab: 'text' | 'voice') => {\r\n if (tab === 'voice' && activeTab !== 'voice') {\r\n setActiveTab('voice');\r\n setIsVoiceActive(true);\r\n } else if (tab === 'text') {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n }\r\n };\r\n\r\n const handleEndCall = () => {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\r\n // Button colors based on theme\r\n const btnBg = buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\r\n const btnIcon = iconColor || (theme === 'light' ? '#ffffff' : '#000000');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\r\n @keyframes vox-spin { to { transform: rotate(360deg); } }\r\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\r\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\r\n `}</style>\r\n\r\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: position === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }}>\r\n {isOpen && (\r\n <div className=\"vox-widget\" style={{\r\n width: 'min(calc(100vw - 32px), 400px)', height: 'min(calc(100vh - 100px), 640px)', maxHeight: '640px',\r\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: '1px solid #3f3f46', boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: '#000000', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46' }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: '1px solid #52525b', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff' }}>\r\n <MessageCircleIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: '#ffffff', fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: '#a1a1aa', fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: '#ffffff', borderRadius: '50%', marginRight: '8px' }} />\r\n Active\r\n </p>\r\n </div>\r\n </div>\r\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: '#18181b', borderBottom: '1px solid #3f3f46', flexShrink: 0 }}>\r\n <button onClick={() => handleTabChange('text')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: '#3f3f46' }} />\r\n <button onClick={() => handleTabChange('voice')} style={{\r\n flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',\r\n background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'color 0.2s'\r\n }}>\r\n Voice Protocol\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n ) : (\r\n isVoiceActive ? (\r\n <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\r\n ) : (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toggle Button - only show when widget is closed */}\r\n {!isOpen && (\r\n <button onClick={handleOpen} style={{\r\n width: `${buttonSize}px`, height: `${buttonSize}px`, borderRadius: `${borderRadius}%`,\r\n background: btnBg, color: btnIcon, border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', transition: 'transform 0.2s'\r\n }}>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs","useRef","useEffect","useState","useCallback","_Fragment"],"mappings":"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"}
|