@unctad-ai/voice-agent-ui 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/VoiceAgentProvider.d.ts +6 -0
  2. package/dist/VoiceAgentProvider.d.ts.map +1 -0
  3. package/dist/VoiceAgentProvider.js +8 -0
  4. package/dist/VoiceAgentProvider.js.map +1 -0
  5. package/dist/components/AgentAvatar.d.ts +16 -0
  6. package/dist/components/AgentAvatar.d.ts.map +1 -0
  7. package/dist/components/AgentAvatar.js +186 -0
  8. package/dist/components/AgentAvatar.js.map +1 -0
  9. package/dist/components/GlassCopilotPanel.d.ts +13 -0
  10. package/dist/components/GlassCopilotPanel.d.ts.map +1 -0
  11. package/dist/components/GlassCopilotPanel.js +438 -0
  12. package/dist/components/GlassCopilotPanel.js.map +1 -0
  13. package/dist/components/PipelineMetricsBar.d.ts +7 -0
  14. package/dist/components/PipelineMetricsBar.d.ts.map +1 -0
  15. package/dist/components/PipelineMetricsBar.js +62 -0
  16. package/dist/components/PipelineMetricsBar.js.map +1 -0
  17. package/dist/components/VoiceA11yAnnouncer.d.ts +8 -0
  18. package/dist/components/VoiceA11yAnnouncer.d.ts.map +1 -0
  19. package/dist/components/VoiceA11yAnnouncer.js +32 -0
  20. package/dist/components/VoiceA11yAnnouncer.js.map +1 -0
  21. package/dist/components/VoiceControls.d.ts +9 -0
  22. package/dist/components/VoiceControls.d.ts.map +1 -0
  23. package/dist/components/VoiceControls.js +60 -0
  24. package/dist/components/VoiceControls.js.map +1 -0
  25. package/dist/components/VoiceCopilotFAB.d.ts +9 -0
  26. package/dist/components/VoiceCopilotFAB.d.ts.map +1 -0
  27. package/dist/components/VoiceCopilotFAB.js +12 -0
  28. package/dist/components/VoiceCopilotFAB.js.map +1 -0
  29. package/dist/components/VoiceDotRing.d.ts +9 -0
  30. package/dist/components/VoiceDotRing.d.ts.map +1 -0
  31. package/dist/components/VoiceDotRing.js +64 -0
  32. package/dist/components/VoiceDotRing.js.map +1 -0
  33. package/dist/components/VoiceErrorBoundary.d.ts +19 -0
  34. package/dist/components/VoiceErrorBoundary.d.ts.map +1 -0
  35. package/dist/components/VoiceErrorBoundary.js +24 -0
  36. package/dist/components/VoiceErrorBoundary.js.map +1 -0
  37. package/dist/components/VoiceErrorDisplay.d.ts +8 -0
  38. package/dist/components/VoiceErrorDisplay.d.ts.map +1 -0
  39. package/dist/components/VoiceErrorDisplay.js +94 -0
  40. package/dist/components/VoiceErrorDisplay.js.map +1 -0
  41. package/dist/components/VoiceOnboarding.d.ts +8 -0
  42. package/dist/components/VoiceOnboarding.d.ts.map +1 -0
  43. package/dist/components/VoiceOnboarding.js +28 -0
  44. package/dist/components/VoiceOnboarding.js.map +1 -0
  45. package/dist/components/VoiceOrb.d.ts +10 -0
  46. package/dist/components/VoiceOrb.d.ts.map +1 -0
  47. package/dist/components/VoiceOrb.js +236 -0
  48. package/dist/components/VoiceOrb.js.map +1 -0
  49. package/dist/components/VoiceOverlay.d.ts +9 -0
  50. package/dist/components/VoiceOverlay.d.ts.map +1 -0
  51. package/dist/components/VoiceOverlay.js +199 -0
  52. package/dist/components/VoiceOverlay.js.map +1 -0
  53. package/dist/components/VoiceSettingsView.d.ts +7 -0
  54. package/dist/components/VoiceSettingsView.d.ts.map +1 -0
  55. package/dist/components/VoiceSettingsView.js +109 -0
  56. package/dist/components/VoiceSettingsView.js.map +1 -0
  57. package/dist/components/VoiceToolCard.d.ts +11 -0
  58. package/dist/components/VoiceToolCard.d.ts.map +1 -0
  59. package/dist/components/VoiceToolCard.js +37 -0
  60. package/dist/components/VoiceToolCard.js.map +1 -0
  61. package/dist/components/VoiceTranscript.d.ts +13 -0
  62. package/dist/components/VoiceTranscript.d.ts.map +1 -0
  63. package/dist/components/VoiceTranscript.js +313 -0
  64. package/dist/components/VoiceTranscript.js.map +1 -0
  65. package/dist/components/VoiceWaveformCanvas.d.ts +9 -0
  66. package/dist/components/VoiceWaveformCanvas.d.ts.map +1 -0
  67. package/dist/components/VoiceWaveformCanvas.js +91 -0
  68. package/dist/components/VoiceWaveformCanvas.js.map +1 -0
  69. package/dist/contexts/VoiceSettingsContext.d.ts +37 -0
  70. package/dist/contexts/VoiceSettingsContext.d.ts.map +1 -0
  71. package/dist/contexts/VoiceSettingsContext.js +89 -0
  72. package/dist/contexts/VoiceSettingsContext.js.map +1 -0
  73. package/dist/index.d.ts +22 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +22 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/utils.d.ts +3 -0
  78. package/dist/utils.d.ts.map +1 -0
  79. package/dist/utils.js +6 -0
  80. package/dist/utils.js.map +1 -0
  81. package/package.json +53 -0
