vox-ai-react 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +51 -22
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +51 -22
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
package/dist/index.d.ts
CHANGED
package/dist/index.esm.js
CHANGED
|
@@ -46,7 +46,7 @@ const PhoneOffIcon = () => (jsxs("svg", { width: "20", height: "20", viewBox: "0
|
|
|
46
46
|
const UserIcon = () => (jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }), jsx("circle", { cx: "12", cy: "7", r: "4" })] }));
|
|
47
47
|
const BotIcon = () => (jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("path", { d: "M12 8V4H8" }), jsx("rect", { width: "16", height: "12", x: "4", y: "8", rx: "2" }), jsx("path", { d: "M2 14h2" }), jsx("path", { d: "M20 14h2" }), jsx("path", { d: "M15 13v2" }), jsx("path", { d: "M9 13v2" })] }));
|
|
48
48
|
const SendIcon = () => (jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("path", { d: "m22 2-7 20-4-9-9-4Z" }), jsx("path", { d: "M22 2 11 13" })] }));
|
|
49
|
-
const PlusIcon = () => (jsxs("svg", { width:
|
|
49
|
+
const PlusIcon = ({ size = 20 }) => (jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("path", { d: "M5 12h14" }), jsx("path", { d: "M12 5v14" })] }));
|
|
50
50
|
const Loader2Icon = () => (jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", style: { animation: 'vox-spin 1s linear infinite' }, children: jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }) }));
|
|
51
51
|
const AlertCircleIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("circle", { cx: "12", cy: "12", r: "10" }), jsx("line", { x1: "12", x2: "12", y1: "8", y2: "12" }), jsx("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })] }));
|
|
52
52
|
// Visualizer Component
|
|
@@ -146,24 +146,46 @@ const TextInterface = ({ apiKey, apiUrl, agentName, systemInstruction, logoUrl }
|
|
|
146
146
|
setIsLoading(false);
|
|
147
147
|
}
|
|
148
148
|
};
|
|
149
|
-
return (jsxs("div", { style: {
|
|
149
|
+
return (jsxs("div", { style: {
|
|
150
|
+
display: 'flex', flexDirection: 'column', height: '100%', background: '#000000', fontFamily: '"Plus Jakarta Sans", sans-serif',
|
|
151
|
+
WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale'
|
|
152
|
+
}, children: [jsxs("div", { ref: scrollRef, style: { flex: 1, overflowY: 'auto', padding: '16px', display: 'flex', flexDirection: 'column', gap: '16px' }, children: [messages.map((msg) => (jsx("div", { style: { display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }, children: jsxs("div", { style: { display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '8px', maxWidth: '85%' }, children: [jsx("div", { style: {
|
|
150
153
|
flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
151
154
|
border: msg.role === 'user' ? '1px solid #ffffff' : 'none',
|
|
152
155
|
background: msg.role === 'user' ? '#ffffff' : 'transparent',
|
|
153
156
|
color: msg.role === 'user' ? '#000000' : '#ffffff'
|
|
154
157
|
}, children: msg.role === 'user' ? jsx(UserIcon, {}) : (logoUrl ? jsx("img", { src: logoUrl, alt: agentName, style: { width: '24px', height: '24px', objectFit: 'contain' } }) : jsx(BotIcon, {})) }), jsx("div", { style: {
|
|
155
|
-
padding: '8px 12px', fontSize: '
|
|
158
|
+
padding: '8px 12px', fontSize: '12px', fontWeight: 400, lineHeight: 1.625,
|
|
156
159
|
border: '1px solid', borderRadius: '8px',
|
|
157
160
|
borderColor: msg.role === 'user' ? '#52525b' : '#3f3f46',
|
|
158
161
|
background: msg.role === 'user' ? '#27272a' : '#000000',
|
|
159
162
|
color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'
|
|
160
|
-
}, children: msg.text })] }) }, msg.id))), isLoading && (jsx("div", { style: { display: 'flex', justifyContent: 'flex-start' }, children: jsxs("div", { style: { display: 'flex', alignItems: 'flex-start', gap: '8px' }, children: [jsx("div", { style: { flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }, children: logoUrl ? jsx("img", { src: logoUrl, alt: agentName, style: { width: '24px', height: '24px', objectFit: 'contain' } }) : jsx(BotIcon, {}) }), jsx("div", { style: { padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }, children: jsx(Loader2Icon, {}) })] }) }))] }), jsx("div", { style: { padding: '16px' }, children: jsx("form", { onSubmit: handleSend, children: jsxs("div", { style: {
|
|
161
|
-
width: '100%', cursor: 'text', overflow: 'clip',
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
163
|
+
}, children: msg.text })] }) }, msg.id))), isLoading && (jsx("div", { style: { display: 'flex', justifyContent: 'flex-start' }, children: jsxs("div", { style: { display: 'flex', alignItems: 'flex-start', gap: '8px' }, children: [jsx("div", { style: { flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }, children: logoUrl ? jsx("img", { src: logoUrl, alt: agentName, style: { width: '24px', height: '24px', objectFit: 'contain' } }) : jsx(BotIcon, {}) }), jsx("div", { style: { padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }, children: jsx(Loader2Icon, {}) })] }) }))] }), jsx("div", { style: { padding: '16px' }, children: jsx("form", { onSubmit: handleSend, style: { width: '100%' }, children: jsxs("div", { style: {
|
|
164
|
+
width: '100%', cursor: 'text', overflow: 'clip', backgroundClip: 'padding-box',
|
|
165
|
+
padding: '6px', boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',
|
|
166
|
+
border: '1px solid #3f3f46', transition: 'border-radius 200ms ease-out',
|
|
167
|
+
borderRadius: '9999px', display: 'grid',
|
|
168
|
+
gridTemplateColumns: 'auto 1fr auto', gridTemplateRows: 'auto 1fr auto',
|
|
169
|
+
gridTemplateAreas: '"header header header" "leading primary trailing" ". footer ."',
|
|
170
|
+
background: 'rgba(0,0,0,0.5)', boxSizing: 'border-box'
|
|
171
|
+
}, children: [jsx("div", { style: { gridArea: 'primary', display: 'flex', minHeight: '32px', alignItems: 'center', overflowX: 'hidden', paddingLeft: '4px', paddingRight: '4px', marginTop: '-6px', marginBottom: '-6px' }, children: jsx("div", { style: { flex: '1 1 0%', overflow: 'auto', maxHeight: '13rem' }, children: jsx("input", { type: "text", placeholder: "Type your message...", value: input, onChange: (e) => setInput(e.target.value), onKeyDown: (e) => { if (e.key === 'Enter' && !e.shiftKey) {
|
|
172
|
+
e.preventDefault();
|
|
173
|
+
handleSend();
|
|
174
|
+
} }, disabled: isLoading, style: {
|
|
175
|
+
width: '100%', minHeight: 0, resize: 'none', border: 'none', padding: 0,
|
|
176
|
+
fontSize: '12px', outline: 'none', background: 'transparent',
|
|
177
|
+
color: '#ffffff', margin: 0, fontFamily: 'inherit', lineHeight: 'normal'
|
|
178
|
+
} }) }) }), jsx("div", { style: { gridArea: 'leading', display: 'flex' }, children: jsx("button", { type: "button", "aria-label": "Add attachments", style: {
|
|
179
|
+
display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
|
|
180
|
+
width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',
|
|
181
|
+
border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',
|
|
182
|
+
transition: 'all 0.15s ease'
|
|
183
|
+
}, children: jsx(PlusIcon, { size: 20 }) }) }), jsx("div", { style: { gridArea: 'trailing', display: 'flex', alignItems: 'center', gap: '4px' }, children: jsxs("div", { style: { marginLeft: 'auto', display: 'flex', alignItems: 'center', gap: '4px' }, children: [jsx("button", { type: "button", "aria-label": "Record audio message", style: {
|
|
184
|
+
display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
|
|
185
|
+
width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',
|
|
186
|
+
border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',
|
|
187
|
+
transition: 'all 0.15s ease'
|
|
188
|
+
}, children: jsx(MicIcon, { size: 16 }) }), input.trim() && (jsx("button", { type: "submit", disabled: isLoading, style: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', border: 'none', background: '#ffffff', color: '#000000', cursor: 'pointer' }, children: jsx(SendIcon, {}) }))] }) })] }) }) })] }));
|
|
167
189
|
};
|
|
168
190
|
// Voice Interface Component
|
|
169
191
|
const VoiceInterface = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {
|
|
@@ -367,7 +389,7 @@ const VoiceInterface = ({ geminiApiKey, voiceName, systemInstruction, onEndCall
|
|
|
367
389
|
if (streamRef.current)
|
|
368
390
|
streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });
|
|
369
391
|
};
|
|
370
|
-
return (jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px'
|
|
392
|
+
return (jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }, children: [jsxs("div", { style: { position: 'relative' }, children: [jsx("div", { style: {
|
|
371
393
|
width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
372
394
|
border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,
|
|
373
395
|
boxShadow: connectionState === ConnectionState.CONNECTED ? '0 0 30px rgba(255,255,255,0.15)' : 'none',
|
|
@@ -388,6 +410,7 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
388
410
|
const [activeTab, setActiveTab] = useState('text');
|
|
389
411
|
const [isVoiceActive, setIsVoiceActive] = useState(false);
|
|
390
412
|
const [serverConfig, setServerConfig] = useState(null);
|
|
413
|
+
const [serverGeminiApiKey, setServerGeminiApiKey] = useState();
|
|
391
414
|
const [configLoaded, setConfigLoaded] = useState(!useServerConfig);
|
|
392
415
|
const [isInitialLoad, setIsInitialLoad] = useState(true);
|
|
393
416
|
const fetchConfig = useCallback(() => {
|
|
@@ -400,6 +423,9 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
400
423
|
if (data.agentConfig) {
|
|
401
424
|
setServerConfig(data.agentConfig);
|
|
402
425
|
}
|
|
426
|
+
if (data.geminiApiKey) {
|
|
427
|
+
setServerGeminiApiKey(data.geminiApiKey);
|
|
428
|
+
}
|
|
403
429
|
setConfigLoaded(true);
|
|
404
430
|
setIsInitialLoad(false);
|
|
405
431
|
})
|
|
@@ -445,25 +471,28 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
445
471
|
const positionStyles = finalPosition === 'bottom-left'
|
|
446
472
|
? { bottom: '16px', left: '16px' }
|
|
447
473
|
: { bottom: '16px', right: '16px' };
|
|
448
|
-
return (jsxs(Fragment, { children: [jsx("link", { href: "https://fonts.googleapis.com/css2?family=
|
|
449
|
-
@keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }
|
|
450
|
-
@keyframes vox-spin { to { transform: rotate(360deg); } }
|
|
451
|
-
@keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }
|
|
452
|
-
.vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
|
474
|
+
return (jsxs(Fragment, { children: [jsx("link", { href: "https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap", rel: "stylesheet" }), jsx("style", { children: `
|
|
475
|
+
@keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }
|
|
476
|
+
@keyframes vox-spin { to { transform: rotate(360deg); } }
|
|
477
|
+
@keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }
|
|
478
|
+
.vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
|
453
479
|
` }), jsxs("div", { style: { position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: finalPosition === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }, children: [isOpen && (jsxs("div", { className: "vox-widget", style: {
|
|
454
480
|
width: 'min(calc(100vw - 32px), 360px)', height: '550px', maxHeight: '550px',
|
|
455
481
|
background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',
|
|
456
|
-
border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '
|
|
457
|
-
transition: 'all 0.3s ease'
|
|
458
|
-
|
|
459
|
-
|
|
482
|
+
border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '8px',
|
|
483
|
+
transition: 'all 0.3s ease',
|
|
484
|
+
fontFamily: '"Plus Jakarta Sans", sans-serif',
|
|
485
|
+
WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale',
|
|
486
|
+
textAlign: 'left', boxSizing: 'border-box'
|
|
487
|
+
}, children: [jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46', background: '#000000', fontFamily: '"Plus Jakarta Sans", sans-serif' }, children: [jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [jsx("div", { style: { width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 0.3s ease', color: '#ffffff' }, children: finalLogoUrl ? (jsx("img", { src: finalLogoUrl, alt: agentName, style: { width: '28px', height: '28px', objectFit: 'contain', transition: 'opacity 0.3s ease' } }, finalLogoUrl)) : (activeTab === 'voice' ? jsx(MicIcon, {}) : jsx(MessageCircleIcon, {})) }), jsxs("div", { children: [jsx("h2", { style: { color: '#ffffff', fontWeight: 600, fontSize: '12px', margin: 0, transition: 'all 0.3s ease', lineHeight: '1.2', fontFamily: 'inherit' }, children: agentName }), jsxs("p", { style: { color: '#a1a1aa', fontSize: '11px', fontWeight: 400, margin: 0, display: 'flex', alignItems: 'center', lineHeight: '1.2', fontFamily: 'inherit' }, children: [jsx("span", { style: { width: '6px', height: '6px', background: '#ffffff', borderRadius: '50%', marginRight: '6px' } }), "Active"] })] })] }), jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '2px', padding: '2px', borderRadius: '8px', background: '#18181b' }, children: [jsx("button", { onClick: () => handleTabChange('text'), style: {
|
|
488
|
+
padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',
|
|
460
489
|
background: activeTab === 'text' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'all 0.2s',
|
|
461
490
|
boxShadow: activeTab === 'text' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'
|
|
462
491
|
}, children: "Text" }), jsx("button", { onClick: () => handleTabChange('voice'), style: {
|
|
463
|
-
padding: '6px 12px', fontSize: '
|
|
492
|
+
padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',
|
|
464
493
|
background: activeTab === 'voice' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'all 0.2s',
|
|
465
494
|
boxShadow: activeTab === 'voice' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'
|
|
466
|
-
}, children: "Voice" })] }), jsx("button", { onClick: handleClose, style: { background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }, children: jsx(XIcon, {}) })] }), jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }, children: activeTab === 'text' ? (jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl })) : (isVoiceActive ? (jsx(VoiceInterface, { geminiApiKey: geminiApiKey, voiceName: voiceName, systemInstruction: systemInstruction, onEndCall: handleEndCall })) : (jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl }))) })] })), !isOpen && (!useServerConfig || configLoaded) && (jsx("button", { onClick: handleOpen, style: {
|
|
495
|
+
}, children: "Voice" })] }), jsx("button", { onClick: handleClose, style: { background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }, children: jsx(XIcon, {}) })] }), jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }, children: activeTab === 'text' ? (jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl })) : (isVoiceActive ? (jsx(VoiceInterface, { geminiApiKey: geminiApiKey || serverGeminiApiKey || '', voiceName: voiceName, systemInstruction: systemInstruction, onEndCall: handleEndCall })) : (jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl }))) })] })), !isOpen && (!useServerConfig || configLoaded) && (jsx("button", { onClick: handleOpen, style: {
|
|
467
496
|
width: `${finalButtonSize}px`, height: `${finalButtonSize}px`,
|
|
468
497
|
borderRadius: `${finalBorderRadius}px`,
|
|
469
498
|
background: finalButtonColor, color: finalIconColor, border: 'none', cursor: 'pointer',
|
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';\n\nexport interface VoxChatProps {\n apiKey: string;\n geminiApiKey: string;\n apiUrl?: string;\n agentName?: string;\n voiceName?: string;\n systemInstruction?: string;\n position?: 'bottom-right' | 'bottom-left';\n theme?: 'dark' | 'light';\n buttonColor?: string;\n buttonSize?: number;\n borderRadius?: number;\n iconColor?: string;\n onOpen?: () => void;\n onClose?: () => void;\n useServerConfig?: boolean;\n configPollInterval?: number;\n}\n\ninterface Message {\n id: string;\n role: 'user' | 'assistant';\n text: string;\n}\n\nenum ConnectionState {\n DISCONNECTED = 'DISCONNECTED',\n CONNECTING = 'CONNECTING',\n CONNECTED = 'CONNECTED',\n ERROR = 'ERROR',\n}\n\n// Audio utilities\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\n const buffer = new ArrayBuffer(inputData.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < inputData.length; i++) {\n const s = Math.max(-1, Math.min(1, inputData[i]));\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\n}\n\nfunction decode(base64: string): ArrayBuffer {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\n const dataView = new DataView(arrayBuffer);\n const numSamples = arrayBuffer.byteLength / 2;\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\n const channelData = audioBuffer.getChannelData(0);\n for (let i = 0; i < numSamples; i++) {\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\n }\n return audioBuffer;\n}\n\n// Icons\nconst MessageCircleIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\n </svg>\n);\n\nconst MicIcon = ({ size = 20 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n);\n\nconst MicOffIcon = ({ size = 20 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n);\n\nconst XIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n);\n\nconst PhoneOffIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\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\" />\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\n </svg>\n);\n\nconst UserIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n);\n\nconst BotIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\n </svg>\n);\n\nconst SendIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m22 2-7 20-4-9-9-4Z\" /><path d=\"M22 2 11 13\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 12h14\" /><path d=\"M12 5v14\" />\n </svg>\n);\n\nconst Loader2Icon = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n);\n\nconst AlertCircleIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\n </svg>\n);\n\n// Visualizer Component\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const animationRef = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const draw = () => {\n const width = canvas.width;\n const height = canvas.height;\n ctx.clearRect(0, 0, width, height);\n\n if (!analyser || !isActive) {\n ctx.strokeStyle = '#3f3f46';\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(0, height / 2);\n ctx.lineTo(width, height / 2);\n ctx.stroke();\n animationRef.current = requestAnimationFrame(draw);\n return;\n }\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n analyser.getByteTimeDomainData(dataArray);\n\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 1;\n ctx.beginPath();\n\n const sliceWidth = width / bufferLength;\n let x = 0;\n\n for (let i = 0; i < bufferLength; i++) {\n const v = dataArray[i] / 128.0;\n const y = (v * height) / 2;\n if (i === 0) ctx.moveTo(x, y);\n else ctx.lineTo(x, y);\n x += sliceWidth;\n }\n\n ctx.lineTo(width, height / 2);\n ctx.stroke();\n animationRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\n }, [analyser, isActive]);\n\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\n};\n\n// Text Interface Component\nconst TextInterface: React.FC<{\n apiKey: string;\n apiUrl: string;\n agentName: string;\n systemInstruction: string;\n logoUrl?: string;\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, logoUrl }) => {\n const [messages, setMessages] = useState<Message[]>([\n { id: 'welcome', role: 'assistant', text: `Hello! I'm ${agentName}. How can I help you today?` }\n ]);\n const [input, setInput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }, [messages]);\n\n const handleSend = async (e?: React.FormEvent) => {\n e?.preventDefault();\n if (!input.trim() || isLoading) return;\n\n const messageText = input;\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\n setMessages(prev => [...prev, userMsg]);\n setInput('');\n setIsLoading(true);\n\n try {\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\n body: JSON.stringify({ message: messageText, history, systemInstruction })\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'API request failed');\n }\n const data = await response.json();\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response || 'Error: No response' };\n setMessages(prev => [...prev, botMsg]);\n } catch (err: any) {\n console.error('VOX Chat Error:', err);\n const errorMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: `Error: ${err.message || 'Connection lost. Please try again.'}` };\n setMessages(prev => [...prev, errorMsg]);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: '#000000', fontFamily: 'Outfit, sans-serif' }}>\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '16px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\n {messages.map((msg) => (\n <div key={msg.id} style={{ display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }}>\n <div style={{ display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '8px', maxWidth: '85%' }}>\n <div style={{\n flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center',\n border: msg.role === 'user' ? '1px solid #ffffff' : 'none',\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\n color: msg.role === 'user' ? '#000000' : '#ffffff'\n }}>\n {msg.role === 'user' ? <UserIcon /> : (\n logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />\n )}\n </div>\n <div style={{\n padding: '8px 12px', fontSize: '14px', fontWeight: 500, lineHeight: 1.6,\n border: '1px solid', borderRadius: '8px',\n borderColor: msg.role === 'user' ? '#52525b' : '#3f3f46',\n background: msg.role === 'user' ? '#27272a' : '#000000',\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\n }}>\n {msg.text}\n </div>\n </div>\n </div>\n ))}\n {isLoading && (\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\n <div style={{ flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }}>\n {logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />}\n </div>\n <div style={{ padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }}>\n <Loader2Icon />\n </div>\n </div>\n </div>\n )}\n </div>\n <div style={{ padding: '16px' }}>\n <form onSubmit={handleSend}>\n <div style={{\n width: '100%', cursor: 'text', overflow: 'clip', padding: '6px', boxShadow: '0 4px 6px -1px rgba(0,0,0,0.1)', border: '1px solid #3f3f46', borderRadius: '9999px',\n display: 'grid', gridTemplateColumns: 'auto 1fr auto', gridTemplateRows: 'auto', gap: '4px', alignItems: 'center', background: 'rgba(0,0,0,0.5)'\n }}>\n <button type=\"button\" style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', outline: 'none', border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a' }}>\n <PlusIcon />\n </button>\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } }}\n placeholder=\"Type your message...\"\n disabled={isLoading}\n style={{ width: '100%', minHeight: '32px', resize: 'none', border: 0, padding: 0, fontSize: '14px', outline: 'none', background: 'transparent', color: '#ffffff' }}\n />\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <button type=\"button\" style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', outline: 'none', border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a' }}>\n <MicIcon size={16} />\n </button>\n {input.trim() && (\n <button type=\"submit\" disabled={isLoading} style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', border: 'none', background: '#ffffff', color: '#000000', cursor: 'pointer' }}>\n <SendIcon />\n </button>\n )}\n </div>\n </div>\n </form>\n </div>\n </div>\n );\n};\n\n// Voice Interface Component\nconst VoiceInterface: React.FC<{\n geminiApiKey: string;\n voiceName: string;\n systemInstruction: string;\n onEndCall?: () => void;\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\n const [errorMsg, setErrorMsg] = useState('');\n const [isMuted, setIsMuted] = useState(false);\n const [callDuration, setCallDuration] = useState(0);\n\n const callStartTimeRef = useRef<number | null>(null);\n const durationIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const inputAudioContextRef = useRef<AudioContext | null>(null);\n const outputAudioContextRef = useRef<AudioContext | null>(null);\n const inputAnalyserRef = useRef<AnalyserNode | null>(null);\n const outputGainRef = useRef<GainNode | null>(null);\n const nextStartTimeRef = useRef<number>(0);\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\n const sessionRef = useRef<WebSocket | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const scriptProcessorRef = useRef<ScriptProcessorNode | null>(null);\n const sourceNodeRef = useRef<MediaStreamAudioSourceNode | null>(null);\n\n const cleanupAudio = useCallback(() => {\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\n sourcesRef.current.clear();\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\n inputAudioContextRef.current = null;\n outputAudioContextRef.current = null;\n inputAnalyserRef.current = null;\n sessionRef.current = null;\n }, []);\n\n const connect = async () => {\n try {\n setConnectionState(ConnectionState.CONNECTING);\n setErrorMsg('');\n\n callStartTimeRef.current = Date.now();\n durationIntervalRef.current = setInterval(() => {\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\n }, 1000);\n\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\n inputAudioContextRef.current = inputCtx;\n outputAudioContextRef.current = outputCtx;\n\n const analyser = inputCtx.createAnalyser();\n analyser.fftSize = 256;\n inputAnalyserRef.current = analyser;\n\n const outputGain = outputCtx.createGain();\n outputGain.gain.value = 1;\n outputGainRef.current = outputGain;\n outputGain.connect(outputCtx.destination);\n\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n streamRef.current = stream;\n\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\n const ws = new WebSocket(wsUrl);\n sessionRef.current = ws;\n\n ws.onopen = () => {\n const setupMsg = {\n setup: {\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\n systemInstruction: { parts: [{ text: systemInstruction }] }\n }\n };\n ws.send(JSON.stringify(setupMsg));\n };\n\n ws.onmessage = async (event) => {\n let data;\n if (event.data instanceof Blob) {\n const text = await event.data.text();\n try { data = JSON.parse(text); } catch (e) { return; }\n } else {\n try { data = JSON.parse(event.data); } catch (e) { return; }\n }\n\n if (data.setupComplete) {\n setConnectionState(ConnectionState.CONNECTED);\n\n const source = inputCtx.createMediaStreamSource(stream);\n sourceNodeRef.current = source;\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\n scriptProcessorRef.current = processor;\n\n processor.onaudioprocess = (e) => {\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\n const inputData = e.inputBuffer.getChannelData(0);\n const pcmBlob = createBlob(inputData);\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\n };\n\n source.connect(analyser);\n source.connect(processor);\n processor.connect(inputCtx.destination);\n }\n\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\n if (audioData) {\n const ctx = outputAudioContextRef.current;\n if (!ctx) return;\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\n const source = ctx.createBufferSource();\n source.buffer = audioBuffer;\n if (outputGainRef.current) source.connect(outputGainRef.current);\n else source.connect(ctx.destination);\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\n source.start(nextStartTimeRef.current);\n nextStartTimeRef.current += audioBuffer.duration;\n sourcesRef.current.add(source);\n }\n\n if (data.serverContent?.interrupted) {\n sourcesRef.current.forEach(s => s.stop());\n sourcesRef.current.clear();\n nextStartTimeRef.current = 0;\n }\n };\n\n ws.onclose = () => setConnectionState(ConnectionState.DISCONNECTED);\n ws.onerror = () => {\n setConnectionState(ConnectionState.ERROR);\n setErrorMsg('Connection failed. Check your Gemini API key.');\n cleanupAudio();\n };\n\n } catch (err: any) {\n setConnectionState(ConnectionState.ERROR);\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\n cleanupAudio();\n }\n };\n\n const disconnect = useCallback(() => {\n callStartTimeRef.current = null;\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\n setCallDuration(0);\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\n cleanupAudio();\n setConnectionState(ConnectionState.DISCONNECTED);\n }, [cleanupAudio]);\n\n useEffect(() => {\n connect();\n return () => disconnect();\n }, []);\n\n const toggleMute = () => {\n setIsMuted(!isMuted);\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px', fontFamily: 'Outfit, sans-serif' }}>\n <div style={{ position: 'relative' }}>\n <div style={{\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\n boxShadow: connectionState === ConnectionState.CONNECTED ? '0 0 30px rgba(255,255,255,0.15)' : 'none',\n transition: 'all 0.3s'\n }}>\n {connectionState === ConnectionState.CONNECTING ? (\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\n ) : (\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\n {isMuted ? <MicOffIcon /> : <MicIcon />}\n </div>\n )}\n </div>\n {connectionState === ConnectionState.CONNECTED && (\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: 0.75 }} />\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\n </span>\n )}\n </div>\n\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\n <p style={{ textAlign: 'center', fontSize: '14px', fontWeight: 600, color: '#71717a', height: '20px' }}>\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\n {connectionState === ConnectionState.CONNECTED && (isMuted ? 'Muted' : 'Listening...')}\n {connectionState === ConnectionState.ERROR && 'Connection error'}\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\n </p>\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\n </p>\n )}\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\n </div>\n\n {connectionState === ConnectionState.ERROR && (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '14px', fontWeight: 600, padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46', borderRadius: '8px', gap: '12px' }}>\n <AlertCircleIcon />\n <span>{errorMsg}</span>\n </div>\n )}\n\n {connectionState === ConnectionState.CONNECTED && (\n <div style={{ display: 'flex', gap: '16px' }}>\n <button onClick={toggleMute} style={{\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\n background: isMuted ? '#27272a' : '#ffffff',\n color: isMuted ? '#71717a' : '#000000'\n }}>\n {isMuted ? <MicOffIcon /> : <MicIcon />}\n </button>\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\n background: '#dc2626', color: '#ffffff'\n }}>\n <PhoneOffIcon />\n </button>\n </div>\n )}\n </div>\n );\n};\n\n// Main VoxChat Component\nexport const VoxChat: React.FC<VoxChatProps> = ({\n apiKey,\n geminiApiKey,\n apiUrl = 'https://your-server.com',\n agentName: propAgentName = 'VOX-01',\n voiceName: propVoiceName = 'Kore',\n systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.',\n position = 'bottom-right',\n theme = 'dark',\n buttonColor,\n buttonSize = 56,\n borderRadius = 0,\n iconColor,\n onOpen,\n onClose,\n useServerConfig = false,\n configPollInterval = 10000\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\n const [isVoiceActive, setIsVoiceActive] = useState(false);\n \n const [serverConfig, setServerConfig] = useState<{\n name?: string;\n systemInstruction?: string;\n voiceName?: string;\n widgetStyle?: {\n buttonColor?: string;\n buttonSize?: number;\n borderRadius?: number;\n position?: 'bottom-right' | 'bottom-left';\n iconColor?: string;\n logoUrl?: string;\n };\n } | null>(null);\n const [configLoaded, setConfigLoaded] = useState(!useServerConfig);\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n\n const fetchConfig = useCallback(() => {\n if (useServerConfig && apiKey && apiUrl) {\n fetch(`${apiUrl}/api/v1/config`, {\n headers: { 'x-api-key': apiKey }\n })\n .then(res => res.json())\n .then(data => {\n if (data.agentConfig) {\n setServerConfig(data.agentConfig);\n }\n setConfigLoaded(true);\n setIsInitialLoad(false);\n })\n .catch(err => {\n console.error('[VOX] Failed to fetch server config:', err);\n setConfigLoaded(true);\n setIsInitialLoad(false);\n });\n }\n }, [useServerConfig, apiKey, apiUrl]);\n\n useEffect(() => {\n if (useServerConfig && apiKey && apiUrl) {\n fetchConfig();\n const intervalId = setInterval(fetchConfig, configPollInterval);\n return () => clearInterval(intervalId);\n }\n }, [useServerConfig, apiKey, apiUrl, fetchConfig, configPollInterval]);\n\n const agentName = serverConfig?.name || propAgentName;\n const voiceName = serverConfig?.voiceName || propVoiceName;\n const systemInstruction = serverConfig?.systemInstruction || propSystemInstruction;\n \n const finalButtonColor = serverConfig?.widgetStyle?.buttonColor || buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\n const finalButtonSize = serverConfig?.widgetStyle?.buttonSize || buttonSize || 56;\n const finalBorderRadius = serverConfig?.widgetStyle?.borderRadius !== undefined ? serverConfig.widgetStyle.borderRadius : (borderRadius !== undefined ? borderRadius : 50);\n const finalPosition = serverConfig?.widgetStyle?.position || position || 'bottom-right';\n const finalIconColor = serverConfig?.widgetStyle?.iconColor || iconColor || (theme === 'light' ? '#ffffff' : '#000000');\n const finalLogoUrl = serverConfig?.widgetStyle?.logoUrl;\n\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\n\n const handleTabChange = (tab: 'text' | 'voice') => {\n if (tab === 'voice' && activeTab !== 'voice') {\n setActiveTab('voice');\n setIsVoiceActive(true);\n } else if (tab === 'text') {\n setIsVoiceActive(false);\n setActiveTab('text');\n }\n };\n\n const handleEndCall = () => {\n setIsVoiceActive(false);\n setActiveTab('text');\n };\n\n const positionStyles = finalPosition === 'bottom-left' \n ? { bottom: '16px', left: '16px' } \n : { bottom: '16px', right: '16px' };\n\n return (\n <>\n <link href=\"https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;900&display=swap\" rel=\"stylesheet\" />\n <style>{`\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\n @keyframes vox-spin { to { transform: rotate(360deg); } }\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\n `}</style>\n\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: finalPosition === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }}>\n {isOpen && (\n <div className=\"vox-widget\" style={{\n width: 'min(calc(100vw - 32px), 360px)', height: '550px', maxHeight: '550px',\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\n border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '12px',\n transition: 'all 0.3s ease'\n }}>\n {/* Combined Header with Tabs */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46', background: '#000000', fontFamily: 'Outfit, sans-serif' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 0.3s ease' }}>\n {finalLogoUrl ? (\n <img key={finalLogoUrl} src={finalLogoUrl} alt={agentName} style={{ width: '28px', height: '28px', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\n ) : (\n activeTab === 'voice' ? <MicIcon /> : <MessageCircleIcon />\n )}\n </div>\n <div>\n <h2 style={{ color: '#ffffff', fontWeight: 700, fontSize: '14px', margin: 0, transition: 'all 0.3s ease' }}>{agentName}</h2>\n <p style={{ color: '#a1a1aa', fontSize: '12px', fontWeight: 500, margin: 0, display: 'flex', alignItems: 'center' }}>\n <span style={{ width: '6px', height: '6px', background: '#ffffff', borderRadius: '50%', marginRight: '6px' }} />\n Active\n </p>\n </div>\n </div>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '2px', padding: '2px', borderRadius: '8px', background: '#18181b' }}>\n <button onClick={() => handleTabChange('text')} style={{\n padding: '6px 12px', fontSize: '12px', fontWeight: 600, borderRadius: '6px',\n background: activeTab === 'text' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\n boxShadow: activeTab === 'text' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\n }}>\n Text\n </button>\n <button onClick={() => handleTabChange('voice')} style={{\n padding: '6px 12px', fontSize: '12px', fontWeight: 600, borderRadius: '6px',\n background: activeTab === 'voice' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\n boxShadow: activeTab === 'voice' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\n }}>\n Voice\n </button>\n </div>\n\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\n <XIcon />\n </button>\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\n {activeTab === 'text' ? (\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\n ) : (\n isVoiceActive ? (\n <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\n ) : (\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\n )\n )}\n </div>\n </div>\n )}\n\n {!isOpen && (!useServerConfig || configLoaded) && (\n <button onClick={handleOpen} style={{\n width: `${finalButtonSize}px`, height: `${finalButtonSize}px`, \n borderRadius: `${finalBorderRadius}px`,\n background: finalButtonColor, color: finalIconColor, border: 'none', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', \n transition: 'all 0.3s ease, transform 0.2s',\n opacity: isInitialLoad && useServerConfig ? 0 : 1\n }}>\n {finalLogoUrl ? (\n <img src={finalLogoUrl} alt=\"Chat\" style={{ width: '60%', height: '60%', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\n </svg>\n )}\n </button>\n )}\n </div>\n </>\n );\n};\n\nexport default VoxChat;\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n geminiApiKey?: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n voiceName?: string;\r\n systemInstruction?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n useServerConfig?: boolean;\r\n configPollInterval?: number;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n}\r\n\r\nenum ConnectionState {\r\n DISCONNECTED = 'DISCONNECTED',\r\n CONNECTING = 'CONNECTING',\r\n CONNECTED = 'CONNECTED',\r\n ERROR = 'ERROR',\r\n}\r\n\r\n// Audio utilities\r\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\r\n const buffer = new ArrayBuffer(inputData.length * 2);\r\n const view = new DataView(buffer);\r\n for (let i = 0; i < inputData.length; i++) {\r\n const s = Math.max(-1, Math.min(1, inputData[i]));\r\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\r\n }\r\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\r\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\r\n}\r\n\r\nfunction decode(base64: string): ArrayBuffer {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\r\n const dataView = new DataView(arrayBuffer);\r\n const numSamples = arrayBuffer.byteLength / 2;\r\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\r\n const channelData = audioBuffer.getChannelData(0);\r\n for (let i = 0; i < numSamples; i++) {\r\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons\r\nconst MessageCircleIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n);\r\n\r\nconst MicIcon = ({ size = 20 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst MicOffIcon = ({ size = 20 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\r\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\r\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\r\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\r\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst XIcon = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\r\n </svg>\r\n);\r\n\r\nconst PhoneOffIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\" />\r\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst UserIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst BotIcon = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\r\n </svg>\r\n);\r\n\r\nconst SendIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"m22 2-7 20-4-9-9-4Z\" /><path d=\"M22 2 11 13\" />\r\n </svg>\r\n);\r\n\r\nconst PlusIcon = ({ size = 20 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M5 12h14\" /><path d=\"M12 5v14\" />\r\n </svg>\r\n);\r\n\r\nconst Loader2Icon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertCircleIcon = () => (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\r\n </svg>\r\n);\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationRef = useRef<number | undefined>(undefined);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const draw = () => {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n if (!analyser || !isActive) {\r\n ctx.strokeStyle = '#3f3f46';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.moveTo(0, height / 2);\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n return;\r\n }\r\n\r\n const bufferLength = analyser.frequencyBinCount;\r\n const dataArray = new Uint8Array(bufferLength);\r\n analyser.getByteTimeDomainData(dataArray);\r\n\r\n ctx.strokeStyle = '#ffffff';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n\r\n const sliceWidth = width / bufferLength;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n const v = dataArray[i] / 128.0;\r\n const y = (v * height) / 2;\r\n if (i === 0) ctx.moveTo(x, y);\r\n else ctx.lineTo(x, y);\r\n x += sliceWidth;\r\n }\r\n\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n draw();\r\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\r\n }, [analyser, isActive]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\r\n};\r\n\r\n// Text Interface Component\r\nconst TextInterface: React.FC<{\r\n apiKey: string;\r\n apiUrl: string;\r\n agentName: string;\r\n systemInstruction: string;\r\n logoUrl?: string;\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, logoUrl }) => {\r\n const [messages, setMessages] = useState<Message[]>([\r\n { id: 'welcome', role: 'assistant', text: `Hello! I'm ${agentName}. How can I help you today?` }\r\n ]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }, [messages]);\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const messageText = input;\r\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\r\n setMessages(prev => [...prev, userMsg]);\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\r\n body: JSON.stringify({ message: messageText, history, systemInstruction })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'API request failed');\r\n }\r\n const data = await response.json();\r\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response || '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 || 'Connection lost. Please try again.'}` };\r\n setMessages(prev => [...prev, errorMsg]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <div style={{ \r\n display: 'flex', flexDirection: 'column', height: '100%', background: '#000000', fontFamily: '\"Plus Jakarta Sans\", sans-serif',\r\n WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale'\r\n }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '16px', 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: '8px', maxWidth: '85%' }}>\r\n <div style={{\r\n flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: msg.role === 'user' ? '1px solid #ffffff' : 'none',\r\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\r\n color: msg.role === 'user' ? '#000000' : '#ffffff'\r\n }}>\r\n {msg.role === 'user' ? <UserIcon /> : (\r\n logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />\r\n )}\r\n </div>\r\n <div style={{\r\n padding: '8px 12px', fontSize: '12px', fontWeight: 400, lineHeight: 1.625,\r\n border: '1px solid', borderRadius: '8px',\r\n borderColor: msg.role === 'user' ? '#52525b' : '#3f3f46',\r\n background: msg.role === 'user' ? '#27272a' : '#000000',\r\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\r\n }}>\r\n {msg.text}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\r\n <div style={{ flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }}>\r\n {logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />}\r\n </div>\r\n <div style={{ padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }}>\r\n <Loader2Icon />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n <div style={{ padding: '16px' }}>\r\n <form onSubmit={handleSend} style={{ width: '100%' }}>\r\n <div style={{\r\n width: '100%', cursor: 'text', overflow: 'clip', backgroundClip: 'padding-box',\r\n padding: '6px', boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\r\n border: '1px solid #3f3f46', transition: 'border-radius 200ms ease-out',\r\n borderRadius: '9999px', display: 'grid',\r\n gridTemplateColumns: 'auto 1fr auto', gridTemplateRows: 'auto 1fr auto',\r\n gridTemplateAreas: '\"header header header\" \"leading primary trailing\" \". footer .\"',\r\n background: 'rgba(0,0,0,0.5)', boxSizing: 'border-box'\r\n }}>\r\n {/* Primary Area */}\r\n <div style={{ gridArea: 'primary', display: 'flex', minHeight: '32px', alignItems: 'center', overflowX: 'hidden', paddingLeft: '4px', paddingRight: '4px', marginTop: '-6px', marginBottom: '-6px' }}>\r\n <div style={{ flex: '1 1 0%', overflow: 'auto', maxHeight: '13rem' }}>\r\n <input\r\n type=\"text\"\r\n placeholder=\"Type your message...\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n onKeyDown={(e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } }}\r\n disabled={isLoading}\r\n style={{\r\n width: '100%', minHeight: 0, resize: 'none', border: 'none', padding: 0,\r\n fontSize: '12px', outline: 'none', background: 'transparent',\r\n color: '#ffffff', margin: 0, fontFamily: 'inherit', lineHeight: 'normal'\r\n }}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Leading Area */}\r\n <div style={{ gridArea: 'leading', display: 'flex' }}>\r\n <button type=\"button\" aria-label=\"Add attachments\" style={{\r\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\r\n width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',\r\n border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',\r\n transition: 'all 0.15s ease'\r\n }}>\r\n <PlusIcon size={20} />\r\n </button>\r\n </div>\r\n\r\n {/* Trailing Area */}\r\n <div style={{ gridArea: 'trailing', display: 'flex', alignItems: 'center', gap: '4px' }}>\r\n <div style={{ marginLeft: 'auto', display: 'flex', alignItems: 'center', gap: '4px' }}>\r\n <button type=\"button\" aria-label=\"Record audio message\" style={{\r\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\r\n width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',\r\n border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',\r\n transition: 'all 0.15s ease'\r\n }}>\r\n <MicIcon size={16} />\r\n </button>\r\n {input.trim() && (\r\n <button type=\"submit\" disabled={isLoading} style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', border: 'none', background: '#ffffff', color: '#000000', cursor: 'pointer' }}>\r\n <SendIcon />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Voice Interface Component\r\nconst VoiceInterface: React.FC<{\r\n geminiApiKey: string;\r\n voiceName: string;\r\n systemInstruction: string;\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\r\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\r\n const [errorMsg, setErrorMsg] = useState('');\r\n const [isMuted, setIsMuted] = useState(false);\r\n const [callDuration, setCallDuration] = useState(0);\r\n\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 outputGainRef = useRef<GainNode | null>(null);\r\n const nextStartTimeRef = useRef<number>(0);\r\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\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 sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\r\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\r\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\r\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\r\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\r\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\r\n inputAudioContextRef.current = null;\r\n outputAudioContextRef.current = null;\r\n inputAnalyserRef.current = null;\r\n sessionRef.current = null;\r\n }, []);\r\n\r\n const connect = async () => {\r\n try {\r\n setConnectionState(ConnectionState.CONNECTING);\r\n setErrorMsg('');\r\n\r\n callStartTimeRef.current = Date.now();\r\n durationIntervalRef.current = setInterval(() => {\r\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\r\n }, 1000);\r\n\r\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\r\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\r\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\r\n inputAudioContextRef.current = inputCtx;\r\n outputAudioContextRef.current = outputCtx;\r\n\r\n const analyser = inputCtx.createAnalyser();\r\n analyser.fftSize = 256;\r\n inputAnalyserRef.current = analyser;\r\n\r\n const outputGain = outputCtx.createGain();\r\n outputGain.gain.value = 1;\r\n outputGainRef.current = outputGain;\r\n outputGain.connect(outputCtx.destination);\r\n\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\r\n const ws = new WebSocket(wsUrl);\r\n sessionRef.current = ws;\r\n\r\n ws.onopen = () => {\r\n const setupMsg = {\r\n setup: {\r\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\r\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\r\n systemInstruction: { parts: [{ text: systemInstruction }] }\r\n }\r\n };\r\n ws.send(JSON.stringify(setupMsg));\r\n };\r\n\r\n ws.onmessage = async (event) => {\r\n let data;\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try { data = JSON.parse(text); } catch (e) { return; }\r\n } else {\r\n try { data = JSON.parse(event.data); } catch (e) { return; }\r\n }\r\n\r\n if (data.setupComplete) {\r\n setConnectionState(ConnectionState.CONNECTED);\r\n\r\n const source = inputCtx.createMediaStreamSource(stream);\r\n sourceNodeRef.current = source;\r\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\r\n scriptProcessorRef.current = processor;\r\n\r\n processor.onaudioprocess = (e) => {\r\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\r\n const inputData = e.inputBuffer.getChannelData(0);\r\n const pcmBlob = createBlob(inputData);\r\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\r\n };\r\n\r\n source.connect(analyser);\r\n source.connect(processor);\r\n processor.connect(inputCtx.destination);\r\n }\r\n\r\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\r\n if (audioData) {\r\n const ctx = outputAudioContextRef.current;\r\n if (!ctx) return;\r\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\r\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\r\n const source = ctx.createBufferSource();\r\n source.buffer = audioBuffer;\r\n if (outputGainRef.current) source.connect(outputGainRef.current);\r\n else source.connect(ctx.destination);\r\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\r\n source.start(nextStartTimeRef.current);\r\n nextStartTimeRef.current += audioBuffer.duration;\r\n sourcesRef.current.add(source);\r\n }\r\n\r\n if (data.serverContent?.interrupted) {\r\n sourcesRef.current.forEach(s => s.stop());\r\n sourcesRef.current.clear();\r\n nextStartTimeRef.current = 0;\r\n }\r\n };\r\n\r\n ws.onclose = () => setConnectionState(ConnectionState.DISCONNECTED);\r\n ws.onerror = () => {\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 setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\r\n cleanupAudio();\r\n }\r\n };\r\n\r\n const disconnect = useCallback(() => {\r\n callStartTimeRef.current = null;\r\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\r\n setCallDuration(0);\r\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\r\n cleanupAudio();\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n }, [cleanupAudio]);\r\n\r\n useEffect(() => {\r\n connect();\r\n return () => disconnect();\r\n }, []);\r\n\r\n const toggleMute = () => {\r\n setIsMuted(!isMuted);\r\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }}>\r\n <div style={{ position: 'relative' }}>\r\n <div style={{\r\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? '0 0 30px rgba(255,255,255,0.15)' : 'none',\r\n transition: 'all 0.3s'\r\n }}>\r\n {connectionState === ConnectionState.CONNECTING ? (\r\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon />}\r\n </div>\r\n )}\r\n </div>\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\r\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: 0.75 }} />\r\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\r\n <p style={{ textAlign: 'center', fontSize: '14px', fontWeight: 600, color: '#71717a', height: '20px' }}>\r\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\r\n {connectionState === ConnectionState.CONNECTED && (isMuted ? 'Muted' : 'Listening...')}\r\n {connectionState === ConnectionState.ERROR && 'Connection error'}\r\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\r\n </p>\r\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\r\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\r\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\r\n </p>\r\n )}\r\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\r\n </div>\r\n\r\n {connectionState === ConnectionState.ERROR && (\r\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '14px', fontWeight: 600, padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46', borderRadius: '8px', gap: '12px' }}>\r\n <AlertCircleIcon />\r\n <span>{errorMsg}</span>\r\n </div>\r\n )}\r\n\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <div style={{ display: 'flex', gap: '16px' }}>\r\n <button onClick={toggleMute} style={{\r\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\r\n background: isMuted ? '#27272a' : '#ffffff',\r\n color: isMuted ? '#71717a' : '#000000'\r\n }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon />}\r\n </button>\r\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\r\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\r\n background: '#dc2626', color: '#ffffff'\r\n }}>\r\n <PhoneOffIcon />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// Main VoxChat Component\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n geminiApiKey,\r\n apiUrl = 'https://your-server.com',\r\n agentName: propAgentName = 'VOX-01',\r\n voiceName: propVoiceName = 'Kore',\r\n systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 56,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n useServerConfig = false,\r\n configPollInterval = 10000\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\r\n const [isVoiceActive, setIsVoiceActive] = useState(false);\r\n \r\n const [serverConfig, setServerConfig] = useState<{\r\n name?: string;\r\n systemInstruction?: string;\r\n voiceName?: string;\r\n widgetStyle?: {\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n position?: 'bottom-right' | 'bottom-left';\r\n iconColor?: string;\r\n logoUrl?: string;\r\n };\r\n } | null>(null);\r\n const [serverGeminiApiKey, setServerGeminiApiKey] = useState<string | undefined>();\r\n const [configLoaded, setConfigLoaded] = useState(!useServerConfig);\r\n const [isInitialLoad, setIsInitialLoad] = useState(true);\r\n\r\n const fetchConfig = useCallback(() => {\r\n if (useServerConfig && apiKey && apiUrl) {\r\n fetch(`${apiUrl}/api/v1/config`, {\r\n headers: { 'x-api-key': apiKey }\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n if (data.agentConfig) {\r\n setServerConfig(data.agentConfig);\r\n }\r\n if (data.geminiApiKey) {\r\n setServerGeminiApiKey(data.geminiApiKey);\r\n }\r\n setConfigLoaded(true);\r\n setIsInitialLoad(false);\r\n })\r\n .catch(err => {\r\n console.error('[VOX] Failed to fetch server config:', err);\r\n setConfigLoaded(true);\r\n setIsInitialLoad(false);\r\n });\r\n }\r\n }, [useServerConfig, apiKey, apiUrl]);\r\n\r\n useEffect(() => {\r\n if (useServerConfig && apiKey && apiUrl) {\r\n fetchConfig();\r\n const intervalId = setInterval(fetchConfig, configPollInterval);\r\n return () => clearInterval(intervalId);\r\n }\r\n }, [useServerConfig, apiKey, apiUrl, fetchConfig, configPollInterval]);\r\n\r\n const agentName = serverConfig?.name || propAgentName;\r\n const voiceName = serverConfig?.voiceName || propVoiceName;\r\n const systemInstruction = serverConfig?.systemInstruction || propSystemInstruction;\r\n \r\n const finalButtonColor = serverConfig?.widgetStyle?.buttonColor || buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\r\n const finalButtonSize = serverConfig?.widgetStyle?.buttonSize || buttonSize || 56;\r\n const finalBorderRadius = serverConfig?.widgetStyle?.borderRadius !== undefined ? serverConfig.widgetStyle.borderRadius : (borderRadius !== undefined ? borderRadius : 50);\r\n const finalPosition = serverConfig?.widgetStyle?.position || position || 'bottom-right';\r\n const finalIconColor = serverConfig?.widgetStyle?.iconColor || iconColor || (theme === 'light' ? '#ffffff' : '#000000');\r\n const finalLogoUrl = serverConfig?.widgetStyle?.logoUrl;\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\r\n\r\n const handleTabChange = (tab: 'text' | 'voice') => {\r\n if (tab === 'voice' && activeTab !== 'voice') {\r\n setActiveTab('voice');\r\n setIsVoiceActive(true);\r\n } else if (tab === 'text') {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n }\r\n };\r\n\r\n const handleEndCall = () => {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n };\r\n\r\n const positionStyles = finalPosition === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\r\n return (\r\n <>\r\n <link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\" />\r\n <style>{`\r\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\r\n @keyframes vox-spin { to { transform: rotate(360deg); } }\r\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\r\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\r\n `}</style>\r\n\r\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: finalPosition === '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), 360px)', height: '550px', maxHeight: '550px',\r\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '8px',\r\n transition: 'all 0.3s ease',\r\n fontFamily: '\"Plus Jakarta Sans\", sans-serif',\r\n WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale',\r\n textAlign: 'left', boxSizing: 'border-box'\r\n }}>\r\n {/* Combined Header with Tabs */}\r\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46', background: '#000000', fontFamily: '\"Plus Jakarta Sans\", sans-serif' }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\r\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 0.3s ease', color: '#ffffff' }}>\r\n {finalLogoUrl ? (\r\n <img key={finalLogoUrl} src={finalLogoUrl} alt={agentName} style={{ width: '28px', height: '28px', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\r\n ) : (\r\n activeTab === 'voice' ? <MicIcon /> : <MessageCircleIcon />\r\n )}\r\n </div>\r\n <div>\r\n <h2 style={{ color: '#ffffff', fontWeight: 600, fontSize: '12px', margin: 0, transition: 'all 0.3s ease', lineHeight: '1.2', fontFamily: 'inherit' }}>{agentName}</h2>\r\n <p style={{ color: '#a1a1aa', fontSize: '11px', fontWeight: 400, margin: 0, display: 'flex', alignItems: 'center', lineHeight: '1.2', fontFamily: 'inherit' }}>\r\n <span style={{ width: '6px', height: '6px', background: '#ffffff', borderRadius: '50%', marginRight: '6px' }} />\r\n Active\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '2px', padding: '2px', borderRadius: '8px', background: '#18181b' }}>\r\n <button onClick={() => handleTabChange('text')} style={{\r\n padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',\r\n background: activeTab === 'text' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\r\n boxShadow: activeTab === 'text' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\r\n }}>\r\n Text\r\n </button>\r\n <button onClick={() => handleTabChange('voice')} style={{\r\n padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',\r\n background: activeTab === 'voice' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\r\n boxShadow: activeTab === 'voice' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\r\n }}>\r\n Voice\r\n </button>\r\n </div>\r\n\r\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\r\n ) : (\r\n isVoiceActive ? (\r\n <VoiceInterface geminiApiKey={geminiApiKey || serverGeminiApiKey || ''} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\r\n ) : (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!isOpen && (!useServerConfig || configLoaded) && (\r\n <button onClick={handleOpen} style={{\r\n width: `${finalButtonSize}px`, height: `${finalButtonSize}px`, \r\n borderRadius: `${finalBorderRadius}px`,\r\n background: finalButtonColor, color: finalIconColor, border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', \r\n transition: 'all 0.3s ease, transform 0.2s',\r\n opacity: isInitialLoad && useServerConfig ? 0 : 1\r\n }}>\r\n {finalLogoUrl ? (\r\n <img src={finalLogoUrl} alt=\"Chat\" style={{ width: '60%', height: '60%', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\r\n ) : (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -50,7 +50,7 @@ const PhoneOffIcon = () => (jsxRuntime.jsxs("svg", { width: "20", height: "20",
|
|
|
50
50
|
const UserIcon = () => (jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntime.jsx("path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }), jsxRuntime.jsx("circle", { cx: "12", cy: "7", r: "4" })] }));
|
|
51
51
|
const BotIcon = () => (jsxRuntime.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntime.jsx("path", { d: "M12 8V4H8" }), jsxRuntime.jsx("rect", { width: "16", height: "12", x: "4", y: "8", rx: "2" }), jsxRuntime.jsx("path", { d: "M2 14h2" }), jsxRuntime.jsx("path", { d: "M20 14h2" }), jsxRuntime.jsx("path", { d: "M15 13v2" }), jsxRuntime.jsx("path", { d: "M9 13v2" })] }));
|
|
52
52
|
const SendIcon = () => (jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntime.jsx("path", { d: "m22 2-7 20-4-9-9-4Z" }), jsxRuntime.jsx("path", { d: "M22 2 11 13" })] }));
|
|
53
|
-
const PlusIcon = () => (jsxRuntime.jsxs("svg", { width:
|
|
53
|
+
const PlusIcon = ({ size = 20 }) => (jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntime.jsx("path", { d: "M5 12h14" }), jsxRuntime.jsx("path", { d: "M12 5v14" })] }));
|
|
54
54
|
const Loader2Icon = () => (jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", style: { animation: 'vox-spin 1s linear infinite' }, children: jsxRuntime.jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }) }));
|
|
55
55
|
const AlertCircleIcon = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }), jsxRuntime.jsx("line", { x1: "12", x2: "12", y1: "8", y2: "12" }), jsxRuntime.jsx("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })] }));
|
|
56
56
|
// Visualizer Component
|
|
@@ -150,24 +150,46 @@ const TextInterface = ({ apiKey, apiUrl, agentName, systemInstruction, logoUrl }
|
|
|
150
150
|
setIsLoading(false);
|
|
151
151
|
}
|
|
152
152
|
};
|
|
153
|
-
return (jsxRuntime.jsxs("div", { style: {
|
|
153
|
+
return (jsxRuntime.jsxs("div", { style: {
|
|
154
|
+
display: 'flex', flexDirection: 'column', height: '100%', background: '#000000', fontFamily: '"Plus Jakarta Sans", sans-serif',
|
|
155
|
+
WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale'
|
|
156
|
+
}, children: [jsxRuntime.jsxs("div", { ref: scrollRef, style: { flex: 1, overflowY: 'auto', padding: '16px', display: 'flex', flexDirection: 'column', gap: '16px' }, children: [messages.map((msg) => (jsxRuntime.jsx("div", { style: { display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }, children: jsxRuntime.jsxs("div", { style: { display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '8px', maxWidth: '85%' }, children: [jsxRuntime.jsx("div", { style: {
|
|
154
157
|
flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
155
158
|
border: msg.role === 'user' ? '1px solid #ffffff' : 'none',
|
|
156
159
|
background: msg.role === 'user' ? '#ffffff' : 'transparent',
|
|
157
160
|
color: msg.role === 'user' ? '#000000' : '#ffffff'
|
|
158
161
|
}, children: msg.role === 'user' ? jsxRuntime.jsx(UserIcon, {}) : (logoUrl ? jsxRuntime.jsx("img", { src: logoUrl, alt: agentName, style: { width: '24px', height: '24px', objectFit: 'contain' } }) : jsxRuntime.jsx(BotIcon, {})) }), jsxRuntime.jsx("div", { style: {
|
|
159
|
-
padding: '8px 12px', fontSize: '
|
|
162
|
+
padding: '8px 12px', fontSize: '12px', fontWeight: 400, lineHeight: 1.625,
|
|
160
163
|
border: '1px solid', borderRadius: '8px',
|
|
161
164
|
borderColor: msg.role === 'user' ? '#52525b' : '#3f3f46',
|
|
162
165
|
background: msg.role === 'user' ? '#27272a' : '#000000',
|
|
163
166
|
color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'
|
|
164
|
-
}, children: msg.text })] }) }, msg.id))), isLoading && (jsxRuntime.jsx("div", { style: { display: 'flex', justifyContent: 'flex-start' }, children: jsxRuntime.jsxs("div", { style: { display: 'flex', alignItems: 'flex-start', gap: '8px' }, children: [jsxRuntime.jsx("div", { style: { flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }, children: logoUrl ? jsxRuntime.jsx("img", { src: logoUrl, alt: agentName, style: { width: '24px', height: '24px', objectFit: 'contain' } }) : jsxRuntime.jsx(BotIcon, {}) }), jsxRuntime.jsx("div", { style: { padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }, children: jsxRuntime.jsx(Loader2Icon, {}) })] }) }))] }), jsxRuntime.jsx("div", { style: { padding: '16px' }, children: jsxRuntime.jsx("form", { onSubmit: handleSend, children: jsxRuntime.jsxs("div", { style: {
|
|
165
|
-
width: '100%', cursor: 'text', overflow: 'clip',
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
167
|
+
}, children: msg.text })] }) }, msg.id))), isLoading && (jsxRuntime.jsx("div", { style: { display: 'flex', justifyContent: 'flex-start' }, children: jsxRuntime.jsxs("div", { style: { display: 'flex', alignItems: 'flex-start', gap: '8px' }, children: [jsxRuntime.jsx("div", { style: { flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }, children: logoUrl ? jsxRuntime.jsx("img", { src: logoUrl, alt: agentName, style: { width: '24px', height: '24px', objectFit: 'contain' } }) : jsxRuntime.jsx(BotIcon, {}) }), jsxRuntime.jsx("div", { style: { padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }, children: jsxRuntime.jsx(Loader2Icon, {}) })] }) }))] }), jsxRuntime.jsx("div", { style: { padding: '16px' }, children: jsxRuntime.jsx("form", { onSubmit: handleSend, style: { width: '100%' }, children: jsxRuntime.jsxs("div", { style: {
|
|
168
|
+
width: '100%', cursor: 'text', overflow: 'clip', backgroundClip: 'padding-box',
|
|
169
|
+
padding: '6px', boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',
|
|
170
|
+
border: '1px solid #3f3f46', transition: 'border-radius 200ms ease-out',
|
|
171
|
+
borderRadius: '9999px', display: 'grid',
|
|
172
|
+
gridTemplateColumns: 'auto 1fr auto', gridTemplateRows: 'auto 1fr auto',
|
|
173
|
+
gridTemplateAreas: '"header header header" "leading primary trailing" ". footer ."',
|
|
174
|
+
background: 'rgba(0,0,0,0.5)', boxSizing: 'border-box'
|
|
175
|
+
}, children: [jsxRuntime.jsx("div", { style: { gridArea: 'primary', display: 'flex', minHeight: '32px', alignItems: 'center', overflowX: 'hidden', paddingLeft: '4px', paddingRight: '4px', marginTop: '-6px', marginBottom: '-6px' }, children: jsxRuntime.jsx("div", { style: { flex: '1 1 0%', overflow: 'auto', maxHeight: '13rem' }, children: jsxRuntime.jsx("input", { type: "text", placeholder: "Type your message...", value: input, onChange: (e) => setInput(e.target.value), onKeyDown: (e) => { if (e.key === 'Enter' && !e.shiftKey) {
|
|
176
|
+
e.preventDefault();
|
|
177
|
+
handleSend();
|
|
178
|
+
} }, disabled: isLoading, style: {
|
|
179
|
+
width: '100%', minHeight: 0, resize: 'none', border: 'none', padding: 0,
|
|
180
|
+
fontSize: '12px', outline: 'none', background: 'transparent',
|
|
181
|
+
color: '#ffffff', margin: 0, fontFamily: 'inherit', lineHeight: 'normal'
|
|
182
|
+
} }) }) }), jsxRuntime.jsx("div", { style: { gridArea: 'leading', display: 'flex' }, children: jsxRuntime.jsx("button", { type: "button", "aria-label": "Add attachments", style: {
|
|
183
|
+
display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
|
|
184
|
+
width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',
|
|
185
|
+
border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',
|
|
186
|
+
transition: 'all 0.15s ease'
|
|
187
|
+
}, children: jsxRuntime.jsx(PlusIcon, { size: 20 }) }) }), jsxRuntime.jsx("div", { style: { gridArea: 'trailing', display: 'flex', alignItems: 'center', gap: '4px' }, children: jsxRuntime.jsxs("div", { style: { marginLeft: 'auto', display: 'flex', alignItems: 'center', gap: '4px' }, children: [jsxRuntime.jsx("button", { type: "button", "aria-label": "Record audio message", style: {
|
|
188
|
+
display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
|
|
189
|
+
width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',
|
|
190
|
+
border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',
|
|
191
|
+
transition: 'all 0.15s ease'
|
|
192
|
+
}, children: jsxRuntime.jsx(MicIcon, { size: 16 }) }), input.trim() && (jsxRuntime.jsx("button", { type: "submit", disabled: isLoading, style: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', border: 'none', background: '#ffffff', color: '#000000', cursor: 'pointer' }, children: jsxRuntime.jsx(SendIcon, {}) }))] }) })] }) }) })] }));
|
|
171
193
|
};
|
|
172
194
|
// Voice Interface Component
|
|
173
195
|
const VoiceInterface = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {
|
|
@@ -371,7 +393,7 @@ const VoiceInterface = ({ geminiApiKey, voiceName, systemInstruction, onEndCall
|
|
|
371
393
|
if (streamRef.current)
|
|
372
394
|
streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });
|
|
373
395
|
};
|
|
374
|
-
return (jsxRuntime.jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px'
|
|
396
|
+
return (jsxRuntime.jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }, children: [jsxRuntime.jsxs("div", { style: { position: 'relative' }, children: [jsxRuntime.jsx("div", { style: {
|
|
375
397
|
width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
376
398
|
border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,
|
|
377
399
|
boxShadow: connectionState === ConnectionState.CONNECTED ? '0 0 30px rgba(255,255,255,0.15)' : 'none',
|
|
@@ -392,6 +414,7 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
392
414
|
const [activeTab, setActiveTab] = react.useState('text');
|
|
393
415
|
const [isVoiceActive, setIsVoiceActive] = react.useState(false);
|
|
394
416
|
const [serverConfig, setServerConfig] = react.useState(null);
|
|
417
|
+
const [serverGeminiApiKey, setServerGeminiApiKey] = react.useState();
|
|
395
418
|
const [configLoaded, setConfigLoaded] = react.useState(!useServerConfig);
|
|
396
419
|
const [isInitialLoad, setIsInitialLoad] = react.useState(true);
|
|
397
420
|
const fetchConfig = react.useCallback(() => {
|
|
@@ -404,6 +427,9 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
404
427
|
if (data.agentConfig) {
|
|
405
428
|
setServerConfig(data.agentConfig);
|
|
406
429
|
}
|
|
430
|
+
if (data.geminiApiKey) {
|
|
431
|
+
setServerGeminiApiKey(data.geminiApiKey);
|
|
432
|
+
}
|
|
407
433
|
setConfigLoaded(true);
|
|
408
434
|
setIsInitialLoad(false);
|
|
409
435
|
})
|
|
@@ -449,25 +475,28 @@ const VoxChat = ({ apiKey, geminiApiKey, apiUrl = 'https://your-server.com', age
|
|
|
449
475
|
const positionStyles = finalPosition === 'bottom-left'
|
|
450
476
|
? { bottom: '16px', left: '16px' }
|
|
451
477
|
: { bottom: '16px', right: '16px' };
|
|
452
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("link", { href: "https://fonts.googleapis.com/css2?family=
|
|
453
|
-
@keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }
|
|
454
|
-
@keyframes vox-spin { to { transform: rotate(360deg); } }
|
|
455
|
-
@keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }
|
|
456
|
-
.vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
|
478
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("link", { href: "https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap", rel: "stylesheet" }), jsxRuntime.jsx("style", { children: `
|
|
479
|
+
@keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }
|
|
480
|
+
@keyframes vox-spin { to { transform: rotate(360deg); } }
|
|
481
|
+
@keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }
|
|
482
|
+
.vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
|
457
483
|
` }), jsxRuntime.jsxs("div", { style: { position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: finalPosition === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }, children: [isOpen && (jsxRuntime.jsxs("div", { className: "vox-widget", style: {
|
|
458
484
|
width: 'min(calc(100vw - 32px), 360px)', height: '550px', maxHeight: '550px',
|
|
459
485
|
background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',
|
|
460
|
-
border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '
|
|
461
|
-
transition: 'all 0.3s ease'
|
|
462
|
-
|
|
463
|
-
|
|
486
|
+
border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '8px',
|
|
487
|
+
transition: 'all 0.3s ease',
|
|
488
|
+
fontFamily: '"Plus Jakarta Sans", sans-serif',
|
|
489
|
+
WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale',
|
|
490
|
+
textAlign: 'left', boxSizing: 'border-box'
|
|
491
|
+
}, children: [jsxRuntime.jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46', background: '#000000', fontFamily: '"Plus Jakarta Sans", sans-serif' }, children: [jsxRuntime.jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [jsxRuntime.jsx("div", { style: { width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 0.3s ease', color: '#ffffff' }, children: finalLogoUrl ? (jsxRuntime.jsx("img", { src: finalLogoUrl, alt: agentName, style: { width: '28px', height: '28px', objectFit: 'contain', transition: 'opacity 0.3s ease' } }, finalLogoUrl)) : (activeTab === 'voice' ? jsxRuntime.jsx(MicIcon, {}) : jsxRuntime.jsx(MessageCircleIcon, {})) }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { style: { color: '#ffffff', fontWeight: 600, fontSize: '12px', margin: 0, transition: 'all 0.3s ease', lineHeight: '1.2', fontFamily: 'inherit' }, children: agentName }), jsxRuntime.jsxs("p", { style: { color: '#a1a1aa', fontSize: '11px', fontWeight: 400, margin: 0, display: 'flex', alignItems: 'center', lineHeight: '1.2', fontFamily: 'inherit' }, children: [jsxRuntime.jsx("span", { style: { width: '6px', height: '6px', background: '#ffffff', borderRadius: '50%', marginRight: '6px' } }), "Active"] })] })] }), jsxRuntime.jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '2px', padding: '2px', borderRadius: '8px', background: '#18181b' }, children: [jsxRuntime.jsx("button", { onClick: () => handleTabChange('text'), style: {
|
|
492
|
+
padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',
|
|
464
493
|
background: activeTab === 'text' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'all 0.2s',
|
|
465
494
|
boxShadow: activeTab === 'text' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'
|
|
466
495
|
}, children: "Text" }), jsxRuntime.jsx("button", { onClick: () => handleTabChange('voice'), style: {
|
|
467
|
-
padding: '6px 12px', fontSize: '
|
|
496
|
+
padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',
|
|
468
497
|
background: activeTab === 'voice' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'all 0.2s',
|
|
469
498
|
boxShadow: activeTab === 'voice' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'
|
|
470
|
-
}, children: "Voice" })] }), jsxRuntime.jsx("button", { onClick: handleClose, style: { background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }, children: jsxRuntime.jsx(XIcon, {}) })] }), jsxRuntime.jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }, children: activeTab === 'text' ? (jsxRuntime.jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl })) : (isVoiceActive ? (jsxRuntime.jsx(VoiceInterface, { geminiApiKey: geminiApiKey, voiceName: voiceName, systemInstruction: systemInstruction, onEndCall: handleEndCall })) : (jsxRuntime.jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl }))) })] })), !isOpen && (!useServerConfig || configLoaded) && (jsxRuntime.jsx("button", { onClick: handleOpen, style: {
|
|
499
|
+
}, children: "Voice" })] }), jsxRuntime.jsx("button", { onClick: handleClose, style: { background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }, children: jsxRuntime.jsx(XIcon, {}) })] }), jsxRuntime.jsx("div", { style: { flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }, children: activeTab === 'text' ? (jsxRuntime.jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl })) : (isVoiceActive ? (jsxRuntime.jsx(VoiceInterface, { geminiApiKey: geminiApiKey || serverGeminiApiKey || '', voiceName: voiceName, systemInstruction: systemInstruction, onEndCall: handleEndCall })) : (jsxRuntime.jsx(TextInterface, { apiKey: apiKey, apiUrl: apiUrl, agentName: agentName, systemInstruction: systemInstruction, logoUrl: finalLogoUrl }))) })] })), !isOpen && (!useServerConfig || configLoaded) && (jsxRuntime.jsx("button", { onClick: handleOpen, style: {
|
|
471
500
|
width: `${finalButtonSize}px`, height: `${finalButtonSize}px`,
|
|
472
501
|
borderRadius: `${finalBorderRadius}px`,
|
|
473
502
|
background: finalButtonColor, color: finalIconColor, border: 'none', cursor: 'pointer',
|
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';\n\nexport interface VoxChatProps {\n apiKey: string;\n geminiApiKey: string;\n apiUrl?: string;\n agentName?: string;\n voiceName?: string;\n systemInstruction?: string;\n position?: 'bottom-right' | 'bottom-left';\n theme?: 'dark' | 'light';\n buttonColor?: string;\n buttonSize?: number;\n borderRadius?: number;\n iconColor?: string;\n onOpen?: () => void;\n onClose?: () => void;\n useServerConfig?: boolean;\n configPollInterval?: number;\n}\n\ninterface Message {\n id: string;\n role: 'user' | 'assistant';\n text: string;\n}\n\nenum ConnectionState {\n DISCONNECTED = 'DISCONNECTED',\n CONNECTING = 'CONNECTING',\n CONNECTED = 'CONNECTED',\n ERROR = 'ERROR',\n}\n\n// Audio utilities\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\n const buffer = new ArrayBuffer(inputData.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < inputData.length; i++) {\n const s = Math.max(-1, Math.min(1, inputData[i]));\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\n}\n\nfunction decode(base64: string): ArrayBuffer {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\n const dataView = new DataView(arrayBuffer);\n const numSamples = arrayBuffer.byteLength / 2;\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\n const channelData = audioBuffer.getChannelData(0);\n for (let i = 0; i < numSamples; i++) {\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\n }\n return audioBuffer;\n}\n\n// Icons\nconst MessageCircleIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\n </svg>\n);\n\nconst MicIcon = ({ size = 20 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n);\n\nconst MicOffIcon = ({ size = 20 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n);\n\nconst XIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n);\n\nconst PhoneOffIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\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\" />\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\n </svg>\n);\n\nconst UserIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n);\n\nconst BotIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\n </svg>\n);\n\nconst SendIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m22 2-7 20-4-9-9-4Z\" /><path d=\"M22 2 11 13\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 12h14\" /><path d=\"M12 5v14\" />\n </svg>\n);\n\nconst Loader2Icon = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n);\n\nconst AlertCircleIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\n </svg>\n);\n\n// Visualizer Component\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const animationRef = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const draw = () => {\n const width = canvas.width;\n const height = canvas.height;\n ctx.clearRect(0, 0, width, height);\n\n if (!analyser || !isActive) {\n ctx.strokeStyle = '#3f3f46';\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(0, height / 2);\n ctx.lineTo(width, height / 2);\n ctx.stroke();\n animationRef.current = requestAnimationFrame(draw);\n return;\n }\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n analyser.getByteTimeDomainData(dataArray);\n\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 1;\n ctx.beginPath();\n\n const sliceWidth = width / bufferLength;\n let x = 0;\n\n for (let i = 0; i < bufferLength; i++) {\n const v = dataArray[i] / 128.0;\n const y = (v * height) / 2;\n if (i === 0) ctx.moveTo(x, y);\n else ctx.lineTo(x, y);\n x += sliceWidth;\n }\n\n ctx.lineTo(width, height / 2);\n ctx.stroke();\n animationRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\n }, [analyser, isActive]);\n\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\n};\n\n// Text Interface Component\nconst TextInterface: React.FC<{\n apiKey: string;\n apiUrl: string;\n agentName: string;\n systemInstruction: string;\n logoUrl?: string;\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, logoUrl }) => {\n const [messages, setMessages] = useState<Message[]>([\n { id: 'welcome', role: 'assistant', text: `Hello! I'm ${agentName}. How can I help you today?` }\n ]);\n const [input, setInput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }, [messages]);\n\n const handleSend = async (e?: React.FormEvent) => {\n e?.preventDefault();\n if (!input.trim() || isLoading) return;\n\n const messageText = input;\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\n setMessages(prev => [...prev, userMsg]);\n setInput('');\n setIsLoading(true);\n\n try {\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\n body: JSON.stringify({ message: messageText, history, systemInstruction })\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'API request failed');\n }\n const data = await response.json();\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response || 'Error: No response' };\n setMessages(prev => [...prev, botMsg]);\n } catch (err: any) {\n console.error('VOX Chat Error:', err);\n const errorMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: `Error: ${err.message || 'Connection lost. Please try again.'}` };\n setMessages(prev => [...prev, errorMsg]);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%', background: '#000000', fontFamily: 'Outfit, sans-serif' }}>\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '16px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\n {messages.map((msg) => (\n <div key={msg.id} style={{ display: 'flex', justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start' }}>\n <div style={{ display: 'flex', flexDirection: msg.role === 'user' ? 'row-reverse' : 'row', alignItems: 'flex-start', gap: '8px', maxWidth: '85%' }}>\n <div style={{\n flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center',\n border: msg.role === 'user' ? '1px solid #ffffff' : 'none',\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\n color: msg.role === 'user' ? '#000000' : '#ffffff'\n }}>\n {msg.role === 'user' ? <UserIcon /> : (\n logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />\n )}\n </div>\n <div style={{\n padding: '8px 12px', fontSize: '14px', fontWeight: 500, lineHeight: 1.6,\n border: '1px solid', borderRadius: '8px',\n borderColor: msg.role === 'user' ? '#52525b' : '#3f3f46',\n background: msg.role === 'user' ? '#27272a' : '#000000',\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\n }}>\n {msg.text}\n </div>\n </div>\n </div>\n ))}\n {isLoading && (\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\n <div style={{ flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }}>\n {logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />}\n </div>\n <div style={{ padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }}>\n <Loader2Icon />\n </div>\n </div>\n </div>\n )}\n </div>\n <div style={{ padding: '16px' }}>\n <form onSubmit={handleSend}>\n <div style={{\n width: '100%', cursor: 'text', overflow: 'clip', padding: '6px', boxShadow: '0 4px 6px -1px rgba(0,0,0,0.1)', border: '1px solid #3f3f46', borderRadius: '9999px',\n display: 'grid', gridTemplateColumns: 'auto 1fr auto', gridTemplateRows: 'auto', gap: '4px', alignItems: 'center', background: 'rgba(0,0,0,0.5)'\n }}>\n <button type=\"button\" style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', outline: 'none', border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a' }}>\n <PlusIcon />\n </button>\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } }}\n placeholder=\"Type your message...\"\n disabled={isLoading}\n style={{ width: '100%', minHeight: '32px', resize: 'none', border: 0, padding: 0, fontSize: '14px', outline: 'none', background: 'transparent', color: '#ffffff' }}\n />\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <button type=\"button\" style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', outline: 'none', border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a' }}>\n <MicIcon size={16} />\n </button>\n {input.trim() && (\n <button type=\"submit\" disabled={isLoading} style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', border: 'none', background: '#ffffff', color: '#000000', cursor: 'pointer' }}>\n <SendIcon />\n </button>\n )}\n </div>\n </div>\n </form>\n </div>\n </div>\n );\n};\n\n// Voice Interface Component\nconst VoiceInterface: React.FC<{\n geminiApiKey: string;\n voiceName: string;\n systemInstruction: string;\n onEndCall?: () => void;\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\n const [errorMsg, setErrorMsg] = useState('');\n const [isMuted, setIsMuted] = useState(false);\n const [callDuration, setCallDuration] = useState(0);\n\n const callStartTimeRef = useRef<number | null>(null);\n const durationIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const inputAudioContextRef = useRef<AudioContext | null>(null);\n const outputAudioContextRef = useRef<AudioContext | null>(null);\n const inputAnalyserRef = useRef<AnalyserNode | null>(null);\n const outputGainRef = useRef<GainNode | null>(null);\n const nextStartTimeRef = useRef<number>(0);\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\n const sessionRef = useRef<WebSocket | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const scriptProcessorRef = useRef<ScriptProcessorNode | null>(null);\n const sourceNodeRef = useRef<MediaStreamAudioSourceNode | null>(null);\n\n const cleanupAudio = useCallback(() => {\n sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\n sourcesRef.current.clear();\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\n inputAudioContextRef.current = null;\n outputAudioContextRef.current = null;\n inputAnalyserRef.current = null;\n sessionRef.current = null;\n }, []);\n\n const connect = async () => {\n try {\n setConnectionState(ConnectionState.CONNECTING);\n setErrorMsg('');\n\n callStartTimeRef.current = Date.now();\n durationIntervalRef.current = setInterval(() => {\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\n }, 1000);\n\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\n inputAudioContextRef.current = inputCtx;\n outputAudioContextRef.current = outputCtx;\n\n const analyser = inputCtx.createAnalyser();\n analyser.fftSize = 256;\n inputAnalyserRef.current = analyser;\n\n const outputGain = outputCtx.createGain();\n outputGain.gain.value = 1;\n outputGainRef.current = outputGain;\n outputGain.connect(outputCtx.destination);\n\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n streamRef.current = stream;\n\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\n const ws = new WebSocket(wsUrl);\n sessionRef.current = ws;\n\n ws.onopen = () => {\n const setupMsg = {\n setup: {\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\n systemInstruction: { parts: [{ text: systemInstruction }] }\n }\n };\n ws.send(JSON.stringify(setupMsg));\n };\n\n ws.onmessage = async (event) => {\n let data;\n if (event.data instanceof Blob) {\n const text = await event.data.text();\n try { data = JSON.parse(text); } catch (e) { return; }\n } else {\n try { data = JSON.parse(event.data); } catch (e) { return; }\n }\n\n if (data.setupComplete) {\n setConnectionState(ConnectionState.CONNECTED);\n\n const source = inputCtx.createMediaStreamSource(stream);\n sourceNodeRef.current = source;\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\n scriptProcessorRef.current = processor;\n\n processor.onaudioprocess = (e) => {\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\n const inputData = e.inputBuffer.getChannelData(0);\n const pcmBlob = createBlob(inputData);\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\n };\n\n source.connect(analyser);\n source.connect(processor);\n processor.connect(inputCtx.destination);\n }\n\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\n if (audioData) {\n const ctx = outputAudioContextRef.current;\n if (!ctx) return;\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\n const source = ctx.createBufferSource();\n source.buffer = audioBuffer;\n if (outputGainRef.current) source.connect(outputGainRef.current);\n else source.connect(ctx.destination);\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\n source.start(nextStartTimeRef.current);\n nextStartTimeRef.current += audioBuffer.duration;\n sourcesRef.current.add(source);\n }\n\n if (data.serverContent?.interrupted) {\n sourcesRef.current.forEach(s => s.stop());\n sourcesRef.current.clear();\n nextStartTimeRef.current = 0;\n }\n };\n\n ws.onclose = () => setConnectionState(ConnectionState.DISCONNECTED);\n ws.onerror = () => {\n setConnectionState(ConnectionState.ERROR);\n setErrorMsg('Connection failed. Check your Gemini API key.');\n cleanupAudio();\n };\n\n } catch (err: any) {\n setConnectionState(ConnectionState.ERROR);\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\n cleanupAudio();\n }\n };\n\n const disconnect = useCallback(() => {\n callStartTimeRef.current = null;\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\n setCallDuration(0);\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\n cleanupAudio();\n setConnectionState(ConnectionState.DISCONNECTED);\n }, [cleanupAudio]);\n\n useEffect(() => {\n connect();\n return () => disconnect();\n }, []);\n\n const toggleMute = () => {\n setIsMuted(!isMuted);\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px', fontFamily: 'Outfit, sans-serif' }}>\n <div style={{ position: 'relative' }}>\n <div style={{\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\n boxShadow: connectionState === ConnectionState.CONNECTED ? '0 0 30px rgba(255,255,255,0.15)' : 'none',\n transition: 'all 0.3s'\n }}>\n {connectionState === ConnectionState.CONNECTING ? (\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\n ) : (\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\n {isMuted ? <MicOffIcon /> : <MicIcon />}\n </div>\n )}\n </div>\n {connectionState === ConnectionState.CONNECTED && (\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: 0.75 }} />\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\n </span>\n )}\n </div>\n\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\n <p style={{ textAlign: 'center', fontSize: '14px', fontWeight: 600, color: '#71717a', height: '20px' }}>\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\n {connectionState === ConnectionState.CONNECTED && (isMuted ? 'Muted' : 'Listening...')}\n {connectionState === ConnectionState.ERROR && 'Connection error'}\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\n </p>\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\n </p>\n )}\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\n </div>\n\n {connectionState === ConnectionState.ERROR && (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '14px', fontWeight: 600, padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46', borderRadius: '8px', gap: '12px' }}>\n <AlertCircleIcon />\n <span>{errorMsg}</span>\n </div>\n )}\n\n {connectionState === ConnectionState.CONNECTED && (\n <div style={{ display: 'flex', gap: '16px' }}>\n <button onClick={toggleMute} style={{\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\n background: isMuted ? '#27272a' : '#ffffff',\n color: isMuted ? '#71717a' : '#000000'\n }}>\n {isMuted ? <MicOffIcon /> : <MicIcon />}\n </button>\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\n background: '#dc2626', color: '#ffffff'\n }}>\n <PhoneOffIcon />\n </button>\n </div>\n )}\n </div>\n );\n};\n\n// Main VoxChat Component\nexport const VoxChat: React.FC<VoxChatProps> = ({\n apiKey,\n geminiApiKey,\n apiUrl = 'https://your-server.com',\n agentName: propAgentName = 'VOX-01',\n voiceName: propVoiceName = 'Kore',\n systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.',\n position = 'bottom-right',\n theme = 'dark',\n buttonColor,\n buttonSize = 56,\n borderRadius = 0,\n iconColor,\n onOpen,\n onClose,\n useServerConfig = false,\n configPollInterval = 10000\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\n const [isVoiceActive, setIsVoiceActive] = useState(false);\n \n const [serverConfig, setServerConfig] = useState<{\n name?: string;\n systemInstruction?: string;\n voiceName?: string;\n widgetStyle?: {\n buttonColor?: string;\n buttonSize?: number;\n borderRadius?: number;\n position?: 'bottom-right' | 'bottom-left';\n iconColor?: string;\n logoUrl?: string;\n };\n } | null>(null);\n const [configLoaded, setConfigLoaded] = useState(!useServerConfig);\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n\n const fetchConfig = useCallback(() => {\n if (useServerConfig && apiKey && apiUrl) {\n fetch(`${apiUrl}/api/v1/config`, {\n headers: { 'x-api-key': apiKey }\n })\n .then(res => res.json())\n .then(data => {\n if (data.agentConfig) {\n setServerConfig(data.agentConfig);\n }\n setConfigLoaded(true);\n setIsInitialLoad(false);\n })\n .catch(err => {\n console.error('[VOX] Failed to fetch server config:', err);\n setConfigLoaded(true);\n setIsInitialLoad(false);\n });\n }\n }, [useServerConfig, apiKey, apiUrl]);\n\n useEffect(() => {\n if (useServerConfig && apiKey && apiUrl) {\n fetchConfig();\n const intervalId = setInterval(fetchConfig, configPollInterval);\n return () => clearInterval(intervalId);\n }\n }, [useServerConfig, apiKey, apiUrl, fetchConfig, configPollInterval]);\n\n const agentName = serverConfig?.name || propAgentName;\n const voiceName = serverConfig?.voiceName || propVoiceName;\n const systemInstruction = serverConfig?.systemInstruction || propSystemInstruction;\n \n const finalButtonColor = serverConfig?.widgetStyle?.buttonColor || buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\n const finalButtonSize = serverConfig?.widgetStyle?.buttonSize || buttonSize || 56;\n const finalBorderRadius = serverConfig?.widgetStyle?.borderRadius !== undefined ? serverConfig.widgetStyle.borderRadius : (borderRadius !== undefined ? borderRadius : 50);\n const finalPosition = serverConfig?.widgetStyle?.position || position || 'bottom-right';\n const finalIconColor = serverConfig?.widgetStyle?.iconColor || iconColor || (theme === 'light' ? '#ffffff' : '#000000');\n const finalLogoUrl = serverConfig?.widgetStyle?.logoUrl;\n\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\n\n const handleTabChange = (tab: 'text' | 'voice') => {\n if (tab === 'voice' && activeTab !== 'voice') {\n setActiveTab('voice');\n setIsVoiceActive(true);\n } else if (tab === 'text') {\n setIsVoiceActive(false);\n setActiveTab('text');\n }\n };\n\n const handleEndCall = () => {\n setIsVoiceActive(false);\n setActiveTab('text');\n };\n\n const positionStyles = finalPosition === 'bottom-left' \n ? { bottom: '16px', left: '16px' } \n : { bottom: '16px', right: '16px' };\n\n return (\n <>\n <link href=\"https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;900&display=swap\" rel=\"stylesheet\" />\n <style>{`\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\n @keyframes vox-spin { to { transform: rotate(360deg); } }\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\n `}</style>\n\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: finalPosition === 'bottom-left' ? 'flex-start' : 'flex-end', gap: '24px', ...positionStyles }}>\n {isOpen && (\n <div className=\"vox-widget\" style={{\n width: 'min(calc(100vw - 32px), 360px)', height: '550px', maxHeight: '550px',\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\n border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '12px',\n transition: 'all 0.3s ease'\n }}>\n {/* Combined Header with Tabs */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46', background: '#000000', fontFamily: 'Outfit, sans-serif' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 0.3s ease' }}>\n {finalLogoUrl ? (\n <img key={finalLogoUrl} src={finalLogoUrl} alt={agentName} style={{ width: '28px', height: '28px', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\n ) : (\n activeTab === 'voice' ? <MicIcon /> : <MessageCircleIcon />\n )}\n </div>\n <div>\n <h2 style={{ color: '#ffffff', fontWeight: 700, fontSize: '14px', margin: 0, transition: 'all 0.3s ease' }}>{agentName}</h2>\n <p style={{ color: '#a1a1aa', fontSize: '12px', fontWeight: 500, margin: 0, display: 'flex', alignItems: 'center' }}>\n <span style={{ width: '6px', height: '6px', background: '#ffffff', borderRadius: '50%', marginRight: '6px' }} />\n Active\n </p>\n </div>\n </div>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '2px', padding: '2px', borderRadius: '8px', background: '#18181b' }}>\n <button onClick={() => handleTabChange('text')} style={{\n padding: '6px 12px', fontSize: '12px', fontWeight: 600, borderRadius: '6px',\n background: activeTab === 'text' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\n boxShadow: activeTab === 'text' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\n }}>\n Text\n </button>\n <button onClick={() => handleTabChange('voice')} style={{\n padding: '6px 12px', fontSize: '12px', fontWeight: 600, borderRadius: '6px',\n background: activeTab === 'voice' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\n boxShadow: activeTab === 'voice' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\n }}>\n Voice\n </button>\n </div>\n\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\n <XIcon />\n </button>\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\n {activeTab === 'text' ? (\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\n ) : (\n isVoiceActive ? (\n <VoiceInterface geminiApiKey={geminiApiKey} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\n ) : (\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\n )\n )}\n </div>\n </div>\n )}\n\n {!isOpen && (!useServerConfig || configLoaded) && (\n <button onClick={handleOpen} style={{\n width: `${finalButtonSize}px`, height: `${finalButtonSize}px`, \n borderRadius: `${finalBorderRadius}px`,\n background: finalButtonColor, color: finalIconColor, border: 'none', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', \n transition: 'all 0.3s ease, transform 0.2s',\n opacity: isInitialLoad && useServerConfig ? 0 : 1\n }}>\n {finalLogoUrl ? (\n <img src={finalLogoUrl} alt=\"Chat\" style={{ width: '60%', height: '60%', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\n </svg>\n )}\n </button>\n )}\n </div>\n </>\n );\n};\n\nexport default VoxChat;\n"],"names":["_jsx","_jsxs","useRef","useEffect","useState","useCallback","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n geminiApiKey?: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n voiceName?: string;\r\n systemInstruction?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n useServerConfig?: boolean;\r\n configPollInterval?: number;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n}\r\n\r\nenum ConnectionState {\r\n DISCONNECTED = 'DISCONNECTED',\r\n CONNECTING = 'CONNECTING',\r\n CONNECTED = 'CONNECTED',\r\n ERROR = 'ERROR',\r\n}\r\n\r\n// Audio utilities\r\nfunction createBlob(inputData: Float32Array): { mimeType: string; data: string } {\r\n const buffer = new ArrayBuffer(inputData.length * 2);\r\n const view = new DataView(buffer);\r\n for (let i = 0; i < inputData.length; i++) {\r\n const s = Math.max(-1, Math.min(1, inputData[i]));\r\n view.setInt16(i * 2, s < 0 ? s * 0x8000 : s * 0x7fff, true);\r\n }\r\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\r\n return { mimeType: 'audio/pcm;rate=16000', data: base64 };\r\n}\r\n\r\nfunction decode(base64: string): ArrayBuffer {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nasync function decodeAudioData(arrayBuffer: ArrayBuffer, ctx: AudioContext, sampleRate: number, numChannels: number): Promise<AudioBuffer> {\r\n const dataView = new DataView(arrayBuffer);\r\n const numSamples = arrayBuffer.byteLength / 2;\r\n const audioBuffer = ctx.createBuffer(numChannels, numSamples, sampleRate);\r\n const channelData = audioBuffer.getChannelData(0);\r\n for (let i = 0; i < numSamples; i++) {\r\n channelData[i] = dataView.getInt16(i * 2, true) / 32768;\r\n }\r\n return audioBuffer;\r\n}\r\n\r\n// Icons\r\nconst MessageCircleIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n);\r\n\r\nconst MicIcon = ({ size = 20 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst MicOffIcon = ({ size = 20 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\r\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\r\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\r\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\r\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst XIcon = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\r\n </svg>\r\n);\r\n\r\nconst PhoneOffIcon = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\" />\r\n <line x1=\"22\" x2=\"2\" y1=\"2\" y2=\"22\" />\r\n </svg>\r\n);\r\n\r\nconst UserIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst BotIcon = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />\r\n </svg>\r\n);\r\n\r\nconst SendIcon = () => (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"m22 2-7 20-4-9-9-4Z\" /><path d=\"M22 2 11 13\" />\r\n </svg>\r\n);\r\n\r\nconst PlusIcon = ({ size = 20 }: { size?: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M5 12h14\" /><path d=\"M12 5v14\" />\r\n </svg>\r\n);\r\n\r\nconst Loader2Icon = () => (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'vox-spin 1s linear infinite' }}>\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n);\r\n\r\nconst AlertCircleIcon = () => (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\r\n </svg>\r\n);\r\n\r\n// Visualizer Component\r\nconst Visualizer: React.FC<{ analyser: AnalyserNode | null; isActive: boolean }> = ({ analyser, isActive }) => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationRef = useRef<number | undefined>(undefined);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const draw = () => {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n if (!analyser || !isActive) {\r\n ctx.strokeStyle = '#3f3f46';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.moveTo(0, height / 2);\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n return;\r\n }\r\n\r\n const bufferLength = analyser.frequencyBinCount;\r\n const dataArray = new Uint8Array(bufferLength);\r\n analyser.getByteTimeDomainData(dataArray);\r\n\r\n ctx.strokeStyle = '#ffffff';\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n\r\n const sliceWidth = width / bufferLength;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n const v = dataArray[i] / 128.0;\r\n const y = (v * height) / 2;\r\n if (i === 0) ctx.moveTo(x, y);\r\n else ctx.lineTo(x, y);\r\n x += sliceWidth;\r\n }\r\n\r\n ctx.lineTo(width, height / 2);\r\n ctx.stroke();\r\n animationRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n draw();\r\n return () => { if (animationRef.current) cancelAnimationFrame(animationRef.current); };\r\n }, [analyser, isActive]);\r\n\r\n return <canvas ref={canvasRef} width={300} height={50} style={{ width: '100%', height: '50px', background: 'transparent' }} />;\r\n};\r\n\r\n// Text Interface Component\r\nconst TextInterface: React.FC<{\r\n apiKey: string;\r\n apiUrl: string;\r\n agentName: string;\r\n systemInstruction: string;\r\n logoUrl?: string;\r\n}> = ({ apiKey, apiUrl, agentName, systemInstruction, logoUrl }) => {\r\n const [messages, setMessages] = useState<Message[]>([\r\n { id: 'welcome', role: 'assistant', text: `Hello! I'm ${agentName}. How can I help you today?` }\r\n ]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }, [messages]);\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const messageText = input;\r\n const userMsg: Message = { id: Date.now().toString(), role: 'user', text: messageText };\r\n setMessages(prev => [...prev, userMsg]);\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const history = messages.filter(m => m.id !== 'welcome').map(m => ({ role: m.role === 'assistant' ? 'model' : 'user', text: m.text }));\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },\r\n body: JSON.stringify({ message: messageText, history, systemInstruction })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'API request failed');\r\n }\r\n const data = await response.json();\r\n const botMsg: Message = { id: (Date.now() + 1).toString(), role: 'assistant', text: data.response || '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 || 'Connection lost. Please try again.'}` };\r\n setMessages(prev => [...prev, errorMsg]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <div style={{ \r\n display: 'flex', flexDirection: 'column', height: '100%', background: '#000000', fontFamily: '\"Plus Jakarta Sans\", sans-serif',\r\n WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale'\r\n }}>\r\n <div ref={scrollRef} style={{ flex: 1, overflowY: 'auto', padding: '16px', 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: '8px', maxWidth: '85%' }}>\r\n <div style={{\r\n flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: msg.role === 'user' ? '1px solid #ffffff' : 'none',\r\n background: msg.role === 'user' ? '#ffffff' : 'transparent',\r\n color: msg.role === 'user' ? '#000000' : '#ffffff'\r\n }}>\r\n {msg.role === 'user' ? <UserIcon /> : (\r\n logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />\r\n )}\r\n </div>\r\n <div style={{\r\n padding: '8px 12px', fontSize: '12px', fontWeight: 400, lineHeight: 1.625,\r\n border: '1px solid', borderRadius: '8px',\r\n borderColor: msg.role === 'user' ? '#52525b' : '#3f3f46',\r\n background: msg.role === 'user' ? '#27272a' : '#000000',\r\n color: msg.role === 'user' ? '#ffffff' : '#d4d4d8'\r\n }}>\r\n {msg.text}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\r\n <div style={{ flexShrink: 0, width: '24px', height: '24px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#ffffff', opacity: 0.2 }}>\r\n {logoUrl ? <img src={logoUrl} alt={agentName} style={{ width: '24px', height: '24px', objectFit: 'contain' }} /> : <BotIcon />}\r\n </div>\r\n <div style={{ padding: '12px 16px', border: '1px solid #3f3f46', background: '#000000', borderRadius: '8px' }}>\r\n <Loader2Icon />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n <div style={{ padding: '16px' }}>\r\n <form onSubmit={handleSend} style={{ width: '100%' }}>\r\n <div style={{\r\n width: '100%', cursor: 'text', overflow: 'clip', backgroundClip: 'padding-box',\r\n padding: '6px', boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\r\n border: '1px solid #3f3f46', transition: 'border-radius 200ms ease-out',\r\n borderRadius: '9999px', display: 'grid',\r\n gridTemplateColumns: 'auto 1fr auto', gridTemplateRows: 'auto 1fr auto',\r\n gridTemplateAreas: '\"header header header\" \"leading primary trailing\" \". footer .\"',\r\n background: 'rgba(0,0,0,0.5)', boxSizing: 'border-box'\r\n }}>\r\n {/* Primary Area */}\r\n <div style={{ gridArea: 'primary', display: 'flex', minHeight: '32px', alignItems: 'center', overflowX: 'hidden', paddingLeft: '4px', paddingRight: '4px', marginTop: '-6px', marginBottom: '-6px' }}>\r\n <div style={{ flex: '1 1 0%', overflow: 'auto', maxHeight: '13rem' }}>\r\n <input\r\n type=\"text\"\r\n placeholder=\"Type your message...\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n onKeyDown={(e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } }}\r\n disabled={isLoading}\r\n style={{\r\n width: '100%', minHeight: 0, resize: 'none', border: 'none', padding: 0,\r\n fontSize: '12px', outline: 'none', background: 'transparent',\r\n color: '#ffffff', margin: 0, fontFamily: 'inherit', lineHeight: 'normal'\r\n }}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Leading Area */}\r\n <div style={{ gridArea: 'leading', display: 'flex' }}>\r\n <button type=\"button\" aria-label=\"Add attachments\" style={{\r\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\r\n width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',\r\n border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',\r\n transition: 'all 0.15s ease'\r\n }}>\r\n <PlusIcon size={20} />\r\n </button>\r\n </div>\r\n\r\n {/* Trailing Area */}\r\n <div style={{ gridArea: 'trailing', display: 'flex', alignItems: 'center', gap: '4px' }}>\r\n <div style={{ marginLeft: 'auto', display: 'flex', alignItems: 'center', gap: '4px' }}>\r\n <button type=\"button\" aria-label=\"Record audio message\" style={{\r\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\r\n width: '32px', height: '32px', borderRadius: '9999px', outline: 'none',\r\n border: 'none', background: 'transparent', cursor: 'pointer', color: '#71717a',\r\n transition: 'all 0.15s ease'\r\n }}>\r\n <MicIcon size={16} />\r\n </button>\r\n {input.trim() && (\r\n <button type=\"submit\" disabled={isLoading} style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '32px', height: '32px', borderRadius: '9999px', border: 'none', background: '#ffffff', color: '#000000', cursor: 'pointer' }}>\r\n <SendIcon />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Voice Interface Component\r\nconst VoiceInterface: React.FC<{\r\n geminiApiKey: string;\r\n voiceName: string;\r\n systemInstruction: string;\r\n onEndCall?: () => void;\r\n}> = ({ geminiApiKey, voiceName, systemInstruction, onEndCall }) => {\r\n const [connectionState, setConnectionState] = useState<ConnectionState>(ConnectionState.DISCONNECTED);\r\n const [errorMsg, setErrorMsg] = useState('');\r\n const [isMuted, setIsMuted] = useState(false);\r\n const [callDuration, setCallDuration] = useState(0);\r\n\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 outputGainRef = useRef<GainNode | null>(null);\r\n const nextStartTimeRef = useRef<number>(0);\r\n const sourcesRef = useRef<Set<AudioBufferSourceNode>>(new Set());\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 sourcesRef.current.forEach(source => { try { source.stop(); } catch (e) {} });\r\n sourcesRef.current.clear();\r\n if (streamRef.current) { streamRef.current.getTracks().forEach(track => { track.stop(); track.enabled = false; }); streamRef.current = null; }\r\n if (scriptProcessorRef.current) { try { scriptProcessorRef.current.disconnect(); } catch (e) {} scriptProcessorRef.current = null; }\r\n if (sourceNodeRef.current) { try { sourceNodeRef.current.disconnect(); } catch (e) {} sourceNodeRef.current = null; }\r\n if (outputGainRef.current) { try { outputGainRef.current.disconnect(); } catch (e) {} outputGainRef.current = null; }\r\n if (inputAudioContextRef.current?.state !== 'closed') { try { inputAudioContextRef.current?.close(); } catch (e) {} }\r\n if (outputAudioContextRef.current?.state !== 'closed') { try { outputAudioContextRef.current?.close(); } catch (e) {} }\r\n inputAudioContextRef.current = null;\r\n outputAudioContextRef.current = null;\r\n inputAnalyserRef.current = null;\r\n sessionRef.current = null;\r\n }, []);\r\n\r\n const connect = async () => {\r\n try {\r\n setConnectionState(ConnectionState.CONNECTING);\r\n setErrorMsg('');\r\n\r\n callStartTimeRef.current = Date.now();\r\n durationIntervalRef.current = setInterval(() => {\r\n if (callStartTimeRef.current) setCallDuration(Math.floor((Date.now() - callStartTimeRef.current) / 1000));\r\n }, 1000);\r\n\r\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\r\n const inputCtx = new AudioContextClass({ sampleRate: 16000 });\r\n const outputCtx = new AudioContextClass({ sampleRate: 24000 });\r\n inputAudioContextRef.current = inputCtx;\r\n outputAudioContextRef.current = outputCtx;\r\n\r\n const analyser = inputCtx.createAnalyser();\r\n analyser.fftSize = 256;\r\n inputAnalyserRef.current = analyser;\r\n\r\n const outputGain = outputCtx.createGain();\r\n outputGain.gain.value = 1;\r\n outputGainRef.current = outputGain;\r\n outputGain.connect(outputCtx.destination);\r\n\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${geminiApiKey}`;\r\n const ws = new WebSocket(wsUrl);\r\n sessionRef.current = ws;\r\n\r\n ws.onopen = () => {\r\n const setupMsg = {\r\n setup: {\r\n model: 'models/gemini-2.5-flash-native-audio-preview-09-2025',\r\n generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName } } } },\r\n systemInstruction: { parts: [{ text: systemInstruction }] }\r\n }\r\n };\r\n ws.send(JSON.stringify(setupMsg));\r\n };\r\n\r\n ws.onmessage = async (event) => {\r\n let data;\r\n if (event.data instanceof Blob) {\r\n const text = await event.data.text();\r\n try { data = JSON.parse(text); } catch (e) { return; }\r\n } else {\r\n try { data = JSON.parse(event.data); } catch (e) { return; }\r\n }\r\n\r\n if (data.setupComplete) {\r\n setConnectionState(ConnectionState.CONNECTED);\r\n\r\n const source = inputCtx.createMediaStreamSource(stream);\r\n sourceNodeRef.current = source;\r\n const processor = inputCtx.createScriptProcessor(2048, 1, 1);\r\n scriptProcessorRef.current = processor;\r\n\r\n processor.onaudioprocess = (e) => {\r\n if (isMuted || ws.readyState !== WebSocket.OPEN) return;\r\n const inputData = e.inputBuffer.getChannelData(0);\r\n const pcmBlob = createBlob(inputData);\r\n ws.send(JSON.stringify({ realtimeInput: { mediaChunks: [pcmBlob] } }));\r\n };\r\n\r\n source.connect(analyser);\r\n source.connect(processor);\r\n processor.connect(inputCtx.destination);\r\n }\r\n\r\n const audioData = data.serverContent?.modelTurn?.parts?.[0]?.inlineData?.data;\r\n if (audioData) {\r\n const ctx = outputAudioContextRef.current;\r\n if (!ctx) return;\r\n nextStartTimeRef.current = Math.max(nextStartTimeRef.current, ctx.currentTime);\r\n const audioBuffer = await decodeAudioData(decode(audioData), ctx, 24000, 1);\r\n const source = ctx.createBufferSource();\r\n source.buffer = audioBuffer;\r\n if (outputGainRef.current) source.connect(outputGainRef.current);\r\n else source.connect(ctx.destination);\r\n source.addEventListener('ended', () => sourcesRef.current.delete(source));\r\n source.start(nextStartTimeRef.current);\r\n nextStartTimeRef.current += audioBuffer.duration;\r\n sourcesRef.current.add(source);\r\n }\r\n\r\n if (data.serverContent?.interrupted) {\r\n sourcesRef.current.forEach(s => s.stop());\r\n sourcesRef.current.clear();\r\n nextStartTimeRef.current = 0;\r\n }\r\n };\r\n\r\n ws.onclose = () => setConnectionState(ConnectionState.DISCONNECTED);\r\n ws.onerror = () => {\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 setConnectionState(ConnectionState.ERROR);\r\n setErrorMsg(err.message || 'Failed to access microphone or connect.');\r\n cleanupAudio();\r\n }\r\n };\r\n\r\n const disconnect = useCallback(() => {\r\n callStartTimeRef.current = null;\r\n if (durationIntervalRef.current) { clearInterval(durationIntervalRef.current); durationIntervalRef.current = null; }\r\n setCallDuration(0);\r\n if (sessionRef.current) { try { sessionRef.current.close(); } catch (e) {} }\r\n cleanupAudio();\r\n setConnectionState(ConnectionState.DISCONNECTED);\r\n }, [cleanupAudio]);\r\n\r\n useEffect(() => {\r\n connect();\r\n return () => disconnect();\r\n }, []);\r\n\r\n const toggleMute = () => {\r\n setIsMuted(!isMuted);\r\n if (streamRef.current) streamRef.current.getAudioTracks().forEach(track => { track.enabled = isMuted; });\r\n };\r\n\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '32px', height: '100%', padding: '24px' }}>\r\n <div style={{ position: 'relative' }}>\r\n <div style={{\r\n width: '112px', height: '112px', borderRadius: '50%', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n border: `1px solid ${connectionState === ConnectionState.CONNECTED ? '#ffffff' : '#52525b'}`,\r\n boxShadow: connectionState === ConnectionState.CONNECTED ? '0 0 30px rgba(255,255,255,0.15)' : 'none',\r\n transition: 'all 0.3s'\r\n }}>\r\n {connectionState === ConnectionState.CONNECTING ? (\r\n <div style={{ width: '40px', height: '40px', border: '2px solid #ffffff', borderTopColor: 'transparent', borderRadius: '50%', animation: 'vox-spin 1s linear infinite' }} />\r\n ) : (\r\n <div style={{ padding: '20px', color: isMuted ? '#52525b' : '#ffffff' }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon />}\r\n </div>\r\n )}\r\n </div>\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <span style={{ position: 'absolute', bottom: '-4px', right: '-4px', display: 'flex', width: '12px', height: '12px' }}>\r\n <span style={{ position: 'absolute', display: 'inline-flex', width: '100%', height: '100%', borderRadius: '50%', background: '#ffffff', opacity: 0.75 }} />\r\n <span style={{ position: 'relative', display: 'inline-flex', borderRadius: '50%', width: '12px', height: '12px', background: '#ffffff' }} />\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div style={{ width: '100%', maxWidth: '280px', display: 'flex', flexDirection: 'column', gap: '16px' }}>\r\n <p style={{ textAlign: 'center', fontSize: '14px', fontWeight: 600, color: '#71717a', height: '20px' }}>\r\n {connectionState === ConnectionState.CONNECTING && 'Initializing...'}\r\n {connectionState === ConnectionState.CONNECTED && (isMuted ? 'Muted' : 'Listening...')}\r\n {connectionState === ConnectionState.ERROR && 'Connection error'}\r\n {connectionState === ConnectionState.DISCONNECTED && 'Disconnected'}\r\n </p>\r\n {connectionState === ConnectionState.CONNECTED && callDuration > 0 && (\r\n <p style={{ textAlign: 'center', fontSize: '11px', fontFamily: 'monospace', color: '#ffffff' }}>\r\n {Math.floor(callDuration / 60).toString().padStart(2, '0')}:{(callDuration % 60).toString().padStart(2, '0')}\r\n </p>\r\n )}\r\n <Visualizer analyser={inputAnalyserRef.current} isActive={connectionState === ConnectionState.CONNECTED && !isMuted} />\r\n </div>\r\n\r\n {connectionState === ConnectionState.ERROR && (\r\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '14px', fontWeight: 600, padding: '12px 16px', maxWidth: '280px', textAlign: 'center', color: '#71717a', background: '#18181b', border: '1px solid #3f3f46', borderRadius: '8px', gap: '12px' }}>\r\n <AlertCircleIcon />\r\n <span>{errorMsg}</span>\r\n </div>\r\n )}\r\n\r\n {connectionState === ConnectionState.CONNECTED && (\r\n <div style={{ display: 'flex', gap: '16px' }}>\r\n <button onClick={toggleMute} style={{\r\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\r\n background: isMuted ? '#27272a' : '#ffffff',\r\n color: isMuted ? '#71717a' : '#000000'\r\n }}>\r\n {isMuted ? <MicOffIcon /> : <MicIcon />}\r\n </button>\r\n <button onClick={() => { disconnect(); onEndCall?.(); }} style={{\r\n padding: '16px', borderRadius: '50%', border: 'none', cursor: 'pointer', transition: 'all 0.2s',\r\n background: '#dc2626', color: '#ffffff'\r\n }}>\r\n <PhoneOffIcon />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// Main VoxChat Component\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n geminiApiKey,\r\n apiUrl = 'https://your-server.com',\r\n agentName: propAgentName = 'VOX-01',\r\n voiceName: propVoiceName = 'Kore',\r\n systemInstruction: propSystemInstruction = 'You are a helpful AI assistant.',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 56,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n useServerConfig = false,\r\n configPollInterval = 10000\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [activeTab, setActiveTab] = useState<'text' | 'voice'>('text');\r\n const [isVoiceActive, setIsVoiceActive] = useState(false);\r\n \r\n const [serverConfig, setServerConfig] = useState<{\r\n name?: string;\r\n systemInstruction?: string;\r\n voiceName?: string;\r\n widgetStyle?: {\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n position?: 'bottom-right' | 'bottom-left';\r\n iconColor?: string;\r\n logoUrl?: string;\r\n };\r\n } | null>(null);\r\n const [serverGeminiApiKey, setServerGeminiApiKey] = useState<string | undefined>();\r\n const [configLoaded, setConfigLoaded] = useState(!useServerConfig);\r\n const [isInitialLoad, setIsInitialLoad] = useState(true);\r\n\r\n const fetchConfig = useCallback(() => {\r\n if (useServerConfig && apiKey && apiUrl) {\r\n fetch(`${apiUrl}/api/v1/config`, {\r\n headers: { 'x-api-key': apiKey }\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n if (data.agentConfig) {\r\n setServerConfig(data.agentConfig);\r\n }\r\n if (data.geminiApiKey) {\r\n setServerGeminiApiKey(data.geminiApiKey);\r\n }\r\n setConfigLoaded(true);\r\n setIsInitialLoad(false);\r\n })\r\n .catch(err => {\r\n console.error('[VOX] Failed to fetch server config:', err);\r\n setConfigLoaded(true);\r\n setIsInitialLoad(false);\r\n });\r\n }\r\n }, [useServerConfig, apiKey, apiUrl]);\r\n\r\n useEffect(() => {\r\n if (useServerConfig && apiKey && apiUrl) {\r\n fetchConfig();\r\n const intervalId = setInterval(fetchConfig, configPollInterval);\r\n return () => clearInterval(intervalId);\r\n }\r\n }, [useServerConfig, apiKey, apiUrl, fetchConfig, configPollInterval]);\r\n\r\n const agentName = serverConfig?.name || propAgentName;\r\n const voiceName = serverConfig?.voiceName || propVoiceName;\r\n const systemInstruction = serverConfig?.systemInstruction || propSystemInstruction;\r\n \r\n const finalButtonColor = serverConfig?.widgetStyle?.buttonColor || buttonColor || (theme === 'light' ? '#000000' : '#ffffff');\r\n const finalButtonSize = serverConfig?.widgetStyle?.buttonSize || buttonSize || 56;\r\n const finalBorderRadius = serverConfig?.widgetStyle?.borderRadius !== undefined ? serverConfig.widgetStyle.borderRadius : (borderRadius !== undefined ? borderRadius : 50);\r\n const finalPosition = serverConfig?.widgetStyle?.position || position || 'bottom-right';\r\n const finalIconColor = serverConfig?.widgetStyle?.iconColor || iconColor || (theme === 'light' ? '#ffffff' : '#000000');\r\n const finalLogoUrl = serverConfig?.widgetStyle?.logoUrl;\r\n\r\n const handleOpen = () => { setIsOpen(true); onOpen?.(); };\r\n const handleClose = () => { setIsOpen(false); setIsVoiceActive(false); setActiveTab('text'); onClose?.(); };\r\n\r\n const handleTabChange = (tab: 'text' | 'voice') => {\r\n if (tab === 'voice' && activeTab !== 'voice') {\r\n setActiveTab('voice');\r\n setIsVoiceActive(true);\r\n } else if (tab === 'text') {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n }\r\n };\r\n\r\n const handleEndCall = () => {\r\n setIsVoiceActive(false);\r\n setActiveTab('text');\r\n };\r\n\r\n const positionStyles = finalPosition === 'bottom-left' \r\n ? { bottom: '16px', left: '16px' } \r\n : { bottom: '16px', right: '16px' };\r\n\r\n return (\r\n <>\r\n <link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\" />\r\n <style>{`\r\n @keyframes vox-fade-in { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\r\n @keyframes vox-spin { to { transform: rotate(360deg); } }\r\n @keyframes vox-ping { 0% { transform: scale(1); opacity: 0.5; } 50% { transform: scale(1.15); opacity: 0; } 100% { transform: scale(1); opacity: 0; } }\r\n .vox-widget { animation: vox-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }\r\n `}</style>\r\n\r\n <div style={{ position: 'fixed', zIndex: 10000, display: 'flex', flexDirection: 'column', alignItems: finalPosition === '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), 360px)', height: '550px', maxHeight: '550px',\r\n background: '#000000', overflow: 'hidden', display: 'flex', flexDirection: 'column',\r\n border: '1px solid #3f3f46', boxShadow: '0 20px 40px -10px rgba(0,0,0,0.5)', borderRadius: '8px',\r\n transition: 'all 0.3s ease',\r\n fontFamily: '\"Plus Jakarta Sans\", sans-serif',\r\n WebkitFontSmoothing: 'antialiased', MozOsxFontSmoothing: 'grayscale',\r\n textAlign: 'left', boxSizing: 'border-box'\r\n }}>\r\n {/* Combined Header with Tabs */}\r\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 16px', flexShrink: 0, borderBottom: '1px solid #3f3f46', background: '#000000', fontFamily: '\"Plus Jakarta Sans\", sans-serif' }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\r\n <div style={{ width: '28px', height: '28px', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 0.3s ease', color: '#ffffff' }}>\r\n {finalLogoUrl ? (\r\n <img key={finalLogoUrl} src={finalLogoUrl} alt={agentName} style={{ width: '28px', height: '28px', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\r\n ) : (\r\n activeTab === 'voice' ? <MicIcon /> : <MessageCircleIcon />\r\n )}\r\n </div>\r\n <div>\r\n <h2 style={{ color: '#ffffff', fontWeight: 600, fontSize: '12px', margin: 0, transition: 'all 0.3s ease', lineHeight: '1.2', fontFamily: 'inherit' }}>{agentName}</h2>\r\n <p style={{ color: '#a1a1aa', fontSize: '11px', fontWeight: 400, margin: 0, display: 'flex', alignItems: 'center', lineHeight: '1.2', fontFamily: 'inherit' }}>\r\n <span style={{ width: '6px', height: '6px', background: '#ffffff', borderRadius: '50%', marginRight: '6px' }} />\r\n Active\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '2px', padding: '2px', borderRadius: '8px', background: '#18181b' }}>\r\n <button onClick={() => handleTabChange('text')} style={{\r\n padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',\r\n background: activeTab === 'text' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'text' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\r\n boxShadow: activeTab === 'text' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\r\n }}>\r\n Text\r\n </button>\r\n <button onClick={() => handleTabChange('voice')} style={{\r\n padding: '6px 12px', fontSize: '11px', fontWeight: 500, borderRadius: '6px',\r\n background: activeTab === 'voice' ? '#27272a' : 'transparent', border: 'none', cursor: 'pointer', color: activeTab === 'voice' ? '#ffffff' : '#71717a', transition: 'all 0.2s',\r\n boxShadow: activeTab === 'voice' ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'\r\n }}>\r\n Voice\r\n </button>\r\n </div>\r\n\r\n <button onClick={handleClose} style={{ background: 'none', border: 'none', color: '#a1a1aa', cursor: 'pointer', padding: '4px', transition: 'color 0.2s' }}>\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, overflow: 'hidden', position: 'relative', background: '#000000' }}>\r\n {activeTab === 'text' ? (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\r\n ) : (\r\n isVoiceActive ? (\r\n <VoiceInterface geminiApiKey={geminiApiKey || serverGeminiApiKey || ''} voiceName={voiceName} systemInstruction={systemInstruction} onEndCall={handleEndCall} />\r\n ) : (\r\n <TextInterface apiKey={apiKey} apiUrl={apiUrl} agentName={agentName} systemInstruction={systemInstruction} logoUrl={finalLogoUrl} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!isOpen && (!useServerConfig || configLoaded) && (\r\n <button onClick={handleOpen} style={{\r\n width: `${finalButtonSize}px`, height: `${finalButtonSize}px`, \r\n borderRadius: `${finalBorderRadius}px`,\r\n background: finalButtonColor, color: finalIconColor, border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n boxShadow: '0 4px 20px rgba(0,0,0,0.3)', \r\n transition: 'all 0.3s ease, transform 0.2s',\r\n opacity: isInitialLoad && useServerConfig ? 0 : 1\r\n }}>\r\n {finalLogoUrl ? (\r\n <img src={finalLogoUrl} alt=\"Chat\" style={{ width: '60%', height: '60%', objectFit: 'contain', transition: 'opacity 0.3s ease' }} />\r\n ) : (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsx","_jsxs","useRef","useEffect","useState","useCallback","_Fragment"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vox-ai-react",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "VOX AI Chat Widget for React applications with real-time configuration updates",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -42,5 +42,8 @@
|
|
|
42
42
|
"repository": {
|
|
43
43
|
"type": "git",
|
|
44
44
|
"url": "git+https://github.com/vox-ai/vox-react.git"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"vox-ai-react": "^1.6.0"
|
|
45
48
|
}
|
|
46
49
|
}
|