@livelayer/react 0.5.14 → 0.5.15

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
@@ -472,11 +472,22 @@ export declare interface MicrophoneStateHandle {
472
472
  micError: string | null;
473
473
  /** Toggle mute on the currently-published track. No-op if no track. */
474
474
  toggleMute: () => void;
475
+ /**
476
+ * Set the mute state explicitly. Used by the agent-first-utterance
477
+ * gate to suppress mic publish until the agent finishes speaking, so
478
+ * the agent's own audio doesn't bleed back through the user's mic
479
+ * during the greeting.
480
+ */
481
+ setMuted: (muted: boolean) => void;
475
482
  /**
476
483
  * Create + publish a local mic track into the given room. Safe to call
477
- * multiple times — replaces any existing track.
484
+ * multiple times — replaces any existing track. When `startMuted` is
485
+ * true the new track is muted before publish so no audio reaches the
486
+ * agent until the gate opens.
478
487
  */
479
- setupMic: (room: Room) => Promise<void>;
488
+ setupMic: (room: Room, opts?: {
489
+ startMuted?: boolean;
490
+ }) => Promise<void>;
480
491
  /** Unpublish and dispose the current track. Safe to call when no track. */
481
492
  teardownMic: () => void;
482
493
  /** Clear the error state (e.g. after user clicks Retry). */
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"),r=require("react"),kn=require("@livelayer/sdk"),nt=require("livekit-client");class Bt extends r.Component{constructor(){super(...arguments),this.state={hasError:!1,error:null},this.reset=()=>{this.setState({hasError:!1,error:null})}}static getDerivedStateFromError(n){return{hasError:!0,error:n}}componentDidCatch(n,i){var o,s;(s=(o=this.props).onError)==null||s.call(o,n,i)}render(){var n;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:((n=this.state.error)==null?void 0:n.message)||"Something went wrong."}),t.jsx("button",{type:"button",className:"ll-error-boundary__retry",onClick:this.reset,children:"Reload widget"})]}):this.props.children}}function Wt(e){const[n,i]=r.useState("idle"),[o,s]=r.useState("idle"),[l,u]=r.useState([]),[d,p]=r.useState(null),[x,y]=r.useState(null),[a,c]=r.useState(null),[j,S]=r.useState(!1),[k,b]=r.useState(null),v=r.useRef(null),I=r.useRef(e.onDataMessage);I.current=e.onDataMessage,r.useEffect(()=>{const C={onConnectionStateChange:A=>{i(A),A==="connected"&&b(null)},onAgentStateChange:s,onTranscript:A=>u([...A]),onAgentConfig:p,onAudioTrack:A=>c(A),onVideoTrack:A=>y(A),onVideoTrackRemoved:()=>y(null),onError:A=>b(A),onDataMessage:A=>{var L;(L=I.current)==null||L.call(I,A)},onResumabilityChange:S},$=new kn.LiveKitSession({agentId:e.agentId,baseUrl:e.baseUrl,apiKey:e.apiKey,sessionEndpoint:e.sessionEndpoint,sessionBody:e.sessionBody},C);return v.current=$,i("idle"),s("idle"),u([]),p(null),y(null),c(null),S(!1),b(null),()=>{var A;(A=$.destroy)==null||A.call($),v.current=null}},[e.agentId,e.baseUrl,e.apiKey,e.sessionEndpoint,JSON.stringify(e.sessionBody??{})]);const E=r.useCallback(async()=>{const C=v.current;if(C)try{await C.connect()}catch($){throw b($ instanceof Error?$.message:String($)),$}},[]),T=r.useCallback(()=>{const C=v.current;C&&C.disconnect()},[]),m=r.useCallback(()=>{var C;return((C=v.current)==null?void 0:C.getRoom())??null},[]);return{connectionState:n,agentState:o,transcript:l,agentConfig:d,videoElement:x,audioElement:a,canResume:j,error:k,connect:E,disconnect:T,getRoom:m,session:v.current}}function Ft(){const e=r.useRef(null),n=r.useRef(null),i=r.useRef(null),o=r.useRef(null),s=r.useRef(new Set),l=r.useRef(null),u=r.useCallback(()=>{const a=n.current;if(!a){o.current=null;return}(!l.current||l.current.length!==a.frequencyBinCount)&&(l.current=new Uint8Array(new ArrayBuffer(a.frequencyBinCount)));const c=l.current;a.getByteFrequencyData(c);let j=0;for(let k=0;k<c.length;k++)j+=c[k];const S=j/c.length/255;for(const k of s.current)try{k(S)}catch(b){console.error("[useAudioLevel] subscriber threw:",b)}o.current=requestAnimationFrame(u)},[]),d=r.useCallback(()=>{if(e.current||typeof window>"u"||typeof AudioContext>"u")return;const a=new AudioContext,c=a.createAnalyser();c.fftSize=64,c.connect(a.destination),e.current=a,n.current=c},[]),p=r.useCallback(a=>{if(d(),!(!e.current||!n.current)){if(i.current){try{i.current.disconnect()}catch{}i.current=null}try{const c=e.current.createMediaElementSource(a);c.connect(n.current),i.current=c}catch(c){console.warn("[useAudioLevel] createMediaElementSource failed:",c);return}o.current===null&&(o.current=requestAnimationFrame(u))}},[d,u]),x=r.useCallback(()=>{if(o.current!==null&&(cancelAnimationFrame(o.current),o.current=null),i.current){try{i.current.disconnect()}catch{}i.current=null}},[]),y=r.useCallback(a=>(s.current.add(a),()=>{s.current.delete(a)}),[]);return r.useEffect(()=>()=>{if(x(),n.current){try{n.current.disconnect()}catch{}n.current=null}if(e.current){try{e.current.close()}catch{}e.current=null}s.current.clear(),l.current=null},[x]),{attach:p,detach:x,subscribe:y}}function Ut(){const[e,n]=r.useState(!1),[i,o]=r.useState(null),s=r.useRef(null),l=r.useRef(null),u=r.useCallback(async y=>{if(s.current&&l.current){try{await l.current.localParticipant.unpublishTrack(s.current)}catch{}s.current.stop(),s.current=null}l.current=y,o(null);try{const a=await nt.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});await y.localParticipant.publishTrack(a),s.current=a,n(a.isMuted)}catch(a){const c=a instanceof Error&&a.name==="NotAllowedError"?"Enable your microphone to talk with the agent.":"Microphone unavailable. Check browser permissions and try again.";throw o(c),a}},[]),d=r.useCallback(()=>{const y=s.current;y&&(y.isMuted?(y.unmute(),n(!1)):(y.mute(),n(!0)))},[]),p=r.useCallback(()=>{const y=s.current,a=l.current;if(y&&a){try{a.localParticipant.unpublishTrack(y)}catch{}y.stop()}s.current=null,l.current=null,n(!1)},[]),x=r.useCallback(()=>o(null),[]);return{isMuted:e,micError:i,toggleMute:d,setupMic:u,teardownMic:p,clearError:x}}const Sn={resolution:{width:640,height:480,frameRate:24}};function Vt(){const[e,n]=r.useState(!1),[i,o]=r.useState(null),[s,l]=r.useState(null),[u,d]=r.useState(""),p=r.useRef(null),x=r.useRef(null),y=r.useCallback(v=>{p.current=v},[]),a=r.useCallback(()=>{const v=p.current,I=x.current;if(I&&v){const E=v.localParticipant.getTrackPublication(nt.Track.Source.Camera);if(E!=null&&E.track){try{v.localParticipant.unpublishTrack(E.track)}catch{}E.track.stop()}else I.stop()}x.current=null,l(null),n(!1)},[]),c=r.useCallback(async v=>{const I=p.current;if(I){o(null);try{const E={...Sn};v&&(E.deviceId=v);const T=await nt.createLocalVideoTrack(E);await I.localParticipant.publishTrack(T),x.current=T;const m=T.attach();l(m),n(!0),v&&d(v);try{I.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_camera_on"})),{reliable:!0})}catch{}}catch(E){const T=E instanceof Error&&E.name==="NotAllowedError"?"Enable your camera in the browser to share video.":"Camera unavailable. Check permissions and try again.";o(T)}}},[]),j=r.useCallback(async()=>{e?a():await c(u||void 0)},[e,u,a,c]),S=r.useCallback(async v=>{a(),await c(v)},[a,c]),k=r.useCallback(()=>{a(),p.current=null,o(null),d("")},[a]),b=r.useCallback(()=>o(null),[]);return r.useEffect(()=>()=>{x.current&&x.current.stop()},[]),{isEnabled:e,error:i,previewEl:s,activeDeviceId:u,toggle:j,switchDevice:S,attachRoom:y,teardown:k,clearError:b}}function Yt(){const[e,n]=r.useState(!1),[i,o]=r.useState(null),[s,l]=r.useState(null),u=r.useRef(null),d=r.useCallback(c=>{u.current=c},[]),p=r.useCallback(()=>l(null),[]),x=r.useCallback(async()=>{const c=u.current;if(c){if(e){try{await c.localParticipant.setScreenShareEnabled(!1)}catch{}p(),n(!1);return}o(null);try{await c.localParticipant.setScreenShareEnabled(!0);let j=0;const S=()=>{const k=c.localParticipant.getTrackPublication(nt.Track.Source.ScreenShare);if(k!=null&&k.track){const b=k.track.attach();l(b),n(!0);try{c.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_screen_share_on"})),{reliable:!0})}catch{}return}j++<10?setTimeout(S,100):n(!0)};S()}catch(j){const S=j instanceof Error?j.name:"";S!=="NotAllowedError"&&S!=="AbortError"&&o("Screen share unavailable. Try again."),n(!1)}}},[e,p]),y=r.useCallback(()=>{const c=u.current;if(c&&e)try{c.localParticipant.setScreenShareEnabled(!1)}catch{}p(),n(!1),o(null),u.current=null},[e,p]),a=r.useCallback(()=>o(null),[]);return{isEnabled:e,error:i,previewEl:s,toggle:x,attachRoom:d,teardown:y,clearError:a}}function Gt(){const[e,n]=r.useState([]),[i,o]=r.useState([]),s=r.useCallback(async()=>{if(!(typeof navigator>"u"||!navigator.mediaDevices))try{const l=await navigator.mediaDevices.enumerateDevices();n(l.filter(u=>u.kind==="audioinput")),o(l.filter(u=>u.kind==="videoinput"))}catch{}},[]);return r.useEffect(()=>{if(s(),typeof navigator>"u"||!navigator.mediaDevices)return;const l=()=>void s();return navigator.mediaDevices.addEventListener("devicechange",l),()=>navigator.mediaDevices.removeEventListener("devicechange",l)},[s]),{mics:e,cameras:i,refresh:s}}function Jt(e,n,i=!1){const[o,s]=r.useState(null),[l,u]=r.useState(null),[d,p]=r.useState(!i&&!!e);return r.useEffect(()=>{if(i||!e){p(!1);return}const x=new AbortController,y=n||"https://app.livelayer.studio";return p(!0),u(null),fetch(`${y}/api/widget/agent/${encodeURIComponent(e)}`,{signal:x.signal}).then(async a=>{if(!a.ok){const c=await a.json().catch(()=>({}));throw new Error(c.error||`HTTP ${a.status}`)}return a.json()}).then(a=>{x.signal.aborted||(s(a),p(!1))}).catch(a=>{x.signal.aborted||(u(a instanceof Error?a.message:"Agent lookup failed"),p(!1))}),()=>x.abort()},[e,n,i]),{info:o,error:l,loading:d}}function Cn(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function Ln(e,n){if(!(typeof window>"u"))try{window.localStorage.setItem(e,n)}catch{}}function Kt({value:e,defaultValue:n="expanded",onChange:i}={}){const o=e!==void 0,[s,l]=r.useState(n),u=o?e:s,d=r.useCallback(p=>{p!==u&&(o||l(p),i==null||i(p))},[u,o,i]);return[u,d]}const jn=["hidden","minimized","expanded"];function En(e){return e&&jn.includes(e)?e:null}function Xt({value:e,defaultValue:n="expanded",onChange:i,persistKey:o="ll-widget",disablePersistence:s=!1}={}){const l=`${o}:display-mode`,u=r.useRef(!1),[d,p]=Kt({value:e,defaultValue:n,onChange:x=>{e===void 0&&!s&&Ln(l,x),i==null||i(x)}});return r.useEffect(()=>{if(u.current||(u.current=!0,s||e!==void 0))return;const x=En(Cn(l));x&&x!==d&&p(x)},[]),[d,p]}const Rn=640;function Qt(e=Rn){const[n,i]=r.useState(!1);return r.useEffect(()=>{if(e===!1){i(!1);return}if(typeof window>"u"||typeof window.matchMedia>"u")return;const o=`(max-width: ${e-1}px)`,s=window.matchMedia(o),l=()=>i(s.matches);return l(),typeof s.addEventListener=="function"?(s.addEventListener("change",l),()=>s.removeEventListener("change",l)):(s.addListener(l),()=>{s.removeListener(l)})},[e]),n}const Lt="__llHistoryPatched",rt="ll:pathname";function Nn(){if(typeof window>"u"||window.history[Lt])return;const e=window.history.pushState,n=window.history.replaceState;window.history.pushState=function(...i){const o=e.apply(this,i);return window.dispatchEvent(new Event(rt)),o},window.history.replaceState=function(...i){const o=n.apply(this,i);return window.dispatchEvent(new Event(rt)),o},window.history[Lt]=!0}function jt(){return typeof window>"u"?"/":window.location.pathname||"/"}function Zt(e){const[n,i]=r.useState(()=>e??jt());return r.useEffect(()=>{if(e!==void 0)return;Nn();const o=()=>i(jt());return o(),window.addEventListener("popstate",o),window.addEventListener(rt,o),()=>{window.removeEventListener("popstate",o),window.removeEventListener(rt,o)}},[e]),e??n}const Et=new Map,An=/[\\^$+?.()|{}[\]]/g;function Mn(e){return e.replace(An,"\\$&")}function In(e){const n=Et.get(e);if(n)return n;const i=e.length>1&&e.endsWith("/")?e.slice(0,-1):e,o="",s="",l=i.replace(/\*\*/g,o).replace(/\*/g,s),d=Mn(l).replace(new RegExp(`\\/${o}`,"g"),"(?:\\/.*)?").replace(new RegExp(o,"g"),".*").replace(new RegExp(s,"g"),"[^/]+"),p=new RegExp(`^${d}\\/?$`);return Et.set(e,p),p}function Tn(e,n){const i=n.length>1&&n.endsWith("/")?n.slice(0,-1):n;return In(e).test(i)}function en(e,n){return typeof e=="function"?e(n):e instanceof RegExp?e.test(n):Tn(e,n)}function Rt(e,n){if(!e||e.length===0)return!1;for(const i of e)if(en(i,n))return!0;return!1}function tn(e,n,i){return e===void 0?!0:Rt(i,e)?!1:n&&n.length>0?Rt(n,e):!0}function nn(e,n,i){return r.useMemo(()=>tn(e,n,i),[e,n,i])}const Nt=({muted:e=!1,className:n})=>e?t.jsxs("svg",{className:n,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:n,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"})}),At=({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"})}),Pn=({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"})}),Dn={left:180,right:0,up:-90,down:90},Mt=({direction:e="right",className:n})=>t.jsx("svg",{className:n,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,style:{transform:`rotate(${Dn[e]}deg)`},"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 6l6 6-6 6"})});function $n(e){return e==="top-left"||e==="bottom-left"?"left":"right"}const rn="ll-hidden-tab-center-y",zn=5,It=16;function Hn(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(rn);if(!e)return null;const n=Number.parseFloat(e);return Number.isFinite(n)?n:null}catch{return null}}function Tt(e){if(!(typeof window>"u"))try{window.localStorage.setItem(rn,String(e))}catch{}}const On=({position:e,isMobile:n,isSpeaking:i,onExpand:o,label:s="Open widget",avatarImageUrl:l,agentName:u})=>{const d=$n(e),p=d==="right"?"left":"right",x=n?80:72,y=!!l,[a,c]=r.useState(null),[j,S]=r.useState(!1),k=r.useRef(null),b=r.useRef(!1),v=r.useCallback(L=>{if(typeof window>"u")return L;const P=x/2,z=It+P,F=window.innerHeight-It-P;return F<z?Math.max(z,L):Math.max(z,Math.min(F,L))},[x]);r.useEffect(()=>{const L=Hn();c(v(L??window.innerHeight/2));const P=()=>{c(z=>z===null?null:v(z))};return window.addEventListener("resize",P),()=>window.removeEventListener("resize",P)},[v]);const I=r.useCallback(L=>{if(!(L.pointerType==="mouse"&&L.button!==0)&&a!==null){try{L.currentTarget.setPointerCapture(L.pointerId)}catch{}k.current={startClientY:L.clientY,startCenterY:a,moved:!1}}},[a]),E=r.useCallback(L=>{const P=k.current;if(!P)return;const z=L.clientY-P.startClientY;!P.moved&&Math.abs(z)>zn&&(P.moved=!0,S(!0)),P.moved&&c(v(P.startCenterY+z))},[v]),T=r.useCallback(L=>{const P=k.current;if(P){try{L.currentTarget.releasePointerCapture(L.pointerId)}catch{}k.current=null,P.moved&&(S(!1),b.current=!0,c(z=>(z!==null&&Tt(z),z)))}},[]),m=r.useCallback(()=>{if(b.current){b.current=!1;return}o()},[o]),C=r.useCallback(L=>{if(L.key==="ArrowUp"||L.key==="ArrowDown"){L.preventDefault();const P=L.key==="ArrowUp"?-8:8;c(z=>{if(z===null)return z;const F=v(z+P);return Tt(F),F})}},[v]),$=["ll-hidden",`ll-hidden--${d}`,n?"ll-hidden--mobile":"ll-hidden--desktop",i?"ll-hidden--speaking":null,j?"is-dragging":null,y?"ll-hidden--with-avatar":null].filter(Boolean).join(" "),A=a===null?void 0:{top:`${a-x/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:$,onPointerDown:I,onPointerMove:E,onPointerUp:T,onPointerCancel:T,onClick:m,onKeyDown:C,"aria-label":s,"data-position":e,style:A,children:y?t.jsxs(t.Fragment,{children:[t.jsx(Mt,{direction:p,className:"ll-hidden__chevron ll-hidden__chevron--mini"}),t.jsx("img",{src:l,alt:u?`${u} avatar`:"Agent avatar",className:"ll-hidden__avatar",draggable:!1})]}):t.jsx(Mt,{direction:p,className:"ll-hidden__chevron"})})},qn=({audioLevel:e,bars:n=20,maxHeight:i=20,minHeight:o=4,className:s,barClassName:l})=>{const u=r.useRef(null),d=r.useRef([]),p=r.useMemo(()=>{const y=(Math.sqrt(5)-1)/2;return Array.from({length:n},(a,c)=>.5+c*y%1*.5)},[n]);r.useEffect(()=>e.subscribe(a=>{for(let c=0;c<n;c++){const j=d.current[c];if(!j)continue;const S=Math.max(o,a*i*p[c]);j.style.height=`${S}px`}}),[e,n,i,o,p]);const x=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:u,className:x,"aria-hidden":"true",children:Array.from({length:n},(y,a)=>t.jsx("div",{ref:c=>{d.current[a]=c},className:["ll-waveform__bar",l].filter(Boolean).join(" "),style:{height:`${o}px`}},a))})},Bn=({position:e,isMobile:n,agentName:i,avatarImageUrl:o,agentState:s,isMuted:l,audioLevel:u,onExpand:d,onToggleMute:p,onClose:x})=>n?t.jsx("div",{className:"ll-minimized ll-minimized--mobile",role:"region","aria-label":`${i} widget`,children:t.jsxs("button",{type:"button",className:"ll-minimized__surface",onClick:d,"aria-label":`Expand ${i} widget`,children:[o?t.jsx("img",{src:o,alt:i,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsx(qn,{audioLevel:u,bars:16,maxHeight:18,className:"ll-minimized__waveform"}),t.jsx("span",{className:"ll-minimized__name",children:i}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("span",{className:"ll-minimized__btn",role:"button",tabIndex:0,onClick:y=>{y.stopPropagation(),p()},onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.stopPropagation(),y.preventDefault(),p())},"aria-label":l?"Unmute microphone":"Mute microphone",children:t.jsx(Nt,{muted:l,className:"ll-minimized__icon"})}),t.jsx(At,{className:"ll-minimized__icon ll-minimized__icon--expand"})]})]})}):t.jsx("div",{className:"ll-minimized ll-minimized--desktop","data-position":e,role:"region","aria-label":`${i} widget`,children:t.jsxs("div",{className:"ll-minimized__surface",children:[o?t.jsx("img",{src:o,alt:i,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:i}),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:p,"aria-label":l?"Unmute microphone":"Mute microphone",children:t.jsx(Nt,{muted:l,className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:d,"aria-label":`Expand ${i} widget`,children:t.jsx(At,{className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn ll-minimized__btn--close",onClick:x,"aria-label":"Close widget",children:t.jsx(Pn,{className:"ll-minimized__icon"})})]})]})}),Wn=({src:e,alt:n,preCannedPlaying:i=!1,className:o,style:s})=>{const[l,u]=r.useState(!1),d=r.useRef(e);if(r.useEffect(()=>{d.current!==e&&(d.current=e,u(!1))},[e]),!e)return null;const p={position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"top",transition:"opacity 500ms ease, transform 500ms ease",transform:i?"scale(1.02)":"scale(1)",opacity:l?1:0,...s};return t.jsx("img",{src:e,alt:n,className:o,style:p,loading:"eager",fetchPriority:"high",onLoad:()=>u(!0)})},Fn=({position:e,isMobile:n,agentName:i,avatarImageUrl:o,idleLoopUrl:s,greeting:l,branding:u,teamMembers:d,currentTeamMemberId:p,isSwitchingTeamMember:x,teamSwitcherOpen:y,onToggleTeamSwitcher:a,onSelectTeamMember:c,languageMenuOpen:j,onToggleLanguageMenu:S,connectionState:k,agentState:b,transcript:v,canResume:I,needsUserGesture:E,error:T,isMuted:m,micError:C,micDevices:$,isCameraEnabled:A,cameraPreviewEl:L,cameraDevices:P,activeCameraId:z,isScreenShareEnabled:F,screenPreviewEl:X,isSpeakerMuted:de,allowCamera:We,allowScreenShare:Fe,allowTyping:Ue,avatarVideoContainerRef:Ve,agentVideoEl:J,onConnect:fe,onDisconnect:ye,onRetry:xe,onResumeAudio:be,onToggleMute:ve,onToggleCamera:we,onSwitchCameraDevice:_e,onToggleScreenShare:B,onToggleSpeaker:ot,onSendMessage:Ye,onMinimize:Ge,onClose:oe,onClearMicError:Pe})=>{var Re;const ie=((d==null?void 0:d.length)??0)>1,ke=k==="connecting"||k==="connected",Z=k==="connected",pe=k==="idle"||k==="disconnected"||k==="error",[U,he]=r.useState(!1);r.useEffect(()=>{if(!J){he(!1);return}if(!J.paused&&J.readyState>=2){he(!0);return}he(!1);const h=()=>he(!0);return J.addEventListener("playing",h),J.addEventListener("loadeddata",h),()=>{J.removeEventListener("playing",h),J.removeEventListener("loadeddata",h)}},[J]);const[me,ee]=r.useState(!1);r.useEffect(()=>{if(!Z){ee(!1);return}if(U)return;const h=setTimeout(()=>ee(!0),8e3);return()=>clearTimeout(h)},[Z,U]);const Se=k==="connecting"||Z&&!!o&&!U&&!me,Ce=r.useRef(null),Q=r.useRef(null);r.useEffect(()=>{const h=Ce.current;h&&(h.innerHTML="",L&&(L.style.width="100%",L.style.height="100%",L.style.objectFit="cover",L.style.transform="scaleX(-1)",h.appendChild(L)))},[L]),r.useEffect(()=>{const h=Q.current;h&&(h.innerHTML="",X&&(X.style.width="100%",X.style.height="100%",X.style.objectFit="contain",h.appendChild(X)))},[X]);const[K,te]=r.useState(!1),[se,Le]=r.useState(!1);r.useEffect(()=>{if(!K&&!se&&!j&&!y)return;const h=()=>{te(!1),Le(!1),j&&S(),y&&a()};return document.addEventListener("click",h),()=>document.removeEventListener("click",h)},[K,se,j,y,S,a]);const[le,je]=r.useState(""),Je=r.useCallback(h=>{h.preventDefault();const W=le.trim();W&&(Ye(W),je(""))},[le,Ye]),De=u.productName||"Live Layer";let ne=null,ae=null;for(let h=v.length-1;h>=0;h--){const W=v[h];if(!ne&&W.role==="agent"?ne=W:!ae&&W.role==="user"&&(ae=W),ne&&ae)break}const Ke=Z?(ne==null?void 0:ne.text)||null:l||null,Ee=Z&&(ae==null?void 0:ae.text)||null,st=["ll-expanded",n?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:st,"data-position":e,"data-state":Z?"connected":ke?"connecting":"idle",role:"dialog","aria-label":`${i} widget`,children:[t.jsxs("div",{className:"ll-expanded__bg",children:[o?t.jsx(Wn,{src:o,alt:i,className:"ll-expanded__bg-img"}):t.jsx("div",{className:"ll-expanded__bg-fallback",children:t.jsx("span",{className:"ll-expanded__bg-initial",children:((Re=i==null?void 0:i.charAt(0))==null?void 0:Re.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:Ve,className:"ll-expanded__video"}),Se&&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:x?"Switching...":"Connecting..."})]}),E&&Z&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:be,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"})]}),ke?t.jsxs("div",{className:"ll-expanded__topbar",children:[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:h=>{ie&&(h.stopPropagation(),a())},"aria-haspopup":ie?"listbox":void 0,"aria-expanded":ie?y:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:i}),ie&&t.jsx(Ze,{})]}),ie&&y&&t.jsx("div",{className:"ll-hmenu",onClick:h=>h.stopPropagation(),role:"listbox",children:d==null?void 0:d.map(h=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${h.id===p?"is-active":""}`,onClick:()=>c(h.id),role:"option","aria-selected":h.id===p,children:[h.avatarImageUrl&&t.jsx("img",{src:h.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:h.name}),h.role&&t.jsx("span",{className:"ll-hmenu__role",children:h.role})]},h.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:h=>{h.stopPropagation(),S()},"aria-haspopup":"listbox","aria-expanded":j,"aria-label":"Language: English",title:"Language: English",children:[t.jsx("span",{className:"ll-hpill__label",children:"EN"}),t.jsx(Ze,{})]}),j&&t.jsx("div",{className:"ll-hmenu",onClick:h=>h.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--${b}`,children:b})]}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[t.jsx("button",{type:"button",className:"ll-hbtn",onClick:Ge,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(Dt,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:oe,"aria-label":"End call",title:"End call",children:t.jsx(Pt,{})})]})]}):t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:De}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:Ge,"aria-label":"Minimize widget",children:t.jsx(Dt,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:oe,"aria-label":"Close widget",children:t.jsx(Pt,{})})]})]}),pe&&(()=>{const h=I?"Restart paused session":k==="disconnected"?"Reconnect to agent":"Start video call",W=I?"Pick up where you left off":null,$e=k==="idle"&&!I&&!T;return t.jsxs(t.Fragment,{children:[$e&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:fe,"aria-label":h,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:h})]}),t.jsxs("div",{className:"ll-expanded__bottom ll-expanded__bottom--idle",children:[l&&t.jsx("div",{className:"ll-expanded__transcript",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:l})}),W&&t.jsx("p",{className:"ll-expanded__cta-sublabel",children:W}),t.jsx("button",{type:"button",className:"ll-expanded__cta",onClick:fe,"aria-label":h,children:h})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${ke&&(A||F)?"is-visible":""}`,children:[t.jsx("div",{ref:Q,className:F?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:Ce,className:!F&&A?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),ke?t.jsxs("div",{className:"ll-expanded__bottom",children:[Ke&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--agent","data-role":"agent",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Ke})}),Ee&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--user","data-role":"user",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Ee})}),t.jsxs("div",{className:"ll-toolbar",onClick:h=>h.stopPropagation(),children:[Fe&&t.jsx("button",{type:"button",className:`ll-tool ${F?"is-on":""}`,onClick:B,"aria-label":F?"Stop sharing screen":"Share screen",title:F?"Stop sharing":"Share screen",children:t.jsx(Un,{})}),We&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${A?"is-on":""}`,onClick:we,"aria-label":A?"Turn off camera":"Turn on camera",title:A?"Stop camera":"Start camera",children:t.jsx(Vn,{})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${A?"is-on":""}`,onClick:h=>{h.stopPropagation(),Le(W=>!W),te(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":se,children:t.jsx(Ze,{})}),se&&P.length>0&&t.jsx($t,{label:"Camera",devices:P,activeId:z,onPick:h=>{Le(!1),_e(h)}})]}),t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${m?"is-muted":""}`,onClick:ve,"aria-label":m?"Unmute microphone":"Mute microphone",title:m?"Unmute":"Mute",children:t.jsx(Yn,{muted:m})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${m?"is-muted":""}`,onClick:h=>{h.stopPropagation(),te(W=>!W),Le(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":K,children:t.jsx(Ze,{})}),K&&$.length>0&&t.jsx($t,{label:"Microphone",devices:$,activeId:"",onPick:()=>te(!1)})]}),t.jsx("button",{type:"button",className:`ll-tool ${de?"is-muted":""}`,onClick:ot,"aria-label":de?"Unmute speaker":"Mute speaker",title:de?"Unmute speaker":"Mute speaker",children:t.jsx(Gn,{muted:de})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:ye,"aria-label":"End conversation",title:"End conversation",children:t.jsx(Kn,{})})]}),Ue&&t.jsxs("form",{className:"ll-message-input",onSubmit:Je,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:le,onChange:h=>je(h.target.value),"aria-label":"Message the agent"}),le.trim()&&t.jsx("button",{type:"submit",className:"ll-message-input__send","aria-label":"Send message",children:t.jsx(Jn,{})})]})]}):null,(()=>{if(C&&k!=="error")return t.jsxs("div",{className:"ll-expanded__banner",role:"alert",children:[t.jsx("span",{children:C}),t.jsx("button",{type:"button",className:"ll-expanded__banner-x",onClick:Pe,"aria-label":"Dismiss",children:"×"})]});if(!T||k!=="error")return null;let h="Failed to connect",W="Try again";return T==="MIC_PERMISSION_DENIED"?h="Microphone blocked. Allow access to talk.":T==="MIC_NOT_FOUND"?h="No microphone found. Plug one in + retry.":T==="MIC_UNAVAILABLE"?h="Mic unavailable. Check other apps using it.":T==="AGENT_TIMEOUT"?h="Agent didn't pick up. Try again.":T==="CONNECT_FAILED"?h="Connection failed. Check your network.":T.length<80&&(h=T),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:h}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:xe,children:W})]})})()]})};function Ze(){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 Pt(){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 Dt(){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 Un(){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 Vn(){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 Yn({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 Gn({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 Jn(){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 Kn(){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 $t=({label:e,devices:n,activeId:i,onPick:o})=>t.jsxs("div",{className:"ll-device-menu",onClick:s=>s.stopPropagation(),role:"listbox",children:[t.jsx("p",{className:"ll-device-menu__label",children:e}),n.map((s,l)=>{const u=i===s.deviceId;return t.jsxs("button",{type:"button",className:`ll-device-menu__item ${u?"is-active":""}`,onClick:()=>o(s.deviceId),role:"option","aria-selected":u,children:[u&&t.jsx("span",{className:"ll-device-menu__dot",children:"●"}),t.jsx("span",{className:"ll-device-menu__name",children:s.label||`${e} ${l+1}`})]},s.deviceId||l)})]}),Xn=['[data-ll-private="true"]',".ll-widget"];function dt(e){let n=e;for(;n;){for(const i of Xn)if(n.matches(i))return!0;n=n.parentElement}return!1}function it(e){if(dt(e))return!1;if(e instanceof HTMLInputElement){if(e.type==="password")return!1;const n=(e.getAttribute("autocomplete")||"").toLowerCase();if(n==="off"||n.startsWith("cc-"))return!1}return!0}const et=4096,Qn=20,Zn=20,er=10,tr=10,nr=30,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 n=e;for(;n;){for(const i of rr)if(n.matches(i))return!0;n=n.parentElement}return!1}function Be(e){if(typeof window>"u")return!0;const n=e.getBoundingClientRect();if(n.width<=0||n.height<=0)return!1;const i=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth;return n.bottom>0&&n.right>0&&n.top<i&&n.left<o}function Ht(e){const n=e.getAttribute("id");if(n){const l=document.querySelector(`label[for="${CSS.escape(n)}"]`);if(l!=null&&l.textContent)return l.textContent.trim()}const i=e.getAttribute("aria-label");if(i)return i.trim();const o=e.getAttribute("placeholder");if(o)return o.trim();const s=e.closest("label");return s!=null&&s.textContent?s.textContent.trim():""}function ge(e,n){return e.length<=n?e:e.slice(0,n-1)+"…"}function Me(e){return e.length}function on(e,n={}){const i=n.doc??(typeof document<"u"?document:null);if(!i)return{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:e};const o=typeof window<"u"&&window.location.href||"",s=typeof window<"u"&&window.location.pathname||"/",l=i.title||"",u=Array.from(i.querySelectorAll("[data-ll-region]")),d=[];for(const m of u){if(d.length>=er)break;if(qe(m)||!Be(m))continue;const C=m.getAttribute("data-ll-region")??"",$=m.getAttribute("data-ll-intent")??void 0,A=ge((m.innerText||m.textContent||"").trim(),zt*2);!C||!A||d.push({id:C,intent:$,text:A})}const p=[],x=["H1","H2","H3","H4","H5","H6"],y=Array.from(i.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const m of y){if(qe(m)||!Be(m))continue;const C=(m.textContent||"").trim();C&&p.push(`${m.tagName}: ${ge(C,200)}`)}const a=Array.from(i.querySelectorAll("p, li"));for(const m of a){if(qe(m)||!Be(m)||x.includes(m.tagName))continue;const C=(m.textContent||"").trim();C.length>10&&p.push(ge(C,zt))}const c=p.join(`
2
- `),j=[],S=Array.from(i.querySelectorAll("a[href]"));for(const m of S){if(j.length>=Qn)break;if(qe(m)||!Be(m))continue;const C=m.getAttribute("href")||"",$=(m.textContent||"").trim();!C||!$||j.push({href:C,text:ge($,100)})}const k=[],b=Array.from(i.querySelectorAll("input, textarea, select"));for(const m of b){if(k.length>=Zn)break;if(qe(m)||!it(m)||!Be(m))continue;const C=Ht(m),$=m instanceof HTMLInputElement?m.type:m.tagName.toLowerCase();C&&k.push({label:ge(C,100),type:$})}const v=Array.from(i.querySelectorAll("[data-ll-form]")),I=[];for(const m of v){if(I.length>=tr)break;if(dt(m))continue;const C=m.getAttribute("data-ll-form")||"";if(!C)continue;const $=m.getAttribute("data-ll-intent")||void 0,A=Array.from(m.querySelectorAll("[data-ll-field]")),L=[];for(const P of A){if(L.length>=nr)break;if(!it(P))continue;const z=P.getAttribute("data-ll-field")||"";if(!z)continue;const F=Ht(P)||z,X=P instanceof HTMLInputElement?P.type:P.tagName.toLowerCase();L.push({name:z,label:ge(F,100),type:X})}I.push({id:C,intent:$,fields:L})}const E={url:o,title:l,pathname:s,regions:d,visibleText:c,visibleLinks:j,visibleFields:k,forms:I,extras:e};let T=Me(JSON.stringify(E.regions))+Me(E.visibleText)+Me(JSON.stringify(E.visibleLinks))+Me(JSON.stringify(E.visibleFields));for(;T>et&&E.visibleFields.length>0;)E.visibleFields.pop(),T=Me(JSON.stringify(E.visibleFields));for(;T>et&&E.visibleLinks.length>0;)E.visibleLinks.pop(),T-=80;return Me(E.visibleText)>et&&(E.visibleText=ge(E.visibleText,et-100)),E}let Ie=null;function ut(e,n={}){const i=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(Ie&&Ie.key===s&&i-Ie.at<1e3)return Ie.ctx;const l=on(e,n);return Ie={key:s,at:i,ctx:l},l}function sn(){Ie=null}const ir=200;function ln(e){const n=String(e.href||"");return{href:n,text:String(e.text??e.title??n),internal:e.internal??!0,title:e.title,description:e.description}}function or(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function an(e){const n=e??(typeof document<"u"?document:null);if(!n)return[];const i=typeof window<"u"&&window.location.origin||"",o=new Set,s=[],l=Array.from(n.querySelectorAll("a[href]"));for(const u of l){if(s.length>=ir)break;if(dt(u))continue;const d=u.getAttribute("href")||"";if(!or(d))continue;let p=d,x=!0;try{if(typeof window<"u"){const a=new URL(d,i);x=a.origin===i,x&&d.startsWith("http")&&(p=a.pathname+a.search+a.hash)}}catch{continue}if(o.has(p))continue;o.add(p);const y=(u.textContent||"").trim().slice(0,120);s.push({href:p,text:y,internal:x})}return s}let Te=null;const sr=5e3;function tt(){const e=Date.now(),n=typeof window<"u"&&window.location.pathname||"/";if(Te&&Te.pathname===n&&e-Te.at<sr)return Te.routes;const i=an();return Te={at:e,pathname:n,routes:i},i}function cn(){Te=null}function lr(e,n){const i=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLSelectElement.prototype,o=Object.getOwnPropertyDescriptor(i,"value"),s=o==null?void 0:o.set;s?s.call(e,n):e.value=n}function ar(e,n,i={}){const o=i.triggerInput??!0,s=i.triggerChange??!0;if(e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")){const l=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"checked"),u=l==null?void 0:l.set,d=n==="true"||n==="1"||n==="on";u?u.call(e,d):e.checked=d,o&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}));return}lr(e,n),o&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function cr(){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 n=window.getComputedStyle(e);return!(n.overflowY==="hidden"||n.overflowY==="clip")}function ur(e){if(!(e instanceof HTMLElement))return!1;const i=window.getComputedStyle(e).overflowY;return!(i!=="auto"&&i!=="scroll"||e.scrollHeight<=e.clientHeight+2)}function dr(){if(typeof document>"u")return null;const e=Array.from(document.querySelectorAll("body, body *"));let n=null,i=0;for(const o of e){if(!ur(o))continue;const s=o.getBoundingClientRect();if(s.bottom<=0||s.top>=window.innerHeight||s.right<=0||s.left>=window.innerWidth||s.width<=0||s.height<=0||o.closest(".ll-widget"))continue;const l=s.width*s.height;l>i&&(i=l,n=o)}return n}function fr(){if(typeof window>"u")return null;if(cr())return window;const e=dr();return e||window}function Ot(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function pr(e){var n,i;return e instanceof Window?typeof document>"u"?0:Math.max(((n=document.body)==null?void 0:n.scrollHeight)??0,((i=document.documentElement)==null?void 0:i.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"]);function mr(e){var xt,bt,vt,wt,_t,kt,St;const{agentId:n,apiKey:i,baseUrl:o="https://app.livelayer.studio",sessionEndpoint:s,sessionBody:l,autoConnect:u=!1,displayMode:d,defaultDisplayMode:p="expanded",onDisplayModeChange:x,position:y="bottom-right",mobileBreakpoint:a=640,persistKey:c="ll-widget",disablePersistence:j=!1,teamMembers:S,currentTeamMemberId:k,onTeamMemberChange:b,idleLoopUrl:v,greeting:I,avatarImageUrl:E,agentName:T,branding:m={},allowCamera:C=!0,allowScreenShare:$=!0,allowTyping:A=!0,showOn:L,hideOn:P,pathname:z,onNavigate:F,onScrollToSelector:X,getPageContext:de,pageContextExtras:We,getRoutes:Fe,onScrollPage:Ue,onClick:Ve,capabilities:J,onConnect:fe,onDisconnect:ye,onTranscript:xe,onAgentState:be,onConnectionStateChange:ve,onAgentEvent:we,onAgentCommand:_e,controlledSession:B,className:ot,style:Ye,zIndex:Ge=2147483647}=e,oe=Zt(z),Pe=nn(oe,L,P);r.useEffect(()=>{sn(),cn()},[oe]);const ie=k!==void 0,[ke,Z]=r.useState(()=>{var g;return k??((g=S==null?void 0:S[0])==null?void 0:g.id)}),pe=ie?k:ke,U=r.useMemo(()=>(S==null?void 0:S.find(g=>g.id===pe))??null,[S,pe]),he=(U==null?void 0:U.agentId)??n,[me,ee]=Xt({value:d,defaultValue:p,onChange:x,persistKey:c,disablePersistence:j}),Se=Qt(a),Ce=Ft(),Q=Ut(),K=Vt(),te=Yt(),se=Gt(),[Le,le]=r.useState(!1),[je,Je]=r.useState(!1),[De,ne]=r.useState(!1),[ae,Ke]=r.useState(!1),[Ee,st]=r.useState(!1),Re=r.useRef(F),h=r.useRef(X),W=r.useRef(Ue),$e=r.useRef(Ve),ft=r.useRef(de),pt=r.useRef(We),ht=r.useRef(Fe),lt=r.useRef(J),re=r.useRef(null);Re.current=F,h.current=X,W.current=Ue,$e.current=Ve,ft.current=de,pt.current=We,ht.current=Fe,lt.current=J;function ce(g){const f=lt.current;return f?f.includes(g):!0}function ue(g,f){console.warn(`[LiveLayer] Agent command "${g}" blocked — capability "${f}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const ze=r.useCallback(g=>{var V,Ne,Qe,Ct;const f=g;if(!(!f.type||typeof f.type!="string")){if(we==null||we({eventName:f.type,data:g}),f.type==="navigate"){if(!ce("navigate")){ue("navigate","navigate");return}const _=typeof f.href=="string"?f.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(Re.current){try{Re.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(f.type==="scroll_to"){if(!ce("scroll")){ue("scroll_to","scroll");return}const _=typeof f.selector=="string"?f.selector:null;if(!_)return;const R=f.behavior==="instant"?"instant":"smooth";if(h.current){try{h.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(f.type==="request_page_context"){if(!ce("read_page")){ue("request_page_context","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,R=(V=re.current)==null?void 0:V.call(re),D=q=>{const N=R,Y=N==null?void 0:N.localParticipant;if(Y!=null&&Y.publishData)try{const G=_?{...q,requestId:_}:q,Ae=new TextEncoder().encode(JSON.stringify(G));Y.publishData(Ae,{reliable:!0})}catch(G){console.warn("[LiveLayer] publishData failed.",G)}},M=pt.current,H=ft.current;try{if(H){const q=H(M);if(q instanceof Promise){D({type:"page_context_pending"}),q.then(N=>D({type:"page_context",context:N})).catch(N=>{console.warn("[LiveLayer] getPageContext rejected; falling back to default walker.",N),D({type:"page_context",context:ut(M)})});return}D({type:"page_context",context:q});return}D({type:"page_context",context:ut(M)})}catch(q){console.warn("[LiveLayer] page-context extraction threw. Sending empty context.",q),D({type:"page_context",context:{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:M}})}return}if(f.type==="scroll_page"){if(!ce("scroll")){ue("scroll_page","scroll");return}const _=f.direction;if(_!=="up"&&_!=="down"&&_!=="top"&&_!=="bottom"){console.warn(`[LiveLayer] scroll_page: invalid direction "${String(_)}". Expected up | down | top | bottom.`);return}const R=f.behavior==="instant"?"instant":"smooth";if(W.current){try{W.current(_,R)}catch(N){console.warn("[LiveLayer] onScrollPage threw.",N)}return}if(typeof window>"u")return;const D={behavior:R},M=fr(),H=N=>{M instanceof Window?M.scrollBy({top:N,...D}):M.scrollBy({top:N,...D})},q=N=>{M instanceof Window?M.scrollTo({top:N,...D}):M.scrollTo({top:N,...D})};_==="up"?H(-Ot(M)):_==="down"?H(Ot(M)):q(_==="top"?0:pr(M));return}if(f.type==="click"){if(!ce("click")){ue("click","click");return}const _=typeof f.selector=="string"?f.selector:null;if(!_){console.warn("[LiveLayer] click: missing selector.");return}if($e.current){try{$e.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}(Ne=R.click)==null||Ne.call(R);return}if(f.type==="fill_form"||f.type==="focus_field"){if(!ce("fill_forms")){ue(f.type,"fill_forms");return}if(typeof document>"u")return;const _=typeof f.formId=="string"?f.formId:null;if(!_){console.warn(`[LiveLayer] ${f.type}: missing formId.`);return}const R=document.querySelector(`[data-ll-form="${_.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] ${f.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] ${f.type}: refusing to touch a form in a private subtree.`);return}if(f.type==="focus_field"){const M=typeof f.fieldName=="string"?f.fieldName:null;if(!M){console.warn("[LiveLayer] focus_field: missing fieldName.");return}const H=R.querySelector(`[data-ll-field="${M.replace(/"/g,'\\"')}"]`);if(!H){console.warn(`[LiveLayer] focus_field: no field "${M}" in form "${_}".`);return}if(!it(H)){console.warn(`[LiveLayer] focus_field: field "${M}" is privacy-protected and not focusable.`);return}H.focus();return}const D=f.values&&typeof f.values=="object"?f.values:null;if(!D){console.warn("[LiveLayer] fill_form: missing or invalid values.");return}for(const[M,H]of Object.entries(D)){if(typeof H!="string")continue;const q=R.querySelector(`[data-ll-field="${M.replace(/"/g,'\\"')}"]`);if(!q){console.warn(`[LiveLayer] fill_form: no field "${M}" in form "${_}". Skipping.`);continue}if(!it(q)){console.warn(`[LiveLayer] fill_form: field "${M}" is privacy-protected (password / cc-* / private). Skipping.`);continue}try{ar(q,H)}catch(N){console.warn(`[LiveLayer] fill_form: failed to set "${M}".`,N)}}return}if(f.type==="submit_form"){if(!ce("submit_forms")){ue("submit_form","submit_forms");return}if(typeof document>"u")return;const _=typeof f.formId=="string"?f.formId:null;if(!_){console.warn("[LiveLayer] submit_form: missing formId.");return}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 f.requestId=="string"?f.requestId:void 0,M=(Qe=re.current)==null?void 0:Qe.call(re),H=Y=>{const G=M,Ae=G==null?void 0:G.localParticipant;if(Ae!=null&&Ae.publishData)try{const wn=D?{...Y,requestId:D}:Y,_n=new TextEncoder().encode(JSON.stringify(wn));Ae.publishData(_n,{reliable:!0})}catch{}};let q=!1;const N=()=>{q=!0,H({type:"form_submitted",formId:_})};R.addEventListener("submit",N,{once:!0});try{typeof R.requestSubmit=="function"?R.requestSubmit():R.submit()}catch(Y){console.warn("[LiveLayer] submit_form: requestSubmit threw.",Y),R.removeEventListener("submit",N),H({type:"form_submit_blocked",formId:_,reason:"exception"});return}setTimeout(()=>{q||(R.removeEventListener("submit",N),H({type:"form_submit_blocked",formId:_,reason:"validation"}))},500);return}if(f.type==="request_routes"){if(!ce("read_page")){ue("request_routes","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,D=(Ct=re.current)==null?void 0:Ct.call(re),M=D==null?void 0:D.localParticipant;if(!(M!=null&&M.publishData))return;const H=N=>{try{const Y=_?{type:"routes",routes:N,requestId:_}:{type:"routes",routes:N},G=new TextEncoder().encode(JSON.stringify(Y));M.publishData(G,{reliable:!0})}catch(Y){console.warn("[LiveLayer] request_routes: publishData failed.",Y)}},q=ht.current;if(q){try{const N=q(),Y=G=>{if(!Array.isArray(G)){H([]);return}H(G.map(ln).slice(0,200))};N instanceof Promise?N.then(Y).catch(G=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",G),H(tt())}):Y(N)}catch(N){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",N),H(tt())}return}try{H(tt())}catch(N){console.warn("[LiveLayer] request_routes: extractRoutes threw.",N)}return}hr.has(f.type)||_e==null||_e(f)}},[_e,we]),O=Wt({agentId:B?"__controlled__":he,baseUrl:o,apiKey:i,sessionEndpoint:s,sessionBody:l,onDataMessage:B?void 0:ze});r.useEffect(()=>{if(B!=null&&B.subscribeToDataMessages)return B.subscribeToDataMessages(ze)},[B,ze]),re.current=()=>{var g;return(g=O.getRoom)==null?void 0:g.call(O)},r.useEffect(()=>{var V;if(!oe)return;const g=(V=O.getRoom)==null?void 0:V.call(O),f=g==null?void 0:g.localParticipant;if(f!=null&&f.publishData)try{const Ne=new TextEncoder().encode(JSON.stringify({type:"pathname",pathname:oe}));f.publishData(Ne,{reliable:!0})}catch{}},[oe,O,O.connectionState]),r.useEffect(()=>{var V;if(typeof window>"u")return;const g=((V=window.location)==null?void 0:V.hostname)||"";if(g==="localhost"||g==="127.0.0.1"||g==="0.0.0.0"||g.endsWith(".local")||g.endsWith(".test"))return window.__livelayerSimulateCommand=Ne=>{try{ze(Ne)}catch(Qe){console.warn("[LiveLayer] simulate-command threw:",Qe)}},()=>{delete window.__livelayerSimulateCommand}},[ze]);const w=r.useMemo(()=>B?{connectionState:B.connectionState,agentState:B.agentState,transcript:B.transcript,videoElement:B.videoElement,audioElement:B.audioElement,canResume:B.canResume,error:B.error,agentConfig:null,connect:async()=>{await B.onConnect()},disconnect:()=>B.onDisconnect(),getRoom:O.getRoom,isControlled:!0}:{connectionState:O.connectionState,agentState:O.agentState,transcript:O.transcript,videoElement:O.videoElement,audioElement:O.audioElement,canResume:O.canResume,error:O.error,agentConfig:O.agentConfig,connect:O.connect,disconnect:O.disconnect,getRoom:O.getRoom,isControlled:!1},[B,O]),mt=r.useRef(null);r.useEffect(()=>{const g=w.videoElement,f=mt.current;if(!(!g||!f))return f.appendChild(g),()=>{g.parentNode===f&&f.removeChild(g)}},[w.videoElement]),r.useEffect(()=>{const g=w.audioElement;if(!g)return;Ce.attach(g);const f=g.play();return f&&typeof f.catch=="function"&&f.catch(V=>{(V==null?void 0:V.name)==="NotAllowedError"&&le(!0)}),()=>{Ce.detach()}},[w.audioElement]),r.useEffect(()=>{if(w.isControlled||w.connectionState!=="connected")return;const g=w.getRoom();if(g)return Q.setupMic(g).catch(()=>{}),K.attachRoom(g),te.attachRoom(g),se.refresh(),()=>{Q.teardownMic(),K.teardown(),te.teardown()}},[w.isControlled,w.connectionState]),r.useEffect(()=>{const g=w.audioElement;g&&(g.muted=Ee)},[w.audioElement,Ee]);const un=r.useCallback(g=>{const f=w.getRoom();if(f)try{const V=new TextEncoder().encode(JSON.stringify({type:"user_message",text:g}));f.localParticipant.publishData(V,{reliable:!0})}catch{}},[w]),dn=r.useCallback(()=>{st(g=>!g)},[]);r.useEffect(()=>{ve==null||ve(w.connectionState),w.connectionState==="connected"?fe==null||fe():w.connectionState==="disconnected"&&(ye==null||ye())},[w.connectionState,fe,ye,ve]),r.useEffect(()=>{xe==null||xe(w.transcript)},[w.transcript,xe]),r.useEffect(()=>{be==null||be(w.agentState)},[w.agentState,be]);const gt=r.useRef(!1);r.useEffect(()=>{w.isControlled||!u||gt.current||Pe&&w.connectionState==="idle"&&(gt.current=!0,w.connect())},[u,w.connectionState,w,Pe]);const fn=r.useCallback(g=>{const f=S==null?void 0:S.find(V=>V.id===g);f&&(ne(!1),g!==pe&&(Je(!0),w.disconnect(),ie||Z(g),b==null||b(f)))},[S,pe,w,ie,b]);r.useEffect(()=>{je&&w.connectionState==="connected"&&Je(!1)},[w.connectionState,je]),r.useEffect(()=>{if(!De)return;const g=f=>{f.key==="Escape"&&ne(!1)};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[De]);const pn=!!E||!!(U!=null&&U.avatarImageUrl)||w.isControlled,He=Jt(he,o,pn);J===void 0&&((xt=He.info)!=null&&xt.capabilities)&&(lt.current=He.info.capabilities);const Xe=(U==null?void 0:U.name)??T??((bt=w.agentConfig)==null?void 0:bt.name)??((vt=He.info)==null?void 0:vt.name)??"Live Layer",at=(U==null?void 0:U.avatarImageUrl)??E??((wt=w.agentConfig)==null?void 0:wt.avatarImageUrl)??((_t=He.info)==null?void 0:_t.avatarImageUrl)??null,hn=v??((kt=w.agentConfig)==null?void 0:kt.idleLoopUrl)??((St=He.info)==null?void 0:St.idleLoopUrl)??null,mn=I??null,gn=r.useCallback(()=>ee("expanded"),[ee]),yn=r.useCallback(()=>ee("minimized"),[ee]),yt=r.useCallback(()=>{w.disconnect(),ee("hidden")},[w,ee]),xn=r.useCallback(()=>{const g=w.audioElement;g&&g.play().then(()=>le(!1)).catch(()=>{})},[w.audioElement]),bn=r.useCallback(()=>{le(!1),w.connect()},[w]),Oe={...Ye,zIndex:Ge};m.primaryColor&&(Oe["--ll-color-primary"]=m.primaryColor),m.accentColor&&(Oe["--ll-color-accent"]=m.accentColor),m.backgroundColor&&(Oe["--ll-color-bg"]=m.backgroundColor),m.textColor&&(Oe["--ll-color-fg"]=m.textColor);const vn=["ll-widget",`ll-widget--${me}`,`ll-widget--${Se?"mobile":"desktop"}`,ot].filter(Boolean).join(" ");return Pe?t.jsxs("div",{className:vn,style:Oe,"data-display-mode":me,"data-position":y,children:[me==="hidden"&&t.jsx(On,{position:y,isMobile:Se,isSpeaking:w.agentState==="speaking",onExpand:()=>ee("expanded"),label:`Open ${Xe} widget`,avatarImageUrl:at,agentName:Xe}),me==="minimized"&&t.jsx(Bn,{position:y,isMobile:Se,agentName:Xe,avatarImageUrl:at,agentState:w.agentState,isMuted:Q.isMuted,audioLevel:Ce,onExpand:gn,onToggleMute:Q.toggleMute,onClose:yt}),me==="expanded"&&t.jsx(Fn,{position:y,isMobile:Se,agentName:Xe,avatarImageUrl:at,idleLoopUrl:hn,greeting:mn,branding:m,teamMembers:S,currentTeamMemberId:pe,isSwitchingTeamMember:je,teamSwitcherOpen:De,onToggleTeamSwitcher:()=>ne(g=>!g),onSelectTeamMember:fn,connectionState:w.connectionState,agentState:w.agentState,transcript:w.transcript,isMuted:Q.isMuted,micDevices:se.mics,isCameraEnabled:K.isEnabled,cameraPreviewEl:K.previewEl,cameraDevices:se.cameras,activeCameraId:K.activeDeviceId,isScreenShareEnabled:te.isEnabled,screenPreviewEl:te.previewEl,isSpeakerMuted:Ee,allowCamera:C,allowScreenShare:$,allowTyping:A,languageMenuOpen:ae,onToggleLanguageMenu:()=>Ke(g=>!g),needsUserGesture:Le,canResume:w.canResume,micError:Q.micError,error:w.error,avatarVideoContainerRef:mt,agentVideoEl:w.videoElement,onConnect:()=>void w.connect(),onDisconnect:()=>w.disconnect(),onRetry:bn,onResumeAudio:xn,onToggleMute:Q.toggleMute,onToggleCamera:()=>void K.toggle(),onSwitchCameraDevice:g=>void K.switchDevice(g),onToggleScreenShare:()=>void te.toggle(),onToggleSpeaker:dn,onSendMessage:un,onMinimize:yn,onClose:yt,onClearMicError:Q.clearError})]}):null}function gr(e){return t.jsx(Bt,{children:t.jsx(mr,{...e})})}const yr=({agentId:e,baseUrl:n,apiKey:i,mode:o,onAgentEvent:s,className:l,style:u})=>{const d=r.useRef(null),p=r.useRef(null),x=r.useRef(s);x.current=s;const y=r.useCallback(a=>{var j;const c=a.detail;(j=x.current)==null||j.call(x,c)},[]);return r.useEffect(()=>{const a=d.current;if(!a)return;const c=document.createElement("livelayer-widget");return c.setAttribute("agent-id",e),n&&c.setAttribute("base-url",n),i&&c.setAttribute("api-key",i),o&&c.setAttribute("mode",o),c.addEventListener("agent-event",y),a.appendChild(c),p.current=c,()=>{c.removeEventListener("agent-event",y),a.removeChild(c),p.current=null}},[e]),r.useEffect(()=>{p.current&&(o?p.current.setAttribute("mode",o):p.current.removeAttribute("mode"))},[o]),t.jsx("div",{ref:d,className:l,style:u})},xr=r.forwardRef(function({id:n,intent:i,as:o="div",className:s,style:l,children:u},d){return r.createElement(o,{ref:d,"data-ll-region":n,"data-ll-intent":i,className:s,style:l},u)}),br=r.forwardRef(function({id:n,intent:i,children:o,...s},l){return t.jsx("form",{ref:l,"data-ll-form":n,"data-ll-intent":i,...s,children:o})}),vr=r.forwardRef(function(n,i){const{name:o,label:s,labelClassName:l}=n,u={name:o,"data-ll-field":o};let d;if("as"in n&&n.as==="textarea"){const{name:p,label:x,labelClassName:y,as:a,...c}=n;d=t.jsx("textarea",{ref:i,...u,...c})}else if("as"in n&&n.as==="select"){const{name:p,label:x,labelClassName:y,as:a,children:c,...j}=n;d=t.jsx("select",{ref:i,...u,...j,children:c})}else{const{name:p,label:x,labelClassName:y,as:a,...c}=n;d=t.jsx("input",{ref:i,...u,...c})}return s===void 0?d:t.jsxs("label",{className:l,children:[s,d]})});let qt=1;function wr({onMount:e,defaultOpen:n=!1,storageKey:i="ll-debug-open"}){const[o,s]=r.useState(n),[l,u]=r.useState([]),[d,p]=r.useState(""),[x,y]=r.useState(!1),a=r.useRef(new Set),c=r.useRef([]),j=r.useRef(x);j.current=x,r.useEffect(()=>{try{const b=localStorage.getItem(i);b==="1"&&s(!0),b==="0"&&s(!1)}catch{}},[i]),r.useEffect(()=>{try{localStorage.setItem(i,o?"1":"0")}catch{}},[o,i]),r.useEffect(()=>{const b=v=>{(v.metaKey||v.ctrlKey)&&v.shiftKey&&v.key.toLowerCase()==="l"&&(v.preventDefault(),s(I=>!I))};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[]),r.useEffect(()=>{const b=setInterval(()=>{if(c.current.length===0||j.current)return;const v=c.current.splice(0,c.current.length);u(I=>[...v.reverse(),...I].slice(0,200))},100);return()=>clearInterval(b)},[]);const S=r.useRef(!1);if(r.useEffect(()=>{!e||S.current||(S.current=!0,e(b=>{c.current.push({id:qt++,ts:Date.now(),kind:"event",type:b.eventName,data:b.data})}))},[e]),r.useEffect(()=>{const b=console.warn,v=console.log,I=(E,T)=>function(...m){try{const C=typeof m[0]=="string"?m[0]:"";C.startsWith("[LiveLayer]")&&c.current.push({id:qt++,ts:Date.now(),kind:E,type:C.slice(0,120),data:{args:m.slice(1).map($=>kr($))}})}catch{}return T.apply(this,m)};return console.warn=I("warn",b),console.log=I("log",v),()=>{console.warn=b,console.log=v}},[]),!o)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=l.filter(b=>{if(!d)return!0;const v=d.toLowerCase();return b.type.toLowerCase().includes(v)||JSON.stringify(b.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:[l.length," event",l.length===1?"":"s"]}),t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:()=>y(b=>!b),style:ct(x?"#f59e0b":"transparent"),title:"Pause / resume capture",children:x?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{u([]),c.current=[]},style:ct("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:ct("transparent"),"aria-label":"Close",title:"Close (Cmd/Ctrl + Shift + L)",children:"✕"})]}),t.jsx("input",{type:"text",value:d,onChange:b=>p(b.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"),Ln=require("@livelayer/sdk"),rt=require("livekit-client");class Ut 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,i){var o,s;(s=(o=this.props).onError)==null||s.call(o,r,i)}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 Vt(e){const[r,i]=n.useState("idle"),[o,s]=n.useState("idle"),[a,u]=n.useState([]),[d,p]=n.useState(null),[y,v]=n.useState(null),[c,l]=n.useState(null),[k,C]=n.useState(!1),[S,x]=n.useState(null),w=n.useRef(null),I=n.useRef(e.onDataMessage);I.current=e.onDataMessage,n.useEffect(()=>{const L={onConnectionStateChange:A=>{i(A),A==="connected"&&x(null)},onAgentStateChange:s,onTranscript:A=>u([...A]),onAgentConfig:p,onAudioTrack:A=>l(A),onVideoTrack:A=>v(A),onVideoTrackRemoved:()=>v(null),onError:A=>x(A),onDataMessage:A=>{var j;(j=I.current)==null||j.call(I,A)},onResumabilityChange:C},$=new Ln.LiveKitSession({agentId:e.agentId,baseUrl:e.baseUrl,apiKey:e.apiKey,sessionEndpoint:e.sessionEndpoint,sessionBody:e.sessionBody},L);return w.current=$,i("idle"),s("idle"),u([]),p(null),v(null),l(null),C(!1),x(null),()=>{var A;(A=$.destroy)==null||A.call($),w.current=null}},[e.agentId,e.baseUrl,e.apiKey,e.sessionEndpoint,JSON.stringify(e.sessionBody??{})]);const E=n.useCallback(async()=>{const L=w.current;if(L)try{await L.connect()}catch($){throw x($ instanceof Error?$.message:String($)),$}},[]),T=n.useCallback(()=>{const L=w.current;L&&L.disconnect()},[]),m=n.useCallback(()=>{var L;return((L=w.current)==null?void 0:L.getRoom())??null},[]);return{connectionState:r,agentState:o,transcript:a,agentConfig:d,videoElement:y,audioElement:c,canResume:k,error:S,connect:E,disconnect:T,getRoom:m,session:w.current}}function Yt(){const e=n.useRef(null),r=n.useRef(null),i=n.useRef(null),o=n.useRef(null),s=n.useRef(new Set),a=n.useRef(null),u=n.useCallback(()=>{const c=r.current;if(!c){o.current=null;return}(!a.current||a.current.length!==c.frequencyBinCount)&&(a.current=new Uint8Array(new ArrayBuffer(c.frequencyBinCount)));const l=a.current;c.getByteFrequencyData(l);let k=0;for(let S=0;S<l.length;S++)k+=l[S];const C=k/l.length/255;for(const S of s.current)try{S(C)}catch(x){console.error("[useAudioLevel] subscriber threw:",x)}o.current=requestAnimationFrame(u)},[]),d=n.useCallback(()=>{if(e.current||typeof window>"u"||typeof AudioContext>"u")return;const c=new AudioContext,l=c.createAnalyser();l.fftSize=64,l.connect(c.destination),e.current=c,r.current=l},[]),p=n.useCallback(c=>{if(d(),!(!e.current||!r.current)){if(i.current){try{i.current.disconnect()}catch{}i.current=null}try{const l=e.current.createMediaElementSource(c);l.connect(r.current),i.current=l}catch(l){console.warn("[useAudioLevel] createMediaElementSource failed:",l);return}o.current===null&&(o.current=requestAnimationFrame(u))}},[d,u]),y=n.useCallback(()=>{if(o.current!==null&&(cancelAnimationFrame(o.current),o.current=null),i.current){try{i.current.disconnect()}catch{}i.current=null}},[]),v=n.useCallback(c=>(s.current.add(c),()=>{s.current.delete(c)}),[]);return n.useEffect(()=>()=>{if(y(),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},[y]),{attach:p,detach:y,subscribe:v}}function Gt(){const[e,r]=n.useState(!1),[i,o]=n.useState(null),s=n.useRef(null),a=n.useRef(null),u=n.useCallback(async(c,l)=>{if(s.current&&a.current){try{await a.current.localParticipant.unpublishTrack(s.current)}catch{}s.current.stop(),s.current=null}a.current=c,o(null);try{const k=await rt.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});l!=null&&l.startMuted&&await k.mute(),await c.localParticipant.publishTrack(k),s.current=k,r(k.isMuted)}catch(k){const C=k instanceof Error&&k.name==="NotAllowedError"?"Enable your microphone to talk with the agent.":"Microphone unavailable. Check browser permissions and try again.";throw o(C),k}},[]),d=n.useCallback(()=>{const c=s.current;c&&(c.isMuted?(c.unmute(),r(!1)):(c.mute(),r(!0)))},[]),p=n.useCallback(c=>{const l=s.current;l&&(c&&!l.isMuted?(l.mute(),r(!0)):!c&&l.isMuted&&(l.unmute(),r(!1)))},[]),y=n.useCallback(()=>{const c=s.current,l=a.current;if(c&&l){try{l.localParticipant.unpublishTrack(c)}catch{}c.stop()}s.current=null,a.current=null,r(!1)},[]),v=n.useCallback(()=>o(null),[]);return{isMuted:e,micError:i,toggleMute:d,setMuted:p,setupMic:u,teardownMic:y,clearError:v}}const jn={resolution:{width:640,height:480,frameRate:24}};function Jt(){const[e,r]=n.useState(!1),[i,o]=n.useState(null),[s,a]=n.useState(null),[u,d]=n.useState(""),p=n.useRef(null),y=n.useRef(null),v=n.useCallback(w=>{p.current=w},[]),c=n.useCallback(()=>{const w=p.current,I=y.current;if(I&&w){const E=w.localParticipant.getTrackPublication(rt.Track.Source.Camera);if(E!=null&&E.track){try{w.localParticipant.unpublishTrack(E.track)}catch{}E.track.stop()}else I.stop()}y.current=null,a(null),r(!1)},[]),l=n.useCallback(async w=>{const I=p.current;if(I){o(null);try{const E={...jn};w&&(E.deviceId=w);const T=await rt.createLocalVideoTrack(E);await I.localParticipant.publishTrack(T),y.current=T;const m=T.attach();a(m),r(!0),w&&d(w);try{I.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_camera_on"})),{reliable:!0})}catch{}}catch(E){const T=E instanceof Error&&E.name==="NotAllowedError"?"Enable your camera in the browser to share video.":"Camera unavailable. Check permissions and try again.";o(T)}}},[]),k=n.useCallback(async()=>{e?c():await l(u||void 0)},[e,u,c,l]),C=n.useCallback(async w=>{c(),await l(w)},[c,l]),S=n.useCallback(()=>{c(),p.current=null,o(null),d("")},[c]),x=n.useCallback(()=>o(null),[]);return n.useEffect(()=>()=>{y.current&&y.current.stop()},[]),{isEnabled:e,error:i,previewEl:s,activeDeviceId:u,toggle:k,switchDevice:C,attachRoom:v,teardown:S,clearError:x}}function Kt(){const[e,r]=n.useState(!1),[i,o]=n.useState(null),[s,a]=n.useState(null),u=n.useRef(null),d=n.useCallback(l=>{u.current=l},[]),p=n.useCallback(()=>a(null),[]),y=n.useCallback(async()=>{const l=u.current;if(l){if(e){try{await l.localParticipant.setScreenShareEnabled(!1)}catch{}p(),r(!1);return}o(null);try{await l.localParticipant.setScreenShareEnabled(!0);let k=0;const C=()=>{const S=l.localParticipant.getTrackPublication(rt.Track.Source.ScreenShare);if(S!=null&&S.track){const x=S.track.attach();a(x),r(!0);try{l.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({type:"user_screen_share_on"})),{reliable:!0})}catch{}return}k++<10?setTimeout(C,100):r(!0)};C()}catch(k){const C=k instanceof Error?k.name:"";C!=="NotAllowedError"&&C!=="AbortError"&&o("Screen share unavailable. Try again."),r(!1)}}},[e,p]),v=n.useCallback(()=>{const l=u.current;if(l&&e)try{l.localParticipant.setScreenShareEnabled(!1)}catch{}p(),r(!1),o(null),u.current=null},[e,p]),c=n.useCallback(()=>o(null),[]);return{isEnabled:e,error:i,previewEl:s,toggle:y,attachRoom:d,teardown:v,clearError:c}}function Xt(){const[e,r]=n.useState([]),[i,o]=n.useState([]),s=n.useCallback(async()=>{if(!(typeof navigator>"u"||!navigator.mediaDevices))try{const a=await navigator.mediaDevices.enumerateDevices();r(a.filter(u=>u.kind==="audioinput")),o(a.filter(u=>u.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:i,refresh:s}}function Qt(e,r,i=!1){const[o,s]=n.useState(null),[a,u]=n.useState(null),[d,p]=n.useState(!i&&!!e);return n.useEffect(()=>{if(i||!e){p(!1);return}const y=new AbortController,v=r||"https://app.livelayer.studio";return p(!0),u(null),fetch(`${v}/api/widget/agent/${encodeURIComponent(e)}`,{signal:y.signal}).then(async c=>{if(!c.ok){const l=await c.json().catch(()=>({}));throw new Error(l.error||`HTTP ${c.status}`)}return c.json()}).then(c=>{y.signal.aborted||(s(c),p(!1))}).catch(c=>{y.signal.aborted||(u(c instanceof Error?c.message:"Agent lookup failed"),p(!1))}),()=>y.abort()},[e,r,i]),{info:o,error:a,loading:d}}function En(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function Rn(e,r){if(!(typeof window>"u"))try{window.localStorage.setItem(e,r)}catch{}}function Zt({value:e,defaultValue:r="expanded",onChange:i}={}){const o=e!==void 0,[s,a]=n.useState(r),u=o?e:s,d=n.useCallback(p=>{p!==u&&(o||a(p),i==null||i(p))},[u,o,i]);return[u,d]}const Nn=["hidden","minimized","expanded"];function An(e){return e&&Nn.includes(e)?e:null}function en({value:e,defaultValue:r="expanded",onChange:i,persistKey:o="ll-widget",disablePersistence:s=!1}={}){const a=`${o}:display-mode`,u=n.useRef(!1),[d,p]=Zt({value:e,defaultValue:r,onChange:y=>{e===void 0&&!s&&Rn(a,y),i==null||i(y)}});return n.useEffect(()=>{if(u.current||(u.current=!0,s||e!==void 0))return;const y=An(En(a));y&&y!==d&&p(y)},[]),[d,p]}const Mn=640;function tn(e=Mn){const[r,i]=n.useState(!1);return n.useEffect(()=>{if(e===!1){i(!1);return}if(typeof window>"u"||typeof window.matchMedia>"u")return;const o=`(max-width: ${e-1}px)`,s=window.matchMedia(o),a=()=>i(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 Rt="__llHistoryPatched",it="ll:pathname";function In(){if(typeof window>"u"||window.history[Rt])return;const e=window.history.pushState,r=window.history.replaceState;window.history.pushState=function(...i){const o=e.apply(this,i);return window.dispatchEvent(new Event(it)),o},window.history.replaceState=function(...i){const o=r.apply(this,i);return window.dispatchEvent(new Event(it)),o},window.history[Rt]=!0}function Nt(){return typeof window>"u"?"/":window.location.pathname||"/"}function nn(e){const[r,i]=n.useState(()=>e??Nt());return n.useEffect(()=>{if(e!==void 0)return;In();const o=()=>i(Nt());return o(),window.addEventListener("popstate",o),window.addEventListener(it,o),()=>{window.removeEventListener("popstate",o),window.removeEventListener(it,o)}},[e]),e??r}const At=new Map,Tn=/[\\^$+?.()|{}[\]]/g;function Pn(e){return e.replace(Tn,"\\$&")}function Dn(e){const r=At.get(e);if(r)return r;const i=e.length>1&&e.endsWith("/")?e.slice(0,-1):e,o="",s="",a=i.replace(/\*\*/g,o).replace(/\*/g,s),d=Pn(a).replace(new RegExp(`\\/${o}`,"g"),"(?:\\/.*)?").replace(new RegExp(o,"g"),".*").replace(new RegExp(s,"g"),"[^/]+"),p=new RegExp(`^${d}\\/?$`);return At.set(e,p),p}function $n(e,r){const i=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return Dn(e).test(i)}function rn(e,r){return typeof e=="function"?e(r):e instanceof RegExp?e.test(r):$n(e,r)}function Mt(e,r){if(!e||e.length===0)return!1;for(const i of e)if(rn(i,r))return!0;return!1}function on(e,r,i){return e===void 0?!0:Mt(i,e)?!1:r&&r.length>0?Mt(r,e):!0}function sn(e,r,i){return n.useMemo(()=>on(e,r,i),[e,r,i])}const It=({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"})}),Tt=({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"})}),zn=({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"})}),Hn={left:180,right:0,up:-90,down:90},Pt=({direction:e="right",className:r})=>t.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,style:{transform:`rotate(${Hn[e]}deg)`},"aria-hidden":"true",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 6l6 6-6 6"})});function On(e){return e==="top-left"||e==="bottom-left"?"left":"right"}const an="ll-hidden-tab-center-y",qn=5,Dt=16;function Bn(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(an);if(!e)return null;const r=Number.parseFloat(e);return Number.isFinite(r)?r:null}catch{return null}}function $t(e){if(!(typeof window>"u"))try{window.localStorage.setItem(an,String(e))}catch{}}const Wn=({position:e,isMobile:r,isSpeaking:i,onExpand:o,label:s="Open widget",avatarImageUrl:a,agentName:u})=>{const d=On(e),p=d==="right"?"left":"right",y=r?80:72,v=!!a,[c,l]=n.useState(null),[k,C]=n.useState(!1),S=n.useRef(null),x=n.useRef(!1),w=n.useCallback(j=>{if(typeof window>"u")return j;const P=y/2,z=Dt+P,U=window.innerHeight-Dt-P;return U<z?Math.max(z,j):Math.max(z,Math.min(U,j))},[y]);n.useEffect(()=>{const j=Bn();l(w(j??window.innerHeight/2));const P=()=>{l(z=>z===null?null:w(z))};return window.addEventListener("resize",P),()=>window.removeEventListener("resize",P)},[w]);const I=n.useCallback(j=>{if(!(j.pointerType==="mouse"&&j.button!==0)&&c!==null){try{j.currentTarget.setPointerCapture(j.pointerId)}catch{}S.current={startClientY:j.clientY,startCenterY:c,moved:!1}}},[c]),E=n.useCallback(j=>{const P=S.current;if(!P)return;const z=j.clientY-P.startClientY;!P.moved&&Math.abs(z)>qn&&(P.moved=!0,C(!0)),P.moved&&l(w(P.startCenterY+z))},[w]),T=n.useCallback(j=>{const P=S.current;if(P){try{j.currentTarget.releasePointerCapture(j.pointerId)}catch{}S.current=null,P.moved&&(C(!1),x.current=!0,l(z=>(z!==null&&$t(z),z)))}},[]),m=n.useCallback(()=>{if(x.current){x.current=!1;return}o()},[o]),L=n.useCallback(j=>{if(j.key==="ArrowUp"||j.key==="ArrowDown"){j.preventDefault();const P=j.key==="ArrowUp"?-8:8;l(z=>{if(z===null)return z;const U=w(z+P);return $t(U),U})}},[w]),$=["ll-hidden",`ll-hidden--${d}`,r?"ll-hidden--mobile":"ll-hidden--desktop",i?"ll-hidden--speaking":null,k?"is-dragging":null,v?"ll-hidden--with-avatar":null].filter(Boolean).join(" "),A=c===null?void 0:{top:`${c-y/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:$,onPointerDown:I,onPointerMove:E,onPointerUp:T,onPointerCancel:T,onClick:m,onKeyDown:L,"aria-label":s,"data-position":e,style:A,children:v?t.jsxs(t.Fragment,{children:[t.jsx(Pt,{direction:p,className:"ll-hidden__chevron ll-hidden__chevron--mini"}),t.jsx("img",{src:a,alt:u?`${u} avatar`:"Agent avatar",className:"ll-hidden__avatar",draggable:!1})]}):t.jsx(Pt,{direction:p,className:"ll-hidden__chevron"})})},Fn=({audioLevel:e,bars:r=20,maxHeight:i=20,minHeight:o=4,className:s,barClassName:a})=>{const u=n.useRef(null),d=n.useRef([]),p=n.useMemo(()=>{const v=(Math.sqrt(5)-1)/2;return Array.from({length:r},(c,l)=>.5+l*v%1*.5)},[r]);n.useEffect(()=>e.subscribe(c=>{for(let l=0;l<r;l++){const k=d.current[l];if(!k)continue;const C=Math.max(o,c*i*p[l]);k.style.height=`${C}px`}}),[e,r,i,o,p]);const y=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:u,className:y,"aria-hidden":"true",children:Array.from({length:r},(v,c)=>t.jsx("div",{ref:l=>{d.current[c]=l},className:["ll-waveform__bar",a].filter(Boolean).join(" "),style:{height:`${o}px`}},c))})},Un=({position:e,isMobile:r,agentName:i,avatarImageUrl:o,agentState:s,isMuted:a,audioLevel:u,onExpand:d,onToggleMute:p,onClose:y})=>r?t.jsx("div",{className:"ll-minimized ll-minimized--mobile",role:"region","aria-label":`${i} widget`,children:t.jsxs("button",{type:"button",className:"ll-minimized__surface",onClick:d,"aria-label":`Expand ${i} widget`,children:[o?t.jsx("img",{src:o,alt:i,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsx(Fn,{audioLevel:u,bars:16,maxHeight:18,className:"ll-minimized__waveform"}),t.jsx("span",{className:"ll-minimized__name",children:i}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("span",{className:"ll-minimized__btn",role:"button",tabIndex:0,onClick:v=>{v.stopPropagation(),p()},onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&(v.stopPropagation(),v.preventDefault(),p())},"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(It,{muted:a,className:"ll-minimized__icon"})}),t.jsx(Tt,{className:"ll-minimized__icon ll-minimized__icon--expand"})]})]})}):t.jsx("div",{className:"ll-minimized ll-minimized--desktop","data-position":e,role:"region","aria-label":`${i} widget`,children:t.jsxs("div",{className:"ll-minimized__surface",children:[o?t.jsx("img",{src:o,alt:i,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:i}),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:p,"aria-label":a?"Unmute microphone":"Mute microphone",children:t.jsx(It,{muted:a,className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:d,"aria-label":`Expand ${i} widget`,children:t.jsx(Tt,{className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn ll-minimized__btn--close",onClick:y,"aria-label":"Close widget",children:t.jsx(zn,{className:"ll-minimized__icon"})})]})]})}),Vn=({src:e,alt:r,preCannedPlaying:i=!1,className:o,style:s})=>{const[a,u]=n.useState(!1),d=n.useRef(e);if(n.useEffect(()=>{d.current!==e&&(d.current=e,u(!1))},[e]),!e)return null;const p={position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"top",transition:"opacity 500ms ease, transform 500ms ease",transform:i?"scale(1.02)":"scale(1)",opacity:a?1:0,...s};return t.jsx("img",{src:e,alt:r,className:o,style:p,loading:"eager",fetchPriority:"high",onLoad:()=>u(!0)})},Yn=({position:e,isMobile:r,agentName:i,avatarImageUrl:o,idleLoopUrl:s,greeting:a,branding:u,teamMembers:d,currentTeamMemberId:p,isSwitchingTeamMember:y,teamSwitcherOpen:v,onToggleTeamSwitcher:c,onSelectTeamMember:l,languageMenuOpen:k,onToggleLanguageMenu:C,connectionState:S,agentState:x,transcript:w,canResume:I,needsUserGesture:E,error:T,isMuted:m,micError:L,micDevices:$,isCameraEnabled:A,cameraPreviewEl:j,cameraDevices:P,activeCameraId:z,isScreenShareEnabled:U,screenPreviewEl:Q,isSpeakerMuted:pe,allowCamera:Ue,allowScreenShare:Ve,allowTyping:Ye,avatarVideoContainerRef:Ge,agentVideoEl:K,micGateOpen:re,onConnect:he,onDisconnect:be,onRetry:xe,onResumeAudio:ve,onToggleMute:we,onToggleCamera:_e,onSwitchCameraDevice:B,onToggleScreenShare:st,onToggleSpeaker:at,onSendMessage:Je,onMinimize:oe,onClose:ke,onClearMicError:Te})=>{var Ee;const me=((d==null?void 0:d.length)??0)>1,Se=S==="connecting"||S==="connected",F=S==="connected",G=S==="idle"||S==="disconnected"||S==="error",[Ce,Z]=n.useState(!1);n.useEffect(()=>{if(!K){Z(!1);return}if(!K.paused&&K.readyState>=2){Z(!0);return}Z(!1);const h=()=>Z(!0);return K.addEventListener("playing",h),K.addEventListener("loadeddata",h),()=>{K.removeEventListener("playing",h),K.removeEventListener("loadeddata",h)}},[K]);const[ie,ge]=n.useState(!1);n.useEffect(()=>{if(!F){ge(!1);return}if(Ce)return;const h=setTimeout(()=>ge(!0),8e3);return()=>clearTimeout(h)},[F,Ce]);const Pe=S==="connecting"||F&&!!o&&!Ce&&!ie,X=n.useRef(null),ee=n.useRef(null);n.useEffect(()=>{const h=X.current;h&&(h.innerHTML="",j&&(j.style.width="100%",j.style.height="100%",j.style.objectFit="cover",j.style.transform="scaleX(-1)",h.appendChild(j)))},[j]),n.useEffect(()=>{const h=ee.current;h&&(h.innerHTML="",Q&&(Q.style.width="100%",Q.style.height="100%",Q.style.objectFit="contain",h.appendChild(Q)))},[Q]);const[te,se]=n.useState(!1),[Le,ae]=n.useState(!1);n.useEffect(()=>{if(!te&&!Le&&!k&&!v)return;const h=()=>{se(!1),ae(!1),k&&C(),v&&c()};return document.addEventListener("click",h),()=>document.removeEventListener("click",h)},[te,Le,k,v,C,c]);const[le,De]=n.useState(""),$e=n.useCallback(h=>{h.preventDefault();const W=le.trim();W&&(Je(W),De(""))},[le,Je]),ze=u.productName||"Live Layer";let ce=null,ue=null;for(let h=w.length-1;h>=0;h--){const W=w[h];if(!ce&&W.role==="agent"?ce=W:!ue&&W.role==="user"&&(ue=W),ce&&ue)break}const je=F?(ce==null?void 0:ce.text)||null:a||null,Ke=F&&(ue==null?void 0:ue.text)||null,He=["ll-expanded",r?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:He,"data-position":e,"data-state":F?"connected":Se?"connecting":"idle",role:"dialog","aria-label":`${i} widget`,children:[t.jsxs("div",{className:"ll-expanded__bg",children:[o?t.jsx(Vn,{src:o,alt:i,className:"ll-expanded__bg-img"}):t.jsx("div",{className:"ll-expanded__bg-fallback",children:t.jsx("span",{className:"ll-expanded__bg-initial",children:((Ee=i==null?void 0:i.charAt(0))==null?void 0:Ee.toUpperCase())||"A"})}),s&&!F&&t.jsx("video",{className:"ll-expanded__bg-idle",src:s,autoPlay:!0,loop:!0,muted:!0,playsInline:!0})]}),t.jsx("div",{ref:Ge,className:"ll-expanded__video"}),Pe&&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:y?"Switching...":"Connecting..."})]}),E&&F&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:ve,children:[t.jsx("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:t.jsx("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.54.12a5 5 0 0 1 0 5.76l-1.41-1.41a3 3 0 0 0 0-2.94L16.54 9.12z"})}),t.jsx("p",{className:"ll-expanded__overlay-text",children:"Tap to enable audio"})]}),Se?t.jsxs("div",{className:"ll-expanded__topbar",children:[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:h=>{me&&(h.stopPropagation(),c())},"aria-haspopup":me?"listbox":void 0,"aria-expanded":me?v:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:i}),me&&t.jsx(et,{})]}),me&&v&&t.jsx("div",{className:"ll-hmenu",onClick:h=>h.stopPropagation(),role:"listbox",children:d==null?void 0:d.map(h=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${h.id===p?"is-active":""}`,onClick:()=>l(h.id),role:"option","aria-selected":h.id===p,children:[h.avatarImageUrl&&t.jsx("img",{src:h.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:h.name}),h.role&&t.jsx("span",{className:"ll-hmenu__role",children:h.role})]},h.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:h=>{h.stopPropagation(),C()},"aria-haspopup":"listbox","aria-expanded":k,"aria-label":"Language: English",title:"Language: English",children:[t.jsx("span",{className:"ll-hpill__label",children:"EN"}),t.jsx(et,{})]}),k&&t.jsx("div",{className:"ll-hmenu",onClick:h=>h.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:[t.jsx("button",{type:"button",className:"ll-hbtn",onClick:oe,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(Ht,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:ke,"aria-label":"End call",title:"End call",children:t.jsx(zt,{})})]})]}):t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:ze}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:oe,"aria-label":"Minimize widget",children:t.jsx(Ht,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:ke,"aria-label":"Close widget",children:t.jsx(zt,{})})]})]}),G&&(()=>{const h=I?"Restart paused session":S==="disconnected"?"Reconnect to agent":"Start video call",W=I?"Pick up where you left off":null,Xe=S==="idle"&&!I&&!T;return t.jsxs(t.Fragment,{children:[Xe&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:he,"aria-label":h,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:h})]}),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:he,"aria-label":h,children:h})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${Se&&(A||U)?"is-visible":""}`,children:[t.jsx("div",{ref:ee,className:U?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:X,className:!U&&A?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),Se?t.jsxs("div",{className:"ll-expanded__bottom",children:[je&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--agent","data-role":"agent",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:je})}),Ke&&t.jsx("div",{className:"ll-expanded__transcript ll-expanded__transcript--user","data-role":"user",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Ke})}),t.jsxs("div",{className:"ll-toolbar",onClick:h=>h.stopPropagation(),children:[Ve&&t.jsx("button",{type:"button",className:`ll-tool ${U?"is-on":""}`,onClick:st,"aria-label":U?"Stop sharing screen":"Share screen",title:U?"Stop sharing":"Share screen",children:t.jsx(Gn,{})}),Ue&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${A?"is-on":""}`,onClick:_e,"aria-label":A?"Turn off camera":"Turn on camera",title:A?"Stop camera":"Start camera",children:t.jsx(Jn,{})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${A?"is-on":""}`,onClick:h=>{h.stopPropagation(),ae(W=>!W),se(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":Le,children:t.jsx(et,{})}),Le&&P.length>0&&t.jsx(Ot,{label:"Camera",devices:P,activeId:z,onPick:h=>{ae(!1),B(h)}})]}),t.jsxs("div",{className:`ll-tool-split${!re&&F?" ll-tool-split--gated":""}`,children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${m?"is-muted":""}`,onClick:we,disabled:!re&&F,"aria-label":!re&&F?"Microphone enables once the agent finishes its greeting":m?"Unmute microphone":"Mute microphone",title:!re&&F?"Mic enables after greeting":m?"Unmute":"Mute",children:t.jsx(Kn,{muted:m})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${m?"is-muted":""}`,onClick:h=>{h.stopPropagation(),se(W=>!W),ae(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":te,children:t.jsx(et,{})}),te&&$.length>0&&t.jsx(Ot,{label:"Microphone",devices:$,activeId:"",onPick:()=>se(!1)})]}),t.jsx("button",{type:"button",className:`ll-tool ${pe?"is-muted":""}`,onClick:at,"aria-label":pe?"Unmute speaker":"Mute speaker",title:pe?"Unmute speaker":"Mute speaker",children:t.jsx(Xn,{muted:pe})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:be,"aria-label":"End conversation",title:"End conversation",children:t.jsx(Zn,{})})]}),Ye&&t.jsxs("form",{className:"ll-message-input",onSubmit:$e,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:le,onChange:h=>De(h.target.value),"aria-label":"Message the agent"}),le.trim()&&t.jsx("button",{type:"submit",className:"ll-message-input__send","aria-label":"Send message",children:t.jsx(Qn,{})})]})]}):null,(()=>{if(L&&S!=="error")return t.jsxs("div",{className:"ll-expanded__banner",role:"alert",children:[t.jsx("span",{children:L}),t.jsx("button",{type:"button",className:"ll-expanded__banner-x",onClick:Te,"aria-label":"Dismiss",children:"×"})]});if(!T||S!=="error")return null;let h="Failed to connect",W="Try again";return T==="MIC_PERMISSION_DENIED"?h="Microphone blocked. Allow access to talk.":T==="MIC_NOT_FOUND"?h="No microphone found. Plug one in + retry.":T==="MIC_UNAVAILABLE"?h="Mic unavailable. Check other apps using it.":T==="AGENT_TIMEOUT"?h="Agent didn't pick up. Try again.":T==="CONNECT_FAILED"?h="Connection failed. Check your network.":T.length<80&&(h=T),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:h}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:xe,children:W})]})})()]})};function et(){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 zt(){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 Ht(){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 Gn(){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 Jn(){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 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("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 Xn({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 Qn(){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 Zn(){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 Ot=({label:e,devices:r,activeId:i,onPick:o})=>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 u=i===s.deviceId;return t.jsxs("button",{type:"button",className:`ll-device-menu__item ${u?"is-active":""}`,onClick:()=>o(s.deviceId),role:"option","aria-selected":u,children:[u&&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)})]}),er=['[data-ll-private="true"]',".ll-widget"];function ht(e){let r=e;for(;r;){for(const i of er)if(r.matches(i))return!0;r=r.parentElement}return!1}function ot(e){if(ht(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 tt=4096,tr=20,nr=20,rr=10,ir=10,or=30,qt=500,sr=['[data-ll-private="true"]',".ll-widget","script","style","noscript","iframe"];function We(e){if(e.getAttribute("aria-hidden")==="true"||e.hasAttribute("hidden"))return!0;let r=e;for(;r;){for(const i of sr)if(r.matches(i))return!0;r=r.parentElement}return!1}function Fe(e){if(typeof window>"u")return!0;const r=e.getBoundingClientRect();if(r.width<=0||r.height<=0)return!1;const i=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth;return r.bottom>0&&r.right>0&&r.top<i&&r.left<o}function Bt(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 i=e.getAttribute("aria-label");if(i)return i.trim();const o=e.getAttribute("placeholder");if(o)return o.trim();const s=e.closest("label");return s!=null&&s.textContent?s.textContent.trim():""}function ye(e,r){return e.length<=r?e:e.slice(0,r-1)+"…"}function Ae(e){return e.length}function ln(e,r={}){const i=r.doc??(typeof document<"u"?document:null);if(!i)return{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:e};const o=typeof window<"u"&&window.location.href||"",s=typeof window<"u"&&window.location.pathname||"/",a=i.title||"",u=Array.from(i.querySelectorAll("[data-ll-region]")),d=[];for(const m of u){if(d.length>=rr)break;if(We(m)||!Fe(m))continue;const L=m.getAttribute("data-ll-region")??"",$=m.getAttribute("data-ll-intent")??void 0,A=ye((m.innerText||m.textContent||"").trim(),qt*2);!L||!A||d.push({id:L,intent:$,text:A})}const p=[],y=["H1","H2","H3","H4","H5","H6"],v=Array.from(i.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const m of v){if(We(m)||!Fe(m))continue;const L=(m.textContent||"").trim();L&&p.push(`${m.tagName}: ${ye(L,200)}`)}const c=Array.from(i.querySelectorAll("p, li"));for(const m of c){if(We(m)||!Fe(m)||y.includes(m.tagName))continue;const L=(m.textContent||"").trim();L.length>10&&p.push(ye(L,qt))}const l=p.join(`
2
+ `),k=[],C=Array.from(i.querySelectorAll("a[href]"));for(const m of C){if(k.length>=tr)break;if(We(m)||!Fe(m))continue;const L=m.getAttribute("href")||"",$=(m.textContent||"").trim();!L||!$||k.push({href:L,text:ye($,100)})}const S=[],x=Array.from(i.querySelectorAll("input, textarea, select"));for(const m of x){if(S.length>=nr)break;if(We(m)||!ot(m)||!Fe(m))continue;const L=Bt(m),$=m instanceof HTMLInputElement?m.type:m.tagName.toLowerCase();L&&S.push({label:ye(L,100),type:$})}const w=Array.from(i.querySelectorAll("[data-ll-form]")),I=[];for(const m of w){if(I.length>=ir)break;if(ht(m))continue;const L=m.getAttribute("data-ll-form")||"";if(!L)continue;const $=m.getAttribute("data-ll-intent")||void 0,A=Array.from(m.querySelectorAll("[data-ll-field]")),j=[];for(const P of A){if(j.length>=or)break;if(!ot(P))continue;const z=P.getAttribute("data-ll-field")||"";if(!z)continue;const U=Bt(P)||z,Q=P instanceof HTMLInputElement?P.type:P.tagName.toLowerCase();j.push({name:z,label:ye(U,100),type:Q})}I.push({id:L,intent:$,fields:j})}const E={url:o,title:a,pathname:s,regions:d,visibleText:l,visibleLinks:k,visibleFields:S,forms:I,extras:e};let T=Ae(JSON.stringify(E.regions))+Ae(E.visibleText)+Ae(JSON.stringify(E.visibleLinks))+Ae(JSON.stringify(E.visibleFields));for(;T>tt&&E.visibleFields.length>0;)E.visibleFields.pop(),T=Ae(JSON.stringify(E.visibleFields));for(;T>tt&&E.visibleLinks.length>0;)E.visibleLinks.pop(),T-=80;return Ae(E.visibleText)>tt&&(E.visibleText=ye(E.visibleText,tt-100)),E}let Me=null;function pt(e,r={}){const i=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(Me&&Me.key===s&&i-Me.at<1e3)return Me.ctx;const a=ln(e,r);return Me={key:s,at:i,ctx:a},a}function cn(){Me=null}const ar=200;function un(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 lr(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function dn(e){const r=e??(typeof document<"u"?document:null);if(!r)return[];const i=typeof window<"u"&&window.location.origin||"",o=new Set,s=[],a=Array.from(r.querySelectorAll("a[href]"));for(const u of a){if(s.length>=ar)break;if(ht(u))continue;const d=u.getAttribute("href")||"";if(!lr(d))continue;let p=d,y=!0;try{if(typeof window<"u"){const c=new URL(d,i);y=c.origin===i,y&&d.startsWith("http")&&(p=c.pathname+c.search+c.hash)}}catch{continue}if(o.has(p))continue;o.add(p);const v=(u.textContent||"").trim().slice(0,120);s.push({href:p,text:v,internal:y})}return s}let Ie=null;const cr=5e3;function nt(){const e=Date.now(),r=typeof window<"u"&&window.location.pathname||"/";if(Ie&&Ie.pathname===r&&e-Ie.at<cr)return Ie.routes;const i=dn();return Ie={at:e,pathname:r,routes:i},i}function fn(){Ie=null}function ur(e,r){const i=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLSelectElement.prototype,o=Object.getOwnPropertyDescriptor(i,"value"),s=o==null?void 0:o.set;s?s.call(e,r):e.value=r}function dr(e,r,i={}){const o=i.triggerInput??!0,s=i.triggerChange??!0;if(e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")){const a=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"checked"),u=a==null?void 0:a.set,d=r==="true"||r==="1"||r==="on";u?u.call(e,d):e.checked=d,o&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}));return}ur(e,r),o&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function fr(){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 pr(e){if(!(e instanceof HTMLElement))return!1;const i=window.getComputedStyle(e).overflowY;return!(i!=="auto"&&i!=="scroll"||e.scrollHeight<=e.clientHeight+2)}function hr(){if(typeof document>"u")return null;const e=Array.from(document.querySelectorAll("body, body *"));let r=null,i=0;for(const o of e){if(!pr(o))continue;const s=o.getBoundingClientRect();if(s.bottom<=0||s.top>=window.innerHeight||s.right<=0||s.left>=window.innerWidth||s.width<=0||s.height<=0||o.closest(".ll-widget"))continue;const a=s.width*s.height;a>i&&(i=a,r=o)}return r}function mr(){if(typeof window>"u")return null;if(fr())return window;const e=hr();return e||window}function Wt(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function gr(e){var r,i;return e instanceof Window?typeof document>"u"?0:Math.max(((r=document.body)==null?void 0:r.scrollHeight)??0,((i=document.documentElement)==null?void 0:i.scrollHeight)??0):e.scrollHeight-e.clientHeight}const yr=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"]);function br(e){var wt,_t,kt,St,Ct,Lt,jt;const{agentId:r,apiKey:i,baseUrl:o="https://app.livelayer.studio",sessionEndpoint:s,sessionBody:a,autoConnect:u=!1,displayMode:d,defaultDisplayMode:p="expanded",onDisplayModeChange:y,position:v="bottom-right",mobileBreakpoint:c=640,persistKey:l="ll-widget",disablePersistence:k=!1,teamMembers:C,currentTeamMemberId:S,onTeamMemberChange:x,idleLoopUrl:w,greeting:I,avatarImageUrl:E,agentName:T,branding:m={},allowCamera:L=!0,allowScreenShare:$=!0,allowTyping:A=!0,showOn:j,hideOn:P,pathname:z,onNavigate:U,onScrollToSelector:Q,getPageContext:pe,pageContextExtras:Ue,getRoutes:Ve,onScrollPage:Ye,onClick:Ge,capabilities:K,onConnect:re,onDisconnect:he,onTranscript:be,onAgentState:xe,onConnectionStateChange:ve,onAgentEvent:we,onAgentCommand:_e,controlledSession:B,className:st,style:at,zIndex:Je=2147483647}=e,oe=nn(z),ke=sn(oe,j,P);n.useEffect(()=>{cn(),fn()},[oe]);const Te=S!==void 0,[me,Se]=n.useState(()=>{var g;return S??((g=C==null?void 0:C[0])==null?void 0:g.id)}),F=Te?S:me,G=n.useMemo(()=>(C==null?void 0:C.find(g=>g.id===F))??null,[C,F]),Ce=(G==null?void 0:G.agentId)??r,[Z,ie]=en({value:d,defaultValue:p,onChange:y,persistKey:l,disablePersistence:k}),ge=tn(c),Pe=Yt(),X=Gt(),ee=Jt(),te=Kt(),se=Xt(),[Le,ae]=n.useState(!1),[le,De]=n.useState(!1),[$e,ze]=n.useState(!1),[ce,ue]=n.useState(!1),[je,Ke]=n.useState(!1),He=n.useRef(U),Ee=n.useRef(Q),h=n.useRef(Ye),W=n.useRef(Ge),Xe=n.useRef(pe),mt=n.useRef(Ue),gt=n.useRef(Ve),lt=n.useRef(K),ne=n.useRef(null);He.current=U,Ee.current=Q,h.current=Ye,W.current=Ge,Xe.current=pe,mt.current=Ue,gt.current=Ve,lt.current=K;function de(g){const f=lt.current;return f?f.includes(g):!0}function fe(g,f){console.warn(`[LiveLayer] Agent command "${g}" blocked — capability "${f}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const Oe=n.useCallback(g=>{var V,Re,Ze,Et;const f=g;if(!(!f.type||typeof f.type!="string")){if(we==null||we({eventName:f.type,data:g}),f.type==="navigate"){if(!de("navigate")){fe("navigate","navigate");return}const _=typeof f.href=="string"?f.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(He.current){try{He.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(f.type==="scroll_to"){if(!de("scroll")){fe("scroll_to","scroll");return}const _=typeof f.selector=="string"?f.selector:null;if(!_)return;const R=f.behavior==="instant"?"instant":"smooth";if(Ee.current){try{Ee.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(f.type==="request_page_context"){if(!de("read_page")){fe("request_page_context","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,R=(V=ne.current)==null?void 0:V.call(ne),D=q=>{const N=R,Y=N==null?void 0:N.localParticipant;if(Y!=null&&Y.publishData)try{const J=_?{...q,requestId:_}:q,Ne=new TextEncoder().encode(JSON.stringify(J));Y.publishData(Ne,{reliable:!0})}catch(J){console.warn("[LiveLayer] publishData failed.",J)}},M=mt.current,H=Xe.current;try{if(H){const q=H(M);if(q instanceof Promise){D({type:"page_context_pending"}),q.then(N=>D({type:"page_context",context:N})).catch(N=>{console.warn("[LiveLayer] getPageContext rejected; falling back to default walker.",N),D({type:"page_context",context:pt(M)})});return}D({type:"page_context",context:q});return}D({type:"page_context",context:pt(M)})}catch(q){console.warn("[LiveLayer] page-context extraction threw. Sending empty context.",q),D({type:"page_context",context:{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:M}})}return}if(f.type==="scroll_page"){if(!de("scroll")){fe("scroll_page","scroll");return}const _=f.direction;if(_!=="up"&&_!=="down"&&_!=="top"&&_!=="bottom"){console.warn(`[LiveLayer] scroll_page: invalid direction "${String(_)}". Expected up | down | top | bottom.`);return}const R=f.behavior==="instant"?"instant":"smooth";if(h.current){try{h.current(_,R)}catch(N){console.warn("[LiveLayer] onScrollPage threw.",N)}return}if(typeof window>"u")return;const D={behavior:R},M=mr(),H=N=>{M instanceof Window?M.scrollBy({top:N,...D}):M.scrollBy({top:N,...D})},q=N=>{M instanceof Window?M.scrollTo({top:N,...D}):M.scrollTo({top:N,...D})};_==="up"?H(-Wt(M)):_==="down"?H(Wt(M)):q(_==="top"?0:gr(M));return}if(f.type==="click"){if(!de("click")){fe("click","click");return}const _=typeof f.selector=="string"?f.selector:null;if(!_){console.warn("[LiveLayer] click: missing selector.");return}if(W.current){try{W.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}(Re=R.click)==null||Re.call(R);return}if(f.type==="fill_form"||f.type==="focus_field"){if(!de("fill_forms")){fe(f.type,"fill_forms");return}if(typeof document>"u")return;const _=typeof f.formId=="string"?f.formId:null;if(!_){console.warn(`[LiveLayer] ${f.type}: missing formId.`);return}const R=document.querySelector(`[data-ll-form="${_.replace(/"/g,'\\"')}"]`);if(!R){console.warn(`[LiveLayer] ${f.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] ${f.type}: refusing to touch a form in a private subtree.`);return}if(f.type==="focus_field"){const M=typeof f.fieldName=="string"?f.fieldName:null;if(!M){console.warn("[LiveLayer] focus_field: missing fieldName.");return}const H=R.querySelector(`[data-ll-field="${M.replace(/"/g,'\\"')}"]`);if(!H){console.warn(`[LiveLayer] focus_field: no field "${M}" in form "${_}".`);return}if(!ot(H)){console.warn(`[LiveLayer] focus_field: field "${M}" is privacy-protected and not focusable.`);return}H.focus();return}const D=f.values&&typeof f.values=="object"?f.values:null;if(!D){console.warn("[LiveLayer] fill_form: missing or invalid values.");return}for(const[M,H]of Object.entries(D)){if(typeof H!="string")continue;const q=R.querySelector(`[data-ll-field="${M.replace(/"/g,'\\"')}"]`);if(!q){console.warn(`[LiveLayer] fill_form: no field "${M}" in form "${_}". Skipping.`);continue}if(!ot(q)){console.warn(`[LiveLayer] fill_form: field "${M}" is privacy-protected (password / cc-* / private). Skipping.`);continue}try{dr(q,H)}catch(N){console.warn(`[LiveLayer] fill_form: failed to set "${M}".`,N)}}return}if(f.type==="submit_form"){if(!de("submit_forms")){fe("submit_form","submit_forms");return}if(typeof document>"u")return;const _=typeof f.formId=="string"?f.formId:null;if(!_){console.warn("[LiveLayer] submit_form: missing formId.");return}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 f.requestId=="string"?f.requestId:void 0,M=(Ze=ne.current)==null?void 0:Ze.call(ne),H=Y=>{const J=M,Ne=J==null?void 0:J.localParticipant;if(Ne!=null&&Ne.publishData)try{const Sn=D?{...Y,requestId:D}:Y,Cn=new TextEncoder().encode(JSON.stringify(Sn));Ne.publishData(Cn,{reliable:!0})}catch{}};let q=!1;const N=()=>{q=!0,H({type:"form_submitted",formId:_})};R.addEventListener("submit",N,{once:!0});try{typeof R.requestSubmit=="function"?R.requestSubmit():R.submit()}catch(Y){console.warn("[LiveLayer] submit_form: requestSubmit threw.",Y),R.removeEventListener("submit",N),H({type:"form_submit_blocked",formId:_,reason:"exception"});return}setTimeout(()=>{q||(R.removeEventListener("submit",N),H({type:"form_submit_blocked",formId:_,reason:"validation"}))},500);return}if(f.type==="request_routes"){if(!de("read_page")){fe("request_routes","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,D=(Et=ne.current)==null?void 0:Et.call(ne),M=D==null?void 0:D.localParticipant;if(!(M!=null&&M.publishData))return;const H=N=>{try{const Y=_?{type:"routes",routes:N,requestId:_}:{type:"routes",routes:N},J=new TextEncoder().encode(JSON.stringify(Y));M.publishData(J,{reliable:!0})}catch(Y){console.warn("[LiveLayer] request_routes: publishData failed.",Y)}},q=gt.current;if(q){try{const N=q(),Y=J=>{if(!Array.isArray(J)){H([]);return}H(J.map(un).slice(0,200))};N instanceof Promise?N.then(Y).catch(J=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",J),H(nt())}):Y(N)}catch(N){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",N),H(nt())}return}try{H(nt())}catch(N){console.warn("[LiveLayer] request_routes: extractRoutes threw.",N)}return}yr.has(f.type)||_e==null||_e(f)}},[_e,we]),O=Vt({agentId:B?"__controlled__":Ce,baseUrl:o,apiKey:i,sessionEndpoint:s,sessionBody:a,onDataMessage:B?void 0:Oe});n.useEffect(()=>{if(B!=null&&B.subscribeToDataMessages)return B.subscribeToDataMessages(Oe)},[B,Oe]),ne.current=()=>{var g;return(g=O.getRoom)==null?void 0:g.call(O)},n.useEffect(()=>{var V;if(!oe)return;const g=(V=O.getRoom)==null?void 0:V.call(O),f=g==null?void 0:g.localParticipant;if(f!=null&&f.publishData)try{const Re=new TextEncoder().encode(JSON.stringify({type:"pathname",pathname:oe}));f.publishData(Re,{reliable:!0})}catch{}},[oe,O,O.connectionState]),n.useEffect(()=>{var V;if(typeof window>"u")return;const g=((V=window.location)==null?void 0:V.hostname)||"";if(g==="localhost"||g==="127.0.0.1"||g==="0.0.0.0"||g.endsWith(".local")||g.endsWith(".test"))return window.__livelayerSimulateCommand=Re=>{try{Oe(Re)}catch(Ze){console.warn("[LiveLayer] simulate-command threw:",Ze)}},()=>{delete window.__livelayerSimulateCommand}},[Oe]);const b=n.useMemo(()=>B?{connectionState:B.connectionState,agentState:B.agentState,transcript:B.transcript,videoElement:B.videoElement,audioElement:B.audioElement,canResume:B.canResume,error:B.error,agentConfig:null,connect:async()=>{await B.onConnect()},disconnect:()=>B.onDisconnect(),getRoom:O.getRoom,isControlled:!0}:{connectionState:O.connectionState,agentState:O.agentState,transcript:O.transcript,videoElement:O.videoElement,audioElement:O.audioElement,canResume:O.canResume,error:O.error,agentConfig:O.agentConfig,connect:O.connect,disconnect:O.disconnect,getRoom:O.getRoom,isControlled:!1},[B,O]),yt=n.useRef(null);n.useEffect(()=>{const g=b.videoElement,f=yt.current;if(!(!g||!f))return f.appendChild(g),()=>{g.parentNode===f&&f.removeChild(g)}},[b.videoElement]),n.useEffect(()=>{const g=b.audioElement;if(!g)return;Pe.attach(g);const f=g.play();return f&&typeof f.catch=="function"&&f.catch(V=>{(V==null?void 0:V.name)==="NotAllowedError"&&ae(!0)}),()=>{Pe.detach()}},[b.audioElement]),n.useEffect(()=>{if(b.isControlled||b.connectionState!=="connected")return;const g=b.getRoom();if(g)return X.setupMic(g,{startMuted:!0}).catch(()=>{}),ee.attachRoom(g),te.attachRoom(g),se.refresh(),()=>{X.teardownMic(),ee.teardown(),te.teardown()}},[b.isControlled,b.connectionState]);const[ct,bt]=n.useState(!1),ut=n.useRef("idle");n.useEffect(()=>{if(b.connectionState==="idle"||b.connectionState==="disconnected"){bt(!1),ut.current="idle";return}!ct&&ut.current==="speaking"&&b.agentState!=="speaking"&&(bt(!0),X.setMuted(!1)),ut.current=b.agentState},[b.agentState,b.connectionState,ct]),n.useEffect(()=>{const g=b.audioElement;g&&(g.muted=je)},[b.audioElement,je]);const pn=n.useCallback(g=>{const f=b.getRoom();if(f)try{const V=new TextEncoder().encode(JSON.stringify({type:"user_message",text:g}));f.localParticipant.publishData(V,{reliable:!0})}catch{}},[b]),hn=n.useCallback(()=>{Ke(g=>!g)},[]);n.useEffect(()=>{ve==null||ve(b.connectionState),b.connectionState==="connected"?re==null||re():b.connectionState==="disconnected"&&(he==null||he())},[b.connectionState,re,he,ve]),n.useEffect(()=>{be==null||be(b.transcript)},[b.transcript,be]),n.useEffect(()=>{xe==null||xe(b.agentState)},[b.agentState,xe]);const xt=n.useRef(!1);n.useEffect(()=>{b.isControlled||!u||xt.current||ke&&b.connectionState==="idle"&&(xt.current=!0,b.connect())},[u,b.connectionState,b,ke]);const mn=n.useCallback(g=>{const f=C==null?void 0:C.find(V=>V.id===g);f&&(ze(!1),g!==F&&(De(!0),b.disconnect(),Te||Se(g),x==null||x(f)))},[C,F,b,Te,x]);n.useEffect(()=>{le&&b.connectionState==="connected"&&De(!1)},[b.connectionState,le]),n.useEffect(()=>{if(!$e)return;const g=f=>{f.key==="Escape"&&ze(!1)};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[$e]);const gn=!!E||!!(G!=null&&G.avatarImageUrl)||b.isControlled,qe=Qt(Ce,o,gn);K===void 0&&((wt=qe.info)!=null&&wt.capabilities)&&(lt.current=qe.info.capabilities);const Qe=(G==null?void 0:G.name)??T??((_t=b.agentConfig)==null?void 0:_t.name)??((kt=qe.info)==null?void 0:kt.name)??"Live Layer",dt=(G==null?void 0:G.avatarImageUrl)??E??((St=b.agentConfig)==null?void 0:St.avatarImageUrl)??((Ct=qe.info)==null?void 0:Ct.avatarImageUrl)??null,yn=w??((Lt=b.agentConfig)==null?void 0:Lt.idleLoopUrl)??((jt=qe.info)==null?void 0:jt.idleLoopUrl)??null,bn=I??null,xn=n.useCallback(()=>ie("expanded"),[ie]),vn=n.useCallback(()=>ie("minimized"),[ie]),vt=n.useCallback(()=>{b.disconnect(),ie("hidden")},[b,ie]),wn=n.useCallback(()=>{const g=b.audioElement;g&&g.play().then(()=>ae(!1)).catch(()=>{})},[b.audioElement]),_n=n.useCallback(()=>{ae(!1),b.connect()},[b]),Be={...at,zIndex:Je};m.primaryColor&&(Be["--ll-color-primary"]=m.primaryColor),m.accentColor&&(Be["--ll-color-accent"]=m.accentColor),m.backgroundColor&&(Be["--ll-color-bg"]=m.backgroundColor),m.textColor&&(Be["--ll-color-fg"]=m.textColor);const kn=["ll-widget",`ll-widget--${Z}`,`ll-widget--${ge?"mobile":"desktop"}`,st].filter(Boolean).join(" ");return ke?t.jsxs("div",{className:kn,style:Be,"data-display-mode":Z,"data-position":v,children:[Z==="hidden"&&t.jsx(Wn,{position:v,isMobile:ge,isSpeaking:b.agentState==="speaking",onExpand:()=>ie("expanded"),label:`Open ${Qe} widget`,avatarImageUrl:dt,agentName:Qe}),Z==="minimized"&&t.jsx(Un,{position:v,isMobile:ge,agentName:Qe,avatarImageUrl:dt,agentState:b.agentState,isMuted:X.isMuted,audioLevel:Pe,onExpand:xn,onToggleMute:X.toggleMute,onClose:vt}),Z==="expanded"&&t.jsx(Yn,{position:v,isMobile:ge,agentName:Qe,avatarImageUrl:dt,idleLoopUrl:yn,greeting:bn,branding:m,teamMembers:C,currentTeamMemberId:F,isSwitchingTeamMember:le,teamSwitcherOpen:$e,onToggleTeamSwitcher:()=>ze(g=>!g),onSelectTeamMember:mn,connectionState:b.connectionState,agentState:b.agentState,transcript:b.transcript,isMuted:X.isMuted,micDevices:se.mics,isCameraEnabled:ee.isEnabled,cameraPreviewEl:ee.previewEl,cameraDevices:se.cameras,activeCameraId:ee.activeDeviceId,isScreenShareEnabled:te.isEnabled,screenPreviewEl:te.previewEl,isSpeakerMuted:je,allowCamera:L,allowScreenShare:$,allowTyping:A,languageMenuOpen:ce,onToggleLanguageMenu:()=>ue(g=>!g),needsUserGesture:Le,canResume:b.canResume,micError:X.micError,error:b.error,avatarVideoContainerRef:yt,agentVideoEl:b.videoElement,micGateOpen:b.isControlled?!0:ct,onConnect:()=>void b.connect(),onDisconnect:()=>b.disconnect(),onRetry:_n,onResumeAudio:wn,onToggleMute:X.toggleMute,onToggleCamera:()=>void ee.toggle(),onSwitchCameraDevice:g=>void ee.switchDevice(g),onToggleScreenShare:()=>void te.toggle(),onToggleSpeaker:hn,onSendMessage:pn,onMinimize:vn,onClose:vt,onClearMicError:X.clearError})]}):null}function xr(e){return t.jsx(Ut,{children:t.jsx(br,{...e})})}const vr=({agentId:e,baseUrl:r,apiKey:i,mode:o,onAgentEvent:s,className:a,style:u})=>{const d=n.useRef(null),p=n.useRef(null),y=n.useRef(s);y.current=s;const v=n.useCallback(c=>{var k;const l=c.detail;(k=y.current)==null||k.call(y,l)},[]);return n.useEffect(()=>{const c=d.current;if(!c)return;const l=document.createElement("livelayer-widget");return l.setAttribute("agent-id",e),r&&l.setAttribute("base-url",r),i&&l.setAttribute("api-key",i),o&&l.setAttribute("mode",o),l.addEventListener("agent-event",v),c.appendChild(l),p.current=l,()=>{l.removeEventListener("agent-event",v),c.removeChild(l),p.current=null}},[e]),n.useEffect(()=>{p.current&&(o?p.current.setAttribute("mode",o):p.current.removeAttribute("mode"))},[o]),t.jsx("div",{ref:d,className:a,style:u})},wr=n.forwardRef(function({id:r,intent:i,as:o="div",className:s,style:a,children:u},d){return n.createElement(o,{ref:d,"data-ll-region":r,"data-ll-intent":i,className:s,style:a},u)}),_r=n.forwardRef(function({id:r,intent:i,children:o,...s},a){return t.jsx("form",{ref:a,"data-ll-form":r,"data-ll-intent":i,...s,children:o})}),kr=n.forwardRef(function(r,i){const{name:o,label:s,labelClassName:a}=r,u={name:o,"data-ll-field":o};let d;if("as"in r&&r.as==="textarea"){const{name:p,label:y,labelClassName:v,as:c,...l}=r;d=t.jsx("textarea",{ref:i,...u,...l})}else if("as"in r&&r.as==="select"){const{name:p,label:y,labelClassName:v,as:c,children:l,...k}=r;d=t.jsx("select",{ref:i,...u,...k,children:l})}else{const{name:p,label:y,labelClassName:v,as:c,...l}=r;d=t.jsx("input",{ref:i,...u,...l})}return s===void 0?d:t.jsxs("label",{className:a,children:[s,d]})});let Ft=1;function Sr({onMount:e,defaultOpen:r=!1,storageKey:i="ll-debug-open"}){const[o,s]=n.useState(r),[a,u]=n.useState([]),[d,p]=n.useState(""),[y,v]=n.useState(!1),c=n.useRef(new Set),l=n.useRef([]),k=n.useRef(y);k.current=y,n.useEffect(()=>{try{const x=localStorage.getItem(i);x==="1"&&s(!0),x==="0"&&s(!1)}catch{}},[i]),n.useEffect(()=>{try{localStorage.setItem(i,o?"1":"0")}catch{}},[o,i]),n.useEffect(()=>{const x=w=>{(w.metaKey||w.ctrlKey)&&w.shiftKey&&w.key.toLowerCase()==="l"&&(w.preventDefault(),s(I=>!I))};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[]),n.useEffect(()=>{const x=setInterval(()=>{if(l.current.length===0||k.current)return;const w=l.current.splice(0,l.current.length);u(I=>[...w.reverse(),...I].slice(0,200))},100);return()=>clearInterval(x)},[]);const C=n.useRef(!1);if(n.useEffect(()=>{!e||C.current||(C.current=!0,e(x=>{l.current.push({id:Ft++,ts:Date.now(),kind:"event",type:x.eventName,data:x.data})}))},[e]),n.useEffect(()=>{const x=console.warn,w=console.log,I=(E,T)=>function(...m){try{const L=typeof m[0]=="string"?m[0]:"";L.startsWith("[LiveLayer]")&&l.current.push({id:Ft++,ts:Date.now(),kind:E,type:L.slice(0,120),data:{args:m.slice(1).map($=>Lr($))}})}catch{}return T.apply(this,m)};return console.warn=I("warn",x),console.log=I("log",w),()=>{console.warn=x,console.log=w}},[]),!o)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 S=a.filter(x=>{if(!d)return!0;const w=d.toLowerCase();return x.type.toLowerCase().includes(w)||JSON.stringify(x.data||{}).toLowerCase().includes(w)});return t.jsxs("div",{style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,width:380,maxHeight:"60vh",background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.16)",borderRadius:12,boxShadow:"0 16px 48px rgba(0,0,0,0.5)",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",display:"flex",flexDirection:"column",overflow:"hidden"},children:[t.jsxs("div",{style:{padding:"8px 10px",background:"rgba(255,255,255,0.04)",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{style:{fontWeight:600,fontSize:12},children:"LiveLayer debug"}),t.jsxs("span",{style:{fontSize:10,color:"rgba(255,255,255,0.4)"},children:[a.length," event",a.length===1?"":"s"]}),t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:()=>v(x=>!x),style:ft(y?"#f59e0b":"transparent"),title:"Pause / resume capture",children:y?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{u([]),l.current=[]},style:ft("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:ft("transparent"),"aria-label":"Close",title:"Close (Cmd/Ctrl + Shift + L)",children:"✕"})]}),t.jsx("input",{type:"text",value:d,onChange:x=>p(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:S.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(b=>t.jsx(_r,{entry:b,expanded:a.current.has(b.id),onToggle:()=>{a.current.has(b.id)?a.current.delete(b.id):a.current.add(b.id),u(v=>[...v])}},b.id))})]})}function _r({entry:e,expanded:n,onToggle:i}){const o=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:i,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:o,fontWeight:600,flexShrink:0},children:e.type.length>50?e.type.slice(0,50)+"…":e.type})]}),n&&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 ct(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 kr(e){try{return e instanceof Error?{message:e.message,stack:e.stack}:(JSON.stringify(e),e)}catch{return String(e)}}function Sr(){const[e,n]=r.useState([]),i=r.useCallback(s=>{n(l=>{const u=l.findIndex(d=>d.id===s.id);if(u>=0){const d=l.slice();return d[u]=s,d}return[...l,s]})},[]),o=r.useCallback(()=>n([]),[]);return{entries:e,pushSegment:i,clear:o,latest:e.length>0?e[e.length-1]:null}}exports.AvatarWidget=gr;exports.ErrorBoundary=Bt;exports.LiveLayerDebugPanel=wr;exports.LiveLayerField=vr;exports.LiveLayerForm=br;exports.LiveLayerRegion=xr;exports.LiveLayerWidget=yr;exports.clearPageContextCache=sn;exports.clearRoutesCache=cn;exports.extractPageContext=on;exports.extractRoutes=an;exports.getCachedPageContext=ut;exports.getCachedRoutes=tt;exports.matchesPattern=en;exports.normalizeRouteInput=ln;exports.shouldRenderAtPath=tn;exports.useAgentInfo=Jt;exports.useAudioLevel=Ft;exports.useCameraState=Vt;exports.useDisplayMode=Kt;exports.useDisplayModePersistence=Xt;exports.useIsMobile=Qt;exports.useLiveKitSession=Wt;exports.useMediaDevices=Gt;exports.useMicrophoneState=Ut;exports.usePathname=Zt;exports.useRouteMatch=nn;exports.useScreenShareState=Yt;exports.useTranscript=Sr;
5
+ })`})]}):S.map(x=>t.jsx(Cr,{entry:x,expanded:c.current.has(x.id),onToggle:()=>{c.current.has(x.id)?c.current.delete(x.id):c.current.add(x.id),u(w=>[...w])}},x.id))})]})}function Cr({entry:e,expanded:r,onToggle:i}){const o=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:i,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:o,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 ft(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 Lr(e){try{return e instanceof Error?{message:e.message,stack:e.stack}:(JSON.stringify(e),e)}catch{return String(e)}}function jr(){const[e,r]=n.useState([]),i=n.useCallback(s=>{r(a=>{const u=a.findIndex(d=>d.id===s.id);if(u>=0){const d=a.slice();return d[u]=s,d}return[...a,s]})},[]),o=n.useCallback(()=>r([]),[]);return{entries:e,pushSegment:i,clear:o,latest:e.length>0?e[e.length-1]:null}}exports.AvatarWidget=xr;exports.ErrorBoundary=Ut;exports.LiveLayerDebugPanel=Sr;exports.LiveLayerField=kr;exports.LiveLayerForm=_r;exports.LiveLayerRegion=wr;exports.LiveLayerWidget=vr;exports.clearPageContextCache=cn;exports.clearRoutesCache=fn;exports.extractPageContext=ln;exports.extractRoutes=dn;exports.getCachedPageContext=pt;exports.getCachedRoutes=nt;exports.matchesPattern=rn;exports.normalizeRouteInput=un;exports.shouldRenderAtPath=on;exports.useAgentInfo=Qt;exports.useAudioLevel=Yt;exports.useCameraState=Jt;exports.useDisplayMode=Zt;exports.useDisplayModePersistence=en;exports.useIsMobile=tn;exports.useLiveKitSession=Vt;exports.useMediaDevices=Xt;exports.useMicrophoneState=Gt;exports.usePathname=nn;exports.useRouteMatch=sn;exports.useScreenShareState=Kt;exports.useTranscript=jr;