@@ -0,0 +1,236 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useEffect, useCallback, useState } from 'react';
3
+ import { createNoise3D } from 'simplex-noise';
4
+ import { ORB_NUM_POINTS, ORB_LERP_SPEED, useSiteConfig } from '@unctad-ai/voice-agent-core';
5
+ /** Glow color that pulses around the orb per state */
6
+ const STATE_GLOW = {
7
+ idle: 'rgba(59, 130, 246, 0.25)',
8
+ listening: 'rgba(219, 33, 41, 0.45)',
9
+ processing: 'rgba(245, 158, 11, 0.4)',
10
+ speaking: 'rgba(20, 184, 166, 0.4)',
11
+ error: 'rgba(220, 38, 38, 0.4)',
12
+ };
13
+ function buildStateConfig(primaryColor) {
14
+ return {
15
+ idle: {
16
+ colors: ['#1E3A5F', '#3B82F6'],
17
+ noiseSpeed: 0.3,
18
+ noiseMag: 8,
19
+ baseScale: 0.975,
20
+ breathAmp: 0.025,
21
+ breathSpeed: 0.25,
22
+ rotation: 0,
23
+ shimmer: false,
24
+ },
25
+ listening: {
26
+ colors: [primaryColor, '#F59E0B'],
27
+ noiseSpeed: 0.6,
28
+ noiseMag: 18,
29
+ baseScale: 1.0,
30
+ breathAmp: 0.04,
31
+ breathSpeed: 0.5,
32
+ rotation: 0,
33
+ shimmer: false,
34
+ },
35
+ processing: {
36
+ colors: ['#D97706', '#FBBF24'],
37
+ noiseSpeed: 1.0,
38
+ noiseMag: 14,
39
+ baseScale: 1.0,
40
+ breathAmp: 0.02,
41
+ breathSpeed: 0.8,
42
+ rotation: 0.4,
43
+ shimmer: true,
44
+ },
45
+ speaking: {
46
+ colors: ['#1B7A50', '#2DD4BF'],
47
+ noiseSpeed: 0.5,
48
+ noiseMag: 16,
49
+ baseScale: 1.0,
50
+ breathAmp: 0.05,
51
+ breathSpeed: 0.4,
52
+ rotation: 0,
53
+ shimmer: false,
54
+ },
55
+ error: {
56
+ colors: ['#DC2626', '#991B1B'],
57
+ noiseSpeed: 1.4,
58
+ noiseMag: 22,
59
+ baseScale: 0.95,
60
+ breathAmp: 0.01,
61
+ breathSpeed: 1.2,
62
+ rotation: 0,
63
+ shimmer: false,
64
+ },
65
+ };
66
+ }
67
+ const NUM_POINTS = ORB_NUM_POINTS;
68
+ const LERP_SPEED = ORB_LERP_SPEED;
69
+ function useReducedMotion() {
70
+ const [reduced, setReduced] = useState(() => window.matchMedia('(prefers-reduced-motion: reduce)').matches);
71
+ useEffect(() => {
72
+ const mql = window.matchMedia('(prefers-reduced-motion: reduce)');
73
+ const handler = (e) => setReduced(e.matches);
74
+ mql.addEventListener('change', handler);
75
+ return () => mql.removeEventListener('change', handler);
76
+ }, []);
77
+ return reduced;
78
+ }
79
+ function lerp(a, b, t) {
80
+ return a + (b - a) * t;
81
+ }
82
+ function lerpColor(a, b, t) {
83
+ const parseHex = (h) => [
84
+ parseInt(h.slice(1, 3), 16),
85
+ parseInt(h.slice(3, 5), 16),
86
+ parseInt(h.slice(5, 7), 16),
87
+ ];
88
+ const ca = parseHex(a);
89
+ const cb = parseHex(b);
90
+ const r = Math.round(lerp(ca[0], cb[0], t));
91
+ const g = Math.round(lerp(ca[1], cb[1], t));
92
+ const bl = Math.round(lerp(ca[2], cb[2], t));
93
+ return `#${((1 << 24) | (r << 16) | (g << 8) | bl).toString(16).slice(1)}`;
94
+ }
95
+ export default function VoiceOrb({ state, getAmplitude, size = 200 }) {
96
+ const config = useSiteConfig();
97
+ const STATE_CONFIG = buildStateConfig(config.colors.primary);
98
+ const svgRef = useRef(null);
99
+ const rafRef = useRef(0);
100
+ const noise3D = useRef(createNoise3D());
101
+ const prefersReduced = useReducedMotion();
102
+ const reducedRef = useRef(prefersReduced);
103
+ reducedRef.current = prefersReduced;
104
+ // Animated (lerped) config values that transition smoothly between states
105
+ const animRef = useRef({
106
+ noiseSpeed: STATE_CONFIG.idle.noiseSpeed,
107
+ noiseMag: STATE_CONFIG.idle.noiseMag,
108
+ baseScale: STATE_CONFIG.idle.baseScale,
109
+ breathAmp: STATE_CONFIG.idle.breathAmp,
110
+ breathSpeed: STATE_CONFIG.idle.breathSpeed,
111
+ rotation: STATE_CONFIG.idle.rotation,
112
+ color0: STATE_CONFIG.idle.colors[0],
113
+ color1: STATE_CONFIG.idle.colors[1],
114
+ shimmer: 0,
115
+ errorShake: 0,
116
+ });
117
+ const stateRef = useRef(state);
118
+ stateRef.current = state;
119
+ const getAmplitudeRef = useRef(getAmplitude);
120
+ getAmplitudeRef.current = getAmplitude;
121
+ const stateConfigRef = useRef(STATE_CONFIG);
122
+ stateConfigRef.current = STATE_CONFIG;
123
+ const buildPath = useCallback((time, a) => {
124
+ const cx = size / 2;
125
+ const cy = size / 2;
126
+ const baseR = size * 0.35;
127
+ const amp = getAmplitudeRef.current();
128
+ // amplitude influences noise magnitude
129
+ const mag = a.noiseMag + amp * 20;
130
+ const points = [];
131
+ for (let i = 0; i < NUM_POINTS; i++) {
132
+ const angle = (i / NUM_POINTS) * Math.PI * 2;
133
+ const nx = Math.cos(angle);
134
+ const ny = Math.sin(angle);
135
+ const noiseVal = noise3D.current(nx * 1.5, ny * 1.5, time * a.noiseSpeed);
136
+ const r = baseR + noiseVal * mag;
137
+ points.push([cx + Math.cos(angle) * r, cy + Math.sin(angle) * r]);
138
+ }
139
+ // Build smooth closed path with cubic beziers
140
+ let d = `M ${points[0][0]},${points[0][1]} `;
141
+ for (let i = 0; i < NUM_POINTS; i++) {
142
+ const curr = points[i];
143
+ const next = points[(i + 1) % NUM_POINTS];
144
+ const prev = points[(i - 1 + NUM_POINTS) % NUM_POINTS];
145
+ const next2 = points[(i + 2) % NUM_POINTS];
146
+ const cp1x = curr[0] + (next[0] - prev[0]) / 6;
147
+ const cp1y = curr[1] + (next[1] - prev[1]) / 6;
148
+ const cp2x = next[0] - (next2[0] - curr[0]) / 6;
149
+ const cp2y = next[1] - (next2[1] - curr[1]) / 6;
150
+ d += `C ${cp1x},${cp1y} ${cp2x},${cp2y} ${next[0]},${next[1]} `;
151
+ }
152
+ d += 'Z';
153
+ return d;
154
+ }, [size]);
155
+ useEffect(() => {
156
+ let startTime = null;
157
+ const tick = (timestamp) => {
158
+ if (startTime === null)
159
+ startTime = timestamp;
160
+ const elapsed = (timestamp - startTime) / 1000;
161
+ const target = stateConfigRef.current[stateRef.current];
162
+ const a = animRef.current;
163
+ // When prefers-reduced-motion is active, dampen animations significantly
164
+ const rd = reducedRef.current ? 0.15 : 1;
165
+ // Lerp all animated values toward target
166
+ a.noiseSpeed = lerp(a.noiseSpeed, target.noiseSpeed * rd, LERP_SPEED);
167
+ a.noiseMag = lerp(a.noiseMag, target.noiseMag * rd, LERP_SPEED);
168
+ a.baseScale = lerp(a.baseScale, target.baseScale, LERP_SPEED);
169
+ a.breathAmp = lerp(a.breathAmp, target.breathAmp * rd, LERP_SPEED);
170
+ a.breathSpeed = lerp(a.breathSpeed, target.breathSpeed * rd, LERP_SPEED);
171
+ a.rotation = lerp(a.rotation, target.rotation * rd, LERP_SPEED);
172
+ a.shimmer = lerp(a.shimmer, target.shimmer ? (reducedRef.current ? 0 : 1) : 0, LERP_SPEED);
173
+ a.color0 = lerpColor(a.color0, target.colors[0], LERP_SPEED);
174
+ a.color1 = lerpColor(a.color1, target.colors[1], LERP_SPEED);
175
+ // Error shake decays
176
+ if (stateRef.current === 'error') {
177
+ a.errorShake = lerp(a.errorShake, 1, 0.1);
178
+ }
179
+ else {
180
+ a.errorShake = lerp(a.errorShake, 0, 0.08);
181
+ }
182
+ const svg = svgRef.current;
183
+ if (!svg) {
184
+ rafRef.current = requestAnimationFrame(tick);
185
+ return;
186
+ }
187
+ // Breathing scale
188
+ const breath = a.baseScale + Math.sin(elapsed * Math.PI * 2 * a.breathSpeed) * a.breathAmp;
189
+ // Error shake offset
190
+ const shakeX = a.errorShake * Math.sin(elapsed * 30) * 3 * (1 - Math.min(elapsed * 0.3, 1));
191
+ // Rotation
192
+ const rot = elapsed * a.rotation * 360;
193
+ // Update transform
194
+ const group = svg.querySelector('[data-orb-group]');
195
+ if (group) {
196
+ group.setAttribute('transform', `translate(${size / 2 + shakeX}, ${size / 2}) scale(${breath}) rotate(${rot}) translate(${-size / 2}, ${-size / 2})`);
197
+ }
198
+ // Update blob path
199
+ const path = svg.querySelector('[data-orb-path]');
200
+ if (path) {
201
+ path.setAttribute('d', buildPath(elapsed, a));
202
+ }
203
+ // Update gradient colors
204
+ const stop0 = svg.querySelector('[data-stop-0]');
205
+ const stop1 = svg.querySelector('[data-stop-1]');
206
+ if (stop0)
207
+ stop0.setAttribute('stop-color', a.color0);
208
+ if (stop1)
209
+ stop1.setAttribute('stop-color', a.color1);
210
+ // Shimmer opacity
211
+ const shimmerEl = svg.querySelector('[data-shimmer]');
212
+ if (shimmerEl) {
213
+ const shimmerOpacity = a.shimmer * (0.15 + Math.sin(elapsed * 6) * 0.1);
214
+ shimmerEl.setAttribute('opacity', String(shimmerOpacity));
215
+ }
216
+ // Ambient glow — color follows state, opacity pulses with breath
217
+ const glowEl = svg.querySelector('[data-orb-glow]');
218
+ if (glowEl) {
219
+ const amp = getAmplitudeRef.current();
220
+ const glowPulse = 0.35 + Math.sin(elapsed * Math.PI * 2 * a.breathSpeed) * 0.15 + amp * 0.3;
221
+ glowEl.setAttribute('opacity', String(Math.min(glowPulse, 1)));
222
+ glowEl.setAttribute('fill', STATE_GLOW[stateRef.current]);
223
+ }
224
+ rafRef.current = requestAnimationFrame(tick);
225
+ };
226
+ rafRef.current = requestAnimationFrame(tick);
227
+ return () => cancelAnimationFrame(rafRef.current);
228
+ }, [size, buildPath]);
229
+ const idRef = useRef(null);
230
+ idRef.current ??= Math.random().toString(36).slice(2, 8);
231
+ const gradientId = `orb-gradient-${idRef.current}`;
232
+ const shimmerId = `orb-shimmer-${idRef.current}`;
233
+ const glowFilterId = `orb-glow-${idRef.current}`;
234
+ return (_jsxs("svg", { ref: svgRef, width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "select-none", style: { overflow: 'visible' }, "aria-hidden": "true", children: [_jsxs("defs", { children: [_jsxs("radialGradient", { id: gradientId, cx: "40%", cy: "35%", r: "60%", children: [_jsx("stop", { "data-stop-0": true, offset: "0%", stopColor: STATE_CONFIG.idle.colors[0] }), _jsx("stop", { "data-stop-1": true, offset: "100%", stopColor: STATE_CONFIG.idle.colors[1] })] }), _jsxs("radialGradient", { id: shimmerId, cx: "30%", cy: "30%", r: "50%", children: [_jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0.6" }), _jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })] }), _jsx("filter", { id: glowFilterId, x: "-50%", y: "-50%", width: "200%", height: "200%", children: _jsx("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "18" }) })] }), _jsx("circle", { "data-orb-glow": true, cx: size / 2, cy: size / 2, r: size * 0.38, fill: STATE_GLOW.idle, opacity: "0.5", filter: `url(#${glowFilterId})` }), _jsxs("g", { "data-orb-group": true, children: [_jsx("path", { "data-orb-path": true, fill: `url(#${gradientId})` }), _jsx("circle", { "data-shimmer": true, cx: size / 2, cy: size / 2, r: size * 0.3, fill: `url(#${shimmerId})`, opacity: "0" })] })] }));
235
+ }
236
+ //# sourceMappingURL=VoiceOrb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceOrb.js","sourceRoot":"","sources":["../../src/components/VoiceOrb.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { OrbState } from '@unctad-ai/voice-agent-core';
2
+ interface VoiceOverlayProps {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ onStateChange?: (orbState: OrbState) => void;
6
+ }
7
+ export default function VoiceOverlay({ isOpen, onClose, onStateChange }: VoiceOverlayProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
9
+ //# sourceMappingURL=VoiceOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceOverlay.d.ts","sourceRoot":"","sources":["../../src/components/VoiceOverlay.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,6BAA6B,CAAC;AAoB7E,UAAU,iBAAiB;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC9C;AAiWD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,iBAAiB,kDAiCzF"}
@@ -0,0 +1,199 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback, useRef } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { motion } from 'motion/react';
5
+ import { X } from 'lucide-react';
6
+ import { useVoiceAgent, voiceStateToOrbState } from '@unctad-ai/voice-agent-core';
7
+ import { IDLE_TIMEOUT_MS, WIND_DOWN_MS, EXIT_ANIMATION_MS } from '@unctad-ai/voice-agent-core';
8
+ import { useVoiceSettings } from '../contexts/VoiceSettingsContext';
9
+ import VoiceOrb from './VoiceOrb';
10
+ import VoiceWaveformCanvas from './VoiceWaveformCanvas';
11
+ import VoiceTranscript from './VoiceTranscript';
12
+ import VoiceToolCard from './VoiceToolCard';
13
+ import VoiceControls from './VoiceControls';
14
+ import VoiceErrorBoundary from './VoiceErrorBoundary';
15
+ import VoiceErrorDisplay from './VoiceErrorDisplay';
16
+ /** Inline z-index guarantees stacking above all page elements */
17
+ const OVERLAY_Z = 2147483647;
18
+ /** Liquid spring configs for entrance choreography */
19
+ const SPRING_BOUNCY = { type: 'spring', damping: 20, stiffness: 180 };
20
+ const SPRING_SMOOTH = { type: 'spring', damping: 28, stiffness: 160 };
21
+ /** Exit easing — smooth start, accelerating pull */
22
+ const EXIT_EASE = [0.4, 0, 0.7, 0.2];
23
+ function WiredOverlayContent({ isMobile, onClose, onStateChange, isClosing, }) {
24
+ const orbSize = isMobile ? 120 : 200;
25
+ const { settings, volumeRef, speedRef } = useVoiceSettings();
26
+ const { state, start, stop, messages, isLLMLoading, getAmplitude, analyser, sendTextMessage, voiceError, dismissError, } = useVoiceAgent({ settings, volumeRef, speedRef });
27
+ const [toolResult, setToolResult] = useState(null);
28
+ const orbState = voiceStateToOrbState(state);
29
+ // Notify parent of state changes for a11y announcer
30
+ const onStateChangeRef = useRef(onStateChange);
31
+ useEffect(() => {
32
+ onStateChangeRef.current = onStateChange;
33
+ });
34
+ useEffect(() => {
35
+ onStateChangeRef.current?.(orbState);
36
+ }, [orbState]);
37
+ // Start VAD when overlay mounts, force-stop on unmount (bypass debounce)
38
+ const startRef = useRef(start);
39
+ const stopRef = useRef(stop);
40
+ useEffect(() => {
41
+ startRef.current = start;
42
+ }, [start]);
43
+ useEffect(() => {
44
+ stopRef.current = stop;
45
+ }, [stop]);
46
+ useEffect(() => {
47
+ startRef.current();
48
+ return () => stopRef.current(true);
49
+ }, []);
50
+ // Stop VAD immediately when exit starts
51
+ useEffect(() => {
52
+ if (isClosing)
53
+ stop();
54
+ }, [isClosing, stop]);
55
+ // --- Idle timeout: auto-close after 30s of no user activity ---
56
+ const [isWindingDown, setIsWindingDown] = useState(false);
57
+ const idleTimerRef = useRef(null);
58
+ const windDownTimerRef = useRef(null);
59
+ const onCloseRef = useRef(onClose);
60
+ useEffect(() => {
61
+ onCloseRef.current = onClose;
62
+ });
63
+ useEffect(() => {
64
+ const clear = () => {
65
+ if (idleTimerRef.current)
66
+ clearTimeout(idleTimerRef.current);
67
+ if (windDownTimerRef.current)
68
+ clearTimeout(windDownTimerRef.current);
69
+ idleTimerRef.current = null;
70
+ windDownTimerRef.current = null;
71
+ };
72
+ if (isClosing || state === 'PROCESSING' || state === 'AI_SPEAKING') {
73
+ clear();
74
+ setIsWindingDown(false);
75
+ return;
76
+ }
77
+ clear();
78
+ setIsWindingDown(false);
79
+ windDownTimerRef.current = setTimeout(() => {
80
+ setIsWindingDown(true);
81
+ }, IDLE_TIMEOUT_MS - WIND_DOWN_MS);
82
+ idleTimerRef.current = setTimeout(() => {
83
+ onCloseRef.current();
84
+ }, IDLE_TIMEOUT_MS);
85
+ return clear;
86
+ }, [state, isClosing]);
87
+ const handleTextSubmit = useCallback((text) => {
88
+ sendTextMessage(text);
89
+ }, [sendTextMessage]);
90
+ const isListening = state === 'LISTENING' || state === 'USER_SPEAKING';
91
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-6 h-full px-6", style: { pointerEvents: 'none' }, children: [_jsxs(motion.div, { initial: { opacity: 0, scale: 0.15 }, animate: isClosing
92
+ ? { opacity: 0, scale: 0 }
93
+ : { opacity: isWindingDown ? 0.3 : 1, scale: isWindingDown ? 0.92 : 1 }, transition: isClosing
94
+ ? { duration: 0.3, ease: EXIT_EASE, delay: 0.15 }
95
+ : isWindingDown
96
+ ? { duration: WIND_DOWN_MS / 1000, ease: 'easeOut' }
97
+ : { ...SPRING_BOUNCY, delay: 0.1 }, className: "relative flex items-center justify-center", style: { width: orbSize + 100, height: orbSize + 100, pointerEvents: 'auto' }, children: [_jsx("div", { className: "absolute rounded-full", style: {
98
+ width: orbSize + 100,
99
+ height: orbSize + 100,
100
+ backdropFilter: 'blur(2px)',
101
+ WebkitBackdropFilter: 'blur(2px)',
102
+ filter: 'url(#liquid-glass-orb)',
103
+ isolation: 'isolate',
104
+ } }), _jsx("div", { className: "absolute rounded-full pointer-events-none", style: {
105
+ width: orbSize + 100,
106
+ height: orbSize + 100,
107
+ backgroundColor: 'rgba(255, 255, 255, 0.02)',
108
+ border: '1px solid rgba(255, 255, 255, 0.15)',
109
+ boxShadow: '0 6px 24px rgba(0, 0, 0, 0.08), inset 0 0 20px -5px rgba(255, 255, 255, 0.3)',
110
+ } }), _jsx("div", { className: "absolute rounded-full pointer-events-none", style: {
111
+ width: orbSize + 100,
112
+ height: orbSize + 100,
113
+ background: 'radial-gradient(ellipse 70% 40% at 50% 12%, rgba(255,255,255,0.2) 0%, transparent 55%)',
114
+ } }), _jsx(VoiceWaveformCanvas, { analyserNode: analyser, state: orbState, size: orbSize + 100 }), _jsx("div", { className: "absolute rounded-full", style: { width: orbSize, height: orbSize }, children: _jsx(VoiceOrb, { state: orbState, getAmplitude: getAmplitude, size: orbSize }) })] }), _jsx(motion.div, { initial: { opacity: 0, y: 24 }, animate: isClosing ? { opacity: 0, y: 16 } : { opacity: 1, y: 0 }, transition: isClosing
115
+ ? { duration: 0.25, ease: EXIT_EASE, delay: 0.08 }
116
+ : { ...SPRING_SMOOTH, delay: 0.3 }, children: _jsx(VoiceTranscript, { messages: messages, isTyping: state === 'AI_SPEAKING' || isLLMLoading }) }), _jsx("div", { style: { pointerEvents: 'auto' }, children: _jsx(VoiceErrorDisplay, { error: voiceError, onDismiss: dismissError }) }), _jsx("div", { style: { pointerEvents: 'auto' }, children: _jsx(VoiceToolCard, { result: toolResult, onDismiss: () => setToolResult(null) }) }), _jsx(motion.div, { initial: { opacity: 0, y: 48 }, animate: isClosing ? { opacity: 0, y: 30 } : { opacity: 1, y: 0 }, transition: isClosing
117
+ ? { duration: 0.25, ease: EXIT_EASE, delay: 0 }
118
+ : { ...SPRING_SMOOTH, delay: 0.4 }, className: "w-full", style: { pointerEvents: 'auto' }, children: _jsx(VoiceControls, { state: state, onTextSubmit: handleTextSubmit, isListening: isListening }) })] }));
119
+ }
120
+ function OverlayPortal({ isOpen, isClosing, onClose, onStateChange, isMobile, }) {
121
+ if (!isOpen)
122
+ return null;
123
+ return createPortal(_jsxs(_Fragment, { children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "0", height: "0", style: { position: 'absolute', overflow: 'hidden' }, "aria-hidden": "true", children: _jsx("defs", { children: _jsxs("filter", { id: "liquid-glass-orb", x: "0%", y: "0%", width: "100%", height: "100%", children: [_jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.008 0.008", numOctaves: "2", seed: "92", result: "noise" }), _jsx("feGaussianBlur", { in: "noise", stdDeviation: "2", result: "blurred_noise" }), _jsx("feDisplacementMap", { in: "SourceGraphic", in2: "blurred_noise", scale: "50", xChannelSelector: "R", yChannelSelector: "G" })] }) }) }), _jsx(motion.div, { initial: { opacity: 0 }, animate: isClosing ? { opacity: 0 } : { opacity: 1 }, transition: {
124
+ duration: isClosing ? 0.35 : 0.4,
125
+ ease: 'easeOut',
126
+ delay: isClosing ? 0.2 : 0,
127
+ }, "aria-hidden": "true", style: {
128
+ position: 'fixed',
129
+ inset: 0,
130
+ zIndex: OVERLAY_Z,
131
+ pointerEvents: 'none',
132
+ backgroundColor: 'rgba(0, 0, 0, 0.15)',
133
+ } }, "voice-overlay-bg"), _jsx(motion.div, { initial: { opacity: 0, y: 80 }, animate: isClosing ? { opacity: 0, y: 60 } : { opacity: 1, y: 0 }, transition: isClosing
134
+ ? { duration: 0.3, ease: EXIT_EASE, delay: 0.2 }
135
+ : { duration: 0.6, ease: [0.22, 1, 0.36, 1], delay: 0.05 }, "aria-hidden": "true", style: {
136
+ position: 'fixed',
137
+ bottom: 0,
138
+ left: 0,
139
+ right: 0,
140
+ height: '28rem',
141
+ zIndex: OVERLAY_Z,
142
+ pointerEvents: 'none',
143
+ background: 'linear-gradient(to top, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.15) 40%, transparent 100%)',
144
+ } }, "voice-overlay-gradient"), _jsxs("div", { role: "dialog", "aria-label": "Voice Assistant", "aria-modal": "false", style: {
145
+ position: 'fixed',
146
+ inset: 0,
147
+ zIndex: OVERLAY_Z,
148
+ pointerEvents: 'none',
149
+ display: 'flex',
150
+ alignItems: 'center',
151
+ justifyContent: 'center',
152
+ }, children: [_jsx(motion.button, { initial: { opacity: 0, scale: 0.7 }, animate: isClosing ? { opacity: 0, scale: 0.7 } : { opacity: 1, scale: 1 }, transition: isClosing
153
+ ? { duration: 0.2, ease: EXIT_EASE, delay: 0.06 }
154
+ : { ...SPRING_SMOOTH, delay: 0.35 }, onClick: onClose, className: "absolute top-6 right-6 flex items-center justify-center rounded-full transition-all duration-200 cursor-pointer hover:scale-110", style: {
155
+ pointerEvents: 'auto',
156
+ zIndex: OVERLAY_Z,
157
+ width: 44,
158
+ height: 44,
159
+ backgroundColor: 'rgba(255, 255, 255, 0.12)',
160
+ border: '1px solid rgba(255, 255, 255, 0.25)',
161
+ backdropFilter: 'blur(12px)',
162
+ WebkitBackdropFilter: 'blur(12px)',
163
+ color: 'rgba(255, 255, 255, 0.85)',
164
+ }, "aria-label": "Close voice assistant", children: _jsx(X, { className: "h-5 w-5" }) }), _jsx("div", { className: "w-full h-full", style: { pointerEvents: 'none' }, children: _jsx(WiredOverlayContent, { isMobile: isMobile, onClose: onClose, onStateChange: onStateChange, isClosing: isClosing }) })] })] }), document.body);
165
+ }
166
+ function useIsMobile(breakpoint = 768) {
167
+ const [isMobile, setIsMobile] = useState(() => window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches);
168
+ useEffect(() => {
169
+ const mql = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
170
+ const handler = (e) => setIsMobile(e.matches);
171
+ mql.addEventListener('change', handler);
172
+ return () => mql.removeEventListener('change', handler);
173
+ }, [breakpoint]);
174
+ return isMobile;
175
+ }
176
+ export default function VoiceOverlay({ isOpen, onClose, onStateChange }) {
177
+ const isMobile = useIsMobile();
178
+ const [isClosing, setIsClosing] = useState(false);
179
+ const closeTimerRef = useRef(null);
180
+ const handleClose = useCallback(() => {
181
+ if (isClosing)
182
+ return;
183
+ setIsClosing(true);
184
+ closeTimerRef.current = setTimeout(() => {
185
+ setIsClosing(false);
186
+ onClose();
187
+ }, EXIT_ANIMATION_MS);
188
+ }, [isClosing, onClose]);
189
+ useEffect(() => {
190
+ return () => {
191
+ if (closeTimerRef.current != null)
192
+ clearTimeout(closeTimerRef.current);
193
+ };
194
+ }, []);
195
+ if (!isOpen)
196
+ return null;
197
+ return (_jsx(VoiceErrorBoundary, { onReset: onClose, children: _jsx(OverlayPortal, { isOpen: isOpen, isClosing: isClosing, onClose: handleClose, onStateChange: onStateChange, isMobile: isMobile }) }));
198
+ }
199
+ //# sourceMappingURL=VoiceOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceOverlay.js","sourceRoot":"","sources":["../../src/components/VoiceOverlay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface VoiceSettingsViewProps {
2
+ onBack: () => void;
3
+ onVolumeChange?: (v: number) => void;
4
+ }
5
+ export default function VoiceSettingsView({ onBack, onVolumeChange }: VoiceSettingsViewProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=VoiceSettingsView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceSettingsView.d.ts","sourceRoot":"","sources":["../../src/components/VoiceSettingsView.tsx"],"names":[],"mappings":"AAuBA,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAwID,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,sBAAsB,2CAoR3F"}