@oshara/voice-sdk 0.1.0
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/README.md +198 -0
- package/dist/appearance-CNWT8x1G.cjs +2 -0
- package/dist/appearance-CNWT8x1G.cjs.map +1 -0
- package/dist/appearance-i6QBkpCk.js +650 -0
- package/dist/appearance-i6QBkpCk.js.map +1 -0
- package/dist/consent-CK9VXNPa.js +54 -0
- package/dist/consent-CK9VXNPa.js.map +1 -0
- package/dist/consent-D7QNSkQD.cjs +2 -0
- package/dist/consent-D7QNSkQD.cjs.map +1 -0
- package/dist/core/analytics.d.ts +30 -0
- package/dist/core/appearance.d.ts +113 -0
- package/dist/core/audioSettings.d.ts +69 -0
- package/dist/core/consent.d.ts +17 -0
- package/dist/core/createVoiceAgent.d.ts +79 -0
- package/dist/core/events.d.ts +103 -0
- package/dist/core/formController.d.ts +28 -0
- package/dist/core/forms.d.ts +235 -0
- package/dist/core/index.d.ts +29 -0
- package/dist/core/prevContext.d.ts +26 -0
- package/dist/core/transport.d.ts +30 -0
- package/dist/core/types.d.ts +49 -0
- package/dist/core/voice.d.ts +79 -0
- package/dist/createVoiceAgent-BM3HODS6.js +1058 -0
- package/dist/createVoiceAgent-BM3HODS6.js.map +1 -0
- package/dist/createVoiceAgent-CJWxWzz6.cjs +4 -0
- package/dist/createVoiceAgent-CJWxWzz6.cjs.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.d.ts +60 -0
- package/dist/react.cjs +2 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.js +115 -0
- package/dist/react.js.map +1 -0
- package/dist/styles.css +1838 -0
- package/dist/ui/index.d.ts +21 -0
- package/dist/ui/ui.d.ts +165 -0
- package/dist/ui.cjs +284 -0
- package/dist/ui.cjs.map +1 -0
- package/dist/ui.js +1153 -0
- package/dist/ui.js.map +1 -0
- package/package.json +67 -0
- package/src/core/analytics.ts +111 -0
- package/src/core/appearance.ts +464 -0
- package/src/core/audioSettings.ts +180 -0
- package/src/core/consent.ts +78 -0
- package/src/core/createVoiceAgent.ts +280 -0
- package/src/core/events.ts +120 -0
- package/src/core/formController.ts +317 -0
- package/src/core/forms.ts +861 -0
- package/src/core/index.ts +121 -0
- package/src/core/prevContext.ts +153 -0
- package/src/core/transport.ts +118 -0
- package/src/core/types.ts +66 -0
- package/src/core/voice.ts +1179 -0
- package/src/react/index.ts +238 -0
- package/src/ui/index.ts +507 -0
- package/src/ui/styles.css +1838 -0
- package/src/ui/ui.ts +1672 -0
- package/src/vite-env.d.ts +10 -0
package/dist/ui.cjs
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ke=require("./consent-D7QNSkQD.cjs"),k=require("./appearance-CNWT8x1G.cjs"),Ce=':host{all:initial;--va-primary: #6366f1;--va-primary-text: #ffffff;--va-accent: #22d3ee;--va-accent-text: #0b1020;--va-background: #ffffff;--va-surface: #f6f7fb;--va-text: #0f172a;--va-text-muted: #64748b;--va-user-bubble: #6366f1;--va-user-bubble-text: #ffffff;--va-agent-bubble: #f1f5f9;--va-agent-bubble-text: #0f172a;--va-fab-size: 64px;--va-panel-width: 380px;--va-panel-height: 620px;--va-border-radius: 24px;--va-edge-offset: 24px;--va-panel-offset: calc(var(--va-fab-size) + 20px);--va-font: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif;font-family:var(--va-font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}.fab{position:fixed;width:var(--va-fab-size);height:var(--va-fab-size);border-radius:999px;background:var(--va-primary);background-image:linear-gradient(135deg,var(--va-primary),var(--va-accent));color:var(--va-primary-text);border:none;cursor:pointer;box-shadow:0 12px 30px -8px color-mix(in srgb,var(--va-primary) 55%,transparent),0 4px 12px #00000029;display:inline-flex;align-items:center;justify-content:center;z-index:2147483646;transition:transform .18s ease,box-shadow .18s ease,padding .2s ease;overflow:hidden;padding:0;font-family:inherit;font-size:14px;font-weight:600;letter-spacing:.005em;line-height:1;white-space:nowrap}.fab:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(circle at 30% 22%,rgba(255,255,255,.32),transparent 55%);pointer-events:none}.fab:hover{transform:translateY(-2px);box-shadow:0 18px 40px -10px color-mix(in srgb,var(--va-primary) 70%,transparent),0 6px 16px #0003}.fab:active{transform:translateY(0)}.fab .fab-icon{position:relative;display:inline-flex;align-items:center;justify-content:center;width:calc(var(--va-fab-size) * .42);height:calc(var(--va-fab-size) * .42);flex-shrink:0}.fab .fab-icon svg{width:100%;height:100%}.fab .fab-text{position:relative;display:inline-flex;flex-direction:column;align-items:flex-start;justify-content:center;line-height:1;text-align:left}.fab .fab-label{display:block;font-size:14px;font-weight:600;letter-spacing:.005em;line-height:1.1}.fab .fab-sublabel{display:none;margin-top:3px;font-size:10.5px;font-weight:500;letter-spacing:.04em;line-height:1.1;opacity:.82}.fab.has-sublabel .fab-sublabel{display:block}.fab.has-label{width:auto;height:auto;min-height:calc(var(--va-fab-size) * .82);padding:8px 22px 8px 16px;gap:12px}.fab.has-sublabel{min-height:calc(var(--va-fab-size) * .95);padding:10px 22px 10px 16px}.fab.has-label .fab-icon{width:calc(var(--va-fab-size) * .58);height:calc(var(--va-fab-size) * .58);border-radius:50%;background:#ffffff29;box-shadow:inset 0 0 0 1px #ffffff38,inset 0 1px #ffffff47,0 4px 10px -4px #00000040;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);overflow:hidden}.fab.has-label .fab-icon svg{width:56%;height:56%}.fab.has-label .fab-logo{border-radius:50%}.fab .fab-logo,.fab img.fab-logo{position:relative;width:100%;height:100%;object-fit:cover;border-radius:50%}.panel{position:fixed;width:min(var(--va-panel-width),calc(100vw - 2 * var(--va-edge-offset)));height:var(--va-panel-height);max-height:calc(100vh - var(--va-panel-offset) - var(--va-edge-offset));max-height:calc(100dvh - var(--va-panel-offset) - var(--va-edge-offset));background:var(--va-background);color:var(--va-text);border-radius:var(--va-border-radius);box-shadow:0 30px 70px -16px #0f172a52,0 10px 24px -10px #0f172a2e;display:flex;flex-direction:column;overflow:hidden;z-index:2147483647;border:1px solid color-mix(in srgb,var(--va-text) 7%,transparent);animation:va-panel-in .24s cubic-bezier(.16,1,.3,1);transition:transform .24s ease,opacity .24s ease,height .3s ease}.panel[data-screen=call]:not(.with-transcript){height:auto}@keyframes va-panel-in{0%{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}:host([data-position="bottom-right"]) .fab,:host(:not([data-position])) .fab{right:var(--va-edge-offset);bottom:var(--va-edge-offset)}:host([data-position="bottom-right"]) .panel,:host(:not([data-position])) .panel{right:var(--va-edge-offset);bottom:var(--va-panel-offset)}:host([data-position="bottom-left"]) .fab{left:var(--va-edge-offset);bottom:var(--va-edge-offset)}:host([data-position="bottom-left"]) .panel{left:var(--va-edge-offset);bottom:var(--va-panel-offset)}:host([data-position="top-right"]) .fab{right:var(--va-edge-offset);top:var(--va-edge-offset)}:host([data-position="top-right"]) .panel{right:var(--va-edge-offset);top:var(--va-panel-offset)}:host([data-position="top-left"]) .fab{left:var(--va-edge-offset);top:var(--va-edge-offset)}:host([data-position="top-left"]) .panel{left:var(--va-edge-offset);top:var(--va-panel-offset)}@media (max-width: 460px){:host(:not([data-inline])){--va-edge-offset: 12px;--va-panel-offset: calc(var(--va-fab-size) + 12px)}:host(:not([data-inline])) .panel{left:var(--va-edge-offset);right:var(--va-edge-offset);width:auto}}:host([data-inline]){display:block;width:100%;height:100%}:host([data-inline]) .fab{display:none}:host([data-inline]) .panel{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-height:none;border-radius:0;border:none;box-shadow:none;animation:none}.close{position:absolute;top:14px;right:14px;width:32px;height:32px;border-radius:50%;background:color-mix(in srgb,var(--va-text) 6%,transparent);border:none;color:var(--va-text);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;z-index:5;transition:background .15s ease,transform .15s ease;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.close:hover{background:color-mix(in srgb,var(--va-text) 14%,transparent);transform:scale(1.06)}.close svg{width:16px;height:16px}:host([data-close-button-hide]) .close{display:none}.screen{flex:1;min-height:0;display:flex;flex-direction:column;animation:va-screen-in .3s cubic-bezier(.16,1,.3,1)}@keyframes va-screen-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.screen-welcome{background:radial-gradient(95% 70% at 50% -10%,color-mix(in srgb,var(--va-primary) 14%,transparent),transparent 65%),radial-gradient(75% 55% at 105% 115%,color-mix(in srgb,var(--va-accent) 14%,transparent),transparent 65%),var(--va-background);align-items:stretch;justify-content:space-between;padding:56px 28px 18px;text-align:center;position:relative}.welcome-inner{display:flex;flex-direction:column;align-items:center;gap:0;max-width:100%;margin:auto 0}.welcome-logo{position:relative;width:88px;height:88px;border-radius:50%;background:linear-gradient(135deg,var(--va-primary),var(--va-accent));display:flex;align-items:center;justify-content:center;color:var(--va-primary-text);box-shadow:0 18px 44px -16px color-mix(in srgb,var(--va-primary) 55%,transparent),inset 0 1px #ffffff4d;overflow:hidden}.welcome-logo:before{content:"";position:absolute;top:-10px;right:-10px;bottom:-10px;left:-10px;border-radius:50%;background:radial-gradient(circle at center,color-mix(in srgb,var(--va-primary) 22%,transparent),transparent 70%);z-index:-1;filter:blur(6px)}.welcome-logo:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(circle at 30% 22%,rgba(255,255,255,.42),transparent 55%);pointer-events:none}.welcome-logo-img{width:100%;height:100%;object-fit:cover;border-radius:inherit;position:relative}.welcome-logo-fallback{position:relative;display:flex;align-items:center;justify-content:center;width:48%;height:48%;color:var(--va-primary-text)}.welcome-logo-fallback svg{width:100%;height:100%}.welcome-status{margin-top:18px;display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;background:color-mix(in srgb,var(--va-text) 5%,transparent);border:1px solid color-mix(in srgb,var(--va-text) 7%,transparent);font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--va-text-muted);text-transform:uppercase}.welcome-status-dot{width:6px;height:6px;border-radius:50%;background:#22c55e;box-shadow:0 0 #22c55e80;animation:va-pulse-status 1.8s ease-out infinite}@keyframes va-pulse-status{0%{box-shadow:0 0 #22c55e73}70%{box-shadow:0 0 0 7px #22c55e00}to{box-shadow:0 0 #22c55e00}}.welcome-name{margin:14px 0 6px;font-size:22px;font-weight:600;letter-spacing:-.022em;color:var(--va-text);line-height:1.2}.welcome-desc{margin:0 0 18px;font-size:13.5px;line-height:1.55;color:var(--va-text-muted);max-width:260px;font-weight:400}.lang-picker{position:relative;margin:0 0 16px;width:100%;max-width:260px;display:flex;justify-content:center}.lang-trigger{display:inline-flex;align-items:center;gap:10px;padding:8px 10px 8px 14px;border-radius:999px;border:1px solid color-mix(in srgb,var(--va-text) 10%,transparent);background:color-mix(in srgb,var(--va-background) 92%,var(--va-text) 8%);color:var(--va-text);cursor:pointer;font-family:inherit;font-size:13px;font-weight:500;line-height:1;letter-spacing:-.005em;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease,transform .15s ease;box-shadow:0 1px 2px #0f172a0a;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.lang-trigger:hover{border-color:color-mix(in srgb,var(--va-primary) 35%,transparent);background:color-mix(in srgb,var(--va-primary) 7%,var(--va-background));transform:translateY(-1px);box-shadow:0 6px 16px -10px color-mix(in srgb,var(--va-primary) 40%,transparent)}.lang-trigger:focus-visible{outline:none;border-color:var(--va-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--va-primary) 22%,transparent)}.lang-trigger-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--va-primary);opacity:.9;flex-shrink:0}.lang-trigger-icon svg{width:100%;height:100%}.lang-trigger-text{display:inline-flex;flex-direction:column;align-items:flex-start;line-height:1;gap:3px;min-width:0}.lang-trigger-eyebrow{font-size:9px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--va-text-muted);opacity:.8}.lang-trigger-label{font-size:13px;font-weight:600;color:var(--va-text);letter-spacing:-.005em;white-space:nowrap}.lang-trigger-code{font-size:10.5px;font-weight:700;letter-spacing:.08em;padding:4px 8px;border-radius:999px;background:linear-gradient(135deg,var(--va-primary),var(--va-accent));color:var(--va-primary-text);line-height:1;box-shadow:inset 0 1px #ffffff40}.lang-trigger-chev{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;color:var(--va-text-muted);transition:transform .18s ease,color .18s ease}.lang-trigger-chev svg{width:100%;height:100%}.lang-picker[data-open=true] .lang-trigger-chev{transform:rotate(180deg);color:var(--va-primary)}.lang-picker[data-open=true] .lang-trigger{border-color:color-mix(in srgb,var(--va-primary) 45%,transparent);background:color-mix(in srgb,var(--va-primary) 6%,var(--va-background))}.lang-menu{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%);min-width:min(220px,calc(100vw - 2 * var(--va-edge-offset) - 24px));max-width:min(280px,calc(100vw - 2 * var(--va-edge-offset) - 24px));background:var(--va-background);border:1px solid color-mix(in srgb,var(--va-text) 10%,transparent);border-radius:16px;padding:6px;z-index:4;box-shadow:0 18px 40px -14px #0f172a52,0 6px 16px -8px #0f172a29;display:flex;flex-direction:column;gap:2px;animation:va-lang-menu-in .16s cubic-bezier(.16,1,.3,1)}.lang-menu[hidden]{display:none}@keyframes va-lang-menu-in{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}.lang-option{display:flex;align-items:center;gap:10px;padding:9px 10px 9px 12px;border:none;background:transparent;border-radius:11px;cursor:pointer;font-family:inherit;text-align:left;color:var(--va-text);transition:background .12s ease,color .12s ease}.lang-option:hover{background:color-mix(in srgb,var(--va-text) 6%,transparent)}.lang-option-text{display:inline-flex;flex-direction:column;gap:2px;flex:1;min-width:0}.lang-option-native{font-size:13.5px;font-weight:600;line-height:1.15;letter-spacing:-.005em;color:var(--va-text)}.lang-option-label{font-size:11px;line-height:1.1;color:var(--va-text-muted);letter-spacing:.01em}.lang-option-code{font-size:10px;font-weight:700;letter-spacing:.1em;padding:3px 7px;border-radius:999px;background:color-mix(in srgb,var(--va-text) 8%,transparent);color:var(--va-text-muted);line-height:1}.lang-option-check{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--va-primary);opacity:0;transform:scale(.6);transition:opacity .14s ease,transform .14s ease}.lang-option-check svg{width:100%;height:100%}.lang-option.is-active{background:color-mix(in srgb,var(--va-primary) 10%,transparent)}.lang-option.is-active .lang-option-code{background:linear-gradient(135deg,var(--va-primary),var(--va-accent));color:var(--va-primary-text)}.lang-option.is-active .lang-option-check{opacity:1;transform:scale(1)}.start-btn{position:relative;display:inline-flex;align-items:center;gap:10px;padding:13px 26px;border:none;border-radius:999px;background:linear-gradient(135deg,var(--va-primary),var(--va-accent));color:var(--va-primary-text);font-family:inherit;font-size:14.5px;font-weight:600;letter-spacing:.005em;cursor:pointer;box-shadow:0 14px 30px -12px color-mix(in srgb,var(--va-primary) 60%,transparent),0 2px 8px #00000014,inset 0 1px #ffffff40;transition:transform .16s ease,box-shadow .16s ease,filter .16s ease;overflow:hidden}.start-btn:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:linear-gradient(180deg,rgba(255,255,255,.18),transparent 45%);pointer-events:none}.start-btn:hover{transform:translateY(-1px);box-shadow:0 18px 36px -12px color-mix(in srgb,var(--va-primary) 70%,transparent),0 4px 12px #0000001f,inset 0 1px #ffffff4d;filter:brightness(1.04)}.start-btn:active{transform:translateY(0);filter:brightness(.96)}.start-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.start-btn-icon{display:inline-flex;position:relative}.start-btn-icon svg{width:17px;height:17px}.start-btn-label{position:relative}.consent{margin:12px auto 0;max-width:280px;font-size:11.5px;line-height:1.45;color:var(--va-text-muted);text-align:center;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:4px}.consent[hidden]{display:none}.consent-text{opacity:.85}.consent-link{color:var(--va-primary);font-weight:600;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--va-primary) 35%,transparent);text-underline-offset:2px;transition:text-decoration-color .15s ease,color .15s ease}.consent-link:hover{text-decoration-color:var(--va-primary)}.consent-link:focus-visible{outline:none;border-radius:4px;box-shadow:0 0 0 3px color-mix(in srgb,var(--va-primary) 22%,transparent)}.welcome-foot{display:block;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--va-text-muted);opacity:.55;text-decoration:none;font-weight:500;padding-top:14px;margin-top:14px;border-top:1px solid color-mix(in srgb,var(--va-text) 6%,transparent);transition:opacity .15s ease}.welcome-foot.is-link{cursor:pointer}.welcome-foot.is-link:hover{opacity:.9}.screen-call{position:relative;background:radial-gradient(120% 70% at 50% -10%,color-mix(in srgb,var(--va-primary) 13%,transparent),transparent 70%),radial-gradient(80% 50% at 100% 110%,color-mix(in srgb,var(--va-accent) 10%,transparent),transparent 70%),var(--va-background)}.call-header{padding:20px 56px 8px 22px;display:flex;align-items:center;gap:12px}.call-timer{margin-left:auto;display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;background:color-mix(in srgb,var(--va-text) 6%,transparent);border:1px solid color-mix(in srgb,var(--va-text) 10%,transparent);font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--va-text-muted);letter-spacing:.02em;line-height:1;flex-shrink:0;transition:background .2s ease,color .2s ease,border-color .2s ease}.call-timer[hidden]{display:none}.call-timer.warning{background:color-mix(in srgb,#ef4444 14%,transparent);border-color:color-mix(in srgb,#ef4444 35%,transparent);color:#ef4444;animation:va-timer-pulse 1s ease-in-out infinite}@keyframes va-timer-pulse{0%,to{opacity:1}50%{opacity:.65}}.call-id{display:flex;align-items:center;gap:12px;min-width:0}.call-logo{position:relative;width:42px;height:42px;border-radius:14px;background:linear-gradient(135deg,var(--va-primary),var(--va-accent));display:flex;align-items:center;justify-content:center;color:var(--va-primary-text);overflow:hidden;flex-shrink:0;box-shadow:inset 0 1px #ffffff38}.call-logo-img{width:100%;height:100%;object-fit:cover;border-radius:inherit}.call-logo-fallback{width:55%;height:55%;display:flex;align-items:center;justify-content:center}.call-logo-fallback svg{width:100%;height:100%}.call-id-text{min-width:0}.call-name{font-size:14.5px;font-weight:600;color:var(--va-text);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.call-status{font-size:12px;color:var(--va-text-muted);display:inline-flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.call-status:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--va-accent);box-shadow:0 0 color-mix(in srgb,var(--va-accent) 60%,transparent);animation:va-pulse-dot 1.6s ease-out infinite;flex-shrink:0}@keyframes va-pulse-dot{0%{box-shadow:0 0 color-mix(in srgb,var(--va-accent) 50%,transparent)}70%{box-shadow:0 0 0 8px color-mix(in srgb,var(--va-accent) 0%,transparent)}to{box-shadow:0 0 color-mix(in srgb,var(--va-accent) 0%,transparent)}}.call-stage{flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:18px 16px 12px}.orb{position:relative;width:140px;height:140px;display:flex;align-items:center;justify-content:center}.orb-core{position:relative;width:76px;height:76px;border-radius:50%;background:radial-gradient(circle at 30% 28%,color-mix(in srgb,var(--va-primary) 25%,white) 0%,var(--va-primary) 55%,color-mix(in srgb,var(--va-primary) 70%,black) 100%);box-shadow:inset 0 -12px 22px #00000038,inset 0 5px 10px #ffffff47,0 12px 32px -8px color-mix(in srgb,var(--va-primary) 55%,transparent);transition:transform .3s ease}.orb-core:before{content:"";position:absolute;top:12%;right:28%;bottom:50%;left:16%;border-radius:50%;background:radial-gradient(ellipse at center,rgba(255,255,255,.5),transparent 70%);filter:blur(2px);pointer-events:none}.orb-ring{position:absolute;border-radius:50%;border:2px solid color-mix(in srgb,var(--va-primary) 35%,transparent);opacity:0;top:0;right:0;bottom:0;left:0}.orb-ring-1{animation:va-ring 2.6s ease-out infinite}.orb-ring-2{animation:va-ring 2.6s ease-out .65s infinite}.orb-ring-3{animation:va-ring 2.6s ease-out 1.3s infinite}@keyframes va-ring{0%{transform:scale(.55);opacity:0}20%{opacity:.7}to{transform:scale(1);opacity:0}}.orb:not(.listening):not(.speaking):not(.connecting) .orb-ring{animation-play-state:paused;opacity:0}.orb.connecting .orb-ring{border-color:color-mix(in srgb,var(--va-text-muted) 40%,transparent)}.orb.listening .orb-ring{border-color:color-mix(in srgb,var(--va-accent) 55%,transparent)}.orb.speaking .orb-core{animation:va-orb-pulse 1.1s ease-in-out infinite}.orb.speaking .orb-ring{border-color:color-mix(in srgb,var(--va-primary) 60%,transparent)}@keyframes va-orb-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.09)}}.orb.thinking .orb-ring{animation-play-state:running;border-color:color-mix(in srgb,var(--va-accent) 50%,transparent)}.orb.thinking .orb-core{animation:va-orb-think 2.4s ease-in-out infinite}.orb.thinking:after{content:"";position:absolute;top:6px;right:6px;bottom:6px;left:6px;border-radius:50%;border:2px solid transparent;border-top-color:color-mix(in srgb,var(--va-accent) 70%,transparent);border-right-color:color-mix(in srgb,var(--va-primary) 45%,transparent);animation:va-orb-spin 1.6s linear infinite;pointer-events:none}@keyframes va-orb-think{0%,to{transform:scale(.96);opacity:.85}50%{transform:scale(1.04);opacity:1}}@keyframes va-orb-spin{to{transform:rotate(360deg)}}.orb-label{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--va-text-muted);font-weight:600}.agent-status-line{margin-top:2px;max-width:86%;text-align:center;font-size:12px;line-height:1.35;color:var(--va-text-muted);opacity:.9;animation:va-status-fade .18s ease-out}.agent-status-line[hidden]{display:none}@keyframes va-status-fade{0%{opacity:0;transform:translateY(2px)}to{opacity:.9;transform:translateY(0)}}.transcript{flex:1;min-height:0;overflow-y:auto;padding:6px 18px 14px;display:flex;flex-direction:column;gap:8px;scroll-behavior:smooth;mask-image:linear-gradient(to bottom,transparent 0,black 14px,black calc(100% - 14px),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 14px,black calc(100% - 14px),transparent 100%)}.transcript::-webkit-scrollbar{width:6px}.transcript::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--va-text) 14%,transparent);border-radius:999px}.transcript:empty:before{content:attr(data-placeholder);display:block;font-size:12px;color:var(--va-text-muted);text-align:center;padding-top:22px;opacity:.7}.transcript-msg{max-width:86%;padding:9px 13px;border-radius:16px;font-size:13.5px;line-height:1.45;white-space:normal;word-wrap:break-word;animation:va-msg-in .2s ease-out}.transcript-msg p{margin:0 0 .4em}.transcript-msg p:last-child{margin-bottom:0}.transcript-msg strong{font-weight:700}.transcript-msg em{font-style:italic}.transcript-msg code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.88em;background:#0000001a;padding:.1em .3em;border-radius:3px}.transcript-msg.user code{background:#fff3}.transcript-msg pre{margin:.4em 0;padding:.5em .7em;background:#00000014;border-radius:6px;overflow-x:auto;white-space:pre;font-size:.88em}.transcript-msg.user pre{background:#ffffff26}.transcript-msg pre code{background:none;padding:0}.transcript-msg ul,.transcript-msg ol{margin:.3em 0;padding-left:1.4em}.transcript-msg li{margin:.15em 0}.transcript-msg h1,.transcript-msg h2,.transcript-msg h3{margin:.3em 0 .2em;font-weight:700;line-height:1.2}.transcript-msg h1{font-size:1.1em}.transcript-msg h2{font-size:1.05em}.transcript-msg h3{font-size:1em}.transcript-msg a{color:inherit;text-decoration:underline;opacity:.85}@keyframes va-msg-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.transcript-msg.user{align-self:flex-end;background:var(--va-user-bubble);color:var(--va-user-bubble-text);border-bottom-right-radius:6px;box-shadow:0 2px 8px -4px color-mix(in srgb,var(--va-user-bubble) 60%,transparent)}.transcript-msg.agent{align-self:flex-start;background:var(--va-agent-bubble);color:var(--va-agent-bubble-text);border-bottom-left-radius:6px;box-shadow:0 2px 8px -6px #0f172a2e}.transcript-msg.system{align-self:center;background:transparent;color:var(--va-agent-bubble-text);opacity:.7;font-size:.85em;font-style:italic;box-shadow:none;text-align:center}.transcript-msg.interim{opacity:.78}.transcript-msg.interim:after{content:"▍";display:inline-block;margin-left:2px;font-style:normal;animation:va-caret 1s steps(2,end) infinite}@keyframes va-caret{0%,60%{opacity:1}61%,to{opacity:0}}.text-input-row{display:flex;align-items:flex-end;gap:8px;padding:8px 14px 4px;border-top:1px solid color-mix(in srgb,var(--va-text) 8%,transparent)}.text-input-row[hidden]{display:none}.text-input{flex:1;font-family:inherit;font-size:13px;line-height:1.45;padding:9px 12px;border-radius:18px;border:1px solid color-mix(in srgb,var(--va-text) 14%,transparent);background:color-mix(in srgb,var(--va-text) 5%,var(--va-background));color:var(--va-text);resize:none;overflow-y:hidden;max-height:96px;outline:none;transition:border-color .15s ease,box-shadow .15s ease}.text-input::placeholder{color:var(--va-text-muted);opacity:.7}.text-input:focus{border-color:var(--va-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--va-primary) 20%,transparent)}.text-send-btn{flex-shrink:0;width:36px;height:36px;border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;background:var(--va-primary);color:var(--va-primary-text);padding:0;transition:transform .15s ease,background .15s ease,opacity .15s ease}.text-send-btn svg{width:15px;height:15px}.text-send-btn:hover{transform:scale(1.08)}.text-send-btn:active{transform:scale(.96)}.text-send-btn:disabled{opacity:.4;cursor:not-allowed;transform:none}.call-controls{display:flex;justify-content:center;align-items:center;gap:22px;padding:16px 18px 24px}.ctl-btn{position:relative;width:56px;height:56px;border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--va-text);background:color-mix(in srgb,var(--va-text) 8%,transparent);transition:transform .15s ease,background .15s ease,box-shadow .15s ease,color .15s ease;padding:0}.ctl-btn svg{width:22px;height:22px}.ctl-btn:hover:not(:disabled){background:color-mix(in srgb,var(--va-text) 14%,transparent);transform:translateY(-1px)}.ctl-btn:active:not(:disabled){transform:translateY(0)}.ctl-btn:disabled{opacity:.38;cursor:not-allowed}.ctl-mute.is-active{background:var(--va-text);color:var(--va-background);box-shadow:0 8px 18px -8px color-mix(in srgb,var(--va-text) 70%,transparent)}.ctl-end{background:#ef4444;color:#fff;box-shadow:0 12px 26px -10px #ef4444a6}.ctl-end:hover:not(:disabled){background:#dc2626;box-shadow:0 16px 32px -10px #ef4444bf}.ctl-end:disabled{background:color-mix(in srgb,#ef4444 50%,transparent)}.screen-form{background:radial-gradient(110% 65% at 50% -10%,color-mix(in srgb,var(--va-primary) 12%,transparent),transparent 70%),var(--va-background);flex-direction:column}.form-header{position:relative;display:flex;align-items:center;gap:12px;padding:18px 96px 8px 14px}.form-header-text{flex:1 1 auto}.form-call-controls{position:absolute;top:14px;right:56px;display:flex;align-items:center;gap:6px;z-index:4}.form-call-controls[hidden]{display:none}.form-call-controls button{width:32px;height:32px;border-radius:50%;border:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;color:var(--va-text);background:color-mix(in srgb,var(--va-text) 6%,transparent);transition:background .15s ease,transform .15s ease,box-shadow .15s ease,color .15s ease;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.form-call-controls button svg{width:15px;height:15px}.form-call-controls button:hover:not(:disabled){background:color-mix(in srgb,var(--va-text) 14%,transparent);transform:translateY(-1px)}.form-call-controls button:disabled{opacity:.5;cursor:not-allowed}.form-call-controls .form-mute.is-active{background:var(--va-text);color:var(--va-background)}.form-call-controls .form-end{background:#ef4444;color:#fff;box-shadow:0 6px 14px -6px #ef44448c}.form-call-controls .form-end:hover:not(:disabled){background:#dc2626;box-shadow:0 10px 18px -8px #ef4444b3}.form-transcript{max-height:130px;flex-shrink:0;overflow-y:auto;padding:6px 16px 8px;display:flex;flex-direction:column;gap:6px;border-bottom:1px solid color-mix(in srgb,var(--va-text) 8%,transparent);background:color-mix(in srgb,var(--va-text) 3%,var(--va-background));scroll-behavior:smooth;mask-image:linear-gradient(to bottom,transparent 0,black 10px,black calc(100% - 10px),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 10px,black calc(100% - 10px),transparent 100%)}.form-transcript[hidden]{display:none}.form-transcript::-webkit-scrollbar{width:4px}.form-transcript::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--va-text) 14%,transparent);border-radius:999px}.form-back{width:32px;height:32px;border-radius:50%;border:none;background:color-mix(in srgb,var(--va-text) 6%,transparent);color:var(--va-text);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:background .15s ease,transform .15s ease}.form-back svg{width:16px;height:16px;transform:rotate(90deg)}.form-back:hover{background:color-mix(in srgb,var(--va-text) 12%,transparent);transform:translateY(-1px)}.form-header-text{display:flex;flex-direction:column;gap:2px;min-width:0}.form-eyebrow{font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--va-primary);opacity:.85}.form-title{font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--va-text)}.form-body{flex:1;min-height:0;overflow-y:auto;padding:6px 18px 18px;display:flex;flex-direction:column;gap:12px}.form-body::-webkit-scrollbar{width:6px}.form-body::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--va-text) 14%,transparent);border-radius:999px}.form-subtitle{margin:0 0 4px;font-size:12.5px;line-height:1.5;color:var(--va-text-muted)}.form-fields{display:flex;flex-direction:column;gap:12px}.form-field{display:flex;flex-direction:column;gap:6px}.form-label{font-size:11.5px;font-weight:600;letter-spacing:.02em;color:var(--va-text);opacity:.85}.form-input{font-family:inherit;font-size:13px;line-height:1.4;padding:10px 12px;border-radius:12px;border:1px solid color-mix(in srgb,var(--va-text) 14%,transparent);background:var(--va-background);color:var(--va-text);width:100%;transition:border-color .15s ease,box-shadow .15s ease;outline:none}.form-input::placeholder{color:var(--va-text-muted);opacity:.7}.form-input:focus{border-color:var(--va-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--va-primary) 22%,transparent)}.form-input:disabled{opacity:.55;cursor:not-allowed}.form-textarea{resize:vertical;min-height:76px}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:32px;cursor:pointer}.form-error,.form-success{font-size:12.5px;line-height:1.45;padding:9px 12px;border-radius:10px;border:1px solid transparent}.form-error{background:color-mix(in srgb,#ef4444 10%,transparent);border-color:color-mix(in srgb,#ef4444 30%,transparent);color:#b91c1c}.form-success{background:color-mix(in srgb,#10b981 10%,transparent);border-color:color-mix(in srgb,#10b981 28%,transparent);color:#047857}.form-actions{display:flex;gap:10px;padding:12px 18px 18px;border-top:1px solid color-mix(in srgb,var(--va-text) 6%,transparent)}.form-cancel,.form-submit{flex:1;font-family:inherit;font-size:13.5px;font-weight:600;letter-spacing:.005em;padding:11px 16px;border-radius:999px;cursor:pointer;border:none;transition:transform .15s ease,background .15s ease,box-shadow .15s ease}.form-cancel{background:color-mix(in srgb,var(--va-text) 8%,transparent);color:var(--va-text)}.form-cancel:hover:not(:disabled){background:color-mix(in srgb,var(--va-text) 14%,transparent)}.form-submit{background:linear-gradient(135deg,var(--va-primary),var(--va-accent));color:var(--va-primary-text);box-shadow:0 10px 24px -12px color-mix(in srgb,var(--va-primary) 60%,transparent)}.form-submit:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.04)}.form-submit:disabled,.form-cancel:disabled{opacity:.55;cursor:not-allowed;transform:none}.form-submit.is-busy .form-submit-label:after{content:"…";margin-left:2px}.form-stepper{display:flex;align-items:center;justify-content:center;gap:8px;padding:4px 18px 0}.form-stepper[hidden]{display:none}.form-stepper-dot{width:22px;height:4px;border-radius:999px;background:color-mix(in srgb,var(--va-text) 14%,transparent);transition:background .2s ease,transform .2s ease}.form-stepper-dot.is-done{background:color-mix(in srgb,var(--va-primary) 60%,transparent)}.form-stepper-dot.is-active{background:linear-gradient(90deg,var(--va-primary),var(--va-accent));transform:scaleY(1.4)}.form-fields.is-grid{flex-direction:row;flex-wrap:wrap}.form-fields.is-grid>.form-field{flex:1 1 100%;min-width:0}.form-fields.is-grid>.form-field.is-half{flex:1 1 calc(50% - 6px)}.form-fields.is-compact{gap:8px}.form-fields.is-compact .form-field{gap:4px}.form-fields.is-compact .form-input{padding:8px 11px;font-size:12.5px}.form-fields.is-inline-labels .form-field{flex-direction:row;align-items:center;gap:10px}.form-fields.is-inline-labels .form-label{flex:0 0 38%;margin:0}.form-fields.is-inline-labels .form-input,.form-fields.is-inline-labels .form-choice-group{flex:1 1 auto}.form-help{font-size:11.5px;line-height:1.4;color:var(--va-text-muted)}.form-field-error{font-size:11.5px;line-height:1.4;color:#b91c1c}.form-field.is-invalid .form-input,.form-field.is-invalid .form-textarea,.form-field.is-invalid .form-select{border-color:#ef4444}.form-field.is-invalid .form-input:focus,.form-field.is-invalid .form-textarea:focus,.form-field.is-invalid .form-select:focus{box-shadow:0 0 0 3px color-mix(in srgb,#ef4444 22%,transparent)}.form-display{display:flex;flex-direction:column;gap:4px;padding:10px 12px;border-radius:12px;background:color-mix(in srgb,var(--va-primary) 5%,transparent);border:1px solid color-mix(in srgb,var(--va-primary) 14%,transparent)}.form-display-title{font-size:13px;font-weight:600;color:var(--va-text)}.form-display-body{margin:0;font-size:12.5px;line-height:1.45;color:var(--va-text-muted)}.form-choice-group{display:flex;flex-direction:column;gap:6px}.form-choice{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--va-text);cursor:pointer;padding:6px 10px;border-radius:10px;border:1px solid color-mix(in srgb,var(--va-text) 10%,transparent);background:color-mix(in srgb,var(--va-background) 92%,var(--va-text) 8%);transition:border-color .15s ease,background .15s ease}.form-choice:hover{border-color:color-mix(in srgb,var(--va-primary) 35%,transparent);background:color-mix(in srgb,var(--va-primary) 6%,var(--va-background))}.form-choice input[type=radio],.form-choice input[type=checkbox]{accent-color:var(--va-primary);margin:0}.form-field.is-inline-bool{flex-direction:row;align-items:center;gap:10px}.form-field.is-inline-bool .form-label{order:2;flex:1 1 auto}.form-field.is-inline-bool .form-checkbox{order:1;accent-color:var(--va-primary);width:18px;height:18px;margin:0}.form-step-back{font-family:inherit;font-size:13.5px;font-weight:600;padding:11px 14px;border-radius:999px;border:none;cursor:pointer;background:color-mix(in srgb,var(--va-text) 8%,transparent);color:var(--va-text);transition:background .15s ease}.form-step-back:hover:not(:disabled){background:color-mix(in srgb,var(--va-text) 14%,transparent)}.form-step-back:disabled{opacity:.55;cursor:not-allowed}.form-step-back[hidden]{display:none}.ctl-settings.is-active{background:color-mix(in srgb,var(--va-primary) 22%,transparent);color:var(--va-primary)}.ctl-settings[hidden]{display:none}.audio-drawer{position:absolute;left:0;right:0;bottom:0;max-height:80%;background:var(--va-background);border-top:1px solid color-mix(in srgb,var(--va-text) 8%,transparent);box-shadow:0 -16px 32px -16px #0000002e;display:flex;flex-direction:column;border-top-left-radius:18px;border-top-right-radius:18px;z-index:6;transform:translateY(8px);opacity:0;transition:transform .18s ease,opacity .18s ease;pointer-events:none}.audio-drawer.is-open{transform:translateY(0);opacity:1;pointer-events:auto}.audio-drawer[hidden]{display:none}.audio-drawer-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 8px;border-bottom:1px solid color-mix(in srgb,var(--va-text) 6%,transparent)}.audio-drawer-title{font-weight:600;font-size:14px;color:var(--va-text)}.audio-drawer-close{width:28px;height:28px;border-radius:50%;border:none;background:transparent;color:var(--va-text-muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.audio-drawer-close svg{width:16px;height:16px}.audio-drawer-close:hover{background:color-mix(in srgb,var(--va-text) 8%,transparent);color:var(--va-text)}.audio-drawer-body{padding:12px 16px 18px;overflow-y:auto;display:flex;flex-direction:column;gap:10px}.audio-row{display:flex;flex-direction:column;gap:6px}.audio-row-label{font-size:12px;font-weight:500;color:var(--va-text-muted);display:flex;justify-content:space-between;align-items:center}.audio-volume-value{font-variant-numeric:tabular-nums;color:var(--va-text);font-size:12px}.audio-row-meter .audio-meter{height:6px;border-radius:999px;background:color-mix(in srgb,var(--va-text) 10%,transparent);overflow:hidden}.audio-meter-bar{height:100%;width:0%;background:linear-gradient(90deg,var(--va-primary),var(--va-accent));transition:width .08s linear}.audio-row-select select,.audio-row-slider input[type=range]{width:100%;font-family:inherit}.audio-row-select select{padding:8px 10px;border-radius:10px;border:1px solid color-mix(in srgb,var(--va-text) 14%,transparent);background:var(--va-surface);color:var(--va-text);font-size:13px}.audio-row-select select:focus{outline:2px solid color-mix(in srgb,var(--va-primary) 35%,transparent);outline-offset:1px}.audio-row-slider input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;background:color-mix(in srgb,var(--va-text) 12%,transparent);border-radius:999px}.audio-row-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--va-primary);cursor:pointer;box-shadow:0 2px 6px #0000002e}.audio-row-slider input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--va-primary);border:none;cursor:pointer}.audio-toggles{display:flex;flex-direction:column;gap:2px;margin-top:2px}.audio-toggle{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--va-text) 6%,transparent)}.audio-toggle:last-child{border-bottom:none}.audio-toggle-text{flex:1 1 auto;display:flex;flex-direction:column;gap:2px}.audio-toggle-label{font-size:13px;font-weight:500;color:var(--va-text)}.audio-toggle-hint{font-size:11.5px;color:var(--va-text-muted)}.audio-toggle input[type=checkbox]{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:36px;height:20px;border-radius:999px;background:color-mix(in srgb,var(--va-text) 18%,transparent);position:relative;cursor:pointer;transition:background .15s ease;flex-shrink:0;margin:0}.audio-toggle input[type=checkbox]:after{content:"";position:absolute;width:16px;height:16px;border-radius:50%;background:#fff;top:2px;left:2px;transition:left .15s ease;box-shadow:0 1px 3px #00000040}.audio-toggle input[type=checkbox]:checked{background:var(--va-primary)}.audio-toggle input[type=checkbox]:checked:after{left:18px}.audio-toggle input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed}.audio-diag{margin-top:4px;border-top:1px solid color-mix(in srgb,var(--va-text) 6%,transparent);padding-top:8px}.audio-diag summary{font-size:12px;font-weight:500;color:var(--va-text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.audio-diag summary::marker{color:var(--va-text-muted)}.audio-diag-list{display:grid;grid-template-columns:max-content 1fr;gap:4px 12px;margin:8px 0 0;font-size:11.5px}.audio-diag-list dt{color:var(--va-text-muted)}.audio-diag-list dd{color:var(--va-text);margin:0;font-variant-numeric:tabular-nums}',pe=`
|
|
2
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/>
|
|
4
|
+
<path d="M19 10v2a7 7 0 0 1-14 0v-2"/>
|
|
5
|
+
<line x1="12" y1="19" x2="12" y2="23"/>
|
|
6
|
+
<line x1="8" y1="23" x2="16" y2="23"/>
|
|
7
|
+
</svg>`,K=`
|
|
8
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
|
|
9
|
+
<line x1="18" y1="6" x2="6" y2="18"/>
|
|
10
|
+
<line x1="6" y1="6" x2="18" y2="18"/>
|
|
11
|
+
</svg>`,Ee=`
|
|
12
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
13
|
+
<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.37 1.9.72 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.35 1.85.59 2.81.72A2 2 0 0 1 22 16.92z"/>
|
|
14
|
+
</svg>`,H=`
|
|
15
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
16
|
+
<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/>
|
|
17
|
+
<path d="M19 10v2a7 7 0 0 1-14 0v-2"/>
|
|
18
|
+
<line x1="12" y1="19" x2="12" y2="23"/>
|
|
19
|
+
<line x1="8" y1="23" x2="16" y2="23"/>
|
|
20
|
+
</svg>`,Le=`
|
|
21
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
22
|
+
<line x1="1" y1="1" x2="23" y2="23"/>
|
|
23
|
+
<path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"/>
|
|
24
|
+
<path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"/>
|
|
25
|
+
<line x1="12" y1="19" x2="12" y2="23"/>
|
|
26
|
+
<line x1="8" y1="23" x2="16" y2="23"/>
|
|
27
|
+
</svg>`,W=`
|
|
28
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
29
|
+
<path d="M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91"/>
|
|
30
|
+
<line x1="23" y1="1" x2="1" y2="23"/>
|
|
31
|
+
</svg>`,J=`
|
|
32
|
+
<svg viewBox="0 0 24 24" fill="currentColor">
|
|
33
|
+
<path d="M12 2a4 4 0 0 0-4 4v2a4 4 0 0 0 8 0V6a4 4 0 0 0-4-4zm6 8a1 1 0 0 0-2 0 4 4 0 0 1-8 0 1 1 0 0 0-2 0 6 6 0 0 0 5 5.91V19H8a1 1 0 0 0 0 2h8a1 1 0 0 0 0-2h-3v-3.09A6 6 0 0 0 18 10z"/>
|
|
34
|
+
</svg>`,Se=`
|
|
35
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
36
|
+
<circle cx="12" cy="12" r="9"/>
|
|
37
|
+
<path d="M3 12h18"/>
|
|
38
|
+
<path d="M12 3a13.5 13.5 0 0 1 0 18"/>
|
|
39
|
+
<path d="M12 3a13.5 13.5 0 0 0 0 18"/>
|
|
40
|
+
</svg>`,Q=`
|
|
41
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
|
|
42
|
+
<polyline points="6 9 12 15 18 9"/>
|
|
43
|
+
</svg>`,Te=`
|
|
44
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round">
|
|
45
|
+
<polyline points="20 6 9 17 4 12"/>
|
|
46
|
+
</svg>`,Ae=`
|
|
47
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
48
|
+
<line x1="22" y1="2" x2="11" y2="13"/>
|
|
49
|
+
<polygon points="22 2 15 22 11 13 2 9 22 2"/>
|
|
50
|
+
</svg>`,_e=`
|
|
51
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
52
|
+
<circle cx="12" cy="12" r="3"/>
|
|
53
|
+
<path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/>
|
|
54
|
+
</svg>`;function Be(e,a={}){const o=document.createElement("div");o.id=e,a.closeButtonHide&&o.setAttribute("data-close-button-hide",""),a.inline?(o.setAttribute("data-inline",""),o.style.position="absolute",o.style.inset="0",o.style.zIndex="1"):(o.style.position="fixed",o.style.inset="auto",o.style.zIndex="2147483647"),(a.parent??document.body).appendChild(o);const t=o.attachShadow({mode:"open"}),r=document.createElement("style");r.textContent=Ce,t.appendChild(r);const s=document.createElement("button");s.className="fab",s.setAttribute("aria-label","Open voice agent"),s.style.visibility="hidden",s.innerHTML=`
|
|
55
|
+
<span class="fab-icon">${pe}</span>
|
|
56
|
+
<span class="fab-text">
|
|
57
|
+
<span class="fab-label"></span>
|
|
58
|
+
<span class="fab-sublabel"></span>
|
|
59
|
+
</span>
|
|
60
|
+
`,t.appendChild(s);const c=document.createElement("div");c.className="panel",c.style.display="none",c.innerHTML=`
|
|
61
|
+
<button class="close" aria-label="Close">${K}</button>
|
|
62
|
+
|
|
63
|
+
<section class="screen screen-welcome" data-screen="welcome">
|
|
64
|
+
<div class="welcome-inner">
|
|
65
|
+
<div class="welcome-logo">
|
|
66
|
+
<div class="welcome-logo-fallback">${J}</div>
|
|
67
|
+
<img class="welcome-logo-img" alt="" style="display:none" />
|
|
68
|
+
</div>
|
|
69
|
+
<div class="welcome-status"><span class="welcome-status-dot"></span><span class="welcome-status-text">Online</span></div>
|
|
70
|
+
<h1 class="welcome-name">Assistant</h1>
|
|
71
|
+
<p class="welcome-desc">Tap below to start a voice conversation.</p>
|
|
72
|
+
<div class="lang-picker" data-open="false">
|
|
73
|
+
<button class="lang-trigger" type="button" aria-haspopup="listbox" aria-expanded="false">
|
|
74
|
+
<span class="lang-trigger-icon">${Se}</span>
|
|
75
|
+
<span class="lang-trigger-text">
|
|
76
|
+
<span class="lang-trigger-eyebrow">Language</span>
|
|
77
|
+
<span class="lang-trigger-label">English</span>
|
|
78
|
+
</span>
|
|
79
|
+
<span class="lang-trigger-code">EN</span>
|
|
80
|
+
<span class="lang-trigger-chev">${Q}</span>
|
|
81
|
+
</button>
|
|
82
|
+
<div class="lang-menu" role="listbox" hidden></div>
|
|
83
|
+
</div>
|
|
84
|
+
<button class="start-btn" aria-label="Start call">
|
|
85
|
+
<span class="start-btn-icon">${Ee}</span>
|
|
86
|
+
<span class="start-btn-label">Start Call</span>
|
|
87
|
+
</button>
|
|
88
|
+
<div class="consent" hidden>
|
|
89
|
+
<span class="consent-text"></span>
|
|
90
|
+
<a class="consent-link" target="_blank" rel="noopener noreferrer"></a>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
<a class="welcome-foot" target="_blank" rel="noopener noreferrer"></a>
|
|
94
|
+
</section>
|
|
95
|
+
|
|
96
|
+
<section class="screen screen-form" data-screen="form" style="display:none">
|
|
97
|
+
<header class="form-header">
|
|
98
|
+
<button class="form-back" type="button" aria-label="Back">${Q}</button>
|
|
99
|
+
<div class="form-header-text">
|
|
100
|
+
<div class="form-eyebrow">Review before submit</div>
|
|
101
|
+
<div class="form-title">Form</div>
|
|
102
|
+
</div>
|
|
103
|
+
<div class="form-call-controls" hidden>
|
|
104
|
+
<button class="form-mute" type="button" aria-label="Mute">${H}</button>
|
|
105
|
+
<button class="form-end" type="button" aria-label="End call">${W}</button>
|
|
106
|
+
</div>
|
|
107
|
+
</header>
|
|
108
|
+
<div class="form-transcript" hidden aria-live="polite"></div>
|
|
109
|
+
<div class="form-stepper" hidden></div>
|
|
110
|
+
<div class="form-body">
|
|
111
|
+
<p class="form-subtitle"></p>
|
|
112
|
+
<div class="form-fields"></div>
|
|
113
|
+
<div class="form-error" hidden></div>
|
|
114
|
+
<div class="form-success" hidden></div>
|
|
115
|
+
</div>
|
|
116
|
+
<footer class="form-actions">
|
|
117
|
+
<button class="form-step-back" type="button" hidden>Back</button>
|
|
118
|
+
<button class="form-cancel" type="button">Cancel</button>
|
|
119
|
+
<button class="form-submit" type="button">
|
|
120
|
+
<span class="form-submit-label">Confirm & send</span>
|
|
121
|
+
</button>
|
|
122
|
+
</footer>
|
|
123
|
+
</section>
|
|
124
|
+
|
|
125
|
+
<section class="screen screen-call" data-screen="call" style="display:none">
|
|
126
|
+
<header class="call-header">
|
|
127
|
+
<div class="call-id">
|
|
128
|
+
<div class="call-logo">
|
|
129
|
+
<div class="call-logo-fallback">${J}</div>
|
|
130
|
+
<img class="call-logo-img" alt="" style="display:none" />
|
|
131
|
+
</div>
|
|
132
|
+
<div class="call-id-text">
|
|
133
|
+
<div class="call-name">Assistant</div>
|
|
134
|
+
<div class="call-status">Connecting…</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="call-timer" hidden aria-live="polite">
|
|
138
|
+
<span class="call-timer-text">0:00</span>
|
|
139
|
+
</div>
|
|
140
|
+
</header>
|
|
141
|
+
|
|
142
|
+
<div class="call-stage">
|
|
143
|
+
<div class="orb">
|
|
144
|
+
<span class="orb-ring orb-ring-1"></span>
|
|
145
|
+
<span class="orb-ring orb-ring-2"></span>
|
|
146
|
+
<span class="orb-ring orb-ring-3"></span>
|
|
147
|
+
<span class="orb-core"></span>
|
|
148
|
+
</div>
|
|
149
|
+
<div class="orb-label">Idle</div>
|
|
150
|
+
<div class="agent-status-line" aria-live="polite" hidden></div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div class="transcript" aria-live="polite" style="display: none;"></div>
|
|
154
|
+
|
|
155
|
+
<div class="text-input-row" hidden>
|
|
156
|
+
<textarea class="text-input" placeholder="Type a message…" rows="1" aria-label="Type a message"></textarea>
|
|
157
|
+
<button class="text-send-btn" type="button" aria-label="Send message">${Ae}</button>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div class="call-controls">
|
|
161
|
+
<button class="ctl-btn ctl-mute" aria-label="Mute" disabled>
|
|
162
|
+
${H}
|
|
163
|
+
</button>
|
|
164
|
+
<button class="ctl-btn ctl-settings" aria-label="Audio settings" hidden>
|
|
165
|
+
${_e}
|
|
166
|
+
</button>
|
|
167
|
+
<button class="ctl-btn ctl-end" aria-label="End call" disabled>
|
|
168
|
+
${W}
|
|
169
|
+
</button>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div class="audio-drawer" hidden aria-label="Audio settings">
|
|
173
|
+
<header class="audio-drawer-head">
|
|
174
|
+
<div class="audio-drawer-title">Audio settings</div>
|
|
175
|
+
<button class="audio-drawer-close" type="button" aria-label="Close audio settings">${K}</button>
|
|
176
|
+
</header>
|
|
177
|
+
<div class="audio-drawer-body">
|
|
178
|
+
<div class="audio-row audio-row-meter">
|
|
179
|
+
<span class="audio-row-label">Microphone level</span>
|
|
180
|
+
<div class="audio-meter"><div class="audio-meter-bar"></div></div>
|
|
181
|
+
</div>
|
|
182
|
+
<label class="audio-row audio-row-select">
|
|
183
|
+
<span class="audio-row-label">Microphone</span>
|
|
184
|
+
<select class="audio-mic-select"></select>
|
|
185
|
+
</label>
|
|
186
|
+
<label class="audio-row audio-row-select audio-row-speaker">
|
|
187
|
+
<span class="audio-row-label">Speaker</span>
|
|
188
|
+
<select class="audio-speaker-select"></select>
|
|
189
|
+
</label>
|
|
190
|
+
<label class="audio-row audio-row-slider">
|
|
191
|
+
<span class="audio-row-label">Speaker volume <span class="audio-volume-value">85%</span></span>
|
|
192
|
+
<input class="audio-volume" type="range" min="0" max="100" step="1" value="85" />
|
|
193
|
+
</label>
|
|
194
|
+
<label class="audio-row audio-row-select">
|
|
195
|
+
<span class="audio-row-label">Noise cancellation engine</span>
|
|
196
|
+
<select class="audio-nc-engine">
|
|
197
|
+
<option value="off">Off (browser only)</option>
|
|
198
|
+
<option value="krisp">Krisp (default)</option>
|
|
199
|
+
<option value="deepfilter">DeepFilterNet3</option>
|
|
200
|
+
</select>
|
|
201
|
+
</label>
|
|
202
|
+
<label class="audio-row audio-row-slider audio-row-df-strength" hidden>
|
|
203
|
+
<span class="audio-row-label">DeepFilter strength <span class="audio-df-strength-value">80</span></span>
|
|
204
|
+
<input class="audio-df-strength" type="range" min="0" max="100" step="1" value="80" />
|
|
205
|
+
</label>
|
|
206
|
+
<div class="audio-toggles">
|
|
207
|
+
<label class="audio-toggle">
|
|
208
|
+
<span class="audio-toggle-text">
|
|
209
|
+
<span class="audio-toggle-label">Echo cancellation</span>
|
|
210
|
+
<span class="audio-toggle-hint">Browser AEC</span>
|
|
211
|
+
</span>
|
|
212
|
+
<input class="audio-tog-aec" type="checkbox" />
|
|
213
|
+
</label>
|
|
214
|
+
<label class="audio-toggle">
|
|
215
|
+
<span class="audio-toggle-text">
|
|
216
|
+
<span class="audio-toggle-label">Noise suppression</span>
|
|
217
|
+
<span class="audio-toggle-hint">Browser noise filter</span>
|
|
218
|
+
</span>
|
|
219
|
+
<input class="audio-tog-ns" type="checkbox" />
|
|
220
|
+
</label>
|
|
221
|
+
<label class="audio-toggle">
|
|
222
|
+
<span class="audio-toggle-text">
|
|
223
|
+
<span class="audio-toggle-label">Auto gain</span>
|
|
224
|
+
<span class="audio-toggle-hint">Normalize my volume</span>
|
|
225
|
+
</span>
|
|
226
|
+
<input class="audio-tog-agc" type="checkbox" />
|
|
227
|
+
</label>
|
|
228
|
+
<label class="audio-toggle audio-toggle-vi">
|
|
229
|
+
<span class="audio-toggle-text">
|
|
230
|
+
<span class="audio-toggle-label">Voice isolation</span>
|
|
231
|
+
<span class="audio-toggle-hint">Edge/Chrome only</span>
|
|
232
|
+
</span>
|
|
233
|
+
<input class="audio-tog-vi" type="checkbox" />
|
|
234
|
+
</label>
|
|
235
|
+
<label class="audio-toggle">
|
|
236
|
+
<span class="audio-toggle-text">
|
|
237
|
+
<span class="audio-toggle-label">Headphones mode</span>
|
|
238
|
+
<span class="audio-toggle-hint">Disable mic ducking</span>
|
|
239
|
+
</span>
|
|
240
|
+
<input class="audio-tog-hp" type="checkbox" />
|
|
241
|
+
</label>
|
|
242
|
+
<label class="audio-toggle">
|
|
243
|
+
<span class="audio-toggle-text">
|
|
244
|
+
<span class="audio-toggle-label">Live Transcription</span>
|
|
245
|
+
<span class="audio-toggle-hint">Show conversation text</span>
|
|
246
|
+
</span>
|
|
247
|
+
<input class="audio-tog-transcription" type="checkbox" />
|
|
248
|
+
</label>
|
|
249
|
+
<label class="audio-toggle">
|
|
250
|
+
<span class="audio-toggle-text">
|
|
251
|
+
<span class="audio-toggle-label">Text Input</span>
|
|
252
|
+
<span class="audio-toggle-hint">Type messages to the agent</span>
|
|
253
|
+
</span>
|
|
254
|
+
<input class="audio-tog-text-input" type="checkbox" />
|
|
255
|
+
</label>
|
|
256
|
+
</div>
|
|
257
|
+
<details class="audio-diag">
|
|
258
|
+
<summary>Diagnostics</summary>
|
|
259
|
+
<dl class="audio-diag-list">
|
|
260
|
+
<dt>NC engine</dt><dd class="audio-diag-engine">—</dd>
|
|
261
|
+
<dt>Echo cancellation</dt><dd class="audio-diag-aec">—</dd>
|
|
262
|
+
<dt>Noise suppression</dt><dd class="audio-diag-ns">—</dd>
|
|
263
|
+
<dt>Auto gain</dt><dd class="audio-diag-agc">—</dd>
|
|
264
|
+
<dt>Voice isolation</dt><dd class="audio-diag-vi">—</dd>
|
|
265
|
+
<dt>Sample rate</dt><dd class="audio-diag-sr">—</dd>
|
|
266
|
+
<dt>Packet loss</dt><dd class="audio-diag-loss">—</dd>
|
|
267
|
+
<dt>Jitter</dt><dd class="audio-diag-jitter">—</dd>
|
|
268
|
+
<dt>RTT</dt><dd class="audio-diag-rtt">—</dd>
|
|
269
|
+
</dl>
|
|
270
|
+
</details>
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
</section>
|
|
274
|
+
`,t.appendChild(c);const n=d=>c.querySelector(d);return{host:o,shadow:t,fab:s,panel:c,closeBtn:n(".close"),welcomeScreen:n(".screen-welcome"),welcomeLogo:n(".welcome-logo-img"),welcomeLogoFallback:n(".welcome-logo-fallback"),welcomeName:n(".welcome-name"),welcomeDesc:n(".welcome-desc"),langPicker:n(".lang-picker"),langTrigger:n(".lang-trigger"),langTriggerLabel:n(".lang-trigger-label"),langTriggerCode:n(".lang-trigger-code"),langMenu:n(".lang-menu"),startBtn:n(".start-btn"),startBtnLabel:n(".start-btn-label"),consent:n(".consent"),consentText:n(".consent-text"),consentLink:n(".consent-link"),poweredBy:n(".welcome-foot"),callScreen:n(".screen-call"),callLogo:n(".call-logo-img"),callLogoFallback:n(".call-logo-fallback"),callName:n(".call-name"),callStatus:n(".call-status"),callTimer:n(".call-timer"),callTimerText:n(".call-timer-text"),orb:n(".orb"),orbLabel:n(".orb-label"),agentStatusLine:n(".agent-status-line"),transcript:n(".transcript"),transcriptSegments:new Map,transcriptInterimBubble:new Map,textInputRow:n(".text-input-row"),textInput:n(".text-input"),textSendBtn:n(".text-send-btn"),muteBtn:n(".ctl-mute"),endBtn:n(".ctl-end"),settingsBtn:n(".ctl-settings"),audioDrawer:n(".audio-drawer"),audioDrawerClose:n(".audio-drawer-close"),audioMeterBar:n(".audio-meter-bar"),audioMicSelect:n(".audio-mic-select"),audioSpeakerSelect:n(".audio-speaker-select"),audioSpeakerRow:n(".audio-row-speaker"),audioVolume:n(".audio-volume"),audioVolumeValue:n(".audio-volume-value"),audioNcEngine:n(".audio-nc-engine"),audioDfStrengthRow:n(".audio-row-df-strength"),audioDfStrength:n(".audio-df-strength"),audioDfStrengthValue:n(".audio-df-strength-value"),audioTogAec:n(".audio-tog-aec"),audioTogNs:n(".audio-tog-ns"),audioTogAgc:n(".audio-tog-agc"),audioTogVi:n(".audio-tog-vi"),audioTogViRow:n(".audio-toggle-vi"),audioTogHp:n(".audio-tog-hp"),audioTogTranscription:n(".audio-tog-transcription"),audioTogTextInput:n(".audio-tog-text-input"),audioDiagEngine:n(".audio-diag-engine"),audioDiagAec:n(".audio-diag-aec"),audioDiagNs:n(".audio-diag-ns"),audioDiagAgc:n(".audio-diag-agc"),audioDiagVi:n(".audio-diag-vi"),audioDiagSr:n(".audio-diag-sr"),audioDiagLoss:n(".audio-diag-loss"),audioDiagJitter:n(".audio-diag-jitter"),audioDiagRtt:n(".audio-diag-rtt"),formScreen:n(".screen-form"),formTranscript:n(".form-transcript"),formTranscriptSegments:new Map,formTranscriptInterimBubble:new Map,formTitle:n(".form-title"),formEyebrow:n(".form-eyebrow"),formSubtitle:n(".form-subtitle"),formStepper:n(".form-stepper"),formFields:n(".form-fields"),formError:n(".form-error"),formSuccess:n(".form-success"),formSubmitBtn:n(".form-submit"),formBackBtn:n(".form-back"),formCancelBtn:n(".form-cancel"),formStepBackBtn:n(".form-step-back"),formCallControls:n(".form-call-controls"),formMuteBtn:n(".form-mute"),formEndBtn:n(".form-end"),formInputs:new Map,appearance:k.DEFAULT_APPEARANCE,selectedLanguage:k.DEFAULT_APPEARANCE.default_language}}function y(e,a){return`${e}: ${a};`}function X(e,a){e.appearance=a;const o=a.theme,t=a.dimensions,r=le(o.primary_color),s=le(o.accent_color),c=[y("--va-primary",o.primary_color),y("--va-primary-text",r),y("--va-accent",o.accent_color),y("--va-accent-text",s),y("--va-background",o.background_color),y("--va-surface",Je(o.background_color)),y("--va-text",o.text_color),y("--va-text-muted",Qe(o.text_color,o.background_color)),y("--va-user-bubble",o.user_bubble_color),y("--va-user-bubble-text",o.user_bubble_text_color),y("--va-agent-bubble",o.agent_bubble_color),y("--va-agent-bubble-text",o.agent_bubble_text_color),y("--va-fab-size",`${t.fab_size}px`),y("--va-panel-width",`${t.panel_width}px`),y("--va-panel-height",`${t.panel_height}px`),y("--va-border-radius",`${t.border_radius}px`),y("--va-font",a.layout.font_family)],n=e.host.hasAttribute("data-inline");e.host.style.cssText=n?`position: absolute; inset: 0; z-index: 1; ${c.join(" ")}`:`position: fixed; inset: auto; z-index: 2147483647; ${c.join(" ")}`,n||e.host.setAttribute("data-position",a.layout.position),e.transcript.setAttribute("data-placeholder",a.labels.transcript_placeholder||k.DEFAULT_APPEARANCE.labels.transcript_placeholder);const d=a.name||k.DEFAULT_APPEARANCE.name,p=a.subtitle||k.DEFAULT_APPEARANCE.subtitle;e.welcomeName.textContent=d,e.welcomeDesc.textContent=p,e.callName.textContent=d,e.fab.setAttribute("aria-label",`Open ${d}`),e.startBtnLabel.textContent=a.start_button_text||k.DEFAULT_APPEARANCE.start_button_text,e.startBtn.setAttribute("aria-label",a.start_button_text||k.DEFAULT_APPEARANCE.start_button_text);const v=a.powered_by_text??"";e.poweredBy.textContent=v,e.poweredBy.style.display=v?"":"none";const x=ge(a.powered_by_url);x?(e.poweredBy.href=x,e.poweredBy.classList.add("is-link")):(e.poweredBy.removeAttribute("href"),e.poweredBy.classList.remove("is-link"));const l=ue(a.logo_url),g=!!(l&&l!=="https://example.com/logo.png");g?(e.welcomeLogo.src=l,e.welcomeLogo.alt=d,e.welcomeLogo.style.display="",e.welcomeLogoFallback.style.display="none",e.callLogo.src=l,e.callLogo.alt=d,e.callLogo.style.display="",e.callLogoFallback.style.display="none"):(e.welcomeLogo.removeAttribute("src"),e.welcomeLogo.style.display="none",e.welcomeLogoFallback.style.display="",e.callLogo.removeAttribute("src"),e.callLogo.style.display="none",e.callLogoFallback.style.display=""),De(e,a,g,d),Ie(e,a),ze(e,a),e.fab.style.visibility=""}function ze(e,a){const o=(a.terms_url||"").trim();if(!o){e.consent.hidden=!0;return}e.consent.hidden=!1;const t=a.consent_text||k.DEFAULT_APPEARANCE.consent_text,r=a.terms_label||k.DEFAULT_APPEARANCE.terms_label;e.consentText.textContent=`${t} `,e.consentLink.textContent=r,e.consentLink.href=ge(o),e.consentLink.setAttribute("aria-label",r)}function Ie(e,a){const o=a.languages.length?a.languages:k.DEFAULT_APPEARANCE.languages,t=e.selectedLanguage,r=o.find(c=>c.code===t)??o.find(c=>c.code===a.default_language)??o[0];if(e.selectedLanguage=r.code,o.length<=1){e.langPicker.style.display="none";return}e.langPicker.style.display="";const s=e.langTrigger.querySelector(".lang-trigger-eyebrow");s&&(s.textContent=a.labels.language_label||k.DEFAULT_APPEARANCE.labels.language_label),e.langMenu.innerHTML="";for(const c of o){const n=document.createElement("button");n.type="button",n.className="lang-option",n.setAttribute("role","option"),n.dataset.code=c.code,n.innerHTML=`
|
|
275
|
+
<span class="lang-option-text">
|
|
276
|
+
<span class="lang-option-native">${A(c.native_label)}</span>
|
|
277
|
+
<span class="lang-option-label">${A(c.label)}</span>
|
|
278
|
+
</span>
|
|
279
|
+
<span class="lang-option-code">${A(c.code.toUpperCase())}</span>
|
|
280
|
+
<span class="lang-option-check">${Te}</span>
|
|
281
|
+
`,n.addEventListener("click",d=>{d.stopPropagation(),Z(e,o,c.code),z(e)}),e.langMenu.appendChild(n)}Z(e,o,r.code),Me(e)}function Me(e){const a=e.langPicker;a.dataset.wired!=="1"&&(a.dataset.wired="1",e.langTrigger.addEventListener("click",o=>{o.stopPropagation(),a.dataset.open==="true"?z(e):Ne(e)}),e.shadow.addEventListener("click",o=>{if(a.dataset.open!=="true")return;const t=o.target;t&&a.contains(t)||z(e)}),e.shadow.addEventListener("keydown",o=>{o.key==="Escape"&&a.dataset.open==="true"&&(z(e),e.langTrigger.focus())}))}function Ne(e){e.langPicker.dataset.open="true",e.langMenu.hidden=!1,e.langTrigger.setAttribute("aria-expanded","true")}function z(e){e.langPicker.dataset.open="false",e.langMenu.hidden=!0,e.langTrigger.setAttribute("aria-expanded","false")}function Z(e,a,o){const t=a.find(s=>s.code===o)??a[0];e.selectedLanguage=t.code,e.langTriggerLabel.textContent=t.native_label||t.label,e.langTriggerCode.textContent=t.code.toUpperCase(),e.langTrigger.setAttribute("aria-label",`${e.appearance.labels.language_label||"Language"}: ${t.label}`),e.langMenu.querySelectorAll(".lang-option").forEach(s=>{const c=s.dataset.code===t.code;s.classList.toggle("is-active",c),s.setAttribute("aria-selected",c?"true":"false")})}function A(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function ge(e){if(!e)return"";try{const a=new URL(e,location.href).protocol;return["https:","http:","mailto:"].includes(a)?e:""}catch{return""}}function ue(e){if(!e)return"";try{const a=new URL(e,location.href).protocol;return["https:","http:"].includes(a)?e:""}catch{return""}}function L(e){return A(e).replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/__(.+?)__/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/_(.+?)_/g,"<em>$1</em>").replace(/`([^`]+)`/g,"<code>$1</code>").replace(/\[([^\]]+)\]\((https?:\/\/[^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>')}function ee(e){const a=e.split(`
|
|
282
|
+
`),o=[];let t=0;for(;t<a.length;){const r=a[t],s=r.match(/^### (.+)/),c=r.match(/^## (.+)/),n=r.match(/^# (.+)/);if(s){o.push(`<h3>${L(s[1])}</h3>`),t++;continue}if(c){o.push(`<h2>${L(c[1])}</h2>`),t++;continue}if(n){o.push(`<h1>${L(n[1])}</h1>`),t++;continue}if(r.match(/^[-*] /)){const p=[];for(;t<a.length&&a[t].match(/^[-*] /);)p.push(`<li>${L(a[t].slice(2))}</li>`),t++;o.push(`<ul>${p.join("")}</ul>`);continue}if(r.match(/^\d+\. /)){const p=[];for(;t<a.length&&a[t].match(/^\d+\. /);)p.push(`<li>${L(a[t].replace(/^\d+\. /,""))}</li>`),t++;o.push(`<ol>${p.join("")}</ol>`);continue}if(r.startsWith("```")){const p=[];for(t++;t<a.length&&!a[t].startsWith("```");)p.push(A(a[t])),t++;t<a.length&&t++,o.push(`<pre><code>${p.join(`
|
|
283
|
+
`)}</code></pre>`);continue}if(!r.trim()){t++;continue}const d=[];for(;t<a.length&&a[t].trim()&&!a[t].match(/^(#{1,3} |[-*] |\d+\. |```)/);)d.push(L(a[t])),t++;d.length&&o.push(`<p>${d.join("<br>")}</p>`)}return o.join("")}function De(e,a,o,t){const r=(a.fab_label||"").trim(),s=(a.fab_sublabel||"").trim(),c=e.fab.querySelector(".fab-icon"),n=e.fab.querySelector(".fab-text"),d=e.fab.querySelector(".fab-label"),p=e.fab.querySelector(".fab-sublabel");!c||!n||!d||!p||(o?c.innerHTML=`<img class="fab-logo" alt="${ce(t)}" src="${ce(ue(a.logo_url))}" />`:c.innerHTML=pe,r?(d.textContent=r,e.fab.classList.add("has-label"),e.fab.setAttribute("aria-label",s?`${r}, ${s} — open ${t}`:`${r} — open ${t}`)):(d.textContent="",e.fab.classList.remove("has-label"),e.fab.setAttribute("aria-label",`Open ${t}`)),r&&s?(p.textContent=s,e.fab.classList.add("has-sublabel")):(p.textContent="",e.fab.classList.remove("has-sublabel")),n.style.display=r?"":"none")}function T(e,a){e.panel.setAttribute("data-screen",a),e.welcomeScreen.style.display=a==="welcome"?"flex":"none",e.callScreen.style.display=a==="call"?"flex":"none",e.formScreen.style.display=a==="form"?"flex":"none"}function Fe(e,a){var h;const{definition:o,values:t,cancelLabel:r}=a,s=k.totalSteps(o),c=Math.max(0,Math.min(a.stepIndex??0,s-1)),n=s>1,d=c===s-1,p=(h=o.steps)==null?void 0:h[c];e.formTitle.textContent=(p==null?void 0:p.title)??o.title,e.formEyebrow.textContent=n?`Step ${c+1} of ${s}${o.title?` · ${o.title}`:""}`:"Review before submit";const v=(p==null?void 0:p.subtitle)??(c===0?o.subtitle:"");e.formSubtitle.textContent=v??"",e.formSubtitle.style.display=v?"":"none",$e(e,s,c);const x=e.formSubmitBtn.querySelector(".form-submit-label");x&&(x.textContent=d?o.submit_label??"Confirm & send":(p==null?void 0:p.next_label)??"Continue"),e.formCancelBtn.textContent=r??"Cancel";const l=n&&c>0;e.formStepBackBtn.hidden=!l,l&&(e.formStepBackBtn.textContent=(p==null?void 0:p.back_label)??"Back");const g=o.layout??{};e.formFields.classList.toggle("is-grid",g.field_layout==="grid"),e.formFields.classList.toggle("is-compact",g.density==="compact"),e.formFields.classList.toggle("is-inline-labels",g.label_position==="inline"),I(e,""),O(e,""),e.formFields.innerHTML="",e.formInputs.clear();for(const u of k.fieldsForStep(o,c))e.formFields.appendChild(je(e,u,u.name?t[u.name]??"":"",a.onFieldChange))}function $e(e,a,o){if(a<=1){e.formStepper.hidden=!0,e.formStepper.innerHTML="";return}e.formStepper.hidden=!1,e.formStepper.innerHTML="";for(let t=0;t<a;t++){const r=document.createElement("span");r.className="form-stepper-dot",t<o&&r.classList.add("is-done"),t===o&&r.classList.add("is-active"),e.formStepper.appendChild(r)}}function j(e){return e?e.map(a=>typeof a=="string"?{value:a,label:a}:{value:a.value,label:a.label??a.value}):[]}function je(e,a,o,t){let r=()=>{};const s=()=>{r(),t&&t()};if(a.type==="display"){const l=document.createElement("div");if(l.className="form-display",a.label){const g=document.createElement("div");g.className="form-display-title",g.textContent=a.label,l.appendChild(g)}if(a.help_text){const g=document.createElement("p");g.className="form-display-body",g.textContent=a.help_text,l.appendChild(g)}return l}const c=a.name,n=document.createElement("label");n.className="form-field",a.width==="half"&&n.classList.add("is-half");const d=document.createElement("span");d.className="form-label",d.textContent=a.required?`${a.label} *`:a.label,n.appendChild(d);let p;if(a.type==="textarea"){const l=document.createElement("textarea");l.rows=a.rows??4,l.placeholder=a.placeholder??"",l.value=o,l.name=c,l.className="form-input form-textarea",a.required&&(l.required=!0),l.addEventListener("input",s),n.appendChild(l),p={read:()=>l.value.trim(),setDisabled:g=>{l.disabled=g}}}else if(a.type==="select"){const l=document.createElement("select");l.className="form-input form-select",l.name=c,a.required&&(l.required=!0);const g=j(a.options),h=new Set(g.map(m=>m.value)),u=!o||h.has(o)?g:[...g,{value:o,label:o}];for(const m of u){const b=document.createElement("option");b.value=m.value,b.textContent=m.label,m.value===o&&(b.selected=!0),l.appendChild(b)}l.addEventListener("change",s),n.appendChild(l),p={read:()=>l.value.trim(),setDisabled:m=>{l.disabled=m}}}else if(a.type==="radio"){n.classList.add("is-choice-group");const l=`${c}-${Math.random().toString(36).slice(2,8)}`,g=document.createElement("div");g.className="form-choice-group";const h=[];for(const u of j(a.options)){const m=document.createElement("label");m.className="form-choice";const b=document.createElement("input");b.type="radio",b.name=l,b.value=u.value,u.value===o&&(b.checked=!0),a.required&&(b.required=!0),b.addEventListener("change",s);const C=document.createElement("span");C.textContent=u.label,m.appendChild(b),m.appendChild(C),g.appendChild(m),h.push(b)}n.appendChild(g),p={read:()=>{var u;return((u=h.find(m=>m.checked))==null?void 0:u.value.trim())??""},setDisabled:u=>h.forEach(m=>{m.disabled=u})}}else if(a.type==="checkbox")if(n.classList.add("is-choice-group"),a.options&&a.options.length){const l=new Set(o.split(",").map(u=>u.trim()).filter(Boolean)),g=document.createElement("div");g.className="form-choice-group";const h=[];for(const u of j(a.options)){const m=document.createElement("label");m.className="form-choice";const b=document.createElement("input");b.type="checkbox",b.value=u.value,l.has(u.value)&&(b.checked=!0),b.addEventListener("change",s);const C=document.createElement("span");C.textContent=u.label,m.appendChild(b),m.appendChild(C),g.appendChild(m),h.push(b)}n.appendChild(g),p={read:()=>h.filter(u=>u.checked).map(u=>u.value).join(","),setDisabled:u=>h.forEach(m=>{m.disabled=u})}}else{const l=document.createElement("input");l.type="checkbox",l.name=c,l.className="form-checkbox",(o==="true"||o==="1"||o==="on")&&(l.checked=!0),a.required&&(l.required=!0),l.addEventListener("change",s),n.appendChild(l),n.classList.add("is-inline-bool"),p={read:()=>l.checked?"true":"",setDisabled:g=>{l.disabled=g}}}else{const l=document.createElement("input");l.type=a.type,l.placeholder=a.placeholder??"",l.value=o,l.name=c,l.className="form-input",a.required&&(l.required=!0),a.pattern&&(l.pattern=a.pattern),a.type==="number"&&(a.min!==void 0&&(l.min=String(a.min)),a.max!==void 0&&(l.max=String(a.max))),l.addEventListener("input",s),n.appendChild(l),p={read:()=>l.value.trim(),setDisabled:g=>{l.disabled=g}}}if(a.help_text){const l=document.createElement("span");l.className="form-help",l.textContent=a.help_text,n.appendChild(l)}const v=document.createElement("span");v.className="form-field-error",v.hidden=!0,n.appendChild(v);const x=l=>{v.textContent=l,v.hidden=!l,n.classList.toggle("is-invalid",!!l)};return r=()=>x(""),e.formInputs.set(c,{...p,setError:x}),n}function Ve(e,a){const o=new Map(a.map(t=>[t.name,t.message]));for(const[t,r]of e.formInputs.entries())r.setError(o.get(t)??"")}function Pe(e){for(const a of e.formInputs.values())a.setError("")}function te(e){const a={};for(const[o,t]of e.formInputs.entries())a[o]=t.read();return a}function V(e,a){e.formSubmitBtn.disabled=a,e.formCancelBtn.disabled=a,e.formBackBtn.disabled=a,e.formStepBackBtn.disabled=a;for(const o of e.formInputs.values())o.setDisabled(a);e.formSubmitBtn.classList.toggle("is-busy",a)}function I(e,a){e.formError.textContent=a,e.formError.hidden=!a}function O(e,a){e.formSuccess.textContent=a,e.formSuccess.hidden=!a}function me(e,a){e.callStatus.textContent=a}function He(e,a){if(a===null){e.callTimer.hidden=!0,e.callTimer.classList.remove("warning"),e.callTimerText.textContent="";return}e.callTimer.hidden=!1;const o=Math.max(0,Math.ceil(a/1e3));e.callTimerText.textContent=Oe(o),e.callTimer.classList.toggle("warning",o<=30)}function Oe(e){const a=Math.floor(e/60),o=e%60;return`${a}:${o.toString().padStart(2,"0")}`}function Re(e,a){e.orb.classList.remove("listening","speaking","connecting","thinking"),a!=="idle"&&e.orb.classList.add(a);const o=e.appearance.labels;e.orbLabel.textContent=a==="listening"?o.listening:a==="speaking"?o.speaking:a==="connecting"?o.connecting:a==="thinking"?o.thinking:o.idle,a!=="thinking"&&be(e,null)}function be(e,a){const o=(a||"").trim();if(!o){e.agentStatusLine.hidden=!0,e.agentStatusLine.textContent="";return}e.agentStatusLine.textContent=o,e.agentStatusLine.hidden=!1}function qe(e,a){const o=a?"Unmute":"Mute",t=a?Le:H;for(const r of[e.muteBtn,e.formMuteBtn])r.classList.toggle("is-active",a),r.setAttribute("aria-label",o),r.innerHTML=t}function ae(e,a){e.formCallControls.hidden=!a}function oe(e,a){e.audioDrawer.hidden=!a,e.audioDrawer.classList.toggle("is-open",a),e.settingsBtn.classList.toggle("is-active",a),e.settingsBtn.setAttribute("aria-expanded",a?"true":"false")}function ne(e,a){const o=Math.max(0,Math.min(1,a));e.audioMeterBar.style.width=`${(o*100).toFixed(1)}%`}function re(e,a,o,t){const r=o||"";e.innerHTML="";const s=document.createElement("option");s.value="",s.textContent=t,e.appendChild(s);for(const c of a){const n=document.createElement("option");n.value=c.deviceId,n.textContent=c.label||`Device ${c.deviceId.slice(0,6)}`,e.appendChild(n)}Array.from(e.options).some(c=>c.value===r)?e.value=r:e.value=""}const E=new WeakMap,Ue=2,Ye=18;function ie(e,a,o,t,r,s,c){const n=`${t}:${r}`;let d=a.get(n),p=!d;if(!d){const x=o.get(t);x?(d=x,a.set(n,d),p=!1):(d=document.createElement("div"),d.className=`transcript-msg ${t} interim`,e.appendChild(d),a.set(n,d))}const v=E.get(d);if(v!==void 0&&(window.clearInterval(v),E.delete(d)),p&&c&&s.length>3){d.classList.add("interim"),d.classList.remove("final"),d.textContent="";let x=0;const l=()=>{if(x=Math.min(s.length,x+Ue),d.textContent=s.slice(0,x),e.scrollTop=e.scrollHeight,x>=s.length){const h=E.get(d);h!==void 0&&window.clearInterval(h),E.delete(d),t==="agent"?d.innerHTML=ee(s):d.textContent=s,d.classList.remove("interim"),d.classList.add("final")}},g=window.setInterval(l,Ye);E.set(d,g),l(),o.delete(t);return}t==="agent"?d.innerHTML=ee(s):d.textContent=s,d.classList.toggle("interim",!c),d.classList.toggle("final",c),e.scrollTop=e.scrollHeight,c?o.delete(t):o.set(t,d)}function Ge(e,a,o,t,r){const s=(t||"").trim();s&&(ie(e.transcript,e.transcriptSegments,e.transcriptInterimBubble,a,o,s,r),e.formTranscript.hidden||ie(e.formTranscript,e.formTranscriptSegments,e.formTranscriptInterimBubble,a,o,s,r))}function R(e,a,o){for(const t of a.values()){const r=E.get(t);r!==void 0&&(window.clearInterval(r),E.delete(t))}e.innerHTML="",a.clear(),o.clear()}function Ke(e){R(e.transcript,e.transcriptSegments,e.transcriptInterimBubble),R(e.formTranscript,e.formTranscriptSegments,e.formTranscriptInterimBubble)}function We(e,a){const t=`Connecting you with ${(a||"").trim()||"the next agent"}...`;for(const r of[e.transcript,e.formTranscript]){if(!r)continue;const s=document.createElement("div");s.className="transcript-msg system agent-transition",s.textContent=t,r.appendChild(s),r.scrollTop=r.scrollHeight}me(e,t)}function se(e,a){if(e.formTranscript.hidden=!a,a){R(e.formTranscript,e.formTranscriptSegments,e.formTranscriptInterimBubble);for(const[o,t]of e.transcriptSegments){const r=t.cloneNode(!0);e.formTranscript.appendChild(r),e.formTranscriptSegments.set(o,r)}for(const[o,t]of e.transcriptInterimBubble)for(const[r,s]of e.transcriptSegments)if(s===t){const c=e.formTranscriptSegments.get(r);c&&e.formTranscriptInterimBubble.set(o,c);break}e.formTranscript.scrollTop=e.formTranscript.scrollHeight}}function le(e){const a=M(e);if(!a)return"#ffffff";const[o,t,r]=a,s=n=>{const d=n/255;return d<=.03928?d/12.92:Math.pow((d+.055)/1.055,2.4)};return .2126*s(o)+.7152*s(t)+.0722*s(r)>.5?"#111111":"#ffffff"}function Je(e){const a=M(e);if(!a)return"#f6f7f9";const[o,t,r]=a,c=(.2126*o+.7152*t+.0722*r)/255>.5?-10:18,n=d=>Math.max(0,Math.min(255,d+c));return`rgb(${n(o)}, ${n(t)}, ${n(r)})`}function Qe(e,a){const o=M(e),t=M(a);if(!o||!t)return"rgba(0,0,0,0.55)";const r=s=>Math.round(o[s]*.55+t[s]*.45);return`rgb(${r(0)}, ${r(1)}, ${r(2)})`}function M(e){const a=e.trim(),o=a.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(o){let r=o[1];return r.length===3&&(r=r.split("").map(s=>s+s).join("")),[parseInt(r.slice(0,2),16),parseInt(r.slice(2,4),16),parseInt(r.slice(4,6),16)]}const t=a.match(/^rgba?\(\s*(\d+)[,\s]+(\d+)[,\s]+(\d+)/i);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function ce(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Xe(e,a={}){const o=a.target??document.body,t=Be(a.rootId??"voice-agent-widget-root",{inline:a.inline,parent:o,closeButtonHide:a.closeButtonHide});X(t,e.getAppearance()),T(t,"welcome");const r=e.getAudioCapabilities(),s=[],c=[];let n=!1,d=!1,p=!1,v=null,x=null,l=null;const g=(i,f)=>{const w=window.setInterval(i,f);return c.push(w),w},h=i=>{n=i,t.panel.style.display=i?"flex":"none"},u=()=>{n||h(!0)},m=()=>e.isActive()?"call":"welcome";s.push(e.on("appearance",i=>X(t,i)),e.on("state",({orb:i,statusLabel:f})=>{Re(t,i),be(t,i==="thinking"?f:null)}),e.on("call:status",({status:i})=>me(t,i)),e.on("call:timer",({remainingMs:i})=>He(t,i)),e.on("mute",({muted:i})=>qe(t,i)),e.on("controls",({canStart:i,canMute:f,canEnd:w})=>{t.startBtn.disabled=!i,t.muteBtn.disabled=!f,t.endBtn.disabled=!w}),e.on("connection",({phase:i})=>{i==="connecting"?d||T(t,"call"):(i==="disconnected"||i==="failed")&&(d||T(t,"welcome"))}),e.on("transcript",({role:i,segmentId:f,text:w,isFinal:$})=>Ge(t,i,f,w,$)),e.on("transcript:clear",()=>Ke(t)),e.on("agent:handoff",({agentName:i})=>We(t,i)),e.on("audio",i=>de(t,i,r)));const b=()=>{const i=e.getActiveForm();i&&Fe(t,{definition:i.definition,values:i.values,stepIndex:i.stepIndex,cancelLabel:e.isActive()?"Back to call":"Cancel",onFieldChange:()=>e.updateFormValues(te(t))})};s.push(e.on("form:show",({inCall:i,transcriptionEnabled:f})=>{d=!0,u(),T(t,"form"),ae(t,i),se(t,i&&f),b()}),e.on("form:update",()=>b()),e.on("form:validation",({errors:i})=>{I(t,""),Ve(t,i)}),e.on("form:submitting",()=>{I(t,""),O(t,""),Pe(t),V(t,!0)}),e.on("form:submitted",({successMessage:i})=>{O(t,i),V(t,!1)}),e.on("form:error",({message:i})=>{I(t,i),V(t,!1)}),e.on("form:close",()=>{d=!1,ae(t,!1),se(t,!1),T(t,m())}));const C=()=>e.updateFormValues(te(t));t.formBackBtn.addEventListener("click",()=>e.closeForm()),t.formCancelBtn.addEventListener("click",()=>e.closeForm()),t.formStepBackBtn.addEventListener("click",()=>{C(),e.stepForm("back")}),t.formSubmitBtn.addEventListener("click",()=>{C(),e.submitForm()});const xe=async()=>{try{const{inputs:i,outputs:f}=await e.enumerateAudioDevices(),w=e.getAudioState();re(t.audioMicSelect,i,w.prefs.micDeviceId,"System default"),re(t.audioSpeakerSelect,f,w.prefs.speakerDeviceId,"System default")}catch(i){console.warn("[voice-agent] device enumeration failed:",i)}},N=()=>{l!==null&&(cancelAnimationFrame(l),l=null),x&&(x.close().catch(()=>{}),x=null),ne(t,0)},q=async()=>{if(N(),!!e.isActive())try{const i=e.getAudioState(),f=await navigator.mediaDevices.getUserMedia({audio:i.prefs.micDeviceId?{deviceId:{exact:i.prefs.micDeviceId}}:!0,video:!1}),w=new(window.AudioContext||window.webkitAudioContext);x=w;const $=w.createMediaStreamSource(f),_=w.createAnalyser();_.fftSize=1024,$.connect(_);const S=new Float32Array(_.fftSize),Y=()=>{if(!x)return;_.getFloatTimeDomainData(S);let G=0;for(let B=0;B<S.length;B++)G+=S[B]*S[B];const he=Math.sqrt(G/S.length),ye=20*Math.log10(Math.max(he,1e-6)),we=Math.max(0,Math.min(1,(ye+50)/50));ne(t,we),l=requestAnimationFrame(Y)};l=requestAnimationFrame(Y)}catch(i){console.warn("[voice-agent] mic-level meter unavailable:",i)}},D=()=>{v!==null&&(window.clearInterval(v),v=null)},fe=()=>{D();const i=async()=>{const f=await e.getAudioStats();if(!f){t.audioDiagLoss.textContent="—",t.audioDiagJitter.textContent="—",t.audioDiagRtt.textContent="—";return}t.audioDiagLoss.textContent=String(f.packetsLost),t.audioDiagJitter.textContent=`${f.jitter.toFixed(1)} ms`,t.audioDiagRtt.textContent=f.roundTripTime?`${f.roundTripTime.toFixed(0)} ms`:"—"};i(),v=g(()=>void i(),2e3)},ve=async()=>{p=!0,oe(t,!0),de(t,e.getAudioState(),r),await xe(),await q(),fe()},F=()=>{p=!1,oe(t,!1),N(),D()};g(()=>{p&&!e.isActive()&&F()},1e3),t.fab.addEventListener("click",()=>{n||e.trackEvent("bubble_clicked"),h(!n)}),t.closeBtn.addEventListener("click",()=>{e.isActive()&&e.end(),e.closeForm(),h(!1)}),(a.openChat||a.inline)&&u(),t.startBtn.addEventListener("click",()=>{const i=t.appearance.terms_url;i&&ke.saveConsent(e.agentSlug||"default",i),e.start()}),t.endBtn.addEventListener("click",()=>void e.end()),t.muteBtn.addEventListener("click",()=>void e.toggleMute()),t.formMuteBtn.addEventListener("click",()=>void e.toggleMute()),t.formEndBtn.addEventListener("click",()=>{e.closeForm(),e.end()}),t.settingsBtn.addEventListener("click",()=>{e.isActive()&&(p?F():ve())}),t.audioDrawerClose.addEventListener("click",F),t.audioMicSelect.addEventListener("change",()=>{e.updateAudioSettings({micDeviceId:t.audioMicSelect.value}),q()}),t.audioSpeakerSelect.addEventListener("change",()=>{e.updateAudioSettings({speakerDeviceId:t.audioSpeakerSelect.value})}),t.audioVolume.addEventListener("input",()=>{const i=Number(t.audioVolume.value);t.audioVolumeValue.textContent=`${i}%`,e.updateAudioSettings({outputVolume:i})}),t.audioNcEngine.addEventListener("change",()=>{const i=t.audioNcEngine.value;e.updateAudioSettings({noiseFilter:i}),t.audioDfStrengthRow.hidden=i!=="deepfilter"}),t.audioDfStrength.addEventListener("input",()=>{const i=Number(t.audioDfStrength.value);t.audioDfStrengthValue.textContent=String(i),e.updateAudioSettings({deepFilterStrength:i})}),t.audioTogAec.addEventListener("change",()=>void e.updateAudioSettings({echoCancellation:t.audioTogAec.checked})),t.audioTogNs.addEventListener("change",()=>void e.updateAudioSettings({noiseSuppression:t.audioTogNs.checked})),t.audioTogAgc.addEventListener("change",()=>void e.updateAudioSettings({autoGainControl:t.audioTogAgc.checked})),t.audioTogVi.addEventListener("change",()=>void e.updateAudioSettings({voiceIsolation:t.audioTogVi.checked})),t.audioTogHp.addEventListener("change",()=>void e.updateAudioSettings({headphonesMode:t.audioTogHp.checked})),t.audioTogTranscription.addEventListener("change",()=>void e.updateAudioSettings({transcriptionEnabled:t.audioTogTranscription.checked})),t.audioTogTextInput.addEventListener("change",()=>void e.updateAudioSettings({textInputEnabled:t.audioTogTextInput.checked})),g(()=>{const i=e.isActive();t.settingsBtn.hidden=!i||!t.appearance.show_audio_settings;const f=i&&e.getAudioState().prefs.textInputEnabled;t.textInputRow.hidden=!f,t.textSendBtn.disabled=!f},500),t.textInput.addEventListener("input",()=>{t.textInput.style.height="auto",t.textInput.style.height=`${t.textInput.scrollHeight}px`});const U=()=>{const i=t.textInput.value.trim();!i||!e.isActive()||(t.textInput.value="",t.textInput.style.height="auto",e.sendText(i))};return t.textSendBtn.addEventListener("click",U),t.textInput.addEventListener("keydown",i=>{i.key==="Enter"&&!i.shiftKey&&(i.preventDefault(),U())}),{destroy:()=>{for(const i of s.splice(0))try{i()}catch{}for(const i of c.splice(0))window.clearInterval(i);N(),D(),t.host.remove()},refs:t}}function de(e,a,o){const{prefs:t,applied:r,noiseFilter:s}=a;e.audioNcEngine.value=t.noiseFilter,e.audioDfStrength.value=String(t.deepFilterStrength),e.audioDfStrengthValue.textContent=String(t.deepFilterStrength),e.audioDfStrengthRow.hidden=t.noiseFilter!=="deepfilter",e.audioTogAec.checked=t.echoCancellation,e.audioTogNs.checked=t.noiseSuppression,e.audioTogAgc.checked=t.autoGainControl,e.audioTogVi.checked=t.voiceIsolation,e.audioTogHp.checked=t.headphonesMode,e.audioTogTranscription.checked=t.transcriptionEnabled,e.audioTogTextInput.checked=t.textInputEnabled,e.transcript.style.display=t.transcriptionEnabled?"flex":"none",t.transcriptionEnabled?e.panel.classList.add("with-transcript"):e.panel.classList.remove("with-transcript"),e.audioVolume.value=String(t.outputVolume),e.audioVolumeValue.textContent=`${t.outputVolume}%`,e.audioTogViRow.style.display=o.voiceIsolationSupported?"":"none",e.audioSpeakerRow.style.display=o.setSinkIdSupported?"":"none",e.audioDiagEngine.textContent=Ze(s),e.audioDiagAec.textContent=P(r.echoCancellation),e.audioDiagNs.textContent=P(r.noiseSuppression),e.audioDiagAgc.textContent=P(r.autoGainControl),e.audioDiagVi.textContent=r.voiceIsolation===void 0?"Unsupported":r.voiceIsolation?"On":"Off",e.audioDiagSr.textContent=r.sampleRate!==void 0?`${r.sampleRate} Hz`:"—"}function P(e){return e===void 0?"—":e?"On":"Off"}function Ze(e){const a=e.engine==="krisp"?"Krisp":e.engine==="deepfilter"?"DeepFilterNet3":"Off";return e.engine==="off"?"Off":e.status==="active"?`${a} (active)`:e.status==="unsupported"?`${a} (unsupported)`:e.status==="failed"?`${a} (failed)`:a}exports.mountVoiceUI=Xe;
|
|
284
|
+
//# sourceMappingURL=ui.cjs.map
|