vox-ai-react 1.0.8 → 1.0.9
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.esm.js +2 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -482,12 +482,12 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
482
482
|
}, children: "Text Interface" }), jsx("div", { style: { width: '1px', background: borderColor } }), jsx("button", { onClick: () => handleTabChange('voice'), style: {
|
|
483
483
|
flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',
|
|
484
484
|
background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? textColor : mutedColor
|
|
485
|
-
}, children: "Voice Protocol" })] }), jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: bgColor }, children: activeTab === 'text' ? (jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, theme: widgetTheme })) : (isVoiceActive && jsx(VoiceInterface, { geminiApiKey: geminiApiKey, voiceName: voiceName, systemInstruction: systemInstruction, theme: widgetTheme, onEndCall: () => setIsVoiceActive(false) })) })] })), jsx("button", { onClick:
|
|
485
|
+
}, children: "Voice Protocol" })] }), jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: bgColor }, children: activeTab === 'text' ? (jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, theme: widgetTheme })) : (isVoiceActive && jsx(VoiceInterface, { geminiApiKey: geminiApiKey, voiceName: voiceName, systemInstruction: systemInstruction, theme: widgetTheme, onEndCall: () => setIsVoiceActive(false) })) })] })), !isOpen && (jsx("button", { onClick: handleOpen, style: {
|
|
486
486
|
width: `${buttonSize}px`, height: `${buttonSize}px`, borderRadius: `${borderRadius}%`,
|
|
487
487
|
background: btnBg, color: btnIcon, border: 'none', cursor: 'pointer',
|
|
488
488
|
display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
489
489
|
boxShadow: '0 4px 20px rgba(0,0,0,0.3)', transition: 'transform 0.2s'
|
|
490
|
-
}, children:
|
|
490
|
+
}, children: jsx(MessageIcon, {}) }))] })] }));
|
|
491
491
|
};
|
|
492
492
|
|
|
493
493
|
export { VoxChat, VoxChat as default };
|
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(\r\n arrayBuffer: ArrayBuffer,\r\n ctx: AudioContext,\r\n sampleRate: number,\r\n numChannels: number\r\n): 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 const sample = dataView.getInt16(i * 2, true);\r\n channelData[i] = sample / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons\r\nconst MessageIcon = () => (\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);\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\">\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\">\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\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n);\r\n\r\nconst SendIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\r\n <path d=\"M22 2 11 13\" />\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\">\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\">\r\n <path d=\"M12 8V4H8\" />\r\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\r\n <path d=\"M2 14h2\" />\r\n <path d=\"M20 14h2\" />\r\n <path d=\"M15 13v2\" />\r\n <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\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\r\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst LoaderIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"vox-spin\">\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <path d=\"M12 9v4\" />\r\n <path d=\"M12 17h.01\" />\r\n </svg>\r\n);\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean; theme: 'dark' | 'light' }> = ({ analyser, isActive, theme }) => {\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 = theme === 'light' ? '#a1a1aa' : '#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 = theme === 'light' ? '#000000' : '#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 () => {\r\n if (animationRef.current) cancelAnimationFrame(animationRef.current);\r\n };\r\n }, [analyser, isActive, theme]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} className=\"vox-visualizer\" />;\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 theme: 'dark' | 'light';\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, theme }) => {\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; // Capture before clearing\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 // Filter out welcome message and ensure history starts with user\r\n const history = messages\r\n .filter(m => m.id !== 'welcome')\r\n .map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n \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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = theme === 'light' ? '#71717a' : '#a1a1aa';\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: bgColor }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\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 width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${msg.role === 'user' ? textColor : borderColor}`,\r\n background: msg.role === 'user' ? textColor : 'transparent', color: msg.role === 'user' ? bgColor : textColor\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 ${borderColor}`, background: msg.role === 'user' ? (theme === 'light' ? '#f4f4f5' : '#27272a') : bgColor,\r\n color: msg.role === 'user' ? textColor : mutedColor\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: 'center', gap: '12px' }}>\r\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: `1px solid ${borderColor}`, color: textColor, opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: `1px solid ${borderColor}`, background: bgColor, color: mutedColor }}>\r\n <LoaderIcon />\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 ${borderColor}`, background: bgColor, color: textColor,\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: textColor, color: bgColor, 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 theme: 'dark' | 'light';\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, theme, 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) {\r\n cancelAnimationFrame(speakingAnimationRef.current);\r\n speakingAnimationRef.current = null;\r\n }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n\r\n if (streamRef.current) {\r\n streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; });\r\n streamRef.current = null;\r\n }\r\n\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\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\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 // Connect to Gemini Live API via WebSocket\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 // Send setup message\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 // Handle both text and blob responses\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try {\r\n data = JSON.parse(text);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON blob received');\r\n return;\r\n }\r\n } else {\r\n try {\r\n data = JSON.parse(event.data);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON message received');\r\n return;\r\n }\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 // Setup audio input pipeline\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 // Handle audio output\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\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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\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 <div style={{\r\n position: 'absolute', inset: 0, borderRadius: '50%', border: `1px solid ${textColor}`,\r\n transform: `scale(${1 + speakingIntensity * 0.3})`, opacity: 0.2, animation: 'vox-ping 1s infinite'\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 ? textColor : borderColor}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px ${theme === 'light' ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.15)'}` : '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 ${textColor}`, borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? mutedColor : textColor }}>\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', width: '12px', height: '12px', borderRadius: '50%', background: textColor }} />\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: mutedColor, 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: textColor }}>\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} theme={theme} />\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: mutedColor, background: theme === 'light' ? '#f4f4f5' : '#18181b', border: `1px solid ${borderColor}` }}>\r\n <AlertIcon />\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 ${borderColor}`, background: bgColor, color: mutedColor, 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 // Invert theme for widget (black in light mode, white in dark mode)\r\n const widgetTheme = theme === 'light' ? 'dark' : 'light';\r\n const bgColor = widgetTheme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = widgetTheme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = widgetTheme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); 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 positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\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 .vox-spin { animation: vox-spin 1s linear infinite; }\r\n .vox-visualizer { width: 100%; height: 50px; background: transparent; }\r\n .vox-scrollbar::-webkit-scrollbar { display: none; }\r\n .vox-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }\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)',\r\n background: bgColor, overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: `1px solid ${borderColor}`, boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: bgColor, display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 24px', flexShrink: 0, borderBottom: `1px solid ${borderColor}` }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: `1px solid ${borderColor}`, display: 'flex', alignItems: 'center', justifyContent: 'center', color: textColor }}>\r\n <MicIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: textColor, fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: mutedColor, fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: textColor, 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: mutedColor, cursor: 'pointer', padding: '4px' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: widgetTheme === 'light' ? '#f4f4f5' : '#09090b', borderBottom: `1px solid ${borderColor}`, 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' ? textColor : mutedColor\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: borderColor }} />\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' ? textColor : mutedColor\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: bgColor }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} theme={widgetTheme} />\r\n ) : (\r\n isVoiceActive && <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} theme={widgetTheme} onEndCall={() => setIsVoiceActive(false)} />\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toggle Button */}\r\n <button onClick={isOpen ? handleClose : 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 {isOpen ? <XIcon /> : <MessageIcon />}\r\n </button>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs"],"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}\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(\r\n arrayBuffer: ArrayBuffer,\r\n ctx: AudioContext,\r\n sampleRate: number,\r\n numChannels: number\r\n): 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 const sample = dataView.getInt16(i * 2, true);\r\n channelData[i] = sample / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons\r\nconst MessageIcon = () => (\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);\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\">\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\">\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\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n);\r\n\r\nconst SendIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\r\n <path d=\"M22 2 11 13\" />\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\">\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\">\r\n <path d=\"M12 8V4H8\" />\r\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\r\n <path d=\"M2 14h2\" />\r\n <path d=\"M20 14h2\" />\r\n <path d=\"M15 13v2\" />\r\n <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\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\r\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst LoaderIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"vox-spin\">\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <path d=\"M12 9v4\" />\r\n <path d=\"M12 17h.01\" />\r\n </svg>\r\n);\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean; theme: 'dark' | 'light' }> = ({ analyser, isActive, theme }) => {\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 = theme === 'light' ? '#a1a1aa' : '#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 = theme === 'light' ? '#000000' : '#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 () => {\r\n if (animationRef.current) cancelAnimationFrame(animationRef.current);\r\n };\r\n }, [analyser, isActive, theme]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} className=\"vox-visualizer\" />;\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 theme: 'dark' | 'light';\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, theme }) => {\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; // Capture before clearing\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 // Filter out welcome message and ensure history starts with user\r\n const history = messages\r\n .filter(m => m.id !== 'welcome')\r\n .map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n \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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = theme === 'light' ? '#71717a' : '#a1a1aa';\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: bgColor }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\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 width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${msg.role === 'user' ? textColor : borderColor}`,\r\n background: msg.role === 'user' ? textColor : 'transparent', color: msg.role === 'user' ? bgColor : textColor\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 ${borderColor}`, background: msg.role === 'user' ? (theme === 'light' ? '#f4f4f5' : '#27272a') : bgColor,\r\n color: msg.role === 'user' ? textColor : mutedColor\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: 'center', gap: '12px' }}>\r\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: `1px solid ${borderColor}`, color: textColor, opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: `1px solid ${borderColor}`, background: bgColor, color: mutedColor }}>\r\n <LoaderIcon />\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 ${borderColor}`, background: bgColor, color: textColor,\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: textColor, color: bgColor, 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 theme: 'dark' | 'light';\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, theme, 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) {\r\n cancelAnimationFrame(speakingAnimationRef.current);\r\n speakingAnimationRef.current = null;\r\n }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n\r\n if (streamRef.current) {\r\n streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; });\r\n streamRef.current = null;\r\n }\r\n\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\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\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 // Connect to Gemini Live API via WebSocket\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 // Send setup message\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 // Handle both text and blob responses\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try {\r\n data = JSON.parse(text);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON blob received');\r\n return;\r\n }\r\n } else {\r\n try {\r\n data = JSON.parse(event.data);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON message received');\r\n return;\r\n }\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 // Setup audio input pipeline\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 // Handle audio output\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\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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\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 <div style={{\r\n position: 'absolute', inset: 0, borderRadius: '50%', border: `1px solid ${textColor}`,\r\n transform: `scale(${1 + speakingIntensity * 0.3})`, opacity: 0.2, animation: 'vox-ping 1s infinite'\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 ? textColor : borderColor}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px ${theme === 'light' ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.15)'}` : '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 ${textColor}`, borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? mutedColor : textColor }}>\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', width: '12px', height: '12px', borderRadius: '50%', background: textColor }} />\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: mutedColor, 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: textColor }}>\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} theme={theme} />\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: mutedColor, background: theme === 'light' ? '#f4f4f5' : '#18181b', border: `1px solid ${borderColor}` }}>\r\n <AlertIcon />\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 ${borderColor}`, background: bgColor, color: mutedColor, 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 // Invert theme for widget (black in light mode, white in dark mode)\r\n const widgetTheme = theme === 'light' ? 'dark' : 'light';\r\n const bgColor = widgetTheme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = widgetTheme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = widgetTheme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); 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 positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\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 .vox-spin { animation: vox-spin 1s linear infinite; }\r\n .vox-visualizer { width: 100%; height: 50px; background: transparent; }\r\n .vox-scrollbar::-webkit-scrollbar { display: none; }\r\n .vox-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }\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)',\r\n background: bgColor, overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: `1px solid ${borderColor}`, boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: bgColor, display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 24px', flexShrink: 0, borderBottom: `1px solid ${borderColor}` }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: `1px solid ${borderColor}`, display: 'flex', alignItems: 'center', justifyContent: 'center', color: textColor }}>\r\n <MicIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: textColor, fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: mutedColor, fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: textColor, 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: mutedColor, cursor: 'pointer', padding: '4px' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: widgetTheme === 'light' ? '#f4f4f5' : '#09090b', borderBottom: `1px solid ${borderColor}`, 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' ? textColor : mutedColor\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: borderColor }} />\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' ? textColor : mutedColor\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: bgColor }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} theme={widgetTheme} />\r\n ) : (\r\n isVoiceActive && <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} theme={widgetTheme} onEndCall={() => setIsVoiceActive(false)} />\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 <MessageIcon />\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"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -486,12 +486,12 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
486
486
|
}, children: "Text Interface" }), jsxRuntime.jsx("div", { style: { width: '1px', background: borderColor } }), jsxRuntime.jsx("button", { onClick: () => handleTabChange('voice'), style: {
|
|
487
487
|
flex: 1, padding: '12px', fontSize: '10px', fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.2em',
|
|
488
488
|
background: 'none', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? textColor : mutedColor
|
|
489
|
-
}, children: "Voice Protocol" })] }), jsxRuntime.jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: bgColor }, children: activeTab === 'text' ? (jsxRuntime.jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, theme: widgetTheme })) : (isVoiceActive && jsxRuntime.jsx(VoiceInterface, { geminiApiKey: geminiApiKey, voiceName: voiceName, systemInstruction: systemInstruction, theme: widgetTheme, onEndCall: () => setIsVoiceActive(false) })) })] })), jsxRuntime.jsx("button", { onClick:
|
|
489
|
+
}, children: "Voice Protocol" })] }), jsxRuntime.jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: bgColor }, children: activeTab === 'text' ? (jsxRuntime.jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, theme: widgetTheme })) : (isVoiceActive && jsxRuntime.jsx(VoiceInterface, { geminiApiKey: geminiApiKey, voiceName: voiceName, systemInstruction: systemInstruction, theme: widgetTheme, onEndCall: () => setIsVoiceActive(false) })) })] })), !isOpen && (jsxRuntime.jsx("button", { onClick: handleOpen, style: {
|
|
490
490
|
width: `${buttonSize}px`, height: `${buttonSize}px`, borderRadius: `${borderRadius}%`,
|
|
491
491
|
background: btnBg, color: btnIcon, border: 'none', cursor: 'pointer',
|
|
492
492
|
display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
493
493
|
boxShadow: '0 4px 20px rgba(0,0,0,0.3)', transition: 'transform 0.2s'
|
|
494
|
-
}, children:
|
|
494
|
+
}, children: jsxRuntime.jsx(MessageIcon, {}) }))] })] }));
|
|
495
495
|
};
|
|
496
496
|
|
|
497
497
|
exports.VoxChat = VoxChat;
|
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(\r\n arrayBuffer: ArrayBuffer,\r\n ctx: AudioContext,\r\n sampleRate: number,\r\n numChannels: number\r\n): 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 const sample = dataView.getInt16(i * 2, true);\r\n channelData[i] = sample / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons\r\nconst MessageIcon = () => (\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);\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\">\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\">\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\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n);\r\n\r\nconst SendIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\r\n <path d=\"M22 2 11 13\" />\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\">\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\">\r\n <path d=\"M12 8V4H8\" />\r\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\r\n <path d=\"M2 14h2\" />\r\n <path d=\"M20 14h2\" />\r\n <path d=\"M15 13v2\" />\r\n <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\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\r\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst LoaderIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"vox-spin\">\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <path d=\"M12 9v4\" />\r\n <path d=\"M12 17h.01\" />\r\n </svg>\r\n);\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean; theme: 'dark' | 'light' }> = ({ analyser, isActive, theme }) => {\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 = theme === 'light' ? '#a1a1aa' : '#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 = theme === 'light' ? '#000000' : '#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 () => {\r\n if (animationRef.current) cancelAnimationFrame(animationRef.current);\r\n };\r\n }, [analyser, isActive, theme]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} className=\"vox-visualizer\" />;\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 theme: 'dark' | 'light';\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, theme }) => {\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; // Capture before clearing\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 // Filter out welcome message and ensure history starts with user\r\n const history = messages\r\n .filter(m => m.id !== 'welcome')\r\n .map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n \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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = theme === 'light' ? '#71717a' : '#a1a1aa';\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: bgColor }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\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 width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${msg.role === 'user' ? textColor : borderColor}`,\r\n background: msg.role === 'user' ? textColor : 'transparent', color: msg.role === 'user' ? bgColor : textColor\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 ${borderColor}`, background: msg.role === 'user' ? (theme === 'light' ? '#f4f4f5' : '#27272a') : bgColor,\r\n color: msg.role === 'user' ? textColor : mutedColor\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: 'center', gap: '12px' }}>\r\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: `1px solid ${borderColor}`, color: textColor, opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: `1px solid ${borderColor}`, background: bgColor, color: mutedColor }}>\r\n <LoaderIcon />\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 ${borderColor}`, background: bgColor, color: textColor,\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: textColor, color: bgColor, 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 theme: 'dark' | 'light';\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, theme, 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) {\r\n cancelAnimationFrame(speakingAnimationRef.current);\r\n speakingAnimationRef.current = null;\r\n }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n\r\n if (streamRef.current) {\r\n streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; });\r\n streamRef.current = null;\r\n }\r\n\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\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\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 // Connect to Gemini Live API via WebSocket\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 // Send setup message\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 // Handle both text and blob responses\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try {\r\n data = JSON.parse(text);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON blob received');\r\n return;\r\n }\r\n } else {\r\n try {\r\n data = JSON.parse(event.data);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON message received');\r\n return;\r\n }\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 // Setup audio input pipeline\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 // Handle audio output\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\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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\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 <div style={{\r\n position: 'absolute', inset: 0, borderRadius: '50%', border: `1px solid ${textColor}`,\r\n transform: `scale(${1 + speakingIntensity * 0.3})`, opacity: 0.2, animation: 'vox-ping 1s infinite'\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 ? textColor : borderColor}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px ${theme === 'light' ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.15)'}` : '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 ${textColor}`, borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? mutedColor : textColor }}>\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', width: '12px', height: '12px', borderRadius: '50%', background: textColor }} />\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: mutedColor, 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: textColor }}>\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} theme={theme} />\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: mutedColor, background: theme === 'light' ? '#f4f4f5' : '#18181b', border: `1px solid ${borderColor}` }}>\r\n <AlertIcon />\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 ${borderColor}`, background: bgColor, color: mutedColor, 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 // Invert theme for widget (black in light mode, white in dark mode)\r\n const widgetTheme = theme === 'light' ? 'dark' : 'light';\r\n const bgColor = widgetTheme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = widgetTheme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = widgetTheme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); 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 positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\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 .vox-spin { animation: vox-spin 1s linear infinite; }\r\n .vox-visualizer { width: 100%; height: 50px; background: transparent; }\r\n .vox-scrollbar::-webkit-scrollbar { display: none; }\r\n .vox-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }\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)',\r\n background: bgColor, overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: `1px solid ${borderColor}`, boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: bgColor, display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 24px', flexShrink: 0, borderBottom: `1px solid ${borderColor}` }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: `1px solid ${borderColor}`, display: 'flex', alignItems: 'center', justifyContent: 'center', color: textColor }}>\r\n <MicIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: textColor, fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: mutedColor, fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: textColor, 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: mutedColor, cursor: 'pointer', padding: '4px' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: widgetTheme === 'light' ? '#f4f4f5' : '#09090b', borderBottom: `1px solid ${borderColor}`, 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' ? textColor : mutedColor\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: borderColor }} />\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' ? textColor : mutedColor\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: bgColor }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} theme={widgetTheme} />\r\n ) : (\r\n isVoiceActive && <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} theme={widgetTheme} onEndCall={() => setIsVoiceActive(false)} />\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toggle Button */}\r\n <button onClick={isOpen ? handleClose : 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 {isOpen ? <XIcon /> : <MessageIcon />}\r\n </button>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs","useRef","useEffect","useState","useCallback"],"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}\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(\r\n arrayBuffer: ArrayBuffer,\r\n ctx: AudioContext,\r\n sampleRate: number,\r\n numChannels: number\r\n): 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 const sample = dataView.getInt16(i * 2, true);\r\n channelData[i] = sample / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons\r\nconst MessageIcon = () => (\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);\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\">\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\">\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\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n);\r\n\r\nconst SendIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\r\n <path d=\"M22 2 11 13\" />\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\">\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\">\r\n <path d=\"M12 8V4H8\" />\r\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\r\n <path d=\"M2 14h2\" />\r\n <path d=\"M20 14h2\" />\r\n <path d=\"M15 13v2\" />\r\n <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\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\r\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst LoaderIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"vox-spin\">\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <path d=\"M12 9v4\" />\r\n <path d=\"M12 17h.01\" />\r\n </svg>\r\n);\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean; theme: 'dark' | 'light' }> = ({ analyser, isActive, theme }) => {\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 = theme === 'light' ? '#a1a1aa' : '#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 = theme === 'light' ? '#000000' : '#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 () => {\r\n if (animationRef.current) cancelAnimationFrame(animationRef.current);\r\n };\r\n }, [analyser, isActive, theme]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} className=\"vox-visualizer\" />;\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 theme: 'dark' | 'light';\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, theme }) => {\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; // Capture before clearing\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 // Filter out welcome message and ensure history starts with user\r\n const history = messages\r\n .filter(m => m.id !== 'welcome')\r\n .map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n \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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = theme === 'light' ? '#71717a' : '#a1a1aa';\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: bgColor }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '24px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\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 width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${msg.role === 'user' ? textColor : borderColor}`,\r\n background: msg.role === 'user' ? textColor : 'transparent', color: msg.role === 'user' ? bgColor : textColor\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 ${borderColor}`, background: msg.role === 'user' ? (theme === 'light' ? '#f4f4f5' : '#27272a') : bgColor,\r\n color: msg.role === 'user' ? textColor : mutedColor\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: 'center', gap: '12px' }}>\r\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', border: `1px solid ${borderColor}`, color: textColor, opacity: 0.2 }}>\r\n <BotIcon />\r\n </div>\r\n <div style={{ padding: '16px 24px', border: `1px solid ${borderColor}`, background: bgColor, color: mutedColor }}>\r\n <LoaderIcon />\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 ${borderColor}`, background: bgColor, color: textColor,\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: textColor, color: bgColor, 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 theme: 'dark' | 'light';\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, theme, 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) {\r\n cancelAnimationFrame(speakingAnimationRef.current);\r\n speakingAnimationRef.current = null;\r\n }\r\n setIsSpeaking(false);\r\n setSpeakingIntensity(0);\r\n\r\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n\r\n if (streamRef.current) {\r\n streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; });\r\n streamRef.current = null;\r\n }\r\n\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\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\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 // Connect to Gemini Live API via WebSocket\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 // Send setup message\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 // Handle both text and blob responses\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try {\r\n data = JSON.parse(text);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON blob received');\r\n return;\r\n }\r\n } else {\r\n try {\r\n data = JSON.parse(event.data);\r\n } catch (e) {\r\n console.log('[VOX] Non-JSON message received');\r\n return;\r\n }\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 // Setup audio input pipeline\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 // Handle audio output\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\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 const bgColor = theme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = theme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = theme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\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 <div style={{\r\n position: 'absolute', inset: 0, borderRadius: '50%', border: `1px solid ${textColor}`,\r\n transform: `scale(${1 + speakingIntensity * 0.3})`, opacity: 0.2, animation: 'vox-ping 1s infinite'\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 ? textColor : borderColor}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? `0 0 ${30 + speakingIntensity * 40}px ${theme === 'light' ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.15)'}` : '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 ${textColor}`, borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? mutedColor : textColor }}>\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', width: '12px', height: '12px', borderRadius: '50%', background: textColor }} />\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: mutedColor, 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: textColor }}>\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} theme={theme} />\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: mutedColor, background: theme === 'light' ? '#f4f4f5' : '#18181b', border: `1px solid ${borderColor}` }}>\r\n <AlertIcon />\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 ${borderColor}`, background: bgColor, color: mutedColor, 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 // Invert theme for widget (black in light mode, white in dark mode)\r\n const widgetTheme = theme === 'light' ? 'dark' : 'light';\r\n const bgColor = widgetTheme === 'light' ? '#ffffff' : '#000000';\r\n const textColor = widgetTheme === 'light' ? '#000000' : '#ffffff';\r\n const borderColor = widgetTheme === 'light' ? '#a1a1aa' : '#52525b';\r\n const mutedColor = '#71717a';\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); 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 positionStyles = position === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\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 .vox-spin { animation: vox-spin 1s linear infinite; }\r\n .vox-visualizer { width: 100%; height: 50px; background: transparent; }\r\n .vox-scrollbar::-webkit-scrollbar { display: none; }\r\n .vox-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }\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)',\r\n background: bgColor, overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: `1px solid ${borderColor}`, boxShadow: '0 30px 60px -15px rgba(0,0,0,0.5)'\r\n }}>\r\n {/* Header */}\r\n <div style={{ height: '56px', background: bgColor, display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 24px', flexShrink: 0, borderBottom: `1px solid ${borderColor}` }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{ width: '32px', height: '32px', border: `1px solid ${borderColor}`, display: 'flex', alignItems: 'center', justifyContent: 'center', color: textColor }}>\r\n <MicIcon />\r\n </div>\r\n <div>\r\n <h2 style={{ color: textColor, fontWeight: 900, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.2em', margin: 0 }}>{agentName}</h2>\r\n <p style={{ color: mutedColor, fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', margin: 0, display: 'flex', alignItems: 'center' }}>\r\n <span style={{ width: '4px', height: '4px', background: textColor, 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: mutedColor, cursor: 'pointer', padding: '4px' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div style={{ display: 'flex', padding: '4px', background: widgetTheme === 'light' ? '#f4f4f5' : '#09090b', borderBottom: `1px solid ${borderColor}`, 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' ? textColor : mutedColor\r\n }}>\r\n Text Interface\r\n </button>\r\n <div style={{ width: '1px', background: borderColor }} />\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' ? textColor : mutedColor\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: bgColor }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} theme={widgetTheme} />\r\n ) : (\r\n isVoiceActive && <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} theme={widgetTheme} onEndCall={() => setIsVoiceActive(false)} />\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 <MessageIcon />\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"],"mappings":"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"}
|