@livelayer/react 0.9.3 → 0.9.5

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.d.ts CHANGED
@@ -390,6 +390,20 @@ export declare interface ControlledSession {
390
390
  * No-op when omitted (typed messages silently drop).
391
391
  */
392
392
  publishData?: (data: Record<string, unknown>) => void | Promise<void>;
393
+ /**
394
+ * Return the host-owned LiveKit Room (or null if not yet connected).
395
+ * Lets the widget's camera + screen-share hooks attach to your Room
396
+ * so the toolbar buttons actually publish tracks. Without this hook
397
+ * the camera and screen-share toggles are no-ops in controlled mode.
398
+ *
399
+ * Microphone is intentionally NOT wired through this — controlled
400
+ * consumers usually manage mic publishing themselves, so the widget
401
+ * leaves it alone to avoid a duplicate-track conflict.
402
+ *
403
+ * Type is `unknown` to keep the package free of a hard livekit-client
404
+ * peerDep — cast to `Room` on the host side.
405
+ */
406
+ getRoom?: () => unknown | null;
393
407
  }
394
408
 
395
409
  export declare type DisplayMode = "hidden" | "minimized" | "expanded";
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"),Un=require("@livelayer/sdk"),ut=require("livekit-client"),Vn=require("react-dom");class rn 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 on(e){const[r,o]=n.useState("idle"),[i,s]=n.useState("idle"),[a,f]=n.useState([]),[d,u]=n.useState(null),[p,m]=n.useState(null),[l,c]=n.useState(null),[L,N]=n.useState(!1),[k,x]=n.useState(null),v=n.useRef(null),C=n.useRef(e.onDataMessage);C.current=e.onDataMessage,n.useEffect(()=>{const S={onConnectionStateChange:I=>{o(I),I==="connected"&&x(null)},onAgentStateChange:s,onTranscript:I=>f([...I]),onAgentConfig:u,onAudioTrack:I=>c(I),onVideoTrack:I=>m(I),onVideoTrackRemoved:()=>m(null),onError:I=>x(I),onDataMessage:I=>{var j;(j=C.current)==null||j.call(C,I)},onResumabilityChange:N},$=new Un.LiveKitSession({agentId:e.agentId,baseUrl:e.baseUrl,apiKey:e.apiKey,sessionEndpoint:e.sessionEndpoint,sessionBody:e.sessionBody},S);return v.current=$,o("idle"),s("idle"),f([]),u(null),m(null),c(null),N(!1),x(null),()=>{var I;(I=$.destroy)==null||I.call($),v.current=null}},[e.agentId,e.baseUrl,e.apiKey,e.sessionEndpoint,JSON.stringify(e.sessionBody??{})]);const E=n.useCallback(async()=>{const S=v.current;if(S)try{await S.connect()}catch($){throw x($ instanceof Error?$.message:String($)),$}},[]),M=n.useCallback(()=>{const S=v.current;S&&S.disconnect()},[]),b=n.useCallback(()=>{var S;return((S=v.current)==null?void 0:S.getRoom())??null},[]);return{connectionState:r,agentState:i,transcript:a,agentConfig:d,videoElement:p,audioElement:l,canResume:L,error:k,connect:E,disconnect:M,getRoom:b,session:v.current}}function sn(){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),f=n.useCallback(()=>{const l=r.current;if(!l){i.current=null;return}(!a.current||a.current.length!==l.frequencyBinCount)&&(a.current=new Uint8Array(new ArrayBuffer(l.frequencyBinCount)));const c=a.current;l.getByteFrequencyData(c);let L=0;for(let k=0;k<c.length;k++)L+=c[k];const N=L/c.length/255;for(const k of s.current)try{k(N)}catch(x){console.error("[useAudioLevel] subscriber threw:",x)}i.current=requestAnimationFrame(f)},[]),d=n.useCallback(()=>{if(e.current||typeof window>"u"||typeof AudioContext>"u")return;const l=new AudioContext,c=l.createAnalyser();c.fftSize=64,c.connect(l.destination),e.current=l,r.current=c},[]),u=n.useCallback(l=>{if(d(),!(!e.current||!r.current)){if(o.current){try{o.current.disconnect()}catch{}o.current=null}try{const c=e.current.createMediaElementSource(l);c.connect(r.current),o.current=c}catch(c){console.warn("[useAudioLevel] createMediaElementSource failed:",c);return}i.current===null&&(i.current=requestAnimationFrame(f))}},[d,f]),p=n.useCallback(()=>{if(i.current!==null&&(cancelAnimationFrame(i.current),i.current=null),o.current){try{o.current.disconnect()}catch{}o.current=null}},[]),m=n.useCallback(l=>(s.current.add(l),()=>{s.current.delete(l)}),[]);return n.useEffect(()=>()=>{if(p(),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},[p]),{attach:u,detach:p,subscribe:m}}function an(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),s=n.useRef(null),a=n.useRef(null),f=n.useCallback(async m=>{if(s.current&&a.current){try{await a.current.localParticipant.unpublishTrack(s.current)}catch{}s.current.stop(),s.current=null}a.current=m,i(null);try{const l=await ut.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});await m.localParticipant.publishTrack(l),s.current=l,r(l.isMuted)}catch(l){const c=l instanceof Error&&l.name==="NotAllowedError"?"Enable your microphone to talk with the agent.":"Microphone unavailable. Check browser permissions and try again.";throw i(c),l}},[]),d=n.useCallback(()=>{const m=s.current;m&&(m.isMuted?(m.unmute(),r(!1)):(m.mute(),r(!0)))},[]),u=n.useCallback(()=>{const m=s.current,l=a.current;if(m&&l){try{l.localParticipant.unpublishTrack(m)}catch{}m.stop()}s.current=null,a.current=null,r(!1)},[]),p=n.useCallback(()=>i(null),[]);return{isMuted:e,micError:o,toggleMute:d,setupMic:f,teardownMic:u,clearError:p}}const Yn={resolution:{width:640,height:480,frameRate:24}};function ln(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),[f,d]=n.useState(""),u=n.useRef(null),p=n.useRef(null),m=n.useCallback(v=>{u.current=v},[]),l=n.useCallback(()=>{const v=u.current,C=p.current;if(C&&v){const E=v.localParticipant.getTrackPublication(ut.Track.Source.Camera);if(E!=null&&E.track){try{v.localParticipant.unpublishTrack(E.track)}catch{}E.track.stop()}else C.stop()}p.current=null,a(null),r(!1)},[]),c=n.useCallback(async v=>{const C=u.current;if(C){i(null);try{const E={...Yn};v&&(E.deviceId=v);const M=await ut.createLocalVideoTrack(E);await C.localParticipant.publishTrack(M),p.current=M;const b=M.attach();a(b),r(!0),v&&d(v);try{C.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_camera_on"})),{reliable:!0})}catch{}}catch(E){const M=E instanceof Error&&E.name==="NotAllowedError"?"Enable your camera in the browser to share video.":"Camera unavailable. Check permissions and try again.";i(M)}}},[]),L=n.useCallback(async()=>{e?l():await c(f||void 0)},[e,f,l,c]),N=n.useCallback(async v=>{l(),await c(v)},[l,c]),k=n.useCallback(()=>{l(),u.current=null,i(null),d("")},[l]),x=n.useCallback(()=>i(null),[]);return n.useEffect(()=>()=>{p.current&&p.current.stop()},[]),{isEnabled:e,error:o,previewEl:s,activeDeviceId:f,toggle:L,switchDevice:N,attachRoom:m,teardown:k,clearError:x}}function cn(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),f=n.useRef(null),d=n.useCallback(c=>{f.current=c},[]),u=n.useCallback(()=>a(null),[]),p=n.useCallback(async()=>{const c=f.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 N=()=>{const k=c.localParticipant.getTrackPublication(ut.Track.Source.ScreenShare);if(k!=null&&k.track){const x=k.track.attach();a(x),r(!0);try{c.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_screen_share_on"})),{reliable:!0})}catch{}return}L++<10?setTimeout(N,100):r(!0)};N()}catch(L){const N=L instanceof Error?L.name:"";N!=="NotAllowedError"&&N!=="AbortError"&&i("Screen share unavailable. Try again."),r(!1)}}},[e,u]),m=n.useCallback(()=>{const c=f.current;if(c&&e)try{c.localParticipant.setScreenShareEnabled(!1)}catch{}u(),r(!1),i(null),f.current=null},[e,u]),l=n.useCallback(()=>i(null),[]);return{isEnabled:e,error:o,previewEl:s,toggle:p,attachRoom:d,teardown:m,clearError:l}}function un(){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(f=>f.kind==="audioinput")),i(a.filter(f=>f.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 dn(e,r,o=!1){const[i,s]=n.useState(null),[a,f]=n.useState(null),[d,u]=n.useState(!o&&!!e);return n.useEffect(()=>{if(o||!e){u(!1);return}const p=new AbortController,m=r||"https://app.livelayer.studio";return u(!0),f(null),fetch(`${m}/api/widget/agent/${encodeURIComponent(e)}`,{signal:p.signal}).then(async l=>{if(!l.ok){const c=await l.json().catch(()=>({}));throw new Error(c.error||`HTTP ${l.status}`)}return l.json()}).then(l=>{p.signal.aborted||(s(l),u(!1))}).catch(l=>{p.signal.aborted||(f(l instanceof Error?l.message:"Agent lookup failed"),u(!1))}),()=>p.abort()},[e,r,o]),{info:i,error:a,loading:d}}function Gn(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function Kn(e,r){if(!(typeof window>"u"))try{window.localStorage.setItem(e,r)}catch{}}function fn({value:e,defaultValue:r="expanded",onChange:o}={}){const i=e!==void 0,[s,a]=n.useState(r),f=i?e:s,d=n.useCallback(u=>{u!==f&&(i||a(u),o==null||o(u))},[f,i,o]);return[f,d]}const Jn=["hidden","minimized","expanded"];function Xn(e){return e&&Jn.includes(e)?e:null}function pn({value:e,defaultValue:r="expanded",onChange:o,persistKey:i="ll-widget",disablePersistence:s=!1}={}){const a=`${i}:display-mode`,f=n.useRef(!1),[d,u]=fn({value:e,defaultValue:r,onChange:p=>{e===void 0&&!s&&Kn(a,p),o==null||o(p)}});return n.useEffect(()=>{if(f.current||(f.current=!0,s||e!==void 0))return;const p=Xn(Gn(a));p&&p!==d&&u(p)},[]),[d,u]}const Qn=640;function hn(e=Qn){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 Ht="__llHistoryPatched",dt="ll:pathname";function Zn(){if(typeof window>"u"||window.history[Ht])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(dt)),i},window.history.replaceState=function(...o){const i=r.apply(this,o);return window.dispatchEvent(new Event(dt)),i},window.history[Ht]=!0}function Wt(){return typeof window>"u"?"/":window.location.pathname||"/"}function mn(e){const[r,o]=n.useState(()=>e??Wt());return n.useEffect(()=>{if(e!==void 0)return;Zn();const i=()=>o(Wt());return i(),window.addEventListener("popstate",i),window.addEventListener(dt,i),()=>{window.removeEventListener("popstate",i),window.removeEventListener(dt,i)}},[e]),e??r}const Bt=new Map,er=/[\\^$+?.()|{}[\]]/g;function tr(e){return e.replace(er,"\\$&")}function nr(e){const r=Bt.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),d=tr(a).replace(new RegExp(`\\/${i}`,"g"),"(?:\\/.*)?").replace(new RegExp(i,"g"),".*").replace(new RegExp(s,"g"),"[^/]+"),u=new RegExp(`^${d}\\/?$`);return Bt.set(e,u),u}function rr(e,r){const o=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return nr(e).test(o)}function gn(e,r){return typeof e=="function"?e(r):e instanceof RegExp?e.test(r):rr(e,r)}function qt(e,r){if(!e||e.length===0)return!1;for(const o of e)if(gn(o,r))return!0;return!1}function yn(e,r,o){return e===void 0?!0:qt(o,e)?!1:r&&r.length>0?qt(r,e):!0}function xn(e,r,o){return n.useMemo(()=>yn(e,r,o),[e,r,o])}function or(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 ir(e){const r=n.useMemo(()=>or(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]),f=n.useCallback(()=>{r.action&&s("/audio/confirmation-sound.mp3")},[r.action,s]),d=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 p=new Audio(`${o}/audio/thinking-sound.mp3`);p.loop=!0,p.volume=.3,p.play().catch(()=>{i.current=null}),i.current=p}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:f,setThinking:d}),[a,f,d])}const Ft=({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"})}),Ut=({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"})}),sr=({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"})}),ar={left:180,right:0,up:-90,down:90},Vt=({direction:e="right",className:r})=>t.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,style:{transform:`rotate(${ar[e]}deg)`},"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 6l6 6-6 6"})});function lr(e){return e==="top-left"||e==="bottom-left"?"left":"right"}const vn="ll-hidden-tab-center-y",cr=5,Yt=16;function ur(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(vn);if(!e)return null;const r=Number.parseFloat(e);return Number.isFinite(r)?r:null}catch{return null}}function Gt(e){if(!(typeof window>"u"))try{window.localStorage.setItem(vn,String(e))}catch{}}const dr=({position:e,isMobile:r,isSpeaking:o,onExpand:i,label:s="Open widget",avatarImageUrl:a,agentName:f})=>{const d=lr(e),u=d==="right"?"left":"right",p=r?80:72,m=!!a,[l,c]=n.useState(null),[L,N]=n.useState(!1),k=n.useRef(null),x=n.useRef(!1),v=n.useCallback(j=>{if(typeof window>"u")return j;const A=p/2,O=Yt+A,F=window.innerHeight-Yt-A;return F<O?Math.max(O,j):Math.max(O,Math.min(F,j))},[p]);n.useEffect(()=>{const j=ur();c(v(j??window.innerHeight/2));const A=()=>{c(O=>O===null?null:v(O))};return window.addEventListener("resize",A),()=>window.removeEventListener("resize",A)},[v]);const C=n.useCallback(j=>{if(!(j.pointerType==="mouse"&&j.button!==0)&&l!==null){try{j.currentTarget.setPointerCapture(j.pointerId)}catch{}k.current={startClientY:j.clientY,startCenterY:l,moved:!1}}},[l]),E=n.useCallback(j=>{const A=k.current;if(!A)return;const O=j.clientY-A.startClientY;!A.moved&&Math.abs(O)>cr&&(A.moved=!0,N(!0)),A.moved&&c(v(A.startCenterY+O))},[v]),M=n.useCallback(j=>{const A=k.current;if(A){try{j.currentTarget.releasePointerCapture(j.pointerId)}catch{}k.current=null,A.moved&&(N(!1),x.current=!0,c(O=>(O!==null&&Gt(O),O)))}},[]),b=n.useCallback(()=>{if(x.current){x.current=!1;return}i()},[i]),S=n.useCallback(j=>{if(j.key==="ArrowUp"||j.key==="ArrowDown"){j.preventDefault();const A=j.key==="ArrowUp"?-8:8;c(O=>{if(O===null)return O;const F=v(O+A);return Gt(F),F})}},[v]),$=["ll-hidden",`ll-hidden--${d}`,r?"ll-hidden--mobile":"ll-hidden--desktop",o?"ll-hidden--speaking":null,L?"is-dragging":null,m?"ll-hidden--with-avatar":null].filter(Boolean).join(" "),I=l===null?void 0:{top:`${l-p/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:$,onPointerDown:C,onPointerMove:E,onPointerUp:M,onPointerCancel:M,onClick:b,onKeyDown:S,"aria-label":s,"data-position":e,style:I,children:m?t.jsxs(t.Fragment,{children:[t.jsx(Vt,{direction:u,className:"ll-hidden__chevron ll-hidden__chevron--mini"}),t.jsx("img",{src:a,alt:f?`${f} avatar`:"Agent avatar",className:"ll-hidden__avatar",draggable:!1})]}):t.jsx(Vt,{direction:u,className:"ll-hidden__chevron"})})},fr=({audioLevel:e,bars:r=20,maxHeight:o=20,minHeight:i=4,className:s,barClassName:a})=>{const f=n.useRef(null),d=n.useRef([]),u=n.useMemo(()=>{const m=(Math.sqrt(5)-1)/2;return Array.from({length:r},(l,c)=>.5+c*m%1*.5)},[r]);n.useEffect(()=>e.subscribe(l=>{for(let c=0;c<r;c++){const L=d.current[c];if(!L)continue;const N=Math.max(i,l*o*u[c]);L.style.height=`${N}px`}}),[e,r,o,i,u]);const p=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:f,className:p,"aria-hidden":"true",children:Array.from({length:r},(m,l)=>t.jsx("div",{ref:c=>{d.current[l]=c},className:["ll-waveform__bar",a].filter(Boolean).join(" "),style:{height:`${i}px`}},l))})},pr=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,agentState:s,isMuted:a,audioLevel:f,onExpand:d,onToggleMute:u,onClose:p})=>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:d,"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(fr,{audioLevel:f,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:m=>{m.stopPropagation(),u()},onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.stopPropagation(),m.preventDefault(),u())},"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(Ft,{muted:a,className:"ll-minimized__icon"})}),t.jsx(Ut,{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(Ft,{muted:a,className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:d,"aria-label":`Expand ${o} widget`,children:t.jsx(Ut,{className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn ll-minimized__btn--close",onClick:p,"aria-label":"Close widget",children:t.jsx(sr,{className:"ll-minimized__icon"})})]})]})}),hr=({src:e,alt:r,preCannedPlaying:o=!1,className:i,style:s})=>{const[a,f]=n.useState(!1),d=n.useRef(e);if(n.useEffect(()=>{d.current!==e&&(d.current=e,f(!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:()=>f(!0)})},mr=8,Kt=8,gr=({open:e,onClose:r,anchorRef:o,children:i})=>{const s=n.useRef(null),[a,f]=n.useState(null);return n.useLayoutEffect(()=>{if(!e){f(null);return}const d=o.current;if(!d)return;const u=()=>{const p=d.getBoundingClientRect(),m={top:p.top-mr,left:p.left+p.width/2},l=Kt+90,c=window.innerWidth-Kt-90;m.left<l&&(m.left=l),m.left>c&&(m.left=c),f(m)};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 d=p=>{const m=p.target,l=s.current,c=o.current;l&&l.contains(m)||c&&c.contains(m)||r()},u=p=>{p.key==="Escape"&&(p.stopPropagation(),r())};return document.addEventListener("mousedown",d),document.addEventListener("keydown",u),()=>{document.removeEventListener("mousedown",d),document.removeEventListener("keydown",u)}},[e,r,o]),!e||a===null||typeof document>"u"?null:Vn.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)},yr=({isMuted:e,onToggleMute:r,isCameraEnabled:o,onToggleCamera:i,allowCamera:s,isScreenShareEnabled:a,onToggleScreenShare:f,allowScreenShare:d,isSpeakerMuted:u,onToggleSpeaker:p,allowTyping:m,isTypingOpen:l,onToggleTyping:c,onDisconnect:L})=>{const[N,k]=n.useState(!1),x=n.useRef(null);return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"ll-toolbar ll-toolbar--compact","data-testid":"compact-toolbar",onClick:v=>v.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(_n,{muted:e})}),t.jsx("button",{ref:x,type:"button",className:`ll-tool ${N?"is-on":""}`,onClick:()=>k(v=>!v),"aria-label":"More controls","aria-haspopup":"menu","aria-expanded":N,children:t.jsx(xr,{})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:L,"aria-label":"End conversation",children:t.jsx(jn,{})})]}),t.jsxs(gr,{open:N,onClose:()=>k(!1),anchorRef:x,children:[s&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${o?"is-on":""}`,onClick:()=>{i(),k(!1)},children:[t.jsx(wn,{}),t.jsx("span",{children:o?"Stop camera":"Start camera"})]}),d&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${a?"is-on":""}`,onClick:()=>{f(),k(!1)},children:[t.jsx(bn,{}),t.jsx("span",{children:a?"Stop sharing":"Share screen"})]}),t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${u?"is-on":""}`,onClick:()=>{p(),k(!1)},children:[t.jsx(kn,{muted:u}),t.jsx("span",{children:u?"Unmute speaker":"Mute speaker"})]}),m&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${l?"is-on":""}`,onClick:()=>{c(),k(!1)},children:[t.jsx(vr,{}),t.jsx("span",{children:l?"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 xr(){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 vr(){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 br=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,idleLoopUrl:s,greeting:a,branding:f,teamMembers:d,currentTeamMemberId:u,isSwitchingTeamMember:p,teamSwitcherOpen:m,onToggleTeamSwitcher:l,onSelectTeamMember:c,languageMenuOpen:L,onToggleLanguageMenu:N,connectionState:k,agentState:x,transcript:v,canResume:C,needsUserGesture:E,error:M,isMuted:b,micError:S,micDevices:$,isCameraEnabled:I,cameraPreviewEl:j,cameraDevices:A,activeCameraId:O,isScreenShareEnabled:F,screenPreviewEl:ne,isSpeakerMuted:K,allowCamera:be,allowScreenShare:ae,allowTyping:he,showMinimize:le=!0,chromeless:re=!1,compactControls:J=!1,transforming:tt,transformingLabel:We,avatarVideoContainerRef:nt,agentVideoEl:Q,onConnect:Be,onDisconnect:qe,onRetry:rt,onResumeAudio:Fe,onToggleMute:we,onToggleCamera:_e,onSwitchCameraDevice:Ae,onToggleScreenShare:ke,onToggleSpeaker:je,onSendMessage:Ce,onMinimize:Le,onClose:z,onClearMicError:pt})=>{var Pe;const Se=((d==null?void 0:d.length)??0)>1,Me=k==="connecting"||k==="connected",Z=k==="connected",Ue=k==="idle"||k==="disconnected"||k==="error",[Ee,Ie]=n.useState(!1);n.useEffect(()=>{if(!Q){Ie(!1);return}if(!Q.paused&&Q.readyState>=2){Ie(!0);return}Ie(!1);const g=()=>Ie(!0);return Q.addEventListener("playing",g),Q.addEventListener("loadeddata",g),()=>{Q.removeEventListener("playing",g),Q.removeEventListener("loadeddata",g)}},[Q]);const[ht,me]=n.useState(!1);n.useEffect(()=>{if(!Z){me(!1);return}if(Ee)return;const g=setTimeout(()=>me(!0),8e3);return()=>clearTimeout(g)},[Z,Ee]);const Y=k==="connecting"||Z&&!!i&&!Ee&&!ht,Ve=n.useRef(null),Re=n.useRef(null);n.useEffect(()=>{const g=Ve.current;g&&(g.innerHTML="",j&&(j.style.width="100%",j.style.height="100%",j.style.objectFit="cover",j.style.transform="scaleX(-1)",g.appendChild(j)))},[j]),n.useEffect(()=>{const g=Re.current;g&&(g.innerHTML="",ne&&(ne.style.width="100%",ne.style.height="100%",ne.style.objectFit="contain",g.appendChild(ne)))},[ne]);const[oe,X]=n.useState(!1),[ce,ge]=n.useState(!1);n.useEffect(()=>{if(!oe&&!ce&&!L&&!m)return;const g=()=>{X(!1),ge(!1),L&&N(),m&&l()};return document.addEventListener("click",g),()=>document.removeEventListener("click",g)},[oe,ce,L,m,N,l]);const[ee,ue]=n.useState(!1),Ne=n.useCallback(()=>ue(g=>!g),[]),[ye,ot]=n.useState(""),Ye=n.useCallback(g=>{g.preventDefault();const W=ye.trim();W&&(Ce(W),ot(""))},[ye,Ce]),Ge=f.productName||"Live Layer";let de=null,ie=null;for(let g=v.length-1;g>=0;g--){const W=v[g];if(!de&&W.role==="agent"?de=W:!ie&&W.role==="user"&&(ie=W),de&&ie)break}const Te=Z?(de==null?void 0:de.text)||null:a||null,it=Z&&(ie==null?void 0:ie.text)||null,mt=["ll-expanded",r?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:mt,"data-position":e,"data-state":Z?"connected":Me?"connecting":"idle",role:"dialog","aria-label":`${o} widget`,children:[t.jsxs("div",{className:"ll-expanded__bg",children:[i?t.jsx(hr,{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:((Pe=o==null?void 0:o.charAt(0))==null?void 0:Pe.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:nt,className:"ll-expanded__video"}),Y&&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:p?"Switching...":"Connecting..."})]}),E&&Z&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:Fe,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"})]}),tt&&t.jsxs("div",{className:"ll-expanded__overlay ll-expanded__overlay--transforming",role:"status","aria-live":"polite","aria-label":We,children:[t.jsx("div",{className:"ll-expanded__spinner"}),t.jsx("p",{className:"ll-expanded__overlay-text",children:We})]}),Me?t.jsxs(t.Fragment,{children:[!J&&t.jsxs("div",{className:"ll-expanded__topbar",children:[!re&&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:g=>{Se&&(g.stopPropagation(),l())},"aria-haspopup":Se?"listbox":void 0,"aria-expanded":Se?m:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:o}),Se&&t.jsx(at,{})]}),Se&&m&&t.jsx("div",{className:"ll-hmenu",onClick:g=>g.stopPropagation(),role:"listbox",children:d==null?void 0:d.map(g=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${g.id===u?"is-active":""}`,onClick:()=>c(g.id),role:"option","aria-selected":g.id===u,children:[g.avatarImageUrl&&t.jsx("img",{src:g.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:g.name}),g.role&&t.jsx("span",{className:"ll-hmenu__role",children:g.role})]},g.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:g=>{g.stopPropagation(),N()},"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(at,{})]}),L&&t.jsx("div",{className:"ll-hmenu",onClick:g=>g.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--${x}`,children:x})]}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[le!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn",onClick:Le,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(Xt,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:z,"aria-label":"End call",title:"End call",children:t.jsx(Jt,{})})]})]}),J&&t.jsxs("div",{className:"ll-compact-status","data-state":x,children:[t.jsx("span",{className:"ll-compact-status__dot","aria-hidden":!0}),t.jsx("span",{className:"ll-compact-status__label",children:x})]})]}):t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:Ge}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[le!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:Le,"aria-label":"Minimize widget",children:t.jsx(Xt,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:z,"aria-label":"Close widget",children:t.jsx(Jt,{})})]})]}),Ue&&(()=>{const g=C?"Restart paused session":k==="disconnected"?"Reconnect to agent":"Start video call",W=C?"Pick up where you left off":null,De=!M;return t.jsxs(t.Fragment,{children:[De&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:Be,"aria-label":g,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"})})}),t.jsx("span",{className:"ll-expanded__play-label",children:g})]}),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})}),W&&t.jsx("p",{className:"ll-expanded__cta-sublabel",children:W}),t.jsx("button",{type:"button",className:"ll-expanded__cta",onClick:Be,"aria-label":g,children:g})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${Me&&(I||F)?"is-visible":""}`,children:[t.jsx("div",{ref:Re,className:F?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:Ve,className:!F&&I?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),Me?t.jsxs("div",{className:"ll-expanded__bottom",children:[!J&&Te&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--agent","data-role":"agent",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Te})}),!J&&it&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--user","data-role":"user",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:it})}),!re&&!J&&t.jsxs("div",{className:"ll-toolbar",onClick:g=>g.stopPropagation(),children:[ae&&t.jsx("button",{type:"button",className:`ll-tool ${F?"is-on":""}`,onClick:ke,"aria-label":F?"Stop sharing screen":"Share screen",title:F?"Stop sharing":"Share screen",children:t.jsx(bn,{})}),be&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${I?"is-on":""}`,onClick:_e,"aria-label":I?"Turn off camera":"Turn on camera",title:I?"Stop camera":"Start camera",children:t.jsx(wn,{})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${I?"is-on":""}`,onClick:g=>{g.stopPropagation(),ge(W=>!W),X(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":ce,children:t.jsx(at,{})}),ce&&A.length>0&&t.jsx(Qt,{label:"Camera",devices:A,activeId:O,onPick:g=>{ge(!1),Ae(g)}})]}),t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${b?"is-muted":""}`,onClick:we,"aria-label":b?"Unmute microphone":"Mute microphone",title:b?"Unmute":"Mute",children:t.jsx(_n,{muted:b})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${b?"is-muted":""}`,onClick:g=>{g.stopPropagation(),X(W=>!W),ge(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":oe,children:t.jsx(at,{})}),oe&&$.length>0&&t.jsx(Qt,{label:"Microphone",devices:$,activeId:"",onPick:()=>X(!1)})]}),t.jsx("button",{type:"button",className:`ll-tool ${K?"is-muted":""}`,onClick:je,"aria-label":K?"Unmute speaker":"Mute speaker",title:K?"Unmute speaker":"Mute speaker",children:t.jsx(kn,{muted:K})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:qe,"aria-label":"End conversation",title:"End conversation",children:t.jsx(jn,{})})]}),!re&&J&&t.jsx(yr,{isMuted:b,onToggleMute:we,isCameraEnabled:I,onToggleCamera:_e,allowCamera:be,isScreenShareEnabled:F,onToggleScreenShare:ke,allowScreenShare:ae,isSpeakerMuted:K,onToggleSpeaker:je,allowTyping:he,isTypingOpen:ee,onToggleTyping:Ne,onDisconnect:qe}),!re&&he&&(J?ee:!0)&&t.jsxs("form",{className:"ll-message-input",onSubmit:Ye,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:ye,onChange:g=>ot(g.target.value),"aria-label":"Message the agent"}),ye.trim()&&t.jsx("button",{type:"submit",className:"ll-message-input__send","aria-label":"Send message",children:t.jsx(wr,{})})]})]}):null,(()=>{if(S&&k!=="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:pt,"aria-label":"Dismiss",children:"×"})]});if(!M||k!=="error")return null;let g="Failed to connect",W="Try again";return M==="MIC_PERMISSION_DENIED"?g="Microphone blocked. Allow access to talk.":M==="MIC_NOT_FOUND"?g="No microphone found. Plug one in + retry.":M==="MIC_UNAVAILABLE"?g="Mic unavailable. Check other apps using it.":M==="AGENT_TIMEOUT"?g="Agent didn't pick up. Try again.":M==="CONNECT_FAILED"?g="Connection failed. Check your network.":M.length<80&&(g=M),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:g}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:rt,children:W})]})})()]})};function at(){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 Jt(){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 Xt(){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 bn(){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 wn(){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 _n({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 kn({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 wr(){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 jn(){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 Qt=({label:e,devices:r,activeId:o,onPick:i})=>t.jsxs("div",{className:"ll-device-menu",onClick:s=>s.stopPropagation(),role:"listbox",children:[t.jsx("p",{className:"ll-device-menu__label",children:e}),r.map((s,a)=>{const f=o===s.deviceId;return t.jsxs("button",{type:"button",className:`ll-device-menu__item ${f?"is-active":""}`,onClick:()=>i(s.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:s.label||`${e} ${a+1}`})]},s.deviceId||a)})]}),_r=['[data-ll-private="true"]',".ll-widget"];function jt(e){let r=e;for(;r;){for(const o of _r)if(r.matches(o))return!0;r=r.parentElement}return!1}function ft(e){if(jt(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 lt=4096,kr=20,jr=20,Cr=10,Lr=10,Sr=30,Er=20,Zt=500,Rr=['[data-ll-private="true"]',".ll-widget","script","style","noscript","iframe"];function Ze(e){if(e.getAttribute("aria-hidden")==="true"||e.hasAttribute("hidden"))return!0;let r=e;for(;r;){for(const o of Rr)if(r.matches(o))return!0;r=r.parentElement}return!1}function et(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 en(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 pe(e,r){return e.length<=r?e:e.slice(0,r-1)+"…"}function ze(e){return e.length}function Cn(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||"",f=Array.from(o.querySelectorAll("[data-ll-region]")),d=[];for(const b of f){if(d.length>=Cr)break;if(Ze(b)||!et(b))continue;const S=b.getAttribute("data-ll-region")??"",$=b.getAttribute("data-ll-intent")??void 0,I=pe((b.innerText||b.textContent||"").trim(),Zt*2);!S||!I||d.push({id:S,intent:$,text:I})}const u=[],p=["H1","H2","H3","H4","H5","H6"],m=Array.from(o.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const b of m){if(Ze(b)||!et(b))continue;const S=(b.textContent||"").trim();S&&u.push(`${b.tagName}: ${pe(S,200)}`)}const l=Array.from(o.querySelectorAll("p, li"));for(const b of l){if(Ze(b)||!et(b)||p.includes(b.tagName))continue;const S=(b.textContent||"").trim();S.length>10&&u.push(pe(S,Zt))}const c=u.join(`
2
- `),L=[],N=Array.from(o.querySelectorAll("a[href]"));for(const b of N){if(L.length>=kr)break;if(Ze(b)||!et(b))continue;const S=b.getAttribute("href")||"",$=(b.textContent||"").trim();!S||!$||L.push({href:S,text:pe($,100)})}const k=[],x=Array.from(o.querySelectorAll("input, textarea, select"));for(const b of x){if(k.length>=jr)break;if(Ze(b)||!ft(b)||!et(b))continue;const S=en(b),$=b instanceof HTMLInputElement?b.type:b.tagName.toLowerCase();S&&k.push({label:pe(S,100),type:$})}const v=Array.from(o.querySelectorAll("[data-ll-form]")),C=[];for(const b of v){if(C.length>=Lr)break;if(jt(b))continue;const S=b.getAttribute("data-ll-form")||"";if(!S)continue;const $=b.getAttribute("data-ll-intent")||void 0,I=Array.from(b.querySelectorAll("[data-ll-field]")),j=[];for(const A of I){if(j.length>=Sr)break;if(!ft(A))continue;const O=A.getAttribute("data-ll-field")||"";if(!O)continue;const F=en(A)||O,ne=A instanceof HTMLInputElement?A.type:A.tagName.toLowerCase(),K={name:O,label:pe(F,100),type:ne};if(A.required===!0&&(K.required=!0),A instanceof HTMLSelectElement){const ae=[];for(let he=0;he<A.options.length&&!(ae.length>=Er);he++){const le=A.options[he];if(!le||le.disabled)continue;const re=le.value||"",J=(le.textContent||"").trim()||re;!re&&!J||ae.push({value:re,label:pe(J,60)})}ae.length>0&&(K.options=ae)}const be=typeof A.validationMessage=="string"?A.validationMessage:"";be&&(K.validationMessage=pe(be,200)),j.push(K)}C.push({id:S,intent:$,fields:j})}const E={url:i,title:a,pathname:s,regions:d,visibleText:c,visibleLinks:L,visibleFields:k,forms:C,extras:e};let M=ze(JSON.stringify(E.regions))+ze(E.visibleText)+ze(JSON.stringify(E.visibleLinks))+ze(JSON.stringify(E.visibleFields));for(;M>lt&&E.visibleFields.length>0;)E.visibleFields.pop(),M=ze(JSON.stringify(E.visibleFields));for(;M>lt&&E.visibleLinks.length>0;)E.visibleLinks.pop(),M-=80;return ze(E.visibleText)>lt&&(E.visibleText=pe(E.visibleText,lt-100)),E}let Oe=null;function kt(e,r={}){const o=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(Oe&&Oe.key===s&&o-Oe.at<1e3)return Oe.ctx;const a=Cn(e,r);return Oe={key:s,at:o,ctx:a},a}function Ln(){Oe=null}const Nr=200;function Sn(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 Ar(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function En(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 f of a){if(s.length>=Nr)break;if(jt(f))continue;const d=f.getAttribute("href")||"";if(!Ar(d))continue;let u=d,p=!0;try{if(typeof window<"u"){const l=new URL(d,o);p=l.origin===o,p&&d.startsWith("http")&&(u=l.pathname+l.search+l.hash)}}catch{continue}if(i.has(u))continue;i.add(u);const m=(f.textContent||"").trim().slice(0,120);s.push({href:u,text:m,internal:p})}return s}let He=null;const Mr=5e3;function ct(){const e=Date.now(),r=typeof window<"u"&&window.location.pathname||"/";if(He&&He.pathname===r&&e-He.at<Mr)return He.routes;const o=En();return He={at:e,pathname:r,routes:o},o}function Rn(){He=null}function Ir(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 Tr(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"),f=a==null?void 0:a.set,d=r==="true"||r==="1"||r==="on";f?f.call(e,d):e.checked=d,i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}));return}Ir(e,r),i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function Pr(){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 Dr(e){if(!(e instanceof HTMLElement))return!1;const o=window.getComputedStyle(e).overflowY;return!(o!=="auto"&&o!=="scroll"||e.scrollHeight<=e.clientHeight+2)}function $r(){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(!Dr(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 zr(){if(typeof window>"u")return null;if(Pr())return window;const e=$r();return e||window}function tn(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function Or(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 Hr=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"]),Nn=n.forwardRef(function(r,o){var It,Tt,Pt,Dt,$t,zt,Ot;const{agentId:i,apiKey:s,baseUrl:a="https://app.livelayer.studio",sessionEndpoint:f,sessionBody:d,soundEffects:u,experienceMode:p="WIDGET",autoConnect:m=!1,displayMode:l,defaultDisplayMode:c="expanded",onDisplayModeChange:L,position:N="bottom-right",mobileBreakpoint:k=640,persistKey:x="ll-widget",disablePersistence:v=!1,teamMembers:C,currentTeamMemberId:E,onTeamMemberChange:M,idleLoopUrl:b,greeting:S,avatarImageUrl:$,agentName:I,branding:j={},allowCamera:A=!0,allowScreenShare:O=!0,allowTyping:F=!0,showMinimize:ne=!0,chromeless:K=!1,compactControls:be=!1,transforming:ae=!1,transformingLabel:he="Transforming…",showOn:le,hideOn:re,pathname:J,onNavigate:tt,onScrollToSelector:We,getPageContext:nt,pageContextExtras:Q,getRoutes:Be,onScrollPage:qe,onClick:rt,capabilities:Fe,onConnect:we,onDisconnect:_e,onTranscript:Ae,onAgentState:ke,onConnectionStateChange:je,onAgentEvent:Ce,onAgentCommand:Le,controlledSession:z,className:pt,style:Se,zIndex:Me=2147483647}=r,Z=mn(J),Ue=xn(Z,le,re);n.useEffect(()=>{Ln(),Rn()},[Z]);const Ee=E!==void 0,[Ie,ht]=n.useState(()=>{var y;return E??((y=C==null?void 0:C[0])==null?void 0:y.id)}),me=Ee?E:Ie,Y=n.useMemo(()=>(C==null?void 0:C.find(y=>y.id===me))??null,[C,me]),Ve=(Y==null?void 0:Y.agentId)??i,Re=p==="EMBEDDED",[oe,X]=pn({value:Re?"expanded":l,defaultValue:Re?"expanded":c,onChange:L,persistKey:x,disablePersistence:Re||v}),ce=hn(k),ge=sn(),ee=an(),ue=ln(),Ne=cn(),ye=un(),[ot,Ye]=n.useState(!1),[Ge,de]=n.useState(!1),[ie,Te]=n.useState(!1),[it,mt]=n.useState(!1),[Pe,g]=n.useState(!1),W=ir({baseUrl:a,config:u}),De=n.useRef(W);De.current=W;const gt=n.useRef(tt),yt=n.useRef(We),xt=n.useRef(qe),vt=n.useRef(rt),Ct=n.useRef(nt),Lt=n.useRef(Q),St=n.useRef(Be),bt=n.useRef(Fe),se=n.useRef(null);gt.current=tt,yt.current=We,xt.current=qe,vt.current=rt,Ct.current=nt,Lt.current=Q,St.current=Be,bt.current=Fe;function xe(y){const h=bt.current;return h?h.includes(y):!0}function ve(y,h){console.warn(`[LiveLayer] Agent command "${y}" blocked — capability "${h}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const Ke=n.useCallback(y=>{var q,te,fe,Qe;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")){ve("navigate","navigate");return}const _=typeof h.href=="string"?h.href:null;if(!_){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(De.current.playPageChange(),gt.current){try{gt.current(_)}catch(R){console.warn(`[LiveLayer] onNavigate threw for "${_}". Falling back. Error:`,R)}return}if(typeof document<"u"){const R=document.querySelector(`a[href="${_.replace(/"/g,'\\"')}"]`);if(R){R.click();return}}if(typeof window<"u"&&typeof history<"u")try{history.pushState({},"",_),window.dispatchEvent(new PopStateEvent("popstate"))}catch(R){console.warn(`[LiveLayer] history.pushState fallback failed for "${_}". 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")){ve("scroll_to","scroll");return}const _=typeof h.selector=="string"?h.selector:null;if(!_)return;const R=h.behavior==="instant"?"instant":"smooth";if(yt.current){try{yt.current(_,R)}catch(D){console.warn("[LiveLayer] onScrollToSelector threw.",D)}return}if(typeof document<"u"){let D=null;try{D=document.querySelector(_)}catch{console.warn(`[LiveLayer] scroll_to: invalid selector "${_}".`);return}if(!D){console.warn(`[LiveLayer] scroll_to: no element matched "${_}". The user may be on a different page. See https://livelayer.studio/docs/errors/scroll-no-match`);return}D.scrollIntoView({behavior:R,block:"start"})}return}if(h.type==="request_page_context"){if(!xe("read_page")){ve("request_page_context","read_page");return}const _=typeof h.requestId=="string"?h.requestId:void 0,R=(q=se.current)==null?void 0:q.call(se),D=B=>{const T=R,V=T==null?void 0:T.localParticipant;if(V!=null&&V.publishData)try{const G=_?{...B,requestId:_}:B,$e=new TextEncoder().encode(JSON.stringify(G));V.publishData($e,{reliable:!0})}catch(G){console.warn("[LiveLayer] publishData failed.",G)}},P=Lt.current,H=Ct.current;try{if(H){const B=H(P);if(B instanceof Promise){D({type:"page_context_pending"}),B.then(T=>D({type:"page_context",context:T})).catch(T=>{console.warn("[LiveLayer] getPageContext rejected; falling back to default walker.",T),D({type:"page_context",context:kt(P)})});return}D({type:"page_context",context:B});return}D({type:"page_context",context:kt(P)})}catch(B){console.warn("[LiveLayer] page-context extraction threw. Sending empty context.",B),D({type:"page_context",context:{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:P}})}return}if(h.type==="scroll_page"){if(!xe("scroll")){ve("scroll_page","scroll");return}const _=h.direction;if(_!=="up"&&_!=="down"&&_!=="top"&&_!=="bottom"){console.warn(`[LiveLayer] scroll_page: invalid direction "${String(_)}". Expected up | down | top | bottom.`);return}const R=h.behavior==="instant"?"instant":"smooth";if(xt.current){try{xt.current(_,R)}catch(T){console.warn("[LiveLayer] onScrollPage threw.",T)}return}if(typeof window>"u")return;const D={behavior:R},P=zr(),H=T=>{P instanceof Window?P.scrollBy({top:T,...D}):P.scrollBy({top:T,...D})},B=T=>{P instanceof Window?P.scrollTo({top:T,...D}):P.scrollTo({top:T,...D})};_==="up"?H(-tn(P)):_==="down"?H(tn(P)):B(_==="top"?0:Or(P));return}if(h.type==="click"){if(!xe("click")){ve("click","click");return}const _=typeof h.selector=="string"?h.selector:null;if(!_){console.warn("[LiveLayer] click: missing selector.");return}if(vt.current){try{vt.current(_)}catch(D){console.warn("[LiveLayer] onClick threw.",D)}return}if(typeof document>"u")return;let R=null;try{R=document.querySelector(_)}catch{console.warn(`[LiveLayer] click: invalid selector "${_}".`);return}if(!R){console.warn(`[LiveLayer] click: no element matched "${_}". 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}(te=R.click)==null||te.call(R);return}if(h.type==="fill_form"||h.type==="focus_field"){if(!xe("fill_forms")){ve(h.type,"fill_forms");return}if(typeof document>"u")return;h.type==="fill_form"&&De.current.playConfirmation();const _=typeof h.formId=="string"?h.formId:null;if(!_){console.warn(`[LiveLayer] ${h.type}: missing formId.`);return}const R=document.querySelector(`[data-ll-form="${_.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] ${h.type}: no form with data-ll-form="${_}". 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 P=typeof h.fieldName=="string"?h.fieldName:null;if(!P){console.warn("[LiveLayer] focus_field: missing fieldName.");return}const H=R.querySelector(`[data-ll-field="${P.replace(/"/g,'\\"')}"]`);if(!H){console.warn(`[LiveLayer] focus_field: no field "${P}" in form "${_}".`);return}if(!ft(H)){console.warn(`[LiveLayer] focus_field: field "${P}" is privacy-protected and not focusable.`);return}H.focus();return}const D=h.values&&typeof h.values=="object"?h.values:null;if(!D){console.warn("[LiveLayer] fill_form: missing or invalid values.");return}for(const[P,H]of Object.entries(D)){if(typeof H!="string")continue;const B=R.querySelector(`[data-ll-field="${P.replace(/"/g,'\\"')}"]`);if(!B){console.warn(`[LiveLayer] fill_form: no field "${P}" in form "${_}". Skipping.`);continue}if(!ft(B)){console.warn(`[LiveLayer] fill_form: field "${P}" is privacy-protected (password / cc-* / private). Skipping.`);continue}try{Tr(B,H)}catch(T){console.warn(`[LiveLayer] fill_form: failed to set "${P}".`,T)}}return}if(h.type==="submit_form"){if(!xe("submit_forms")){ve("submit_form","submit_forms");return}if(typeof document>"u")return;const _=typeof h.formId=="string"?h.formId:null;if(!_){console.warn("[LiveLayer] submit_form: missing formId.");return}De.current.playConfirmation();const R=document.querySelector(`[data-ll-form="${_.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] submit_form: no form with data-ll-form="${_}".`);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 D=typeof h.requestId=="string"?h.requestId:void 0,P=(fe=se.current)==null?void 0:fe.call(se),H=V=>{const G=P,$e=G==null?void 0:G.localParticipant;if($e!=null&&$e.publishData)try{const qn=D?{...V,requestId:D}:V,Fn=new TextEncoder().encode(JSON.stringify(qn));$e.publishData(Fn,{reliable:!0})}catch{}};let B=!1;const T=()=>{B=!0,H({type:"form_submitted",formId:_})};R.addEventListener("submit",T,{once:!0});try{typeof R.requestSubmit=="function"?R.requestSubmit():R.submit()}catch(V){console.warn("[LiveLayer] submit_form: requestSubmit threw.",V),R.removeEventListener("submit",T),H({type:"form_submit_blocked",formId:_,reason:"exception"});return}setTimeout(()=>{B||(R.removeEventListener("submit",T),H({type:"form_submit_blocked",formId:_,reason:"validation"}))},500);return}if(h.type==="request_routes"){if(!xe("read_page")){ve("request_routes","read_page");return}const _=typeof h.requestId=="string"?h.requestId:void 0,D=(Qe=se.current)==null?void 0:Qe.call(se),P=D==null?void 0:D.localParticipant;if(!(P!=null&&P.publishData))return;const H=T=>{try{const V=_?{type:"routes",routes:T,requestId:_}:{type:"routes",routes:T},G=new TextEncoder().encode(JSON.stringify(V));P.publishData(G,{reliable:!0})}catch(V){console.warn("[LiveLayer] request_routes: publishData failed.",V)}},B=St.current;if(B){try{const T=B(),V=G=>{if(!Array.isArray(G)){H([]);return}H(G.map(Sn).slice(0,200))};T instanceof Promise?T.then(V).catch(G=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",G),H(ct())}):V(T)}catch(T){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",T),H(ct())}return}try{H(ct())}catch(T){console.warn("[LiveLayer] request_routes: extractRoutes threw.",T)}return}Hr.has(h.type)||Le==null||Le(h)}},[Le,Ce]),U=on({agentId:z?"__controlled__":Ve,baseUrl:a,apiKey:s,sessionEndpoint:f,sessionBody:d,onDataMessage:z?void 0:Ke});n.useEffect(()=>{if(z!=null&&z.subscribeToDataMessages)return z.subscribeToDataMessages(Ke)},[z,Ke]),se.current=()=>{var y;return(y=U.getRoom)==null?void 0:y.call(U)},n.useEffect(()=>{var q;if(typeof window>"u")return;const y=((q=window.location)==null?void 0:q.hostname)||"";if(y==="localhost"||y==="127.0.0.1"||y==="0.0.0.0"||y.endsWith(".local")||y.endsWith(".test"))return window.__livelayerSimulateCommand=te=>{try{Ke(te)}catch(fe){console.warn("[LiveLayer] simulate-command threw:",fe)}},()=>{delete window.__livelayerSimulateCommand}},[Ke]);const w=n.useMemo(()=>z?{connectionState:z.connectionState,agentState:z.agentState,transcript:z.transcript,videoElement:z.videoElement,audioElement:z.audioElement,canResume:z.canResume,error:z.error,agentConfig:null,connect:async()=>{await z.onConnect()},disconnect:()=>z.onDisconnect(),getRoom:U.getRoom,isControlled:!0}:{connectionState:U.connectionState,agentState:U.agentState,transcript:U.transcript,videoElement:U.videoElement,audioElement:U.audioElement,canResume:U.canResume,error:U.error,agentConfig:U.agentConfig,connect:U.connect,disconnect:U.disconnect,getRoom:U.getRoom,isControlled:!1},[z,U]),Et=n.useRef(w);Et.current=w;const Rt=n.useRef(z);Rt.current=z,n.useImperativeHandle(o,()=>({sendData:async y=>{var fe,Qe;const h=Rt.current;if(h!=null&&h.publishData){try{await h.publishData(y)}catch(_){console.warn("[AvatarWidget] sendData (controlled) failed:",_)}return}const q=(Qe=(fe=Et.current)==null?void 0:fe.getRoom)==null?void 0:Qe.call(fe),te=q==null?void 0:q.localParticipant;if(te!=null&&te.publishData)try{const _=new TextEncoder().encode(JSON.stringify(y));await te.publishData(_,{reliable:!0})}catch(_){console.warn("[AvatarWidget] sendData failed:",_)}}}),[]);const Nt=n.useRef(null);n.useEffect(()=>{const y=w.videoElement,h=Nt.current;if(!(!y||!h))return h.appendChild(y),()=>{y.parentNode===h&&h.removeChild(y)}},[w.videoElement]),n.useEffect(()=>{const y=w.audioElement;if(!y)return;ge.attach(y);const h=y.play();return h&&typeof h.catch=="function"&&h.catch(q=>{(q==null?void 0:q.name)==="NotAllowedError"&&Ye(!0)}),()=>{ge.detach()}},[w.audioElement]),n.useEffect(()=>{if(w.isControlled||w.connectionState!=="connected")return;const y=w.getRoom();if(y)return ee.setupMic(y).catch(()=>{}),ue.attachRoom(y),Ne.attachRoom(y),ye.refresh(),()=>{ee.teardownMic(),ue.teardown(),Ne.teardown()}},[w.isControlled,w.connectionState]),n.useEffect(()=>{const y=w.audioElement;y&&(y.muted=Pe)},[w.audioElement,Pe]);const Mn=n.useCallback(y=>{const h={type:"user_message",text:y};if(z!=null&&z.publishData){try{z.publishData(h)}catch{}return}const q=w.getRoom();if(q)try{const te=new TextEncoder().encode(JSON.stringify(h));q.localParticipant.publishData(te,{reliable:!0})}catch{}},[w,z]),In=n.useCallback(()=>{g(y=>!y)},[]);n.useEffect(()=>{je==null||je(w.connectionState),w.connectionState==="connected"?we==null||we():w.connectionState==="disconnected"&&(_e==null||_e())},[w.connectionState,we,_e,je]),n.useEffect(()=>{Ae==null||Ae(w.transcript)},[w.transcript,Ae]),n.useEffect(()=>{ke==null||ke(w.agentState)},[w.agentState,ke]),n.useEffect(()=>{W.setThinking(w.agentState==="thinking")},[w.agentState,W]);const At=n.useRef(!1);n.useEffect(()=>{w.isControlled||!m||At.current||Ue&&w.connectionState==="idle"&&(At.current=!0,w.connect())},[m,w.connectionState,w,Ue]);const Tn=n.useCallback(y=>{const h=C==null?void 0:C.find(q=>q.id===y);h&&(Te(!1),y!==me&&(de(!0),w.disconnect(),Ee||ht(y),M==null||M(h)))},[C,me,w,Ee,M]);n.useEffect(()=>{Ge&&w.connectionState==="connected"&&de(!1)},[w.connectionState,Ge]),n.useEffect(()=>{if(!ie)return;const y=h=>{h.key==="Escape"&&Te(!1)};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[ie]);const Pn=!!$||!!(Y!=null&&Y.avatarImageUrl)||w.isControlled,Je=dn(Ve,a,Pn);Fe===void 0&&((It=Je.info)!=null&&It.capabilities)&&(bt.current=Je.info.capabilities);const st=(Y==null?void 0:Y.name)??I??((Tt=w.agentConfig)==null?void 0:Tt.name)??((Pt=Je.info)==null?void 0:Pt.name)??"Live Layer",wt=(Y==null?void 0:Y.avatarImageUrl)??$??((Dt=w.agentConfig)==null?void 0:Dt.avatarImageUrl)??(($t=Je.info)==null?void 0:$t.avatarImageUrl)??null,Dn=b??((zt=w.agentConfig)==null?void 0:zt.idleLoopUrl)??((Ot=Je.info)==null?void 0:Ot.idleLoopUrl)??null,$n=S??null,zn=n.useCallback(()=>X("expanded"),[X]),On=n.useCallback(()=>X("minimized"),[X]),Mt=n.useCallback(()=>{w.disconnect(),X("hidden")},[w,X]),Hn=n.useCallback(()=>{const y=w.audioElement;y&&y.play().then(()=>Ye(!1)).catch(()=>{})},[w.audioElement]),Wn=n.useCallback(()=>{Ye(!1),w.connect()},[w]),Xe={...Se,...Re?{}:{zIndex:Me}};j.primaryColor&&(Xe["--ll-color-primary"]=j.primaryColor),j.accentColor&&(Xe["--ll-color-accent"]=j.accentColor),j.backgroundColor&&(Xe["--ll-color-bg"]=j.backgroundColor),j.textColor&&(Xe["--ll-color-fg"]=j.textColor);const Bn=["ll-widget",`ll-widget--${oe}`,`ll-widget--${ce?"mobile":"desktop"}`,pt].filter(Boolean).join(" ");return Ue?t.jsxs("div",{className:Bn,style:Xe,"data-display-mode":oe,"data-position":N,"data-experience-mode":p==="EMBEDDED"?"embedded":"widget",children:[oe==="hidden"&&t.jsx(dr,{position:N,isMobile:ce,isSpeaking:w.agentState==="speaking",onExpand:()=>X("expanded"),label:`Open ${st} widget`,avatarImageUrl:wt,agentName:st}),oe==="minimized"&&t.jsx(pr,{position:N,isMobile:ce,agentName:st,avatarImageUrl:wt,agentState:w.agentState,isMuted:ee.isMuted,audioLevel:ge,onExpand:zn,onToggleMute:ee.toggleMute,onClose:Mt}),oe==="expanded"&&t.jsx(br,{position:N,isMobile:ce,agentName:st,avatarImageUrl:wt,idleLoopUrl:Dn,greeting:$n,branding:j,teamMembers:C,currentTeamMemberId:me,isSwitchingTeamMember:Ge,teamSwitcherOpen:ie,onToggleTeamSwitcher:()=>Te(y=>!y),onSelectTeamMember:Tn,connectionState:w.connectionState,agentState:w.agentState,transcript:w.transcript,isMuted:ee.isMuted,micDevices:ye.mics,isCameraEnabled:ue.isEnabled,cameraPreviewEl:ue.previewEl,cameraDevices:ye.cameras,activeCameraId:ue.activeDeviceId,isScreenShareEnabled:Ne.isEnabled,screenPreviewEl:Ne.previewEl,isSpeakerMuted:Pe,allowCamera:A,allowScreenShare:O,allowTyping:F,showMinimize:ne,chromeless:K,compactControls:be,transforming:ae,transformingLabel:he,languageMenuOpen:it,onToggleLanguageMenu:()=>mt(y=>!y),needsUserGesture:ot,canResume:w.canResume,micError:ee.micError,error:w.error,avatarVideoContainerRef:Nt,agentVideoEl:w.videoElement,onConnect:()=>void w.connect(),onDisconnect:()=>w.disconnect(),onRetry:Wn,onResumeAudio:Hn,onToggleMute:ee.toggleMute,onToggleCamera:()=>void ue.toggle(),onSwitchCameraDevice:y=>void ue.switchDevice(y),onToggleScreenShare:()=>void Ne.toggle(),onToggleSpeaker:In,onSendMessage:Mn,onMinimize:On,onClose:Mt,onClearMicError:ee.clearError})]}):null});Nn.displayName="AvatarWidgetInner";const An=n.forwardRef(function(r,o){return t.jsx(rn,{children:t.jsx(Nn,{...r,ref:o})})});An.displayName="AvatarWidget";const Wr=({agentId:e,baseUrl:r,apiKey:o,mode:i,onAgentEvent:s,className:a,style:f})=>{const d=n.useRef(null),u=n.useRef(null),p=n.useRef(s);p.current=s;const m=n.useCallback(l=>{var L;const c=l.detail;(L=p.current)==null||L.call(p,c)},[]);return n.useEffect(()=>{const l=d.current;if(!l)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",m),l.appendChild(c),u.current=c,()=>{c.removeEventListener("agent-event",m),l.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:d,className:a,style:f})},Br=n.forwardRef(function({id:r,intent:o,as:i="div",className:s,style:a,children:f},d){return n.createElement(i,{ref:d,"data-ll-region":r,"data-ll-intent":o,className:s,style:a},f)}),qr=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})}),Fr=n.forwardRef(function(r,o){const{name:i,label:s,labelClassName:a}=r,f={name:i,"data-ll-field":i};let d;if("as"in r&&r.as==="textarea"){const{name:u,label:p,labelClassName:m,as:l,...c}=r;d=t.jsx("textarea",{ref:o,...f,...c})}else if("as"in r&&r.as==="select"){const{name:u,label:p,labelClassName:m,as:l,children:c,...L}=r;d=t.jsx("select",{ref:o,...f,...L,children:c})}else{const{name:u,label:p,labelClassName:m,as:l,...c}=r;d=t.jsx("input",{ref:o,...f,...c})}return s===void 0?d:t.jsxs("label",{className:a,children:[s,d]})});let nn=1;function Ur({onMount:e,defaultOpen:r=!1,storageKey:o="ll-debug-open"}){const[i,s]=n.useState(r),[a,f]=n.useState([]),[d,u]=n.useState(""),[p,m]=n.useState(!1),l=n.useRef(new Set),c=n.useRef([]),L=n.useRef(p);L.current=p,n.useEffect(()=>{try{const x=localStorage.getItem(o);x==="1"&&s(!0),x==="0"&&s(!1)}catch{}},[o]),n.useEffect(()=>{try{localStorage.setItem(o,i?"1":"0")}catch{}},[i,o]),n.useEffect(()=>{const x=v=>{(v.metaKey||v.ctrlKey)&&v.shiftKey&&v.key.toLowerCase()==="l"&&(v.preventDefault(),s(C=>!C))};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[]),n.useEffect(()=>{const x=setInterval(()=>{if(c.current.length===0||L.current)return;const v=c.current.splice(0,c.current.length);f(C=>[...v.reverse(),...C].slice(0,200))},100);return()=>clearInterval(x)},[]);const N=n.useRef(!1);if(n.useEffect(()=>{!e||N.current||(N.current=!0,e(x=>{c.current.push({id:nn++,ts:Date.now(),kind:"event",type:x.eventName,data:x.data})}))},[e]),n.useEffect(()=>{const x=console.warn,v=console.log,C=(E,M)=>function(...b){try{const S=typeof b[0]=="string"?b[0]:"";S.startsWith("[LiveLayer]")&&c.current.push({id:nn++,ts:Date.now(),kind:E,type:S.slice(0,120),data:{args:b.slice(1).map($=>Yr($))}})}catch{}return M.apply(this,b)};return console.warn=C("warn",x),console.log=C("log",v),()=>{console.warn=x,console.log=v}},[]),!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 k=a.filter(x=>{if(!d)return!0;const v=d.toLowerCase();return x.type.toLowerCase().includes(v)||JSON.stringify(x.data||{}).toLowerCase().includes(v)});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:()=>m(x=>!x),style:_t(p?"#f59e0b":"transparent"),title:"Pause / resume capture",children:p?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{f([]),c.current=[]},style:_t("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:_t("transparent"),"aria-label":"Close",title:"Close (Cmd/Ctrl + Shift + L)",children:"✕"})]}),t.jsx("input",{type:"text",value:d,onChange:x=>u(x.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:k.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"),Un=require("@livelayer/sdk"),ut=require("livekit-client"),Vn=require("react-dom");class rn 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 on(e){const[r,o]=n.useState("idle"),[i,s]=n.useState("idle"),[a,f]=n.useState([]),[d,u]=n.useState(null),[p,m]=n.useState(null),[l,c]=n.useState(null),[C,N]=n.useState(!1),[k,v]=n.useState(null),b=n.useRef(null),L=n.useRef(e.onDataMessage);L.current=e.onDataMessage,n.useEffect(()=>{const S={onConnectionStateChange:T=>{o(T),T==="connected"&&v(null)},onAgentStateChange:s,onTranscript:T=>f([...T]),onAgentConfig:u,onAudioTrack:T=>c(T),onVideoTrack:T=>m(T),onVideoTrackRemoved:()=>m(null),onError:T=>v(T),onDataMessage:T=>{var j;(j=L.current)==null||j.call(L,T)},onResumabilityChange:N},z=new Un.LiveKitSession({agentId:e.agentId,baseUrl:e.baseUrl,apiKey:e.apiKey,sessionEndpoint:e.sessionEndpoint,sessionBody:e.sessionBody},S);return b.current=z,o("idle"),s("idle"),f([]),u(null),m(null),c(null),N(!1),v(null),()=>{var T;(T=z.destroy)==null||T.call(z),b.current=null}},[e.agentId,e.baseUrl,e.apiKey,e.sessionEndpoint,JSON.stringify(e.sessionBody??{})]);const E=n.useCallback(async()=>{const S=b.current;if(S)try{await S.connect()}catch(z){throw v(z instanceof Error?z.message:String(z)),z}},[]),I=n.useCallback(()=>{const S=b.current;S&&S.disconnect()},[]),w=n.useCallback(()=>{var S;return((S=b.current)==null?void 0:S.getRoom())??null},[]);return{connectionState:r,agentState:i,transcript:a,agentConfig:d,videoElement:p,audioElement:l,canResume:C,error:k,connect:E,disconnect:I,getRoom:w,session:b.current}}function sn(){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),f=n.useCallback(()=>{const l=r.current;if(!l){i.current=null;return}(!a.current||a.current.length!==l.frequencyBinCount)&&(a.current=new Uint8Array(new ArrayBuffer(l.frequencyBinCount)));const c=a.current;l.getByteFrequencyData(c);let C=0;for(let k=0;k<c.length;k++)C+=c[k];const N=C/c.length/255;for(const k of s.current)try{k(N)}catch(v){console.error("[useAudioLevel] subscriber threw:",v)}i.current=requestAnimationFrame(f)},[]),d=n.useCallback(()=>{if(e.current||typeof window>"u"||typeof AudioContext>"u")return;const l=new AudioContext,c=l.createAnalyser();c.fftSize=64,c.connect(l.destination),e.current=l,r.current=c},[]),u=n.useCallback(l=>{if(d(),!(!e.current||!r.current)){if(o.current){try{o.current.disconnect()}catch{}o.current=null}try{const c=e.current.createMediaElementSource(l);c.connect(r.current),o.current=c}catch(c){console.warn("[useAudioLevel] createMediaElementSource failed:",c);return}i.current===null&&(i.current=requestAnimationFrame(f))}},[d,f]),p=n.useCallback(()=>{if(i.current!==null&&(cancelAnimationFrame(i.current),i.current=null),o.current){try{o.current.disconnect()}catch{}o.current=null}},[]),m=n.useCallback(l=>(s.current.add(l),()=>{s.current.delete(l)}),[]);return n.useEffect(()=>()=>{if(p(),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},[p]),{attach:u,detach:p,subscribe:m}}function an(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),s=n.useRef(null),a=n.useRef(null),f=n.useCallback(async m=>{if(s.current&&a.current){try{await a.current.localParticipant.unpublishTrack(s.current)}catch{}s.current.stop(),s.current=null}a.current=m,i(null);try{const l=await ut.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});await m.localParticipant.publishTrack(l),s.current=l,r(l.isMuted)}catch(l){const c=l instanceof Error&&l.name==="NotAllowedError"?"Enable your microphone to talk with the agent.":"Microphone unavailable. Check browser permissions and try again.";throw i(c),l}},[]),d=n.useCallback(()=>{const m=s.current;m&&(m.isMuted?(m.unmute(),r(!1)):(m.mute(),r(!0)))},[]),u=n.useCallback(()=>{const m=s.current,l=a.current;if(m&&l){try{l.localParticipant.unpublishTrack(m)}catch{}m.stop()}s.current=null,a.current=null,r(!1)},[]),p=n.useCallback(()=>i(null),[]);return{isMuted:e,micError:o,toggleMute:d,setupMic:f,teardownMic:u,clearError:p}}const Yn={resolution:{width:640,height:480,frameRate:24}};function ln(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),[f,d]=n.useState(""),u=n.useRef(null),p=n.useRef(null),m=n.useCallback(b=>{u.current=b},[]),l=n.useCallback(()=>{const b=u.current,L=p.current;if(L&&b){const E=b.localParticipant.getTrackPublication(ut.Track.Source.Camera);if(E!=null&&E.track){try{b.localParticipant.unpublishTrack(E.track)}catch{}E.track.stop()}else L.stop()}p.current=null,a(null),r(!1)},[]),c=n.useCallback(async b=>{const L=u.current;if(L){i(null);try{const E={...Yn};b&&(E.deviceId=b);const I=await ut.createLocalVideoTrack(E);await L.localParticipant.publishTrack(I),p.current=I;const w=I.attach();a(w),r(!0),b&&d(b);try{L.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_camera_on"})),{reliable:!0})}catch{}}catch(E){const I=E instanceof Error&&E.name==="NotAllowedError"?"Enable your camera in the browser to share video.":"Camera unavailable. Check permissions and try again.";i(I)}}},[]),C=n.useCallback(async()=>{e?l():await c(f||void 0)},[e,f,l,c]),N=n.useCallback(async b=>{l(),await c(b)},[l,c]),k=n.useCallback(()=>{l(),u.current=null,i(null),d("")},[l]),v=n.useCallback(()=>i(null),[]);return n.useEffect(()=>()=>{p.current&&p.current.stop()},[]),{isEnabled:e,error:o,previewEl:s,activeDeviceId:f,toggle:C,switchDevice:N,attachRoom:m,teardown:k,clearError:v}}function cn(){const[e,r]=n.useState(!1),[o,i]=n.useState(null),[s,a]=n.useState(null),f=n.useRef(null),d=n.useCallback(c=>{f.current=c},[]),u=n.useCallback(()=>a(null),[]),p=n.useCallback(async()=>{const c=f.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 C=0;const N=()=>{const k=c.localParticipant.getTrackPublication(ut.Track.Source.ScreenShare);if(k!=null&&k.track){const v=k.track.attach();a(v),r(!0);try{c.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_screen_share_on"})),{reliable:!0})}catch{}return}C++<10?setTimeout(N,100):r(!0)};N()}catch(C){const N=C instanceof Error?C.name:"";N!=="NotAllowedError"&&N!=="AbortError"&&i("Screen share unavailable. Try again."),r(!1)}}},[e,u]),m=n.useCallback(()=>{const c=f.current;if(c&&e)try{c.localParticipant.setScreenShareEnabled(!1)}catch{}u(),r(!1),i(null),f.current=null},[e,u]),l=n.useCallback(()=>i(null),[]);return{isEnabled:e,error:o,previewEl:s,toggle:p,attachRoom:d,teardown:m,clearError:l}}function un(){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(f=>f.kind==="audioinput")),i(a.filter(f=>f.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 dn(e,r,o=!1){const[i,s]=n.useState(null),[a,f]=n.useState(null),[d,u]=n.useState(!o&&!!e);return n.useEffect(()=>{if(o||!e){u(!1);return}const p=new AbortController,m=r||"https://app.livelayer.studio";return u(!0),f(null),fetch(`${m}/api/widget/agent/${encodeURIComponent(e)}`,{signal:p.signal}).then(async l=>{if(!l.ok){const c=await l.json().catch(()=>({}));throw new Error(c.error||`HTTP ${l.status}`)}return l.json()}).then(l=>{p.signal.aborted||(s(l),u(!1))}).catch(l=>{p.signal.aborted||(f(l instanceof Error?l.message:"Agent lookup failed"),u(!1))}),()=>p.abort()},[e,r,o]),{info:i,error:a,loading:d}}function Gn(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function Kn(e,r){if(!(typeof window>"u"))try{window.localStorage.setItem(e,r)}catch{}}function fn({value:e,defaultValue:r="expanded",onChange:o}={}){const i=e!==void 0,[s,a]=n.useState(r),f=i?e:s,d=n.useCallback(u=>{u!==f&&(i||a(u),o==null||o(u))},[f,i,o]);return[f,d]}const Jn=["hidden","minimized","expanded"];function Xn(e){return e&&Jn.includes(e)?e:null}function pn({value:e,defaultValue:r="expanded",onChange:o,persistKey:i="ll-widget",disablePersistence:s=!1}={}){const a=`${i}:display-mode`,f=n.useRef(!1),[d,u]=fn({value:e,defaultValue:r,onChange:p=>{e===void 0&&!s&&Kn(a,p),o==null||o(p)}});return n.useEffect(()=>{if(f.current||(f.current=!0,s||e!==void 0))return;const p=Xn(Gn(a));p&&p!==d&&u(p)},[]),[d,u]}const Qn=640;function hn(e=Qn){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 Ht="__llHistoryPatched",dt="ll:pathname";function Zn(){if(typeof window>"u"||window.history[Ht])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(dt)),i},window.history.replaceState=function(...o){const i=r.apply(this,o);return window.dispatchEvent(new Event(dt)),i},window.history[Ht]=!0}function Wt(){return typeof window>"u"?"/":window.location.pathname||"/"}function mn(e){const[r,o]=n.useState(()=>e??Wt());return n.useEffect(()=>{if(e!==void 0)return;Zn();const i=()=>o(Wt());return i(),window.addEventListener("popstate",i),window.addEventListener(dt,i),()=>{window.removeEventListener("popstate",i),window.removeEventListener(dt,i)}},[e]),e??r}const Bt=new Map,er=/[\\^$+?.()|{}[\]]/g;function tr(e){return e.replace(er,"\\$&")}function nr(e){const r=Bt.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),d=tr(a).replace(new RegExp(`\\/${i}`,"g"),"(?:\\/.*)?").replace(new RegExp(i,"g"),".*").replace(new RegExp(s,"g"),"[^/]+"),u=new RegExp(`^${d}\\/?$`);return Bt.set(e,u),u}function rr(e,r){const o=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return nr(e).test(o)}function gn(e,r){return typeof e=="function"?e(r):e instanceof RegExp?e.test(r):rr(e,r)}function qt(e,r){if(!e||e.length===0)return!1;for(const o of e)if(gn(o,r))return!0;return!1}function yn(e,r,o){return e===void 0?!0:qt(o,e)?!1:r&&r.length>0?qt(r,e):!0}function xn(e,r,o){return n.useMemo(()=>yn(e,r,o),[e,r,o])}function or(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 ir(e){const r=n.useMemo(()=>or(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]),f=n.useCallback(()=>{r.action&&s("/audio/confirmation-sound.mp3")},[r.action,s]),d=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 p=new Audio(`${o}/audio/thinking-sound.mp3`);p.loop=!0,p.volume=.3,p.play().catch(()=>{i.current=null}),i.current=p}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:f,setThinking:d}),[a,f,d])}const Ft=({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"})}),Ut=({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"})}),sr=({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"})}),ar={left:180,right:0,up:-90,down:90},Vt=({direction:e="right",className:r})=>t.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,style:{transform:`rotate(${ar[e]}deg)`},"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 6l6 6-6 6"})});function lr(e){return e==="top-left"||e==="bottom-left"?"left":"right"}const vn="ll-hidden-tab-center-y",cr=5,Yt=16;function ur(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(vn);if(!e)return null;const r=Number.parseFloat(e);return Number.isFinite(r)?r:null}catch{return null}}function Gt(e){if(!(typeof window>"u"))try{window.localStorage.setItem(vn,String(e))}catch{}}const dr=({position:e,isMobile:r,isSpeaking:o,onExpand:i,label:s="Open widget",avatarImageUrl:a,agentName:f})=>{const d=lr(e),u=d==="right"?"left":"right",p=r?80:72,m=!!a,[l,c]=n.useState(null),[C,N]=n.useState(!1),k=n.useRef(null),v=n.useRef(!1),b=n.useCallback(j=>{if(typeof window>"u")return j;const A=p/2,O=Yt+A,F=window.innerHeight-Yt-A;return F<O?Math.max(O,j):Math.max(O,Math.min(F,j))},[p]);n.useEffect(()=>{const j=ur();c(b(j??window.innerHeight/2));const A=()=>{c(O=>O===null?null:b(O))};return window.addEventListener("resize",A),()=>window.removeEventListener("resize",A)},[b]);const L=n.useCallback(j=>{if(!(j.pointerType==="mouse"&&j.button!==0)&&l!==null){try{j.currentTarget.setPointerCapture(j.pointerId)}catch{}k.current={startClientY:j.clientY,startCenterY:l,moved:!1}}},[l]),E=n.useCallback(j=>{const A=k.current;if(!A)return;const O=j.clientY-A.startClientY;!A.moved&&Math.abs(O)>cr&&(A.moved=!0,N(!0)),A.moved&&c(b(A.startCenterY+O))},[b]),I=n.useCallback(j=>{const A=k.current;if(A){try{j.currentTarget.releasePointerCapture(j.pointerId)}catch{}k.current=null,A.moved&&(N(!1),v.current=!0,c(O=>(O!==null&&Gt(O),O)))}},[]),w=n.useCallback(()=>{if(v.current){v.current=!1;return}i()},[i]),S=n.useCallback(j=>{if(j.key==="ArrowUp"||j.key==="ArrowDown"){j.preventDefault();const A=j.key==="ArrowUp"?-8:8;c(O=>{if(O===null)return O;const F=b(O+A);return Gt(F),F})}},[b]),z=["ll-hidden",`ll-hidden--${d}`,r?"ll-hidden--mobile":"ll-hidden--desktop",o?"ll-hidden--speaking":null,C?"is-dragging":null,m?"ll-hidden--with-avatar":null].filter(Boolean).join(" "),T=l===null?void 0:{top:`${l-p/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:z,onPointerDown:L,onPointerMove:E,onPointerUp:I,onPointerCancel:I,onClick:w,onKeyDown:S,"aria-label":s,"data-position":e,style:T,children:m?t.jsxs(t.Fragment,{children:[t.jsx(Vt,{direction:u,className:"ll-hidden__chevron ll-hidden__chevron--mini"}),t.jsx("img",{src:a,alt:f?`${f} avatar`:"Agent avatar",className:"ll-hidden__avatar",draggable:!1})]}):t.jsx(Vt,{direction:u,className:"ll-hidden__chevron"})})},fr=({audioLevel:e,bars:r=20,maxHeight:o=20,minHeight:i=4,className:s,barClassName:a})=>{const f=n.useRef(null),d=n.useRef([]),u=n.useMemo(()=>{const m=(Math.sqrt(5)-1)/2;return Array.from({length:r},(l,c)=>.5+c*m%1*.5)},[r]);n.useEffect(()=>e.subscribe(l=>{for(let c=0;c<r;c++){const C=d.current[c];if(!C)continue;const N=Math.max(i,l*o*u[c]);C.style.height=`${N}px`}}),[e,r,o,i,u]);const p=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:f,className:p,"aria-hidden":"true",children:Array.from({length:r},(m,l)=>t.jsx("div",{ref:c=>{d.current[l]=c},className:["ll-waveform__bar",a].filter(Boolean).join(" "),style:{height:`${i}px`}},l))})},pr=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,agentState:s,isMuted:a,audioLevel:f,onExpand:d,onToggleMute:u,onClose:p})=>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:d,"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(fr,{audioLevel:f,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:m=>{m.stopPropagation(),u()},onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.stopPropagation(),m.preventDefault(),u())},"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(Ft,{muted:a,className:"ll-minimized__icon"})}),t.jsx(Ut,{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(Ft,{muted:a,className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:d,"aria-label":`Expand ${o} widget`,children:t.jsx(Ut,{className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn ll-minimized__btn--close",onClick:p,"aria-label":"Close widget",children:t.jsx(sr,{className:"ll-minimized__icon"})})]})]})}),hr=({src:e,alt:r,preCannedPlaying:o=!1,className:i,style:s})=>{const[a,f]=n.useState(!1),d=n.useRef(e);if(n.useEffect(()=>{d.current!==e&&(d.current=e,f(!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:()=>f(!0)})},mr=8,Kt=8,gr=({open:e,onClose:r,anchorRef:o,children:i})=>{const s=n.useRef(null),[a,f]=n.useState(null);return n.useLayoutEffect(()=>{if(!e){f(null);return}const d=o.current;if(!d)return;const u=()=>{const p=d.getBoundingClientRect(),m={top:p.top-mr,left:p.left+p.width/2},l=Kt+90,c=window.innerWidth-Kt-90;m.left<l&&(m.left=l),m.left>c&&(m.left=c),f(m)};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 d=p=>{const m=p.target,l=s.current,c=o.current;l&&l.contains(m)||c&&c.contains(m)||r()},u=p=>{p.key==="Escape"&&(p.stopPropagation(),r())};return document.addEventListener("mousedown",d),document.addEventListener("keydown",u),()=>{document.removeEventListener("mousedown",d),document.removeEventListener("keydown",u)}},[e,r,o]),!e||a===null||typeof document>"u"?null:Vn.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)},yr=({isMuted:e,onToggleMute:r,isCameraEnabled:o,onToggleCamera:i,allowCamera:s,isScreenShareEnabled:a,onToggleScreenShare:f,allowScreenShare:d,isSpeakerMuted:u,onToggleSpeaker:p,allowTyping:m,isTypingOpen:l,onToggleTyping:c,onDisconnect:C})=>{const[N,k]=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:b=>b.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(_n,{muted:e})}),t.jsx("button",{ref:v,type:"button",className:`ll-tool ${N?"is-on":""}`,onClick:()=>k(b=>!b),"aria-label":"More controls","aria-haspopup":"menu","aria-expanded":N,children:t.jsx(xr,{})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:C,"aria-label":"End conversation",children:t.jsx(jn,{})})]}),t.jsxs(gr,{open:N,onClose:()=>k(!1),anchorRef:v,children:[s&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${o?"is-on":""}`,onClick:()=>{i(),k(!1)},children:[t.jsx(wn,{}),t.jsx("span",{children:o?"Stop camera":"Start camera"})]}),d&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${a?"is-on":""}`,onClick:()=>{f(),k(!1)},children:[t.jsx(bn,{}),t.jsx("span",{children:a?"Stop sharing":"Share screen"})]}),t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${u?"is-on":""}`,onClick:()=>{p(),k(!1)},children:[t.jsx(kn,{muted:u}),t.jsx("span",{children:u?"Unmute speaker":"Mute speaker"})]}),m&&t.jsxs("button",{type:"button",className:`ll-overflow-popover__item ${l?"is-on":""}`,onClick:()=>{c(),k(!1)},children:[t.jsx(vr,{}),t.jsx("span",{children:l?"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 xr(){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 vr(){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 br=({position:e,isMobile:r,agentName:o,avatarImageUrl:i,idleLoopUrl:s,greeting:a,branding:f,teamMembers:d,currentTeamMemberId:u,isSwitchingTeamMember:p,teamSwitcherOpen:m,onToggleTeamSwitcher:l,onSelectTeamMember:c,languageMenuOpen:C,onToggleLanguageMenu:N,connectionState:k,agentState:v,transcript:b,canResume:L,needsUserGesture:E,error:I,isMuted:w,micError:S,micDevices:z,isCameraEnabled:T,cameraPreviewEl:j,cameraDevices:A,activeCameraId:O,isScreenShareEnabled:F,screenPreviewEl:ne,isSpeakerMuted:J,allowCamera:be,allowScreenShare:ae,allowTyping:he,showMinimize:le=!0,chromeless:re=!1,compactControls:Y=!1,transforming:et,transformingLabel:He,avatarVideoContainerRef:tt,agentVideoEl:Q,onConnect:We,onDisconnect:Be,onRetry:nt,onResumeAudio:qe,onToggleMute:we,onToggleCamera:_e,onSwitchCameraDevice:Ae,onToggleScreenShare:ke,onToggleSpeaker:je,onSendMessage:Ce,onMinimize:Le,onClose:M,onClearMicError:pt})=>{var Pe;const Se=((d==null?void 0:d.length)??0)>1,Me=k==="connecting"||k==="connected",Z=k==="connected",Fe=k==="idle"||k==="disconnected"||k==="error",[Ee,Ie]=n.useState(!1);n.useEffect(()=>{if(!Q){Ie(!1);return}if(!Q.paused&&Q.readyState>=2){Ie(!0);return}Ie(!1);const g=()=>Ie(!0);return Q.addEventListener("playing",g),Q.addEventListener("loadeddata",g),()=>{Q.removeEventListener("playing",g),Q.removeEventListener("loadeddata",g)}},[Q]);const[ht,me]=n.useState(!1);n.useEffect(()=>{if(!Z){me(!1);return}if(Ee)return;const g=setTimeout(()=>me(!0),8e3);return()=>clearTimeout(g)},[Z,Ee]);const G=k==="connecting"||Z&&!!i&&!Ee&&!ht,Ue=n.useRef(null),Re=n.useRef(null);n.useEffect(()=>{const g=Ue.current;g&&(g.innerHTML="",j&&(j.style.width="100%",j.style.height="100%",j.style.objectFit="cover",j.style.transform="scaleX(-1)",g.appendChild(j)))},[j]),n.useEffect(()=>{const g=Re.current;g&&(g.innerHTML="",ne&&(ne.style.width="100%",ne.style.height="100%",ne.style.objectFit="contain",g.appendChild(ne)))},[ne]);const[oe,X]=n.useState(!1),[ce,ge]=n.useState(!1);n.useEffect(()=>{if(!oe&&!ce&&!C&&!m)return;const g=()=>{X(!1),ge(!1),C&&N(),m&&l()};return document.addEventListener("click",g),()=>document.removeEventListener("click",g)},[oe,ce,C,m,N,l]);const[ee,ue]=n.useState(!1),Ne=n.useCallback(()=>ue(g=>!g),[]),[ye,rt]=n.useState(""),Ve=n.useCallback(g=>{g.preventDefault();const B=ye.trim();B&&(Ce(B),rt(""))},[ye,Ce]),Ye=f.productName||"Live Layer";let de=null,ie=null;for(let g=b.length-1;g>=0;g--){const B=b[g];if(!de&&B.role==="agent"?de=B:!ie&&B.role==="user"&&(ie=B),de&&ie)break}const Te=Z?(de==null?void 0:de.text)||null:a||null,ot=Z&&(ie==null?void 0:ie.text)||null,mt=["ll-expanded",r?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:mt,"data-position":e,"data-state":Z?"connected":Me?"connecting":"idle",role:"dialog","aria-label":`${o} widget`,children:[t.jsxs("div",{className:"ll-expanded__bg",children:[i?t.jsx(hr,{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:((Pe=o==null?void 0:o.charAt(0))==null?void 0:Pe.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:tt,className:"ll-expanded__video"}),G&&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:p?"Switching...":"Connecting..."})]}),E&&Z&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:qe,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"})]}),et&&t.jsxs("div",{className:"ll-expanded__overlay ll-expanded__overlay--transforming",role:"status","aria-live":"polite","aria-label":He,children:[t.jsx("div",{className:"ll-expanded__spinner"}),t.jsx("p",{className:"ll-expanded__overlay-text",children:He})]}),Me?t.jsxs(t.Fragment,{children:[!Y&&t.jsxs("div",{className:"ll-expanded__topbar",children:[!re&&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:g=>{Se&&(g.stopPropagation(),l())},"aria-haspopup":Se?"listbox":void 0,"aria-expanded":Se?m:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:o}),Se&&t.jsx(at,{})]}),Se&&m&&t.jsx("div",{className:"ll-hmenu",onClick:g=>g.stopPropagation(),role:"listbox",children:d==null?void 0:d.map(g=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${g.id===u?"is-active":""}`,onClick:()=>c(g.id),role:"option","aria-selected":g.id===u,children:[g.avatarImageUrl&&t.jsx("img",{src:g.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:g.name}),g.role&&t.jsx("span",{className:"ll-hmenu__role",children:g.role})]},g.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:g=>{g.stopPropagation(),N()},"aria-haspopup":"listbox","aria-expanded":C,"aria-label":"Language: English",title:"Language: English",children:[t.jsx("span",{className:"ll-hpill__label",children:"EN"}),t.jsx(at,{})]}),C&&t.jsx("div",{className:"ll-hmenu",onClick:g=>g.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:[le!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn",onClick:Le,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(Xt,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:M,"aria-label":"End call",title:"End call",children:t.jsx(Jt,{})})]})]}),Y&&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})]})]}):!Y&&t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:Ye}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[le!==!1&&t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:Le,"aria-label":"Minimize widget",children:t.jsx(Xt,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:M,"aria-label":"Close widget",children:t.jsx(Jt,{})})]})]}),Fe&&(()=>{const g=L?"Resume session":k==="disconnected"?"Reconnect to agent":"Start video call",B=!I;return t.jsxs(t.Fragment,{children:[B&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:We,"aria-label":g,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"})})}),Y&&t.jsx("span",{className:"ll-expanded__play-label",children:g})]}),!Y&&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:We,"aria-label":g,children:g})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${Me&&(T||F)?"is-visible":""}`,children:[t.jsx("div",{ref:Re,className:F?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:Ue,className:!F&&T?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),Me?t.jsxs("div",{className:"ll-expanded__bottom",children:[!Y&&Te&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--agent","data-role":"agent",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Te})}),!Y&&ot&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--user","data-role":"user",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:ot})}),!re&&!Y&&t.jsxs("div",{className:"ll-toolbar",onClick:g=>g.stopPropagation(),children:[ae&&t.jsx("button",{type:"button",className:`ll-tool ${F?"is-on":""}`,onClick:ke,"aria-label":F?"Stop sharing screen":"Share screen",title:F?"Stop sharing":"Share screen",children:t.jsx(bn,{})}),be&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${T?"is-on":""}`,onClick:_e,"aria-label":T?"Turn off camera":"Turn on camera",title:T?"Stop camera":"Start camera",children:t.jsx(wn,{})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${T?"is-on":""}`,onClick:g=>{g.stopPropagation(),ge(B=>!B),X(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":ce,children:t.jsx(at,{})}),ce&&A.length>0&&t.jsx(Qt,{label:"Camera",devices:A,activeId:O,onPick:g=>{ge(!1),Ae(g)}})]}),t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${w?"is-muted":""}`,onClick:we,"aria-label":w?"Unmute microphone":"Mute microphone",title:w?"Unmute":"Mute",children:t.jsx(_n,{muted:w})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${w?"is-muted":""}`,onClick:g=>{g.stopPropagation(),X(B=>!B),ge(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":oe,children:t.jsx(at,{})}),oe&&z.length>0&&t.jsx(Qt,{label:"Microphone",devices:z,activeId:"",onPick:()=>X(!1)})]}),t.jsx("button",{type:"button",className:`ll-tool ${J?"is-muted":""}`,onClick:je,"aria-label":J?"Unmute speaker":"Mute speaker",title:J?"Unmute speaker":"Mute speaker",children:t.jsx(kn,{muted:J})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:Be,"aria-label":"End conversation",title:"End conversation",children:t.jsx(jn,{})})]}),!re&&Y&&t.jsx(yr,{isMuted:w,onToggleMute:we,isCameraEnabled:T,onToggleCamera:_e,allowCamera:be,isScreenShareEnabled:F,onToggleScreenShare:ke,allowScreenShare:ae,isSpeakerMuted:J,onToggleSpeaker:je,allowTyping:he,isTypingOpen:ee,onToggleTyping:Ne,onDisconnect:Be}),!re&&he&&(Y?ee:!0)&&t.jsxs("form",{className:"ll-message-input",onSubmit:Ve,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:ye,onChange:g=>rt(g.target.value),"aria-label":"Message the agent"}),ye.trim()&&t.jsx("button",{type:"submit",className:"ll-message-input__send","aria-label":"Send message",children:t.jsx(wr,{})})]})]}):null,(()=>{if(S&&k!=="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:pt,"aria-label":"Dismiss",children:"×"})]});if(!I||k!=="error")return null;let g="Failed to connect",B="Try again";return I==="MIC_PERMISSION_DENIED"?g="Microphone blocked. Allow access to talk.":I==="MIC_NOT_FOUND"?g="No microphone found. Plug one in + retry.":I==="MIC_UNAVAILABLE"?g="Mic unavailable. Check other apps using it.":I==="AGENT_TIMEOUT"?g="Agent didn't pick up. Try again.":I==="CONNECT_FAILED"?g="Connection failed. Check your network.":I.length<80&&(g=I),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:g}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:nt,children:B})]})})()]})};function at(){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 Jt(){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 Xt(){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 bn(){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 wn(){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 _n({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 kn({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 wr(){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 jn(){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 Qt=({label:e,devices:r,activeId:o,onPick:i})=>t.jsxs("div",{className:"ll-device-menu",onClick:s=>s.stopPropagation(),role:"listbox",children:[t.jsx("p",{className:"ll-device-menu__label",children:e}),r.map((s,a)=>{const f=o===s.deviceId;return t.jsxs("button",{type:"button",className:`ll-device-menu__item ${f?"is-active":""}`,onClick:()=>i(s.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:s.label||`${e} ${a+1}`})]},s.deviceId||a)})]}),_r=['[data-ll-private="true"]',".ll-widget"];function jt(e){let r=e;for(;r;){for(const o of _r)if(r.matches(o))return!0;r=r.parentElement}return!1}function ft(e){if(jt(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 lt=4096,kr=20,jr=20,Cr=10,Lr=10,Sr=30,Er=20,Zt=500,Rr=['[data-ll-private="true"]',".ll-widget","script","style","noscript","iframe"];function Qe(e){if(e.getAttribute("aria-hidden")==="true"||e.hasAttribute("hidden"))return!0;let r=e;for(;r;){for(const o of Rr)if(r.matches(o))return!0;r=r.parentElement}return!1}function Ze(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 en(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 pe(e,r){return e.length<=r?e:e.slice(0,r-1)+"…"}function $e(e){return e.length}function Cn(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||"",f=Array.from(o.querySelectorAll("[data-ll-region]")),d=[];for(const w of f){if(d.length>=Cr)break;if(Qe(w)||!Ze(w))continue;const S=w.getAttribute("data-ll-region")??"",z=w.getAttribute("data-ll-intent")??void 0,T=pe((w.innerText||w.textContent||"").trim(),Zt*2);!S||!T||d.push({id:S,intent:z,text:T})}const u=[],p=["H1","H2","H3","H4","H5","H6"],m=Array.from(o.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const w of m){if(Qe(w)||!Ze(w))continue;const S=(w.textContent||"").trim();S&&u.push(`${w.tagName}: ${pe(S,200)}`)}const l=Array.from(o.querySelectorAll("p, li"));for(const w of l){if(Qe(w)||!Ze(w)||p.includes(w.tagName))continue;const S=(w.textContent||"").trim();S.length>10&&u.push(pe(S,Zt))}const c=u.join(`
2
+ `),C=[],N=Array.from(o.querySelectorAll("a[href]"));for(const w of N){if(C.length>=kr)break;if(Qe(w)||!Ze(w))continue;const S=w.getAttribute("href")||"",z=(w.textContent||"").trim();!S||!z||C.push({href:S,text:pe(z,100)})}const k=[],v=Array.from(o.querySelectorAll("input, textarea, select"));for(const w of v){if(k.length>=jr)break;if(Qe(w)||!ft(w)||!Ze(w))continue;const S=en(w),z=w instanceof HTMLInputElement?w.type:w.tagName.toLowerCase();S&&k.push({label:pe(S,100),type:z})}const b=Array.from(o.querySelectorAll("[data-ll-form]")),L=[];for(const w of b){if(L.length>=Lr)break;if(jt(w))continue;const S=w.getAttribute("data-ll-form")||"";if(!S)continue;const z=w.getAttribute("data-ll-intent")||void 0,T=Array.from(w.querySelectorAll("[data-ll-field]")),j=[];for(const A of T){if(j.length>=Sr)break;if(!ft(A))continue;const O=A.getAttribute("data-ll-field")||"";if(!O)continue;const F=en(A)||O,ne=A instanceof HTMLInputElement?A.type:A.tagName.toLowerCase(),J={name:O,label:pe(F,100),type:ne};if(A.required===!0&&(J.required=!0),A instanceof HTMLSelectElement){const ae=[];for(let he=0;he<A.options.length&&!(ae.length>=Er);he++){const le=A.options[he];if(!le||le.disabled)continue;const re=le.value||"",Y=(le.textContent||"").trim()||re;!re&&!Y||ae.push({value:re,label:pe(Y,60)})}ae.length>0&&(J.options=ae)}const be=typeof A.validationMessage=="string"?A.validationMessage:"";be&&(J.validationMessage=pe(be,200)),j.push(J)}L.push({id:S,intent:z,fields:j})}const E={url:i,title:a,pathname:s,regions:d,visibleText:c,visibleLinks:C,visibleFields:k,forms:L,extras:e};let I=$e(JSON.stringify(E.regions))+$e(E.visibleText)+$e(JSON.stringify(E.visibleLinks))+$e(JSON.stringify(E.visibleFields));for(;I>lt&&E.visibleFields.length>0;)E.visibleFields.pop(),I=$e(JSON.stringify(E.visibleFields));for(;I>lt&&E.visibleLinks.length>0;)E.visibleLinks.pop(),I-=80;return $e(E.visibleText)>lt&&(E.visibleText=pe(E.visibleText,lt-100)),E}let ze=null;function kt(e,r={}){const o=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(ze&&ze.key===s&&o-ze.at<1e3)return ze.ctx;const a=Cn(e,r);return ze={key:s,at:o,ctx:a},a}function Ln(){ze=null}const Nr=200;function Sn(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 Ar(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function En(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 f of a){if(s.length>=Nr)break;if(jt(f))continue;const d=f.getAttribute("href")||"";if(!Ar(d))continue;let u=d,p=!0;try{if(typeof window<"u"){const l=new URL(d,o);p=l.origin===o,p&&d.startsWith("http")&&(u=l.pathname+l.search+l.hash)}}catch{continue}if(i.has(u))continue;i.add(u);const m=(f.textContent||"").trim().slice(0,120);s.push({href:u,text:m,internal:p})}return s}let Oe=null;const Mr=5e3;function ct(){const e=Date.now(),r=typeof window<"u"&&window.location.pathname||"/";if(Oe&&Oe.pathname===r&&e-Oe.at<Mr)return Oe.routes;const o=En();return Oe={at:e,pathname:r,routes:o},o}function Rn(){Oe=null}function Ir(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 Tr(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"),f=a==null?void 0:a.set,d=r==="true"||r==="1"||r==="on";f?f.call(e,d):e.checked=d,i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}));return}Ir(e,r),i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function Pr(){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 Dr(e){if(!(e instanceof HTMLElement))return!1;const o=window.getComputedStyle(e).overflowY;return!(o!=="auto"&&o!=="scroll"||e.scrollHeight<=e.clientHeight+2)}function $r(){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(!Dr(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 zr(){if(typeof window>"u")return null;if(Pr())return window;const e=$r();return e||window}function tn(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function Or(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 Hr=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"]),Nn=n.forwardRef(function(r,o){var It,Tt,Pt,Dt,$t,zt,Ot;const{agentId:i,apiKey:s,baseUrl:a="https://app.livelayer.studio",sessionEndpoint:f,sessionBody:d,soundEffects:u,experienceMode:p="WIDGET",autoConnect:m=!1,displayMode:l,defaultDisplayMode:c="expanded",onDisplayModeChange:C,position:N="bottom-right",mobileBreakpoint:k=640,persistKey:v="ll-widget",disablePersistence:b=!1,teamMembers:L,currentTeamMemberId:E,onTeamMemberChange:I,idleLoopUrl:w,greeting:S,avatarImageUrl:z,agentName:T,branding:j={},allowCamera:A=!0,allowScreenShare:O=!0,allowTyping:F=!0,showMinimize:ne=!0,chromeless:J=!1,compactControls:be=!1,transforming:ae=!1,transformingLabel:he="Transforming…",showOn:le,hideOn:re,pathname:Y,onNavigate:et,onScrollToSelector:He,getPageContext:tt,pageContextExtras:Q,getRoutes:We,onScrollPage:Be,onClick:nt,capabilities:qe,onConnect:we,onDisconnect:_e,onTranscript:Ae,onAgentState:ke,onConnectionStateChange:je,onAgentEvent:Ce,onAgentCommand:Le,controlledSession:M,className:pt,style:Se,zIndex:Me=2147483647}=r,Z=mn(Y),Fe=xn(Z,le,re);n.useEffect(()=>{Ln(),Rn()},[Z]);const Ee=E!==void 0,[Ie,ht]=n.useState(()=>{var y;return E??((y=L==null?void 0:L[0])==null?void 0:y.id)}),me=Ee?E:Ie,G=n.useMemo(()=>(L==null?void 0:L.find(y=>y.id===me))??null,[L,me]),Ue=(G==null?void 0:G.agentId)??i,Re=p==="EMBEDDED",[oe,X]=pn({value:Re?"expanded":l,defaultValue:Re?"expanded":c,onChange:C,persistKey:v,disablePersistence:Re||b}),ce=hn(k),ge=sn(),ee=an(),ue=ln(),Ne=cn(),ye=un(),[rt,Ve]=n.useState(!1),[Ye,de]=n.useState(!1),[ie,Te]=n.useState(!1),[ot,mt]=n.useState(!1),[Pe,g]=n.useState(!1),B=ir({baseUrl:a,config:u}),it=n.useRef(B);it.current=B;const gt=n.useRef(et),yt=n.useRef(He),xt=n.useRef(Be),vt=n.useRef(nt),Ct=n.useRef(tt),Lt=n.useRef(Q),St=n.useRef(We),bt=n.useRef(qe),se=n.useRef(null);gt.current=et,yt.current=He,xt.current=Be,vt.current=nt,Ct.current=tt,Lt.current=Q,St.current=We,bt.current=qe;function xe(y){const h=bt.current;return h?h.includes(y):!0}function ve(y,h){console.warn(`[LiveLayer] Agent command "${y}" blocked — capability "${h}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const Ge=n.useCallback(y=>{var q,te,fe,Xe;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")){ve("navigate","navigate");return}const _=typeof h.href=="string"?h.href:null;if(!_){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(it.current.playPageChange(),gt.current){try{gt.current(_)}catch(R){console.warn(`[LiveLayer] onNavigate threw for "${_}". Falling back. Error:`,R)}return}if(typeof document<"u"){const R=document.querySelector(`a[href="${_.replace(/"/g,'\\"')}"]`);if(R){R.click();return}}if(typeof window<"u"&&typeof history<"u")try{history.pushState({},"",_),window.dispatchEvent(new PopStateEvent("popstate"))}catch(R){console.warn(`[LiveLayer] history.pushState fallback failed for "${_}". 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")){ve("scroll_to","scroll");return}const _=typeof h.selector=="string"?h.selector:null;if(!_)return;const R=h.behavior==="instant"?"instant":"smooth";if(yt.current){try{yt.current(_,R)}catch($){console.warn("[LiveLayer] onScrollToSelector threw.",$)}return}if(typeof document<"u"){let $=null;try{$=document.querySelector(_)}catch{console.warn(`[LiveLayer] scroll_to: invalid selector "${_}".`);return}if(!$){console.warn(`[LiveLayer] scroll_to: no element matched "${_}". The user may be on a different page. See https://livelayer.studio/docs/errors/scroll-no-match`);return}$.scrollIntoView({behavior:R,block:"start"})}return}if(h.type==="request_page_context"){if(!xe("read_page")){ve("request_page_context","read_page");return}const _=typeof h.requestId=="string"?h.requestId:void 0,R=(q=se.current)==null?void 0:q.call(se),$=W=>{const P=R,V=P==null?void 0:P.localParticipant;if(V!=null&&V.publishData)try{const K=_?{...W,requestId:_}:W,De=new TextEncoder().encode(JSON.stringify(K));V.publishData(De,{reliable:!0})}catch(K){console.warn("[LiveLayer] publishData failed.",K)}},D=Lt.current,H=Ct.current;try{if(H){const W=H(D);if(W instanceof Promise){$({type:"page_context_pending"}),W.then(P=>$({type:"page_context",context:P})).catch(P=>{console.warn("[LiveLayer] getPageContext rejected; falling back to default walker.",P),$({type:"page_context",context:kt(D)})});return}$({type:"page_context",context:W});return}$({type:"page_context",context:kt(D)})}catch(W){console.warn("[LiveLayer] page-context extraction threw. Sending empty context.",W),$({type:"page_context",context:{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:D}})}return}if(h.type==="scroll_page"){if(!xe("scroll")){ve("scroll_page","scroll");return}const _=h.direction;if(_!=="up"&&_!=="down"&&_!=="top"&&_!=="bottom"){console.warn(`[LiveLayer] scroll_page: invalid direction "${String(_)}". Expected up | down | top | bottom.`);return}const R=h.behavior==="instant"?"instant":"smooth";if(xt.current){try{xt.current(_,R)}catch(P){console.warn("[LiveLayer] onScrollPage threw.",P)}return}if(typeof window>"u")return;const $={behavior:R},D=zr(),H=P=>{D instanceof Window?D.scrollBy({top:P,...$}):D.scrollBy({top:P,...$})},W=P=>{D instanceof Window?D.scrollTo({top:P,...$}):D.scrollTo({top:P,...$})};_==="up"?H(-tn(D)):_==="down"?H(tn(D)):W(_==="top"?0:Or(D));return}if(h.type==="click"){if(!xe("click")){ve("click","click");return}const _=typeof h.selector=="string"?h.selector:null;if(!_){console.warn("[LiveLayer] click: missing selector.");return}if(vt.current){try{vt.current(_)}catch($){console.warn("[LiveLayer] onClick threw.",$)}return}if(typeof document>"u")return;let R=null;try{R=document.querySelector(_)}catch{console.warn(`[LiveLayer] click: invalid selector "${_}".`);return}if(!R){console.warn(`[LiveLayer] click: no element matched "${_}". 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}(te=R.click)==null||te.call(R);return}if(h.type==="fill_form"||h.type==="focus_field"){if(!xe("fill_forms")){ve(h.type,"fill_forms");return}if(typeof document>"u")return;h.type==="fill_form"&&it.current.playConfirmation();const _=typeof h.formId=="string"?h.formId:null;if(!_){console.warn(`[LiveLayer] ${h.type}: missing formId.`);return}const R=document.querySelector(`[data-ll-form="${_.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] ${h.type}: no form with data-ll-form="${_}". 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 D=typeof h.fieldName=="string"?h.fieldName:null;if(!D){console.warn("[LiveLayer] focus_field: missing fieldName.");return}const H=R.querySelector(`[data-ll-field="${D.replace(/"/g,'\\"')}"]`);if(!H){console.warn(`[LiveLayer] focus_field: no field "${D}" in form "${_}".`);return}if(!ft(H)){console.warn(`[LiveLayer] focus_field: field "${D}" is privacy-protected and not focusable.`);return}H.focus();return}const $=h.values&&typeof h.values=="object"?h.values:null;if(!$){console.warn("[LiveLayer] fill_form: missing or invalid values.");return}for(const[D,H]of Object.entries($)){if(typeof H!="string")continue;const W=R.querySelector(`[data-ll-field="${D.replace(/"/g,'\\"')}"]`);if(!W){console.warn(`[LiveLayer] fill_form: no field "${D}" in form "${_}". Skipping.`);continue}if(!ft(W)){console.warn(`[LiveLayer] fill_form: field "${D}" is privacy-protected (password / cc-* / private). Skipping.`);continue}try{Tr(W,H)}catch(P){console.warn(`[LiveLayer] fill_form: failed to set "${D}".`,P)}}return}if(h.type==="submit_form"){if(!xe("submit_forms")){ve("submit_form","submit_forms");return}if(typeof document>"u")return;const _=typeof h.formId=="string"?h.formId:null;if(!_){console.warn("[LiveLayer] submit_form: missing formId.");return}it.current.playConfirmation();const R=document.querySelector(`[data-ll-form="${_.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] submit_form: no form with data-ll-form="${_}".`);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 $=typeof h.requestId=="string"?h.requestId:void 0,D=(fe=se.current)==null?void 0:fe.call(se),H=V=>{const K=D,De=K==null?void 0:K.localParticipant;if(De!=null&&De.publishData)try{const qn=$?{...V,requestId:$}:V,Fn=new TextEncoder().encode(JSON.stringify(qn));De.publishData(Fn,{reliable:!0})}catch{}};let W=!1;const P=()=>{W=!0,H({type:"form_submitted",formId:_})};R.addEventListener("submit",P,{once:!0});try{typeof R.requestSubmit=="function"?R.requestSubmit():R.submit()}catch(V){console.warn("[LiveLayer] submit_form: requestSubmit threw.",V),R.removeEventListener("submit",P),H({type:"form_submit_blocked",formId:_,reason:"exception"});return}setTimeout(()=>{W||(R.removeEventListener("submit",P),H({type:"form_submit_blocked",formId:_,reason:"validation"}))},500);return}if(h.type==="request_routes"){if(!xe("read_page")){ve("request_routes","read_page");return}const _=typeof h.requestId=="string"?h.requestId:void 0,$=(Xe=se.current)==null?void 0:Xe.call(se),D=$==null?void 0:$.localParticipant;if(!(D!=null&&D.publishData))return;const H=P=>{try{const V=_?{type:"routes",routes:P,requestId:_}:{type:"routes",routes:P},K=new TextEncoder().encode(JSON.stringify(V));D.publishData(K,{reliable:!0})}catch(V){console.warn("[LiveLayer] request_routes: publishData failed.",V)}},W=St.current;if(W){try{const P=W(),V=K=>{if(!Array.isArray(K)){H([]);return}H(K.map(Sn).slice(0,200))};P instanceof Promise?P.then(V).catch(K=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",K),H(ct())}):V(P)}catch(P){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",P),H(ct())}return}try{H(ct())}catch(P){console.warn("[LiveLayer] request_routes: extractRoutes threw.",P)}return}Hr.has(h.type)||Le==null||Le(h)}},[Le,Ce]),U=on({agentId:M?"__controlled__":Ue,baseUrl:a,apiKey:s,sessionEndpoint:f,sessionBody:d,onDataMessage:M?void 0:Ge});n.useEffect(()=>{if(M!=null&&M.subscribeToDataMessages)return M.subscribeToDataMessages(Ge)},[M,Ge]),se.current=()=>{var y;return(y=U.getRoom)==null?void 0:y.call(U)},n.useEffect(()=>{var q;if(typeof window>"u")return;const y=((q=window.location)==null?void 0:q.hostname)||"";if(y==="localhost"||y==="127.0.0.1"||y==="0.0.0.0"||y.endsWith(".local")||y.endsWith(".test"))return window.__livelayerSimulateCommand=te=>{try{Ge(te)}catch(fe){console.warn("[LiveLayer] simulate-command threw:",fe)}},()=>{delete window.__livelayerSimulateCommand}},[Ge]);const x=n.useMemo(()=>M?{connectionState:M.connectionState,agentState:M.agentState,transcript:M.transcript,videoElement:M.videoElement,audioElement:M.audioElement,canResume:M.canResume,error:M.error,agentConfig:null,connect:async()=>{await M.onConnect()},disconnect:()=>M.onDisconnect(),getRoom:U.getRoom,isControlled:!0}:{connectionState:U.connectionState,agentState:U.agentState,transcript:U.transcript,videoElement:U.videoElement,audioElement:U.audioElement,canResume:U.canResume,error:U.error,agentConfig:U.agentConfig,connect:U.connect,disconnect:U.disconnect,getRoom:U.getRoom,isControlled:!1},[M,U]),Et=n.useRef(x);Et.current=x;const Rt=n.useRef(M);Rt.current=M,n.useImperativeHandle(o,()=>({sendData:async y=>{var fe,Xe;const h=Rt.current;if(h!=null&&h.publishData){try{await h.publishData(y)}catch(_){console.warn("[AvatarWidget] sendData (controlled) failed:",_)}return}const q=(Xe=(fe=Et.current)==null?void 0:fe.getRoom)==null?void 0:Xe.call(fe),te=q==null?void 0:q.localParticipant;if(te!=null&&te.publishData)try{const _=new TextEncoder().encode(JSON.stringify(y));await te.publishData(_,{reliable:!0})}catch(_){console.warn("[AvatarWidget] sendData failed:",_)}}}),[]);const Nt=n.useRef(null);n.useEffect(()=>{const y=x.videoElement,h=Nt.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;ge.attach(y);const h=y.play();return h&&typeof h.catch=="function"&&h.catch(q=>{(q==null?void 0:q.name)==="NotAllowedError"&&Ve(!0)}),()=>{ge.detach()}},[x.audioElement]),n.useEffect(()=>{if(x.isControlled||x.connectionState!=="connected")return;const y=x.getRoom();if(y)return ee.setupMic(y).catch(()=>{}),()=>{ee.teardownMic()}},[x.isControlled,x.connectionState]),n.useEffect(()=>{var h;if(x.connectionState!=="connected")return;const y=x.isControlled?(h=M==null?void 0:M.getRoom)==null?void 0:h.call(M):x.getRoom();if(y)return ue.attachRoom(y),Ne.attachRoom(y),ye.refresh(),()=>{ue.teardown(),Ne.teardown()}},[x.isControlled,x.connectionState,M]),n.useEffect(()=>{const y=x.audioElement;y&&(y.muted=Pe)},[x.audioElement,Pe]);const Mn=n.useCallback(y=>{const h={type:"user_message",text:y};if(M!=null&&M.publishData){try{M.publishData(h)}catch{}return}const q=x.getRoom();if(q)try{const te=new TextEncoder().encode(JSON.stringify(h));q.localParticipant.publishData(te,{reliable:!0})}catch{}},[x,M]),In=n.useCallback(()=>{g(y=>!y)},[]);n.useEffect(()=>{je==null||je(x.connectionState),x.connectionState==="connected"?we==null||we():x.connectionState==="disconnected"&&(_e==null||_e())},[x.connectionState,we,_e,je]),n.useEffect(()=>{Ae==null||Ae(x.transcript)},[x.transcript,Ae]),n.useEffect(()=>{ke==null||ke(x.agentState)},[x.agentState,ke]),n.useEffect(()=>{B.setThinking(x.agentState==="thinking")},[x.agentState,B]);const At=n.useRef(!1);n.useEffect(()=>{x.isControlled||!m||At.current||Fe&&x.connectionState==="idle"&&(At.current=!0,x.connect())},[m,x.connectionState,x,Fe]);const Tn=n.useCallback(y=>{const h=L==null?void 0:L.find(q=>q.id===y);h&&(Te(!1),y!==me&&(de(!0),x.disconnect(),Ee||ht(y),I==null||I(h)))},[L,me,x,Ee,I]);n.useEffect(()=>{Ye&&x.connectionState==="connected"&&de(!1)},[x.connectionState,Ye]),n.useEffect(()=>{if(!ie)return;const y=h=>{h.key==="Escape"&&Te(!1)};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[ie]);const Pn=!!z||!!(G!=null&&G.avatarImageUrl)||x.isControlled,Ke=dn(Ue,a,Pn);qe===void 0&&((It=Ke.info)!=null&&It.capabilities)&&(bt.current=Ke.info.capabilities);const st=(G==null?void 0:G.name)??T??((Tt=x.agentConfig)==null?void 0:Tt.name)??((Pt=Ke.info)==null?void 0:Pt.name)??"Live Layer",wt=(G==null?void 0:G.avatarImageUrl)??z??((Dt=x.agentConfig)==null?void 0:Dt.avatarImageUrl)??(($t=Ke.info)==null?void 0:$t.avatarImageUrl)??null,Dn=w??((zt=x.agentConfig)==null?void 0:zt.idleLoopUrl)??((Ot=Ke.info)==null?void 0:Ot.idleLoopUrl)??null,$n=S??null,zn=n.useCallback(()=>X("expanded"),[X]),On=n.useCallback(()=>X("minimized"),[X]),Mt=n.useCallback(()=>{x.disconnect(),X("hidden")},[x,X]),Hn=n.useCallback(()=>{const y=x.audioElement;y&&y.play().then(()=>Ve(!1)).catch(()=>{})},[x.audioElement]),Wn=n.useCallback(()=>{Ve(!1),x.connect()},[x]),Je={...Se,...Re?{}:{zIndex:Me}};j.primaryColor&&(Je["--ll-color-primary"]=j.primaryColor),j.accentColor&&(Je["--ll-color-accent"]=j.accentColor),j.backgroundColor&&(Je["--ll-color-bg"]=j.backgroundColor),j.textColor&&(Je["--ll-color-fg"]=j.textColor);const Bn=["ll-widget",`ll-widget--${oe}`,`ll-widget--${ce?"mobile":"desktop"}`,pt].filter(Boolean).join(" ");return Fe?t.jsxs("div",{className:Bn,style:Je,"data-display-mode":oe,"data-position":N,"data-experience-mode":p==="EMBEDDED"?"embedded":"widget",children:[oe==="hidden"&&t.jsx(dr,{position:N,isMobile:ce,isSpeaking:x.agentState==="speaking",onExpand:()=>X("expanded"),label:`Open ${st} widget`,avatarImageUrl:wt,agentName:st}),oe==="minimized"&&t.jsx(pr,{position:N,isMobile:ce,agentName:st,avatarImageUrl:wt,agentState:x.agentState,isMuted:ee.isMuted,audioLevel:ge,onExpand:zn,onToggleMute:ee.toggleMute,onClose:Mt}),oe==="expanded"&&t.jsx(br,{position:N,isMobile:ce,agentName:st,avatarImageUrl:wt,idleLoopUrl:Dn,greeting:$n,branding:j,teamMembers:L,currentTeamMemberId:me,isSwitchingTeamMember:Ye,teamSwitcherOpen:ie,onToggleTeamSwitcher:()=>Te(y=>!y),onSelectTeamMember:Tn,connectionState:x.connectionState,agentState:x.agentState,transcript:x.transcript,isMuted:ee.isMuted,micDevices:ye.mics,isCameraEnabled:ue.isEnabled,cameraPreviewEl:ue.previewEl,cameraDevices:ye.cameras,activeCameraId:ue.activeDeviceId,isScreenShareEnabled:Ne.isEnabled,screenPreviewEl:Ne.previewEl,isSpeakerMuted:Pe,allowCamera:A,allowScreenShare:O,allowTyping:F,showMinimize:ne,chromeless:J,compactControls:be,transforming:ae,transformingLabel:he,languageMenuOpen:ot,onToggleLanguageMenu:()=>mt(y=>!y),needsUserGesture:rt,canResume:x.canResume,micError:ee.micError,error:x.error,avatarVideoContainerRef:Nt,agentVideoEl:x.videoElement,onConnect:()=>void x.connect(),onDisconnect:()=>x.disconnect(),onRetry:Wn,onResumeAudio:Hn,onToggleMute:ee.toggleMute,onToggleCamera:()=>void ue.toggle(),onSwitchCameraDevice:y=>void ue.switchDevice(y),onToggleScreenShare:()=>void Ne.toggle(),onToggleSpeaker:In,onSendMessage:Mn,onMinimize:On,onClose:Mt,onClearMicError:ee.clearError})]}):null});Nn.displayName="AvatarWidgetInner";const An=n.forwardRef(function(r,o){return t.jsx(rn,{children:t.jsx(Nn,{...r,ref:o})})});An.displayName="AvatarWidget";const Wr=({agentId:e,baseUrl:r,apiKey:o,mode:i,onAgentEvent:s,className:a,style:f})=>{const d=n.useRef(null),u=n.useRef(null),p=n.useRef(s);p.current=s;const m=n.useCallback(l=>{var C;const c=l.detail;(C=p.current)==null||C.call(p,c)},[]);return n.useEffect(()=>{const l=d.current;if(!l)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",m),l.appendChild(c),u.current=c,()=>{c.removeEventListener("agent-event",m),l.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:d,className:a,style:f})},Br=n.forwardRef(function({id:r,intent:o,as:i="div",className:s,style:a,children:f},d){return n.createElement(i,{ref:d,"data-ll-region":r,"data-ll-intent":o,className:s,style:a},f)}),qr=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})}),Fr=n.forwardRef(function(r,o){const{name:i,label:s,labelClassName:a}=r,f={name:i,"data-ll-field":i};let d;if("as"in r&&r.as==="textarea"){const{name:u,label:p,labelClassName:m,as:l,...c}=r;d=t.jsx("textarea",{ref:o,...f,...c})}else if("as"in r&&r.as==="select"){const{name:u,label:p,labelClassName:m,as:l,children:c,...C}=r;d=t.jsx("select",{ref:o,...f,...C,children:c})}else{const{name:u,label:p,labelClassName:m,as:l,...c}=r;d=t.jsx("input",{ref:o,...f,...c})}return s===void 0?d:t.jsxs("label",{className:a,children:[s,d]})});let nn=1;function Ur({onMount:e,defaultOpen:r=!1,storageKey:o="ll-debug-open"}){const[i,s]=n.useState(r),[a,f]=n.useState([]),[d,u]=n.useState(""),[p,m]=n.useState(!1),l=n.useRef(new Set),c=n.useRef([]),C=n.useRef(p);C.current=p,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=b=>{(b.metaKey||b.ctrlKey)&&b.shiftKey&&b.key.toLowerCase()==="l"&&(b.preventDefault(),s(L=>!L))};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[]),n.useEffect(()=>{const v=setInterval(()=>{if(c.current.length===0||C.current)return;const b=c.current.splice(0,c.current.length);f(L=>[...b.reverse(),...L].slice(0,200))},100);return()=>clearInterval(v)},[]);const N=n.useRef(!1);if(n.useEffect(()=>{!e||N.current||(N.current=!0,e(v=>{c.current.push({id:nn++,ts:Date.now(),kind:"event",type:v.eventName,data:v.data})}))},[e]),n.useEffect(()=>{const v=console.warn,b=console.log,L=(E,I)=>function(...w){try{const S=typeof w[0]=="string"?w[0]:"";S.startsWith("[LiveLayer]")&&c.current.push({id:nn++,ts:Date.now(),kind:E,type:S.slice(0,120),data:{args:w.slice(1).map(z=>Yr(z))}})}catch{}return I.apply(this,w)};return console.warn=L("warn",v),console.log=L("log",b),()=>{console.warn=v,console.log=b}},[]),!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 k=a.filter(v=>{if(!d)return!0;const b=d.toLowerCase();return v.type.toLowerCase().includes(b)||JSON.stringify(v.data||{}).toLowerCase().includes(b)});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:()=>m(v=>!v),style:_t(p?"#f59e0b":"transparent"),title:"Pause / resume capture",children:p?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{f([]),c.current=[]},style:_t("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:_t("transparent"),"aria-label":"Close",title:"Close (Cmd/Ctrl + Shift + L)",children:"✕"})]}),t.jsx("input",{type:"text",value:d,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:k.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
- })`})]}):k.map(x=>t.jsx(Vr,{entry:x,expanded:l.current.has(x.id),onToggle:()=>{l.current.has(x.id)?l.current.delete(x.id):l.current.add(x.id),f(v=>[...v])}},x.id))})]})}function Vr({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 _t(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 Yr(e){try{return e instanceof Error?{message:e.message,stack:e.stack}:(JSON.stringify(e),e)}catch{return String(e)}}function Gr(){const[e,r]=n.useState([]),o=n.useCallback(s=>{r(a=>{const f=a.findIndex(d=>d.id===s.id);if(f>=0){const d=a.slice();return d[f]=s,d}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=An;exports.ErrorBoundary=rn;exports.LiveLayerDebugPanel=Ur;exports.LiveLayerField=Fr;exports.LiveLayerForm=qr;exports.LiveLayerRegion=Br;exports.LiveLayerWidget=Wr;exports.clearPageContextCache=Ln;exports.clearRoutesCache=Rn;exports.extractPageContext=Cn;exports.extractRoutes=En;exports.getCachedPageContext=kt;exports.getCachedRoutes=ct;exports.matchesPattern=gn;exports.normalizeRouteInput=Sn;exports.shouldRenderAtPath=yn;exports.useAgentInfo=dn;exports.useAudioLevel=sn;exports.useCameraState=ln;exports.useDisplayMode=fn;exports.useDisplayModePersistence=pn;exports.useIsMobile=hn;exports.useLiveKitSession=on;exports.useMediaDevices=un;exports.useMicrophoneState=an;exports.usePathname=mn;exports.useRouteMatch=xn;exports.useScreenShareState=cn;exports.useTranscript=Gr;
5
+ })`})]}):k.map(v=>t.jsx(Vr,{entry:v,expanded:l.current.has(v.id),onToggle:()=>{l.current.has(v.id)?l.current.delete(v.id):l.current.add(v.id),f(b=>[...b])}},v.id))})]})}function Vr({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 _t(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 Yr(e){try{return e instanceof Error?{message:e.message,stack:e.stack}:(JSON.stringify(e),e)}catch{return String(e)}}function Gr(){const[e,r]=n.useState([]),o=n.useCallback(s=>{r(a=>{const f=a.findIndex(d=>d.id===s.id);if(f>=0){const d=a.slice();return d[f]=s,d}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=An;exports.ErrorBoundary=rn;exports.LiveLayerDebugPanel=Ur;exports.LiveLayerField=Fr;exports.LiveLayerForm=qr;exports.LiveLayerRegion=Br;exports.LiveLayerWidget=Wr;exports.clearPageContextCache=Ln;exports.clearRoutesCache=Rn;exports.extractPageContext=Cn;exports.extractRoutes=En;exports.getCachedPageContext=kt;exports.getCachedRoutes=ct;exports.matchesPattern=gn;exports.normalizeRouteInput=Sn;exports.shouldRenderAtPath=yn;exports.useAgentInfo=dn;exports.useAudioLevel=sn;exports.useCameraState=ln;exports.useDisplayMode=fn;exports.useDisplayModePersistence=pn;exports.useIsMobile=hn;exports.useLiveKitSession=on;exports.useMediaDevices=un;exports.useMicrophoneState=an;exports.usePathname=mn;exports.useRouteMatch=xn;exports.useScreenShareState=cn;exports.useTranscript=Gr;