@livelayer/react 0.10.5 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),n=require("react"),Lt=require("react-dom"),Xn=require("@livelayer/sdk"),mt=require("livekit-client");class cn extends n.Component{constructor(){super(...arguments),this.state={hasError:!1,error:null},this.reset=()=>{this.setState({hasError:!1,error:null})}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,o){var i,s;(s=(i=this.props).onError)==null||s.call(i,r,o)}render(){var r;return this.state.hasError?this.props.fallback?this.props.fallback:t.jsxs("div",{className:"ll-error-boundary",role:"alert",children:[t.jsx("p",{className:"ll-error-boundary__title",children:"Widget crashed"}),t.jsx("p",{className:"ll-error-boundary__message",children:((r=this.state.error)==null?void 0:r.message)||"Something went wrong."}),t.jsx("button",{type:"button",className:"ll-error-boundary__retry",onClick:this.reset,children:"Reload widget"})]}):this.props.children}}function un(e){const[r,o]=n.useState("idle"),[i,s]=n.useState("idle"),[a,d]=n.useState([]),[l,u]=n.useState(null),[f,v]=n.useState(null),[p,c]=n.useState(null),[L,b]=n.useState(!1),[_,w]=n.useState(null),g=n.useRef(null),C=n.useRef(e.onDataMessage);C.current=e.onDataMessage,n.useEffect(()=>{const S={onConnectionStateChange:z=>{o(z),z==="connected"&&w(null)},onAgentStateChange:s,onTranscript:z=>d([...z]),onAgentConfig:u,onAudioTrack:z=>c(z),onVideoTrack:z=>v(z),onVideoTrackRemoved:()=>v(null),onError:z=>w(z),onDataMessage:z=>{var O;(O=C.current)==null||O.call(C,z)},onResumabilityChange:b},$=new Xn.LiveKitSession({agentId:e.agentId,baseUrl:e.baseUrl,apiKey:e.apiKey,sessionEndpoint:e.sessionEndpoint,sessionBody:e.sessionBody},S);return g.current=$,o("idle"),s("idle"),d([]),u(null),v(null),c(null),b(!1),w(null),()=>{var z;(z=$.destroy)==null||z.call($),g.current=null}},[e.agentId,e.baseUrl,e.apiKey,e.sessionEndpoint,JSON.stringify(e.sessionBody??{})]);const E=n.useCallback(async()=>{const S=g.current;if(S)try{await S.connect()}catch($){throw w($ instanceof Error?$.message:String($)),$}},[]),N=n.useCallback(()=>{const S=g.current;S&&S.disconnect()},[]),k=n.useCallback(()=>{var S;return((S=g.current)==null?void 0:S.getRoom())??null},[]);return{connectionState:r,agentState:i,transcript:a,agentConfig:l,videoElement:f,audioElement:p,canResume:L,error:_,connect:E,disconnect:N,getRoom:k,session:g.current}}function dn(){const e=n.useRef(null),r=n.useRef(null),o=n.useRef(null),i=n.useRef(null),s=n.useRef(new Set),a=n.useRef(null),d=n.useCallback(()=>{const p=r.current;if(!p){i.current=null;return}(!a.current||a.current.length!==p.frequencyBinCount)&&(a.current=new Uint8Array(new ArrayBuffer(p.frequencyBinCount)));const c=a.current;p.getByteFrequencyData(c);let L=0;for(let _=0;_<c.length;_++)L+=c[_];const b=L/c.length/255;for(const _ of s.current)try{_(b)}catch(w){console.error("[useAudioLevel] subscriber threw:",w)}i.current=requestAnimationFrame(d)},[]),l=n.useCallback(()=>{if(e.current||typeof window>"u"||typeof AudioContext>"u")return;const p=new AudioContext,c=p.createAnalyser();c.fftSize=64,c.connect(p.destination),e.current=p,r.current=c},[]),u=n.useCallback(p=>{if(l(),!(!e.current||!r.current)){if(o.current){try{o.current.disconnect()}catch{}o.current=null}try{const c=e.current.createMediaElementSource(p);c.connect(r.current),o.current=c}catch(c){console.warn("[useAudioLevel] createMediaElementSource failed:",c);return}i.current===null&&(i.current=requestAnimationFrame(d))}},[l,d]),f=n.useCallback(()=>{if(i.current!==null&&(cancelAnimationFrame(i.current),i.current=null),o.current){try{o.current.disconnect()}catch{}o.current=null}},[]),v=n.useCallback(p=>(s.current.add(p),()=>{s.current.delete(p)}),[]);return n.useEffect(()=>()=>{if(f(),r.current){try{r.current.disconnect()}catch{}r.current=null}if(e.current){try{e.current.close()}catch{}e.current=null}s.current.clear(),a.current=null},[f]),{attach:u,detach:f,subscribe:v}}function fn(){const[e,r]=n.useState(!1),[o,i]=n.useState(""),[s,a]=n.useState(null),d=n.useRef(null),l=n.useRef(null),u=n.useCallback(async b=>{var _,w;if(d.current&&l.current){try{await l.current.localParticipant.unpublishTrack(d.current)}catch{}d.current.stop(),d.current=null}l.current=b,a(null);try{const g=await mt.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});await b.localParticipant.publishTrack(g),d.current=g,r(g.isMuted);const C=(w=(_=g.mediaStreamTrack)==null?void 0:_.getSettings)==null?void 0:w.call(_);C!=null&&C.deviceId&&i(C.deviceId)}catch(g){const C=g instanceof Error&&g.name==="NotAllowedError"?"Enable your microphone to talk with the agent.":"Microphone unavailable. Check browser permissions and try again.";throw a(C),g}},[]),f=n.useCallback(b=>{l.current=b},[]),v=n.useCallback(async b=>{const _=l.current;if(_)try{await _.switchActiveDevice("audioinput",b),i(b)}catch(w){console.warn("[useMicrophoneState] switchDevice failed:",w)}},[]),p=n.useCallback(async()=>{const b=d.current,_=l.current,g=!(b?b.isMuted:e);if(r(g),!!_)try{await _.localParticipant.setMicrophoneEnabled(!g),b!=null&&b.mediaStreamTrack&&(b.mediaStreamTrack.enabled=!g)}catch(C){console.warn("[useMicrophoneState] setMicrophoneEnabled failed:",C),r(!g)}},[e]),c=n.useCallback(()=>{const b=d.current,_=l.current;if(b&&_){try{_.localParticipant.unpublishTrack(b)}catch{}b.stop()}d.current=null,l.current=null,r(!1),i("")},[]),L=n.useCallback(()=>a(null),[]);return{isMuted:e,activeDeviceId:o,micError:s,toggleMute:p,setupMic:u,attachRoom:f,switchDevice:v,teardownMic:c,clearError:L}}const Qn={resolution:{width:640,height:480,frameRate:24}};function pn(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),[d,l]=n.useState(""),u=n.useRef(null),f=n.useRef(null),v=n.useCallback(g=>{u.current=g},[]),p=n.useCallback(()=>{var E;const g=u.current,C=f.current;if(C&&g){const N=g.localParticipant.getTrackPublication(mt.Track.Source.Camera),S=(N==null?void 0:N.track)??C;try{g.localParticipant.unpublishTrack(S)}catch{}try{(E=S.stop)==null||E.call(S)}catch{}}f.current=null,a(null),r(!1)},[]),c=n.useCallback(async g=>{const C=u.current;if(C){i(null);try{const E={...Qn};g&&(E.deviceId=g);const N=await mt.createLocalVideoTrack(E);await C.localParticipant.publishTrack(N),f.current=N;const k=N.attach();a(k),r(!0),g&&l(g);try{C.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_camera_on"})),{reliable:!0})}catch{}}catch(E){const N=E instanceof Error&&E.name==="NotAllowedError"?"Enable your camera in the browser to share video.":"Camera unavailable. Check permissions and try again.";i(N)}}},[]),L=n.useCallback(async()=>{e?p():await c(d||void 0)},[e,d,p,c]),b=n.useCallback(async g=>{p(),await c(g)},[p,c]),_=n.useCallback(()=>{p(),u.current=null,i(null),l("")},[p]),w=n.useCallback(()=>i(null),[]);return n.useEffect(()=>()=>{f.current&&f.current.stop()},[]),{isEnabled:e,error:o,previewEl:s,activeDeviceId:d,toggle:L,switchDevice:b,attachRoom:v,teardown:_,clearError:w}}function hn(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),d=n.useRef(null),l=n.useCallback(c=>{d.current=c},[]),u=n.useCallback(()=>a(null),[]),f=n.useCallback(async()=>{const c=d.current;if(c){if(e){try{await c.localParticipant.setScreenShareEnabled(!1)}catch{}u(),r(!1);return}i(null);try{await c.localParticipant.setScreenShareEnabled(!0);let L=0;const b=()=>{const _=c.localParticipant.getTrackPublication(mt.Track.Source.ScreenShare);if(_!=null&&_.track){const w=_.track.attach();a(w),r(!0);try{c.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_screen_share_on"})),{reliable:!0})}catch{}return}L++<10?setTimeout(b,100):r(!0)};b()}catch(L){const b=L instanceof Error?L.name:"";b!=="NotAllowedError"&&b!=="AbortError"&&i("Screen share unavailable. Try again."),r(!1)}}},[e,u]),v=n.useCallback(()=>{const c=d.current;if(c&&e)try{c.localParticipant.setScreenShareEnabled(!1)}catch{}u(),r(!1),i(null),d.current=null},[e,u]),p=n.useCallback(()=>i(null),[]);return{isEnabled:e,error:o,previewEl:s,toggle:f,attachRoom:l,teardown:v,clearError:p}}function mn(){const[e,r]=n.useState([]),[o,i]=n.useState([]),s=n.useCallback(async()=>{if(!(typeof navigator>"u"||!navigator.mediaDevices))try{const a=await navigator.mediaDevices.enumerateDevices();r(a.filter(d=>d.kind==="audioinput")),i(a.filter(d=>d.kind==="videoinput"))}catch{}},[]);return n.useEffect(()=>{if(s(),typeof navigator>"u"||!navigator.mediaDevices)return;const a=()=>void s();return navigator.mediaDevices.addEventListener("devicechange",a),()=>navigator.mediaDevices.removeEventListener("devicechange",a)},[s]),{mics:e,cameras:o,refresh:s}}function gn(e,r,o=!1){const[i,s]=n.useState(null),[a,d]=n.useState(null),[l,u]=n.useState(!o&&!!e);return n.useEffect(()=>{if(o||!e){u(!1);return}const f=new AbortController,v=r||"https://app.livelayer.studio";return u(!0),d(null),fetch(`${v}/api/widget/agent/${encodeURIComponent(e)}`,{signal:f.signal}).then(async p=>{if(!p.ok){const c=await p.json().catch(()=>({}));throw new Error(c.error||`HTTP ${p.status}`)}return p.json()}).then(p=>{f.signal.aborted||(s(p),u(!1))}).catch(p=>{f.signal.aborted||(d(p instanceof Error?p.message:"Agent lookup failed"),u(!1))}),()=>f.abort()},[e,r,o]),{info:i,error:a,loading:l}}function Zn(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function er(e,r){if(!(typeof window>"u"))try{window.localStorage.setItem(e,r)}catch{}}function yn({value:e,defaultValue:r="expanded",onChange:o}={}){const i=e!==void 0,[s,a]=n.useState(r),d=i?e:s,l=n.useCallback(u=>{u!==d&&(i||a(u),o==null||o(u))},[d,i,o]);return[d,l]}const tr=["hidden","minimized","expanded"];function nr(e){return e&&tr.includes(e)?e:null}function vn({value:e,defaultValue:r="expanded",onChange:o,persistKey:i="ll-widget",disablePersistence:s=!1}={}){const a=`${i}:display-mode`,d=n.useRef(!1),[l,u]=yn({value:e,defaultValue:r,onChange:f=>{e===void 0&&!s&&er(a,f),o==null||o(f)}});return n.useEffect(()=>{if(d.current||(d.current=!0,s||e!==void 0))return;const f=nr(Zn(a));f&&f!==l&&u(f)},[]),[l,u]}const rr=640;function xn(e=rr){const[r,o]=n.useState(!1);return n.useEffect(()=>{if(e===!1){o(!1);return}if(typeof window>"u"||typeof window.matchMedia>"u")return;const i=`(max-width: ${e-1}px)`,s=window.matchMedia(i),a=()=>o(s.matches);return a(),typeof s.addEventListener=="function"?(s.addEventListener("change",a),()=>s.removeEventListener("change",a)):(s.addListener(a),()=>{s.removeListener(a)})},[e]),r}const Ut="__llHistoryPatched",gt="ll:pathname";function or(){if(typeof window>"u"||window.history[Ut])return;const e=window.history.pushState,r=window.history.replaceState;window.history.pushState=function(...o){const i=e.apply(this,o);return window.dispatchEvent(new Event(gt)),i},window.history.replaceState=function(...o){const i=r.apply(this,o);return window.dispatchEvent(new Event(gt)),i},window.history[Ut]=!0}function Vt(){return typeof window>"u"?"/":window.location.pathname||"/"}function bn(e){const[r,o]=n.useState(()=>e??Vt());return n.useEffect(()=>{if(e!==void 0)return;or();const i=()=>o(Vt());return i(),window.addEventListener("popstate",i),window.addEventListener(gt,i),()=>{window.removeEventListener("popstate",i),window.removeEventListener(gt,i)}},[e]),e??r}const Yt=new Map,ir=/[\\^$+?.()|{}[\]]/g;function sr(e){return e.replace(ir,"\\$&")}function ar(e){const r=Yt.get(e);if(r)return r;const o=e.length>1&&e.endsWith("/")?e.slice(0,-1):e,i="",s="",a=o.replace(/\*\*/g,i).replace(/\*/g,s),l=sr(a).replace(new RegExp(`\\/${i}`,"g"),"(?:\\/.*)?").replace(new RegExp(i,"g"),".*").replace(new RegExp(s,"g"),"[^/]+"),u=new RegExp(`^${l}\\/?$`);return Yt.set(e,u),u}function lr(e,r){const o=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return ar(e).test(o)}function wn(e,r){return typeof e=="function"?e(r):e instanceof RegExp?e.test(r):lr(e,r)}function Gt(e,r){if(!e||e.length===0)return!1;for(const o of e)if(wn(o,r))return!0;return!1}function _n(e,r,o){return e===void 0?!0:Gt(o,e)?!1:r&&r.length>0?Gt(r,e):!0}function kn(e,r,o){return n.useMemo(()=>_n(e,r,o),[e,r,o])}function cr(e){return e===!1?{navigate:!1,thinking:!1,action:!1}:e===void 0||e===!0?{navigate:!0,thinking:!0,action:!0}:{navigate:e.navigate!==!1,thinking:e.thinking!==!1,action:e.action!==!1}}function ur(e){const r=n.useMemo(()=>cr(e.config),[e.config]),o=e.baseUrl.replace(/\/+$/,""),i=n.useRef(null),s=n.useCallback(u=>{try{new Audio(`${o}${u}`).play().catch(()=>{})}catch{}},[o]),a=n.useCallback(()=>{r.navigate&&s("/audio/page-change-sound.mp3")},[r.navigate,s]),d=n.useCallback(()=>{r.action&&s("/audio/confirmation-sound.mp3")},[r.action,s]),l=n.useCallback(u=>{if(!r.thinking){if(i.current){try{i.current.pause()}catch{}i.current=null}return}if(u){if(i.current)return;try{const f=new Audio(`${o}/audio/thinking-sound.mp3`);f.loop=!0,f.volume=.3,f.play().catch(()=>{i.current=null}),i.current=f}catch{}}else if(i.current){try{i.current.pause()}catch{}i.current=null}},[o,r.thinking]);return n.useEffect(()=>()=>{if(i.current){try{i.current.pause()}catch{}i.current=null}},[]),n.useMemo(()=>({playPageChange:a,playConfirmation:d,setThinking:l}),[a,d,l])}const Kt=({muted:e=!1,className:r})=>e?t.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:[t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z"}),t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2"})]}):t.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4M12 1a3 3 0 00-3 3v4a3 3 0 006 0V4a3 3 0 00-3-3z"})}),Jt=({className:e})=>t.jsx("svg",{className:e,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})}),dr=({className:e})=>t.jsx("svg",{className:e,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})}),fr={left:180,right:0,up:-90,down:90},Xt=({direction:e="right",className:r})=>t.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,style:{transform:`rotate(${fr[e]}deg)`},"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 6l6 6-6 6"})});function pr(e){return e==="top-left"||e==="bottom-left"?"left":"right"}const jn="ll-hidden-tab-center-y",hr=5,Qt=16;function mr(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(jn);if(!e)return null;const r=Number.parseFloat(e);return Number.isFinite(r)?r:null}catch{return null}}function Zt(e){if(!(typeof window>"u"))try{window.localStorage.setItem(jn,String(e))}catch{}}const gr=({position:e,isMobile:r,isSpeaking:o,onExpand:i,label:s="Open widget",avatarImageUrl:a,agentName:d,containerEl:l})=>{const u=pr(e),f=u==="right"?"left":"right",v=r?80:72,p=!!a,c=!!l,[L,b]=n.useState(null),[_,w]=n.useState(!1),g=n.useRef(null),C=n.useRef(!1),E=n.useCallback(T=>{if(typeof window>"u")return T;const W=v/2,D=Qt+W,F=window.innerHeight-Qt-W;return F<D?Math.max(D,T):Math.max(D,Math.min(F,T))},[v]);n.useEffect(()=>{if(c){b(null);return}const T=mr();b(E(T??window.innerHeight/2));const W=()=>{b(D=>D===null?null:E(D))};return window.addEventListener("resize",W),()=>window.removeEventListener("resize",W)},[E,c]);const N=n.useCallback(T=>{if(!c&&!(T.pointerType==="mouse"&&T.button!==0)&&L!==null){try{T.currentTarget.setPointerCapture(T.pointerId)}catch{}g.current={startClientY:T.clientY,startCenterY:L,moved:!1}}},[L,c]),k=n.useCallback(T=>{const W=g.current;if(!W)return;const D=T.clientY-W.startClientY;!W.moved&&Math.abs(D)>hr&&(W.moved=!0,w(!0)),W.moved&&b(E(W.startCenterY+D))},[E]),S=n.useCallback(T=>{const W=g.current;if(W){try{T.currentTarget.releasePointerCapture(T.pointerId)}catch{}g.current=null,W.moved&&(w(!1),C.current=!0,b(D=>(D!==null&&Zt(D),D)))}},[]),$=n.useCallback(()=>{if(C.current){C.current=!1;return}i()},[i]),z=n.useCallback(T=>{if(T.key==="ArrowUp"||T.key==="ArrowDown"){T.preventDefault();const W=T.key==="ArrowUp"?-8:8;b(D=>{if(D===null)return D;const F=E(D+W);return Zt(F),F})}},[E]),O=["ll-hidden",`ll-hidden--${u}`,r?"ll-hidden--mobile":"ll-hidden--desktop",o?"ll-hidden--speaking":null,_?"is-dragging":null,p?"ll-hidden--with-avatar":null,c?"ll-hidden--scoped":null].filter(Boolean).join(" "),H=L===null?void 0:{top:`${L-v/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:O,onPointerDown:N,onPointerMove:k,onPointerUp:S,onPointerCancel:S,onClick:$,onKeyDown:z,"aria-label":s,"data-position":e,style:H,children:p?t.jsxs(t.Fragment,{children:[t.jsx(Xt,{direction:f,className:"ll-hidden__chevron ll-hidden__chevron--mini"}),t.jsx("img",{src:a,alt:d?`${d} avatar`:"Agent avatar",className:"ll-hidden__avatar",draggable:!1})]}):t.jsx(Xt,{direction:f,className:"ll-hidden__chevron"})})},yr=({audioLevel:e,bars:r=20,maxHeight:o=20,minHeight:i=4,className:s,barClassName:a})=>{const d=n.useRef(null),l=n.useRef([]),u=n.useMemo(()=>{const v=(Math.sqrt(5)-1)/2;return Array.from({length:r},(p,c)=>.5+c*v%1*.5)},[r]);n.useEffect(()=>e.subscribe(p=>{for(let c=0;c<r;c++){const L=l.current[c];if(!L)continue;const b=Math.max(i,p*o*u[c]);L.style.height=`${b}px`}}),[e,r,o,i,u]);const f=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:d,className:f,"aria-hidden":"true",children:Array.from({length:r},(v,p)=>t.jsx("div",{ref:c=>{l.current[p]=c},className:["ll-waveform__bar",a].filter(Boolean).join(" "),style:{height:`${i}px`}},p))})},vr=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,agentState:s,isMuted:a,audioLevel:d,onExpand:l,onToggleMute:u,onClose:f})=>r?t.jsx("div",{className:"ll-minimized ll-minimized--mobile",role:"region","aria-label":`${o} widget`,children:t.jsxs("button",{type:"button",className:"ll-minimized__surface",onClick:l,"aria-label":`Expand ${o} widget`,children:[i?t.jsx("img",{src:i,alt:o,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsx(yr,{audioLevel:d,bars:16,maxHeight:18,className:"ll-minimized__waveform"}),t.jsx("span",{className:"ll-minimized__name",children:o}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("span",{className:"ll-minimized__btn",role:"button",tabIndex:0,onClick:v=>{v.stopPropagation(),u()},onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&(v.stopPropagation(),v.preventDefault(),u())},"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(Kt,{muted:a,className:"ll-minimized__icon"})}),t.jsx(Jt,{className:"ll-minimized__icon ll-minimized__icon--expand"})]})]})}):t.jsx("div",{className:"ll-minimized ll-minimized--desktop","data-position":e,role:"region","aria-label":`${o} widget`,children:t.jsxs("div",{className:"ll-minimized__surface",children:[i?t.jsx("img",{src:i,alt:o,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsxs("div",{className:"ll-minimized__meta",children:[t.jsx("span",{className:"ll-minimized__name",children:o}),t.jsx("span",{className:"ll-minimized__state",children:s==="speaking"?"Speaking":s==="thinking"?"Thinking":"Listening"})]}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:u,"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(Kt,{muted:a,className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:l,"aria-label":`Expand ${o} widget`,children:t.jsx(Jt,{className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn ll-minimized__btn--close",onClick:f,"aria-label":"Close widget",children:t.jsx(dr,{className:"ll-minimized__icon"})})]})]})}),xr=({src:e,alt:r,preCannedPlaying:o=!1,className:i,style:s})=>{const[a,d]=n.useState(!1),l=n.useRef(e);if(n.useEffect(()=>{l.current!==e&&(l.current=e,d(!1))},[e]),!e)return null;const u={position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"top",transition:"opacity 500ms ease, transform 500ms ease",transform:o?"scale(1.02)":"scale(1)",opacity:a?1:0,...s};return t.jsx("img",{src:e,alt:r,className:i,style:u,loading:"eager",fetchPriority:"high",onLoad:()=>d(!0)})},br=8,en=8,wr=({open:e,onClose:r,anchorRef:o,children:i})=>{const s=n.useRef(null),[a,d]=n.useState(null);return n.useLayoutEffect(()=>{if(!e){d(null);return}const l=o.current;if(!l)return;const u=()=>{const f=l.getBoundingClientRect(),v={top:f.top-br,left:f.left+f.width/2},p=en+90,c=window.innerWidth-en-90;v.left<p&&(v.left=p),v.left>c&&(v.left=c),d(v)};return u(),window.addEventListener("scroll",u,!0),window.addEventListener("resize",u),()=>{window.removeEventListener("scroll",u,!0),window.removeEventListener("resize",u)}},[e,o]),n.useEffect(()=>{if(!e)return;const l=f=>{const v=f.target,p=s.current,c=o.current;p&&p.contains(v)||c&&c.contains(v)||r()},u=f=>{f.key==="Escape"&&(f.stopPropagation(),r())};return document.addEventListener("mousedown",l),document.addEventListener("keydown",u),()=>{document.removeEventListener("mousedown",l),document.removeEventListener("keydown",u)}},[e,r,o]),!e||a===null||typeof document>"u"?null:Lt.createPortal(t.jsx("div",{ref:s,className:"ll-overflow-popover",role:"menu",style:{position:"fixed",top:a.top,left:a.left,transform:"translate(-50%, -100%)"},children:i}),document.body)},_r=({isMuted:e,onToggleMute:r,isCameraEnabled:o,onToggleCamera:i,allowCamera:s,isScreenShareEnabled:a,onToggleScreenShare:d,allowScreenShare:l,isSpeakerMuted:u,onToggleSpeaker:f,allowTyping:v,isTypingOpen:p,onToggleTyping:c,onDisconnect:L})=>{const[b,_]=n.useState(!1),w=n.useRef(null);return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"ll-toolbar ll-toolbar--compact","data-testid":"compact-toolbar",onClick:g=>g.stopPropagation(),children:[t.jsx("button",{type:"button",className:`ll-tool ${e?"is-muted":""}`,onClick:r,"aria-label":e?"Unmute microphone":"Mute microphone",children:t.jsx(Sn,{muted:e})}),t.jsx("button",{ref:w,type:"button",className:`ll-tool ${b?"is-on":""}`,onClick:()=>_(g=>!g),"aria-label":"More controls","aria-haspopup":"menu","aria-expanded":b,children:t.jsx(kr,{})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:L,"aria-label":"End conversation",children:t.jsx(Rn,{})})]}),t.jsxs(wr,{open:b,onClose:()=>_(!1),anchorRef:w,children:[s&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${o?"is-on":""}`,onClick:()=>{i(),_(!1)},children:[t.jsx(Ln,{}),t.jsx("span",{children:o?"Stop camera":"Start camera"})]}),l&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${a?"is-on":""}`,onClick:()=>{d(),_(!1)},children:[t.jsx(Cn,{}),t.jsx("span",{children:a?"Stop sharing":"Share screen"})]}),t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${u?"is-on":""}`,onClick:()=>{f(),_(!1)},children:[t.jsx(En,{muted:u}),t.jsx("span",{children:u?"Unmute speaker":"Mute speaker"})]}),v&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${p?"is-on":""}`,onClick:()=>{c(),_(!1)},children:[t.jsx(jr,{}),t.jsx("span",{children:p?"Hide typing":"Type a message"})]}),t.jsxs("button",{type:"button",className:"ll-overflow-popover__item is-active",disabled:!0,"aria-current":"true",children:[t.jsx("span",{className:"ll-overflow-popover__lang-code",children:"EN"}),t.jsx("span",{children:"English"})]})]})]})};function kr(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:[t.jsx("circle",{cx:"6",cy:"12",r:"1.5"}),t.jsx("circle",{cx:"12",cy:"12",r:"1.5"}),t.jsx("circle",{cx:"18",cy:"12",r:"1.5"})]})}function jr(){return t.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:t.jsx("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}const Cr=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,idleLoopUrl:s,greeting:a,branding:d,teamMembers:l,currentTeamMemberId:u,isSwitchingTeamMember:f,teamSwitcherOpen:v,onToggleTeamSwitcher:p,onSelectTeamMember:c,languageMenuOpen:L,onToggleLanguageMenu:b,connectionState:_,agentState:w,transcript:g,canResume:C,needsUserGesture:E,error:N,isMuted:k,micError:S,micDevices:$,activeMicId:z,isCameraEnabled:O,cameraPreviewEl:H,cameraDevices:T,activeCameraId:W,isScreenShareEnabled:D,screenPreviewEl:F,isSpeakerMuted:oe,allowCamera:ie,allowScreenShare:fe,allowTyping:ce,showMinimize:pe=!0,showClose:we=!0,chromeless:Ae=!1,compactControls:Q=!1,transforming:it,transformingLabel:qe,avatarVideoContainerRef:st,agentVideoEl:ne,onConnect:Fe,onDisconnect:Ue,onRetry:at,onResumeAudio:Ve,onToggleMute:_e,onSwitchMicDevice:Me,onToggleCamera:ke,onSwitchCameraDevice:Ie,onToggleScreenShare:je,onToggleSpeaker:Ce,onSendMessage:Le,onMinimize:A,onClose:lt,onClearMicError:vt})=>{var Ne;const Se=((l==null?void 0:l.length)??0)>1,Ee=_==="connecting"||_==="connected",Z=_==="connected",Ye=_==="idle"||_==="disconnected"||_==="error",[Ge,Te]=n.useState(!1);n.useEffect(()=>{if(!ne){Te(!1);return}if(!ne.paused&&ne.readyState>=2){Te(!0);return}Te(!1);const m=()=>Te(!0);return ne.addEventListener("playing",m),ne.addEventListener("loadeddata",m),()=>{ne.removeEventListener("playing",m),ne.removeEventListener("loadeddata",m)}},[ne]);const[Re,J]=n.useState(!1);n.useEffect(()=>{if(!Z){J(!1);return}if(Ge)return;const m=setTimeout(()=>J(!0),8e3);return()=>clearTimeout(m)},[Z,Ge]);const ct=_==="connecting"||Z&&!!i&&!Ge&&!Re,Ke=n.useRef(null),ee=n.useRef(null);n.useEffect(()=>{const m=Ke.current;m&&(m.innerHTML="",H&&(H.style.width="100%",H.style.height="100%",H.style.objectFit="cover",H.style.transform="scaleX(-1)",m.appendChild(H)))},[H]),n.useEffect(()=>{const m=ee.current;m&&(m.innerHTML="",F&&(F.style.width="100%",F.style.height="100%",F.style.objectFit="contain",m.appendChild(F)))},[F]);const[te,se]=n.useState(!1),[he,Y]=n.useState(!1),ae=n.useRef(null),me=n.useRef(null);n.useEffect(()=>{if(!te&&!he&&!L&&!v)return;const m=()=>{se(!1),Y(!1),L&&b(),v&&p()};return document.addEventListener("click",m),()=>document.removeEventListener("click",m)},[te,he,L,v,b,p]);const[De,xt]=n.useState(!1),Je=n.useCallback(()=>xt(m=>!m),[]),[ge,Xe]=n.useState(""),Qe=n.useCallback(m=>{m.preventDefault();const U=ge.trim();U&&(Le(U),Xe(""))},[ge,Le]),Ze=d.productName||"Live Layer";let ye=null,ve=null;for(let m=g.length-1;m>=0;m--){const U=g[m];if(!ye&&U.role==="agent"?ye=U:!ve&&U.role==="user"&&(ve=U),ye&&ve)break}const Pe=Z?(ye==null?void 0:ye.text)||null:a||null,ut=Z&&(ve==null?void 0:ve.text)||null,$e=["ll-expanded",r?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:$e,"data-position":e,"data-state":Z?"connected":Ee?"connecting":"idle",role:"dialog","aria-label":`${o} widget`,children:[t.jsxs("div",{className:"ll-expanded__bg",children:[i?t.jsx(xr,{src:i,alt:o,className:"ll-expanded__bg-img"}):t.jsx("div",{className:"ll-expanded__bg-fallback",children:t.jsx("span",{className:"ll-expanded__bg-initial",children:((Ne=o==null?void 0:o.charAt(0))==null?void 0:Ne.toUpperCase())||"A"})}),s&&!Z&&t.jsx("video",{className:"ll-expanded__bg-idle",src:s,autoPlay:!0,loop:!0,muted:!0,playsInline:!0})]}),t.jsx("div",{ref:st,className:"ll-expanded__video"}),ct&&t.jsxs("div",{className:"ll-expanded__overlay ll-expanded__overlay--connecting",children:[t.jsx("div",{className:"ll-expanded__spinner"}),t.jsx("p",{className:"ll-expanded__overlay-text",children:f?"Switching...":"Connecting..."})]}),E&&Z&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:Ve,children:[t.jsx("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:t.jsx("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.54.12a5 5 0 0 1 0 5.76l-1.41-1.41a3 3 0 0 0 0-2.94L16.54 9.12z"})}),t.jsx("p",{className:"ll-expanded__overlay-text",children:"Tap to enable audio"})]}),it&&t.jsxs("div",{className:"ll-expanded__overlay ll-expanded__overlay--transforming",role:"status","aria-live":"polite","aria-label":qe,children:[t.jsx("div",{className:"ll-expanded__spinner"}),t.jsx("p",{className:"ll-expanded__overlay-text",children:qe})]}),Ee?t.jsxs(t.Fragment,{children:[!Q&&t.jsxs("div",{className:"ll-expanded__topbar",children:[!Ae&&t.jsxs("div",{className:"ll-expanded__topbar-left",children:[t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill",onClick:m=>{Se&&(m.stopPropagation(),p())},"aria-haspopup":Se?"listbox":void 0,"aria-expanded":Se?v:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:o}),Se&&t.jsx(ft,{})]}),Se&&v&&t.jsx("div",{className:"ll-hmenu",onClick:m=>m.stopPropagation(),role:"listbox",children:l==null?void 0:l.map(m=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${m.id===u?"is-active":""}`,onClick:()=>c(m.id),role:"option","aria-selected":m.id===u,children:[m.avatarImageUrl&&t.jsx("img",{src:m.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:m.name}),m.role&&t.jsx("span",{className:"ll-hmenu__role",children:m.role})]},m.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:m=>{m.stopPropagation(),b()},"aria-haspopup":"listbox","aria-expanded":L,"aria-label":"Language: English",title:"Language: English",children:[t.jsx("span",{className:"ll-hpill__label",children:"EN"}),t.jsx(ft,{})]}),L&&t.jsx("div",{className:"ll-hmenu",onClick:m=>m.stopPropagation(),role:"listbox",children:t.jsx("button",{type:"button",className:"ll-hmenu__item is-active",role:"option","aria-selected":!0,children:t.jsx("span",{className:"ll-hmenu__name",children:"English"})})})]}),t.jsx("span",{className:`ll-expanded__state ll-expanded__state--${w}`,children:w})]}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[pe!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn",onClick:A,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(nn,{})}),we!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:lt,"aria-label":"End call",title:"End call",children:t.jsx(tn,{})})]})]}),Q&&t.jsxs("div",{className:"ll-compact-status","data-state":w,children:[t.jsx("span",{className:"ll-compact-status__dot","aria-hidden":!0}),t.jsx("span",{className:"ll-compact-status__label",children:w})]})]}):!Q&&t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:Ze}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[pe!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:A,"aria-label":"Minimize widget",children:t.jsx(nn,{})}),we!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:lt,"aria-label":"Close widget",children:t.jsx(tn,{})})]})]}),Ye&&(()=>{const m=C?"Resume session":_==="disconnected"?"Reconnect to agent":"Start video call",U=!N;return t.jsxs(t.Fragment,{children:[U&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:Fe,"aria-label":m,children:[t.jsx("div",{className:"ll-expanded__play-circle",children:t.jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:t.jsx("polygon",{points:"6 3 20 12 6 21 6 3"})})}),Q&&t.jsx("span",{className:"ll-expanded__play-label",children:m})]}),!Q&&t.jsxs("div",{className:"ll-expanded__bottom ll-expanded__bottom--idle",children:[a&&t.jsx("div",{className:"ll-expanded__transcript",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:a})}),t.jsx("button",{type:"button",className:"ll-expanded__cta",onClick:Fe,"aria-label":m,children:m})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${Ee&&(O||D)?"is-visible":""}`,children:[t.jsx("div",{ref:ee,className:D?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:Ke,className:!D&&O?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),Ee?t.jsxs("div",{className:"ll-expanded__bottom",children:[!Q&&Pe&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--agent","data-role":"agent",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Pe})}),!Q&&ut&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--user","data-role":"user",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:ut})}),!Ae&&!Q&&t.jsxs("div",{className:"ll-toolbar",onClick:m=>m.stopPropagation(),children:[fe&&t.jsx("button",{type:"button",className:`ll-tool ${D?"is-on":""}`,onClick:je,"aria-label":D?"Stop sharing screen":"Share screen",title:D?"Stop sharing":"Share screen",children:t.jsx(Cn,{})}),ie&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${O?"is-on":""}`,onClick:ke,"aria-label":O?"Turn off camera":"Turn on camera",title:O?"Stop camera":"Start camera",children:t.jsx(Ln,{})}),t.jsx("button",{ref:me,type:"button",className:`ll-tool ll-tool--right ${O?"is-on":""}`,onClick:m=>{m.stopPropagation(),Y(U=>!U),se(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":he,children:t.jsx(ft,{})}),he&&T.length>0&&t.jsx(rn,{label:"Camera",devices:T,activeId:W,anchorRef:me,onPick:m=>{Y(!1),Ie(m)}})]}),t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${k?"is-muted":""}`,onClick:_e,"aria-label":k?"Unmute microphone":"Mute microphone",title:k?"Unmute":"Mute",children:t.jsx(Sn,{muted:k})}),t.jsx("button",{ref:ae,type:"button",className:`ll-tool ll-tool--right ${k?"is-muted":""}`,onClick:m=>{m.stopPropagation(),se(U=>!U),Y(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":te,children:t.jsx(ft,{})}),te&&$.length>0&&t.jsx(rn,{label:"Microphone",devices:$,activeId:z,anchorRef:ae,onPick:m=>{se(!1),Me(m)}})]}),t.jsx("button",{type:"button",className:`ll-tool ${oe?"is-muted":""}`,onClick:Ce,"aria-label":oe?"Unmute speaker":"Mute speaker",title:oe?"Unmute speaker":"Mute speaker",children:t.jsx(En,{muted:oe})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:Ue,"aria-label":"End conversation",title:"End conversation",children:t.jsx(Rn,{})})]}),!Ae&&Q&&t.jsx(_r,{isMuted:k,onToggleMute:_e,isCameraEnabled:O,onToggleCamera:ke,allowCamera:ie,isScreenShareEnabled:D,onToggleScreenShare:je,allowScreenShare:fe,isSpeakerMuted:oe,onToggleSpeaker:Ce,allowTyping:ce,isTypingOpen:De,onToggleTyping:Je,onDisconnect:Ue}),!Ae&&ce&&(Q?De:!0)&&t.jsxs("form",{className:"ll-message-input",onSubmit:Qe,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:ge,onChange:m=>Xe(m.target.value),"aria-label":"Message the agent"}),ge.trim()&&t.jsx("button",{type:"submit",className:"ll-message-input__send","aria-label":"Send message",children:t.jsx(Lr,{})})]})]}):null,(()=>{if(S&&_!=="error")return t.jsxs("div",{className:"ll-expanded__banner",role:"alert",children:[t.jsx("span",{children:S}),t.jsx("button",{type:"button",className:"ll-expanded__banner-x",onClick:vt,"aria-label":"Dismiss",children:"×"})]});if(!N||_!=="error")return null;let m="Failed to connect",U="Try again";return N==="MIC_PERMISSION_DENIED"?m="Microphone blocked. Allow access to talk.":N==="MIC_NOT_FOUND"?m="No microphone found. Plug one in + retry.":N==="MIC_UNAVAILABLE"?m="Mic unavailable. Check other apps using it.":N==="AGENT_TIMEOUT"?m="Agent didn't pick up. Try again.":N==="CONNECT_FAILED"?m="Connection failed. Check your network.":N.length<80&&(m=N),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:m}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:at,children:U})]})})()]})};function ft(){return t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round","aria-hidden":!0,children:t.jsx("polyline",{points:"6 9 12 15 18 9"})})}function tn(){return t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function nn(){return t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round","aria-hidden":!0,children:t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})})}function Cn(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2"}),t.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),t.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]})}function Ln(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("path",{d:"M23 7l-7 5 7 5V7z"}),t.jsx("rect",{x:"1",y:"5",width:"15",height:"14",rx:"2"})]})}function Sn({muted:e}){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("path",{d:"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"}),t.jsx("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}),t.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"23"}),e&&t.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]})}function En({muted:e}){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5"}),e?t.jsx("line",{x1:"23",y1:"9",x2:"17",y2:"15"}):t.jsxs(t.Fragment,{children:[t.jsx("path",{d:"M19.07 4.93a10 10 0 0 1 0 14.14"}),t.jsx("path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07"})]})]})}function Lr(){return t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),t.jsx("polyline",{points:"12 5 19 12 12 19"})]})}function Rn(){return t.jsx("svg",{width:"16",height:"16",viewBox:"-4 -4 32 32",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:t.jsx("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.93.37 1.84.71 2.7a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.38-1.38a2 2 0 0 1 2.11-.45c.86.34 1.77.58 2.7.71A2 2 0 0 1 22 16.92z",transform:"rotate(135 12 12)"})})}const rn=({label:e,devices:r,activeId:o,onPick:i,anchorRef:s})=>{const[a,d]=n.useState(null);return n.useLayoutEffect(()=>{const l=()=>{const u=s.current;if(!u)return;const f=u.getBoundingClientRect(),v=126,p=window.innerWidth-16-110,c=f.left+f.width/2;d({top:f.top-8,left:Math.max(v,Math.min(p,c))})};return l(),window.addEventListener("scroll",l,!0),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l,!0),window.removeEventListener("resize",l)}},[s]),a===null||typeof document>"u"?null:Lt.createPortal(t.jsxs("div",{className:"ll-device-menu ll-device-menu--floating",onClick:l=>l.stopPropagation(),role:"listbox",style:{position:"fixed",top:a.top,left:a.left,transform:"translate(-50%, -100%)"},children:[t.jsx("p",{className:"ll-device-menu__label",children:e}),r.map((l,u)=>{const f=o===l.deviceId;return t.jsxs("button",{type:"button",className:`ll-device-menu__item ${f?"is-active":""}`,onClick:()=>i(l.deviceId),role:"option","aria-selected":f,children:[f&&t.jsx("span",{className:"ll-device-menu__dot",children:"●"}),t.jsx("span",{className:"ll-device-menu__name",children:l.label||`${e} ${u+1}`})]},l.deviceId||u)})]}),document.body)},Sr=['[data-ll-private="true"]',".ll-widget"];function St(e){let r=e;for(;r;){for(const o of Sr)if(r.matches(o))return!0;r=r.parentElement}return!1}function yt(e){if(St(e))return!1;if(e instanceof HTMLInputElement){if(e.type==="password")return!1;const r=(e.getAttribute("autocomplete")||"").toLowerCase();if(r==="off"||r.startsWith("cc-"))return!1}return!0}const pt=4096,Er=20,Rr=20,Nr=10,Ar=10,Mr=30,Ir=20,on=500,Tr=['[data-ll-private="true"]',".ll-widget","script","style","noscript","iframe"];function rt(e){if(e.getAttribute("aria-hidden")==="true"||e.hasAttribute("hidden"))return!0;let r=e;for(;r;){for(const o of Tr)if(r.matches(o))return!0;r=r.parentElement}return!1}function ot(e){if(typeof window>"u")return!0;const r=e.getBoundingClientRect();if(r.width<=0||r.height<=0)return!1;const o=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return r.bottom>0&&r.right>0&&r.top<o&&r.left<i}function sn(e){const r=e.getAttribute("id");if(r){const a=document.querySelector(`label[for="${CSS.escape(r)}"]`);if(a!=null&&a.textContent)return a.textContent.trim()}const o=e.getAttribute("aria-label");if(o)return o.trim();const i=e.getAttribute("placeholder");if(i)return i.trim();const s=e.closest("label");return s!=null&&s.textContent?s.textContent.trim():""}function de(e,r){return e.length<=r?e:e.slice(0,r-1)+"…"}function He(e){return e.length}function Nn(e,r={}){const o=r.doc??(typeof document<"u"?document:null);if(!o)return{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:e};const i=typeof window<"u"&&window.location.href||"",s=typeof window<"u"&&window.location.pathname||"/",a=o.title||"",d=Array.from(o.querySelectorAll("[data-ll-region]")),l=[];for(const k of d){if(l.length>=Nr)break;if(rt(k)||!ot(k))continue;const S=k.getAttribute("data-ll-region")??"",$=k.getAttribute("data-ll-intent")??void 0,z=de((k.innerText||k.textContent||"").trim(),on*2);!S||!z||l.push({id:S,intent:$,text:z})}const u=[],f=["H1","H2","H3","H4","H5","H6"],v=Array.from(o.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const k of v){if(rt(k)||!ot(k))continue;const S=(k.textContent||"").trim();S&&u.push(`${k.tagName}: ${de(S,200)}`)}const p=Array.from(o.querySelectorAll("p, li"));for(const k of p){if(rt(k)||!ot(k)||f.includes(k.tagName))continue;const S=(k.textContent||"").trim();S.length>10&&u.push(de(S,on))}const c=u.join(`
2
- `),L=[],b=Array.from(o.querySelectorAll("a[href]"));for(const k of b){if(L.length>=Er)break;if(rt(k)||!ot(k))continue;const S=k.getAttribute("href")||"",$=(k.textContent||"").trim();!S||!$||L.push({href:S,text:de($,100)})}const _=[],w=Array.from(o.querySelectorAll("input, textarea, select"));for(const k of w){if(_.length>=Rr)break;if(rt(k)||!yt(k)||!ot(k))continue;const S=sn(k),$=k instanceof HTMLInputElement?k.type:k.tagName.toLowerCase();S&&_.push({label:de(S,100),type:$})}const g=Array.from(o.querySelectorAll("[data-ll-form]")),C=[];for(const k of g){if(C.length>=Ar)break;if(St(k))continue;const S=k.getAttribute("data-ll-form")||"";if(!S)continue;const $=k.getAttribute("data-ll-intent")||void 0,z=Array.from(k.querySelectorAll("[data-ll-field]")),O=[];for(const H of z){if(O.length>=Mr)break;if(!yt(H))continue;const T=H.getAttribute("data-ll-field")||"";if(!T)continue;const W=sn(H)||T,D=H instanceof HTMLInputElement?H.type:H.tagName.toLowerCase(),F={name:T,label:de(W,100),type:D};if(H.required===!0&&(F.required=!0),H instanceof HTMLSelectElement){const ie=[];for(let fe=0;fe<H.options.length&&!(ie.length>=Ir);fe++){const ce=H.options[fe];if(!ce||ce.disabled)continue;const pe=ce.value||"",we=(ce.textContent||"").trim()||pe;!pe&&!we||ie.push({value:pe,label:de(we,60)})}ie.length>0&&(F.options=ie)}const oe=typeof H.validationMessage=="string"?H.validationMessage:"";oe&&(F.validationMessage=de(oe,200)),O.push(F)}C.push({id:S,intent:$,fields:O})}const E={url:i,title:a,pathname:s,regions:l,visibleText:c,visibleLinks:L,visibleFields:_,forms:C,extras:e};let N=He(JSON.stringify(E.regions))+He(E.visibleText)+He(JSON.stringify(E.visibleLinks))+He(JSON.stringify(E.visibleFields));for(;N>pt&&E.visibleFields.length>0;)E.visibleFields.pop(),N=He(JSON.stringify(E.visibleFields));for(;N>pt&&E.visibleLinks.length>0;)E.visibleLinks.pop(),N-=80;return He(E.visibleText)>pt&&(E.visibleText=de(E.visibleText,pt-100)),E}let We=null;function Ct(e,r={}){const o=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(We&&We.key===s&&o-We.at<1e3)return We.ctx;const a=Nn(e,r);return We={key:s,at:o,ctx:a},a}function An(){We=null}const Dr=200;function Mn(e){const r=String(e.href||"");return{href:r,text:String(e.text??e.title??r),internal:e.internal??!0,title:e.title,description:e.description}}function Pr(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function In(e){const r=e??(typeof document<"u"?document:null);if(!r)return[];const o=typeof window<"u"&&window.location.origin||"",i=new Set,s=[],a=Array.from(r.querySelectorAll("a[href]"));for(const d of a){if(s.length>=Dr)break;if(St(d))continue;const l=d.getAttribute("href")||"";if(!Pr(l))continue;let u=l,f=!0;try{if(typeof window<"u"){const p=new URL(l,o);f=p.origin===o,f&&l.startsWith("http")&&(u=p.pathname+p.search+p.hash)}}catch{continue}if(i.has(u))continue;i.add(u);const v=(d.textContent||"").trim().slice(0,120);s.push({href:u,text:v,internal:f})}return s}let Be=null;const $r=5e3;function ht(){const e=Date.now(),r=typeof window<"u"&&window.location.pathname||"/";if(Be&&Be.pathname===r&&e-Be.at<$r)return Be.routes;const o=In();return Be={at:e,pathname:r,routes:o},o}function Tn(){Be=null}function zr(e,r){const o=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLSelectElement.prototype,i=Object.getOwnPropertyDescriptor(o,"value"),s=i==null?void 0:i.set;s?s.call(e,r):e.value=r}function Or(e,r,o={}){const i=o.triggerInput??!0,s=o.triggerChange??!0;if(e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")){const a=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"checked"),d=a==null?void 0:a.set,l=r==="true"||r==="1"||r==="on";d?d.call(e,l):e.checked=l,i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}));return}zr(e,r),i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function Hr(){if(typeof window>"u"||typeof document>"u")return!1;const e=document.scrollingElement||document.documentElement;if(!e||e.scrollHeight<=e.clientHeight+2)return!1;const r=window.getComputedStyle(e);return!(r.overflowY==="hidden"||r.overflowY==="clip")}function Wr(e){if(!(e instanceof HTMLElement))return!1;const o=window.getComputedStyle(e).overflowY;return!(o!=="auto"&&o!=="scroll"||e.scrollHeight<=e.clientHeight+2)}function Br(){if(typeof document>"u")return null;const e=Array.from(document.querySelectorAll("body, body *"));let r=null,o=0;for(const i of e){if(!Wr(i))continue;const s=i.getBoundingClientRect();if(s.bottom<=0||s.top>=window.innerHeight||s.right<=0||s.left>=window.innerWidth||s.width<=0||s.height<=0||i.closest(".ll-widget"))continue;const a=s.width*s.height;a>o&&(o=a,r=i)}return r}function qr(){if(typeof window>"u")return null;if(Hr())return window;const e=Br();return e||window}function an(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function Fr(e){var r,o;return e instanceof Window?typeof document>"u"?0:Math.max(((r=document.body)==null?void 0:r.scrollHeight)??0,((o=document.documentElement)==null?void 0:o.scrollHeight)??0):e.scrollHeight-e.clientHeight}const Ur=new Set(["agent_state","avatar_stream_ready","avatar_active","avatar_idle","bot_ready","agent_error","idle_warning","idle_timeout","navigate","scroll_to","request_page_context","scroll_page","click","fill_form","focus_field","submit_form","request_routes"]),Dn=n.forwardRef(function(r,o){var zt,Ot,Ht,Wt,Bt,qt,Ft;const{agentId:i,apiKey:s,baseUrl:a="https://app.livelayer.studio",sessionEndpoint:d,sessionBody:l,soundEffects:u,experienceMode:f="WIDGET",autoConnect:v=!1,displayMode:p,defaultDisplayMode:c="expanded",onDisplayModeChange:L,position:b="bottom-right",mobileBreakpoint:_=640,persistKey:w="ll-widget",disablePersistence:g=!1,teamMembers:C,currentTeamMemberId:E,onTeamMemberChange:N,idleLoopUrl:k,greeting:S,avatarImageUrl:$,agentName:z,branding:O={},allowCamera:H=!0,allowScreenShare:T=!0,allowTyping:W=!0,showMinimize:D=!0,showClose:F=!0,chromeless:oe=!1,floatingChromeContainer:ie=null,compactControls:fe=!1,transforming:ce=!1,transformingLabel:pe="Transforming…",showOn:we,hideOn:Ae,pathname:Q,onNavigate:it,onScrollToSelector:qe,getPageContext:st,pageContextExtras:ne,getRoutes:Fe,onScrollPage:Ue,onClick:at,capabilities:Ve,onConnect:_e,onDisconnect:Me,onTranscript:ke,onAgentState:Ie,onConnectionStateChange:je,onAgentEvent:Ce,onAgentCommand:Le,controlledSession:A,className:lt,style:vt,zIndex:Se=2147483647}=r,Ee=bn(Q),Z=kn(Ee,we,Ae);n.useEffect(()=>{An(),Tn()},[Ee]);const Ye=E!==void 0,[Ge,Te]=n.useState(()=>{var y;return E??((y=C==null?void 0:C[0])==null?void 0:y.id)}),Re=Ye?E:Ge,J=n.useMemo(()=>(C==null?void 0:C.find(y=>y.id===Re))??null,[C,Re]),ct=(J==null?void 0:J.agentId)??i,Ke=f==="EMBEDDED",[ee,te]=vn({value:p,defaultValue:c,onChange:L,persistKey:w,disablePersistence:Ke||g}),se=xn(_),he=dn(),Y=fn(),ae=pn(),me=hn(),De=mn(),[xt,Je]=n.useState(!1),[ge,Xe]=n.useState(!1),[Qe,Ze]=n.useState(!1),[ye,ve]=n.useState(!1),[Pe,ut]=n.useState(!1),$e=ur({baseUrl:a,config:u}),Ne=n.useRef($e);Ne.current=$e;const m=n.useRef(it),U=n.useRef(qe),bt=n.useRef(Ue),wt=n.useRef(at),Et=n.useRef(st),Rt=n.useRef(ne),Nt=n.useRef(Fe),_t=n.useRef(Ve),le=n.useRef(null);m.current=it,U.current=qe,bt.current=Ue,wt.current=at,Et.current=st,Rt.current=ne,Nt.current=Fe,_t.current=Ve;function xe(y){const h=_t.current;return h?h.includes(y):!0}function be(y,h){console.warn(`[LiveLayer] Agent command "${y}" blocked — capability "${h}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const et=n.useCallback(y=>{var V,re,ue,nt;const h=y;if(!(!h.type||typeof h.type!="string")){if(Ce==null||Ce({eventName:h.type,data:y}),h.type==="navigate"){if(!xe("navigate")){be("navigate","navigate");return}const j=typeof h.href=="string"?h.href:null;if(!j){console.warn(`[LiveLayer] Agent emitted "navigate" without href. Skipping. Check your agent's tool schema. See https://livelayer.studio/docs/errors/navigate-missing-href`);return}if(Ne.current.playPageChange(),m.current){try{m.current(j)}catch(R){console.warn(`[LiveLayer] onNavigate threw for "${j}". Falling back. Error:`,R)}return}if(typeof document<"u"){const R=document.querySelector(`a[href="${j.replace(/"/g,'\\"')}"]`);if(R){R.click();return}}if(typeof window<"u"&&typeof history<"u")try{history.pushState({},"",j),window.dispatchEvent(new PopStateEvent("popstate"))}catch(R){console.warn(`[LiveLayer] history.pushState fallback failed for "${j}". Pass an onNavigate prop to use your router directly. See https://livelayer.studio/docs/react/navigation`,R)}return}if(h.type==="scroll_to"){if(!xe("scroll")){be("scroll_to","scroll");return}const j=typeof h.selector=="string"?h.selector:null;if(!j)return;const R=h.behavior==="instant"?"instant":"smooth";if(U.current){try{U.current(j,R)}catch(P){console.warn("[LiveLayer] onScrollToSelector threw.",P)}return}if(typeof document<"u"){let P=null;try{P=document.querySelector(j)}catch{console.warn(`[LiveLayer] scroll_to: invalid selector "${j}".`);return}if(!P){console.warn(`[LiveLayer] scroll_to: no element matched "${j}". The user may be on a different page. See https://livelayer.studio/docs/errors/scroll-no-match`);return}P.scrollIntoView({behavior:R,block:"start"})}return}if(h.type==="request_page_context"){if(!xe("read_page")){be("request_page_context","read_page");return}const j=typeof h.requestId=="string"?h.requestId:void 0,R=(V=le.current)==null?void 0:V.call(le),P=q=>{const M=R,K=M==null?void 0:M.localParticipant;if(K!=null&&K.publishData)try{const X=j?{...q,requestId:j}:q,Oe=new TextEncoder().encode(JSON.stringify(X));K.publishData(Oe,{reliable:!0})}catch(X){console.warn("[LiveLayer] publishData failed.",X)}},I=Rt.current,B=Et.current;try{if(B){const q=B(I);if(q instanceof Promise){P({type:"page_context_pending"}),q.then(M=>P({type:"page_context",context:M})).catch(M=>{console.warn("[LiveLayer] getPageContext rejected; falling back to default walker.",M),P({type:"page_context",context:Ct(I)})});return}P({type:"page_context",context:q});return}P({type:"page_context",context:Ct(I)})}catch(q){console.warn("[LiveLayer] page-context extraction threw. Sending empty context.",q),P({type:"page_context",context:{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:I}})}return}if(h.type==="scroll_page"){if(!xe("scroll")){be("scroll_page","scroll");return}const j=h.direction;if(j!=="up"&&j!=="down"&&j!=="top"&&j!=="bottom"){console.warn(`[LiveLayer] scroll_page: invalid direction "${String(j)}". Expected up | down | top | bottom.`);return}const R=h.behavior==="instant"?"instant":"smooth";if(bt.current){try{bt.current(j,R)}catch(M){console.warn("[LiveLayer] onScrollPage threw.",M)}return}if(typeof window>"u")return;const P={behavior:R},I=qr(),B=M=>{I instanceof Window?I.scrollBy({top:M,...P}):I.scrollBy({top:M,...P})},q=M=>{I instanceof Window?I.scrollTo({top:M,...P}):I.scrollTo({top:M,...P})};j==="up"?B(-an(I)):j==="down"?B(an(I)):q(j==="top"?0:Fr(I));return}if(h.type==="click"){if(!xe("click")){be("click","click");return}const j=typeof h.selector=="string"?h.selector:null;if(!j){console.warn("[LiveLayer] click: missing selector.");return}if(wt.current){try{wt.current(j)}catch(P){console.warn("[LiveLayer] onClick threw.",P)}return}if(typeof document>"u")return;let R=null;try{R=document.querySelector(j)}catch{console.warn(`[LiveLayer] click: invalid selector "${j}".`);return}if(!R){console.warn(`[LiveLayer] click: no element matched "${j}". See https://livelayer.studio/docs/errors/click-no-match`);return}if(R.closest('[data-ll-private="true"], .ll-widget')){console.warn("[LiveLayer] click: refusing to click element inside a private subtree.");return}(re=R.click)==null||re.call(R);return}if(h.type==="fill_form"||h.type==="focus_field"){if(!xe("fill_forms")){be(h.type,"fill_forms");return}if(typeof document>"u")return;h.type==="fill_form"&&Ne.current.playConfirmation();const j=typeof h.formId=="string"?h.formId:null;if(!j){console.warn(`[LiveLayer] ${h.type}: missing formId.`);return}const R=document.querySelector(`[data-ll-form="${j.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] ${h.type}: no form with data-ll-form="${j}". Tag your form with <LiveLayerForm id> or data-ll-form. See https://livelayer.studio/docs/react/forms`);return}if(R.closest('[data-ll-private="true"], .ll-widget')){console.warn(`[LiveLayer] ${h.type}: refusing to touch a form in a private subtree.`);return}if(h.type==="focus_field"){const I=typeof h.fieldName=="string"?h.fieldName:null;if(!I){console.warn("[LiveLayer] focus_field: missing fieldName.");return}const B=R.querySelector(`[data-ll-field="${I.replace(/"/g,'\\"')}"]`);if(!B){console.warn(`[LiveLayer] focus_field: no field "${I}" in form "${j}".`);return}if(!yt(B)){console.warn(`[LiveLayer] focus_field: field "${I}" is privacy-protected and not focusable.`);return}B.focus();return}const P=h.values&&typeof h.values=="object"?h.values:null;if(!P){console.warn("[LiveLayer] fill_form: missing or invalid values.");return}for(const[I,B]of Object.entries(P)){if(typeof B!="string")continue;const q=R.querySelector(`[data-ll-field="${I.replace(/"/g,'\\"')}"]`);if(!q){console.warn(`[LiveLayer] fill_form: no field "${I}" in form "${j}". Skipping.`);continue}if(!yt(q)){console.warn(`[LiveLayer] fill_form: field "${I}" is privacy-protected (password / cc-* / private). Skipping.`);continue}try{Or(q,B)}catch(M){console.warn(`[LiveLayer] fill_form: failed to set "${I}".`,M)}}return}if(h.type==="submit_form"){if(!xe("submit_forms")){be("submit_form","submit_forms");return}if(typeof document>"u")return;const j=typeof h.formId=="string"?h.formId:null;if(!j){console.warn("[LiveLayer] submit_form: missing formId.");return}Ne.current.playConfirmation();const R=document.querySelector(`[data-ll-form="${j.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] submit_form: no form with data-ll-form="${j}".`);return}if(R.closest('[data-ll-private="true"], .ll-widget')){console.warn("[LiveLayer] submit_form: refusing to submit a form in a private subtree.");return}const P=typeof h.requestId=="string"?h.requestId:void 0,I=(ue=le.current)==null?void 0:ue.call(le),B=K=>{const X=I,Oe=X==null?void 0:X.localParticipant;if(Oe!=null&&Oe.publishData)try{const Kn=P?{...K,requestId:P}:K,Jn=new TextEncoder().encode(JSON.stringify(Kn));Oe.publishData(Jn,{reliable:!0})}catch{}};let q=!1;const M=()=>{q=!0,B({type:"form_submitted",formId:j})};R.addEventListener("submit",M,{once:!0});try{typeof R.requestSubmit=="function"?R.requestSubmit():R.submit()}catch(K){console.warn("[LiveLayer] submit_form: requestSubmit threw.",K),R.removeEventListener("submit",M),B({type:"form_submit_blocked",formId:j,reason:"exception"});return}setTimeout(()=>{q||(R.removeEventListener("submit",M),B({type:"form_submit_blocked",formId:j,reason:"validation"}))},500);return}if(h.type==="request_routes"){if(!xe("read_page")){be("request_routes","read_page");return}const j=typeof h.requestId=="string"?h.requestId:void 0,P=(nt=le.current)==null?void 0:nt.call(le),I=P==null?void 0:P.localParticipant;if(!(I!=null&&I.publishData))return;const B=M=>{try{const K=j?{type:"routes",routes:M,requestId:j}:{type:"routes",routes:M},X=new TextEncoder().encode(JSON.stringify(K));I.publishData(X,{reliable:!0})}catch(K){console.warn("[LiveLayer] request_routes: publishData failed.",K)}},q=Nt.current;if(q){try{const M=q(),K=X=>{if(!Array.isArray(X)){B([]);return}B(X.map(Mn).slice(0,200))};M instanceof Promise?M.then(K).catch(X=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",X),B(ht())}):K(M)}catch(M){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",M),B(ht())}return}try{B(ht())}catch(M){console.warn("[LiveLayer] request_routes: extractRoutes threw.",M)}return}Ur.has(h.type)||Le==null||Le(h)}},[Le,Ce]),G=un({agentId:A?"__controlled__":ct,baseUrl:a,apiKey:s,sessionEndpoint:d,sessionBody:l,onDataMessage:A?void 0:et});n.useEffect(()=>{if(A!=null&&A.subscribeToDataMessages)return A.subscribeToDataMessages(et)},[A,et]),le.current=()=>{var y;return(y=G.getRoom)==null?void 0:y.call(G)},n.useEffect(()=>{var V;if(typeof window>"u")return;const y=((V=window.location)==null?void 0:V.hostname)||"";if(y==="localhost"||y==="127.0.0.1"||y==="0.0.0.0"||y.endsWith(".local")||y.endsWith(".test"))return window.__livelayerSimulateCommand=re=>{try{et(re)}catch(ue){console.warn("[LiveLayer] simulate-command threw:",ue)}},()=>{delete window.__livelayerSimulateCommand}},[et]);const x=n.useMemo(()=>A?{connectionState:A.connectionState,agentState:A.agentState,transcript:A.transcript,videoElement:A.videoElement,audioElement:A.audioElement,canResume:A.canResume,error:A.error,agentConfig:null,connect:async()=>{await A.onConnect()},disconnect:()=>A.onDisconnect(),getRoom:G.getRoom,isControlled:!0}:{connectionState:G.connectionState,agentState:G.agentState,transcript:G.transcript,videoElement:G.videoElement,audioElement:G.audioElement,canResume:G.canResume,error:G.error,agentConfig:G.agentConfig,connect:G.connect,disconnect:G.disconnect,getRoom:G.getRoom,isControlled:!1},[A,G]),At=n.useRef(x);At.current=x;const Mt=n.useRef(A);Mt.current=A,n.useImperativeHandle(o,()=>({sendData:async y=>{var ue,nt;const h=Mt.current;if(h!=null&&h.publishData){try{await h.publishData(y)}catch(j){console.warn("[AvatarWidget] sendData (controlled) failed:",j)}return}const V=(nt=(ue=At.current)==null?void 0:ue.getRoom)==null?void 0:nt.call(ue),re=V==null?void 0:V.localParticipant;if(re!=null&&re.publishData)try{const j=new TextEncoder().encode(JSON.stringify(y));await re.publishData(j,{reliable:!0})}catch(j){console.warn("[AvatarWidget] sendData failed:",j)}}}),[]);const It=n.useRef(null);n.useEffect(()=>{const y=x.videoElement,h=It.current;if(!(!y||!h))return h.appendChild(y),()=>{y.parentNode===h&&h.removeChild(y)}},[x.videoElement]),n.useEffect(()=>{const y=x.audioElement;if(!y)return;he.attach(y);const h=y.play();return h&&typeof h.catch=="function"&&h.catch(V=>{(V==null?void 0:V.name)==="NotAllowedError"&&Je(!0)}),()=>{he.detach()}},[x.audioElement]),n.useEffect(()=>{if(x.isControlled||x.connectionState!=="connected")return;const y=x.getRoom();if(y)return Y.setupMic(y).catch(()=>{}),()=>{Y.teardownMic()}},[x.isControlled,x.connectionState]),n.useEffect(()=>{var h;if(x.connectionState!=="connected")return;const y=x.isControlled?(h=A==null?void 0:A.getRoom)==null?void 0:h.call(A):x.getRoom();if(y)return ae.attachRoom(y),me.attachRoom(y),x.isControlled&&Y.attachRoom(y),De.refresh(),()=>{ae.teardown(),me.teardown()}},[x.isControlled,x.connectionState,A]),n.useEffect(()=>{const y=x.audioElement;y&&(y.muted=Pe)},[x.audioElement,Pe]);const $n=n.useCallback(y=>{const h={type:"user_message",text:y};if(A!=null&&A.publishData){try{A.publishData(h)}catch{}return}const V=x.getRoom();if(V)try{const re=new TextEncoder().encode(JSON.stringify(h));V.localParticipant.publishData(re,{reliable:!0})}catch{}},[x,A]),zn=n.useCallback(()=>{ut(y=>!y)},[]);n.useEffect(()=>{je==null||je(x.connectionState),x.connectionState==="connected"?_e==null||_e():x.connectionState==="disconnected"&&(Me==null||Me())},[x.connectionState,_e,Me,je]),n.useEffect(()=>{ke==null||ke(x.transcript)},[x.transcript,ke]),n.useEffect(()=>{Ie==null||Ie(x.agentState)},[x.agentState,Ie]),n.useEffect(()=>{$e.setThinking(x.agentState==="thinking")},[x.agentState,$e]);const Tt=n.useRef(!1);n.useEffect(()=>{x.isControlled||!v||Tt.current||Z&&x.connectionState==="idle"&&(Tt.current=!0,x.connect())},[v,x.connectionState,x,Z]);const On=n.useCallback(y=>{const h=C==null?void 0:C.find(V=>V.id===y);h&&(Ze(!1),y!==Re&&(Xe(!0),x.disconnect(),Ye||Te(y),N==null||N(h)))},[C,Re,x,Ye,N]);n.useEffect(()=>{ge&&x.connectionState==="connected"&&Xe(!1)},[x.connectionState,ge]),n.useEffect(()=>{if(!Qe)return;const y=h=>{h.key==="Escape"&&Ze(!1)};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[Qe]);const Hn=!!$||!!(J!=null&&J.avatarImageUrl)||x.isControlled,tt=gn(ct,a,Hn);Ve===void 0&&((zt=tt.info)!=null&&zt.capabilities)&&(_t.current=tt.info.capabilities);const dt=(J==null?void 0:J.name)??z??((Ot=x.agentConfig)==null?void 0:Ot.name)??((Ht=tt.info)==null?void 0:Ht.name)??"Live Layer",kt=(J==null?void 0:J.avatarImageUrl)??$??((Wt=x.agentConfig)==null?void 0:Wt.avatarImageUrl)??((Bt=tt.info)==null?void 0:Bt.avatarImageUrl)??null,Wn=k??((qt=x.agentConfig)==null?void 0:qt.idleLoopUrl)??((Ft=tt.info)==null?void 0:Ft.idleLoopUrl)??null,Bn=S??null,qn=n.useCallback(()=>te("expanded"),[te]),Fn=n.useCallback(()=>te("minimized"),[te]),Dt=n.useCallback(()=>{x.disconnect(),te("hidden")},[x,te]),Un=n.useCallback(()=>{const y=x.audioElement;y&&y.play().then(()=>Je(!1)).catch(()=>{})},[x.audioElement]),Vn=n.useCallback(()=>{Je(!1),x.connect()},[x]),ze={...vt,...Ke?{}:{zIndex:Se}};O.primaryColor&&(ze["--ll-color-primary"]=O.primaryColor),O.accentColor&&(ze["--ll-color-accent"]=O.accentColor),O.backgroundColor&&(ze["--ll-color-bg"]=O.backgroundColor),O.textColor&&(ze["--ll-color-fg"]=O.textColor);const Yn=["ll-widget",`ll-widget--${ee}`,`ll-widget--${se?"mobile":"desktop"}`,lt].filter(Boolean).join(" ");if(!Z)return null;const Gn=t.jsx("div",{className:Yn,style:ze,"data-display-mode":ee,"data-position":b,"data-experience-mode":f==="EMBEDDED"?"embedded":"widget",children:ee==="expanded"&&t.jsx(Cr,{position:b,isMobile:se,agentName:dt,avatarImageUrl:kt,idleLoopUrl:Wn,greeting:Bn,branding:O,teamMembers:C,currentTeamMemberId:Re,isSwitchingTeamMember:ge,teamSwitcherOpen:Qe,onToggleTeamSwitcher:()=>Ze(y=>!y),onSelectTeamMember:On,connectionState:x.connectionState,agentState:x.agentState,transcript:x.transcript,isMuted:Y.isMuted,micDevices:De.mics,activeMicId:Y.activeDeviceId,isCameraEnabled:ae.isEnabled,cameraPreviewEl:ae.previewEl,cameraDevices:De.cameras,activeCameraId:ae.activeDeviceId,isScreenShareEnabled:me.isEnabled,screenPreviewEl:me.previewEl,isSpeakerMuted:Pe,allowCamera:H,allowScreenShare:T,allowTyping:W,showMinimize:D,showClose:F,chromeless:oe,compactControls:fe,transforming:ce,transformingLabel:pe,languageMenuOpen:ye,onToggleLanguageMenu:()=>ve(y=>!y),needsUserGesture:xt,canResume:x.canResume,micError:Y.micError,error:x.error,avatarVideoContainerRef:It,agentVideoEl:x.videoElement,onConnect:()=>void x.connect(),onDisconnect:()=>x.disconnect(),onRetry:Vn,onResumeAudio:Un,onToggleMute:Y.toggleMute,onSwitchMicDevice:y=>void Y.switchDevice(y),onToggleCamera:()=>void ae.toggle(),onSwitchCameraDevice:y=>void ae.switchDevice(y),onToggleScreenShare:()=>void me.toggle(),onToggleSpeaker:zn,onSendMessage:$n,onMinimize:Fn,onClose:Dt,onClearMicError:Y.clearError})}),Pt=ee==="hidden"||ee==="minimized"?t.jsxs("div",{className:["ll-widget","ll-widget--floating",`ll-widget--${ee}`,`ll-widget--${se?"mobile":"desktop"}`].join(" "),style:ze,"data-display-mode":ee,"data-position":b,children:[ee==="hidden"&&t.jsx(gr,{position:b,isMobile:se,isSpeaking:x.agentState==="speaking",onExpand:()=>te("expanded"),label:`Open ${dt} widget`,avatarImageUrl:kt,agentName:dt,containerEl:ie}),ee==="minimized"&&t.jsx(vr,{position:b,isMobile:se,agentName:dt,avatarImageUrl:kt,agentState:x.agentState,isMuted:Y.isMuted,audioLevel:he,onExpand:qn,onToggleMute:Y.toggleMute,onClose:Dt})]}):null,$t=ie??(typeof document<"u"?document.body:null);return t.jsxs(t.Fragment,{children:[Gn,Pt&&$t&&Lt.createPortal(Pt,$t)]})});Dn.displayName="AvatarWidgetInner";const Pn=n.forwardRef(function(r,o){return t.jsx(cn,{children:t.jsx(Dn,{...r,ref:o})})});Pn.displayName="AvatarWidget";const Vr=({agentId:e,baseUrl:r,apiKey:o,mode:i,onAgentEvent:s,className:a,style:d})=>{const l=n.useRef(null),u=n.useRef(null),f=n.useRef(s);f.current=s;const v=n.useCallback(p=>{var L;const c=p.detail;(L=f.current)==null||L.call(f,c)},[]);return n.useEffect(()=>{const p=l.current;if(!p)return;const c=document.createElement("livelayer-widget");return c.setAttribute("agent-id",e),r&&c.setAttribute("base-url",r),o&&c.setAttribute("api-key",o),i&&c.setAttribute("mode",i),c.addEventListener("agent-event",v),p.appendChild(c),u.current=c,()=>{c.removeEventListener("agent-event",v),p.removeChild(c),u.current=null}},[e]),n.useEffect(()=>{u.current&&(i?u.current.setAttribute("mode",i):u.current.removeAttribute("mode"))},[i]),t.jsx("div",{ref:l,className:a,style:d})},Yr=n.forwardRef(function({id:r,intent:o,as:i="div",className:s,style:a,children:d},l){return n.createElement(i,{ref:l,"data-ll-region":r,"data-ll-intent":o,className:s,style:a},d)}),Gr=n.forwardRef(function({id:r,intent:o,children:i,...s},a){return t.jsx("form",{ref:a,"data-ll-form":r,"data-ll-intent":o,...s,children:i})}),Kr=n.forwardRef(function(r,o){const{name:i,label:s,labelClassName:a}=r,d={name:i,"data-ll-field":i};let l;if("as"in r&&r.as==="textarea"){const{name:u,label:f,labelClassName:v,as:p,...c}=r;l=t.jsx("textarea",{ref:o,...d,...c})}else if("as"in r&&r.as==="select"){const{name:u,label:f,labelClassName:v,as:p,children:c,...L}=r;l=t.jsx("select",{ref:o,...d,...L,children:c})}else{const{name:u,label:f,labelClassName:v,as:p,...c}=r;l=t.jsx("input",{ref:o,...d,...c})}return s===void 0?l:t.jsxs("label",{className:a,children:[s,l]})});let ln=1;function Jr({onMount:e,defaultOpen:r=!1,storageKey:o="ll-debug-open"}){const[i,s]=n.useState(r),[a,d]=n.useState([]),[l,u]=n.useState(""),[f,v]=n.useState(!1),p=n.useRef(new Set),c=n.useRef([]),L=n.useRef(f);L.current=f,n.useEffect(()=>{try{const w=localStorage.getItem(o);w==="1"&&s(!0),w==="0"&&s(!1)}catch{}},[o]),n.useEffect(()=>{try{localStorage.setItem(o,i?"1":"0")}catch{}},[i,o]),n.useEffect(()=>{const w=g=>{(g.metaKey||g.ctrlKey)&&g.shiftKey&&g.key.toLowerCase()==="l"&&(g.preventDefault(),s(C=>!C))};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[]),n.useEffect(()=>{const w=setInterval(()=>{if(c.current.length===0||L.current)return;const g=c.current.splice(0,c.current.length);d(C=>[...g.reverse(),...C].slice(0,200))},100);return()=>clearInterval(w)},[]);const b=n.useRef(!1);if(n.useEffect(()=>{!e||b.current||(b.current=!0,e(w=>{c.current.push({id:ln++,ts:Date.now(),kind:"event",type:w.eventName,data:w.data})}))},[e]),n.useEffect(()=>{const w=console.warn,g=console.log,C=(E,N)=>function(...k){try{const S=typeof k[0]=="string"?k[0]:"";S.startsWith("[LiveLayer]")&&c.current.push({id:ln++,ts:Date.now(),kind:E,type:S.slice(0,120),data:{args:k.slice(1).map($=>Qr($))}})}catch{}return N.apply(this,k)};return console.warn=C("warn",w),console.log=C("log",g),()=>{console.warn=w,console.log=g}},[]),!i)return t.jsx("button",{type:"button",onClick:()=>s(!0),title:"Open LiveLayer debug panel (Cmd/Ctrl + Shift + L)","aria-label":"Open LiveLayer debug panel",style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.18)",borderRadius:999,padding:"6px 10px",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",cursor:"pointer",boxShadow:"0 4px 12px rgba(0,0,0,0.35)",opacity:.85},children:"🛰 LL debug"});const _=a.filter(w=>{if(!l)return!0;const g=l.toLowerCase();return w.type.toLowerCase().includes(g)||JSON.stringify(w.data||{}).toLowerCase().includes(g)});return t.jsxs("div",{style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,width:380,maxHeight:"60vh",background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.16)",borderRadius:12,boxShadow:"0 16px 48px rgba(0,0,0,0.5)",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",display:"flex",flexDirection:"column",overflow:"hidden"},children:[t.jsxs("div",{style:{padding:"8px 10px",background:"rgba(255,255,255,0.04)",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{style:{fontWeight:600,fontSize:12},children:"LiveLayer debug"}),t.jsxs("span",{style:{fontSize:10,color:"rgba(255,255,255,0.4)"},children:[a.length," event",a.length===1?"":"s"]}),t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:()=>v(w=>!w),style:jt(f?"#f59e0b":"transparent"),title:"Pause / resume capture",children:f?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{d([]),c.current=[]},style:jt("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:jt("transparent"),"aria-label":"Close",title:"Close (Cmd/Ctrl + Shift + L)",children:"✕"})]}),t.jsx("input",{type:"text",value:l,onChange:w=>u(w.target.value),placeholder:"filter by type or data…",style:{margin:8,padding:"6px 8px",background:"rgba(255,255,255,0.06)",border:"1px solid rgba(255,255,255,0.1)",borderRadius:6,color:"#fff",fontSize:11,outline:"none"}}),t.jsx("div",{style:{flex:1,overflowY:"auto",padding:"0 8px 8px"},children:_.length===0?t.jsxs("div",{style:{padding:14,fontSize:11,color:"rgba(255,255,255,0.4)",lineHeight:1.5},children:["No events yet. Connect to the agent and trigger a tool call — the events will stream in here. You can also dispatch commands manually in DevTools:",t.jsx("pre",{style:{marginTop:6,background:"rgba(255,255,255,0.04)",padding:6,borderRadius:4,fontSize:10,whiteSpace:"pre-wrap"},children:`window.__livelayerSimulateCommand({
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),n=require("react"),Lt=require("react-dom"),Xn=require("@livelayer/sdk"),mt=require("livekit-client");class cn extends n.Component{constructor(){super(...arguments),this.state={hasError:!1,error:null},this.reset=()=>{this.setState({hasError:!1,error:null})}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,o){var i,s;(s=(i=this.props).onError)==null||s.call(i,r,o)}render(){var r;return this.state.hasError?this.props.fallback?this.props.fallback:t.jsxs("div",{className:"ll-error-boundary",role:"alert",children:[t.jsx("p",{className:"ll-error-boundary__title",children:"Widget crashed"}),t.jsx("p",{className:"ll-error-boundary__message",children:((r=this.state.error)==null?void 0:r.message)||"Something went wrong."}),t.jsx("button",{type:"button",className:"ll-error-boundary__retry",onClick:this.reset,children:"Reload widget"})]}):this.props.children}}function un(e){const[r,o]=n.useState("idle"),[i,s]=n.useState("idle"),[a,d]=n.useState([]),[l,u]=n.useState(null),[f,y]=n.useState(null),[p,c]=n.useState(null),[L,_]=n.useState(!1),[w,v]=n.useState(null),x=n.useRef(null),C=n.useRef(e.onDataMessage);C.current=e.onDataMessage,n.useEffect(()=>{const S={onConnectionStateChange:z=>{o(z),z==="connected"&&v(null)},onAgentStateChange:s,onTranscript:z=>d([...z]),onAgentConfig:u,onAudioTrack:z=>c(z),onVideoTrack:z=>y(z),onVideoTrackRemoved:()=>y(null),onError:z=>v(z),onDataMessage:z=>{var O;(O=C.current)==null||O.call(C,z)},onResumabilityChange:_},$=new Xn.LiveKitSession({agentId:e.agentId,baseUrl:e.baseUrl,apiKey:e.apiKey,sessionEndpoint:e.sessionEndpoint,sessionBody:e.sessionBody},S);return x.current=$,o("idle"),s("idle"),d([]),u(null),y(null),c(null),_(!1),v(null),()=>{var z;(z=$.destroy)==null||z.call($),x.current=null}},[e.agentId,e.baseUrl,e.apiKey,e.sessionEndpoint,JSON.stringify(e.sessionBody??{})]);const E=n.useCallback(async()=>{const S=x.current;if(S)try{await S.connect()}catch($){throw v($ instanceof Error?$.message:String($)),$}},[]),N=n.useCallback(()=>{const S=x.current;S&&S.disconnect()},[]),k=n.useCallback(()=>{var S;return((S=x.current)==null?void 0:S.getRoom())??null},[]);return{connectionState:r,agentState:i,transcript:a,agentConfig:l,videoElement:f,audioElement:p,canResume:L,error:w,connect:E,disconnect:N,getRoom:k,session:x.current}}function dn(){const e=n.useRef(null),r=n.useRef(null),o=n.useRef(null),i=n.useRef(null),s=n.useRef(new Set),a=n.useRef(null),d=n.useCallback(()=>{const p=r.current;if(!p){i.current=null;return}(!a.current||a.current.length!==p.frequencyBinCount)&&(a.current=new Uint8Array(new ArrayBuffer(p.frequencyBinCount)));const c=a.current;p.getByteFrequencyData(c);let L=0;for(let w=0;w<c.length;w++)L+=c[w];const _=L/c.length/255;for(const w of s.current)try{w(_)}catch(v){console.error("[useAudioLevel] subscriber threw:",v)}i.current=requestAnimationFrame(d)},[]),l=n.useCallback(()=>{if(e.current||typeof window>"u"||typeof AudioContext>"u")return;const p=new AudioContext,c=p.createAnalyser();c.fftSize=64,c.connect(p.destination),e.current=p,r.current=c},[]),u=n.useCallback(p=>{if(l(),!(!e.current||!r.current)){if(o.current){try{o.current.disconnect()}catch{}o.current=null}try{const c=e.current.createMediaElementSource(p);c.connect(r.current),o.current=c}catch(c){console.warn("[useAudioLevel] createMediaElementSource failed:",c);return}i.current===null&&(i.current=requestAnimationFrame(d))}},[l,d]),f=n.useCallback(()=>{if(i.current!==null&&(cancelAnimationFrame(i.current),i.current=null),o.current){try{o.current.disconnect()}catch{}o.current=null}},[]),y=n.useCallback(p=>(s.current.add(p),()=>{s.current.delete(p)}),[]);return n.useEffect(()=>()=>{if(f(),r.current){try{r.current.disconnect()}catch{}r.current=null}if(e.current){try{e.current.close()}catch{}e.current=null}s.current.clear(),a.current=null},[f]),{attach:u,detach:f,subscribe:y}}function fn(){const[e,r]=n.useState(!1),[o,i]=n.useState(""),[s,a]=n.useState(null),d=n.useRef(null),l=n.useRef(null),u=n.useCallback(async _=>{var w,v;if(d.current&&l.current){try{await l.current.localParticipant.unpublishTrack(d.current)}catch{}d.current.stop(),d.current=null}l.current=_,a(null);try{const x=await mt.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});await _.localParticipant.publishTrack(x),d.current=x,r(x.isMuted);const C=(v=(w=x.mediaStreamTrack)==null?void 0:w.getSettings)==null?void 0:v.call(w);C!=null&&C.deviceId&&i(C.deviceId)}catch(x){const C=x instanceof Error&&x.name==="NotAllowedError"?"Enable your microphone to talk with the agent.":"Microphone unavailable. Check browser permissions and try again.";throw a(C),x}},[]),f=n.useCallback(_=>{l.current=_},[]),y=n.useCallback(async _=>{const w=l.current;if(w)try{await w.switchActiveDevice("audioinput",_),i(_)}catch(v){console.warn("[useMicrophoneState] switchDevice failed:",v)}},[]),p=n.useCallback(async()=>{const _=l.current,w=!e;if(r(w),!!_)try{await _.localParticipant.setMicrophoneEnabled(!w)}catch(v){console.warn("[useMicrophoneState] setMicrophoneEnabled failed:",v),r(!w)}},[e]),c=n.useCallback(()=>{const _=d.current,w=l.current;if(_&&w){try{w.localParticipant.unpublishTrack(_)}catch{}_.stop()}d.current=null,l.current=null,r(!1),i("")},[]),L=n.useCallback(()=>a(null),[]);return{isMuted:e,activeDeviceId:o,micError:s,toggleMute:p,setupMic:u,attachRoom:f,switchDevice:y,teardownMic:c,clearError:L}}const Qn={resolution:{width:640,height:480,frameRate:24}};function pn(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),[d,l]=n.useState(""),u=n.useRef(null),f=n.useRef(null),y=n.useCallback(x=>{u.current=x},[]),p=n.useCallback(()=>{var E;const x=u.current,C=f.current;if(C&&x){const N=x.localParticipant.getTrackPublication(mt.Track.Source.Camera),S=(N==null?void 0:N.track)??C;try{x.localParticipant.unpublishTrack(S)}catch{}try{(E=S.stop)==null||E.call(S)}catch{}}f.current=null,a(null),r(!1)},[]),c=n.useCallback(async x=>{const C=u.current;if(C){i(null);try{const E={...Qn};x&&(E.deviceId=x);const N=await mt.createLocalVideoTrack(E);await C.localParticipant.publishTrack(N),f.current=N;const k=N.attach();a(k),r(!0),x&&l(x);try{C.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_camera_on"})),{reliable:!0})}catch{}}catch(E){const N=E instanceof Error&&E.name==="NotAllowedError"?"Enable your camera in the browser to share video.":"Camera unavailable. Check permissions and try again.";i(N)}}},[]),L=n.useCallback(async()=>{e?p():await c(d||void 0)},[e,d,p,c]),_=n.useCallback(async x=>{p(),await c(x)},[p,c]),w=n.useCallback(()=>{p(),u.current=null,i(null),l("")},[p]),v=n.useCallback(()=>i(null),[]);return n.useEffect(()=>()=>{f.current&&f.current.stop()},[]),{isEnabled:e,error:o,previewEl:s,activeDeviceId:d,toggle:L,switchDevice:_,attachRoom:y,teardown:w,clearError:v}}function hn(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),d=n.useRef(null),l=n.useCallback(c=>{d.current=c},[]),u=n.useCallback(()=>a(null),[]),f=n.useCallback(async()=>{const c=d.current;if(c){if(e){try{await c.localParticipant.setScreenShareEnabled(!1)}catch{}u(),r(!1);return}i(null);try{await c.localParticipant.setScreenShareEnabled(!0);let L=0;const _=()=>{const w=c.localParticipant.getTrackPublication(mt.Track.Source.ScreenShare);if(w!=null&&w.track){const v=w.track.attach();a(v),r(!0);try{c.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_screen_share_on"})),{reliable:!0})}catch{}return}L++<10?setTimeout(_,100):r(!0)};_()}catch(L){const _=L instanceof Error?L.name:"";_!=="NotAllowedError"&&_!=="AbortError"&&i("Screen share unavailable. Try again."),r(!1)}}},[e,u]),y=n.useCallback(()=>{const c=d.current;if(c&&e)try{c.localParticipant.setScreenShareEnabled(!1)}catch{}u(),r(!1),i(null),d.current=null},[e,u]),p=n.useCallback(()=>i(null),[]);return{isEnabled:e,error:o,previewEl:s,toggle:f,attachRoom:l,teardown:y,clearError:p}}function mn(){const[e,r]=n.useState([]),[o,i]=n.useState([]),s=n.useCallback(async()=>{if(!(typeof navigator>"u"||!navigator.mediaDevices))try{const a=await navigator.mediaDevices.enumerateDevices();r(a.filter(d=>d.kind==="audioinput")),i(a.filter(d=>d.kind==="videoinput"))}catch{}},[]);return n.useEffect(()=>{if(s(),typeof navigator>"u"||!navigator.mediaDevices)return;const a=()=>void s();return navigator.mediaDevices.addEventListener("devicechange",a),()=>navigator.mediaDevices.removeEventListener("devicechange",a)},[s]),{mics:e,cameras:o,refresh:s}}function gn(e,r,o=!1){const[i,s]=n.useState(null),[a,d]=n.useState(null),[l,u]=n.useState(!o&&!!e);return n.useEffect(()=>{if(o||!e){u(!1);return}const f=new AbortController,y=r||"https://app.livelayer.studio";return u(!0),d(null),fetch(`${y}/api/widget/agent/${encodeURIComponent(e)}`,{signal:f.signal}).then(async p=>{if(!p.ok){const c=await p.json().catch(()=>({}));throw new Error(c.error||`HTTP ${p.status}`)}return p.json()}).then(p=>{f.signal.aborted||(s(p),u(!1))}).catch(p=>{f.signal.aborted||(d(p instanceof Error?p.message:"Agent lookup failed"),u(!1))}),()=>f.abort()},[e,r,o]),{info:i,error:a,loading:l}}function Zn(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function er(e,r){if(!(typeof window>"u"))try{window.localStorage.setItem(e,r)}catch{}}function yn({value:e,defaultValue:r="expanded",onChange:o}={}){const i=e!==void 0,[s,a]=n.useState(r),d=i?e:s,l=n.useCallback(u=>{u!==d&&(i||a(u),o==null||o(u))},[d,i,o]);return[d,l]}const tr=["hidden","minimized","expanded"];function nr(e){return e&&tr.includes(e)?e:null}function vn({value:e,defaultValue:r="expanded",onChange:o,persistKey:i="ll-widget",disablePersistence:s=!1}={}){const a=`${i}:display-mode`,d=n.useRef(!1),[l,u]=yn({value:e,defaultValue:r,onChange:f=>{e===void 0&&!s&&er(a,f),o==null||o(f)}});return n.useEffect(()=>{if(d.current||(d.current=!0,s||e!==void 0))return;const f=nr(Zn(a));f&&f!==l&&u(f)},[]),[l,u]}const rr=640;function xn(e=rr){const[r,o]=n.useState(!1);return n.useEffect(()=>{if(e===!1){o(!1);return}if(typeof window>"u"||typeof window.matchMedia>"u")return;const i=`(max-width: ${e-1}px)`,s=window.matchMedia(i),a=()=>o(s.matches);return a(),typeof s.addEventListener=="function"?(s.addEventListener("change",a),()=>s.removeEventListener("change",a)):(s.addListener(a),()=>{s.removeListener(a)})},[e]),r}const Ut="__llHistoryPatched",gt="ll:pathname";function or(){if(typeof window>"u"||window.history[Ut])return;const e=window.history.pushState,r=window.history.replaceState;window.history.pushState=function(...o){const i=e.apply(this,o);return window.dispatchEvent(new Event(gt)),i},window.history.replaceState=function(...o){const i=r.apply(this,o);return window.dispatchEvent(new Event(gt)),i},window.history[Ut]=!0}function Vt(){return typeof window>"u"?"/":window.location.pathname||"/"}function bn(e){const[r,o]=n.useState(()=>e??Vt());return n.useEffect(()=>{if(e!==void 0)return;or();const i=()=>o(Vt());return i(),window.addEventListener("popstate",i),window.addEventListener(gt,i),()=>{window.removeEventListener("popstate",i),window.removeEventListener(gt,i)}},[e]),e??r}const Yt=new Map,ir=/[\\^$+?.()|{}[\]]/g;function sr(e){return e.replace(ir,"\\$&")}function ar(e){const r=Yt.get(e);if(r)return r;const o=e.length>1&&e.endsWith("/")?e.slice(0,-1):e,i="",s="",a=o.replace(/\*\*/g,i).replace(/\*/g,s),l=sr(a).replace(new RegExp(`\\/${i}`,"g"),"(?:\\/.*)?").replace(new RegExp(i,"g"),".*").replace(new RegExp(s,"g"),"[^/]+"),u=new RegExp(`^${l}\\/?$`);return Yt.set(e,u),u}function lr(e,r){const o=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return ar(e).test(o)}function wn(e,r){return typeof e=="function"?e(r):e instanceof RegExp?e.test(r):lr(e,r)}function Gt(e,r){if(!e||e.length===0)return!1;for(const o of e)if(wn(o,r))return!0;return!1}function _n(e,r,o){return e===void 0?!0:Gt(o,e)?!1:r&&r.length>0?Gt(r,e):!0}function kn(e,r,o){return n.useMemo(()=>_n(e,r,o),[e,r,o])}function cr(e){return e===!1?{navigate:!1,thinking:!1,action:!1}:e===void 0||e===!0?{navigate:!0,thinking:!0,action:!0}:{navigate:e.navigate!==!1,thinking:e.thinking!==!1,action:e.action!==!1}}function ur(e){const r=n.useMemo(()=>cr(e.config),[e.config]),o=e.baseUrl.replace(/\/+$/,""),i=n.useRef(null),s=n.useCallback(u=>{try{new Audio(`${o}${u}`).play().catch(()=>{})}catch{}},[o]),a=n.useCallback(()=>{r.navigate&&s("/audio/page-change-sound.mp3")},[r.navigate,s]),d=n.useCallback(()=>{r.action&&s("/audio/confirmation-sound.mp3")},[r.action,s]),l=n.useCallback(u=>{if(!r.thinking){if(i.current){try{i.current.pause()}catch{}i.current=null}return}if(u){if(i.current)return;try{const f=new Audio(`${o}/audio/thinking-sound.mp3`);f.loop=!0,f.volume=.3,f.play().catch(()=>{i.current=null}),i.current=f}catch{}}else if(i.current){try{i.current.pause()}catch{}i.current=null}},[o,r.thinking]);return n.useEffect(()=>()=>{if(i.current){try{i.current.pause()}catch{}i.current=null}},[]),n.useMemo(()=>({playPageChange:a,playConfirmation:d,setThinking:l}),[a,d,l])}const Kt=({muted:e=!1,className:r})=>e?t.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:[t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z"}),t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2"})]}):t.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4M12 1a3 3 0 00-3 3v4a3 3 0 006 0V4a3 3 0 00-3-3z"})}),Jt=({className:e})=>t.jsx("svg",{className:e,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})}),dr=({className:e})=>t.jsx("svg",{className:e,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})}),fr={left:180,right:0,up:-90,down:90},Xt=({direction:e="right",className:r})=>t.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,style:{transform:`rotate(${fr[e]}deg)`},"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 6l6 6-6 6"})});function pr(e){return e==="top-left"||e==="bottom-left"?"left":"right"}const jn="ll-hidden-tab-center-y",hr=5,Qt=16;function mr(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(jn);if(!e)return null;const r=Number.parseFloat(e);return Number.isFinite(r)?r:null}catch{return null}}function Zt(e){if(!(typeof window>"u"))try{window.localStorage.setItem(jn,String(e))}catch{}}const gr=({position:e,isMobile:r,isSpeaking:o,onExpand:i,label:s="Open widget",avatarImageUrl:a,agentName:d,containerEl:l})=>{const u=pr(e),f=u==="right"?"left":"right",y=r?80:72,p=!!a,c=!!l,[L,_]=n.useState(null),[w,v]=n.useState(!1),x=n.useRef(null),C=n.useRef(!1),E=n.useCallback(T=>{if(typeof window>"u")return T;const W=y/2,D=Qt+W,F=window.innerHeight-Qt-W;return F<D?Math.max(D,T):Math.max(D,Math.min(F,T))},[y]);n.useEffect(()=>{if(c){_(null);return}const T=mr();_(E(T??window.innerHeight/2));const W=()=>{_(D=>D===null?null:E(D))};return window.addEventListener("resize",W),()=>window.removeEventListener("resize",W)},[E,c]);const N=n.useCallback(T=>{if(!c&&!(T.pointerType==="mouse"&&T.button!==0)&&L!==null){try{T.currentTarget.setPointerCapture(T.pointerId)}catch{}x.current={startClientY:T.clientY,startCenterY:L,moved:!1}}},[L,c]),k=n.useCallback(T=>{const W=x.current;if(!W)return;const D=T.clientY-W.startClientY;!W.moved&&Math.abs(D)>hr&&(W.moved=!0,v(!0)),W.moved&&_(E(W.startCenterY+D))},[E]),S=n.useCallback(T=>{const W=x.current;if(W){try{T.currentTarget.releasePointerCapture(T.pointerId)}catch{}x.current=null,W.moved&&(v(!1),C.current=!0,_(D=>(D!==null&&Zt(D),D)))}},[]),$=n.useCallback(()=>{if(C.current){C.current=!1;return}i()},[i]),z=n.useCallback(T=>{if(T.key==="ArrowUp"||T.key==="ArrowDown"){T.preventDefault();const W=T.key==="ArrowUp"?-8:8;_(D=>{if(D===null)return D;const F=E(D+W);return Zt(F),F})}},[E]),O=["ll-hidden",`ll-hidden--${u}`,r?"ll-hidden--mobile":"ll-hidden--desktop",o?"ll-hidden--speaking":null,w?"is-dragging":null,p?"ll-hidden--with-avatar":null,c?"ll-hidden--scoped":null].filter(Boolean).join(" "),H=L===null?void 0:{top:`${L-y/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:O,onPointerDown:N,onPointerMove:k,onPointerUp:S,onPointerCancel:S,onClick:$,onKeyDown:z,"aria-label":s,"data-position":e,style:H,children:p?t.jsxs(t.Fragment,{children:[t.jsx(Xt,{direction:f,className:"ll-hidden__chevron ll-hidden__chevron--mini"}),t.jsx("img",{src:a,alt:d?`${d} avatar`:"Agent avatar",className:"ll-hidden__avatar",draggable:!1})]}):t.jsx(Xt,{direction:f,className:"ll-hidden__chevron"})})},yr=({audioLevel:e,bars:r=20,maxHeight:o=20,minHeight:i=4,className:s,barClassName:a})=>{const d=n.useRef(null),l=n.useRef([]),u=n.useMemo(()=>{const y=(Math.sqrt(5)-1)/2;return Array.from({length:r},(p,c)=>.5+c*y%1*.5)},[r]);n.useEffect(()=>e.subscribe(p=>{for(let c=0;c<r;c++){const L=l.current[c];if(!L)continue;const _=Math.max(i,p*o*u[c]);L.style.height=`${_}px`}}),[e,r,o,i,u]);const f=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:d,className:f,"aria-hidden":"true",children:Array.from({length:r},(y,p)=>t.jsx("div",{ref:c=>{l.current[p]=c},className:["ll-waveform__bar",a].filter(Boolean).join(" "),style:{height:`${i}px`}},p))})},vr=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,agentState:s,isMuted:a,audioLevel:d,onExpand:l,onToggleMute:u,onClose:f})=>r?t.jsx("div",{className:"ll-minimized ll-minimized--mobile",role:"region","aria-label":`${o} widget`,children:t.jsxs("button",{type:"button",className:"ll-minimized__surface",onClick:l,"aria-label":`Expand ${o} widget`,children:[i?t.jsx("img",{src:i,alt:o,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsx(yr,{audioLevel:d,bars:16,maxHeight:18,className:"ll-minimized__waveform"}),t.jsx("span",{className:"ll-minimized__name",children:o}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("span",{className:"ll-minimized__btn",role:"button",tabIndex:0,onClick:y=>{y.stopPropagation(),u()},onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.stopPropagation(),y.preventDefault(),u())},"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(Kt,{muted:a,className:"ll-minimized__icon"})}),t.jsx(Jt,{className:"ll-minimized__icon ll-minimized__icon--expand"})]})]})}):t.jsx("div",{className:"ll-minimized ll-minimized--desktop","data-position":e,role:"region","aria-label":`${o} widget`,children:t.jsxs("div",{className:"ll-minimized__surface",children:[i?t.jsx("img",{src:i,alt:o,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsxs("div",{className:"ll-minimized__meta",children:[t.jsx("span",{className:"ll-minimized__name",children:o}),t.jsx("span",{className:"ll-minimized__state",children:s==="speaking"?"Speaking":s==="thinking"?"Thinking":"Listening"})]}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:u,"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(Kt,{muted:a,className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:l,"aria-label":`Expand ${o} widget`,children:t.jsx(Jt,{className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn ll-minimized__btn--close",onClick:f,"aria-label":"Close widget",children:t.jsx(dr,{className:"ll-minimized__icon"})})]})]})}),xr=({src:e,alt:r,preCannedPlaying:o=!1,className:i,style:s})=>{const[a,d]=n.useState(!1),l=n.useRef(e);if(n.useEffect(()=>{l.current!==e&&(l.current=e,d(!1))},[e]),!e)return null;const u={position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"top",transition:"opacity 500ms ease, transform 500ms ease",transform:o?"scale(1.02)":"scale(1)",opacity:a?1:0,...s};return t.jsx("img",{src:e,alt:r,className:i,style:u,loading:"eager",fetchPriority:"high",onLoad:()=>d(!0)})},br=8,en=8,wr=({open:e,onClose:r,anchorRef:o,children:i})=>{const s=n.useRef(null),[a,d]=n.useState(null);return n.useLayoutEffect(()=>{if(!e){d(null);return}const l=o.current;if(!l)return;const u=()=>{const f=l.getBoundingClientRect(),y={top:f.top-br,left:f.left+f.width/2},p=en+90,c=window.innerWidth-en-90;y.left<p&&(y.left=p),y.left>c&&(y.left=c),d(y)};return u(),window.addEventListener("scroll",u,!0),window.addEventListener("resize",u),()=>{window.removeEventListener("scroll",u,!0),window.removeEventListener("resize",u)}},[e,o]),n.useEffect(()=>{if(!e)return;const l=f=>{const y=f.target,p=s.current,c=o.current;p&&p.contains(y)||c&&c.contains(y)||r()},u=f=>{f.key==="Escape"&&(f.stopPropagation(),r())};return document.addEventListener("mousedown",l),document.addEventListener("keydown",u),()=>{document.removeEventListener("mousedown",l),document.removeEventListener("keydown",u)}},[e,r,o]),!e||a===null||typeof document>"u"?null:Lt.createPortal(t.jsx("div",{ref:s,className:"ll-overflow-popover",role:"menu",style:{position:"fixed",top:a.top,left:a.left,transform:"translate(-50%, -100%)"},children:i}),document.body)},_r=({isMuted:e,onToggleMute:r,isCameraEnabled:o,onToggleCamera:i,allowCamera:s,isScreenShareEnabled:a,onToggleScreenShare:d,allowScreenShare:l,isSpeakerMuted:u,onToggleSpeaker:f,allowTyping:y,isTypingOpen:p,onToggleTyping:c,onDisconnect:L})=>{const[_,w]=n.useState(!1),v=n.useRef(null);return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"ll-toolbar ll-toolbar--compact","data-testid":"compact-toolbar",onClick:x=>x.stopPropagation(),children:[t.jsx("button",{type:"button",className:`ll-tool ${e?"is-muted":""}`,onClick:r,"aria-label":e?"Unmute microphone":"Mute microphone",children:t.jsx(Sn,{muted:e})}),t.jsx("button",{ref:v,type:"button",className:`ll-tool ${_?"is-on":""}`,onClick:()=>w(x=>!x),"aria-label":"More controls","aria-haspopup":"menu","aria-expanded":_,children:t.jsx(kr,{})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:L,"aria-label":"End conversation",children:t.jsx(Rn,{})})]}),t.jsxs(wr,{open:_,onClose:()=>w(!1),anchorRef:v,children:[s&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${o?"is-on":""}`,onClick:()=>{i(),w(!1)},children:[t.jsx(Ln,{}),t.jsx("span",{children:o?"Stop camera":"Start camera"})]}),l&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${a?"is-on":""}`,onClick:()=>{d(),w(!1)},children:[t.jsx(Cn,{}),t.jsx("span",{children:a?"Stop sharing":"Share screen"})]}),t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${u?"is-on":""}`,onClick:()=>{f(),w(!1)},children:[t.jsx(En,{muted:u}),t.jsx("span",{children:u?"Unmute speaker":"Mute speaker"})]}),y&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${p?"is-on":""}`,onClick:()=>{c(),w(!1)},children:[t.jsx(jr,{}),t.jsx("span",{children:p?"Hide typing":"Type a message"})]}),t.jsxs("button",{type:"button",className:"ll-overflow-popover__item is-active",disabled:!0,"aria-current":"true",children:[t.jsx("span",{className:"ll-overflow-popover__lang-code",children:"EN"}),t.jsx("span",{children:"English"})]})]})]})};function kr(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:[t.jsx("circle",{cx:"6",cy:"12",r:"1.5"}),t.jsx("circle",{cx:"12",cy:"12",r:"1.5"}),t.jsx("circle",{cx:"18",cy:"12",r:"1.5"})]})}function jr(){return t.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:t.jsx("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}const Cr=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,idleLoopUrl:s,greeting:a,branding:d,teamMembers:l,currentTeamMemberId:u,isSwitchingTeamMember:f,teamSwitcherOpen:y,onToggleTeamSwitcher:p,onSelectTeamMember:c,languageMenuOpen:L,onToggleLanguageMenu:_,connectionState:w,agentState:v,transcript:x,canResume:C,needsUserGesture:E,error:N,isMuted:k,micError:S,micDevices:$,activeMicId:z,isCameraEnabled:O,cameraPreviewEl:H,cameraDevices:T,activeCameraId:W,isScreenShareEnabled:D,screenPreviewEl:F,isSpeakerMuted:oe,allowCamera:ie,allowScreenShare:fe,allowTyping:ce,showMinimize:pe=!0,showClose:we=!0,chromeless:Ae=!1,compactControls:Q=!1,transforming:it,transformingLabel:qe,avatarVideoContainerRef:st,agentVideoEl:ne,onConnect:Fe,onDisconnect:Ue,onRetry:at,onResumeAudio:Ve,onToggleMute:_e,onSwitchMicDevice:Me,onToggleCamera:ke,onSwitchCameraDevice:Ie,onToggleScreenShare:je,onToggleSpeaker:Ce,onSendMessage:Le,onMinimize:A,onClose:lt,onClearMicError:vt})=>{var Ne;const Se=((l==null?void 0:l.length)??0)>1,Ee=w==="connecting"||w==="connected",Z=w==="connected",Ye=w==="idle"||w==="disconnected"||w==="error",[Ge,Te]=n.useState(!1);n.useEffect(()=>{if(!ne){Te(!1);return}if(!ne.paused&&ne.readyState>=2){Te(!0);return}Te(!1);const m=()=>Te(!0);return ne.addEventListener("playing",m),ne.addEventListener("loadeddata",m),()=>{ne.removeEventListener("playing",m),ne.removeEventListener("loadeddata",m)}},[ne]);const[Re,J]=n.useState(!1);n.useEffect(()=>{if(!Z){J(!1);return}if(Ge)return;const m=setTimeout(()=>J(!0),8e3);return()=>clearTimeout(m)},[Z,Ge]);const ct=w==="connecting"||Z&&!!i&&!Ge&&!Re,Ke=n.useRef(null),ee=n.useRef(null);n.useEffect(()=>{const m=Ke.current;m&&(m.innerHTML="",H&&(H.style.width="100%",H.style.height="100%",H.style.objectFit="cover",H.style.transform="scaleX(-1)",m.appendChild(H)))},[H]),n.useEffect(()=>{const m=ee.current;m&&(m.innerHTML="",F&&(F.style.width="100%",F.style.height="100%",F.style.objectFit="contain",m.appendChild(F)))},[F]);const[te,se]=n.useState(!1),[he,Y]=n.useState(!1),ae=n.useRef(null),me=n.useRef(null);n.useEffect(()=>{if(!te&&!he&&!L&&!y)return;const m=()=>{se(!1),Y(!1),L&&_(),y&&p()};return document.addEventListener("click",m),()=>document.removeEventListener("click",m)},[te,he,L,y,_,p]);const[De,xt]=n.useState(!1),Je=n.useCallback(()=>xt(m=>!m),[]),[ge,Xe]=n.useState(""),Qe=n.useCallback(m=>{m.preventDefault();const U=ge.trim();U&&(Le(U),Xe(""))},[ge,Le]),Ze=d.productName||"Live Layer";let ye=null,ve=null;for(let m=x.length-1;m>=0;m--){const U=x[m];if(!ye&&U.role==="agent"?ye=U:!ve&&U.role==="user"&&(ve=U),ye&&ve)break}const Pe=Z?(ye==null?void 0:ye.text)||null:a||null,ut=Z&&(ve==null?void 0:ve.text)||null,$e=["ll-expanded",r?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:$e,"data-position":e,"data-state":Z?"connected":Ee?"connecting":"idle",role:"dialog","aria-label":`${o} widget`,children:[t.jsxs("div",{className:"ll-expanded__bg",children:[i?t.jsx(xr,{src:i,alt:o,className:"ll-expanded__bg-img"}):t.jsx("div",{className:"ll-expanded__bg-fallback",children:t.jsx("span",{className:"ll-expanded__bg-initial",children:((Ne=o==null?void 0:o.charAt(0))==null?void 0:Ne.toUpperCase())||"A"})}),s&&!Z&&t.jsx("video",{className:"ll-expanded__bg-idle",src:s,autoPlay:!0,loop:!0,muted:!0,playsInline:!0})]}),t.jsx("div",{ref:st,className:"ll-expanded__video"}),ct&&t.jsxs("div",{className:"ll-expanded__overlay ll-expanded__overlay--connecting",children:[t.jsx("div",{className:"ll-expanded__spinner"}),t.jsx("p",{className:"ll-expanded__overlay-text",children:f?"Switching...":"Connecting..."})]}),E&&Z&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:Ve,children:[t.jsx("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:t.jsx("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.54.12a5 5 0 0 1 0 5.76l-1.41-1.41a3 3 0 0 0 0-2.94L16.54 9.12z"})}),t.jsx("p",{className:"ll-expanded__overlay-text",children:"Tap to enable audio"})]}),it&&t.jsxs("div",{className:"ll-expanded__overlay ll-expanded__overlay--transforming",role:"status","aria-live":"polite","aria-label":qe,children:[t.jsx("div",{className:"ll-expanded__spinner"}),t.jsx("p",{className:"ll-expanded__overlay-text",children:qe})]}),Ee?t.jsxs(t.Fragment,{children:[!Q&&t.jsxs("div",{className:"ll-expanded__topbar",children:[!Ae&&t.jsxs("div",{className:"ll-expanded__topbar-left",children:[t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill",onClick:m=>{Se&&(m.stopPropagation(),p())},"aria-haspopup":Se?"listbox":void 0,"aria-expanded":Se?y:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:o}),Se&&t.jsx(ft,{})]}),Se&&y&&t.jsx("div",{className:"ll-hmenu",onClick:m=>m.stopPropagation(),role:"listbox",children:l==null?void 0:l.map(m=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${m.id===u?"is-active":""}`,onClick:()=>c(m.id),role:"option","aria-selected":m.id===u,children:[m.avatarImageUrl&&t.jsx("img",{src:m.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:m.name}),m.role&&t.jsx("span",{className:"ll-hmenu__role",children:m.role})]},m.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:m=>{m.stopPropagation(),_()},"aria-haspopup":"listbox","aria-expanded":L,"aria-label":"Language: English",title:"Language: English",children:[t.jsx("span",{className:"ll-hpill__label",children:"EN"}),t.jsx(ft,{})]}),L&&t.jsx("div",{className:"ll-hmenu",onClick:m=>m.stopPropagation(),role:"listbox",children:t.jsx("button",{type:"button",className:"ll-hmenu__item is-active",role:"option","aria-selected":!0,children:t.jsx("span",{className:"ll-hmenu__name",children:"English"})})})]}),t.jsx("span",{className:`ll-expanded__state ll-expanded__state--${v}`,children:v})]}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[pe!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn",onClick:A,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(nn,{})}),we!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:lt,"aria-label":"End call",title:"End call",children:t.jsx(tn,{})})]})]}),Q&&t.jsxs("div",{className:"ll-compact-status","data-state":v,children:[t.jsx("span",{className:"ll-compact-status__dot","aria-hidden":!0}),t.jsx("span",{className:"ll-compact-status__label",children:v})]})]}):!Q&&t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:Ze}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[pe!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:A,"aria-label":"Minimize widget",children:t.jsx(nn,{})}),we!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:lt,"aria-label":"Close widget",children:t.jsx(tn,{})})]})]}),Ye&&(()=>{const m=C?"Resume session":w==="disconnected"?"Reconnect to agent":"Start video call",U=!N;return t.jsxs(t.Fragment,{children:[U&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:Fe,"aria-label":m,children:[t.jsx("div",{className:"ll-expanded__play-circle",children:t.jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:t.jsx("polygon",{points:"6 3 20 12 6 21 6 3"})})}),Q&&t.jsx("span",{className:"ll-expanded__play-label",children:m})]}),!Q&&t.jsxs("div",{className:"ll-expanded__bottom ll-expanded__bottom--idle",children:[a&&t.jsx("div",{className:"ll-expanded__transcript",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:a})}),t.jsx("button",{type:"button",className:"ll-expanded__cta",onClick:Fe,"aria-label":m,children:m})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${Ee&&(O||D)?"is-visible":""}`,children:[t.jsx("div",{ref:ee,className:D?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:Ke,className:!D&&O?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),Ee?t.jsxs("div",{className:"ll-expanded__bottom",children:[!Q&&Pe&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--agent","data-role":"agent",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Pe})}),!Q&&ut&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--user","data-role":"user",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:ut})}),!Ae&&!Q&&t.jsxs("div",{className:"ll-toolbar",onClick:m=>m.stopPropagation(),children:[fe&&t.jsx("button",{type:"button",className:`ll-tool ${D?"is-on":""}`,onClick:je,"aria-label":D?"Stop sharing screen":"Share screen",title:D?"Stop sharing":"Share screen",children:t.jsx(Cn,{})}),ie&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${O?"is-on":""}`,onClick:ke,"aria-label":O?"Turn off camera":"Turn on camera",title:O?"Stop camera":"Start camera",children:t.jsx(Ln,{})}),t.jsx("button",{ref:me,type:"button",className:`ll-tool ll-tool--right ${O?"is-on":""}`,onClick:m=>{m.stopPropagation(),Y(U=>!U),se(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":he,children:t.jsx(ft,{})}),he&&T.length>0&&t.jsx(rn,{label:"Camera",devices:T,activeId:W,anchorRef:me,onPick:m=>{Y(!1),Ie(m)}})]}),t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${k?"is-muted":""}`,onClick:_e,"aria-label":k?"Unmute microphone":"Mute microphone",title:k?"Unmute":"Mute",children:t.jsx(Sn,{muted:k})}),t.jsx("button",{ref:ae,type:"button",className:`ll-tool ll-tool--right ${k?"is-muted":""}`,onClick:m=>{m.stopPropagation(),se(U=>!U),Y(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":te,children:t.jsx(ft,{})}),te&&$.length>0&&t.jsx(rn,{label:"Microphone",devices:$,activeId:z,anchorRef:ae,onPick:m=>{se(!1),Me(m)}})]}),t.jsx("button",{type:"button",className:`ll-tool ${oe?"is-muted":""}`,onClick:Ce,"aria-label":oe?"Unmute speaker":"Mute speaker",title:oe?"Unmute speaker":"Mute speaker",children:t.jsx(En,{muted:oe})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:Ue,"aria-label":"End conversation",title:"End conversation",children:t.jsx(Rn,{})})]}),!Ae&&Q&&t.jsx(_r,{isMuted:k,onToggleMute:_e,isCameraEnabled:O,onToggleCamera:ke,allowCamera:ie,isScreenShareEnabled:D,onToggleScreenShare:je,allowScreenShare:fe,isSpeakerMuted:oe,onToggleSpeaker:Ce,allowTyping:ce,isTypingOpen:De,onToggleTyping:Je,onDisconnect:Ue}),!Ae&&ce&&(Q?De:!0)&&t.jsxs("form",{className:"ll-message-input",onSubmit:Qe,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:ge,onChange:m=>Xe(m.target.value),"aria-label":"Message the agent"}),ge.trim()&&t.jsx("button",{type:"submit",className:"ll-message-input__send","aria-label":"Send message",children:t.jsx(Lr,{})})]})]}):null,(()=>{if(S&&w!=="error")return t.jsxs("div",{className:"ll-expanded__banner",role:"alert",children:[t.jsx("span",{children:S}),t.jsx("button",{type:"button",className:"ll-expanded__banner-x",onClick:vt,"aria-label":"Dismiss",children:"×"})]});if(!N||w!=="error")return null;let m="Failed to connect",U="Try again";return N==="MIC_PERMISSION_DENIED"?m="Microphone blocked. Allow access to talk.":N==="MIC_NOT_FOUND"?m="No microphone found. Plug one in + retry.":N==="MIC_UNAVAILABLE"?m="Mic unavailable. Check other apps using it.":N==="AGENT_TIMEOUT"?m="Agent didn't pick up. Try again.":N==="CONNECT_FAILED"?m="Connection failed. Check your network.":N.length<80&&(m=N),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:m}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:at,children:U})]})})()]})};function ft(){return t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round","aria-hidden":!0,children:t.jsx("polyline",{points:"6 9 12 15 18 9"})})}function tn(){return t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function nn(){return t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round","aria-hidden":!0,children:t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})})}function Cn(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2"}),t.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),t.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]})}function Ln(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("path",{d:"M23 7l-7 5 7 5V7z"}),t.jsx("rect",{x:"1",y:"5",width:"15",height:"14",rx:"2"})]})}function Sn({muted:e}){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("path",{d:"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"}),t.jsx("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}),t.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"23"}),e&&t.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]})}function En({muted:e}){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5"}),e?t.jsx("line",{x1:"23",y1:"9",x2:"17",y2:"15"}):t.jsxs(t.Fragment,{children:[t.jsx("path",{d:"M19.07 4.93a10 10 0 0 1 0 14.14"}),t.jsx("path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07"})]})]})}function Lr(){return t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),t.jsx("polyline",{points:"12 5 19 12 12 19"})]})}function Rn(){return t.jsx("svg",{width:"16",height:"16",viewBox:"-4 -4 32 32",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:t.jsx("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.93.37 1.84.71 2.7a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.38-1.38a2 2 0 0 1 2.11-.45c.86.34 1.77.58 2.7.71A2 2 0 0 1 22 16.92z",transform:"rotate(135 12 12)"})})}const rn=({label:e,devices:r,activeId:o,onPick:i,anchorRef:s})=>{const[a,d]=n.useState(null);return n.useLayoutEffect(()=>{const l=()=>{const u=s.current;if(!u)return;const f=u.getBoundingClientRect(),y=126,p=window.innerWidth-16-110,c=f.left+f.width/2;d({top:f.top-8,left:Math.max(y,Math.min(p,c))})};return l(),window.addEventListener("scroll",l,!0),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l,!0),window.removeEventListener("resize",l)}},[s]),a===null||typeof document>"u"?null:Lt.createPortal(t.jsxs("div",{className:"ll-device-menu ll-device-menu--floating",onClick:l=>l.stopPropagation(),role:"listbox",style:{position:"fixed",top:a.top,left:a.left,transform:"translate(-50%, -100%)"},children:[t.jsx("p",{className:"ll-device-menu__label",children:e}),r.map((l,u)=>{const f=o===l.deviceId;return t.jsxs("button",{type:"button",className:`ll-device-menu__item ${f?"is-active":""}`,onClick:()=>i(l.deviceId),role:"option","aria-selected":f,children:[f&&t.jsx("span",{className:"ll-device-menu__dot",children:"●"}),t.jsx("span",{className:"ll-device-menu__name",children:l.label||`${e} ${u+1}`})]},l.deviceId||u)})]}),document.body)},Sr=['[data-ll-private="true"]',".ll-widget"];function St(e){let r=e;for(;r;){for(const o of Sr)if(r.matches(o))return!0;r=r.parentElement}return!1}function yt(e){if(St(e))return!1;if(e instanceof HTMLInputElement){if(e.type==="password")return!1;const r=(e.getAttribute("autocomplete")||"").toLowerCase();if(r==="off"||r.startsWith("cc-"))return!1}return!0}const pt=4096,Er=20,Rr=20,Nr=10,Ar=10,Mr=30,Ir=20,on=500,Tr=['[data-ll-private="true"]',".ll-widget","script","style","noscript","iframe"];function rt(e){if(e.getAttribute("aria-hidden")==="true"||e.hasAttribute("hidden"))return!0;let r=e;for(;r;){for(const o of Tr)if(r.matches(o))return!0;r=r.parentElement}return!1}function ot(e){if(typeof window>"u")return!0;const r=e.getBoundingClientRect();if(r.width<=0||r.height<=0)return!1;const o=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return r.bottom>0&&r.right>0&&r.top<o&&r.left<i}function sn(e){const r=e.getAttribute("id");if(r){const a=document.querySelector(`label[for="${CSS.escape(r)}"]`);if(a!=null&&a.textContent)return a.textContent.trim()}const o=e.getAttribute("aria-label");if(o)return o.trim();const i=e.getAttribute("placeholder");if(i)return i.trim();const s=e.closest("label");return s!=null&&s.textContent?s.textContent.trim():""}function de(e,r){return e.length<=r?e:e.slice(0,r-1)+"…"}function He(e){return e.length}function Nn(e,r={}){const o=r.doc??(typeof document<"u"?document:null);if(!o)return{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:e};const i=typeof window<"u"&&window.location.href||"",s=typeof window<"u"&&window.location.pathname||"/",a=o.title||"",d=Array.from(o.querySelectorAll("[data-ll-region]")),l=[];for(const k of d){if(l.length>=Nr)break;if(rt(k)||!ot(k))continue;const S=k.getAttribute("data-ll-region")??"",$=k.getAttribute("data-ll-intent")??void 0,z=de((k.innerText||k.textContent||"").trim(),on*2);!S||!z||l.push({id:S,intent:$,text:z})}const u=[],f=["H1","H2","H3","H4","H5","H6"],y=Array.from(o.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const k of y){if(rt(k)||!ot(k))continue;const S=(k.textContent||"").trim();S&&u.push(`${k.tagName}: ${de(S,200)}`)}const p=Array.from(o.querySelectorAll("p, li"));for(const k of p){if(rt(k)||!ot(k)||f.includes(k.tagName))continue;const S=(k.textContent||"").trim();S.length>10&&u.push(de(S,on))}const c=u.join(`
2
+ `),L=[],_=Array.from(o.querySelectorAll("a[href]"));for(const k of _){if(L.length>=Er)break;if(rt(k)||!ot(k))continue;const S=k.getAttribute("href")||"",$=(k.textContent||"").trim();!S||!$||L.push({href:S,text:de($,100)})}const w=[],v=Array.from(o.querySelectorAll("input, textarea, select"));for(const k of v){if(w.length>=Rr)break;if(rt(k)||!yt(k)||!ot(k))continue;const S=sn(k),$=k instanceof HTMLInputElement?k.type:k.tagName.toLowerCase();S&&w.push({label:de(S,100),type:$})}const x=Array.from(o.querySelectorAll("[data-ll-form]")),C=[];for(const k of x){if(C.length>=Ar)break;if(St(k))continue;const S=k.getAttribute("data-ll-form")||"";if(!S)continue;const $=k.getAttribute("data-ll-intent")||void 0,z=Array.from(k.querySelectorAll("[data-ll-field]")),O=[];for(const H of z){if(O.length>=Mr)break;if(!yt(H))continue;const T=H.getAttribute("data-ll-field")||"";if(!T)continue;const W=sn(H)||T,D=H instanceof HTMLInputElement?H.type:H.tagName.toLowerCase(),F={name:T,label:de(W,100),type:D};if(H.required===!0&&(F.required=!0),H instanceof HTMLSelectElement){const ie=[];for(let fe=0;fe<H.options.length&&!(ie.length>=Ir);fe++){const ce=H.options[fe];if(!ce||ce.disabled)continue;const pe=ce.value||"",we=(ce.textContent||"").trim()||pe;!pe&&!we||ie.push({value:pe,label:de(we,60)})}ie.length>0&&(F.options=ie)}const oe=typeof H.validationMessage=="string"?H.validationMessage:"";oe&&(F.validationMessage=de(oe,200)),O.push(F)}C.push({id:S,intent:$,fields:O})}const E={url:i,title:a,pathname:s,regions:l,visibleText:c,visibleLinks:L,visibleFields:w,forms:C,extras:e};let N=He(JSON.stringify(E.regions))+He(E.visibleText)+He(JSON.stringify(E.visibleLinks))+He(JSON.stringify(E.visibleFields));for(;N>pt&&E.visibleFields.length>0;)E.visibleFields.pop(),N=He(JSON.stringify(E.visibleFields));for(;N>pt&&E.visibleLinks.length>0;)E.visibleLinks.pop(),N-=80;return He(E.visibleText)>pt&&(E.visibleText=de(E.visibleText,pt-100)),E}let We=null;function Ct(e,r={}){const o=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(We&&We.key===s&&o-We.at<1e3)return We.ctx;const a=Nn(e,r);return We={key:s,at:o,ctx:a},a}function An(){We=null}const Dr=200;function Mn(e){const r=String(e.href||"");return{href:r,text:String(e.text??e.title??r),internal:e.internal??!0,title:e.title,description:e.description}}function Pr(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function In(e){const r=e??(typeof document<"u"?document:null);if(!r)return[];const o=typeof window<"u"&&window.location.origin||"",i=new Set,s=[],a=Array.from(r.querySelectorAll("a[href]"));for(const d of a){if(s.length>=Dr)break;if(St(d))continue;const l=d.getAttribute("href")||"";if(!Pr(l))continue;let u=l,f=!0;try{if(typeof window<"u"){const p=new URL(l,o);f=p.origin===o,f&&l.startsWith("http")&&(u=p.pathname+p.search+p.hash)}}catch{continue}if(i.has(u))continue;i.add(u);const y=(d.textContent||"").trim().slice(0,120);s.push({href:u,text:y,internal:f})}return s}let Be=null;const $r=5e3;function ht(){const e=Date.now(),r=typeof window<"u"&&window.location.pathname||"/";if(Be&&Be.pathname===r&&e-Be.at<$r)return Be.routes;const o=In();return Be={at:e,pathname:r,routes:o},o}function Tn(){Be=null}function zr(e,r){const o=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLSelectElement.prototype,i=Object.getOwnPropertyDescriptor(o,"value"),s=i==null?void 0:i.set;s?s.call(e,r):e.value=r}function Or(e,r,o={}){const i=o.triggerInput??!0,s=o.triggerChange??!0;if(e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")){const a=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"checked"),d=a==null?void 0:a.set,l=r==="true"||r==="1"||r==="on";d?d.call(e,l):e.checked=l,i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}));return}zr(e,r),i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function Hr(){if(typeof window>"u"||typeof document>"u")return!1;const e=document.scrollingElement||document.documentElement;if(!e||e.scrollHeight<=e.clientHeight+2)return!1;const r=window.getComputedStyle(e);return!(r.overflowY==="hidden"||r.overflowY==="clip")}function Wr(e){if(!(e instanceof HTMLElement))return!1;const o=window.getComputedStyle(e).overflowY;return!(o!=="auto"&&o!=="scroll"||e.scrollHeight<=e.clientHeight+2)}function Br(){if(typeof document>"u")return null;const e=Array.from(document.querySelectorAll("body, body *"));let r=null,o=0;for(const i of e){if(!Wr(i))continue;const s=i.getBoundingClientRect();if(s.bottom<=0||s.top>=window.innerHeight||s.right<=0||s.left>=window.innerWidth||s.width<=0||s.height<=0||i.closest(".ll-widget"))continue;const a=s.width*s.height;a>o&&(o=a,r=i)}return r}function qr(){if(typeof window>"u")return null;if(Hr())return window;const e=Br();return e||window}function an(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function Fr(e){var r,o;return e instanceof Window?typeof document>"u"?0:Math.max(((r=document.body)==null?void 0:r.scrollHeight)??0,((o=document.documentElement)==null?void 0:o.scrollHeight)??0):e.scrollHeight-e.clientHeight}const Ur=new Set(["agent_state","avatar_stream_ready","avatar_active","avatar_idle","bot_ready","agent_error","idle_warning","idle_timeout","navigate","scroll_to","request_page_context","scroll_page","click","fill_form","focus_field","submit_form","request_routes"]),Dn=n.forwardRef(function(r,o){var zt,Ot,Ht,Wt,Bt,qt,Ft;const{agentId:i,apiKey:s,baseUrl:a="https://app.livelayer.studio",sessionEndpoint:d,sessionBody:l,soundEffects:u,experienceMode:f="WIDGET",autoConnect:y=!1,displayMode:p,defaultDisplayMode:c="expanded",onDisplayModeChange:L,position:_="bottom-right",mobileBreakpoint:w=640,persistKey:v="ll-widget",disablePersistence:x=!1,teamMembers:C,currentTeamMemberId:E,onTeamMemberChange:N,idleLoopUrl:k,greeting:S,avatarImageUrl:$,agentName:z,branding:O={},allowCamera:H=!0,allowScreenShare:T=!0,allowTyping:W=!0,showMinimize:D=!0,showClose:F=!0,chromeless:oe=!1,floatingChromeContainer:ie=null,compactControls:fe=!1,transforming:ce=!1,transformingLabel:pe="Transforming…",showOn:we,hideOn:Ae,pathname:Q,onNavigate:it,onScrollToSelector:qe,getPageContext:st,pageContextExtras:ne,getRoutes:Fe,onScrollPage:Ue,onClick:at,capabilities:Ve,onConnect:_e,onDisconnect:Me,onTranscript:ke,onAgentState:Ie,onConnectionStateChange:je,onAgentEvent:Ce,onAgentCommand:Le,controlledSession:A,className:lt,style:vt,zIndex:Se=2147483647}=r,Ee=bn(Q),Z=kn(Ee,we,Ae);n.useEffect(()=>{An(),Tn()},[Ee]);const Ye=E!==void 0,[Ge,Te]=n.useState(()=>{var g;return E??((g=C==null?void 0:C[0])==null?void 0:g.id)}),Re=Ye?E:Ge,J=n.useMemo(()=>(C==null?void 0:C.find(g=>g.id===Re))??null,[C,Re]),ct=(J==null?void 0:J.agentId)??i,Ke=f==="EMBEDDED",[ee,te]=vn({value:p,defaultValue:c,onChange:L,persistKey:v,disablePersistence:Ke||x}),se=xn(w),he=dn(),Y=fn(),ae=pn(),me=hn(),De=mn(),[xt,Je]=n.useState(!1),[ge,Xe]=n.useState(!1),[Qe,Ze]=n.useState(!1),[ye,ve]=n.useState(!1),[Pe,ut]=n.useState(!1),$e=ur({baseUrl:a,config:u}),Ne=n.useRef($e);Ne.current=$e;const m=n.useRef(it),U=n.useRef(qe),bt=n.useRef(Ue),wt=n.useRef(at),Et=n.useRef(st),Rt=n.useRef(ne),Nt=n.useRef(Fe),_t=n.useRef(Ve),le=n.useRef(null);m.current=it,U.current=qe,bt.current=Ue,wt.current=at,Et.current=st,Rt.current=ne,Nt.current=Fe,_t.current=Ve;function xe(g){const h=_t.current;return h?h.includes(g):!0}function be(g,h){console.warn(`[LiveLayer] Agent command "${g}" blocked — capability "${h}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const et=n.useCallback(g=>{var V,re,ue,nt;const h=g;if(!(!h.type||typeof h.type!="string")){if(Ce==null||Ce({eventName:h.type,data:g}),h.type==="navigate"){if(!xe("navigate")){be("navigate","navigate");return}const j=typeof h.href=="string"?h.href:null;if(!j){console.warn(`[LiveLayer] Agent emitted "navigate" without href. Skipping. Check your agent's tool schema. See https://livelayer.studio/docs/errors/navigate-missing-href`);return}if(Ne.current.playPageChange(),m.current){try{m.current(j)}catch(R){console.warn(`[LiveLayer] onNavigate threw for "${j}". Falling back. Error:`,R)}return}if(typeof document<"u"){const R=document.querySelector(`a[href="${j.replace(/"/g,'\\"')}"]`);if(R){R.click();return}}if(typeof window<"u"&&typeof history<"u")try{history.pushState({},"",j),window.dispatchEvent(new PopStateEvent("popstate"))}catch(R){console.warn(`[LiveLayer] history.pushState fallback failed for "${j}". Pass an onNavigate prop to use your router directly. See https://livelayer.studio/docs/react/navigation`,R)}return}if(h.type==="scroll_to"){if(!xe("scroll")){be("scroll_to","scroll");return}const j=typeof h.selector=="string"?h.selector:null;if(!j)return;const R=h.behavior==="instant"?"instant":"smooth";if(U.current){try{U.current(j,R)}catch(P){console.warn("[LiveLayer] onScrollToSelector threw.",P)}return}if(typeof document<"u"){let P=null;try{P=document.querySelector(j)}catch{console.warn(`[LiveLayer] scroll_to: invalid selector "${j}".`);return}if(!P){console.warn(`[LiveLayer] scroll_to: no element matched "${j}". The user may be on a different page. See https://livelayer.studio/docs/errors/scroll-no-match`);return}P.scrollIntoView({behavior:R,block:"start"})}return}if(h.type==="request_page_context"){if(!xe("read_page")){be("request_page_context","read_page");return}const j=typeof h.requestId=="string"?h.requestId:void 0,R=(V=le.current)==null?void 0:V.call(le),P=q=>{const M=R,K=M==null?void 0:M.localParticipant;if(K!=null&&K.publishData)try{const X=j?{...q,requestId:j}:q,Oe=new TextEncoder().encode(JSON.stringify(X));K.publishData(Oe,{reliable:!0})}catch(X){console.warn("[LiveLayer] publishData failed.",X)}},I=Rt.current,B=Et.current;try{if(B){const q=B(I);if(q instanceof Promise){P({type:"page_context_pending"}),q.then(M=>P({type:"page_context",context:M})).catch(M=>{console.warn("[LiveLayer] getPageContext rejected; falling back to default walker.",M),P({type:"page_context",context:Ct(I)})});return}P({type:"page_context",context:q});return}P({type:"page_context",context:Ct(I)})}catch(q){console.warn("[LiveLayer] page-context extraction threw. Sending empty context.",q),P({type:"page_context",context:{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:I}})}return}if(h.type==="scroll_page"){if(!xe("scroll")){be("scroll_page","scroll");return}const j=h.direction;if(j!=="up"&&j!=="down"&&j!=="top"&&j!=="bottom"){console.warn(`[LiveLayer] scroll_page: invalid direction "${String(j)}". Expected up | down | top | bottom.`);return}const R=h.behavior==="instant"?"instant":"smooth";if(bt.current){try{bt.current(j,R)}catch(M){console.warn("[LiveLayer] onScrollPage threw.",M)}return}if(typeof window>"u")return;const P={behavior:R},I=qr(),B=M=>{I instanceof Window?I.scrollBy({top:M,...P}):I.scrollBy({top:M,...P})},q=M=>{I instanceof Window?I.scrollTo({top:M,...P}):I.scrollTo({top:M,...P})};j==="up"?B(-an(I)):j==="down"?B(an(I)):q(j==="top"?0:Fr(I));return}if(h.type==="click"){if(!xe("click")){be("click","click");return}const j=typeof h.selector=="string"?h.selector:null;if(!j){console.warn("[LiveLayer] click: missing selector.");return}if(wt.current){try{wt.current(j)}catch(P){console.warn("[LiveLayer] onClick threw.",P)}return}if(typeof document>"u")return;let R=null;try{R=document.querySelector(j)}catch{console.warn(`[LiveLayer] click: invalid selector "${j}".`);return}if(!R){console.warn(`[LiveLayer] click: no element matched "${j}". See https://livelayer.studio/docs/errors/click-no-match`);return}if(R.closest('[data-ll-private="true"], .ll-widget')){console.warn("[LiveLayer] click: refusing to click element inside a private subtree.");return}(re=R.click)==null||re.call(R);return}if(h.type==="fill_form"||h.type==="focus_field"){if(!xe("fill_forms")){be(h.type,"fill_forms");return}if(typeof document>"u")return;h.type==="fill_form"&&Ne.current.playConfirmation();const j=typeof h.formId=="string"?h.formId:null;if(!j){console.warn(`[LiveLayer] ${h.type}: missing formId.`);return}const R=document.querySelector(`[data-ll-form="${j.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] ${h.type}: no form with data-ll-form="${j}". Tag your form with <LiveLayerForm id> or data-ll-form. See https://livelayer.studio/docs/react/forms`);return}if(R.closest('[data-ll-private="true"], .ll-widget')){console.warn(`[LiveLayer] ${h.type}: refusing to touch a form in a private subtree.`);return}if(h.type==="focus_field"){const I=typeof h.fieldName=="string"?h.fieldName:null;if(!I){console.warn("[LiveLayer] focus_field: missing fieldName.");return}const B=R.querySelector(`[data-ll-field="${I.replace(/"/g,'\\"')}"]`);if(!B){console.warn(`[LiveLayer] focus_field: no field "${I}" in form "${j}".`);return}if(!yt(B)){console.warn(`[LiveLayer] focus_field: field "${I}" is privacy-protected and not focusable.`);return}B.focus();return}const P=h.values&&typeof h.values=="object"?h.values:null;if(!P){console.warn("[LiveLayer] fill_form: missing or invalid values.");return}for(const[I,B]of Object.entries(P)){if(typeof B!="string")continue;const q=R.querySelector(`[data-ll-field="${I.replace(/"/g,'\\"')}"]`);if(!q){console.warn(`[LiveLayer] fill_form: no field "${I}" in form "${j}". Skipping.`);continue}if(!yt(q)){console.warn(`[LiveLayer] fill_form: field "${I}" is privacy-protected (password / cc-* / private). Skipping.`);continue}try{Or(q,B)}catch(M){console.warn(`[LiveLayer] fill_form: failed to set "${I}".`,M)}}return}if(h.type==="submit_form"){if(!xe("submit_forms")){be("submit_form","submit_forms");return}if(typeof document>"u")return;const j=typeof h.formId=="string"?h.formId:null;if(!j){console.warn("[LiveLayer] submit_form: missing formId.");return}Ne.current.playConfirmation();const R=document.querySelector(`[data-ll-form="${j.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] submit_form: no form with data-ll-form="${j}".`);return}if(R.closest('[data-ll-private="true"], .ll-widget')){console.warn("[LiveLayer] submit_form: refusing to submit a form in a private subtree.");return}const P=typeof h.requestId=="string"?h.requestId:void 0,I=(ue=le.current)==null?void 0:ue.call(le),B=K=>{const X=I,Oe=X==null?void 0:X.localParticipant;if(Oe!=null&&Oe.publishData)try{const Kn=P?{...K,requestId:P}:K,Jn=new TextEncoder().encode(JSON.stringify(Kn));Oe.publishData(Jn,{reliable:!0})}catch{}};let q=!1;const M=()=>{q=!0,B({type:"form_submitted",formId:j})};R.addEventListener("submit",M,{once:!0});try{typeof R.requestSubmit=="function"?R.requestSubmit():R.submit()}catch(K){console.warn("[LiveLayer] submit_form: requestSubmit threw.",K),R.removeEventListener("submit",M),B({type:"form_submit_blocked",formId:j,reason:"exception"});return}setTimeout(()=>{q||(R.removeEventListener("submit",M),B({type:"form_submit_blocked",formId:j,reason:"validation"}))},500);return}if(h.type==="request_routes"){if(!xe("read_page")){be("request_routes","read_page");return}const j=typeof h.requestId=="string"?h.requestId:void 0,P=(nt=le.current)==null?void 0:nt.call(le),I=P==null?void 0:P.localParticipant;if(!(I!=null&&I.publishData))return;const B=M=>{try{const K=j?{type:"routes",routes:M,requestId:j}:{type:"routes",routes:M},X=new TextEncoder().encode(JSON.stringify(K));I.publishData(X,{reliable:!0})}catch(K){console.warn("[LiveLayer] request_routes: publishData failed.",K)}},q=Nt.current;if(q){try{const M=q(),K=X=>{if(!Array.isArray(X)){B([]);return}B(X.map(Mn).slice(0,200))};M instanceof Promise?M.then(K).catch(X=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",X),B(ht())}):K(M)}catch(M){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",M),B(ht())}return}try{B(ht())}catch(M){console.warn("[LiveLayer] request_routes: extractRoutes threw.",M)}return}Ur.has(h.type)||Le==null||Le(h)}},[Le,Ce]),G=un({agentId:A?"__controlled__":ct,baseUrl:a,apiKey:s,sessionEndpoint:d,sessionBody:l,onDataMessage:A?void 0:et});n.useEffect(()=>{if(A!=null&&A.subscribeToDataMessages)return A.subscribeToDataMessages(et)},[A,et]),le.current=()=>{var g;return(g=G.getRoom)==null?void 0:g.call(G)},n.useEffect(()=>{var V;if(typeof window>"u")return;const g=((V=window.location)==null?void 0:V.hostname)||"";if(g==="localhost"||g==="127.0.0.1"||g==="0.0.0.0"||g.endsWith(".local")||g.endsWith(".test"))return window.__livelayerSimulateCommand=re=>{try{et(re)}catch(ue){console.warn("[LiveLayer] simulate-command threw:",ue)}},()=>{delete window.__livelayerSimulateCommand}},[et]);const b=n.useMemo(()=>A?{connectionState:A.connectionState,agentState:A.agentState,transcript:A.transcript,videoElement:A.videoElement,audioElement:A.audioElement,canResume:A.canResume,error:A.error,agentConfig:null,connect:async()=>{await A.onConnect()},disconnect:()=>A.onDisconnect(),getRoom:G.getRoom,isControlled:!0}:{connectionState:G.connectionState,agentState:G.agentState,transcript:G.transcript,videoElement:G.videoElement,audioElement:G.audioElement,canResume:G.canResume,error:G.error,agentConfig:G.agentConfig,connect:G.connect,disconnect:G.disconnect,getRoom:G.getRoom,isControlled:!1},[A,G]),At=n.useRef(b);At.current=b;const Mt=n.useRef(A);Mt.current=A,n.useImperativeHandle(o,()=>({sendData:async g=>{var ue,nt;const h=Mt.current;if(h!=null&&h.publishData){try{await h.publishData(g)}catch(j){console.warn("[AvatarWidget] sendData (controlled) failed:",j)}return}const V=(nt=(ue=At.current)==null?void 0:ue.getRoom)==null?void 0:nt.call(ue),re=V==null?void 0:V.localParticipant;if(re!=null&&re.publishData)try{const j=new TextEncoder().encode(JSON.stringify(g));await re.publishData(j,{reliable:!0})}catch(j){console.warn("[AvatarWidget] sendData failed:",j)}}}),[]);const It=n.useRef(null);n.useEffect(()=>{const g=b.videoElement,h=It.current;if(!(!g||!h))return h.appendChild(g),()=>{g.parentNode===h&&h.removeChild(g)}},[b.videoElement]),n.useEffect(()=>{const g=b.audioElement;if(!g)return;he.attach(g);const h=g.play();return h&&typeof h.catch=="function"&&h.catch(V=>{(V==null?void 0:V.name)==="NotAllowedError"&&Je(!0)}),()=>{he.detach()}},[b.audioElement]),n.useEffect(()=>{if(b.isControlled||b.connectionState!=="connected")return;const g=b.getRoom();if(g)return Y.setupMic(g).catch(()=>{}),()=>{Y.teardownMic()}},[b.isControlled,b.connectionState]),n.useEffect(()=>{var h;if(b.connectionState!=="connected")return;const g=b.isControlled?(h=A==null?void 0:A.getRoom)==null?void 0:h.call(A):b.getRoom();if(g)return ae.attachRoom(g),me.attachRoom(g),b.isControlled&&Y.attachRoom(g),De.refresh(),()=>{ae.teardown(),me.teardown()}},[b.isControlled,b.connectionState,A]),n.useEffect(()=>{const g=b.audioElement;g&&(g.muted=Pe)},[b.audioElement,Pe]);const $n=n.useCallback(g=>{const h={type:"user_message",text:g};if(A!=null&&A.publishData){try{A.publishData(h)}catch{}return}const V=b.getRoom();if(V)try{const re=new TextEncoder().encode(JSON.stringify(h));V.localParticipant.publishData(re,{reliable:!0})}catch{}},[b,A]),zn=n.useCallback(()=>{ut(g=>!g)},[]);n.useEffect(()=>{je==null||je(b.connectionState),b.connectionState==="connected"?_e==null||_e():b.connectionState==="disconnected"&&(Me==null||Me())},[b.connectionState,_e,Me,je]),n.useEffect(()=>{ke==null||ke(b.transcript)},[b.transcript,ke]),n.useEffect(()=>{Ie==null||Ie(b.agentState)},[b.agentState,Ie]),n.useEffect(()=>{$e.setThinking(b.agentState==="thinking")},[b.agentState,$e]);const Tt=n.useRef(!1);n.useEffect(()=>{b.isControlled||!y||Tt.current||Z&&b.connectionState==="idle"&&(Tt.current=!0,b.connect())},[y,b.connectionState,b,Z]);const On=n.useCallback(g=>{const h=C==null?void 0:C.find(V=>V.id===g);h&&(Ze(!1),g!==Re&&(Xe(!0),b.disconnect(),Ye||Te(g),N==null||N(h)))},[C,Re,b,Ye,N]);n.useEffect(()=>{ge&&b.connectionState==="connected"&&Xe(!1)},[b.connectionState,ge]),n.useEffect(()=>{if(!Qe)return;const g=h=>{h.key==="Escape"&&Ze(!1)};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[Qe]);const Hn=!!$||!!(J!=null&&J.avatarImageUrl)||b.isControlled,tt=gn(ct,a,Hn);Ve===void 0&&((zt=tt.info)!=null&&zt.capabilities)&&(_t.current=tt.info.capabilities);const dt=(J==null?void 0:J.name)??z??((Ot=b.agentConfig)==null?void 0:Ot.name)??((Ht=tt.info)==null?void 0:Ht.name)??"Live Layer",kt=(J==null?void 0:J.avatarImageUrl)??$??((Wt=b.agentConfig)==null?void 0:Wt.avatarImageUrl)??((Bt=tt.info)==null?void 0:Bt.avatarImageUrl)??null,Wn=k??((qt=b.agentConfig)==null?void 0:qt.idleLoopUrl)??((Ft=tt.info)==null?void 0:Ft.idleLoopUrl)??null,Bn=S??null,qn=n.useCallback(()=>te("expanded"),[te]),Fn=n.useCallback(()=>te("minimized"),[te]),Dt=n.useCallback(()=>{b.disconnect(),te("hidden")},[b,te]),Un=n.useCallback(()=>{const g=b.audioElement;g&&g.play().then(()=>Je(!1)).catch(()=>{})},[b.audioElement]),Vn=n.useCallback(()=>{Je(!1),b.connect()},[b]),ze={...vt,...Ke?{}:{zIndex:Se}};O.primaryColor&&(ze["--ll-color-primary"]=O.primaryColor),O.accentColor&&(ze["--ll-color-accent"]=O.accentColor),O.backgroundColor&&(ze["--ll-color-bg"]=O.backgroundColor),O.textColor&&(ze["--ll-color-fg"]=O.textColor);const Yn=["ll-widget",`ll-widget--${ee}`,`ll-widget--${se?"mobile":"desktop"}`,lt].filter(Boolean).join(" ");if(!Z)return null;const Gn=t.jsx("div",{className:Yn,style:ze,"data-display-mode":ee,"data-position":_,"data-experience-mode":f==="EMBEDDED"?"embedded":"widget",children:ee==="expanded"&&t.jsx(Cr,{position:_,isMobile:se,agentName:dt,avatarImageUrl:kt,idleLoopUrl:Wn,greeting:Bn,branding:O,teamMembers:C,currentTeamMemberId:Re,isSwitchingTeamMember:ge,teamSwitcherOpen:Qe,onToggleTeamSwitcher:()=>Ze(g=>!g),onSelectTeamMember:On,connectionState:b.connectionState,agentState:b.agentState,transcript:b.transcript,isMuted:Y.isMuted,micDevices:De.mics,activeMicId:Y.activeDeviceId,isCameraEnabled:ae.isEnabled,cameraPreviewEl:ae.previewEl,cameraDevices:De.cameras,activeCameraId:ae.activeDeviceId,isScreenShareEnabled:me.isEnabled,screenPreviewEl:me.previewEl,isSpeakerMuted:Pe,allowCamera:H,allowScreenShare:T,allowTyping:W,showMinimize:D,showClose:F,chromeless:oe,compactControls:fe,transforming:ce,transformingLabel:pe,languageMenuOpen:ye,onToggleLanguageMenu:()=>ve(g=>!g),needsUserGesture:xt,canResume:b.canResume,micError:Y.micError,error:b.error,avatarVideoContainerRef:It,agentVideoEl:b.videoElement,onConnect:()=>void b.connect(),onDisconnect:()=>b.disconnect(),onRetry:Vn,onResumeAudio:Un,onToggleMute:Y.toggleMute,onSwitchMicDevice:g=>void Y.switchDevice(g),onToggleCamera:()=>void ae.toggle(),onSwitchCameraDevice:g=>void ae.switchDevice(g),onToggleScreenShare:()=>void me.toggle(),onToggleSpeaker:zn,onSendMessage:$n,onMinimize:Fn,onClose:Dt,onClearMicError:Y.clearError})}),Pt=ee==="hidden"||ee==="minimized"?t.jsxs("div",{className:["ll-widget","ll-widget--floating",`ll-widget--${ee}`,`ll-widget--${se?"mobile":"desktop"}`].join(" "),style:ze,"data-display-mode":ee,"data-position":_,children:[ee==="hidden"&&t.jsx(gr,{position:_,isMobile:se,isSpeaking:b.agentState==="speaking",onExpand:()=>te("expanded"),label:`Open ${dt} widget`,avatarImageUrl:kt,agentName:dt,containerEl:ie}),ee==="minimized"&&t.jsx(vr,{position:_,isMobile:se,agentName:dt,avatarImageUrl:kt,agentState:b.agentState,isMuted:Y.isMuted,audioLevel:he,onExpand:qn,onToggleMute:Y.toggleMute,onClose:Dt})]}):null,$t=ie??(typeof document<"u"?document.body:null);return t.jsxs(t.Fragment,{children:[Gn,Pt&&$t&&Lt.createPortal(Pt,$t)]})});Dn.displayName="AvatarWidgetInner";const Pn=n.forwardRef(function(r,o){return t.jsx(cn,{children:t.jsx(Dn,{...r,ref:o})})});Pn.displayName="AvatarWidget";const Vr=({agentId:e,baseUrl:r,apiKey:o,mode:i,onAgentEvent:s,className:a,style:d})=>{const l=n.useRef(null),u=n.useRef(null),f=n.useRef(s);f.current=s;const y=n.useCallback(p=>{var L;const c=p.detail;(L=f.current)==null||L.call(f,c)},[]);return n.useEffect(()=>{const p=l.current;if(!p)return;const c=document.createElement("livelayer-widget");return c.setAttribute("agent-id",e),r&&c.setAttribute("base-url",r),o&&c.setAttribute("api-key",o),i&&c.setAttribute("mode",i),c.addEventListener("agent-event",y),p.appendChild(c),u.current=c,()=>{c.removeEventListener("agent-event",y),p.removeChild(c),u.current=null}},[e]),n.useEffect(()=>{u.current&&(i?u.current.setAttribute("mode",i):u.current.removeAttribute("mode"))},[i]),t.jsx("div",{ref:l,className:a,style:d})},Yr=n.forwardRef(function({id:r,intent:o,as:i="div",className:s,style:a,children:d},l){return n.createElement(i,{ref:l,"data-ll-region":r,"data-ll-intent":o,className:s,style:a},d)}),Gr=n.forwardRef(function({id:r,intent:o,children:i,...s},a){return t.jsx("form",{ref:a,"data-ll-form":r,"data-ll-intent":o,...s,children:i})}),Kr=n.forwardRef(function(r,o){const{name:i,label:s,labelClassName:a}=r,d={name:i,"data-ll-field":i};let l;if("as"in r&&r.as==="textarea"){const{name:u,label:f,labelClassName:y,as:p,...c}=r;l=t.jsx("textarea",{ref:o,...d,...c})}else if("as"in r&&r.as==="select"){const{name:u,label:f,labelClassName:y,as:p,children:c,...L}=r;l=t.jsx("select",{ref:o,...d,...L,children:c})}else{const{name:u,label:f,labelClassName:y,as:p,...c}=r;l=t.jsx("input",{ref:o,...d,...c})}return s===void 0?l:t.jsxs("label",{className:a,children:[s,l]})});let ln=1;function Jr({onMount:e,defaultOpen:r=!1,storageKey:o="ll-debug-open"}){const[i,s]=n.useState(r),[a,d]=n.useState([]),[l,u]=n.useState(""),[f,y]=n.useState(!1),p=n.useRef(new Set),c=n.useRef([]),L=n.useRef(f);L.current=f,n.useEffect(()=>{try{const v=localStorage.getItem(o);v==="1"&&s(!0),v==="0"&&s(!1)}catch{}},[o]),n.useEffect(()=>{try{localStorage.setItem(o,i?"1":"0")}catch{}},[i,o]),n.useEffect(()=>{const v=x=>{(x.metaKey||x.ctrlKey)&&x.shiftKey&&x.key.toLowerCase()==="l"&&(x.preventDefault(),s(C=>!C))};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[]),n.useEffect(()=>{const v=setInterval(()=>{if(c.current.length===0||L.current)return;const x=c.current.splice(0,c.current.length);d(C=>[...x.reverse(),...C].slice(0,200))},100);return()=>clearInterval(v)},[]);const _=n.useRef(!1);if(n.useEffect(()=>{!e||_.current||(_.current=!0,e(v=>{c.current.push({id:ln++,ts:Date.now(),kind:"event",type:v.eventName,data:v.data})}))},[e]),n.useEffect(()=>{const v=console.warn,x=console.log,C=(E,N)=>function(...k){try{const S=typeof k[0]=="string"?k[0]:"";S.startsWith("[LiveLayer]")&&c.current.push({id:ln++,ts:Date.now(),kind:E,type:S.slice(0,120),data:{args:k.slice(1).map($=>Qr($))}})}catch{}return N.apply(this,k)};return console.warn=C("warn",v),console.log=C("log",x),()=>{console.warn=v,console.log=x}},[]),!i)return t.jsx("button",{type:"button",onClick:()=>s(!0),title:"Open LiveLayer debug panel (Cmd/Ctrl + Shift + L)","aria-label":"Open LiveLayer debug panel",style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.18)",borderRadius:999,padding:"6px 10px",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",cursor:"pointer",boxShadow:"0 4px 12px rgba(0,0,0,0.35)",opacity:.85},children:"🛰 LL debug"});const w=a.filter(v=>{if(!l)return!0;const x=l.toLowerCase();return v.type.toLowerCase().includes(x)||JSON.stringify(v.data||{}).toLowerCase().includes(x)});return t.jsxs("div",{style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,width:380,maxHeight:"60vh",background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.16)",borderRadius:12,boxShadow:"0 16px 48px rgba(0,0,0,0.5)",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",display:"flex",flexDirection:"column",overflow:"hidden"},children:[t.jsxs("div",{style:{padding:"8px 10px",background:"rgba(255,255,255,0.04)",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{style:{fontWeight:600,fontSize:12},children:"LiveLayer debug"}),t.jsxs("span",{style:{fontSize:10,color:"rgba(255,255,255,0.4)"},children:[a.length," event",a.length===1?"":"s"]}),t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:()=>y(v=>!v),style:jt(f?"#f59e0b":"transparent"),title:"Pause / resume capture",children:f?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{d([]),c.current=[]},style:jt("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:jt("transparent"),"aria-label":"Close",title:"Close (Cmd/Ctrl + Shift + L)",children:"✕"})]}),t.jsx("input",{type:"text",value:l,onChange:v=>u(v.target.value),placeholder:"filter by type or data…",style:{margin:8,padding:"6px 8px",background:"rgba(255,255,255,0.06)",border:"1px solid rgba(255,255,255,0.1)",borderRadius:6,color:"#fff",fontSize:11,outline:"none"}}),t.jsx("div",{style:{flex:1,overflowY:"auto",padding:"0 8px 8px"},children:w.length===0?t.jsxs("div",{style:{padding:14,fontSize:11,color:"rgba(255,255,255,0.4)",lineHeight:1.5},children:["No events yet. Connect to the agent and trigger a tool call — the events will stream in here. You can also dispatch commands manually in DevTools:",t.jsx("pre",{style:{marginTop:6,background:"rgba(255,255,255,0.04)",padding:6,borderRadius:4,fontSize:10,whiteSpace:"pre-wrap"},children:`window.__livelayerSimulateCommand({
3
3
  type: "navigate",
4
4
  href: "/about"
5
- })`})]}):_.map(w=>t.jsx(Xr,{entry:w,expanded:p.current.has(w.id),onToggle:()=>{p.current.has(w.id)?p.current.delete(w.id):p.current.add(w.id),d(g=>[...g])}},w.id))})]})}function Xr({entry:e,expanded:r,onToggle:o}){const i=e.kind==="warn"?"#f59e0b":e.type.startsWith("[LiveLayer]")?"#94a3b8":e.type==="navigate"||e.type==="scroll_page"||e.type==="scroll_to"||e.type==="click"?"#22c55e":e.type==="fill_form"||e.type==="submit_form"||e.type==="focus_field"?"#a78bfa":e.type==="request_page_context"||e.type==="request_routes"?"#38bdf8":e.type==="agent_state"?"#facc15":"#cbd5e1",s=new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1});return t.jsxs("button",{type:"button",onClick:o,style:{textAlign:"left",background:"transparent",border:0,color:"#fff",width:"100%",padding:"6px 4px",cursor:"pointer",borderBottom:"1px solid rgba(255,255,255,0.04)",fontSize:11,lineHeight:1.4},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[t.jsx("span",{style:{color:"rgba(255,255,255,0.4)",fontVariantNumeric:"tabular-nums",fontSize:10},children:s}),t.jsx("span",{style:{color:i,fontWeight:600,flexShrink:0},children:e.type.length>50?e.type.slice(0,50)+"…":e.type})]}),r&&e.data&&t.jsx("pre",{style:{marginTop:6,padding:6,background:"rgba(255,255,255,0.04)",borderRadius:4,fontSize:10,overflowX:"auto",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:JSON.stringify(e.data,null,2)})]})}function jt(e){return{background:e,color:"#fff",border:"1px solid rgba(255,255,255,0.16)",borderRadius:999,padding:"3px 8px",fontSize:10,cursor:"pointer"}}function Qr(e){try{return e instanceof Error?{message:e.message,stack:e.stack}:(JSON.stringify(e),e)}catch{return String(e)}}function Zr(){const[e,r]=n.useState([]),o=n.useCallback(s=>{r(a=>{const d=a.findIndex(l=>l.id===s.id);if(d>=0){const l=a.slice();return l[d]=s,l}return[...a,s]})},[]),i=n.useCallback(()=>r([]),[]);return{entries:e,pushSegment:o,clear:i,latest:e.length>0?e[e.length-1]:null}}exports.AvatarWidget=Pn;exports.ErrorBoundary=cn;exports.LiveLayerDebugPanel=Jr;exports.LiveLayerField=Kr;exports.LiveLayerForm=Gr;exports.LiveLayerRegion=Yr;exports.LiveLayerWidget=Vr;exports.clearPageContextCache=An;exports.clearRoutesCache=Tn;exports.extractPageContext=Nn;exports.extractRoutes=In;exports.getCachedPageContext=Ct;exports.getCachedRoutes=ht;exports.matchesPattern=wn;exports.normalizeRouteInput=Mn;exports.shouldRenderAtPath=_n;exports.useAgentInfo=gn;exports.useAudioLevel=dn;exports.useCameraState=pn;exports.useDisplayMode=yn;exports.useDisplayModePersistence=vn;exports.useIsMobile=xn;exports.useLiveKitSession=un;exports.useMediaDevices=mn;exports.useMicrophoneState=fn;exports.usePathname=bn;exports.useRouteMatch=kn;exports.useScreenShareState=hn;exports.useTranscript=Zr;
5
+ })`})]}):w.map(v=>t.jsx(Xr,{entry:v,expanded:p.current.has(v.id),onToggle:()=>{p.current.has(v.id)?p.current.delete(v.id):p.current.add(v.id),d(x=>[...x])}},v.id))})]})}function Xr({entry:e,expanded:r,onToggle:o}){const i=e.kind==="warn"?"#f59e0b":e.type.startsWith("[LiveLayer]")?"#94a3b8":e.type==="navigate"||e.type==="scroll_page"||e.type==="scroll_to"||e.type==="click"?"#22c55e":e.type==="fill_form"||e.type==="submit_form"||e.type==="focus_field"?"#a78bfa":e.type==="request_page_context"||e.type==="request_routes"?"#38bdf8":e.type==="agent_state"?"#facc15":"#cbd5e1",s=new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1});return t.jsxs("button",{type:"button",onClick:o,style:{textAlign:"left",background:"transparent",border:0,color:"#fff",width:"100%",padding:"6px 4px",cursor:"pointer",borderBottom:"1px solid rgba(255,255,255,0.04)",fontSize:11,lineHeight:1.4},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[t.jsx("span",{style:{color:"rgba(255,255,255,0.4)",fontVariantNumeric:"tabular-nums",fontSize:10},children:s}),t.jsx("span",{style:{color:i,fontWeight:600,flexShrink:0},children:e.type.length>50?e.type.slice(0,50)+"…":e.type})]}),r&&e.data&&t.jsx("pre",{style:{marginTop:6,padding:6,background:"rgba(255,255,255,0.04)",borderRadius:4,fontSize:10,overflowX:"auto",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:JSON.stringify(e.data,null,2)})]})}function jt(e){return{background:e,color:"#fff",border:"1px solid rgba(255,255,255,0.16)",borderRadius:999,padding:"3px 8px",fontSize:10,cursor:"pointer"}}function Qr(e){try{return e instanceof Error?{message:e.message,stack:e.stack}:(JSON.stringify(e),e)}catch{return String(e)}}function Zr(){const[e,r]=n.useState([]),o=n.useCallback(s=>{r(a=>{const d=a.findIndex(l=>l.id===s.id);if(d>=0){const l=a.slice();return l[d]=s,l}return[...a,s]})},[]),i=n.useCallback(()=>r([]),[]);return{entries:e,pushSegment:o,clear:i,latest:e.length>0?e[e.length-1]:null}}exports.AvatarWidget=Pn;exports.ErrorBoundary=cn;exports.LiveLayerDebugPanel=Jr;exports.LiveLayerField=Kr;exports.LiveLayerForm=Gr;exports.LiveLayerRegion=Yr;exports.LiveLayerWidget=Vr;exports.clearPageContextCache=An;exports.clearRoutesCache=Tn;exports.extractPageContext=Nn;exports.extractRoutes=In;exports.getCachedPageContext=Ct;exports.getCachedRoutes=ht;exports.matchesPattern=wn;exports.normalizeRouteInput=Mn;exports.shouldRenderAtPath=_n;exports.useAgentInfo=gn;exports.useAudioLevel=dn;exports.useCameraState=pn;exports.useDisplayMode=yn;exports.useDisplayModePersistence=vn;exports.useIsMobile=xn;exports.useLiveKitSession=un;exports.useMediaDevices=mn;exports.useMicrophoneState=fn;exports.usePathname=bn;exports.useRouteMatch=kn;exports.useScreenShareState=hn;exports.useTranscript=Zr;