vox-ai-react 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -2
- package/dist/index.esm.js +429 -201
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +428 -200
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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 } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light' | 'auto';\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 onMessage?: (message: string, role: 'user' | 'assistant') => void;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n timestamp: Date;\r\n}\r\n\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n apiUrl = 'https://api.vox.ai',\r\n agentName = 'VOX-01',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 48,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n onMessage,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n // Determine actual theme\r\n const actualTheme = theme === 'auto' \r\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\r\n : theme;\r\n\r\n // Default colors based on theme\r\n const defaultButtonColor = actualTheme === 'dark' ? '#000000' : '#ffffff';\r\n const defaultIconColor = actualTheme === 'dark' ? '#ffffff' : '#000000';\r\n const finalButtonColor = buttonColor || defaultButtonColor;\r\n const finalIconColor = iconColor || defaultIconColor;\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n // Add welcome message\r\n setMessages([{\r\n id: 'welcome',\r\n role: 'assistant',\r\n text: `Hello! I'm ${agentName}. How can I help you today?`,\r\n timestamp: new Date()\r\n }]);\r\n }, [agentName]);\r\n\r\n const handleOpen = () => {\r\n setIsOpen(true);\r\n onOpen?.();\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n onClose?.();\r\n };\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 userMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n text: input,\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, userMessage]);\r\n onMessage?.(input, 'user');\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`\r\n },\r\n body: JSON.stringify({\r\n message: userMessage.text,\r\n history: messages.map(m => ({ role: m.role, content: m.text }))\r\n })\r\n });\r\n\r\n const data = await response.json();\r\n \r\n const assistantMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: data.response || 'Sorry, I encountered an error.',\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, assistantMessage]);\r\n onMessage?.(assistantMessage.text, 'assistant');\r\n } catch (error) {\r\n const errorMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: 'Sorry, I encountered an error. Please try again.',\r\n timestamp: new Date()\r\n };\r\n setMessages(prev => [...prev, errorMessage]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { left: '16px' } \r\n : { right: '16px' };\r\n\r\n const colors = actualTheme === 'dark' ? {\r\n bg: '#000000',\r\n bgSecondary: '#18181b',\r\n border: '#27272a',\r\n text: '#ffffff',\r\n textSecondary: '#a1a1aa',\r\n userBubble: '#27272a',\r\n assistantBubble: '#000000',\r\n } : {\r\n bg: '#ffffff',\r\n bgSecondary: '#f4f4f5',\r\n border: '#e4e4e7',\r\n text: '#000000',\r\n textSecondary: '#71717a',\r\n userBubble: '#f4f4f5',\r\n assistantBubble: '#ffffff',\r\n };\r\n\r\n return (\r\n <>\r\n {/* Chat Window */}\r\n {isOpen && (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: '80px',\r\n ...positionStyles,\r\n width: '380px',\r\n maxWidth: 'calc(100vw - 32px)',\r\n height: '500px',\r\n maxHeight: 'calc(100vh - 120px)',\r\n backgroundColor: colors.bg,\r\n border: `1px solid ${colors.border}`,\r\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n zIndex: 9999,\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n style={{\r\n padding: '16px',\r\n borderBottom: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <div>\r\n <div style={{ \r\n fontSize: '10px', \r\n fontWeight: 900, \r\n color: colors.text,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em'\r\n }}>\r\n {agentName}\r\n </div>\r\n <div style={{ \r\n fontSize: '9px', \r\n color: colors.textSecondary,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px'\r\n }}>\r\n <span style={{\r\n width: '6px',\r\n height: '6px',\r\n backgroundColor: '#22c55e',\r\n borderRadius: '50%'\r\n }}></span>\r\n Online\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleClose}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n color: colors.textSecondary,\r\n cursor: 'pointer',\r\n padding: '4px',\r\n }}\r\n >\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 </button>\r\n </div>\r\n\r\n {/* Messages */}\r\n <div\r\n ref={scrollRef}\r\n style={{\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n }}\r\n >\r\n {messages.map((msg) => (\r\n <div\r\n key={msg.id}\r\n style={{\r\n display: 'flex',\r\n justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start',\r\n }}\r\n >\r\n <div\r\n style={{\r\n maxWidth: '80%',\r\n padding: '10px 14px',\r\n backgroundColor: msg.role === 'user' ? colors.userBubble : colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {msg.text}\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div\r\n style={{\r\n padding: '10px 14px',\r\n backgroundColor: colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.textSecondary,\r\n fontSize: '13px',\r\n }}\r\n >\r\n Typing...\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Input */}\r\n <form\r\n onSubmit={handleSend}\r\n style={{\r\n padding: '16px',\r\n borderTop: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n gap: '8px',\r\n }}\r\n >\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"Type a message...\"\r\n style={{\r\n flex: 1,\r\n padding: '10px 14px',\r\n backgroundColor: colors.bgSecondary,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n outline: 'none',\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '10px 16px',\r\n backgroundColor: colors.text,\r\n color: colors.bg,\r\n border: 'none',\r\n fontSize: '11px',\r\n fontWeight: 700,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n cursor: input.trim() && !isLoading ? 'pointer' : 'not-allowed',\r\n opacity: input.trim() && !isLoading ? 1 : 0.5,\r\n }}\r\n >\r\n Send\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n\r\n {/* Launcher Button */}\r\n {!isOpen && (\r\n <button\r\n onClick={handleOpen}\r\n style={{\r\n position: 'fixed',\r\n bottom: '16px',\r\n ...positionStyles,\r\n width: `${buttonSize}px`,\r\n height: `${buttonSize}px`,\r\n backgroundColor: finalButtonColor,\r\n borderRadius: `${borderRadius}px`,\r\n border: 'none',\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 9999,\r\n transition: 'transform 0.2s, box-shadow 0.2s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.2)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';\r\n }}\r\n >\r\n <svg\r\n width={buttonSize * 0.4}\r\n height={buttonSize * 0.4}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke={finalIconColor}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsxs","_Fragment","_jsx"],"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 userMsg: Message = { id: Date.now().toString(), role: 'user', text: input };\r\n setMessages(prev => [...prev, userMsg]);\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const history = messages.map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\r\n body: JSON.stringify({ message: input, history, systemInstruction })\r\n });\r\n\r\n if (!response.ok) throw new Error('API request failed');\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) {\r\n const errorMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: 'ERROR: 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 const ws = new WebSocket(wsUrl);\r\n sessionRef.current = ws;\r\n\r\n ws.onopen = () => {\r\n // Send setup message\r\n const setupMsg = {\r\n setup: {\r\n model: 'models/gemini-2.5-flash-preview-native-audio-dialog',\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 const data = JSON.parse(event.data);\r\n \r\n if (data.setupComplete) {\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 = () => setConnectionState(ConnectionState.DISCONNECTED);\r\n ws.onerror = () => {\r\n setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg('Connection lost. Please try again.');\r\n cleanupAudio();\r\n };\r\n\r\n } catch (err: any) {\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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"}
|