@livelayer/react 0.5.6 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),kn=require("@livelayer/sdk"),Ge=require("livekit-client");class Ht 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 Ot(e){const[n,i]=r.useState("idle"),[o,s]=r.useState("idle"),[l,u]=r.useState([]),[d,p]=r.useState(null),[y,g]=r.useState(null),[a,c]=r.useState(null),[j,S]=r.useState(!1),[k,x]=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"&&x(null)},onAgentStateChange:s,onTranscript:A=>u([...A]),onAgentConfig:p,onAudioTrack:A=>c(A),onVideoTrack:A=>g(A),onVideoTrackRemoved:()=>g(null),onError:A=>x(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),g(null),c(null),S(!1),x(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 x($ instanceof Error?$.message:String($)),$}},[]),T=r.useCallback(()=>{const C=v.current;C&&C.disconnect()},[]),h=r.useCallback(()=>{var C;return((C=v.current)==null?void 0:C.getRoom())??null},[]);return{connectionState:n,agentState:o,transcript:l,agentConfig:d,videoElement:y,audioElement:a,canResume:j,error:k,connect:E,disconnect:T,getRoom:h,session:v.current}}function qt(){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(x){console.error("[useAudioLevel] subscriber threw:",x)}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]),y=r.useCallback(()=>{if(o.current!==null&&(cancelAnimationFrame(o.current),o.current=null),i.current){try{i.current.disconnect()}catch{}i.current=null}},[]),g=r.useCallback(a=>(s.current.add(a),()=>{s.current.delete(a)}),[]);return r.useEffect(()=>()=>{if(y(),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},[y]),{attach:p,detach:y,subscribe:g}}function Bt(){const[e,n]=r.useState(!1),[i,o]=r.useState(null),s=r.useRef(null),l=r.useRef(null),u=r.useCallback(async g=>{if(s.current&&l.current){try{await l.current.localParticipant.unpublishTrack(s.current)}catch{}s.current.stop(),s.current=null}l.current=g,o(null);try{const a=await Ge.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});await g.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 g=s.current;g&&(g.isMuted?(g.unmute(),n(!1)):(g.mute(),n(!0)))},[]),p=r.useCallback(()=>{const g=s.current,a=l.current;if(g&&a){try{a.localParticipant.unpublishTrack(g)}catch{}g.stop()}s.current=null,l.current=null,n(!1)},[]),y=r.useCallback(()=>o(null),[]);return{isMuted:e,micError:i,toggleMute:d,setupMic:u,teardownMic:p,clearError:y}}const Sn={resolution:{width:640,height:480,frameRate:24}};function Wt(){const[e,n]=r.useState(!1),[i,o]=r.useState(null),[s,l]=r.useState(null),[u,d]=r.useState(""),p=r.useRef(null),y=r.useRef(null),g=r.useCallback(v=>{p.current=v},[]),a=r.useCallback(()=>{const v=p.current,I=y.current;if(I&&v){const E=v.localParticipant.getTrackPublication(Ge.Track.Source.Camera);if(E!=null&&E.track){try{v.localParticipant.unpublishTrack(E.track)}catch{}E.track.stop()}else I.stop()}y.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 Ge.createLocalVideoTrack(E);await I.localParticipant.publishTrack(T),y.current=T;const h=T.attach();l(h),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]),x=r.useCallback(()=>o(null),[]);return r.useEffect(()=>()=>{y.current&&y.current.stop()},[]),{isEnabled:e,error:i,previewEl:s,activeDeviceId:u,toggle:j,switchDevice:S,attachRoom:g,teardown:k,clearError:x}}function Ft(){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),[]),y=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(Ge.Track.Source.ScreenShare);if(k!=null&&k.track){const x=k.track.attach();l(x),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]),g=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:y,attachRoom:d,teardown:g,clearError:a}}function Ut(){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 Vt(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 y=new AbortController,g=n||"https://app.livelayer.studio";return p(!0),u(null),fetch(`${g}/api/widget/agent/${encodeURIComponent(e)}`,{signal:y.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=>{y.signal.aborted||(s(a),p(!1))}).catch(a=>{y.signal.aborted||(u(a instanceof Error?a.message:"Agent lookup failed"),p(!1))}),()=>y.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 Yt({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 Jt({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]=Yt({value:e,defaultValue:n,onChange:y=>{e===void 0&&!s&&Ln(l,y),i==null||i(y)}});return r.useEffect(()=>{if(u.current||(u.current=!0,s||e!==void 0))return;const y=En(Cn(l));y&&y!==d&&p(y)},[]),[d,p]}const Rn=640;function Kt(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 kt="__llHistoryPatched",Xe="ll:pathname";function Nn(){if(typeof window>"u"||window.history[kt])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(Xe)),o},window.history.replaceState=function(...i){const o=n.apply(this,i);return window.dispatchEvent(new Event(Xe)),o},window.history[kt]=!0}function St(){return typeof window>"u"?"/":window.location.pathname||"/"}function Gt(e){const[n,i]=r.useState(()=>e??St());return r.useEffect(()=>{if(e!==void 0)return;Nn();const o=()=>i(St());return o(),window.addEventListener("popstate",o),window.addEventListener(Xe,o),()=>{window.removeEventListener("popstate",o),window.removeEventListener(Xe,o)}},[e]),e??n}const Ct=new Map,An=/[\\^$+?.()|{}[\]]/g;function Mn(e){return e.replace(An,"\\$&")}function In(e){const n=Ct.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 Ct.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 Xt(e,n){return typeof e=="function"?e(n):e instanceof RegExp?e.test(n):Tn(e,n)}function Lt(e,n){if(!e||e.length===0)return!1;for(const i of e)if(Xt(i,n))return!0;return!1}function Qt(e,n,i){return e===void 0?!0:Lt(i,e)?!1:n&&n.length>0?Lt(n,e):!0}function Zt(e,n,i){return r.useMemo(()=>Qt(e,n,i),[e,n,i])}const jt=({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"})}),Et=({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},Rt=({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 en="ll-hidden-tab-center-y",zn=5,Nt=16;function Hn(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(en);if(!e)return null;const n=Number.parseFloat(e);return Number.isFinite(n)?n:null}catch{return null}}function At(e){if(!(typeof window>"u"))try{window.localStorage.setItem(en,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",y=n?80:72,g=!!l,[a,c]=r.useState(null),[j,S]=r.useState(!1),k=r.useRef(null),x=r.useRef(!1),v=r.useCallback(L=>{if(typeof window>"u")return L;const P=y/2,z=Nt+P,W=window.innerHeight-Nt-P;return W<z?Math.max(z,L):Math.max(z,Math.min(W,L))},[y]);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),x.current=!0,c(z=>(z!==null&&At(z),z)))}},[]),h=r.useCallback(()=>{if(x.current){x.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 W=v(z+P);return At(W),W})}},[v]),$=["ll-hidden",`ll-hidden--${d}`,n?"ll-hidden--mobile":"ll-hidden--desktop",i?"ll-hidden--speaking":null,j?"is-dragging":null,g?"ll-hidden--with-avatar":null].filter(Boolean).join(" "),A=a===null?void 0:{top:`${a-y/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:$,onPointerDown:I,onPointerMove:E,onPointerUp:T,onPointerCancel:T,onClick:h,onKeyDown:C,"aria-label":s,"data-position":e,style:A,children:g?t.jsxs(t.Fragment,{children:[t.jsx(Rt,{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(Rt,{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 g=(Math.sqrt(5)-1)/2;return Array.from({length:n},(a,c)=>.5+c*g%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 y=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:u,className:y,"aria-hidden":"true",children:Array.from({length:n},(g,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:y})=>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:g=>{g.stopPropagation(),p()},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.stopPropagation(),g.preventDefault(),p())},"aria-label":l?"Unmute microphone":"Mute microphone",children:t.jsx(jt,{muted:l,className:"ll-minimized__icon"})}),t.jsx(Et,{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(jt,{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(Et,{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(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:y,teamSwitcherOpen:g,onToggleTeamSwitcher:a,onSelectTeamMember:c,languageMenuOpen:j,onToggleLanguageMenu:S,connectionState:k,agentState:x,transcript:v,canResume:I,needsUserGesture:E,error:T,isMuted:h,micError:C,micDevices:$,isCameraEnabled:A,cameraPreviewEl:L,cameraDevices:P,activeCameraId:z,isScreenShareEnabled:W,screenPreviewEl:X,isSpeakerMuted:le,allowCamera:$e,allowScreenShare:ze,allowTyping:He,avatarVideoContainerRef:Oe,onConnect:fe,onDisconnect:pe,onRetry:he,onResumeAudio:me,onToggleMute:ge,onToggleCamera:ye,onSwitchCameraDevice:be,onToggleScreenShare:xe,onToggleSpeaker:q,onSendMessage:qe,onMinimize:Be,onClose:We,onClearMicError:ae})=>{var _e;const re=v.length>0?v[v.length-1]:null,te=((d==null?void 0:d.length)??0)>1,ve=k==="connecting"||k==="connected",we=k==="connected",ce=k==="idle"||k==="disconnected"||k==="error",V=r.useRef(null),Ee=r.useRef(null);r.useEffect(()=>{const b=V.current;b&&(b.innerHTML="",L&&(L.style.width="100%",L.style.height="100%",L.style.objectFit="cover",L.style.transform="scaleX(-1)",b.appendChild(L)))},[L]),r.useEffect(()=>{const b=Ee.current;b&&(b.innerHTML="",X&&(X.style.width="100%",X.style.height="100%",X.style.objectFit="contain",b.appendChild(X)))},[X]);const[Q,G]=r.useState(!1),[ne,ie]=r.useState(!1);r.useEffect(()=>{if(!Q&&!ne&&!j&&!g)return;const b=()=>{G(!1),ie(!1),j&&S(),g&&a()};return document.addEventListener("click",b),()=>document.removeEventListener("click",b)},[Q,ne,j,g,S,a]);const[K,Z]=r.useState(""),ue=r.useCallback(b=>{b.preventDefault();const Y=K.trim();Y&&(qe(Y),Z(""))},[K,qe]),Re=u.productName||"Live Layer",Fe=we&&(re!=null&&re.text)?re.text:l||"",Ne=["ll-expanded",n?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:Ne,"data-position":e,"data-state":we?"connected":ve?"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:((_e=i==null?void 0:i.charAt(0))==null?void 0:_e.toUpperCase())||"A"})}),s&&!we&&t.jsx("video",{className:"ll-expanded__bg-idle",src:s,autoPlay:!0,loop:!0,muted:!0,playsInline:!0})]}),t.jsx("div",{ref:Oe,className:"ll-expanded__video"}),k==="connecting"&&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&&we&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:me,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"})]}),ve?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:b=>{te&&(b.stopPropagation(),a())},"aria-haspopup":te?"listbox":void 0,"aria-expanded":te?g:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:i}),te&&t.jsx(Ye,{})]}),te&&g&&t.jsx("div",{className:"ll-hmenu",onClick:b=>b.stopPropagation(),role:"listbox",children:d==null?void 0:d.map(b=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${b.id===p?"is-active":""}`,onClick:()=>c(b.id),role:"option","aria-selected":b.id===p,children:[b.avatarImageUrl&&t.jsx("img",{src:b.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:b.name}),b.role&&t.jsx("span",{className:"ll-hmenu__role",children:b.role})]},b.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:b=>{b.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(Ye,{})]}),j&&t.jsx("div",{className:"ll-hmenu",onClick:b=>b.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:Be,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(It,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:We,"aria-label":"End call",title:"End call",children:t.jsx(Mt,{})})]})]}):t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:Re}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:Be,"aria-label":"Minimize widget",children:t.jsx(It,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:We,"aria-label":"Close widget",children:t.jsx(Mt,{})})]})]}),ce&&(()=>{const b=I?"Restart paused session":k==="disconnected"?"Reconnect to agent":"Start video call",Y=I?"Pick up where you left off":null,Ae=k==="idle"&&!I&&!T;return t.jsxs(t.Fragment,{children:[Ae&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:fe,"aria-label":b,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:b})]}),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})}),Y&&t.jsx("p",{className:"ll-expanded__cta-sublabel",children:Y}),t.jsx("button",{type:"button",className:"ll-expanded__cta",onClick:fe,"aria-label":b,children:b})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${ve&&(A||W)?"is-visible":""}`,children:[t.jsx("div",{ref:Ee,className:W?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:V,className:!W&&A?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),ve?t.jsxs("div",{className:"ll-expanded__bottom",children:[Fe&&t.jsx("div",{className:"ll-expanded__transcript",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Fe})}),t.jsxs("div",{className:"ll-toolbar",onClick:b=>b.stopPropagation(),children:[ze&&t.jsx("button",{type:"button",className:`ll-tool ${W?"is-on":""}`,onClick:xe,"aria-label":W?"Stop sharing screen":"Share screen",title:W?"Stop sharing":"Share screen",children:t.jsx(Un,{})}),$e&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${A?"is-on":""}`,onClick:ye,"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:b=>{b.stopPropagation(),ie(Y=>!Y),G(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":ne,children:t.jsx(Ye,{})}),ne&&P.length>0&&t.jsx(Tt,{label:"Camera",devices:P,activeId:z,onPick:b=>{ie(!1),be(b)}})]}),t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${h?"is-muted":""}`,onClick:ge,"aria-label":h?"Unmute microphone":"Mute microphone",title:h?"Unmute":"Mute",children:t.jsx(Yn,{muted:h})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${h?"is-muted":""}`,onClick:b=>{b.stopPropagation(),G(Y=>!Y),ie(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":Q,children:t.jsx(Ye,{})}),Q&&$.length>0&&t.jsx(Tt,{label:"Microphone",devices:$,activeId:"",onPick:()=>G(!1)})]}),t.jsx("button",{type:"button",className:`ll-tool ${le?"is-muted":""}`,onClick:q,"aria-label":le?"Unmute speaker":"Mute speaker",title:le?"Unmute speaker":"Mute speaker",children:t.jsx(Jn,{muted:le})})]}),He&&t.jsxs("form",{className:"ll-message-input",onSubmit:ue,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:K,onChange:b=>Z(b.target.value),"aria-label":"Message the agent"}),K.trim()&&t.jsx("button",{type:"submit",className:"ll-message-input__send","aria-label":"Send message",children:t.jsx(Kn,{})})]}),t.jsx("button",{type:"button",className:"ll-expanded__end",onClick:pe,children:"End conversation"})]}):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:ae,"aria-label":"Dismiss",children:"×"})]});if(!T||k!=="error")return null;let b="Failed to connect",Y="Try again";return T==="MIC_PERMISSION_DENIED"?b="Microphone blocked. Allow access to talk.":T==="MIC_NOT_FOUND"?b="No microphone found. Plug one in + retry.":T==="MIC_UNAVAILABLE"?b="Mic unavailable. Check other apps using it.":T==="AGENT_TIMEOUT"?b="Agent didn't pick up. Try again.":T==="CONNECT_FAILED"?b="Connection failed. Check your network.":T.length<80&&(b=T),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:b}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:he,children:Y})]})})()]})};function Ye(){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 Mt(){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 It(){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 Jn({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 Kn(){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"})]})}const Tt=({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)})]}),Gn=['[data-ll-private="true"]',".ll-widget"];function at(e){let n=e;for(;n;){for(const i of Gn)if(n.matches(i))return!0;n=n.parentElement}return!1}function Qe(e){if(at(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 Je=4096,Xn=20,Qn=20,Zn=10,er=10,tr=30,Pt=500,nr=['[data-ll-private="true"]',".ll-widget","script","style","noscript","iframe"];function Pe(e){if(e.getAttribute("aria-hidden")==="true"||e.hasAttribute("hidden"))return!0;let n=e;for(;n;){for(const i of nr)if(n.matches(i))return!0;n=n.parentElement}return!1}function De(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 Dt(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 de(e,n){return e.length<=n?e:e.slice(0,n-1)+"…"}function Ce(e){return e.length}function tn(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 h of u){if(d.length>=Zn)break;if(Pe(h)||!De(h))continue;const C=h.getAttribute("data-ll-region")??"",$=h.getAttribute("data-ll-intent")??void 0,A=de((h.innerText||h.textContent||"").trim(),Pt*2);!C||!A||d.push({id:C,intent:$,text:A})}const p=[],y=["H1","H2","H3","H4","H5","H6"],g=Array.from(i.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const h of g){if(Pe(h)||!De(h))continue;const C=(h.textContent||"").trim();C&&p.push(`${h.tagName}: ${de(C,200)}`)}const a=Array.from(i.querySelectorAll("p, li"));for(const h of a){if(Pe(h)||!De(h)||y.includes(h.tagName))continue;const C=(h.textContent||"").trim();C.length>10&&p.push(de(C,Pt))}const c=p.join(`
2
- `),j=[],S=Array.from(i.querySelectorAll("a[href]"));for(const h of S){if(j.length>=Xn)break;if(Pe(h)||!De(h))continue;const C=h.getAttribute("href")||"",$=(h.textContent||"").trim();!C||!$||j.push({href:C,text:de($,100)})}const k=[],x=Array.from(i.querySelectorAll("input, textarea, select"));for(const h of x){if(k.length>=Qn)break;if(Pe(h)||!Qe(h)||!De(h))continue;const C=Dt(h),$=h instanceof HTMLInputElement?h.type:h.tagName.toLowerCase();C&&k.push({label:de(C,100),type:$})}const v=Array.from(i.querySelectorAll("[data-ll-form]")),I=[];for(const h of v){if(I.length>=er)break;if(at(h))continue;const C=h.getAttribute("data-ll-form")||"";if(!C)continue;const $=h.getAttribute("data-ll-intent")||void 0,A=Array.from(h.querySelectorAll("[data-ll-field]")),L=[];for(const P of A){if(L.length>=tr)break;if(!Qe(P))continue;const z=P.getAttribute("data-ll-field")||"";if(!z)continue;const W=Dt(P)||z,X=P instanceof HTMLInputElement?P.type:P.tagName.toLowerCase();L.push({name:z,label:de(W,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=Ce(JSON.stringify(E.regions))+Ce(E.visibleText)+Ce(JSON.stringify(E.visibleLinks))+Ce(JSON.stringify(E.visibleFields));for(;T>Je&&E.visibleFields.length>0;)E.visibleFields.pop(),T=Ce(JSON.stringify(E.visibleFields));for(;T>Je&&E.visibleLinks.length>0;)E.visibleLinks.pop(),T-=80;return Ce(E.visibleText)>Je&&(E.visibleText=de(E.visibleText,Je-100)),E}let Le=null;function lt(e,n={}){const i=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(Le&&Le.key===s&&i-Le.at<1e3)return Le.ctx;const l=tn(e,n);return Le={key:s,at:i,ctx:l},l}function nn(){Le=null}const rr=200;function rn(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 ir(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function on(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>=rr)break;if(at(u))continue;const d=u.getAttribute("href")||"";if(!ir(d))continue;let p=d,y=!0;try{if(typeof window<"u"){const a=new URL(d,i);y=a.origin===i,y&&d.startsWith("http")&&(p=a.pathname+a.search+a.hash)}}catch{continue}if(o.has(p))continue;o.add(p);const g=(u.textContent||"").trim().slice(0,120);s.push({href:p,text:g,internal:y})}return s}let je=null;const or=5e3;function Ke(){const e=Date.now(),n=typeof window<"u"&&window.location.pathname||"/";if(je&&je.pathname===n&&e-je.at<or)return je.routes;const i=on();return je={at:e,pathname:n,routes:i},i}function sn(){je=null}function sr(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 lr(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}sr(e,n),o&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function ar(){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 cr(e){if(!(e instanceof HTMLElement))return!1;const i=window.getComputedStyle(e).overflowY;return!(i!=="auto"&&i!=="scroll"||e.scrollHeight<=e.clientHeight+2)}function ur(){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(!cr(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 dr(){if(typeof window>"u")return null;if(ar())return window;const e=ur();return e||window}function $t(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function fr(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 pr=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 hr(e){var mt,gt,yt,bt,xt,vt,wt;const{agentId:n,apiKey:i,baseUrl:o="https://app.livelayer.studio",sessionEndpoint:s,sessionBody:l,autoConnect:u=!1,displayMode:d,defaultDisplayMode:p="expanded",onDisplayModeChange:y,position:g="bottom-right",mobileBreakpoint:a=640,persistKey:c="ll-widget",disablePersistence:j=!1,teamMembers:S,currentTeamMemberId:k,onTeamMemberChange:x,idleLoopUrl:v,greeting:I,avatarImageUrl:E,agentName:T,branding:h={},allowCamera:C=!0,allowScreenShare:$=!0,allowTyping:A=!0,showOn:L,hideOn:P,pathname:z,onNavigate:W,onScrollToSelector:X,getPageContext:le,pageContextExtras:$e,getRoutes:ze,onScrollPage:He,onClick:Oe,capabilities:fe,onConnect:pe,onDisconnect:he,onTranscript:me,onAgentState:ge,onConnectionStateChange:ye,onAgentEvent:be,onAgentCommand:xe,controlledSession:q,className:qe,style:Be,zIndex:We=2147483647}=e,ae=Gt(z),re=Zt(ae,L,P);r.useEffect(()=>{nn(),sn()},[ae]),r.useEffect(()=>{var F;if(!ae)return;const m=(F=B.getRoom)==null?void 0:F.call(B),f=m==null?void 0:m.localParticipant;if(f!=null&&f.publishData)try{const ke=new TextEncoder().encode(JSON.stringify({type:"pathname",pathname:ae}));f.publishData(ke,{reliable:!0})}catch{}},[ae,B]);const te=k!==void 0,[ve,we]=r.useState(()=>{var m;return k??((m=S==null?void 0:S[0])==null?void 0:m.id)}),ce=te?k:ve,V=r.useMemo(()=>(S==null?void 0:S.find(m=>m.id===ce))??null,[S,ce]),Ee=(V==null?void 0:V.agentId)??n,[Q,G]=Jt({value:d,defaultValue:p,onChange:y,persistKey:c,disablePersistence:j}),ne=Kt(a),ie=qt(),K=Bt(),Z=Wt(),ue=Ft(),Re=Ut(),[Fe,Ne]=r.useState(!1),[_e,b]=r.useState(!1),[Y,Ae]=r.useState(!1),[ln,an]=r.useState(!1),[Ze,cn]=r.useState(!1),et=r.useRef(W),tt=r.useRef(X),nt=r.useRef(He),rt=r.useRef(Oe),ct=r.useRef(le),ut=r.useRef($e),dt=r.useRef(ze),it=r.useRef(fe),ee=r.useRef(null);et.current=W,tt.current=X,nt.current=He,rt.current=Oe,ct.current=le,ut.current=$e,dt.current=ze,it.current=fe;function oe(m){const f=it.current;return f?f.includes(m):!0}function se(m,f){console.warn(`[LiveLayer] Agent command "${m}" blocked — capability "${f}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const Me=r.useCallback(m=>{var F,ke,Ve,_t;const f=m;if(!(!f.type||typeof f.type!="string")){if(be==null||be({eventName:f.type,data:m}),f.type==="navigate"){if(!oe("navigate")){se("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(et.current){try{et.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(!oe("scroll")){se("scroll_to","scroll");return}const _=typeof f.selector=="string"?f.selector:null;if(!_)return;const R=f.behavior==="instant"?"instant":"smooth";if(tt.current){try{tt.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(!oe("read_page")){se("request_page_context","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,R=(F=ee.current)==null?void 0:F.call(ee),D=O=>{const N=R,U=N==null?void 0:N.localParticipant;if(U!=null&&U.publishData)try{const J=_?{...O,requestId:_}:O,Se=new TextEncoder().encode(JSON.stringify(J));U.publishData(Se,{reliable:!0})}catch(J){console.warn("[LiveLayer] publishData failed.",J)}},M=ut.current,H=ct.current;try{if(H){const O=H(M);if(O instanceof Promise){D({type:"page_context_pending"}),O.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:lt(M)})});return}D({type:"page_context",context:O});return}D({type:"page_context",context:lt(M)})}catch(O){console.warn("[LiveLayer] page-context extraction threw. Sending empty context.",O),D({type:"page_context",context:{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:M}})}return}if(f.type==="scroll_page"){if(!oe("scroll")){se("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(nt.current){try{nt.current(_,R)}catch(N){console.warn("[LiveLayer] onScrollPage threw.",N)}return}if(typeof window>"u")return;const D={behavior:R},M=dr(),H=N=>{M instanceof Window?M.scrollBy({top:N,...D}):M.scrollBy({top:N,...D})},O=N=>{M instanceof Window?M.scrollTo({top:N,...D}):M.scrollTo({top:N,...D})};_==="up"?H(-$t(M)):_==="down"?H($t(M)):O(_==="top"?0:fr(M));return}if(f.type==="click"){if(!oe("click")){se("click","click");return}const _=typeof f.selector=="string"?f.selector:null;if(!_){console.warn("[LiveLayer] click: missing selector.");return}if(rt.current){try{rt.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}(ke=R.click)==null||ke.call(R);return}if(f.type==="fill_form"||f.type==="focus_field"){if(!oe("fill_forms")){se(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(!Qe(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 O=R.querySelector(`[data-ll-field="${M.replace(/"/g,'\\"')}"]`);if(!O){console.warn(`[LiveLayer] fill_form: no field "${M}" in form "${_}". Skipping.`);continue}if(!Qe(O)){console.warn(`[LiveLayer] fill_form: field "${M}" is privacy-protected (password / cc-* / private). Skipping.`);continue}try{lr(O,H)}catch(N){console.warn(`[LiveLayer] fill_form: failed to set "${M}".`,N)}}return}if(f.type==="submit_form"){if(!oe("submit_forms")){se("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=(Ve=ee.current)==null?void 0:Ve.call(ee),H=U=>{const J=M,Se=J==null?void 0:J.localParticipant;if(Se!=null&&Se.publishData)try{const wn=D?{...U,requestId:D}:U,_n=new TextEncoder().encode(JSON.stringify(wn));Se.publishData(_n,{reliable:!0})}catch{}};let O=!1;const N=()=>{O=!0,H({type:"form_submitted",formId:_})};R.addEventListener("submit",N,{once:!0});try{typeof R.requestSubmit=="function"?R.requestSubmit():R.submit()}catch(U){console.warn("[LiveLayer] submit_form: requestSubmit threw.",U),R.removeEventListener("submit",N),H({type:"form_submit_blocked",formId:_,reason:"exception"});return}setTimeout(()=>{O||(R.removeEventListener("submit",N),H({type:"form_submit_blocked",formId:_,reason:"validation"}))},500);return}if(f.type==="request_routes"){if(!oe("read_page")){se("request_routes","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,D=(_t=ee.current)==null?void 0:_t.call(ee),M=D==null?void 0:D.localParticipant;if(!(M!=null&&M.publishData))return;const H=N=>{try{const U=_?{type:"routes",routes:N,requestId:_}:{type:"routes",routes:N},J=new TextEncoder().encode(JSON.stringify(U));M.publishData(J,{reliable:!0})}catch(U){console.warn("[LiveLayer] request_routes: publishData failed.",U)}},O=dt.current;if(O){try{const N=O(),U=J=>{if(!Array.isArray(J)){H([]);return}H(J.map(rn).slice(0,200))};N instanceof Promise?N.then(U).catch(J=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",J),H(Ke())}):U(N)}catch(N){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",N),H(Ke())}return}try{H(Ke())}catch(N){console.warn("[LiveLayer] request_routes: extractRoutes threw.",N)}return}pr.has(f.type)||xe==null||xe(f)}},[xe,be]),B=Ot({agentId:q?"__controlled__":Ee,baseUrl:o,apiKey:i,sessionEndpoint:s,sessionBody:l,onDataMessage:q?void 0:Me});r.useEffect(()=>{if(q!=null&&q.subscribeToDataMessages)return q.subscribeToDataMessages(Me)},[q,Me]),ee.current=()=>{var m;return(m=B.getRoom)==null?void 0:m.call(B)},r.useEffect(()=>{var F;if(typeof window>"u")return;const m=((F=window.location)==null?void 0:F.hostname)||"";if(m==="localhost"||m==="127.0.0.1"||m==="0.0.0.0"||m.endsWith(".local")||m.endsWith(".test"))return window.__livelayerSimulateCommand=ke=>{try{Me(ke)}catch(Ve){console.warn("[LiveLayer] simulate-command threw:",Ve)}},()=>{delete window.__livelayerSimulateCommand}},[Me]);const w=r.useMemo(()=>q?{connectionState:q.connectionState,agentState:q.agentState,transcript:q.transcript,videoElement:q.videoElement,audioElement:q.audioElement,canResume:q.canResume,error:q.error,agentConfig:null,connect:async()=>{await q.onConnect()},disconnect:()=>q.onDisconnect(),getRoom:B.getRoom,isControlled:!0}:{connectionState:B.connectionState,agentState:B.agentState,transcript:B.transcript,videoElement:B.videoElement,audioElement:B.audioElement,canResume:B.canResume,error:B.error,agentConfig:B.agentConfig,connect:B.connect,disconnect:B.disconnect,getRoom:B.getRoom,isControlled:!1},[q,B]),ft=r.useRef(null);r.useEffect(()=>{const m=w.videoElement,f=ft.current;if(!(!m||!f))return f.appendChild(m),()=>{m.parentNode===f&&f.removeChild(m)}},[w.videoElement]),r.useEffect(()=>{const m=w.audioElement;if(!m)return;ie.attach(m);const f=m.play();return f&&typeof f.catch=="function"&&f.catch(F=>{(F==null?void 0:F.name)==="NotAllowedError"&&Ne(!0)}),()=>{ie.detach()}},[w.audioElement]),r.useEffect(()=>{if(w.isControlled||w.connectionState!=="connected")return;const m=w.getRoom();if(m)return K.setupMic(m).catch(()=>{}),Z.attachRoom(m),ue.attachRoom(m),Re.refresh(),()=>{K.teardownMic(),Z.teardown(),ue.teardown()}},[w.isControlled,w.connectionState]),r.useEffect(()=>{const m=w.audioElement;m&&(m.muted=Ze)},[w.audioElement,Ze]);const un=r.useCallback(m=>{const f=w.getRoom();if(f)try{const F=new TextEncoder().encode(JSON.stringify({type:"user_message",text:m}));f.localParticipant.publishData(F,{reliable:!0})}catch{}},[w]),dn=r.useCallback(()=>{cn(m=>!m)},[]);r.useEffect(()=>{ye==null||ye(w.connectionState),w.connectionState==="connected"?pe==null||pe():w.connectionState==="disconnected"&&(he==null||he())},[w.connectionState,pe,he,ye]),r.useEffect(()=>{me==null||me(w.transcript)},[w.transcript,me]),r.useEffect(()=>{ge==null||ge(w.agentState)},[w.agentState,ge]);const pt=r.useRef(!1);r.useEffect(()=>{w.isControlled||!u||pt.current||re&&w.connectionState==="idle"&&(pt.current=!0,w.connect())},[u,w.connectionState,w,re]);const fn=r.useCallback(m=>{const f=S==null?void 0:S.find(F=>F.id===m);f&&(Ae(!1),m!==ce&&(b(!0),w.disconnect(),te||we(m),x==null||x(f)))},[S,ce,w,te,x]);r.useEffect(()=>{_e&&w.connectionState==="connected"&&b(!1)},[w.connectionState,_e]),r.useEffect(()=>{if(!Y)return;const m=f=>{f.key==="Escape"&&Ae(!1)};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[Y]);const pn=!!E||!!(V!=null&&V.avatarImageUrl)||w.isControlled,Ie=Vt(Ee,o,pn);fe===void 0&&((mt=Ie.info)!=null&&mt.capabilities)&&(it.current=Ie.info.capabilities);const Ue=(V==null?void 0:V.name)??T??((gt=w.agentConfig)==null?void 0:gt.name)??((yt=Ie.info)==null?void 0:yt.name)??"Live Layer",ot=(V==null?void 0:V.avatarImageUrl)??E??((bt=w.agentConfig)==null?void 0:bt.avatarImageUrl)??((xt=Ie.info)==null?void 0:xt.avatarImageUrl)??null,hn=v??((vt=w.agentConfig)==null?void 0:vt.idleLoopUrl)??((wt=Ie.info)==null?void 0:wt.idleLoopUrl)??null,mn=I??null,gn=r.useCallback(()=>G("expanded"),[G]),yn=r.useCallback(()=>G("minimized"),[G]),ht=r.useCallback(()=>{w.disconnect(),G("hidden")},[w,G]),bn=r.useCallback(()=>{const m=w.audioElement;m&&m.play().then(()=>Ne(!1)).catch(()=>{})},[w.audioElement]),xn=r.useCallback(()=>{Ne(!1),w.connect()},[w]),Te={...Be,zIndex:We};h.primaryColor&&(Te["--ll-color-primary"]=h.primaryColor),h.accentColor&&(Te["--ll-color-accent"]=h.accentColor),h.backgroundColor&&(Te["--ll-color-bg"]=h.backgroundColor),h.textColor&&(Te["--ll-color-fg"]=h.textColor);const vn=["ll-widget",`ll-widget--${Q}`,`ll-widget--${ne?"mobile":"desktop"}`,qe].filter(Boolean).join(" ");return re?t.jsxs("div",{className:vn,style:Te,"data-display-mode":Q,"data-position":g,children:[Q==="hidden"&&t.jsx(On,{position:g,isMobile:ne,isSpeaking:w.agentState==="speaking",onExpand:()=>G("expanded"),label:`Open ${Ue} widget`,avatarImageUrl:ot,agentName:Ue}),Q==="minimized"&&t.jsx(Bn,{position:g,isMobile:ne,agentName:Ue,avatarImageUrl:ot,agentState:w.agentState,isMuted:K.isMuted,audioLevel:ie,onExpand:gn,onToggleMute:K.toggleMute,onClose:ht}),Q==="expanded"&&t.jsx(Fn,{position:g,isMobile:ne,agentName:Ue,avatarImageUrl:ot,idleLoopUrl:hn,greeting:mn,branding:h,teamMembers:S,currentTeamMemberId:ce,isSwitchingTeamMember:_e,teamSwitcherOpen:Y,onToggleTeamSwitcher:()=>Ae(m=>!m),onSelectTeamMember:fn,connectionState:w.connectionState,agentState:w.agentState,transcript:w.transcript,isMuted:K.isMuted,micDevices:Re.mics,isCameraEnabled:Z.isEnabled,cameraPreviewEl:Z.previewEl,cameraDevices:Re.cameras,activeCameraId:Z.activeDeviceId,isScreenShareEnabled:ue.isEnabled,screenPreviewEl:ue.previewEl,isSpeakerMuted:Ze,allowCamera:C,allowScreenShare:$,allowTyping:A,languageMenuOpen:ln,onToggleLanguageMenu:()=>an(m=>!m),needsUserGesture:Fe,canResume:w.canResume,micError:K.micError,error:w.error,avatarVideoContainerRef:ft,onConnect:()=>void w.connect(),onDisconnect:()=>w.disconnect(),onRetry:xn,onResumeAudio:bn,onToggleMute:K.toggleMute,onToggleCamera:()=>void Z.toggle(),onSwitchCameraDevice:m=>void Z.switchDevice(m),onToggleScreenShare:()=>void ue.toggle(),onToggleSpeaker:dn,onSendMessage:un,onMinimize:yn,onClose:ht,onClearMicError:K.clearError})]}):null}function mr(e){return t.jsx(Ht,{children:t.jsx(hr,{...e})})}const gr=({agentId:e,baseUrl:n,apiKey:i,mode:o,onAgentEvent:s,className:l,style:u})=>{const d=r.useRef(null),p=r.useRef(null),y=r.useRef(s);y.current=s;const g=r.useCallback(a=>{var j;const c=a.detail;(j=y.current)==null||j.call(y,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",g),a.appendChild(c),p.current=c,()=>{c.removeEventListener("agent-event",g),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})},yr=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})}),xr=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:y,labelClassName:g,as:a,...c}=n;d=t.jsx("textarea",{ref:i,...u,...c})}else if("as"in n&&n.as==="select"){const{name:p,label:y,labelClassName:g,as:a,children:c,...j}=n;d=t.jsx("select",{ref:i,...u,...j,children:c})}else{const{name:p,label:y,labelClassName:g,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 zt=1;function vr({onMount:e,defaultOpen:n=!1,storageKey:i="ll-debug-open"}){const[o,s]=r.useState(n),[l,u]=r.useState([]),[d,p]=r.useState(""),[y,g]=r.useState(!1),a=r.useRef(new Set),c=r.useRef([]),j=r.useRef(y);j.current=y,r.useEffect(()=>{try{const x=localStorage.getItem(i);x==="1"&&s(!0),x==="0"&&s(!1)}catch{}},[i]),r.useEffect(()=>{try{localStorage.setItem(i,o?"1":"0")}catch{}},[o,i]),r.useEffect(()=>{const x=v=>{(v.metaKey||v.ctrlKey)&&v.shiftKey&&v.key.toLowerCase()==="l"&&(v.preventDefault(),s(I=>!I))};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[]),r.useEffect(()=>{const x=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(x)},[]);const S=r.useRef(!1);if(r.useEffect(()=>{!e||S.current||(S.current=!0,e(x=>{c.current.push({id:zt++,ts:Date.now(),kind:"event",type:x.eventName,data:x.data})}))},[e]),r.useEffect(()=>{const x=console.warn,v=console.log,I=(E,T)=>function(...h){try{const C=typeof h[0]=="string"?h[0]:"";C.startsWith("[LiveLayer]")&&c.current.push({id:zt++,ts:Date.now(),kind:E,type:C.slice(0,120),data:{args:h.slice(1).map($=>_r($))}})}catch{}return T.apply(this,h)};return console.warn=I("warn",x),console.log=I("log",v),()=>{console.warn=x,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(x=>{if(!d)return!0;const v=d.toLowerCase();return x.type.toLowerCase().includes(v)||JSON.stringify(x.data||{}).toLowerCase().includes(v)});return t.jsxs("div",{style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,width:380,maxHeight:"60vh",background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.16)",borderRadius:12,boxShadow:"0 16px 48px rgba(0,0,0,0.5)",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",display:"flex",flexDirection:"column",overflow:"hidden"},children:[t.jsxs("div",{style:{padding:"8px 10px",background:"rgba(255,255,255,0.04)",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{style:{fontWeight:600,fontSize:12},children:"LiveLayer debug"}),t.jsxs("span",{style:{fontSize:10,color:"rgba(255,255,255,0.4)"},children:[l.length," event",l.length===1?"":"s"]}),t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:()=>g(x=>!x),style:st(y?"#f59e0b":"transparent"),title:"Pause / resume capture",children:y?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{u([]),c.current=[]},style:st("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:st("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: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"),r=require("react"),kn=require("@livelayer/sdk"),Ke=require("livekit-client");class Ht 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,o){var i,s;(s=(i=this.props).onError)==null||s.call(i,n,o)}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 Ot(e){const[n,o]=r.useState("idle"),[i,s]=r.useState("idle"),[l,u]=r.useState([]),[d,p]=r.useState(null),[y,g]=r.useState(null),[a,c]=r.useState(null),[j,S]=r.useState(!1),[k,x]=r.useState(null),v=r.useRef(null),I=r.useRef(e.onDataMessage);I.current=e.onDataMessage,r.useEffect(()=>{const C={onConnectionStateChange:A=>{o(A),A==="connected"&&x(null)},onAgentStateChange:s,onTranscript:A=>u([...A]),onAgentConfig:p,onAudioTrack:A=>c(A),onVideoTrack:A=>g(A),onVideoTrackRemoved:()=>g(null),onError:A=>x(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=$,o("idle"),s("idle"),u([]),p(null),g(null),c(null),S(!1),x(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 x($ instanceof Error?$.message:String($)),$}},[]),T=r.useCallback(()=>{const C=v.current;C&&C.disconnect()},[]),h=r.useCallback(()=>{var C;return((C=v.current)==null?void 0:C.getRoom())??null},[]);return{connectionState:n,agentState:i,transcript:l,agentConfig:d,videoElement:y,audioElement:a,canResume:j,error:k,connect:E,disconnect:T,getRoom:h,session:v.current}}function qt(){const e=r.useRef(null),n=r.useRef(null),o=r.useRef(null),i=r.useRef(null),s=r.useRef(new Set),l=r.useRef(null),u=r.useCallback(()=>{const a=n.current;if(!a){i.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(x){console.error("[useAudioLevel] subscriber threw:",x)}i.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(o.current){try{o.current.disconnect()}catch{}o.current=null}try{const c=e.current.createMediaElementSource(a);c.connect(n.current),o.current=c}catch(c){console.warn("[useAudioLevel] createMediaElementSource failed:",c);return}i.current===null&&(i.current=requestAnimationFrame(u))}},[d,u]),y=r.useCallback(()=>{if(i.current!==null&&(cancelAnimationFrame(i.current),i.current=null),o.current){try{o.current.disconnect()}catch{}o.current=null}},[]),g=r.useCallback(a=>(s.current.add(a),()=>{s.current.delete(a)}),[]);return r.useEffect(()=>()=>{if(y(),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},[y]),{attach:p,detach:y,subscribe:g}}function Bt(){const[e,n]=r.useState(!1),[o,i]=r.useState(null),s=r.useRef(null),l=r.useRef(null),u=r.useCallback(async g=>{if(s.current&&l.current){try{await l.current.localParticipant.unpublishTrack(s.current)}catch{}s.current.stop(),s.current=null}l.current=g,i(null);try{const a=await Ke.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});await g.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 i(c),a}},[]),d=r.useCallback(()=>{const g=s.current;g&&(g.isMuted?(g.unmute(),n(!1)):(g.mute(),n(!0)))},[]),p=r.useCallback(()=>{const g=s.current,a=l.current;if(g&&a){try{a.localParticipant.unpublishTrack(g)}catch{}g.stop()}s.current=null,l.current=null,n(!1)},[]),y=r.useCallback(()=>i(null),[]);return{isMuted:e,micError:o,toggleMute:d,setupMic:u,teardownMic:p,clearError:y}}const Sn={resolution:{width:640,height:480,frameRate:24}};function Wt(){const[e,n]=r.useState(!1),[o,i]=r.useState(null),[s,l]=r.useState(null),[u,d]=r.useState(""),p=r.useRef(null),y=r.useRef(null),g=r.useCallback(v=>{p.current=v},[]),a=r.useCallback(()=>{const v=p.current,I=y.current;if(I&&v){const E=v.localParticipant.getTrackPublication(Ke.Track.Source.Camera);if(E!=null&&E.track){try{v.localParticipant.unpublishTrack(E.track)}catch{}E.track.stop()}else I.stop()}y.current=null,l(null),n(!1)},[]),c=r.useCallback(async v=>{const I=p.current;if(I){i(null);try{const E={...Sn};v&&(E.deviceId=v);const T=await Ke.createLocalVideoTrack(E);await I.localParticipant.publishTrack(T),y.current=T;const h=T.attach();l(h),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.";i(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,i(null),d("")},[a]),x=r.useCallback(()=>i(null),[]);return r.useEffect(()=>()=>{y.current&&y.current.stop()},[]),{isEnabled:e,error:o,previewEl:s,activeDeviceId:u,toggle:j,switchDevice:S,attachRoom:g,teardown:k,clearError:x}}function Ft(){const[e,n]=r.useState(!1),[o,i]=r.useState(null),[s,l]=r.useState(null),u=r.useRef(null),d=r.useCallback(c=>{u.current=c},[]),p=r.useCallback(()=>l(null),[]),y=r.useCallback(async()=>{const c=u.current;if(c){if(e){try{await c.localParticipant.setScreenShareEnabled(!1)}catch{}p(),n(!1);return}i(null);try{await c.localParticipant.setScreenShareEnabled(!0);let j=0;const S=()=>{const k=c.localParticipant.getTrackPublication(Ke.Track.Source.ScreenShare);if(k!=null&&k.track){const x=k.track.attach();l(x),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"&&i("Screen share unavailable. Try again."),n(!1)}}},[e,p]),g=r.useCallback(()=>{const c=u.current;if(c&&e)try{c.localParticipant.setScreenShareEnabled(!1)}catch{}p(),n(!1),i(null),u.current=null},[e,p]),a=r.useCallback(()=>i(null),[]);return{isEnabled:e,error:o,previewEl:s,toggle:y,attachRoom:d,teardown:g,clearError:a}}function Ut(){const[e,n]=r.useState([]),[o,i]=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")),i(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:o,refresh:s}}function Vt(e,n,o=!1){const[i,s]=r.useState(null),[l,u]=r.useState(null),[d,p]=r.useState(!o&&!!e);return r.useEffect(()=>{if(o||!e){p(!1);return}const y=new AbortController,g=n||"https://app.livelayer.studio";return p(!0),u(null),fetch(`${g}/api/widget/agent/${encodeURIComponent(e)}`,{signal:y.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=>{y.signal.aborted||(s(a),p(!1))}).catch(a=>{y.signal.aborted||(u(a instanceof Error?a.message:"Agent lookup failed"),p(!1))}),()=>y.abort()},[e,n,o]),{info:i,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 Yt({value:e,defaultValue:n="expanded",onChange:o}={}){const i=e!==void 0,[s,l]=r.useState(n),u=i?e:s,d=r.useCallback(p=>{p!==u&&(i||l(p),o==null||o(p))},[u,i,o]);return[u,d]}const jn=["hidden","minimized","expanded"];function En(e){return e&&jn.includes(e)?e:null}function Gt({value:e,defaultValue:n="expanded",onChange:o,persistKey:i="ll-widget",disablePersistence:s=!1}={}){const l=`${i}:display-mode`,u=r.useRef(!1),[d,p]=Yt({value:e,defaultValue:n,onChange:y=>{e===void 0&&!s&&Ln(l,y),o==null||o(y)}});return r.useEffect(()=>{if(u.current||(u.current=!0,s||e!==void 0))return;const y=En(Cn(l));y&&y!==d&&p(y)},[]),[d,p]}const Rn=640;function Jt(e=Rn){const[n,o]=r.useState(!1);return r.useEffect(()=>{if(e===!1){o(!1);return}if(typeof window>"u"||typeof window.matchMedia>"u")return;const i=`(max-width: ${e-1}px)`,s=window.matchMedia(i),l=()=>o(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 kt="__llHistoryPatched",Xe="ll:pathname";function Nn(){if(typeof window>"u"||window.history[kt])return;const e=window.history.pushState,n=window.history.replaceState;window.history.pushState=function(...o){const i=e.apply(this,o);return window.dispatchEvent(new Event(Xe)),i},window.history.replaceState=function(...o){const i=n.apply(this,o);return window.dispatchEvent(new Event(Xe)),i},window.history[kt]=!0}function St(){return typeof window>"u"?"/":window.location.pathname||"/"}function Kt(e){const[n,o]=r.useState(()=>e??St());return r.useEffect(()=>{if(e!==void 0)return;Nn();const i=()=>o(St());return i(),window.addEventListener("popstate",i),window.addEventListener(Xe,i),()=>{window.removeEventListener("popstate",i),window.removeEventListener(Xe,i)}},[e]),e??n}const Ct=new Map,An=/[\\^$+?.()|{}[\]]/g;function Mn(e){return e.replace(An,"\\$&")}function In(e){const n=Ct.get(e);if(n)return n;const o=e.length>1&&e.endsWith("/")?e.slice(0,-1):e,i="",s="",l=o.replace(/\*\*/g,i).replace(/\*/g,s),d=Mn(l).replace(new RegExp(`\\/${i}`,"g"),"(?:\\/.*)?").replace(new RegExp(i,"g"),".*").replace(new RegExp(s,"g"),"[^/]+"),p=new RegExp(`^${d}\\/?$`);return Ct.set(e,p),p}function Tn(e,n){const o=n.length>1&&n.endsWith("/")?n.slice(0,-1):n;return In(e).test(o)}function Xt(e,n){return typeof e=="function"?e(n):e instanceof RegExp?e.test(n):Tn(e,n)}function Lt(e,n){if(!e||e.length===0)return!1;for(const o of e)if(Xt(o,n))return!0;return!1}function Qt(e,n,o){return e===void 0?!0:Lt(o,e)?!1:n&&n.length>0?Lt(n,e):!0}function Zt(e,n,o){return r.useMemo(()=>Qt(e,n,o),[e,n,o])}const jt=({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"})}),Et=({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},Rt=({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 en="ll-hidden-tab-center-y",zn=5,Nt=16;function Hn(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(en);if(!e)return null;const n=Number.parseFloat(e);return Number.isFinite(n)?n:null}catch{return null}}function At(e){if(!(typeof window>"u"))try{window.localStorage.setItem(en,String(e))}catch{}}const On=({position:e,isMobile:n,isSpeaking:o,onExpand:i,label:s="Open widget",avatarImageUrl:l,agentName:u})=>{const d=$n(e),p=d==="right"?"left":"right",y=n?80:72,g=!!l,[a,c]=r.useState(null),[j,S]=r.useState(!1),k=r.useRef(null),x=r.useRef(!1),v=r.useCallback(L=>{if(typeof window>"u")return L;const P=y/2,z=Nt+P,W=window.innerHeight-Nt-P;return W<z?Math.max(z,L):Math.max(z,Math.min(W,L))},[y]);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),x.current=!0,c(z=>(z!==null&&At(z),z)))}},[]),h=r.useCallback(()=>{if(x.current){x.current=!1;return}i()},[i]),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 W=v(z+P);return At(W),W})}},[v]),$=["ll-hidden",`ll-hidden--${d}`,n?"ll-hidden--mobile":"ll-hidden--desktop",o?"ll-hidden--speaking":null,j?"is-dragging":null,g?"ll-hidden--with-avatar":null].filter(Boolean).join(" "),A=a===null?void 0:{top:`${a-y/2}px`,transform:"none"};return t.jsx("button",{type:"button",className:$,onPointerDown:I,onPointerMove:E,onPointerUp:T,onPointerCancel:T,onClick:h,onKeyDown:C,"aria-label":s,"data-position":e,style:A,children:g?t.jsxs(t.Fragment,{children:[t.jsx(Rt,{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(Rt,{direction:p,className:"ll-hidden__chevron"})})},qn=({audioLevel:e,bars:n=20,maxHeight:o=20,minHeight:i=4,className:s,barClassName:l})=>{const u=r.useRef(null),d=r.useRef([]),p=r.useMemo(()=>{const g=(Math.sqrt(5)-1)/2;return Array.from({length:n},(a,c)=>.5+c*g%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(i,a*o*p[c]);j.style.height=`${S}px`}}),[e,n,o,i,p]);const y=["ll-waveform",s].filter(Boolean).join(" ");return t.jsx("div",{ref:u,className:y,"aria-hidden":"true",children:Array.from({length:n},(g,a)=>t.jsx("div",{ref:c=>{d.current[a]=c},className:["ll-waveform__bar",l].filter(Boolean).join(" "),style:{height:`${i}px`}},a))})},Bn=({position:e,isMobile:n,agentName:o,avatarImageUrl:i,agentState:s,isMuted:l,audioLevel:u,onExpand:d,onToggleMute:p,onClose:y})=>n?t.jsx("div",{className:"ll-minimized ll-minimized--mobile",role:"region","aria-label":`${o} widget`,children:t.jsxs("button",{type:"button",className:"ll-minimized__surface",onClick:d,"aria-label":`Expand ${o} widget`,children:[i?t.jsx("img",{src:i,alt:o,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsx(qn,{audioLevel:u,bars:16,maxHeight:18,className:"ll-minimized__waveform"}),t.jsx("span",{className:"ll-minimized__name",children:o}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("span",{className:"ll-minimized__btn",role:"button",tabIndex:0,onClick:g=>{g.stopPropagation(),p()},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.stopPropagation(),g.preventDefault(),p())},"aria-label":l?"Unmute microphone":"Mute microphone",children:t.jsx(jt,{muted:l,className:"ll-minimized__icon"})}),t.jsx(Et,{className:"ll-minimized__icon ll-minimized__icon--expand"})]})]})}):t.jsx("div",{className:"ll-minimized ll-minimized--desktop","data-position":e,role:"region","aria-label":`${o} widget`,children:t.jsxs("div",{className:"ll-minimized__surface",children:[i?t.jsx("img",{src:i,alt:o,className:"ll-minimized__avatar"}):t.jsx("div",{className:"ll-minimized__avatar ll-minimized__avatar--placeholder"}),t.jsxs("div",{className:"ll-minimized__meta",children:[t.jsx("span",{className:"ll-minimized__name",children:o}),t.jsx("span",{className:"ll-minimized__state",children:s==="speaking"?"Speaking":s==="thinking"?"Thinking":"Listening"})]}),t.jsxs("div",{className:"ll-minimized__controls",children:[t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:p,"aria-label":l?"Unmute microphone":"Mute microphone",children:t.jsx(jt,{muted:l,className:"ll-minimized__icon"})}),t.jsx("button",{type:"button",className:"ll-minimized__btn",onClick:d,"aria-label":`Expand ${o} widget`,children:t.jsx(Et,{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(Pn,{className:"ll-minimized__icon"})})]})]})}),Wn=({src:e,alt:n,preCannedPlaying:o=!1,className:i,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:o?"scale(1.02)":"scale(1)",opacity:l?1:0,...s};return t.jsx("img",{src:e,alt:n,className:i,style:p,loading:"eager",fetchPriority:"high",onLoad:()=>u(!0)})},Fn=({position:e,isMobile:n,agentName:o,avatarImageUrl:i,idleLoopUrl:s,greeting:l,branding:u,teamMembers:d,currentTeamMemberId:p,isSwitchingTeamMember:y,teamSwitcherOpen:g,onToggleTeamSwitcher:a,onSelectTeamMember:c,languageMenuOpen:j,onToggleLanguageMenu:S,connectionState:k,agentState:x,transcript:v,canResume:I,needsUserGesture:E,error:T,isMuted:h,micError:C,micDevices:$,isCameraEnabled:A,cameraPreviewEl:L,cameraDevices:P,activeCameraId:z,isScreenShareEnabled:W,screenPreviewEl:X,isSpeakerMuted:le,allowCamera:$e,allowScreenShare:ze,allowTyping:He,avatarVideoContainerRef:Oe,onConnect:fe,onDisconnect:pe,onRetry:he,onResumeAudio:me,onToggleMute:ge,onToggleCamera:ye,onSwitchCameraDevice:be,onToggleScreenShare:xe,onToggleSpeaker:B,onSendMessage:qe,onMinimize:Be,onClose:We,onClearMicError:ae})=>{var _e;const re=v.length>0?v[v.length-1]:null,te=((d==null?void 0:d.length)??0)>1,ve=k==="connecting"||k==="connected",we=k==="connected",ce=k==="idle"||k==="disconnected"||k==="error",V=r.useRef(null),Ee=r.useRef(null);r.useEffect(()=>{const b=V.current;b&&(b.innerHTML="",L&&(L.style.width="100%",L.style.height="100%",L.style.objectFit="cover",L.style.transform="scaleX(-1)",b.appendChild(L)))},[L]),r.useEffect(()=>{const b=Ee.current;b&&(b.innerHTML="",X&&(X.style.width="100%",X.style.height="100%",X.style.objectFit="contain",b.appendChild(X)))},[X]);const[Q,K]=r.useState(!1),[ne,oe]=r.useState(!1);r.useEffect(()=>{if(!Q&&!ne&&!j&&!g)return;const b=()=>{K(!1),oe(!1),j&&S(),g&&a()};return document.addEventListener("click",b),()=>document.removeEventListener("click",b)},[Q,ne,j,g,S,a]);const[J,Z]=r.useState(""),ue=r.useCallback(b=>{b.preventDefault();const Y=J.trim();Y&&(qe(Y),Z(""))},[J,qe]),Re=u.productName||"Live Layer",Fe=we&&(re!=null&&re.text)?re.text:l||"",Ne=["ll-expanded",n?"ll-expanded--mobile":"ll-expanded--desktop"].join(" ");return t.jsxs("div",{className:Ne,"data-position":e,"data-state":we?"connected":ve?"connecting":"idle",role:"dialog","aria-label":`${o} widget`,children:[t.jsxs("div",{className:"ll-expanded__bg",children:[i?t.jsx(Wn,{src:i,alt:o,className:"ll-expanded__bg-img"}):t.jsx("div",{className:"ll-expanded__bg-fallback",children:t.jsx("span",{className:"ll-expanded__bg-initial",children:((_e=o==null?void 0:o.charAt(0))==null?void 0:_e.toUpperCase())||"A"})}),s&&!we&&t.jsx("video",{className:"ll-expanded__bg-idle",src:s,autoPlay:!0,loop:!0,muted:!0,playsInline:!0})]}),t.jsx("div",{ref:Oe,className:"ll-expanded__video"}),k==="connecting"&&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&&we&&t.jsxs("button",{type:"button",className:"ll-expanded__overlay ll-expanded__overlay--gesture",onClick:me,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"})]}),ve?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:b=>{te&&(b.stopPropagation(),a())},"aria-haspopup":te?"listbox":void 0,"aria-expanded":te?g:void 0,children:[t.jsx("span",{className:"ll-hpill__label",children:o}),te&&t.jsx(Ye,{})]}),te&&g&&t.jsx("div",{className:"ll-hmenu",onClick:b=>b.stopPropagation(),role:"listbox",children:d==null?void 0:d.map(b=>t.jsxs("button",{type:"button",className:`ll-hmenu__item ${b.id===p?"is-active":""}`,onClick:()=>c(b.id),role:"option","aria-selected":b.id===p,children:[b.avatarImageUrl&&t.jsx("img",{src:b.avatarImageUrl,alt:"",className:"ll-hmenu__avatar"}),t.jsx("span",{className:"ll-hmenu__name",children:b.name}),b.role&&t.jsx("span",{className:"ll-hmenu__role",children:b.role})]},b.id))})]}),t.jsxs("div",{className:"ll-expanded__pill-wrap",children:[t.jsxs("button",{type:"button",className:"ll-hpill ll-hpill--compact",onClick:b=>{b.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(Ye,{})]}),j&&t.jsx("div",{className:"ll-hmenu",onClick:b=>b.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:Be,"aria-label":"Minimize widget",title:"Minimize",children:t.jsx(It,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:We,"aria-label":"End call",title:"End call",children:t.jsx(Mt,{})})]})]}):t.jsxs("div",{className:"ll-expanded__header ll-expanded__header--idle",children:[t.jsx("span",{className:"ll-expanded__brand",children:Re}),t.jsxs("div",{className:"ll-expanded__header-actions",children:[t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--ghost",onClick:Be,"aria-label":"Minimize widget",children:t.jsx(It,{})}),t.jsx("button",{type:"button",className:"ll-hbtn ll-hbtn--danger",onClick:We,"aria-label":"Close widget",children:t.jsx(Mt,{})})]})]}),ce&&(()=>{const b=I?"Restart paused session":k==="disconnected"?"Reconnect to agent":"Start video call",Y=I?"Pick up where you left off":null,Ae=k==="idle"&&!I&&!T;return t.jsxs(t.Fragment,{children:[Ae&&t.jsxs("button",{type:"button",className:"ll-expanded__play",onClick:fe,"aria-label":b,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:b})]}),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})}),Y&&t.jsx("p",{className:"ll-expanded__cta-sublabel",children:Y}),t.jsx("button",{type:"button",className:"ll-expanded__cta",onClick:fe,"aria-label":b,children:b})]})]})})(),t.jsxs("div",{className:`ll-expanded__pip ${ve&&(A||W)?"is-visible":""}`,children:[t.jsx("div",{ref:Ee,className:W?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"}),t.jsx("div",{ref:V,className:!W&&A?"ll-expanded__pip-host":"ll-expanded__pip-host is-hidden"})]}),ve?t.jsxs("div",{className:"ll-expanded__bottom",children:[Fe&&t.jsx("div",{className:"ll-expanded__transcript",children:t.jsx("p",{className:"ll-expanded__transcript-text",children:Fe})}),t.jsxs("div",{className:"ll-toolbar",onClick:b=>b.stopPropagation(),children:[ze&&t.jsx("button",{type:"button",className:`ll-tool ${W?"is-on":""}`,onClick:xe,"aria-label":W?"Stop sharing screen":"Share screen",title:W?"Stop sharing":"Share screen",children:t.jsx(Un,{})}),$e&&t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${A?"is-on":""}`,onClick:ye,"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:b=>{b.stopPropagation(),oe(Y=>!Y),K(!1)},"aria-label":"Camera devices","aria-haspopup":"listbox","aria-expanded":ne,children:t.jsx(Ye,{})}),ne&&P.length>0&&t.jsx(Tt,{label:"Camera",devices:P,activeId:z,onPick:b=>{oe(!1),be(b)}})]}),t.jsxs("div",{className:"ll-tool-split",children:[t.jsx("button",{type:"button",className:`ll-tool ll-tool--left ${h?"is-muted":""}`,onClick:ge,"aria-label":h?"Unmute microphone":"Mute microphone",title:h?"Unmute":"Mute",children:t.jsx(Yn,{muted:h})}),t.jsx("button",{type:"button",className:`ll-tool ll-tool--right ${h?"is-muted":""}`,onClick:b=>{b.stopPropagation(),K(Y=>!Y),oe(!1)},"aria-label":"Microphone devices","aria-haspopup":"listbox","aria-expanded":Q,children:t.jsx(Ye,{})}),Q&&$.length>0&&t.jsx(Tt,{label:"Microphone",devices:$,activeId:"",onPick:()=>K(!1)})]}),t.jsx("button",{type:"button",className:`ll-tool ${le?"is-muted":""}`,onClick:B,"aria-label":le?"Unmute speaker":"Mute speaker",title:le?"Unmute speaker":"Mute speaker",children:t.jsx(Gn,{muted:le})}),t.jsx("button",{type:"button",className:"ll-tool ll-tool--danger",onClick:pe,"aria-label":"End conversation",title:"End conversation",children:t.jsx(Kn,{})})]}),He&&t.jsxs("form",{className:"ll-message-input",onSubmit:ue,children:[t.jsx("input",{type:"text",className:"ll-message-input__field",placeholder:"Message...",value:J,onChange:b=>Z(b.target.value),"aria-label":"Message the agent"}),J.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:ae,"aria-label":"Dismiss",children:"×"})]});if(!T||k!=="error")return null;let b="Failed to connect",Y="Try again";return T==="MIC_PERMISSION_DENIED"?b="Microphone blocked. Allow access to talk.":T==="MIC_NOT_FOUND"?b="No microphone found. Plug one in + retry.":T==="MIC_UNAVAILABLE"?b="Mic unavailable. Check other apps using it.":T==="AGENT_TIMEOUT"?b="Agent didn't pick up. Try again.":T==="CONNECT_FAILED"?b="Connection failed. Check your network.":T.length<80&&(b=T),t.jsxs("div",{className:"ll-expanded__banner ll-expanded__banner--error",role:"alert",children:[t.jsx("span",{children:b}),t.jsx("button",{type:"button",className:"ll-expanded__banner-retry",onClick:he,children:Y})]})})()]})};function Ye(){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 Mt(){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 It(){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:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",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 Tt=({label:e,devices:n,activeId:o,onPick:i})=>t.jsxs("div",{className:"ll-device-menu",onClick:s=>s.stopPropagation(),role:"listbox",children:[t.jsx("p",{className:"ll-device-menu__label",children:e}),n.map((s,l)=>{const u=o===s.deviceId;return t.jsxs("button",{type:"button",className:`ll-device-menu__item ${u?"is-active":""}`,onClick:()=>i(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 at(e){let n=e;for(;n;){for(const o of Xn)if(n.matches(o))return!0;n=n.parentElement}return!1}function Qe(e){if(at(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 Ge=4096,Qn=20,Zn=20,er=10,tr=10,nr=30,Pt=500,rr=['[data-ll-private="true"]',".ll-widget","script","style","noscript","iframe"];function Pe(e){if(e.getAttribute("aria-hidden")==="true"||e.hasAttribute("hidden"))return!0;let n=e;for(;n;){for(const o of rr)if(n.matches(o))return!0;n=n.parentElement}return!1}function De(e){if(typeof window>"u")return!0;const n=e.getBoundingClientRect();if(n.width<=0||n.height<=0)return!1;const o=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return n.bottom>0&&n.right>0&&n.top<o&&n.left<i}function Dt(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 o=e.getAttribute("aria-label");if(o)return o.trim();const i=e.getAttribute("placeholder");if(i)return i.trim();const s=e.closest("label");return s!=null&&s.textContent?s.textContent.trim():""}function de(e,n){return e.length<=n?e:e.slice(0,n-1)+"…"}function Ce(e){return e.length}function tn(e,n={}){const o=n.doc??(typeof document<"u"?document:null);if(!o)return{url:"",title:"",pathname:"/",regions:[],visibleText:"",visibleLinks:[],visibleFields:[],forms:[],extras:e};const i=typeof window<"u"&&window.location.href||"",s=typeof window<"u"&&window.location.pathname||"/",l=o.title||"",u=Array.from(o.querySelectorAll("[data-ll-region]")),d=[];for(const h of u){if(d.length>=er)break;if(Pe(h)||!De(h))continue;const C=h.getAttribute("data-ll-region")??"",$=h.getAttribute("data-ll-intent")??void 0,A=de((h.innerText||h.textContent||"").trim(),Pt*2);!C||!A||d.push({id:C,intent:$,text:A})}const p=[],y=["H1","H2","H3","H4","H5","H6"],g=Array.from(o.querySelectorAll("h1, h2, h3, h4, h5, h6"));for(const h of g){if(Pe(h)||!De(h))continue;const C=(h.textContent||"").trim();C&&p.push(`${h.tagName}: ${de(C,200)}`)}const a=Array.from(o.querySelectorAll("p, li"));for(const h of a){if(Pe(h)||!De(h)||y.includes(h.tagName))continue;const C=(h.textContent||"").trim();C.length>10&&p.push(de(C,Pt))}const c=p.join(`
2
+ `),j=[],S=Array.from(o.querySelectorAll("a[href]"));for(const h of S){if(j.length>=Qn)break;if(Pe(h)||!De(h))continue;const C=h.getAttribute("href")||"",$=(h.textContent||"").trim();!C||!$||j.push({href:C,text:de($,100)})}const k=[],x=Array.from(o.querySelectorAll("input, textarea, select"));for(const h of x){if(k.length>=Zn)break;if(Pe(h)||!Qe(h)||!De(h))continue;const C=Dt(h),$=h instanceof HTMLInputElement?h.type:h.tagName.toLowerCase();C&&k.push({label:de(C,100),type:$})}const v=Array.from(o.querySelectorAll("[data-ll-form]")),I=[];for(const h of v){if(I.length>=tr)break;if(at(h))continue;const C=h.getAttribute("data-ll-form")||"";if(!C)continue;const $=h.getAttribute("data-ll-intent")||void 0,A=Array.from(h.querySelectorAll("[data-ll-field]")),L=[];for(const P of A){if(L.length>=nr)break;if(!Qe(P))continue;const z=P.getAttribute("data-ll-field")||"";if(!z)continue;const W=Dt(P)||z,X=P instanceof HTMLInputElement?P.type:P.tagName.toLowerCase();L.push({name:z,label:de(W,100),type:X})}I.push({id:C,intent:$,fields:L})}const E={url:i,title:l,pathname:s,regions:d,visibleText:c,visibleLinks:j,visibleFields:k,forms:I,extras:e};let T=Ce(JSON.stringify(E.regions))+Ce(E.visibleText)+Ce(JSON.stringify(E.visibleLinks))+Ce(JSON.stringify(E.visibleFields));for(;T>Ge&&E.visibleFields.length>0;)E.visibleFields.pop(),T=Ce(JSON.stringify(E.visibleFields));for(;T>Ge&&E.visibleLinks.length>0;)E.visibleLinks.pop(),T-=80;return Ce(E.visibleText)>Ge&&(E.visibleText=de(E.visibleText,Ge-100)),E}let Le=null;function lt(e,n={}){const o=Date.now(),s=`${typeof window<"u"&&window.location.pathname||"/"}::${typeof window<"u"?window.scrollY:0}`;if(Le&&Le.key===s&&o-Le.at<1e3)return Le.ctx;const l=tn(e,n);return Le={key:s,at:o,ctx:l},l}function nn(){Le=null}const or=200;function rn(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 ir(e){return!(!e||e.startsWith("#")||e.startsWith("javascript:")||e.startsWith("mailto:")||e.startsWith("tel:"))}function on(e){const n=e??(typeof document<"u"?document:null);if(!n)return[];const o=typeof window<"u"&&window.location.origin||"",i=new Set,s=[],l=Array.from(n.querySelectorAll("a[href]"));for(const u of l){if(s.length>=or)break;if(at(u))continue;const d=u.getAttribute("href")||"";if(!ir(d))continue;let p=d,y=!0;try{if(typeof window<"u"){const a=new URL(d,o);y=a.origin===o,y&&d.startsWith("http")&&(p=a.pathname+a.search+a.hash)}}catch{continue}if(i.has(p))continue;i.add(p);const g=(u.textContent||"").trim().slice(0,120);s.push({href:p,text:g,internal:y})}return s}let je=null;const sr=5e3;function Je(){const e=Date.now(),n=typeof window<"u"&&window.location.pathname||"/";if(je&&je.pathname===n&&e-je.at<sr)return je.routes;const o=on();return je={at:e,pathname:n,routes:o},o}function sn(){je=null}function lr(e,n){const o=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLSelectElement.prototype,i=Object.getOwnPropertyDescriptor(o,"value"),s=i==null?void 0:i.set;s?s.call(e,n):e.value=n}function ar(e,n,o={}){const i=o.triggerInput??!0,s=o.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,i&&e.dispatchEvent(new Event("input",{bubbles:!0})),s&&e.dispatchEvent(new Event("change",{bubbles:!0}));return}lr(e,n),i&&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 o=window.getComputedStyle(e).overflowY;return!(o!=="auto"&&o!=="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,o=0;for(const i of e){if(!ur(i))continue;const s=i.getBoundingClientRect();if(s.bottom<=0||s.top>=window.innerHeight||s.right<=0||s.left>=window.innerWidth||s.width<=0||s.height<=0||i.closest(".ll-widget"))continue;const l=s.width*s.height;l>o&&(o=l,n=i)}return n}function fr(){if(typeof window>"u")return null;if(cr())return window;const e=dr();return e||window}function $t(e){return e instanceof Window?e.innerHeight||0:e.clientHeight||0}function pr(e){var n,o;return e instanceof Window?typeof document>"u"?0:Math.max(((n=document.body)==null?void 0:n.scrollHeight)??0,((o=document.documentElement)==null?void 0:o.scrollHeight)??0):e.scrollHeight-e.clientHeight}const hr=new Set(["agent_state","avatar_stream_ready","avatar_active","avatar_idle","bot_ready","agent_error","idle_warning","idle_timeout","navigate","scroll_to","request_page_context","scroll_page","click","fill_form","focus_field","submit_form","request_routes"]);function mr(e){var mt,gt,yt,bt,xt,vt,wt;const{agentId:n,apiKey:o,baseUrl:i="https://app.livelayer.studio",sessionEndpoint:s,sessionBody:l,autoConnect:u=!1,displayMode:d,defaultDisplayMode:p="expanded",onDisplayModeChange:y,position:g="bottom-right",mobileBreakpoint:a=640,persistKey:c="ll-widget",disablePersistence:j=!1,teamMembers:S,currentTeamMemberId:k,onTeamMemberChange:x,idleLoopUrl:v,greeting:I,avatarImageUrl:E,agentName:T,branding:h={},allowCamera:C=!0,allowScreenShare:$=!0,allowTyping:A=!0,showOn:L,hideOn:P,pathname:z,onNavigate:W,onScrollToSelector:X,getPageContext:le,pageContextExtras:$e,getRoutes:ze,onScrollPage:He,onClick:Oe,capabilities:fe,onConnect:pe,onDisconnect:he,onTranscript:me,onAgentState:ge,onConnectionStateChange:ye,onAgentEvent:be,onAgentCommand:xe,controlledSession:B,className:qe,style:Be,zIndex:We=2147483647}=e,ae=Kt(z),re=Zt(ae,L,P);r.useEffect(()=>{nn(),sn()},[ae]);const te=k!==void 0,[ve,we]=r.useState(()=>{var m;return k??((m=S==null?void 0:S[0])==null?void 0:m.id)}),ce=te?k:ve,V=r.useMemo(()=>(S==null?void 0:S.find(m=>m.id===ce))??null,[S,ce]),Ee=(V==null?void 0:V.agentId)??n,[Q,K]=Gt({value:d,defaultValue:p,onChange:y,persistKey:c,disablePersistence:j}),ne=Jt(a),oe=qt(),J=Bt(),Z=Wt(),ue=Ft(),Re=Ut(),[Fe,Ne]=r.useState(!1),[_e,b]=r.useState(!1),[Y,Ae]=r.useState(!1),[ln,an]=r.useState(!1),[Ze,cn]=r.useState(!1),et=r.useRef(W),tt=r.useRef(X),nt=r.useRef(He),rt=r.useRef(Oe),ct=r.useRef(le),ut=r.useRef($e),dt=r.useRef(ze),ot=r.useRef(fe),ee=r.useRef(null);et.current=W,tt.current=X,nt.current=He,rt.current=Oe,ct.current=le,ut.current=$e,dt.current=ze,ot.current=fe;function ie(m){const f=ot.current;return f?f.includes(m):!0}function se(m,f){console.warn(`[LiveLayer] Agent command "${m}" blocked — capability "${f}" not in allowlist. See https://livelayer.studio/docs/react/capabilities`)}const Me=r.useCallback(m=>{var F,ke,Ve,_t;const f=m;if(!(!f.type||typeof f.type!="string")){if(be==null||be({eventName:f.type,data:m}),f.type==="navigate"){if(!ie("navigate")){se("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(et.current){try{et.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(!ie("scroll")){se("scroll_to","scroll");return}const _=typeof f.selector=="string"?f.selector:null;if(!_)return;const R=f.behavior==="instant"?"instant":"smooth";if(tt.current){try{tt.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(!ie("read_page")){se("request_page_context","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,R=(F=ee.current)==null?void 0:F.call(ee),D=q=>{const N=R,U=N==null?void 0:N.localParticipant;if(U!=null&&U.publishData)try{const G=_?{...q,requestId:_}:q,Se=new TextEncoder().encode(JSON.stringify(G));U.publishData(Se,{reliable:!0})}catch(G){console.warn("[LiveLayer] publishData failed.",G)}},M=ut.current,H=ct.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:lt(M)})});return}D({type:"page_context",context:q});return}D({type:"page_context",context:lt(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(!ie("scroll")){se("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(nt.current){try{nt.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(-$t(M)):_==="down"?H($t(M)):q(_==="top"?0:pr(M));return}if(f.type==="click"){if(!ie("click")){se("click","click");return}const _=typeof f.selector=="string"?f.selector:null;if(!_){console.warn("[LiveLayer] click: missing selector.");return}if(rt.current){try{rt.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}(ke=R.click)==null||ke.call(R);return}if(f.type==="fill_form"||f.type==="focus_field"){if(!ie("fill_forms")){se(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(!Qe(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(!Qe(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(!ie("submit_forms")){se("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=(Ve=ee.current)==null?void 0:Ve.call(ee),H=U=>{const G=M,Se=G==null?void 0:G.localParticipant;if(Se!=null&&Se.publishData)try{const wn=D?{...U,requestId:D}:U,_n=new TextEncoder().encode(JSON.stringify(wn));Se.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(U){console.warn("[LiveLayer] submit_form: requestSubmit threw.",U),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(!ie("read_page")){se("request_routes","read_page");return}const _=typeof f.requestId=="string"?f.requestId:void 0,D=(_t=ee.current)==null?void 0:_t.call(ee),M=D==null?void 0:D.localParticipant;if(!(M!=null&&M.publishData))return;const H=N=>{try{const U=_?{type:"routes",routes:N,requestId:_}:{type:"routes",routes:N},G=new TextEncoder().encode(JSON.stringify(U));M.publishData(G,{reliable:!0})}catch(U){console.warn("[LiveLayer] request_routes: publishData failed.",U)}},q=dt.current;if(q){try{const N=q(),U=G=>{if(!Array.isArray(G)){H([]);return}H(G.map(rn).slice(0,200))};N instanceof Promise?N.then(U).catch(G=>{console.warn("[LiveLayer] getRoutes rejected; falling back to DOM walker.",G),H(Je())}):U(N)}catch(N){console.warn("[LiveLayer] getRoutes threw; falling back to DOM walker.",N),H(Je())}return}try{H(Je())}catch(N){console.warn("[LiveLayer] request_routes: extractRoutes threw.",N)}return}hr.has(f.type)||xe==null||xe(f)}},[xe,be]),O=Ot({agentId:B?"__controlled__":Ee,baseUrl:i,apiKey:o,sessionEndpoint:s,sessionBody:l,onDataMessage:B?void 0:Me});r.useEffect(()=>{if(B!=null&&B.subscribeToDataMessages)return B.subscribeToDataMessages(Me)},[B,Me]),ee.current=()=>{var m;return(m=O.getRoom)==null?void 0:m.call(O)},r.useEffect(()=>{var F;if(!ae)return;const m=(F=O.getRoom)==null?void 0:F.call(O),f=m==null?void 0:m.localParticipant;if(f!=null&&f.publishData)try{const ke=new TextEncoder().encode(JSON.stringify({type:"pathname",pathname:ae}));f.publishData(ke,{reliable:!0})}catch{}},[ae,O,O.connectionState]),r.useEffect(()=>{var F;if(typeof window>"u")return;const m=((F=window.location)==null?void 0:F.hostname)||"";if(m==="localhost"||m==="127.0.0.1"||m==="0.0.0.0"||m.endsWith(".local")||m.endsWith(".test"))return window.__livelayerSimulateCommand=ke=>{try{Me(ke)}catch(Ve){console.warn("[LiveLayer] simulate-command threw:",Ve)}},()=>{delete window.__livelayerSimulateCommand}},[Me]);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]),ft=r.useRef(null);r.useEffect(()=>{const m=w.videoElement,f=ft.current;if(!(!m||!f))return f.appendChild(m),()=>{m.parentNode===f&&f.removeChild(m)}},[w.videoElement]),r.useEffect(()=>{const m=w.audioElement;if(!m)return;oe.attach(m);const f=m.play();return f&&typeof f.catch=="function"&&f.catch(F=>{(F==null?void 0:F.name)==="NotAllowedError"&&Ne(!0)}),()=>{oe.detach()}},[w.audioElement]),r.useEffect(()=>{if(w.isControlled||w.connectionState!=="connected")return;const m=w.getRoom();if(m)return J.setupMic(m).catch(()=>{}),Z.attachRoom(m),ue.attachRoom(m),Re.refresh(),()=>{J.teardownMic(),Z.teardown(),ue.teardown()}},[w.isControlled,w.connectionState]),r.useEffect(()=>{const m=w.audioElement;m&&(m.muted=Ze)},[w.audioElement,Ze]);const un=r.useCallback(m=>{const f=w.getRoom();if(f)try{const F=new TextEncoder().encode(JSON.stringify({type:"user_message",text:m}));f.localParticipant.publishData(F,{reliable:!0})}catch{}},[w]),dn=r.useCallback(()=>{cn(m=>!m)},[]);r.useEffect(()=>{ye==null||ye(w.connectionState),w.connectionState==="connected"?pe==null||pe():w.connectionState==="disconnected"&&(he==null||he())},[w.connectionState,pe,he,ye]),r.useEffect(()=>{me==null||me(w.transcript)},[w.transcript,me]),r.useEffect(()=>{ge==null||ge(w.agentState)},[w.agentState,ge]);const pt=r.useRef(!1);r.useEffect(()=>{w.isControlled||!u||pt.current||re&&w.connectionState==="idle"&&(pt.current=!0,w.connect())},[u,w.connectionState,w,re]);const fn=r.useCallback(m=>{const f=S==null?void 0:S.find(F=>F.id===m);f&&(Ae(!1),m!==ce&&(b(!0),w.disconnect(),te||we(m),x==null||x(f)))},[S,ce,w,te,x]);r.useEffect(()=>{_e&&w.connectionState==="connected"&&b(!1)},[w.connectionState,_e]),r.useEffect(()=>{if(!Y)return;const m=f=>{f.key==="Escape"&&Ae(!1)};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[Y]);const pn=!!E||!!(V!=null&&V.avatarImageUrl)||w.isControlled,Ie=Vt(Ee,i,pn);fe===void 0&&((mt=Ie.info)!=null&&mt.capabilities)&&(ot.current=Ie.info.capabilities);const Ue=(V==null?void 0:V.name)??T??((gt=w.agentConfig)==null?void 0:gt.name)??((yt=Ie.info)==null?void 0:yt.name)??"Live Layer",it=(V==null?void 0:V.avatarImageUrl)??E??((bt=w.agentConfig)==null?void 0:bt.avatarImageUrl)??((xt=Ie.info)==null?void 0:xt.avatarImageUrl)??null,hn=v??((vt=w.agentConfig)==null?void 0:vt.idleLoopUrl)??((wt=Ie.info)==null?void 0:wt.idleLoopUrl)??null,mn=I??null,gn=r.useCallback(()=>K("expanded"),[K]),yn=r.useCallback(()=>K("minimized"),[K]),ht=r.useCallback(()=>{w.disconnect(),K("hidden")},[w,K]),bn=r.useCallback(()=>{const m=w.audioElement;m&&m.play().then(()=>Ne(!1)).catch(()=>{})},[w.audioElement]),xn=r.useCallback(()=>{Ne(!1),w.connect()},[w]),Te={...Be,zIndex:We};h.primaryColor&&(Te["--ll-color-primary"]=h.primaryColor),h.accentColor&&(Te["--ll-color-accent"]=h.accentColor),h.backgroundColor&&(Te["--ll-color-bg"]=h.backgroundColor),h.textColor&&(Te["--ll-color-fg"]=h.textColor);const vn=["ll-widget",`ll-widget--${Q}`,`ll-widget--${ne?"mobile":"desktop"}`,qe].filter(Boolean).join(" ");return re?t.jsxs("div",{className:vn,style:Te,"data-display-mode":Q,"data-position":g,children:[Q==="hidden"&&t.jsx(On,{position:g,isMobile:ne,isSpeaking:w.agentState==="speaking",onExpand:()=>K("expanded"),label:`Open ${Ue} widget`,avatarImageUrl:it,agentName:Ue}),Q==="minimized"&&t.jsx(Bn,{position:g,isMobile:ne,agentName:Ue,avatarImageUrl:it,agentState:w.agentState,isMuted:J.isMuted,audioLevel:oe,onExpand:gn,onToggleMute:J.toggleMute,onClose:ht}),Q==="expanded"&&t.jsx(Fn,{position:g,isMobile:ne,agentName:Ue,avatarImageUrl:it,idleLoopUrl:hn,greeting:mn,branding:h,teamMembers:S,currentTeamMemberId:ce,isSwitchingTeamMember:_e,teamSwitcherOpen:Y,onToggleTeamSwitcher:()=>Ae(m=>!m),onSelectTeamMember:fn,connectionState:w.connectionState,agentState:w.agentState,transcript:w.transcript,isMuted:J.isMuted,micDevices:Re.mics,isCameraEnabled:Z.isEnabled,cameraPreviewEl:Z.previewEl,cameraDevices:Re.cameras,activeCameraId:Z.activeDeviceId,isScreenShareEnabled:ue.isEnabled,screenPreviewEl:ue.previewEl,isSpeakerMuted:Ze,allowCamera:C,allowScreenShare:$,allowTyping:A,languageMenuOpen:ln,onToggleLanguageMenu:()=>an(m=>!m),needsUserGesture:Fe,canResume:w.canResume,micError:J.micError,error:w.error,avatarVideoContainerRef:ft,onConnect:()=>void w.connect(),onDisconnect:()=>w.disconnect(),onRetry:xn,onResumeAudio:bn,onToggleMute:J.toggleMute,onToggleCamera:()=>void Z.toggle(),onSwitchCameraDevice:m=>void Z.switchDevice(m),onToggleScreenShare:()=>void ue.toggle(),onToggleSpeaker:dn,onSendMessage:un,onMinimize:yn,onClose:ht,onClearMicError:J.clearError})]}):null}function gr(e){return t.jsx(Ht,{children:t.jsx(mr,{...e})})}const yr=({agentId:e,baseUrl:n,apiKey:o,mode:i,onAgentEvent:s,className:l,style:u})=>{const d=r.useRef(null),p=r.useRef(null),y=r.useRef(s);y.current=s;const g=r.useCallback(a=>{var j;const c=a.detail;(j=y.current)==null||j.call(y,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),o&&c.setAttribute("api-key",o),i&&c.setAttribute("mode",i),c.addEventListener("agent-event",g),a.appendChild(c),p.current=c,()=>{c.removeEventListener("agent-event",g),a.removeChild(c),p.current=null}},[e]),r.useEffect(()=>{p.current&&(i?p.current.setAttribute("mode",i):p.current.removeAttribute("mode"))},[i]),t.jsx("div",{ref:d,className:l,style:u})},br=r.forwardRef(function({id:n,intent:o,as:i="div",className:s,style:l,children:u},d){return r.createElement(i,{ref:d,"data-ll-region":n,"data-ll-intent":o,className:s,style:l},u)}),xr=r.forwardRef(function({id:n,intent:o,children:i,...s},l){return t.jsx("form",{ref:l,"data-ll-form":n,"data-ll-intent":o,...s,children:i})}),vr=r.forwardRef(function(n,o){const{name:i,label:s,labelClassName:l}=n,u={name:i,"data-ll-field":i};let d;if("as"in n&&n.as==="textarea"){const{name:p,label:y,labelClassName:g,as:a,...c}=n;d=t.jsx("textarea",{ref:o,...u,...c})}else if("as"in n&&n.as==="select"){const{name:p,label:y,labelClassName:g,as:a,children:c,...j}=n;d=t.jsx("select",{ref:o,...u,...j,children:c})}else{const{name:p,label:y,labelClassName:g,as:a,...c}=n;d=t.jsx("input",{ref:o,...u,...c})}return s===void 0?d:t.jsxs("label",{className:l,children:[s,d]})});let zt=1;function wr({onMount:e,defaultOpen:n=!1,storageKey:o="ll-debug-open"}){const[i,s]=r.useState(n),[l,u]=r.useState([]),[d,p]=r.useState(""),[y,g]=r.useState(!1),a=r.useRef(new Set),c=r.useRef([]),j=r.useRef(y);j.current=y,r.useEffect(()=>{try{const x=localStorage.getItem(o);x==="1"&&s(!0),x==="0"&&s(!1)}catch{}},[o]),r.useEffect(()=>{try{localStorage.setItem(o,i?"1":"0")}catch{}},[i,o]),r.useEffect(()=>{const x=v=>{(v.metaKey||v.ctrlKey)&&v.shiftKey&&v.key.toLowerCase()==="l"&&(v.preventDefault(),s(I=>!I))};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[]),r.useEffect(()=>{const x=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(x)},[]);const S=r.useRef(!1);if(r.useEffect(()=>{!e||S.current||(S.current=!0,e(x=>{c.current.push({id:zt++,ts:Date.now(),kind:"event",type:x.eventName,data:x.data})}))},[e]),r.useEffect(()=>{const x=console.warn,v=console.log,I=(E,T)=>function(...h){try{const C=typeof h[0]=="string"?h[0]:"";C.startsWith("[LiveLayer]")&&c.current.push({id:zt++,ts:Date.now(),kind:E,type:C.slice(0,120),data:{args:h.slice(1).map($=>kr($))}})}catch{}return T.apply(this,h)};return console.warn=I("warn",x),console.log=I("log",v),()=>{console.warn=x,console.log=v}},[]),!i)return t.jsx("button",{type:"button",onClick:()=>s(!0),title:"Open LiveLayer debug panel (Cmd/Ctrl + Shift + L)","aria-label":"Open LiveLayer debug panel",style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.18)",borderRadius:999,padding:"6px 10px",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",cursor:"pointer",boxShadow:"0 4px 12px rgba(0,0,0,0.35)",opacity:.85},children:"🛰 LL debug"});const k=l.filter(x=>{if(!d)return!0;const v=d.toLowerCase();return x.type.toLowerCase().includes(v)||JSON.stringify(x.data||{}).toLowerCase().includes(v)});return t.jsxs("div",{style:{position:"fixed",left:16,bottom:16,zIndex:2147483640,width:380,maxHeight:"60vh",background:"#0d0d0d",color:"#fff",border:"1px solid rgba(255,255,255,0.16)",borderRadius:12,boxShadow:"0 16px 48px rgba(0,0,0,0.5)",font:"500 11px -apple-system, BlinkMacSystemFont, system-ui, sans-serif",letterSpacing:"-0.1px",display:"flex",flexDirection:"column",overflow:"hidden"},children:[t.jsxs("div",{style:{padding:"8px 10px",background:"rgba(255,255,255,0.04)",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{style:{fontWeight:600,fontSize:12},children:"LiveLayer debug"}),t.jsxs("span",{style:{fontSize:10,color:"rgba(255,255,255,0.4)"},children:[l.length," event",l.length===1?"":"s"]}),t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:()=>g(x=>!x),style:st(y?"#f59e0b":"transparent"),title:"Pause / resume capture",children:y?"▶ resume":"⏸ pause"}),t.jsx("button",{type:"button",onClick:()=>{u([]),c.current=[]},style:st("transparent"),title:"Clear buffer",children:"clear"}),t.jsx("button",{type:"button",onClick:()=>s(!1),style:st("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:k.length===0?t.jsxs("div",{style:{padding:14,fontSize:11,color:"rgba(255,255,255,0.4)",lineHeight:1.5},children:["No events yet. Connect to the agent and trigger a tool call — the events will stream in here. You can also dispatch commands manually in DevTools:",t.jsx("pre",{style:{marginTop:6,background:"rgba(255,255,255,0.04)",padding:6,borderRadius:4,fontSize:10,whiteSpace:"pre-wrap"},children:`window.__livelayerSimulateCommand({
3
3
  type: "navigate",
4
4
  href: "/about"
5
- })`})]}):k.map(x=>t.jsx(wr,{entry:x,expanded:a.current.has(x.id),onToggle:()=>{a.current.has(x.id)?a.current.delete(x.id):a.current.add(x.id),u(v=>[...v])}},x.id))})]})}function wr({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 st(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 _r(e){try{return e instanceof Error?{message:e.message,stack:e.stack}:(JSON.stringify(e),e)}catch{return String(e)}}function kr(){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=mr;exports.ErrorBoundary=Ht;exports.LiveLayerDebugPanel=vr;exports.LiveLayerField=xr;exports.LiveLayerForm=br;exports.LiveLayerRegion=yr;exports.LiveLayerWidget=gr;exports.clearPageContextCache=nn;exports.clearRoutesCache=sn;exports.extractPageContext=tn;exports.extractRoutes=on;exports.getCachedPageContext=lt;exports.getCachedRoutes=Ke;exports.matchesPattern=Xt;exports.normalizeRouteInput=rn;exports.shouldRenderAtPath=Qt;exports.useAgentInfo=Vt;exports.useAudioLevel=qt;exports.useCameraState=Wt;exports.useDisplayMode=Yt;exports.useDisplayModePersistence=Jt;exports.useIsMobile=Kt;exports.useLiveKitSession=Ot;exports.useMediaDevices=Ut;exports.useMicrophoneState=Bt;exports.usePathname=Gt;exports.useRouteMatch=Zt;exports.useScreenShareState=Ft;exports.useTranscript=kr;
5
+ })`})]}):k.map(x=>t.jsx(_r,{entry:x,expanded:a.current.has(x.id),onToggle:()=>{a.current.has(x.id)?a.current.delete(x.id):a.current.add(x.id),u(v=>[...v])}},x.id))})]})}function _r({entry:e,expanded:n,onToggle:o}){const i=e.kind==="warn"?"#f59e0b":e.type.startsWith("[LiveLayer]")?"#94a3b8":e.type==="navigate"||e.type==="scroll_page"||e.type==="scroll_to"||e.type==="click"?"#22c55e":e.type==="fill_form"||e.type==="submit_form"||e.type==="focus_field"?"#a78bfa":e.type==="request_page_context"||e.type==="request_routes"?"#38bdf8":e.type==="agent_state"?"#facc15":"#cbd5e1",s=new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1});return t.jsxs("button",{type:"button",onClick:o,style:{textAlign:"left",background:"transparent",border:0,color:"#fff",width:"100%",padding:"6px 4px",cursor:"pointer",borderBottom:"1px solid rgba(255,255,255,0.04)",fontSize:11,lineHeight:1.4},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[t.jsx("span",{style:{color:"rgba(255,255,255,0.4)",fontVariantNumeric:"tabular-nums",fontSize:10},children:s}),t.jsx("span",{style:{color:i,fontWeight:600,flexShrink:0},children:e.type.length>50?e.type.slice(0,50)+"…":e.type})]}),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 st(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([]),o=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]})},[]),i=r.useCallback(()=>n([]),[]);return{entries:e,pushSegment:o,clear:i,latest:e.length>0?e[e.length-1]:null}}exports.AvatarWidget=gr;exports.ErrorBoundary=Ht;exports.LiveLayerDebugPanel=wr;exports.LiveLayerField=vr;exports.LiveLayerForm=xr;exports.LiveLayerRegion=br;exports.LiveLayerWidget=yr;exports.clearPageContextCache=nn;exports.clearRoutesCache=sn;exports.extractPageContext=tn;exports.extractRoutes=on;exports.getCachedPageContext=lt;exports.getCachedRoutes=Je;exports.matchesPattern=Xt;exports.normalizeRouteInput=rn;exports.shouldRenderAtPath=Qt;exports.useAgentInfo=Vt;exports.useAudioLevel=qt;exports.useCameraState=Wt;exports.useDisplayMode=Yt;exports.useDisplayModePersistence=Gt;exports.useIsMobile=Jt;exports.useLiveKitSession=Ot;exports.useMediaDevices=Ut;exports.useMicrophoneState=Bt;exports.usePathname=Kt;exports.useRouteMatch=Zt;exports.useScreenShareState=Ft;exports.useTranscript=Sr;