@absolutejs/voice 0.0.22-beta.60 → 0.0.22-beta.61
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/client/index.d.ts +4 -0
- package/dist/client/index.js +192 -12
- package/dist/client/providerSimulationControls.d.ts +33 -0
- package/dist/client/providerSimulationControlsWidget.d.ts +20 -0
- package/dist/react/VoiceProviderSimulationControls.d.ts +5 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.js +341 -70
- package/dist/react/useVoiceProviderSimulationControls.d.ts +10 -0
- package/dist/svelte/createVoiceProviderSimulationControls.d.ts +11 -0
- package/dist/svelte/index.d.ts +1 -0
- package/dist/svelte/index.js +207 -20
- package/dist/vue/VoiceProviderSimulationControls.d.ts +88 -0
- package/dist/vue/index.d.ts +2 -0
- package/dist/vue/index.js +374 -82
- package/dist/vue/useVoiceProviderSimulationControls.d.ts +24 -0
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type VoiceProviderSimulationControlsOptions } from '../client/providerSimulationControls';
|
|
2
|
+
export declare const useVoiceProviderSimulationControls: <TProvider extends string = string>(options: VoiceProviderSimulationControlsOptions<TProvider>) => {
|
|
3
|
+
run: (provider: TProvider, mode: import("../testing").VoiceIOProviderFailureSimulationMode) => Promise<import("../testing").VoiceIOProviderFailureSimulationResult<TProvider> | null>;
|
|
4
|
+
error: string | null;
|
|
5
|
+
isRunning: boolean;
|
|
6
|
+
lastResult: import("../testing").VoiceIOProviderFailureSimulationResult<TProvider> | null;
|
|
7
|
+
mode: import("../testing").VoiceIOProviderFailureSimulationMode | null;
|
|
8
|
+
provider: TProvider | null;
|
|
9
|
+
updatedAt?: number;
|
|
10
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { VoiceProviderSimulationControlsOptions } from '../client/providerSimulationControls';
|
|
2
|
+
export declare const createVoiceProviderSimulationControls: <TProvider extends string = string>(options: VoiceProviderSimulationControlsOptions<TProvider>) => {
|
|
3
|
+
bind: (element: Element) => () => void;
|
|
4
|
+
getHTML: () => string;
|
|
5
|
+
getViewModel: () => import("../client").VoiceProviderSimulationControlsViewModel<TProvider>;
|
|
6
|
+
close: () => void;
|
|
7
|
+
getServerSnapshot: () => import("../client").VoiceProviderSimulationControlsSnapshot<TProvider>;
|
|
8
|
+
getSnapshot: () => import("../client").VoiceProviderSimulationControlsSnapshot<TProvider>;
|
|
9
|
+
run: (provider: TProvider, mode: import("../testing").VoiceIOProviderFailureSimulationMode) => Promise<import("../testing").VoiceIOProviderFailureSimulationResult<TProvider> | null>;
|
|
10
|
+
subscribe: (listener: () => void) => () => void;
|
|
11
|
+
};
|
package/dist/svelte/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { createVoiceAppKitStatus } from './createVoiceAppKitStatus';
|
|
2
2
|
export { createVoiceOpsStatus } from './createVoiceOpsStatus';
|
|
3
|
+
export { createVoiceProviderSimulationControls } from './createVoiceProviderSimulationControls';
|
|
3
4
|
export { createVoiceStream } from './createVoiceStream';
|
|
4
5
|
export { createVoiceProviderStatus } from './createVoiceProviderStatus';
|
|
5
6
|
export { createVoiceRoutingStatus } from './createVoiceRoutingStatus';
|
package/dist/svelte/index.js
CHANGED
|
@@ -287,6 +287,192 @@ var createVoiceOpsStatus = (path = "/app-kit/status", options = {}) => {
|
|
|
287
287
|
subscribe: store.subscribe
|
|
288
288
|
};
|
|
289
289
|
};
|
|
290
|
+
// src/client/providerSimulationControls.ts
|
|
291
|
+
var postSimulation = async (pathPrefix, mode, provider, fetchImpl) => {
|
|
292
|
+
const response = await fetchImpl(`${pathPrefix}/${mode}?provider=${encodeURIComponent(provider)}`, { method: "POST" });
|
|
293
|
+
const body = await response.json().catch(() => null);
|
|
294
|
+
if (!response.ok) {
|
|
295
|
+
const message = body && typeof body === "object" && "error" in body ? String(body.error) : `Voice provider simulation failed: HTTP ${response.status}`;
|
|
296
|
+
throw new Error(message);
|
|
297
|
+
}
|
|
298
|
+
return body;
|
|
299
|
+
};
|
|
300
|
+
var createVoiceProviderSimulationControlsStore = (options) => {
|
|
301
|
+
const listeners = new Set;
|
|
302
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
303
|
+
const pathPrefix = options.pathPrefix ?? `/api/${options.kind ?? "stt"}-simulate`;
|
|
304
|
+
let closed = false;
|
|
305
|
+
let snapshot = {
|
|
306
|
+
error: null,
|
|
307
|
+
isRunning: false,
|
|
308
|
+
lastResult: null,
|
|
309
|
+
mode: null,
|
|
310
|
+
provider: null
|
|
311
|
+
};
|
|
312
|
+
const emit = () => {
|
|
313
|
+
for (const listener of listeners) {
|
|
314
|
+
listener();
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
const run = async (provider, mode) => {
|
|
318
|
+
if (closed) {
|
|
319
|
+
return snapshot.lastResult;
|
|
320
|
+
}
|
|
321
|
+
snapshot = {
|
|
322
|
+
...snapshot,
|
|
323
|
+
error: null,
|
|
324
|
+
isRunning: true,
|
|
325
|
+
mode,
|
|
326
|
+
provider
|
|
327
|
+
};
|
|
328
|
+
emit();
|
|
329
|
+
try {
|
|
330
|
+
const result = await postSimulation(pathPrefix, mode, provider, fetchImpl);
|
|
331
|
+
snapshot = {
|
|
332
|
+
error: null,
|
|
333
|
+
isRunning: false,
|
|
334
|
+
lastResult: result,
|
|
335
|
+
mode,
|
|
336
|
+
provider,
|
|
337
|
+
updatedAt: Date.now()
|
|
338
|
+
};
|
|
339
|
+
emit();
|
|
340
|
+
return result;
|
|
341
|
+
} catch (error) {
|
|
342
|
+
snapshot = {
|
|
343
|
+
...snapshot,
|
|
344
|
+
error: error instanceof Error ? error.message : String(error),
|
|
345
|
+
isRunning: false
|
|
346
|
+
};
|
|
347
|
+
emit();
|
|
348
|
+
throw error;
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
const close = () => {
|
|
352
|
+
closed = true;
|
|
353
|
+
listeners.clear();
|
|
354
|
+
};
|
|
355
|
+
return {
|
|
356
|
+
close,
|
|
357
|
+
getServerSnapshot: () => snapshot,
|
|
358
|
+
getSnapshot: () => snapshot,
|
|
359
|
+
run,
|
|
360
|
+
subscribe: (listener) => {
|
|
361
|
+
listeners.add(listener);
|
|
362
|
+
return () => {
|
|
363
|
+
listeners.delete(listener);
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
// src/client/providerSimulationControlsWidget.ts
|
|
370
|
+
var escapeHtml2 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
371
|
+
var formatKind = (kind) => (kind ?? "stt").toUpperCase();
|
|
372
|
+
var createVoiceProviderSimulationControlsViewModel = (snapshot, options) => {
|
|
373
|
+
const configuredProviders = options.providers.filter((provider) => provider.configured !== false);
|
|
374
|
+
const fallbackReady = !options.fallbackRequiredProvider || configuredProviders.some((entry) => entry.provider === options.fallbackRequiredProvider);
|
|
375
|
+
const failureProviders = (options.failureProviders ? options.failureProviders.map((provider) => ({ provider })) : configuredProviders).filter((provider) => configuredProviders.some((entry) => entry.provider === provider.provider));
|
|
376
|
+
return {
|
|
377
|
+
canSimulateFailure: configuredProviders.length > 0 && fallbackReady,
|
|
378
|
+
description: options.failureMessage ?? `Simulate ${formatKind(options.kind)} provider failure and recovery without changing credentials.`,
|
|
379
|
+
error: snapshot.error,
|
|
380
|
+
failureProviders,
|
|
381
|
+
isRunning: snapshot.isRunning,
|
|
382
|
+
label: snapshot.isRunning ? `Running ${snapshot.mode ?? "simulation"}` : snapshot.lastResult ? `${snapshot.lastResult.provider} ${snapshot.lastResult.mode} simulated` : configuredProviders.length ? `${configuredProviders.length} configured` : "No configured providers",
|
|
383
|
+
providers: configuredProviders,
|
|
384
|
+
resultText: snapshot.lastResult ? JSON.stringify(snapshot.lastResult, null, 2) : null,
|
|
385
|
+
title: options.title ?? `${formatKind(options.kind)} Failure Simulation`
|
|
386
|
+
};
|
|
387
|
+
};
|
|
388
|
+
var renderVoiceProviderSimulationControlsHTML = (snapshot, options) => {
|
|
389
|
+
const model = createVoiceProviderSimulationControlsViewModel(snapshot, options);
|
|
390
|
+
const failureButtons = model.failureProviders.map((provider) => `<button type="button" data-voice-provider-fail="${escapeHtml2(provider.provider)}"${!model.canSimulateFailure || snapshot.isRunning ? " disabled" : ""}>Simulate ${escapeHtml2(provider.provider)} ${escapeHtml2(formatKind(options.kind))} failure</button>`).join("");
|
|
391
|
+
const recoveryButtons = model.providers.map((provider) => `<button type="button" data-voice-provider-recover="${escapeHtml2(provider.provider)}"${snapshot.isRunning ? " disabled" : ""}>Mark ${escapeHtml2(provider.provider)} recovered</button>`).join("");
|
|
392
|
+
return `<section class="absolute-voice-provider-simulation absolute-voice-provider-simulation--${snapshot.error ? "error" : snapshot.isRunning ? "running" : "ready"}">
|
|
393
|
+
<header class="absolute-voice-provider-simulation__header">
|
|
394
|
+
<span class="absolute-voice-provider-simulation__eyebrow">${escapeHtml2(model.title)}</span>
|
|
395
|
+
<strong class="absolute-voice-provider-simulation__label">${escapeHtml2(model.label)}</strong>
|
|
396
|
+
</header>
|
|
397
|
+
<p class="absolute-voice-provider-simulation__description">${escapeHtml2(model.description)}</p>
|
|
398
|
+
${model.canSimulateFailure ? "" : `<p class="absolute-voice-provider-simulation__empty">${escapeHtml2(options.fallbackRequiredMessage ?? "Configure fallback providers before simulating failure.")}</p>`}
|
|
399
|
+
<div class="absolute-voice-provider-simulation__actions">${failureButtons}${recoveryButtons}</div>
|
|
400
|
+
${snapshot.error ? `<p class="absolute-voice-provider-simulation__error">${escapeHtml2(snapshot.error)}</p>` : ""}
|
|
401
|
+
${model.resultText ? `<pre class="absolute-voice-provider-simulation__result">${escapeHtml2(model.resultText)}</pre>` : ""}
|
|
402
|
+
</section>`;
|
|
403
|
+
};
|
|
404
|
+
var bindVoiceProviderSimulationControls = (element, store) => {
|
|
405
|
+
const onClick = (event) => {
|
|
406
|
+
const target = event.target;
|
|
407
|
+
if (!(target instanceof HTMLElement)) {
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
const failProvider = target.getAttribute("data-voice-provider-fail");
|
|
411
|
+
const recoverProvider = target.getAttribute("data-voice-provider-recover");
|
|
412
|
+
if (failProvider) {
|
|
413
|
+
store.run(failProvider, "failure").catch(() => {});
|
|
414
|
+
}
|
|
415
|
+
if (recoverProvider) {
|
|
416
|
+
store.run(recoverProvider, "recovery").catch(() => {});
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
element.addEventListener("click", onClick);
|
|
420
|
+
return () => element.removeEventListener("click", onClick);
|
|
421
|
+
};
|
|
422
|
+
var mountVoiceProviderSimulationControls = (element, options) => {
|
|
423
|
+
const store = createVoiceProviderSimulationControlsStore(options);
|
|
424
|
+
const render = () => {
|
|
425
|
+
element.innerHTML = renderVoiceProviderSimulationControlsHTML(store.getSnapshot(), options);
|
|
426
|
+
};
|
|
427
|
+
const unsubscribeStore = store.subscribe(render);
|
|
428
|
+
const unsubscribeDom = bindVoiceProviderSimulationControls(element, store);
|
|
429
|
+
render();
|
|
430
|
+
return {
|
|
431
|
+
close: () => {
|
|
432
|
+
unsubscribeDom();
|
|
433
|
+
unsubscribeStore();
|
|
434
|
+
store.close();
|
|
435
|
+
},
|
|
436
|
+
run: store.run
|
|
437
|
+
};
|
|
438
|
+
};
|
|
439
|
+
var defineVoiceProviderSimulationControlsElement = (tagName = "absolute-voice-provider-simulation") => {
|
|
440
|
+
if (typeof window === "undefined" || typeof customElements === "undefined" || customElements.get(tagName)) {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
customElements.define(tagName, class AbsoluteVoiceProviderSimulationElement extends HTMLElement {
|
|
444
|
+
mounted;
|
|
445
|
+
connectedCallback() {
|
|
446
|
+
const providers = (this.getAttribute("providers") ?? "").split(",").map((provider) => provider.trim()).filter(Boolean).map((provider) => ({ provider }));
|
|
447
|
+
const failureProviders = (this.getAttribute("failure-providers") ?? "").split(",").map((provider) => provider.trim()).filter(Boolean);
|
|
448
|
+
this.mounted = mountVoiceProviderSimulationControls(this, {
|
|
449
|
+
failureProviders: failureProviders.length ? failureProviders : undefined,
|
|
450
|
+
fallbackRequiredMessage: this.getAttribute("fallback-required-message") ?? undefined,
|
|
451
|
+
fallbackRequiredProvider: this.getAttribute("fallback-required-provider") ?? undefined,
|
|
452
|
+
failureMessage: this.getAttribute("failure-message") ?? undefined,
|
|
453
|
+
kind: this.getAttribute("kind") ?? "stt",
|
|
454
|
+
pathPrefix: this.getAttribute("path-prefix") ?? undefined,
|
|
455
|
+
providers,
|
|
456
|
+
title: this.getAttribute("title") ?? undefined
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
disconnectedCallback() {
|
|
460
|
+
this.mounted?.close();
|
|
461
|
+
this.mounted = undefined;
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
// src/svelte/createVoiceProviderSimulationControls.ts
|
|
467
|
+
var createVoiceProviderSimulationControls = (options) => {
|
|
468
|
+
const store = createVoiceProviderSimulationControlsStore(options);
|
|
469
|
+
return {
|
|
470
|
+
...store,
|
|
471
|
+
bind: (element) => bindVoiceProviderSimulationControls(element, store),
|
|
472
|
+
getHTML: () => renderVoiceProviderSimulationControlsHTML(store.getSnapshot(), options),
|
|
473
|
+
getViewModel: () => createVoiceProviderSimulationControlsViewModel(store.getSnapshot(), options)
|
|
474
|
+
};
|
|
475
|
+
};
|
|
290
476
|
// src/client/actions.ts
|
|
291
477
|
var normalizeErrorMessage = (value) => {
|
|
292
478
|
if (typeof value === "string" && value.trim()) {
|
|
@@ -885,7 +1071,7 @@ var createVoiceProviderStatusStore = (path = "/api/provider-status", options = {
|
|
|
885
1071
|
// src/client/providerStatusWidget.ts
|
|
886
1072
|
var DEFAULT_TITLE2 = "Voice Providers";
|
|
887
1073
|
var DEFAULT_DESCRIPTION2 = "Live provider health, fallback counts, latency, and suppression state from your self-hosted trace store.";
|
|
888
|
-
var
|
|
1074
|
+
var escapeHtml3 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
889
1075
|
var formatProvider = (provider) => provider.split(/[-_\s]+/).filter(Boolean).map((part) => `${part[0]?.toUpperCase() ?? ""}${part.slice(1)}`).join(" ") || provider;
|
|
890
1076
|
var formatStatus = (status) => status.split("-").map((part) => `${part[0]?.toUpperCase() ?? ""}${part.slice(1)}`).join(" ");
|
|
891
1077
|
var formatLatency = (value) => typeof value === "number" ? `${value}ms` : "No samples";
|
|
@@ -941,25 +1127,25 @@ var createVoiceProviderStatusViewModel = (snapshot, options = {}) => {
|
|
|
941
1127
|
};
|
|
942
1128
|
var renderVoiceProviderStatusHTML = (snapshot, options = {}) => {
|
|
943
1129
|
const model = createVoiceProviderStatusViewModel(snapshot, options);
|
|
944
|
-
const providers = model.providers.length ? `<div class="absolute-voice-provider-status__providers">${model.providers.map((provider) => `<article class="absolute-voice-provider-status__provider absolute-voice-provider-status__provider--${
|
|
1130
|
+
const providers = model.providers.length ? `<div class="absolute-voice-provider-status__providers">${model.providers.map((provider) => `<article class="absolute-voice-provider-status__provider absolute-voice-provider-status__provider--${escapeHtml3(provider.status)}">
|
|
945
1131
|
<header>
|
|
946
|
-
<strong>${
|
|
947
|
-
<span>${
|
|
1132
|
+
<strong>${escapeHtml3(provider.label)}</strong>
|
|
1133
|
+
<span>${escapeHtml3(formatStatus(provider.status))}</span>
|
|
948
1134
|
</header>
|
|
949
|
-
<p>${
|
|
1135
|
+
<p>${escapeHtml3(provider.detail)}</p>
|
|
950
1136
|
<dl>${provider.rows.map((row) => `<div>
|
|
951
|
-
<dt>${
|
|
952
|
-
<dd>${
|
|
1137
|
+
<dt>${escapeHtml3(row.label)}</dt>
|
|
1138
|
+
<dd>${escapeHtml3(row.value)}</dd>
|
|
953
1139
|
</div>`).join("")}</dl>
|
|
954
1140
|
</article>`).join("")}</div>` : '<p class="absolute-voice-provider-status__empty">Run voice traffic to see provider health.</p>';
|
|
955
|
-
return `<section class="absolute-voice-provider-status absolute-voice-provider-status--${
|
|
1141
|
+
return `<section class="absolute-voice-provider-status absolute-voice-provider-status--${escapeHtml3(model.status)}">
|
|
956
1142
|
<header class="absolute-voice-provider-status__header">
|
|
957
|
-
<span class="absolute-voice-provider-status__eyebrow">${
|
|
958
|
-
<strong class="absolute-voice-provider-status__label">${
|
|
1143
|
+
<span class="absolute-voice-provider-status__eyebrow">${escapeHtml3(model.title)}</span>
|
|
1144
|
+
<strong class="absolute-voice-provider-status__label">${escapeHtml3(model.label)}</strong>
|
|
959
1145
|
</header>
|
|
960
|
-
<p class="absolute-voice-provider-status__description">${
|
|
1146
|
+
<p class="absolute-voice-provider-status__description">${escapeHtml3(model.description)}</p>
|
|
961
1147
|
${providers}
|
|
962
|
-
${model.error ? `<p class="absolute-voice-provider-status__error">${
|
|
1148
|
+
${model.error ? `<p class="absolute-voice-provider-status__error">${escapeHtml3(model.error)}</p>` : ""}
|
|
963
1149
|
</section>`;
|
|
964
1150
|
};
|
|
965
1151
|
var getVoiceProviderStatusCSS = () => `.absolute-voice-provider-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-provider-status--error,.absolute-voice-provider-status--warning{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-provider-status__header,.absolute-voice-provider-status__provider header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-provider-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-provider-status__label{font-size:24px;line-height:1}.absolute-voice-provider-status__description,.absolute-voice-provider-status__provider p,.absolute-voice-provider-status__provider dt,.absolute-voice-provider-status__empty{color:#514733}.absolute-voice-provider-status__providers{display:grid;gap:12px;margin-top:14px}.absolute-voice-provider-status__provider{background:#fff;border:1px solid #eee4d2;border-radius:16px;padding:14px}.absolute-voice-provider-status__provider--degraded,.absolute-voice-provider-status__provider--rate-limited,.absolute-voice-provider-status__provider--suppressed{border-color:#f2a7a7}.absolute-voice-provider-status__provider--recoverable{border-color:#fbbf24}.absolute-voice-provider-status__provider p{margin:10px 0}.absolute-voice-provider-status__provider dl{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin:0}.absolute-voice-provider-status__provider div{background:#fffaf0;border:1px solid #eee4d2;border-radius:12px;padding:8px}.absolute-voice-provider-status__provider dt{font-size:12px}.absolute-voice-provider-status__provider dd{font-weight:800;margin:4px 0 0}.absolute-voice-provider-status__empty{margin:14px 0 0}.absolute-voice-provider-status__error{color:#9f1239;font-weight:700}`;
|
|
@@ -1092,7 +1278,7 @@ var createVoiceRoutingStatusStore = (path = "/api/routing/latest", options = {})
|
|
|
1092
1278
|
// src/client/routingStatusWidget.ts
|
|
1093
1279
|
var DEFAULT_TITLE3 = "Voice Routing";
|
|
1094
1280
|
var DEFAULT_DESCRIPTION3 = "Latest provider routing decision from the self-hosted trace store.";
|
|
1095
|
-
var
|
|
1281
|
+
var escapeHtml4 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
1096
1282
|
var formatValue = (value, fallback = "None") => typeof value === "string" && value.trim() ? value : typeof value === "number" && Number.isFinite(value) ? String(value) : fallback;
|
|
1097
1283
|
var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
1098
1284
|
const decision = snapshot.decision;
|
|
@@ -1129,17 +1315,17 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
1129
1315
|
var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
1130
1316
|
const model = createVoiceRoutingStatusViewModel(snapshot, options);
|
|
1131
1317
|
const rows = model.rows.length ? `<div class="absolute-voice-routing-status__grid">${model.rows.map((row) => `<div>
|
|
1132
|
-
<span>${
|
|
1133
|
-
<strong>${
|
|
1318
|
+
<span>${escapeHtml4(row.label)}</span>
|
|
1319
|
+
<strong>${escapeHtml4(row.value)}</strong>
|
|
1134
1320
|
</div>`).join("")}</div>` : '<p class="absolute-voice-routing-status__empty">Start a voice session to see the selected provider.</p>';
|
|
1135
|
-
return `<section class="absolute-voice-routing-status absolute-voice-routing-status--${
|
|
1321
|
+
return `<section class="absolute-voice-routing-status absolute-voice-routing-status--${escapeHtml4(model.status)}">
|
|
1136
1322
|
<header class="absolute-voice-routing-status__header">
|
|
1137
|
-
<span class="absolute-voice-routing-status__eyebrow">${
|
|
1138
|
-
<strong class="absolute-voice-routing-status__label">${
|
|
1323
|
+
<span class="absolute-voice-routing-status__eyebrow">${escapeHtml4(model.title)}</span>
|
|
1324
|
+
<strong class="absolute-voice-routing-status__label">${escapeHtml4(model.label)}</strong>
|
|
1139
1325
|
</header>
|
|
1140
|
-
<p class="absolute-voice-routing-status__description">${
|
|
1326
|
+
<p class="absolute-voice-routing-status__description">${escapeHtml4(model.description)}</p>
|
|
1141
1327
|
${rows}
|
|
1142
|
-
${model.error ? `<p class="absolute-voice-routing-status__error">${
|
|
1328
|
+
${model.error ? `<p class="absolute-voice-routing-status__error">${escapeHtml4(model.error)}</p>` : ""}
|
|
1143
1329
|
</section>`;
|
|
1144
1330
|
};
|
|
1145
1331
|
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}`;
|
|
@@ -1904,6 +2090,7 @@ export {
|
|
|
1904
2090
|
createVoiceStream2 as createVoiceStream,
|
|
1905
2091
|
createVoiceRoutingStatus,
|
|
1906
2092
|
createVoiceProviderStatus,
|
|
2093
|
+
createVoiceProviderSimulationControls,
|
|
1907
2094
|
createVoiceOpsStatus,
|
|
1908
2095
|
createVoiceController,
|
|
1909
2096
|
createVoiceAppKitStatus
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { VoiceProviderSimulationProvider } from '../client/providerSimulationControls';
|
|
3
|
+
export declare const VoiceProviderSimulationControls: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
class: {
|
|
5
|
+
default: string;
|
|
6
|
+
type: StringConstructor;
|
|
7
|
+
};
|
|
8
|
+
fallbackRequiredMessage: {
|
|
9
|
+
default: undefined;
|
|
10
|
+
type: StringConstructor;
|
|
11
|
+
};
|
|
12
|
+
fallbackRequiredProvider: {
|
|
13
|
+
default: undefined;
|
|
14
|
+
type: StringConstructor;
|
|
15
|
+
};
|
|
16
|
+
failureMessage: {
|
|
17
|
+
default: undefined;
|
|
18
|
+
type: StringConstructor;
|
|
19
|
+
};
|
|
20
|
+
failureProviders: {
|
|
21
|
+
default: undefined;
|
|
22
|
+
type: PropType<readonly string[] | undefined>;
|
|
23
|
+
};
|
|
24
|
+
kind: {
|
|
25
|
+
default: string;
|
|
26
|
+
type: StringConstructor;
|
|
27
|
+
};
|
|
28
|
+
pathPrefix: {
|
|
29
|
+
default: undefined;
|
|
30
|
+
type: StringConstructor;
|
|
31
|
+
};
|
|
32
|
+
providers: {
|
|
33
|
+
required: true;
|
|
34
|
+
type: PropType<readonly VoiceProviderSimulationProvider[]>;
|
|
35
|
+
};
|
|
36
|
+
title: {
|
|
37
|
+
default: undefined;
|
|
38
|
+
type: StringConstructor;
|
|
39
|
+
};
|
|
40
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
43
|
+
class: {
|
|
44
|
+
default: string;
|
|
45
|
+
type: StringConstructor;
|
|
46
|
+
};
|
|
47
|
+
fallbackRequiredMessage: {
|
|
48
|
+
default: undefined;
|
|
49
|
+
type: StringConstructor;
|
|
50
|
+
};
|
|
51
|
+
fallbackRequiredProvider: {
|
|
52
|
+
default: undefined;
|
|
53
|
+
type: StringConstructor;
|
|
54
|
+
};
|
|
55
|
+
failureMessage: {
|
|
56
|
+
default: undefined;
|
|
57
|
+
type: StringConstructor;
|
|
58
|
+
};
|
|
59
|
+
failureProviders: {
|
|
60
|
+
default: undefined;
|
|
61
|
+
type: PropType<readonly string[] | undefined>;
|
|
62
|
+
};
|
|
63
|
+
kind: {
|
|
64
|
+
default: string;
|
|
65
|
+
type: StringConstructor;
|
|
66
|
+
};
|
|
67
|
+
pathPrefix: {
|
|
68
|
+
default: undefined;
|
|
69
|
+
type: StringConstructor;
|
|
70
|
+
};
|
|
71
|
+
providers: {
|
|
72
|
+
required: true;
|
|
73
|
+
type: PropType<readonly VoiceProviderSimulationProvider[]>;
|
|
74
|
+
};
|
|
75
|
+
title: {
|
|
76
|
+
default: undefined;
|
|
77
|
+
type: StringConstructor;
|
|
78
|
+
};
|
|
79
|
+
}>> & Readonly<{}>, {
|
|
80
|
+
kind: string;
|
|
81
|
+
title: string;
|
|
82
|
+
fallbackRequiredProvider: string;
|
|
83
|
+
fallbackRequiredMessage: string;
|
|
84
|
+
failureProviders: readonly string[] | undefined;
|
|
85
|
+
failureMessage: string;
|
|
86
|
+
pathPrefix: string;
|
|
87
|
+
class: string;
|
|
88
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
package/dist/vue/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export { VoiceOpsStatus } from './VoiceOpsStatus';
|
|
2
|
+
export { VoiceProviderSimulationControls } from './VoiceProviderSimulationControls';
|
|
2
3
|
export { VoiceProviderStatus } from './VoiceProviderStatus';
|
|
3
4
|
export { VoiceRoutingStatus } from './VoiceRoutingStatus';
|
|
4
5
|
export { useVoiceAppKitStatus } from './useVoiceAppKitStatus';
|
|
5
6
|
export { useVoiceStream } from './useVoiceStream';
|
|
6
7
|
export { useVoiceController } from './useVoiceController';
|
|
7
8
|
export { useVoiceProviderStatus } from './useVoiceProviderStatus';
|
|
9
|
+
export { useVoiceProviderSimulationControls } from './useVoiceProviderSimulationControls';
|
|
8
10
|
export { useVoiceRoutingStatus } from './useVoiceRoutingStatus';
|
|
9
11
|
export { useVoiceWorkflowStatus } from './useVoiceWorkflowStatus';
|