@livelayer/react 0.5.0 → 0.5.2

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