@voicethere/client 0.7.29 → 0.8.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.
- package/CHANGELOG.md +17 -0
- package/dist/browser/audio-visualizer.d.ts +1 -0
- package/dist/browser/audio-visualizer.d.ts.map +1 -1
- package/dist/browser/audio-visualizer.js +30 -0
- package/dist/browser/audio-visualizer.js.map +1 -1
- package/dist/browser/microphone.d.ts +13 -6
- package/dist/browser/microphone.d.ts.map +1 -1
- package/dist/browser/microphone.js +28 -11
- package/dist/browser/microphone.js.map +1 -1
- package/dist/embed/config.d.ts +33 -0
- package/dist/embed/config.d.ts.map +1 -0
- package/dist/embed/config.js +204 -0
- package/dist/embed/config.js.map +1 -0
- package/dist/embed/index.d.ts +12 -7
- package/dist/embed/index.d.ts.map +1 -1
- package/dist/embed/index.js +75 -26
- package/dist/embed/index.js.map +1 -1
- package/dist/embed/presets.d.ts +27 -0
- package/dist/embed/presets.d.ts.map +1 -0
- package/dist/embed/presets.js +151 -0
- package/dist/embed/presets.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## 0.8.1 — 2026-09-01
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **Mic-denied synthetic fallback** — When microphone permission is denied or unavailable, the synthetic outbound track now sends inaudible looping white noise instead of silence so WebRTC is not DTX-suppressed, the runner receives `ontrack`, and the voice conversation can start. The production embed API `createVoiceThereWidget({ apiBase, projectId, clientKey, mode })` (no `configUrl`) is unchanged.
|
|
10
|
+
|
|
11
|
+
## 0.8.0 — 2026-08-31
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **Embed presets and CDN config** — `createVoiceThereWidget` supports `preset`, `position`, `launcherLabel`, and `greeting`. Brand `theme` colors overlay preset defaults. `createVoiceThereWidgetAsync` loads appearance from `configUrl` (no credentials); inline options override fetched JSON. Published config schema `VoiceThereWidgetConfigV1` rejects secret-like keys (`clientKey`, `token`, etc.). Presets: `pill-dark`, `pill-light`, `rounded-card`, `minimal-bar`, `voice-orb`.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **Embed widget CDN config** — `createVoiceThereWidgetAsync` still mounts the launcher from inline options when `configUrl` is missing, unreachable, or returns invalid JSON; warns in the console instead of rejecting the promise.
|
|
20
|
+
- **Audio visualizer idle frame** — `attachAudioVisualizer().stop()` and ended MediaStream tracks now clear the canvas and draw a flat midline instead of freezing on the last analyser snapshot.
|
|
21
|
+
|
|
5
22
|
## 0.7.29 — 2026-08-28
|
|
6
23
|
|
|
7
24
|
### Added
|
|
@@ -9,5 +9,6 @@ export type AudioVisualizer = {
|
|
|
9
9
|
stop: () => void;
|
|
10
10
|
resume: () => void;
|
|
11
11
|
};
|
|
12
|
+
export declare function drawIdleVisualizer(ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, waveColor?: string): void;
|
|
12
13
|
export declare function attachAudioVisualizer(options: AudioVisualizerOptions): AudioVisualizer;
|
|
13
14
|
//# sourceMappingURL=audio-visualizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-visualizer.d.ts","sourceRoot":"","sources":["../../src/browser/audio-visualizer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,
|
|
1
|
+
{"version":3,"file":"audio-visualizer.d.ts","sourceRoot":"","sources":["../../src/browser/audio-visualizer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,iBAAiB,EACzB,SAAS,SAAY,GACpB,IAAI,CAUN;AAkBD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CA+GjB"}
|
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
export function drawIdleVisualizer(ctx, canvas, waveColor = "#38bdf8") {
|
|
2
|
+
const width = canvas.width;
|
|
3
|
+
const height = canvas.height;
|
|
4
|
+
ctx.clearRect(0, 0, width, height);
|
|
5
|
+
ctx.lineWidth = 2;
|
|
6
|
+
ctx.strokeStyle = waveColor;
|
|
7
|
+
ctx.beginPath();
|
|
8
|
+
ctx.moveTo(0, height / 2);
|
|
9
|
+
ctx.lineTo(width, height / 2);
|
|
10
|
+
ctx.stroke();
|
|
11
|
+
}
|
|
12
|
+
function getTappedMediaStream(mediaStream, audioElement) {
|
|
13
|
+
if (mediaStream)
|
|
14
|
+
return mediaStream;
|
|
15
|
+
if (audioElement?.srcObject instanceof MediaStream) {
|
|
16
|
+
return audioElement.srcObject;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
function hasLiveAudioTrack(stream) {
|
|
21
|
+
if (!stream)
|
|
22
|
+
return false;
|
|
23
|
+
return stream.getAudioTracks().some((track) => track.readyState === "live");
|
|
24
|
+
}
|
|
1
25
|
export function attachAudioVisualizer(options) {
|
|
2
26
|
const { canvas, audioElement, mediaStream, waveColor = "#38bdf8", barColor = "#818cf8", } = options;
|
|
3
27
|
if (!audioElement && !mediaStream) {
|
|
@@ -45,6 +69,11 @@ export function attachAudioVisualizer(options) {
|
|
|
45
69
|
if (stopped)
|
|
46
70
|
return;
|
|
47
71
|
rafId = requestAnimationFrame(draw);
|
|
72
|
+
const tappedStream = getTappedMediaStream(mediaStream, audioElement);
|
|
73
|
+
if (tappedStream !== null && !hasLiveAudioTrack(tappedStream)) {
|
|
74
|
+
drawIdleVisualizer(ctx, canvas, waveColor);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
48
77
|
const width = canvas.width;
|
|
49
78
|
const height = canvas.height;
|
|
50
79
|
ctx.clearRect(0, 0, width, height);
|
|
@@ -78,6 +107,7 @@ export function attachAudioVisualizer(options) {
|
|
|
78
107
|
stop: () => {
|
|
79
108
|
stopped = true;
|
|
80
109
|
cancelAnimationFrame(rafId);
|
|
110
|
+
drawIdleVisualizer(ctx, canvas, waveColor);
|
|
81
111
|
void audioCtx.close();
|
|
82
112
|
},
|
|
83
113
|
resume: ensureRunning,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-visualizer.js","sourceRoot":"","sources":["../../src/browser/audio-visualizer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audio-visualizer.js","sourceRoot":"","sources":["../../src/browser/audio-visualizer.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,kBAAkB,CAChC,GAA6B,EAC7B,MAAyB,EACzB,SAAS,GAAG,SAAS;IAErB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;IAClB,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,SAAS,EAAE,CAAC;IAChB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,MAAM,EAAE,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,WAAyB,EACzB,YAA+B;IAE/B,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,IAAI,YAAY,EAAE,SAAS,YAAY,WAAW,EAAE,CAAC;QACnD,OAAO,YAAY,CAAC,SAAS,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA0B;IACnD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAA+B;IAE/B,MAAM,EACJ,MAAM,EACN,YAAY,EACZ,WAAW,EACX,SAAS,GAAG,SAAS,EACrB,QAAQ,GAAG,SAAS,GACrB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAEtC,MAAM,YAAY,GAChB,WAAW;QACX,CAAC,YAAY,EAAE,SAAS,YAAY,WAAW;YAC7C,CAAC,CAAC,YAAY,CAAC,SAAS;YACxB,CAAC,CAAC,IAAI,CAAC,CAAC;IAEZ,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACnC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QACzD,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,IAAI,OAAO;YAAE,OAAO;QACpB,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEpC,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACrE,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9D,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEnC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACzC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;QAC5B,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBACzB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,CAAC,IAAI,UAAU,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9B,GAAG,CAAC,MAAM,EAAE,CAAC;QAEb,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YACxD,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC;IAEP,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,OAAO,GAAG,IAAI,CAAC;YACf,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3C,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,EAAE,aAAa;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Browser microphone acquisition with
|
|
3
|
-
* or unavailable. Used by voice sessions to keep an outbound audio track
|
|
2
|
+
* Browser microphone acquisition with low-level noise synthetic fallback when GUM
|
|
3
|
+
* is denied or unavailable. Used by voice sessions to keep an outbound audio track
|
|
4
|
+
* live so WebRTC sends RTP (silent gain=0 is DTX-suppressed and the runner never
|
|
5
|
+
* receives ontrack).
|
|
4
6
|
*/
|
|
5
7
|
export type AudioInputState = "live" | "denied" | "unavailable" | "synthetic";
|
|
8
|
+
/** Peak gain for synthetic mic white noise — inaudible but enough to avoid DTX. */
|
|
9
|
+
export declare const SYNTHETIC_MIC_NOISE_GAIN = 0.004;
|
|
6
10
|
export type AudioInputDevice = {
|
|
7
11
|
deviceId: string;
|
|
8
12
|
label: string;
|
|
@@ -21,16 +25,19 @@ export type AcquireAudioInputResult = {
|
|
|
21
25
|
/** Stop every track on a stream (no-op for null). */
|
|
22
26
|
export declare function stopMicStream(stream: MediaStream | null): void;
|
|
23
27
|
/**
|
|
24
|
-
*
|
|
25
|
-
* when real microphone access is denied or unavailable.
|
|
28
|
+
* Low-level noise outbound mic substitute — keeps WebRTC outbound audio negotiation
|
|
29
|
+
* alive when real microphone access is denied or unavailable. Emits looping white
|
|
30
|
+
* noise at {@link SYNTHETIC_MIC_NOISE_GAIN} so RTP is not DTX-suppressed and the
|
|
31
|
+
* runner receives ontrack and can start VoiceAgent.
|
|
26
32
|
*/
|
|
27
33
|
export declare function createSyntheticMicStream(): {
|
|
28
34
|
stream: MediaStream;
|
|
29
35
|
dispose: () => void;
|
|
30
36
|
};
|
|
31
37
|
/**
|
|
32
|
-
* Acquire microphone audio, falling back to a
|
|
33
|
-
* Never throws solely because GUM failed — callers always receive a
|
|
38
|
+
* Acquire microphone audio, falling back to a low-level noise synthetic stream on
|
|
39
|
+
* deny or error. Never throws solely because GUM failed — callers always receive a
|
|
40
|
+
* usable stream that produces outbound RTP for the runner.
|
|
34
41
|
*/
|
|
35
42
|
export declare function acquireAudioInput(options?: AcquireAudioInputOptions): Promise<AcquireAudioInputResult>;
|
|
36
43
|
/** List audio input devices (empty when `mediaDevices` is unavailable). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microphone.d.ts","sourceRoot":"","sources":["../../src/browser/microphone.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"microphone.d.ts","sourceRoot":"","sources":["../../src/browser/microphone.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,CAAC;AAE9E,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAK9C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,sBAAsB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7E,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gFAAgF;IAChF,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AA2CF,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAQ9D;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAmEA;AAcD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAsBlC;AAED,2EAA2E;AAC3E,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAczE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG3E"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Browser microphone acquisition with
|
|
3
|
-
* or unavailable. Used by voice sessions to keep an outbound audio track
|
|
2
|
+
* Browser microphone acquisition with low-level noise synthetic fallback when GUM
|
|
3
|
+
* is denied or unavailable. Used by voice sessions to keep an outbound audio track
|
|
4
|
+
* live so WebRTC sends RTP (silent gain=0 is DTX-suppressed and the runner never
|
|
5
|
+
* receives ontrack).
|
|
4
6
|
*/
|
|
7
|
+
/** Peak gain for synthetic mic white noise — inaudible but enough to avoid DTX. */
|
|
8
|
+
export const SYNTHETIC_MIC_NOISE_GAIN = 0.004;
|
|
9
|
+
/** Duration of one loop of synthetic white noise (seconds). */
|
|
10
|
+
const SYNTHETIC_MIC_NOISE_BUFFER_SECONDS = 0.25;
|
|
5
11
|
function buildAudioConstraints(deviceId) {
|
|
6
12
|
if (deviceId) {
|
|
7
13
|
return { deviceId: { ideal: deviceId } };
|
|
@@ -47,8 +53,10 @@ export function stopMicStream(stream) {
|
|
|
47
53
|
});
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
|
-
*
|
|
51
|
-
* when real microphone access is denied or unavailable.
|
|
56
|
+
* Low-level noise outbound mic substitute — keeps WebRTC outbound audio negotiation
|
|
57
|
+
* alive when real microphone access is denied or unavailable. Emits looping white
|
|
58
|
+
* noise at {@link SYNTHETIC_MIC_NOISE_GAIN} so RTP is not DTX-suppressed and the
|
|
59
|
+
* runner receives ontrack and can start VoiceAgent.
|
|
52
60
|
*/
|
|
53
61
|
export function createSyntheticMicStream() {
|
|
54
62
|
const AudioCtx = typeof globalThis.AudioContext !== "undefined"
|
|
@@ -77,19 +85,27 @@ export function createSyntheticMicStream() {
|
|
|
77
85
|
};
|
|
78
86
|
}
|
|
79
87
|
const ctx = new AudioCtx();
|
|
88
|
+
void ctx.resume();
|
|
80
89
|
const dest = ctx.createMediaStreamDestination();
|
|
81
90
|
const gain = ctx.createGain();
|
|
82
|
-
gain.gain.value =
|
|
83
|
-
const
|
|
84
|
-
|
|
91
|
+
gain.gain.value = SYNTHETIC_MIC_NOISE_GAIN;
|
|
92
|
+
const buffer = ctx.createBuffer(1, Math.ceil(ctx.sampleRate * SYNTHETIC_MIC_NOISE_BUFFER_SECONDS), ctx.sampleRate);
|
|
93
|
+
const channel = buffer.getChannelData(0);
|
|
94
|
+
for (let i = 0; i < channel.length; i++) {
|
|
95
|
+
channel[i] = Math.random() * 2 - 1;
|
|
96
|
+
}
|
|
97
|
+
const source = ctx.createBufferSource();
|
|
98
|
+
source.buffer = buffer;
|
|
99
|
+
source.loop = true;
|
|
100
|
+
source.connect(gain);
|
|
85
101
|
gain.connect(dest);
|
|
86
|
-
|
|
102
|
+
source.start();
|
|
87
103
|
const stream = dest.stream;
|
|
88
104
|
return {
|
|
89
105
|
stream,
|
|
90
106
|
dispose: () => {
|
|
91
107
|
try {
|
|
92
|
-
|
|
108
|
+
source.stop();
|
|
93
109
|
}
|
|
94
110
|
catch {
|
|
95
111
|
/* ignore */
|
|
@@ -109,8 +125,9 @@ function syntheticAcquireResult(state) {
|
|
|
109
125
|
};
|
|
110
126
|
}
|
|
111
127
|
/**
|
|
112
|
-
* Acquire microphone audio, falling back to a
|
|
113
|
-
* Never throws solely because GUM failed — callers always receive a
|
|
128
|
+
* Acquire microphone audio, falling back to a low-level noise synthetic stream on
|
|
129
|
+
* deny or error. Never throws solely because GUM failed — callers always receive a
|
|
130
|
+
* usable stream that produces outbound RTP for the runner.
|
|
114
131
|
*/
|
|
115
132
|
export async function acquireAudioInput(options = {}) {
|
|
116
133
|
const getUserMedia = options.getUserMedia;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microphone.js","sourceRoot":"","sources":["../../src/browser/microphone.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"microphone.js","sourceRoot":"","sources":["../../src/browser/microphone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { BrowserSessionMode } from "../browser/browser-session.js";
|
|
2
|
+
export type VoiceThereWidgetTheme = {
|
|
3
|
+
primary?: string;
|
|
4
|
+
background?: string;
|
|
5
|
+
text?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const WIDGET_PRESET_IDS: readonly ["pill-dark", "pill-light", "rounded-card", "minimal-bar", "voice-orb"];
|
|
8
|
+
export type WidgetPresetId = (typeof WIDGET_PRESET_IDS)[number];
|
|
9
|
+
export declare function isWidgetPresetId(value: string): value is WidgetPresetId;
|
|
10
|
+
export declare const WIDGET_CONFIG_VERSION: 1;
|
|
11
|
+
export type WidgetPosition = "bottom-right" | "bottom-left";
|
|
12
|
+
export type WidgetConfigMode = "chat" | "voice";
|
|
13
|
+
export type VoiceThereWidgetConfigV1 = {
|
|
14
|
+
v: typeof WIDGET_CONFIG_VERSION;
|
|
15
|
+
publicId?: string;
|
|
16
|
+
projectId?: string;
|
|
17
|
+
apiBase?: string;
|
|
18
|
+
revision?: number;
|
|
19
|
+
preset?: WidgetPresetId;
|
|
20
|
+
theme?: VoiceThereWidgetTheme;
|
|
21
|
+
launcherLabel?: string;
|
|
22
|
+
greeting?: string;
|
|
23
|
+
position?: WidgetPosition;
|
|
24
|
+
mode?: WidgetConfigMode;
|
|
25
|
+
};
|
|
26
|
+
export declare class WidgetConfigError extends Error {
|
|
27
|
+
constructor(message: string);
|
|
28
|
+
}
|
|
29
|
+
export declare function parseVoiceThereWidgetConfigV1(input: unknown): VoiceThereWidgetConfigV1;
|
|
30
|
+
export declare function parseVoiceThereWidgetConfigJson(json: string): VoiceThereWidgetConfigV1;
|
|
31
|
+
export declare function widgetConfigModeToSessionMode(mode: WidgetConfigMode | undefined): BrowserSessionMode | undefined;
|
|
32
|
+
export declare function fetchVoiceThereWidgetConfig(configUrl: string, fetchImpl?: typeof fetch): Promise<VoiceThereWidgetConfigV1>;
|
|
33
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/embed/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,iBAAiB,kFAMpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED,eAAO,MAAM,qBAAqB,EAAG,CAAU,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,aAAa,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,MAAM,MAAM,wBAAwB,GAAG;IACrC,CAAC,EAAE,OAAO,qBAAqB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAqCF,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AA4HD,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,wBAAwB,CAiC1B;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,GACX,wBAAwB,CAQ1B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,gBAAgB,GAAG,SAAS,GACjC,kBAAkB,GAAG,SAAS,CAKhC;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAmBnC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { BrowserSessionModeType } from "../browser/browser-session.js";
|
|
2
|
+
export const WIDGET_PRESET_IDS = [
|
|
3
|
+
"pill-dark",
|
|
4
|
+
"pill-light",
|
|
5
|
+
"rounded-card",
|
|
6
|
+
"minimal-bar",
|
|
7
|
+
"voice-orb",
|
|
8
|
+
];
|
|
9
|
+
export function isWidgetPresetId(value) {
|
|
10
|
+
return WIDGET_PRESET_IDS.includes(value);
|
|
11
|
+
}
|
|
12
|
+
export const WIDGET_CONFIG_VERSION = 1;
|
|
13
|
+
const ALLOWED_TOP_LEVEL_KEYS = new Set([
|
|
14
|
+
"v",
|
|
15
|
+
"publicId",
|
|
16
|
+
"projectId",
|
|
17
|
+
"apiBase",
|
|
18
|
+
"revision",
|
|
19
|
+
"preset",
|
|
20
|
+
"theme",
|
|
21
|
+
"launcherLabel",
|
|
22
|
+
"greeting",
|
|
23
|
+
"position",
|
|
24
|
+
"mode",
|
|
25
|
+
]);
|
|
26
|
+
const ALLOWED_THEME_KEYS = new Set(["primary", "background", "text"]);
|
|
27
|
+
const SECRET_LIKE_KEYS = new Set([
|
|
28
|
+
"clientkey",
|
|
29
|
+
"authorization",
|
|
30
|
+
"token",
|
|
31
|
+
"apikey",
|
|
32
|
+
"secret",
|
|
33
|
+
"bearertoken",
|
|
34
|
+
"accesstoken",
|
|
35
|
+
"refreshtoken",
|
|
36
|
+
]);
|
|
37
|
+
const MAX_PROJECT_ID_LEN = 128;
|
|
38
|
+
const MAX_API_BASE_LEN = 512;
|
|
39
|
+
const MAX_PUBLIC_ID_LEN = 64;
|
|
40
|
+
const MAX_LAUNCHER_LABEL_LEN = 64;
|
|
41
|
+
const MAX_GREETING_LEN = 500;
|
|
42
|
+
const HEX_COLOR_RE = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
|
|
43
|
+
export class WidgetConfigError extends Error {
|
|
44
|
+
constructor(message) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.name = "WidgetConfigError";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function isPlainObject(value) {
|
|
50
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
51
|
+
}
|
|
52
|
+
function assertNoSecretLikeKeys(obj, path = "") {
|
|
53
|
+
for (const key of Object.keys(obj)) {
|
|
54
|
+
const normalized = key.toLowerCase();
|
|
55
|
+
if (SECRET_LIKE_KEYS.has(normalized)) {
|
|
56
|
+
throw new WidgetConfigError(`Forbidden config key${path}: ${key} (secrets must not appear in CDN config)`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function rejectUnknownKeys(obj, allowed, path) {
|
|
61
|
+
for (const key of Object.keys(obj)) {
|
|
62
|
+
if (!allowed.has(key)) {
|
|
63
|
+
throw new WidgetConfigError(`Unknown config key${path}: ${key}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function parseString(value, field, maxLen) {
|
|
68
|
+
if (typeof value !== "string") {
|
|
69
|
+
throw new WidgetConfigError(`${field} must be a string`);
|
|
70
|
+
}
|
|
71
|
+
const trimmed = value.trim();
|
|
72
|
+
if (!trimmed) {
|
|
73
|
+
throw new WidgetConfigError(`${field} must not be empty`);
|
|
74
|
+
}
|
|
75
|
+
if (trimmed.length > maxLen) {
|
|
76
|
+
throw new WidgetConfigError(`${field} exceeds max length ${maxLen}`);
|
|
77
|
+
}
|
|
78
|
+
return trimmed;
|
|
79
|
+
}
|
|
80
|
+
function parseOptionalString(value, field, maxLen) {
|
|
81
|
+
if (value === undefined)
|
|
82
|
+
return undefined;
|
|
83
|
+
return parseString(value, field, maxLen);
|
|
84
|
+
}
|
|
85
|
+
function parseHexColor(value, field) {
|
|
86
|
+
const color = parseString(value, field, 7);
|
|
87
|
+
if (!HEX_COLOR_RE.test(color)) {
|
|
88
|
+
throw new WidgetConfigError(`${field} must be a hex color (#RGB or #RRGGBB)`);
|
|
89
|
+
}
|
|
90
|
+
return color;
|
|
91
|
+
}
|
|
92
|
+
function parseTheme(value) {
|
|
93
|
+
if (value === undefined)
|
|
94
|
+
return undefined;
|
|
95
|
+
if (!isPlainObject(value)) {
|
|
96
|
+
throw new WidgetConfigError("theme must be an object");
|
|
97
|
+
}
|
|
98
|
+
assertNoSecretLikeKeys(value, ".theme");
|
|
99
|
+
rejectUnknownKeys(value, ALLOWED_THEME_KEYS, ".theme");
|
|
100
|
+
const theme = {};
|
|
101
|
+
if (value.primary !== undefined) {
|
|
102
|
+
theme.primary = parseHexColor(value.primary, "theme.primary");
|
|
103
|
+
}
|
|
104
|
+
if (value.background !== undefined) {
|
|
105
|
+
theme.background = parseHexColor(value.background, "theme.background");
|
|
106
|
+
}
|
|
107
|
+
if (value.text !== undefined) {
|
|
108
|
+
theme.text = parseHexColor(value.text, "theme.text");
|
|
109
|
+
}
|
|
110
|
+
return theme;
|
|
111
|
+
}
|
|
112
|
+
function parsePosition(value) {
|
|
113
|
+
if (value === undefined)
|
|
114
|
+
return undefined;
|
|
115
|
+
if (value !== "bottom-right" && value !== "bottom-left") {
|
|
116
|
+
throw new WidgetConfigError('position must be "bottom-right" or "bottom-left"');
|
|
117
|
+
}
|
|
118
|
+
return value;
|
|
119
|
+
}
|
|
120
|
+
function parseMode(value) {
|
|
121
|
+
if (value === undefined)
|
|
122
|
+
return undefined;
|
|
123
|
+
if (value !== "chat" && value !== "voice") {
|
|
124
|
+
throw new WidgetConfigError('mode must be "chat" or "voice"');
|
|
125
|
+
}
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
function parsePreset(value) {
|
|
129
|
+
if (value === undefined)
|
|
130
|
+
return undefined;
|
|
131
|
+
const id = parseString(value, "preset", 64);
|
|
132
|
+
if (!isWidgetPresetId(id)) {
|
|
133
|
+
throw new WidgetConfigError(`preset must be one of: ${WIDGET_PRESET_IDS.join(", ")}`);
|
|
134
|
+
}
|
|
135
|
+
return id;
|
|
136
|
+
}
|
|
137
|
+
function parseRevision(value) {
|
|
138
|
+
if (value === undefined)
|
|
139
|
+
return undefined;
|
|
140
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
|
|
141
|
+
throw new WidgetConfigError("revision must be a non-negative integer");
|
|
142
|
+
}
|
|
143
|
+
return value;
|
|
144
|
+
}
|
|
145
|
+
export function parseVoiceThereWidgetConfigV1(input) {
|
|
146
|
+
if (!isPlainObject(input)) {
|
|
147
|
+
throw new WidgetConfigError("Config must be a JSON object");
|
|
148
|
+
}
|
|
149
|
+
assertNoSecretLikeKeys(input);
|
|
150
|
+
rejectUnknownKeys(input, ALLOWED_TOP_LEVEL_KEYS, "");
|
|
151
|
+
if (input.v !== WIDGET_CONFIG_VERSION) {
|
|
152
|
+
throw new WidgetConfigError(`Config v must be ${WIDGET_CONFIG_VERSION}`);
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
v: WIDGET_CONFIG_VERSION,
|
|
156
|
+
publicId: parseOptionalString(input.publicId, "publicId", MAX_PUBLIC_ID_LEN),
|
|
157
|
+
projectId: parseOptionalString(input.projectId, "projectId", MAX_PROJECT_ID_LEN),
|
|
158
|
+
apiBase: parseOptionalString(input.apiBase, "apiBase", MAX_API_BASE_LEN),
|
|
159
|
+
revision: parseRevision(input.revision),
|
|
160
|
+
preset: parsePreset(input.preset),
|
|
161
|
+
theme: parseTheme(input.theme),
|
|
162
|
+
launcherLabel: parseOptionalString(input.launcherLabel, "launcherLabel", MAX_LAUNCHER_LABEL_LEN),
|
|
163
|
+
greeting: parseOptionalString(input.greeting, "greeting", MAX_GREETING_LEN),
|
|
164
|
+
position: parsePosition(input.position),
|
|
165
|
+
mode: parseMode(input.mode),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
export function parseVoiceThereWidgetConfigJson(json) {
|
|
169
|
+
let parsed;
|
|
170
|
+
try {
|
|
171
|
+
parsed = JSON.parse(json);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
throw new WidgetConfigError("Config JSON is invalid");
|
|
175
|
+
}
|
|
176
|
+
return parseVoiceThereWidgetConfigV1(parsed);
|
|
177
|
+
}
|
|
178
|
+
export function widgetConfigModeToSessionMode(mode) {
|
|
179
|
+
if (mode === undefined)
|
|
180
|
+
return undefined;
|
|
181
|
+
return mode === "voice"
|
|
182
|
+
? BrowserSessionModeType.Voice
|
|
183
|
+
: BrowserSessionModeType.Chat;
|
|
184
|
+
}
|
|
185
|
+
export async function fetchVoiceThereWidgetConfig(configUrl, fetchImpl = fetch) {
|
|
186
|
+
const url = parseString(configUrl, "configUrl", MAX_API_BASE_LEN);
|
|
187
|
+
let response;
|
|
188
|
+
try {
|
|
189
|
+
response = await fetchImpl(url, {
|
|
190
|
+
method: "GET",
|
|
191
|
+
credentials: "omit",
|
|
192
|
+
cache: "no-store",
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
throw new WidgetConfigError(`Failed to fetch config from ${url}`);
|
|
197
|
+
}
|
|
198
|
+
if (!response.ok) {
|
|
199
|
+
throw new WidgetConfigError(`Config fetch failed (${response.status}) from ${url}`);
|
|
200
|
+
}
|
|
201
|
+
const text = await response.text();
|
|
202
|
+
return parseVoiceThereWidgetConfigJson(text);
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/embed/config.ts"],"names":[],"mappings":"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"}
|
package/dist/embed/index.d.ts
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { type BrowserSessionMode } from "../browser/browser-session.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
2
|
+
import { type VoiceThereWidgetConfigV1, type VoiceThereWidgetTheme, type WidgetPosition, type WidgetPresetId } from "./config.js";
|
|
3
|
+
export type { VoiceThereWidgetConfigV1, VoiceThereWidgetTheme, WidgetPosition, WidgetPresetId, };
|
|
4
|
+
export { WidgetConfigError, fetchVoiceThereWidgetConfig, parseVoiceThereWidgetConfigJson, parseVoiceThereWidgetConfigV1, WIDGET_CONFIG_VERSION, WIDGET_PRESET_IDS, } from "./config.js";
|
|
5
|
+
export { applyPreset, getWidgetPreset } from "./presets.js";
|
|
7
6
|
export type VoiceThereWidgetOptions = {
|
|
8
|
-
projectId: string;
|
|
9
|
-
apiBase: string;
|
|
10
7
|
clientKey: string;
|
|
8
|
+
projectId?: string;
|
|
9
|
+
apiBase?: string;
|
|
11
10
|
mode?: BrowserSessionMode;
|
|
12
11
|
theme?: VoiceThereWidgetTheme;
|
|
13
12
|
mount?: HTMLElement;
|
|
13
|
+
preset?: WidgetPresetId;
|
|
14
|
+
configUrl?: string;
|
|
15
|
+
launcherLabel?: string;
|
|
16
|
+
greeting?: string;
|
|
17
|
+
position?: WidgetPosition;
|
|
14
18
|
};
|
|
15
19
|
export type VoiceThereWidget = {
|
|
16
20
|
open: () => void;
|
|
17
21
|
close: () => void;
|
|
18
22
|
destroy: () => void;
|
|
19
23
|
};
|
|
24
|
+
export declare function createVoiceThereWidgetAsync(options: VoiceThereWidgetOptions): Promise<VoiceThereWidget>;
|
|
20
25
|
export declare function createVoiceThereWidget(options: VoiceThereWidgetOptions): VoiceThereWidget;
|
|
21
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embed/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,kBAAkB,EAExB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embed/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,kBAAkB,EAExB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAOrB,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,cAAc,GACf,CAAC;AACF,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,+BAA+B,EAC/B,6BAA6B,EAC7B,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAmDF,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAOlB"}
|
package/dist/embed/index.js
CHANGED
|
@@ -1,4 +1,55 @@
|
|
|
1
1
|
import { BrowserSessionModeType, connectBrowserSession, createDebugConsole, startSession, unlockAudioPlayback, } from "../browser/browser-session.js";
|
|
2
|
+
import { fetchVoiceThereWidgetConfig, WidgetConfigError, widgetConfigModeToSessionMode, } from "./config.js";
|
|
3
|
+
import { applyPreset, applyWidgetPosition, } from "./presets.js";
|
|
4
|
+
export { WidgetConfigError, fetchVoiceThereWidgetConfig, parseVoiceThereWidgetConfigJson, parseVoiceThereWidgetConfigV1, WIDGET_CONFIG_VERSION, WIDGET_PRESET_IDS, } from "./config.js";
|
|
5
|
+
export { applyPreset, getWidgetPreset } from "./presets.js";
|
|
6
|
+
function mergeWidgetOptions(inline, remote) {
|
|
7
|
+
const projectId = inline.projectId ?? remote?.projectId;
|
|
8
|
+
const apiBase = inline.apiBase ?? remote?.apiBase;
|
|
9
|
+
if (!projectId) {
|
|
10
|
+
throw new Error("VoiceThere widget requires projectId (inline or from configUrl)");
|
|
11
|
+
}
|
|
12
|
+
if (!apiBase) {
|
|
13
|
+
throw new Error("VoiceThere widget requires apiBase (inline or from configUrl)");
|
|
14
|
+
}
|
|
15
|
+
const mode = inline.mode ??
|
|
16
|
+
widgetConfigModeToSessionMode(remote?.mode) ??
|
|
17
|
+
BrowserSessionModeType.Chat;
|
|
18
|
+
return {
|
|
19
|
+
projectId,
|
|
20
|
+
apiBase,
|
|
21
|
+
clientKey: inline.clientKey,
|
|
22
|
+
mode,
|
|
23
|
+
theme: inline.theme ?? remote?.theme,
|
|
24
|
+
mount: inline.mount,
|
|
25
|
+
preset: inline.preset ?? remote?.preset ?? "pill-dark",
|
|
26
|
+
launcherLabel: inline.launcherLabel ?? remote?.launcherLabel ?? "Chat",
|
|
27
|
+
greeting: inline.greeting ?? remote?.greeting,
|
|
28
|
+
position: inline.position ?? remote?.position ?? "bottom-right",
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export async function createVoiceThereWidgetAsync(options) {
|
|
32
|
+
let remote;
|
|
33
|
+
if (options.configUrl) {
|
|
34
|
+
try {
|
|
35
|
+
remote = await fetchVoiceThereWidgetConfig(options.configUrl);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const detail = error instanceof WidgetConfigError || error instanceof Error
|
|
39
|
+
? error.message
|
|
40
|
+
: String(error);
|
|
41
|
+
console.warn(`VoiceThere widget: CDN config unavailable (${options.configUrl}): ${detail}`);
|
|
42
|
+
remote = undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return buildVoiceThereWidget(mergeWidgetOptions(options, remote));
|
|
46
|
+
}
|
|
47
|
+
export function createVoiceThereWidget(options) {
|
|
48
|
+
if (options.configUrl) {
|
|
49
|
+
throw new Error("configUrl requires createVoiceThereWidgetAsync(); fetch CDN config before mounting");
|
|
50
|
+
}
|
|
51
|
+
return buildVoiceThereWidget(mergeWidgetOptions(options));
|
|
52
|
+
}
|
|
2
53
|
function formatWebRtcStatus(status) {
|
|
3
54
|
if (status.ready)
|
|
4
55
|
return "Connected";
|
|
@@ -28,34 +79,36 @@ function isVoiceSessionMode(mode) {
|
|
|
28
79
|
return (mode === BrowserSessionModeType.Voice ||
|
|
29
80
|
mode === BrowserSessionModeType.VoiceAndData);
|
|
30
81
|
}
|
|
31
|
-
|
|
82
|
+
function applyAccentTheme(elements, theme) {
|
|
83
|
+
for (const el of elements) {
|
|
84
|
+
el.style.background = theme.primary;
|
|
85
|
+
el.style.color = theme.text;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function buildVoiceThereWidget(options) {
|
|
32
89
|
const mount = options.mount ?? document.body;
|
|
33
|
-
const mode = options.mode
|
|
34
|
-
const theme = options.theme ?? {};
|
|
90
|
+
const mode = options.mode;
|
|
35
91
|
const root = document.createElement("div");
|
|
36
92
|
root.style.position = "fixed";
|
|
37
|
-
root.style.bottom = "16px";
|
|
38
|
-
root.style.right = "16px";
|
|
39
93
|
root.style.zIndex = "99999";
|
|
40
94
|
root.style.fontFamily = "system-ui, sans-serif";
|
|
41
95
|
const launcher = document.createElement("button");
|
|
42
|
-
launcher.textContent =
|
|
43
|
-
launcher.style.background = theme.primary ?? "#06b6d4";
|
|
44
|
-
launcher.style.color = theme.text ?? "#0f172a";
|
|
96
|
+
launcher.textContent = options.launcherLabel;
|
|
45
97
|
launcher.style.border = "none";
|
|
46
|
-
launcher.style.borderRadius = "999px";
|
|
47
|
-
launcher.style.padding = "12px 16px";
|
|
48
98
|
launcher.style.cursor = "pointer";
|
|
49
99
|
const panel = document.createElement("div");
|
|
50
100
|
panel.style.display = "none";
|
|
51
|
-
panel.style.
|
|
52
|
-
panel.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
101
|
+
panel.style.boxSizing = "border-box";
|
|
102
|
+
const theme = applyPreset({ root, launcher, panel }, options.preset, options.theme);
|
|
103
|
+
applyWidgetPosition(root, options.position, options.preset);
|
|
104
|
+
const greeting = document.createElement("div");
|
|
105
|
+
greeting.setAttribute("data-voicethere-greeting", "");
|
|
106
|
+
greeting.style.display = options.greeting ? "block" : "none";
|
|
107
|
+
greeting.style.fontSize = "13px";
|
|
108
|
+
greeting.style.lineHeight = "1.4";
|
|
109
|
+
greeting.style.marginBottom = "8px";
|
|
110
|
+
greeting.style.color = theme.text;
|
|
111
|
+
greeting.textContent = options.greeting ?? "";
|
|
59
112
|
const status = document.createElement("div");
|
|
60
113
|
status.style.fontSize = "12px";
|
|
61
114
|
status.style.marginBottom = "8px";
|
|
@@ -110,8 +163,6 @@ export function createVoiceThereWidget(options) {
|
|
|
110
163
|
micRequestBtn.style.padding = "6px 10px";
|
|
111
164
|
micRequestBtn.style.borderRadius = "6px";
|
|
112
165
|
micRequestBtn.style.border = "none";
|
|
113
|
-
micRequestBtn.style.background = theme.primary ?? "#06b6d4";
|
|
114
|
-
micRequestBtn.style.color = theme.text ?? "#0f172a";
|
|
115
166
|
micRequestBtn.style.cursor = "pointer";
|
|
116
167
|
micRequestBtn.style.fontSize = "11px";
|
|
117
168
|
micWarning.append(micRequestBtn);
|
|
@@ -135,11 +186,10 @@ export function createVoiceThereWidget(options) {
|
|
|
135
186
|
playbackEnableBtn.style.padding = "6px 10px";
|
|
136
187
|
playbackEnableBtn.style.borderRadius = "6px";
|
|
137
188
|
playbackEnableBtn.style.border = "none";
|
|
138
|
-
playbackEnableBtn.style.background = theme.primary ?? "#06b6d4";
|
|
139
|
-
playbackEnableBtn.style.color = theme.text ?? "#0f172a";
|
|
140
189
|
playbackEnableBtn.style.cursor = "pointer";
|
|
141
190
|
playbackEnableBtn.style.fontSize = "11px";
|
|
142
191
|
playbackWarning.append(playbackEnableBtn);
|
|
192
|
+
applyAccentTheme([micRequestBtn, playbackEnableBtn], theme);
|
|
143
193
|
const hideSessionNotices = () => {
|
|
144
194
|
micWarning.style.display = "none";
|
|
145
195
|
playbackWarning.style.display = "none";
|
|
@@ -169,7 +219,7 @@ export function createVoiceThereWidget(options) {
|
|
|
169
219
|
input.style.borderRadius = "8px";
|
|
170
220
|
input.style.border = "1px solid rgba(255,255,255,0.15)";
|
|
171
221
|
input.style.background = "#111827";
|
|
172
|
-
input.style.color =
|
|
222
|
+
input.style.color = theme.text;
|
|
173
223
|
const connectBtn = document.createElement("button");
|
|
174
224
|
connectBtn.textContent = "Connect";
|
|
175
225
|
connectBtn.style.marginTop = "8px";
|
|
@@ -177,10 +227,9 @@ export function createVoiceThereWidget(options) {
|
|
|
177
227
|
connectBtn.style.padding = "8px";
|
|
178
228
|
connectBtn.style.borderRadius = "8px";
|
|
179
229
|
connectBtn.style.border = "none";
|
|
180
|
-
connectBtn.style.background = theme.primary ?? "#06b6d4";
|
|
181
|
-
connectBtn.style.color = theme.text ?? "#0f172a";
|
|
182
230
|
connectBtn.style.cursor = "pointer";
|
|
183
|
-
|
|
231
|
+
applyAccentTheme([connectBtn], theme);
|
|
232
|
+
panel.append(greeting, status, micWarning, playbackWarning, log, input, connectBtn);
|
|
184
233
|
root.append(launcher, panel, inboundAudio);
|
|
185
234
|
mount.append(root);
|
|
186
235
|
let session = null;
|
package/dist/embed/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embed/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GAGpB,MAAM,+BAA+B,CAAC;AAwBvC,SAAS,kBAAkB,CAAC,MAA8B;IACxD,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC;IACrC,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,oBAAoB,CAAC;QAC9B,KAAK,aAAa;YAChB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,YAAY;YACf,OAAO,oBAAoB,CAAC;QAC9B,KAAK,gBAAgB;YACnB,OAAO,2BAA2B,CAAC;QACrC,KAAK,mBAAmB;YACtB,OAAO,wBAAwB,CAAC;QAClC,KAAK,QAAQ;YACX,OAAO,0BAA0B,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC;QACxB;YACE,OAAO,aAAa,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAsB;IAC/C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,WAAW,CAAC;AAChF,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAwB;IAClD,OAAO,CACL,IAAI,KAAK,sBAAsB,CAAC,KAAK;QACrC,IAAI,KAAK,sBAAsB,CAAC,YAAY,CAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAgC;IAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,sBAAsB,CAAC,IAAI,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAElC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,uBAAuB,CAAC;IAEhD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;IACvD,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IAElC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;IAC7B,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACvD,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;IAC5C,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,iCAAiC,CAAC;IACvD,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IAClC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,6BAA6B,CAAC;IAEtD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAClC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,WAAW,GAAG,cAAc,CAAC;IAEpC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACrC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IACnC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACpC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,mCAAmC,CAAC;IACjE,aAAa,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC;IAC/C,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IACzC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,sCAAsC,CAAC;IACvE,aAAa,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEzC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,8BAA8B,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,EAAE,GAAG,8BAA8B,CAAC;QAC1C,KAAK,CAAC,WAAW;YACf,kEAAkE,CAAC;QACrE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;QACzD,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;QAC9B,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;IAClE,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrD,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7C,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;IACnC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IACpC,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IACjC,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,0BAA0B,CAAC;IACzD,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,oCAAoC,CAAC;IAC/D,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,WAAW;QACpB,gOAAgO,CAAC;IAEnO,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvD,aAAa,CAAC,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IAC9D,aAAa,CAAC,IAAI,GAAG,QAAQ,CAAC;IAC9B,aAAa,CAAC,WAAW,GAAG,oBAAoB,CAAC;IACjD,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACtC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;IACzC,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IACzC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACpC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;IAC5D,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;IACpD,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;IACtC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEjC,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtD,eAAe,CAAC,YAAY,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;IACrE,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACvC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;IACxC,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IACzC,eAAe,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3C,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IACtC,eAAe,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3C,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,0BAA0B,CAAC;IAC9D,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,oCAAoC,CAAC;IACpE,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IACxC,eAAe,CAAC,WAAW,GAAG,sBAAsB,CAAC;IAErD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,iBAAiB,CAAC,YAAY,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;IACtE,iBAAiB,CAAC,IAAI,GAAG,QAAQ,CAAC;IAClC,iBAAiB,CAAC,WAAW,GAAG,cAAc,CAAC;IAC/C,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IAC1C,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;IAC7C,iBAAiB,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC7C,iBAAiB,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACxC,iBAAiB,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;IAChE,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;IACxD,iBAAiB,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IAC3C,iBAAiB,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC1C,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE1C,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAClC,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAClC,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC9C,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC5B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC5B,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,kBAAkB,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IAC1B,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC/B,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAElC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,WAAW,GAAG,iBAAiB,CAAC;IACtC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IAC9B,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IAC5B,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IACjC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,kCAAkC,CAAC;IACxD,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;IACnC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IAE9B,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpD,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IAChC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IACjC,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;IACzD,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;IACjD,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IAEpC,KAAK,CAAC,MAAM,CACV,MAAM,EACN,UAAU,EACV,eAAe,EACf,GAAG,EACH,KAAK,EACL,UAAU,CACX,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAC3C,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnB,IAAI,OAAO,GAA6D,IAAI,CAAC;IAE7E,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IAEpD,aAAa,CAAC,OAAO,GAAG,GAAG,EAAE;QAC3B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC;YACxC,gBAAgB,EAAE,CAAC;YACnB,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC;IAEF,iBAAiB,CAAC,OAAO,GAAG,GAAG,EAAE;QAC/B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC/C,IAAI,EAAE,EAAE,CAAC;gBACP,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACzC,CAAC;YACD,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC;IAEF,UAAU,CAAC,OAAO,GAAG,GAAG,EAAE;QACxB,KAAK,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACvC,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO,GAAG,IAAI,CAAC;gBACf,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACjC,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;gBACnC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;gBACjC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,SAAS,EAAE,EAAE;gBACzD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC3B,MAAM,QAAQ,GACZ,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpE,gBAAgB,CAAC,uBAAuB,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC;oBAC7D,CAAC;yBAAM,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;wBACjC,gBAAgB,CAAC,CAAC,CAAC,eAAe,IAAI,qBAAqB,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,KAAK;aACN,CAAC,CAAC;YAEH,SAAS,EAAE,CAAC;YAEZ,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBAChB,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,OAAO,GAAG,MAAM,qBAAqB,CAAC;gBACpC,IAAI;gBACJ,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,YAAY,EAAE,YAAY;gBAC1B,YAAY,EAAE,KAAK;gBACnB,kBAAkB,EAAE,CAAC,gBAAgB,EAAE,EAAE;oBACvC,gBAAgB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACzD,CAAC;gBACD,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;oBAC1B,gBAAgB,CAAC,iBAAiB,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC;gBACvD,CAAC;gBACD,eAAe,EAAE,CAAC,aAAa,EAAE,EAAE;oBACjC,eAAe,CAAC,KAAK,CAAC,OAAO;wBAC3B,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;gBACnD,CAAC;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACjC,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACpE,gBAAgB,EAAE,CAAC;YACnB,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;YACtC,UAAU,CAAC,KAAK;gBACd,6EAA6E,CAAC;YAChF,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC;IAEF,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,OAAO;YAAE,OAAO;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;QACtB,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1E,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAChC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,UAAU,EAAE,CAAC;YACtB,YAAY,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embed/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { VoiceThereWidgetTheme, WidgetPresetId } from "./config.js";
|
|
2
|
+
export type WidgetPresetLayout = {
|
|
3
|
+
launcherBorderRadius: string;
|
|
4
|
+
launcherPadding: string;
|
|
5
|
+
launcherMinWidth: string;
|
|
6
|
+
launcherMinHeight: string;
|
|
7
|
+
panelBorderRadius: string;
|
|
8
|
+
panelPadding: string;
|
|
9
|
+
panelWidth: string;
|
|
10
|
+
panelHeight: string;
|
|
11
|
+
panelBorder: string;
|
|
12
|
+
panelBoxShadow: string;
|
|
13
|
+
defaultTheme: Required<VoiceThereWidgetTheme>;
|
|
14
|
+
/** Distinct marker for tests — preset-specific layout token. */
|
|
15
|
+
layoutToken: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function getWidgetPreset(id: WidgetPresetId): WidgetPresetLayout;
|
|
18
|
+
export type ApplyPresetTarget = {
|
|
19
|
+
root: HTMLElement;
|
|
20
|
+
launcher: HTMLButtonElement;
|
|
21
|
+
panel: HTMLDivElement;
|
|
22
|
+
};
|
|
23
|
+
export type ResolvedWidgetTheme = Required<VoiceThereWidgetTheme>;
|
|
24
|
+
export declare function resolveWidgetTheme(presetId: WidgetPresetId, themeOverride?: VoiceThereWidgetTheme): ResolvedWidgetTheme;
|
|
25
|
+
export declare function applyPreset(target: ApplyPresetTarget, presetId: WidgetPresetId, themeOverride?: VoiceThereWidgetTheme): ResolvedWidgetTheme;
|
|
26
|
+
export declare function applyWidgetPosition(root: HTMLElement, position: "bottom-right" | "bottom-left", presetId: WidgetPresetId): void;
|
|
27
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/embed/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC9C,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA+FF,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,kBAAkB,CAEtE;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAElE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,qBAAqB,GACpC,mBAAmB,CAOrB;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,qBAAqB,GACpC,mBAAmB,CAgCrB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,cAAc,GAAG,aAAa,EACxC,QAAQ,EAAE,cAAc,GACvB,IAAI,CAkBN"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const PRESETS = {
|
|
2
|
+
"pill-dark": {
|
|
3
|
+
launcherBorderRadius: "999px",
|
|
4
|
+
launcherPadding: "12px 16px",
|
|
5
|
+
launcherMinWidth: "",
|
|
6
|
+
launcherMinHeight: "",
|
|
7
|
+
panelBorderRadius: "12px",
|
|
8
|
+
panelPadding: "12px",
|
|
9
|
+
panelWidth: "320px",
|
|
10
|
+
panelHeight: "420px",
|
|
11
|
+
panelBorder: "1px solid rgba(255,255,255,0.1)",
|
|
12
|
+
panelBoxShadow: "0 8px 30px rgba(0,0,0,0.35)",
|
|
13
|
+
defaultTheme: {
|
|
14
|
+
primary: "#06b6d4",
|
|
15
|
+
background: "#0b1220",
|
|
16
|
+
text: "#e2e8f0",
|
|
17
|
+
},
|
|
18
|
+
layoutToken: "pill-dark",
|
|
19
|
+
},
|
|
20
|
+
"pill-light": {
|
|
21
|
+
launcherBorderRadius: "999px",
|
|
22
|
+
launcherPadding: "12px 16px",
|
|
23
|
+
launcherMinWidth: "",
|
|
24
|
+
launcherMinHeight: "",
|
|
25
|
+
panelBorderRadius: "12px",
|
|
26
|
+
panelPadding: "12px",
|
|
27
|
+
panelWidth: "320px",
|
|
28
|
+
panelHeight: "420px",
|
|
29
|
+
panelBorder: "1px solid rgba(15,23,42,0.12)",
|
|
30
|
+
panelBoxShadow: "0 8px 24px rgba(15,23,42,0.12)",
|
|
31
|
+
defaultTheme: {
|
|
32
|
+
primary: "#0891b2",
|
|
33
|
+
background: "#f8fafc",
|
|
34
|
+
text: "#0f172a",
|
|
35
|
+
},
|
|
36
|
+
layoutToken: "pill-light",
|
|
37
|
+
},
|
|
38
|
+
"rounded-card": {
|
|
39
|
+
launcherBorderRadius: "20px",
|
|
40
|
+
launcherPadding: "14px 20px",
|
|
41
|
+
launcherMinWidth: "",
|
|
42
|
+
launcherMinHeight: "",
|
|
43
|
+
panelBorderRadius: "20px",
|
|
44
|
+
panelPadding: "16px",
|
|
45
|
+
panelWidth: "340px",
|
|
46
|
+
panelHeight: "440px",
|
|
47
|
+
panelBorder: "1px solid rgba(255,255,255,0.12)",
|
|
48
|
+
panelBoxShadow: "0 12px 40px rgba(0,0,0,0.4)",
|
|
49
|
+
defaultTheme: {
|
|
50
|
+
primary: "#06b6d4",
|
|
51
|
+
background: "#0b1220",
|
|
52
|
+
text: "#e2e8f0",
|
|
53
|
+
},
|
|
54
|
+
layoutToken: "rounded-card",
|
|
55
|
+
},
|
|
56
|
+
"minimal-bar": {
|
|
57
|
+
launcherBorderRadius: "8px",
|
|
58
|
+
launcherPadding: "10px 14px",
|
|
59
|
+
launcherMinWidth: "100%",
|
|
60
|
+
launcherMinHeight: "",
|
|
61
|
+
panelBorderRadius: "0",
|
|
62
|
+
panelPadding: "12px 16px",
|
|
63
|
+
panelWidth: "100%",
|
|
64
|
+
panelHeight: "360px",
|
|
65
|
+
panelBorder: "1px solid rgba(255,255,255,0.08)",
|
|
66
|
+
panelBoxShadow: "0 -4px 24px rgba(0,0,0,0.25)",
|
|
67
|
+
defaultTheme: {
|
|
68
|
+
primary: "#06b6d4",
|
|
69
|
+
background: "#0b1220",
|
|
70
|
+
text: "#e2e8f0",
|
|
71
|
+
},
|
|
72
|
+
layoutToken: "minimal-bar",
|
|
73
|
+
},
|
|
74
|
+
"voice-orb": {
|
|
75
|
+
launcherBorderRadius: "50%",
|
|
76
|
+
launcherPadding: "0",
|
|
77
|
+
launcherMinWidth: "56px",
|
|
78
|
+
launcherMinHeight: "56px",
|
|
79
|
+
panelBorderRadius: "16px",
|
|
80
|
+
panelPadding: "12px",
|
|
81
|
+
panelWidth: "320px",
|
|
82
|
+
panelHeight: "420px",
|
|
83
|
+
panelBorder: "1px solid rgba(255,255,255,0.1)",
|
|
84
|
+
panelBoxShadow: "0 8px 30px rgba(0,0,0,0.35)",
|
|
85
|
+
defaultTheme: {
|
|
86
|
+
primary: "#06b6d4",
|
|
87
|
+
background: "#0b1220",
|
|
88
|
+
text: "#e2e8f0",
|
|
89
|
+
},
|
|
90
|
+
layoutToken: "voice-orb",
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
export function getWidgetPreset(id) {
|
|
94
|
+
return PRESETS[id];
|
|
95
|
+
}
|
|
96
|
+
export function resolveWidgetTheme(presetId, themeOverride) {
|
|
97
|
+
const preset = getWidgetPreset(presetId);
|
|
98
|
+
return {
|
|
99
|
+
primary: themeOverride?.primary ?? preset.defaultTheme.primary,
|
|
100
|
+
background: themeOverride?.background ?? preset.defaultTheme.background,
|
|
101
|
+
text: themeOverride?.text ?? preset.defaultTheme.text,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export function applyPreset(target, presetId, themeOverride) {
|
|
105
|
+
const preset = getWidgetPreset(presetId);
|
|
106
|
+
const theme = resolveWidgetTheme(presetId, themeOverride);
|
|
107
|
+
const { root, launcher, panel } = target;
|
|
108
|
+
root.dataset.voicetherePreset = preset.layoutToken;
|
|
109
|
+
launcher.style.borderRadius = preset.launcherBorderRadius;
|
|
110
|
+
launcher.style.padding = preset.launcherPadding;
|
|
111
|
+
launcher.style.minWidth = preset.launcherMinWidth;
|
|
112
|
+
launcher.style.minHeight = preset.launcherMinHeight;
|
|
113
|
+
launcher.style.background = theme.primary;
|
|
114
|
+
launcher.style.color = theme.text;
|
|
115
|
+
panel.style.borderRadius = preset.panelBorderRadius;
|
|
116
|
+
panel.style.padding = preset.panelPadding;
|
|
117
|
+
panel.style.width = preset.panelWidth;
|
|
118
|
+
panel.style.height = preset.panelHeight;
|
|
119
|
+
panel.style.border = preset.panelBorder;
|
|
120
|
+
panel.style.boxShadow = preset.panelBoxShadow;
|
|
121
|
+
panel.style.background = theme.background;
|
|
122
|
+
panel.style.color = theme.text;
|
|
123
|
+
if (presetId === "minimal-bar") {
|
|
124
|
+
root.style.left = "0";
|
|
125
|
+
root.style.right = "0";
|
|
126
|
+
root.style.width = "100%";
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
root.style.width = "";
|
|
130
|
+
}
|
|
131
|
+
return theme;
|
|
132
|
+
}
|
|
133
|
+
export function applyWidgetPosition(root, position, presetId) {
|
|
134
|
+
root.style.bottom = "16px";
|
|
135
|
+
root.dataset.voicetherePosition = position;
|
|
136
|
+
if (presetId === "minimal-bar") {
|
|
137
|
+
root.style.left = "0";
|
|
138
|
+
root.style.right = "0";
|
|
139
|
+
root.style.bottom = "0";
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (position === "bottom-left") {
|
|
143
|
+
root.style.left = "16px";
|
|
144
|
+
root.style.right = "";
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
root.style.right = "16px";
|
|
148
|
+
root.style.left = "";
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/embed/presets.ts"],"names":[],"mappings":"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"}
|