@voxket-ai/voxket-live 1.1.47 → 1.1.48

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.cjs CHANGED
@@ -179,7 +179,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${t}Chann
179
179
  ${n.promptSlider}
180
180
  ${o===i?"opacity-100 translate-y-0":"opacity-0 translate-y-4"}
181
181
  whitespace-pre-line break-words transition-all duration-700 ease-out
182
- `,style:{minHeight:"3rem",display:o===i?"flex":"none",alignItems:"center",justifyContent:"center"},children:m.jsx("span",{className:"italic",children:s})},o))})}const uw=_.forwardRef(({disabled:e,onStartCall:t,onStartChat:n,onStartVideo:i,prompts:r=['"Click to talk"','"How can I assist you today?"'],statusMessage:s="Agent is ready",title:o="Choose how to interact",subTitle:a="Ask me anything or give me a task to complete",theme:c="vox",modalities:l=["voice","chat","video"]},u)=>{const d=on(c),h=l.includes("voice"),f=l.includes("chat"),g=l.includes("video"),p=[h,f,g].filter(Boolean).length;return m.jsxs("div",{className:"flex flex-col items-center h-full justify-center w-full relative px-8 py-16","aria-disabled":e,style:{background:"transparent"},children:[m.jsx("div",{className:"absolute inset-0 opacity-[0.01] pointer-events-none mix-blend-overlay",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulance type='fractalNoise' baseFrequency='2' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`,backgroundRepeat:"repeat"}}),m.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[500px] h-[500px] bg-gradient-radial from-white/[0.02] to-transparent blur-3xl pointer-events-none"}),m.jsxs("div",{className:"flex flex-col items-center justify-center w-full max-w-2xl space-y-12 z-10",children:[m.jsx("div",{className:"text-center space-y-2 max-w-md",children:m.jsx("p",{className:`text-base leading-relaxed tracking-wide ${d.text.secondary}`,children:a})}),m.jsx("div",{className:"flex items-center justify-center w-full",children:h&&f&&g?m.jsxs("div",{className:"flex gap-5 items-center justify-center",children:[m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:t,children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]}),m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:n,children:[m.jsx(lu,{onClick:n,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Chat"})]}),m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:i||t,children:[m.jsx(uu,{onClick:i||t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Video"})]})]}):p>1?m.jsxs("div",{className:"flex gap-6 items-center justify-center",children:[h&&m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:t,children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]}),f&&m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:n,children:[m.jsx(lu,{onClick:n,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Chat"})]}),g&&i&&m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:i,children:[m.jsx(uu,{onClick:i,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Video"})]})]}):m.jsx("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",children:h?m.jsxs(m.Fragment,{children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]}):f?m.jsxs(m.Fragment,{children:[m.jsx(lu,{onClick:n,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Chat"})]}):g&&i?m.jsxs(m.Fragment,{children:[m.jsx(uu,{onClick:i,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Video"})]}):m.jsxs(m.Fragment,{children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]})})}),m.jsx("div",{className:"w-full flex justify-center",children:m.jsx(rV,{prompts:r,theme:c})})]})]})});uw.displayName="Welcome";class kf extends D.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("VoxketWidget Error:",t,n)}render(){if(this.state.hasError){if(this.props.fallback){const t=this.props.fallback;return D.createElement(t,{error:this.state.error})}return D.createElement("div",{style:{padding:"20px",border:"1px solid #ff4444",borderRadius:"8px",background:"#fff5f5",color:"#cc0000"}},"VoxketWidget encountered an error. Please check the console for details.")}return this.props.children}}const sV="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZgAAAJkCAYAAAAsgzeqAAAAAXNSR0IArs4c6QAAIABJREFUeF7sfQeUHMW1dnWctEk5B5BEkEQUOVlgwAZZJCPeMwbMI0i2MMImGpzGAWMMmGdwAgcyBgknwCY8AzIggkAEgQgCZaFV3tWGCR3//1Z1dVfXzuyudrdBMnfO0VnNTHd1z1fV96ubFYIvRAARQAQQAUQgAQSUBMbEIREBRAARQAQQAYIEg4sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABJMIrDgoIoAIIAKIABIMrgFEABFABBCBRBBAgkkEVhwUEUAEEAFEAAkG1wAigAggAohAIgggwSQCKw6KCCACiAAigASDawARQAQQAUQgEQSQYBKBFQdFBBABRAARQILBNYAIIAKIACKQCAJIMInAioMiAogAIoAIIMHgGkAEEAFEABFIBAEkmERgxUERAUQAEUAEkGBwDSACiAAigAgkggASTCKw4qCIACKACCACSDC4BhABRAARQAQSQQAJJhFYcVBEABFABBABJBhcA4gAIoAIIAKJIIAEkwisOCgigAggAogAEgyuAUQAEUAEEIFEEECCSQRWHBQRQAQQAUQACQbXACKACCACiEAiCCDBJAIrDooIIAKIACKABINrABFABBABRCARBJBgEoEVB0UEEAFEABFAgsE1gAggAogAIpAIAkgwicCKgyICiAAigAggweAaQAQQAUQAEUgEASSYRGDFQREBRAARQASQYHANIAKIACKACCSCABJMIrDioIgAIoAIIAJIMLgGEAFEABFABBJBAAkmEVhxUEQAEUAEEAEkGFwDiAAigAggAokggASTCKw4KCKACCACiAASDK4BRAARQAQQgUQQQIJJBFYcFBFABBABRAAJBtcAIoAIIAKIQCIIIMEkAisOigggAogAIoAEg2sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABJMIrDgoIoAIIAKIABIMrgFEABFABBCBRBBAgkkEVhwUEUAEEAFEAAkG1wAigAggAohAIgggwSQCKw6KCCACiAAigASDawARQAQQAUQgEQSQYBKBFQdFBBABRAARQILBNYAIIAKIACKQCAJIMInAioMiAogAIoAIIMHgGkAEEAFEABFIBAEkmERgxUERAUQAEUAEkGBwDSACiAAigAgkggASTCKw4qCIACKACCACSDC4BhABRAARQAQSQQAJJhFYcVBEABFABBABJBhcA4gAIoAIIAKJIIAEkwisOCgigAggAogAEgyuAUQAEUAEEIFEEECCSQRWHBQRQAQQAUQACQbXACKACCACiEAiCCDBJAIrDooIIAKIACKABINrABFABBABRCARBJBgEoEVB0UEEAFEABFAgsE1gAggAogAIpAIAkgwicCKgyICiAAigAggweAaQAQQAUQAEUgEASSYRGDFQREBRAARQASQYHANIAKIACKACCSCABJMIrDioIgAIoAIIAJIMLgGEAFEABFABBJBAAkmEVhxUEQAEUAEEAEkGFwDiAAigAggAokggASTCKw4KCKACCACiAASDK4BRAARQAQQgUQQQIJJBFYcFBFABBABRAAJBtcAIoAIIAKIQCIIIMEkAisOigggAogAIoAEg2sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABJMIrDgoIoAIIAKIABIMrgFEABFABBCBRBBAgkkEVhwUEUAEEAFEAAkG1wAigAggAohAIgggwSQCKw6KCCACiAAigASDawARQAQQAUQgEQSQYBKBFQdFBBABRAARQILBNYAIIAKIACKQCAJIMInAioMiAogAIoAIIMHgGkAEEAFEABFIBAEkmERgxUERAUQAEUAEkGBwDSACiAAigAgkggASTCKw4qCIACKACCACSDC4BhABRAARQAQSQQAJJhFYcVBEABFABBABJBhcA4gAIoAIIAKJIIAEkwisOCgigAggAogAEgyuAUQAEUAEEIFEEECCSQRWHBQRQAQQAUQACQbXACKACCACiEAiCCDBJAIrDooIIAKIACKABINrABFABBABRCARBJBgEoEVB0UEEAFEABFAgsE1gAggAogAIpAIAkgwicCKgyICiAAigAggweAaQAQQAUQAEUgEASSYRGDFQREBRAARQASQYHANIAKIACKACCSCABJMIrDioIgAIoAIIAJIMLgGEAFEABFABBJBAAkmEVhxUEQAEUAEEAEkGFwDiAAigAggAokggASTCKw4KCKACCACiAASDK4BRAARQAQQgUQQQIJJBFYcFBFABBABRAAJBtcAIoAIIAKIQCIIIMEkAisOigggAogAIoAEg2sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABNNLWGfMmKGNHz++/8knnji6oa5//cYNG9zaXM22ctFrvGnOTU3z3plnE0L8Xl4GT0cEEAFEYKdDAAmmF1N28QkXp750+elTxowacXI6lTq0rr5ukK4bim1ZW23bea2xcd17r7z2xiuPPvXEu/fdd18rEk0vwMZTEQFEYKdDAAmmF1P20P0P7fHZo4++UfGtQ5qbm9N1dXWG67qeaZqe7/t+ff2AtnKptGT1mrUvbN7a/K8Xnn1hyeX5y7cg0fQCdDwVEUAEdhoEkGB6OFX5fF494TOfu2LkmNGXlaziAF3XVcuySKYmQ1zXJY7jkGw26yqK4miK0lRbU7PetuwVS99777EVq1a8XNq8eeVZc+a09PDyeBoigAgkjwCXj2ji7iHWSDA9BM4nvrJ88QeP+IZ2ZNl16lKpFLFtm6QyJvF9th4NwyAK8YimaYT4LtEVtb2+rqasEbWtrWXbffP//dzff/Czny1vbR3a8uGHj4Gvxuvh7eBpiAAi0AsEYMO4ZMkSfd26cuqWG74/xEgbY1XNH6Q4nqp4pKmppbDkrgfvWnf77bfDc4qvbiKABNNN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kkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABP4PDQqqMgGtmQIAAAAASUVORK5CYII=",dw=({onClick:e,position:t="bottom-right",size:n=64,className:i="",style:r,ariaLabel:s="Open Voxket",logoScale:o=.7,isRunning:a=!1,logoUrl:c=sV})=>{const l={"top-left":"top-4 left-4","top-right":"top-4 right-4","bottom-left":"bottom-4 left-4","bottom-right":"bottom-4 right-4"},u={width:n,height:n,...r},d=D.useMemo(()=>{if(typeof window>"u"||!window.matchMedia)return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}},[]),h="0 8px 32px rgba(0,0,0,0.3)",f="0 0 0 3px rgba(34,211,238,0.6), 0 0 20px rgba(6,182,212,0.5), 0 8px 32px rgba(0,0,0,0.3)";return m.jsxs(je.button,{type:"button",onClick:e,"aria-label":s,className:`fixed z-50 rounded-full bg-black flex items-center justify-center overflow-visible focus:outline-none focus:ring-2 focus:ring-cyan-400/60 ${l[t]} ${i}`,style:u,initial:{scale:.9,opacity:0,boxShadow:h},animate:{scale:1,opacity:1,boxShadow:a&&!d?[f,"0 0 0 3px rgba(34,211,238,0.9), 0 0 30px rgba(6,182,212,0.7), 0 8px 32px rgba(0,0,0,0.3)",f]:a?f:h},exit:{scale:.9,opacity:0},whileHover:{scale:1.05},whileTap:{scale:.95},"data-position":t,"data-voxket-trigger":"true",transition:{scale:{type:"spring",stiffness:400,damping:25},opacity:{duration:.2},boxShadow:a&&!d?{duration:1.5,repeat:1/0,ease:"easeInOut"}:{duration:.3}},children:[a&&m.jsx(je.span,{"aria-hidden":!0,className:"absolute inset-[-3px] rounded-full pointer-events-none",style:{background:"conic-gradient(from 0deg, rgba(6,182,212,0.8) 0deg, rgba(34,211,238,1) 120deg, rgba(6,182,212,0.8) 240deg, rgba(34,211,238,1) 360deg)",WebkitMask:"radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px))",mask:"radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px))"},animate:d?void 0:{rotate:360},transition:d?void 0:{duration:3,repeat:1/0,ease:"linear"}}),m.jsx("span",{className:"absolute inset-0 rounded-full bg-black","aria-hidden":!0}),m.jsx("img",{src:c,alt:"Voxket",className:"object-contain select-none pointer-events-none relative z-10",style:{width:`${Math.max(0,Math.min(1,o))*100}%`,height:`${Math.max(0,Math.min(1,o))*100}%`,filter:a?"brightness(1.1) contrast(1.05)":"none"},draggable:!1})]})};function hw({room:e,onSessionEnd:t,onSessionStart:n,enableConsoleLogging:i=!0,enableLocalStorage:r=!0,voxketSessionId:s}={}){const[o,a]=D.useState(null),[c,l]=D.useState([]),[u,d]=D.useState(null),[h,f]=D.useState([]),g=D.useCallback((w,S)=>{const k={timestamp:new Date,event:w,data:S,sessionId:o==null?void 0:o.sessionId,participantId:u==null?void 0:u.identity};if(l(x=>[...x,k]),r){const x=JSON.parse(localStorage.getItem("voxket-session-logs")||"[]");x.push(k),localStorage.setItem("voxket-session-logs",JSON.stringify(x))}return k},[o==null?void 0:o.sessionId,u==null?void 0:u.identity,i,r]);D.useEffect(()=>{if(!e)return;const w=()=>{const y=s||`session-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,I=new Date,N={sessionId:y,startTime:I,totalMessages:0,connectionIssues:0,participantCount:h.length,events:[]};a(N),g("SESSION_STARTED",{sessionId:y,startTime:I}),n==null||n(y)},S=()=>{if(o){const y=new Date,I=y.getTime()-o.startTime.getTime(),N={...o,endTime:y,duration:I,events:c};g("SESSION_ENDED",{sessionId:o.sessionId,duration:`${Math.round(I/1e3)}s`,totalMessages:o.totalMessages,connectionIssues:o.connectionIssues}),t==null||t(N),a(null),l([])}},k=y=>{g("CONNECTION_STATE_CHANGED",{state:y}),y===ze.Reconnecting&&o&&(a(I=>I?{...I,connectionIssues:I.connectionIssues+1}:null),g("CONNECTION_ISSUE",{type:"reconnecting"}))},x=y=>{g("TRACK_PUBLISHED",{trackKind:y.kind,trackSource:y.source})},C=y=>{g("TRACK_UNPUBLISHED",{trackKind:y.kind,trackSource:y.source})},M=(y,I)=>{o&&a(N=>N?{...N,totalMessages:N.totalMessages+1}:null),g("DATA_RECEIVED",{participantId:I==null?void 0:I.identity,dataSize:y.length})},R=y=>{g("PARTICIPANT_CONNECTED",{participantId:y.identity,participantName:y.name}),f(I=>[...I,y]),o&&a(I=>I?{...I,participantCount:I.participantCount+1}:null)},P=y=>{g("PARTICIPANT_DISCONNECTED",{participantId:y.identity,participantName:y.name}),f(I=>I.filter(N=>N.identity!==y.identity))};return e.localParticipant&&d(e.localParticipant),e.on(F.Connected,w),e.on(F.Disconnected,S),e.on(F.ConnectionStateChanged,k),e.on(F.TrackPublished,x),e.on(F.TrackUnpublished,C),e.on(F.DataReceived,M),e.on(F.ParticipantConnected,R),e.on(F.ParticipantDisconnected,P),()=>{e.off(F.Connected,w),e.off(F.Disconnected,S),e.off(F.ConnectionStateChanged,k),e.off(F.TrackPublished,x),e.off(F.TrackUnpublished,C),e.off(F.DataReceived,M),e.off(F.ParticipantConnected,R),e.off(F.ParticipantDisconnected,P)}},[e,o,c,h.length,g,t,n]);const p=D.useCallback(()=>r?JSON.parse(localStorage.getItem("voxket-session-logs")||"[]"):c,[c,r]),v=D.useCallback(()=>{r&&localStorage.removeItem("voxket-session-logs"),l([])},[r]),b=D.useCallback(()=>{const w=p(),S=JSON.stringify(w,null,2),k="data:application/json;charset=utf-8,"+encodeURIComponent(S),x=`voxket-session-logs-${new Date().toISOString().split("T")[0]}.json`,C=document.createElement("a");C.setAttribute("href",k),C.setAttribute("download",x),C.click()},[p]);return{sessionMetrics:o,sessionLogs:c,logEvent:g,getSessionLogs:p,clearSessionLogs:v,exportSessionLogs:b}}class Sf{constructor(){Ne(this,"listeners",{})}on(t,n){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(n),()=>this.off(t,n)}once(t,n){const i=(...r)=>{this.off(t,i),n(...r)};return this.on(t,i)}off(t,n){const i=this.listeners[t];if(!i)return;const r=i.indexOf(n);r>-1&&i.splice(r,1)}removeAllListeners(t){t?delete this.listeners[t]:this.listeners={}}emit(t,...n){const i=this.listeners[t];if(!i)return;const r=[...i];for(const s of r)try{s(...n)}catch(o){console.error(`Error in event listener for ${String(t)}:`,o)}}listenerCount(t){var n;return((n=this.listeners[t])==null?void 0:n.length)??0}eventNames(){return Object.keys(this.listeners)}}class fw{constructor(t){Ne(this,"plugins",new Map);Ne(this,"installedPlugins",new Set);Ne(this,"context");this.context={client:t,emit:t.emit.bind(t),on:t.on.bind(t),config:{}}}register(t){if(this.plugins.has(t.name))throw new Error(`Plugin '${t.name}' is already registered`);if(t.dependencies){for(const n of t.dependencies)if(!this.plugins.has(n))throw new Error(`Plugin '${t.name}' depends on '${n}' which is not registered`)}this.plugins.set(t.name,t)}async install(t,n){const i=this.plugins.get(t);if(!i)throw new Error(`Plugin '${t}' is not registered`);if(this.installedPlugins.has(t))throw new Error(`Plugin '${t}' is already installed`);if(i.dependencies)for(const s of i.dependencies)this.installedPlugins.has(s)||await this.install(s);const r={...this.context,config:{...i.config,...n}};i.install&&await i.install(r),this.installedPlugins.add(t),this.setupPluginEvents(i,r)}async uninstall(t){var i;const n=this.plugins.get(t);if(!n)throw new Error(`Plugin '${t}' is not registered`);if(this.installedPlugins.has(t)){for(const[r,s]of this.plugins)if(this.installedPlugins.has(r)&&((i=s.dependencies)!=null&&i.includes(t)))throw new Error(`Cannot uninstall '${t}' because '${r}' depends on it`);n.uninstall&&await n.uninstall(this.context),this.installedPlugins.delete(t)}}isInstalled(t){return this.installedPlugins.has(t)}getInstalledPlugins(){return Array.from(this.installedPlugins)}getAvailablePlugins(){return Array.from(this.plugins.keys())}getPluginInfo(t){return this.plugins.get(t)}setupPluginEvents(t,n){t.onSessionStart&&n.on("session.started",i=>{t.onSessionStart(n,i.id)}),t.onSessionEnd&&n.on("session.ended",i=>{t.onSessionEnd(n,i.id)}),t.onAgentResponse&&n.on("agent.response",i=>{t.onAgentResponse(n,i)})}}function oV(e){return e}function wf(e,t,n){return{name:e,version:"1.0.0",description:`${t} modality plugin`,install:async i=>{n.onActivate&&await n.onActivate(i)},uninstall:async i=>{n.onDeactivate&&await n.onDeactivate(i)},onAgentResponse:n.onMessage}}const aV={name:"analytics",version:"1.0.0",description:"Built-in analytics tracking",install:async e=>{console.log("Analytics plugin installed"),e.on("session.started",t=>{console.log("Analytics: Session started",t.id)}),e.on("session.ended",(t,n)=>{console.log("Analytics: Session ended",t.id,n)}),e.on("chat.message.sent",t=>{console.log("Analytics: User message sent",t.content.length)})}},cV={name:"debug",version:"1.0.0",description:"Debug logging and development tools",install:async e=>{console.log("Debug plugin installed");const t=e.emit;e.emit=(n,...i)=>(console.log(`[Debug] Event: ${String(n)}`,i),t(n,...i))}},lV={name:"metrics",version:"1.0.0",description:"Advanced metrics collection",install:async e=>{console.log("Metrics plugin installed");const t=new Map;e.on("session.started",n=>{t.set(n.id,{startTime:Date.now(),events:[]})}),e.on("agent.response",n=>{console.log("Metrics: Agent response analyzed",{type:n.type,length:n.content.length,timestamp:n.timestamp})})}};class pw extends Sf{constructor(n){super();Ne(this,"room",null);Ne(this,"registeredMethods",new Map);Ne(this,"activeInteractions",new Map);Ne(this,"currentInteraction",null);n&&this.setRoom(n)}setRoom(n){this.room=n}async registerFrontendRPC(n,i,r="embedded"){if(console.log(`RpcManager: Starting registration for method '${n}'`),!this.room)throw console.error(`RpcManager: Cannot register '${n}' - no room instance`),new Error("Room not initialized. Cannot register RPC method.");if(!this.room.localParticipant)throw console.error(`RpcManager: Cannot register '${n}' - no local participant`),new Error("Local participant not available for RPC registration");console.log(`RpcManager: Room state: ${this.room.state}`),console.log(`RpcManager: Local participant: ${this.room.localParticipant.identity}`),console.log(`RpcManager: Registering frontend RPC method: ${n}`);const s={methodName:n,component:i,presentationMode:r};this.registeredMethods.set(n,s);try{this.room.registerRpcMethod(n,async o=>{console.log(`RpcManager: RPC method '${n}' called by ${o.callerIdentity}`),console.log("RpcManager: Payload:",o.payload),this.emit("rpc.method.called",{methodName:n,data:o});let a;console.log(`RpcManager: Current registration for '${n}':`,s);let c=o.responseTimeout||30;try{a=JSON.parse(o.payload)}catch{a=o.payload}try{const l=await this.awaitUserInteraction(n,i,r,a,c);return JSON.stringify(l)}catch(l){throw console.error(`RpcManager: Error in RPC method '${n}':`,l),l}}),this.emit("rpc.method.registered",{methodName:n}),console.log(`RpcManager: Successfully registered RPC method: ${n}`)}catch(o){throw console.error(`RpcManager: Failed to register RPC method '${n}':`,o),o}}async awaitUserInteraction(n,i,r,s,o){return new Promise((a,c)=>{const l=`${n}_${Date.now()}`;console.log(`RpcManager: Starting user interaction for method: ${n}, timeout: ${o} seconds`);const u={didSuccess:(h,f)=>{console.log(`RpcManager: User interaction successful for method: ${n}`,h),this.clearInteraction(l),this.currentInteraction=null;const g={success:!0,message:"User interaction completed successfully",data:h,timestamp:new Date,...f?{successView:f}:{}};this.emit("rpc.interaction.completed",{methodName:n,response:g}),a(g)},didFail:h=>{console.log(`RpcManager: User interaction failed for method: ${n}`,h),this.clearInteraction(l);const f={success:!1,message:"User interaction failed",error:h,timestamp:new Date};this.emit("rpc.interaction.completed",{methodName:n,response:f}),a(f)},dismissView:()=>{var f;console.log(`RpcManager: User dismissed interaction for method: ${n}`),console.log("RpcManager: Current interaction before dismiss:",(f=this.currentInteraction)==null?void 0:f.methodName),this.clearInteraction(l),this.currentInteraction=null,console.log("RpcManager: Current interaction after dismiss:",this.currentInteraction);const h={success:!0,data:{dismissed:!0,reason:"User dismissed the interaction"},message:"User interaction dismissed",timestamp:new Date};this.emit("rpc.interaction.dismissed",{methodName:n,response:h}),this.emit("rpc.interaction.completed",{methodName:n,response:h}),setTimeout(()=>{var g;((g=this.currentInteraction)==null?void 0:g.methodName)===n&&(console.log(`RpcManager: Force clearing interaction for ${n}`),this.currentInteraction=null)},0),a(h)},didTimeout:h=>{console.log(`RpcManager: User interaction timeout for method: ${n}`),this.clearInteraction(l),this.currentInteraction=null;const f={success:!0,message:`User interaction timed out after ${o} seconds, it should be considered as declined, agent don't need to retry`,timestamp:new Date,...h?{timeoutView:h}:{}};this.emit("rpc.interaction.timeout",{methodName:n,response:f}),setTimeout(()=>{var g;((g=this.currentInteraction)==null?void 0:g.methodName)===n&&(console.log(`RpcManager: Force clearing interaction for ${n}`),this.currentInteraction=null)},0),a(f)}},d=setTimeout(()=>{u.didTimeout&&u.didTimeout()},o);this.activeInteractions.set(l,{resolve:h=>a(JSON.parse(h)),reject:c,timeoutId:d}),this.currentInteraction={isVisible:!0,methodName:n,component:i,presentationMode:r,timeout:o,data:s,handler:u},this.emit("rpc.interaction.started",{methodName:n,presentationMode:r}),setTimeout(async()=>{var h;if((h=this.currentInteraction)!=null&&h.handler)try{console.log(`RpcManager: Component created for method: ${n} with data:`,s)}catch(f){console.error("RpcManager: Error loading data into component:",f),u.didFail({error:"Failed to load data into component"})}},100)})}clearInteraction(n){const i=this.activeInteractions.get(n);i&&(console.log(`RpcManager: Clearing interaction: ${n}`),clearTimeout(i.timeoutId),this.activeInteractions.delete(n))}getCurrentInteraction(){return this.currentInteraction}dismissCurrentInteraction(){var n;this.currentInteraction&&(console.log(`RpcManager: Dismissing current interaction: ${this.currentInteraction.methodName}`),(n=this.currentInteraction.handler)==null||n.dismissView(),setTimeout(()=>{this.currentInteraction&&(console.log("RpcManager: Force clearing lingering interaction"),this.currentInteraction=null)},0))}getRegisteredMethods(){return Array.from(this.registeredMethods.keys())}unregisterMethod(n){this.registeredMethods.delete(n),console.log(`RpcManager: Unregistered RPC method: ${n}`)}clear(){for(const[n,i]of this.activeInteractions)clearTimeout(i.timeoutId);this.activeInteractions.clear(),this.registeredMethods.clear(),this.currentInteraction=null,console.log("RpcManager: Cleared all registrations and interactions")}}class tt extends Error{constructor(t,n,i){super(t),this.code=n,this.details=i,this.name="VoxketError"}}class mw{constructor(t,n="User"){Ne(this,"chatMessages",[]);Ne(this,"activeTranscriptions",new Map);Ne(this,"room",null);Ne(this,"eventEmitter");Ne(this,"participantName");this.eventEmitter=t,this.participantName=n}setRoom(t){this.room=t}setParticipantName(t){this.participantName=t}getChatMessages(){return[...this.chatMessages]}addChatMessage(t){this.chatMessages.some(i=>i.id===t.id)||this.chatMessages.push(t)}updateChatMessage(t){const n=this.chatMessages.findIndex(i=>i.id===t.id);n!==-1&&(this.chatMessages[n]=t)}clearChatMessages(){this.chatMessages=[],this.activeTranscriptions.clear(),console.log("🧹 ChatManager: Cleared chat messages and transcription history")}trackTranscription(t,n){this.activeTranscriptions.set(t,{messageId:n,timestamp:Date.now()})}getActiveTranscription(t){const n=Date.now(),i=this.activeTranscriptions.get(t);return i&&n-i.timestamp<1e3?i:null}async sendMessage(t,n){if(!this.room)throw new tt("No room connection","CONNECTION_FAILED");if(!this.room.localParticipant)throw new tt("No local participant","CONNECTION_FAILED");try{const i={id:`msg_${Date.now()}`,content:t,sender:{id:"user",name:this.participantName,type:"participant"},timestamp:new Date,metadata:n||{}};await this.room.localParticipant.sendText(t,{topic:"lk.chat",destinationIdentities:[]}),this.eventEmitter.emit("chat.message.sent",i)}catch(i){throw console.error("ChatManager: Failed to send chat message:",i),new tt("Failed to send message","NETWORK_ERROR",i)}}async sendAttachments(t,n){if(!this.room)throw new tt("No room connection","CONNECTION_FAILED");if(!this.room.localParticipant)throw new tt("No local participant","CONNECTION_FAILED");if(!t||t.length===0)throw new tt("No files provided","INVALID_PARAMETER");const i=t.filter(r=>r.type.startsWith("image/"));if(i.length===0)throw new tt("Only image files are allowed","INVALID_PARAMETER");i.length!==t.length&&console.warn("ChatManager: Some non-image files were filtered out");try{const r=i.map(async(s,o)=>{const c={id:`att_${Date.now()}_${o}`,content:`📎 ${s.name}`,sender:{id:"user",name:this.participantName,type:"participant"},timestamp:new Date,metadata:{...n,type:"attachment",fileName:s.name,fileSize:s.size,mimeType:s.type,uploading:!0}};this.eventEmitter.emit("chat.message.sent",c);const l=await this.room.localParticipant.sendFile(s,{mimeType:s.type,topic:"images",onProgress:d=>{const h={...c,metadata:{...c.metadata,uploadProgress:d}};this.eventEmitter.emit("chat.message.updated",h)}});try{const d=new FileReader,h=new Promise((p,v)=>{d.onload=()=>{typeof d.result=="string"?p(d.result):v(new Error("Failed to convert to base64"))},d.onerror=v});d.readAsDataURL(s);const g={type:"image",data:await h,filename:s.name,mimeType:s.type,size:s.size};await this.room.localParticipant.sendText(JSON.stringify(g),{topic:"images",destinationIdentities:[]})}catch(d){console.warn("ChatManager: Failed to send image data to agent:",d);try{const h=`I've shared an image: ${s.name}`;await this.room.localParticipant.sendText(h,{topic:"lk.chat",destinationIdentities:[]})}catch(h){console.warn("ChatManager: Failed to send image notification to agent:",h)}}const u={...c,metadata:{...c.metadata,uploading:!1,uploadProgress:1,streamId:l.id}};return this.eventEmitter.emit("chat.message.updated",u),l});await Promise.all(r)}catch(r){throw console.error("ChatManager: Failed to send attachments:",r),new tt("Failed to send attachments","NETWORK_ERROR",r)}}async sendAttachment(t,n){return this.sendAttachments([t],n)}convertMarkdownToText(t){if(!t)return"";let n=t;return n=n.replace(/\*\*(.*?)\*\*/g,"$1"),n=n.replace(/__(.*?)__/g,"$1"),n=n.replace(/\*(.*?)\*/g,"$1"),n=n.replace(/_(.*?)_/g,"$1"),n=n.replace(/~~(.*?)~~/g,"$1"),n=n.replace(/`([^`]+)`/g,"$1"),n=n.replace(/```[\s\S]*?```/g,""),n=n.replace(/^#{1,6}\s+/gm,""),n=n.replace(/\[([^\]]+)\]\([^)]+\)/g,"$1"),n.trim()}}class gw{constructor(t){Ne(this,"room",null);Ne(this,"eventEmitter");Ne(this,"silencePreventionNode",null);Ne(this,"silencePreventionOscillator",null);Ne(this,"audioContext",null);this.eventEmitter=t,this.initializeAudioContext()}initializeAudioContext(){try{if(this.audioContext||(this.audioContext=new(window.AudioContext||window.webkitAudioContext),console.log("🔊 MediaManager: AudioContext created:",{state:this.audioContext.state,sampleRate:this.audioContext.sampleRate})),this.audioContext.state==="suspended"){console.log("🔊 MediaManager: AudioContext suspended, will resume on user interaction");const t=async()=>{this.audioContext&&this.audioContext.state==="suspended"&&(await this.audioContext.resume(),console.log("✅ MediaManager: AudioContext resumed:",this.audioContext.state)),document.removeEventListener("click",t),document.removeEventListener("touchstart",t),document.removeEventListener("keydown",t)};document.addEventListener("click",t,{once:!0}),document.addEventListener("touchstart",t,{once:!0}),document.addEventListener("keydown",t,{once:!0})}else this.audioContext.state==="running"&&console.log("✅ MediaManager: AudioContext already running")}catch(t){console.error("MediaManager: Failed to initialize AudioContext:",t)}}async ensureAudioContextRunning(){if(this.audioContext||this.initializeAudioContext(),this.audioContext&&this.audioContext.state==="suspended"){console.log("🔊 MediaManager: Attempting to resume suspended AudioContext");try{await this.audioContext.resume(),console.log("✅ MediaManager: AudioContext resumed successfully")}catch(t){console.error("MediaManager: Failed to resume AudioContext:",t)}}}setRoom(t){this.room=t}getLocalParticipant(){var t;return((t=this.room)==null?void 0:t.localParticipant)??null}getRemoteParticipants(){var t;return Array.from(((t=this.room)==null?void 0:t.remoteParticipants.values())??[])}async toggleMicrophone(t){return this.setMicrophoneEnabled(t!==!1)}async setMicrophoneEnabled(t){var n,i,r;try{if(!this.room||this.room.state!=="connected")throw console.warn("⚠️ MediaManager: Cannot enable microphone - room not connected",{hasRoom:!!this.room,roomState:(n=this.room)==null?void 0:n.state}),new tt("Cannot enable microphone: room not connected","CONNECTION_FAILED");await this.ensureAudioContextRunning();const s=(i=this.room)==null?void 0:i.localParticipant.isMicrophoneEnabled,o=t??!s;o&&this.startSilencePrevention(),await((r=this.room)==null?void 0:r.localParticipant.setMicrophoneEnabled(o,{autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0})),o?this.eventEmitter.emit("track.unmuted",{source:"microphone",enabled:!0}):(this.eventEmitter.emit("track.muted",{source:"microphone",enabled:!1}),this.stopSilencePrevention()),console.log("🎤 MediaManager: Microphone",o?"enabled":"disabled")}catch(s){throw console.error("MediaManager: Failed to toggle microphone:",s),this.stopSilencePrevention(),new tt("Failed to toggle microphone","PERMISSION_DENIED",s)}}startSilencePrevention(){try{if(this.audioContext||(this.audioContext=new AudioContext),this.silencePreventionOscillator)return;console.log("🔇 MediaManager: Starting silence prevention"),this.silencePreventionOscillator=this.audioContext.createOscillator(),this.silencePreventionNode=this.audioContext.createGain(),this.silencePreventionOscillator.frequency.value=20,this.silencePreventionNode.gain.value=.001,this.silencePreventionOscillator.connect(this.silencePreventionNode),this.silencePreventionNode.connect(this.audioContext.destination),this.silencePreventionOscillator.start(),console.log("✅ MediaManager: Silence prevention started")}catch(t){console.error("❌ MediaManager: Failed to start silence prevention:",t)}}stopSilencePrevention(){try{this.silencePreventionOscillator&&(console.log("🔇 MediaManager: Stopping silence prevention"),this.silencePreventionOscillator.stop(),this.silencePreventionOscillator.disconnect(),this.silencePreventionOscillator=null),this.silencePreventionNode&&(this.silencePreventionNode.disconnect(),this.silencePreventionNode=null)}catch(t){console.error("❌ MediaManager: Failed to stop silence prevention:",t)}}async toggleCamera(t){return this.setCameraEnabled(t!==!1)}async setCameraEnabled(t){var n,i;try{const r=(n=this.room)==null?void 0:n.localParticipant.isCameraEnabled,s=t??!r;await((i=this.room)==null?void 0:i.localParticipant.setCameraEnabled(s)),s?this.eventEmitter.emit("track.unmuted",{source:"camera",enabled:!0}):this.eventEmitter.emit("track.muted",{source:"camera",enabled:!1})}catch(r){throw new tt("Failed to toggle camera","PERMISSION_DENIED",r)}}async enableCamera(){return this.setCameraEnabled(!0)}async disableCamera(){return this.setCameraEnabled(!1)}async startScreenShare(){var t;try{await((t=this.room)==null?void 0:t.localParticipant.setScreenShareEnabled(!0)),this.eventEmitter.emit("track.unmuted",{source:"screenShare",enabled:!0})}catch(n){throw new tt("Failed to start screen share","PERMISSION_DENIED",n)}}async stopScreenShare(){var t;try{await((t=this.room)==null?void 0:t.localParticipant.setScreenShareEnabled(!1)),this.eventEmitter.emit("track.muted",{source:"screenShare",enabled:!1})}catch(n){throw new tt("Failed to stop screen share","PERMISSION_DENIED",n)}}async getAudioInputDevices(){try{return(await navigator.mediaDevices.enumerateDevices()).filter(n=>n.kind==="audioinput")}catch(t){throw new tt("Failed to get audio input devices","DEVICE_ERROR",t)}}async getVideoInputDevices(){try{return(await navigator.mediaDevices.enumerateDevices()).filter(n=>n.kind==="videoinput")}catch(t){throw new tt("Failed to get video input devices","DEVICE_ERROR",t)}}async setAudioInputDevice(t){var n;try{if(!((n=this.room)!=null&&n.localParticipant))throw new Error("Not connected to room")}catch(i){throw new tt("Failed to set audio input device","DEVICE_ERROR",i)}}async setVideoInputDevice(t){var n;try{if(!((n=this.room)!=null&&n.localParticipant))throw new Error("Not connected to room")}catch(i){throw new tt("Failed to set video input device","DEVICE_ERROR",i)}}getMicrophoneTrack(){const t=this.getLocalParticipant();if(!t)return null;for(const[,n]of t.trackPublications)if(n.source===j.Source.Microphone)return n.track;return null}getCameraTrack(){const t=this.getLocalParticipant();if(!t)return null;for(const[,n]of t.trackPublications)if(n.source===j.Source.Camera)return n.track;return null}getScreenShareTrack(){const t=this.getLocalParticipant();if(!t)return null;for(const[,n]of t.trackPublications)if(n.source===j.Source.ScreenShare)return n.track;return null}get isMicrophoneEnabled(){const t=this.getMicrophoneTrack();return t?!t.isMuted:!1}get isCameraEnabled(){const t=this.getCameraTrack();return t?!t.isMuted:!1}get isScreenShareEnabled(){const t=this.getScreenShareTrack();return t?!t.isMuted:!1}getAgentAudioTrack(){const t=this.getRemoteParticipants();console.log("🔊 MediaManager.getAgentAudioTrack: Checking remote participants:",{count:t.length,participants:t.map(n=>({identity:n.identity,name:n.name,hasMicTrack:!!n.getTrackPublication(j.Source.Microphone)}))});for(const n of t){const i=n.getTrackPublication(j.Source.Microphone);if(i!=null&&i.track)return console.log("✅ MediaManager.getAgentAudioTrack: Found audio track for",n.identity),{source:j.Source.Microphone,participant:n,publication:i}}return console.log("❌ MediaManager.getAgentAudioTrack: No audio track found"),null}getAgentVideoTrack(){const t=this.getRemoteParticipants();for(const n of t){const i=n.getTrackPublication(j.Source.Camera);if(i!=null&&i.track)return{source:j.Source.Camera,participant:n,publication:i}}return null}getVideoTrackRefs(){const t=[],n=this.getLocalParticipant();if(n){const r=n.getTrackPublication(j.Source.Camera);r!=null&&r.track&&t.push({source:j.Source.Camera,participant:n,publication:r});const s=n.getTrackPublication(j.Source.ScreenShare);s!=null&&s.track&&t.push({source:j.Source.ScreenShare,participant:n,publication:s})}const i=this.getRemoteParticipants();for(const r of i){const s=r.getTrackPublication(j.Source.Camera);s!=null&&s.track&&t.push({source:j.Source.Camera,participant:r,publication:s});const o=r.getTrackPublication(j.Source.ScreenShare);o!=null&&o.track&&t.push({source:j.Source.ScreenShare,participant:r,publication:o})}return t}getCameraTrackRefs(){return this.getVideoTrackRefs().filter(t=>t.source===j.Source.Camera)}getScreenShareTrackRefs(){return this.getVideoTrackRefs().filter(t=>t.source===j.Source.ScreenShare)}getPublishPermissions(){const t=this.getLocalParticipant();if(!t)return{camera:!1,microphone:!1,screenShare:!1,data:!1};const n=t.permissions;if(!n)return{camera:!0,microphone:!0,screenShare:!0,data:!0};const i=r=>!!n.canPublish&&(n.canPublishSources.length===0||n.canPublishSources.includes(r));return{camera:i(1),microphone:i(2),screenShare:i(3),data:n.canPublishData??!1}}canPublishSource(t){return this.getPublishPermissions()[t]}}class bw{constructor(t,n){Ne(this,"room",null);Ne(this,"config");Ne(this,"eventEmitter");Ne(this,"connectionState",ze.Disconnected);Ne(this,"isConnected",!1);Ne(this,"currentAgentInfo",null);this.config=t,this.eventEmitter=n,this.initializeRoom()}initializeRoom(){this.room=new vi({adaptiveStream:!1,stopLocalTrackOnUnpublish:!1,audioCaptureDefaults:{autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0},publishDefaults:{stopMicTrackOnMute:!1,preConnectBuffer:!0}}),this.setupRoomEventListeners()}setupRoomEventListeners(){this.room&&(this.room.on(F.Connected,()=>{this.connectionState=ze.Connected,this.isConnected=!0,console.log("📡 ConnectionManager: Emitting connection.connected event"),this.eventEmitter.emit("connection.connected")}),this.room.on(F.Disconnected,t=>{console.log("ConnectionManager: Room disconnected, reason:",t),this.connectionState=ze.Disconnected,this.isConnected=!1,t&&console.log("ConnectionManager: Disconnect reason details:",{reason:t.toString(),connectionState:this.connectionState}),this.eventEmitter.emit("connection.disconnected",t==null?void 0:t.toString())}),this.room.on(F.ConnectionStateChanged,t=>{this.connectionState=t,t===ze.Connecting&&this.eventEmitter.emit("connection.connecting")}),this.room.on(F.ParticipantConnected,t=>{const n={id:t.identity,name:t.name||t.identity,isLocal:!1};this.eventEmitter.emit("participant.joined",n)}),this.room.on(F.ParticipantDisconnected,t=>{const n={id:t.identity,name:t.name||t.identity,isLocal:!1};this.eventEmitter.emit("participant.left",n)}),this.room.on(F.LocalTrackPublished,t=>{console.log("ConnectionManager: Local track published:",t.source),t.source===j.Source.ScreenShare?this.eventEmitter.emit("track.unmuted",{source:"screenShare",enabled:!0}):t.source===j.Source.Microphone&&(console.log("✅ ConnectionManager: Local MICROPHONE track RE-PUBLISHED at:",new Date().toISOString()),console.log(" Track restart complete - audio should resume"))}),this.room.on(F.LocalTrackUnpublished,t=>{console.log(" ConnectionManager: Local track unpublished:",t.source),t.source===j.Source.ScreenShare?this.eventEmitter.emit("track.muted",{source:"screenShare",enabled:!1}):t.source===j.Source.Microphone&&(console.warn("⚠️ ConnectionManager: Local MICROPHONE track UNPUBLISHED at:",new Date().toISOString()),console.log(" ⚠️ WARNING: This will cause audio disruption!"))}),this.room.on(F.LocalAudioSilenceDetected,()=>{var t,n;console.log("🔇 ConnectionManager: Local audio silence detected at:",new Date().toISOString()),console.log(" Remote participants count:",(t=this.room)==null?void 0:t.remoteParticipants.size),(n=this.room)==null||n.remoteParticipants.forEach(i=>{console.log(" Remote participant:",i.identity,{audioTracks:i.audioTrackPublications.size,hasAudio:Array.from(i.audioTrackPublications.values()).some(r=>r.track)})})}),this.room.on(F.TrackSubscribed,(t,n,i)=>{var r,s;console.log("🎵 ConnectionManager: Track subscribed:",{trackKind:t.kind,trackSource:t.source,participantIdentity:i.identity,isAgent:(r=i.identity)==null?void 0:r.startsWith("agent-")}),this.eventEmitter.emit("media.track.subscribed",{id:t.sid||n.trackSid,kind:t.kind,source:((s=t.source)==null?void 0:s.toString())||"unknown",participantId:i.identity,isEnabled:!t.isMuted,isMuted:t.isMuted})}),this.room.on(F.TrackUnsubscribed,(t,n,i)=>{var r;console.log("🔇 ConnectionManager: Track unsubscribed:",{trackKind:t.kind,participantIdentity:i.identity}),this.eventEmitter.emit("media.track.unsubscribed",{id:t.sid||n.trackSid,kind:t.kind,source:((r=t.source)==null?void 0:r.toString())||"unknown",participantId:i.identity,isEnabled:!1,isMuted:!0})}))}async fetchConnectionDetails(t,n,i,r){try{const s={agent_id:t,participant_name:n,participant_metadata:r||{user_id:""},modality:i[0],modalities:i},o={accept:"application/json","Content-Type":"application/json"};if(this.config.authToken)o.Authorization=`Bearer ${this.config.authToken}`;else if(this.config.appId&&this.config.appSecret)o["X-APP-ID"]=this.config.appId,o["X-APP-SECRET"]=this.config.appSecret;else throw new Error("Either authToken or both appId and appSecret must be provided");const a=await fetch(`${this.config.baseUrl}/api/live/agent/session`,{method:"POST",headers:o,body:JSON.stringify(s)});if(!a.ok){let u=`HTTP ${a.status}: Failed to fetch connection details`;try{const d=await a.json();d&&(d.error?u=`API Error: ${d.error}`:d.detail?u=`API Error: ${d.detail}`:d.message&&(u=`API Error: ${d.message}`))}catch{try{const h=await a.text();h&&(u=`API Error: ${h}`)}catch{}}throw new Error(u)}const c=await a.json();let l;return c.agent_info&&(l={id:c.agent_info.agent_info.id,name:c.agent_info.agent_info.name,capabilities:c.agent_info.capabilities,modality_supported:c.agent_info.modality_supported,session_settings:c.agent_info.session_settings||{}},this.currentAgentInfo=l),{serverUrl:c.wss_url,participantToken:c.token,voxketSessionId:c.session_id,agentInfo:l}}catch(s){console.error("ConnectionManager: fetchConnectionDetails failed:",s);const o=new tt(`Failed to fetch connection details: ${s instanceof Error?s.message:"Unknown error"}`,"CONNECTION_FAILED",s);throw this.eventEmitter.emit("connection.error",o),o}}async connect(t,n,i,r){var s;try{this.eventEmitter.emit("connection.connecting");const o=await this.fetchConnectionDetails(t,n,i,r);return await((s=this.room)==null?void 0:s.connect(o.serverUrl,o.participantToken)),this.isConnected=!0,o}catch(o){console.error("ConnectionManager: Connection failed:",o);const a=new tt(`Failed to connect to Voxket services: ${o instanceof Error?o.message:"Unknown error"}`,"CONNECTION_FAILED",o);throw this.eventEmitter.emit("connection.error",a),a}}async disconnect(){try{this.room&&await this.room.disconnect(),this.isConnected=!1,this.currentAgentInfo=null,this.initializeRoom(),this.eventEmitter.emit("connection.disconnected")}catch(t){console.error("ConnectionManager: Disconnect failed:",t);const n=new tt("Failed to disconnect properly","NETWORK_ERROR",t);throw this.eventEmitter.emit("connection.error",n),n}}getRoom(){return this.room}getConnectionState(){return this.connectionState}get connected(){return this.isConnected&&this.connectionState===ze.Connected}getCurrentAgentInfo(){return this.currentAgentInfo}getParticipants(){if(!this.room)return[];const t=[];return this.room.localParticipant&&t.push({id:this.room.localParticipant.identity,name:this.room.localParticipant.name||this.room.localParticipant.identity,isLocal:!0}),this.room.remoteParticipants.forEach(n=>{t.push({id:n.identity,name:n.name||n.identity,isLocal:!1})}),t}updateConfig(t){this.config={...this.config,...t}}}class yw{constructor(t,n,i){Ne(this,"room",null);Ne(this,"eventEmitter");Ne(this,"chatManager");Ne(this,"agentManager");Ne(this,"textStreamHandlersRegistered",!1);Ne(this,"_eventEmitters",new Map);this.eventEmitter=t,this.chatManager=n,this.agentManager=i}setRoom(t){this.room=t,t&&!this.textStreamHandlersRegistered&&(console.log("📡 StreamHandlerManager: Auto-registering handlers on room set"),this.setupTextStreamHandlers())}areHandlersRegistered(){return this.textStreamHandlersRegistered}resetHandlersFlag(){this.textStreamHandlersRegistered=!1}setupTextStreamHandlers(){this.room&&(this.registerChatHandler(),this.registerTranscriptionHandler(),this.registerSuggestedResponseHandler(),this.registerAgentStateHandler(),this.registerFunctionToolsHandler(),this.registerImageTextStreamHandler(),this.registerImageByteStreamHandler(),this.registerCommonTopicHandlers(),this.registerWildcardHandler(),this.textStreamHandlersRegistered=!0)}registerChatHandler(){try{this.room.registerTextStreamHandler("lk.chat",async(t,n)=>{try{const i=await t.readAll(),r={id:`msg_${Date.now()}_${n.identity||"user"}_${Math.random().toString(36).substr(2,9)}`,content:i,timestamp:new Date,sender:{id:n.identity||"user",name:n.identity||"User",type:"participant"},metadata:{topic:"lk.chat"}};this.eventEmitter.emit("chat.message.received",r)}catch(i){console.error("StreamHandlerManager: Failed to process lk.chat message:",i)}})}catch(t){console.warn("StreamHandlerManager: lk.chat handler already registered, skipping:",t)}}registerTranscriptionHandler(){try{console.log("📡 StreamHandlerManager: Registering lk.transcription handler"),this.room.registerTextStreamHandler("lk.transcription",async(t,n)=>{var i,r;console.log("💬 StreamHandlerManager: Received lk.transcription stream from:",n.identity);try{const s=n.identity===((r=(i=this.room)==null?void 0:i.localParticipant)==null?void 0:r.identity),o=n.identity,a=this.chatManager.getActiveTranscription(o);let c,l=!0;a?(c=a.messageId,l=!1):(c=`msg_${s?"user":"agent"}_${n.identity}_${Date.now()}`,this.chatManager.trackTranscription(o,c));let u="";const d=this.agentManager.getCurrentAgentInfo(),h=(d==null?void 0:d.name)||n.identity||"AI Assistant",f=s?"participant":"agent",g=s?"User":h,p={id:c,content:"",timestamp:new Date,sender:{id:n.identity||"unknown",name:g,type:f},metadata:{topic:"lk.transcription",streaming:!0}};l&&this.eventEmitter.emit("chat.message.received",p);for await(const S of t){u+=S;const k=this.chatManager.convertMarkdownToText(u),x={...p,content:k,metadata:{...p.metadata,streaming:!0}};this.eventEmitter.emit("chat.message.updated",x)}const v=this.chatManager.convertMarkdownToText(u),b={...p,content:v,metadata:{...p.metadata,streaming:!1}};this.eventEmitter.emit("chat.message.updated",b);const w={id:c,text:v,isFinal:!0,startTime:p.timestamp.getTime(),participantId:n.identity||"agent"};this.eventEmitter.emit("transcription.received",w)}catch(s){console.error("StreamHandlerManager: Failed to process lk.transcription message:",s);try{const o=await t.readAll(),a=this.agentManager.getCurrentAgentInfo(),c=(a==null?void 0:a.name)||n.identity||"AI Assistant",l={id:`msg_${Date.now()}_agent_transcription_${Math.random().toString(36).substr(2,9)}`,content:o,timestamp:new Date,sender:{id:n.identity||"agent",name:c,type:"agent"},metadata:{topic:"lk.transcription"}};this.eventEmitter.emit("chat.message.received",l),console.log("💬 StreamHandlerManager: Emitted chat.message.received:",{id:l.id,sender:l.sender.name,contentLength:l.content.length,preview:l.content.substring(0,50)});const u={id:l.id,text:l.content,isFinal:!0,startTime:l.timestamp.getTime(),participantId:n.identity||"agent"};this.eventEmitter.emit("transcription.received",u),console.log("📝 StreamHandlerManager: Emitted transcription.received:",{id:u.id,textLength:u.text.length})}catch(o){console.error("StreamHandlerManager: Fallback failed for lk.transcription:",o)}}})}catch(t){console.warn("StreamHandlerManager: lk.transcription handler already registered, skipping:",t)}}registerSuggestedResponseHandler(){try{this.room.registerTextStreamHandler("suggested_response",async t=>{const n=await t.readAll();let i=[];try{i=["tes","hello how are you","algebra make me learn that","what is the meaning of life"]}catch(r){console.warn("StreamHandlerManager: Failed to parse suggested_response:",r,n)}this.eventEmitter.emit("suggested.response",i)})}catch(t){console.warn("StreamHandlerManager: suggested_response handler already registered, skipping:",t)}}registerAgentStateHandler(){try{this.room.registerTextStreamHandler("agent_state_changed",async(t,n)=>{const i=await t.readAll();let r={};try{r=typeof i=="string"?JSON.parse(i.replace(/'/g,'"')):i}catch(s){console.warn("StreamHandlerManager: Failed to parse agent_state_changed:",s,i)}this.agentManager.handleAgentStateChanged(r)})}catch(t){console.warn("StreamHandlerManager: agent_state_changed handler already registered, skipping:",t)}}registerFunctionToolsHandler(){try{this.room.registerTextStreamHandler("function_tools_executed",async(t,n)=>{const i=await t.readAll();let r={};try{if(typeof i=="string")try{r=JSON.parse(i)}catch(s){let o=i;try{o=o.replace(/\bTrue\b/g,"true"),o=o.replace(/\bFalse\b/g,"false"),o=o.replace(/\bNone\b/g,"null");const a=o.replace(/\\"/g,"___ESCAPED_QUOTE___");let c="",l=!1;for(let u=0;u<a.length;u++){const d=a[u],h=u>0?a[u-1]:"";d==='"'&&h!=="\\"?(l=!l,c+=d):d==="'"&&h!=="\\"&&!l?c+='"':c+=d}o=c.replace(/___ESCAPED_QUOTE___/g,'\\"'),r=JSON.parse(o)}catch(a){console.warn("StreamHandlerManager: Enhanced parsing also failed:",a);try{let c=i.replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/\bNone\b/g,"null");r=new Function("return "+c)()}catch(c){throw console.error("StreamHandlerManager: All parsing methods failed:",c),s}}}else r=i}catch(s){console.warn("StreamHandlerManager: Failed to parse function_tool_executed:",s,i);let o=null;if(typeof i=="string"&&i.includes("visualization_data"))try{const a=i.match(/"arguments":\s*"({.*?})"/);if(a){const c=a[1].replace(/\\"/g,'"');o=JSON.parse(c),console.log("🛠️ StreamHandlerManager: Extracted visualization data:",o)}}catch(a){console.warn("StreamHandlerManager: Failed to extract visualization data:",a)}r={type:"function_tools_executed",function_calls:[],function_call_outputs:[],created_at:Date.now()/1e3,parseError:!0,rawData:i,extractedVisualizationData:o}}this.eventEmitter.emit("tool.executed",r)})}catch(t){console.warn("StreamHandlerManager: function_tool_executed handler already registered, skipping:",t)}}registerImageTextStreamHandler(){try{this.room.registerTextStreamHandler("images",async(t,n)=>{try{const i=await t.readAll()}catch(i){console.error("StreamHandlerManager: Error processing images stream:",i)}})}catch(t){console.warn("StreamHandlerManager: images text handler already registered, skipping:",t)}}registerImageByteStreamHandler(){try{this.room.registerByteStreamHandler("images",async(t,n)=>{var i,r;try{const s=t.info,o={id:`img_${Date.now()}_${n.identity||"agent"}_${Math.random().toString(36).substr(2,9)}`,content:`🖼️ ${s.name||"Image"}`,sender:{id:n.identity||"agent",name:n.identity||"Agent",type:n.identity===((r=(i=this.room)==null?void 0:i.localParticipant)==null?void 0:r.identity)?"participant":"agent"},timestamp:new Date,metadata:{type:"attachment",fileName:s.name,fileSize:s.size,mimeType:s.mimeType,streamId:s.id,downloading:!0}};this.eventEmitter.emit("chat.message.received",o),t.onProgress&&(t.onProgress=d=>{const h={...o,metadata:{...o.metadata,downloadProgress:d||0}};this.eventEmitter.emit("chat.message.updated",h)});const a=[];for await(const d of t)a.push(d);const c=new Blob(a,{type:s.mimeType||"application/octet-stream"}),l=URL.createObjectURL(c),u={...o,metadata:{...o.metadata,downloading:!1,downloadProgress:1,downloadUrl:l,blob:c}};this.eventEmitter.emit("chat.message.updated",u)}catch(s){console.error("StreamHandlerManager: Error processing image attachment:",s)}})}catch(t){console.warn("StreamHandlerManager: image byte handler already registered, skipping:",t)}}registerCommonTopicHandlers(){["error","warning","status","system","debug","info"].forEach(n=>{try{this.room.registerTextStreamHandler(n,async(i,r)=>{try{const s=await i.readAll();if(console.log(`📝 StreamHandlerManager: Received '${n}' stream:`,s),n==="error"){let o={};try{o=typeof s=="string"?JSON.parse(s):s}catch{o={message:s}}console.warn("⚠️ StreamHandlerManager: Agent error:",o),this.eventEmitter.emit("agent.error",o)}else this.eventEmitter.emit("text.stream.received",{topic:n,data:s,participantInfo:r})}catch(s){console.error(`StreamHandlerManager: Failed to process '${n}' stream:`,s)}})}catch(i){console.warn(`StreamHandlerManager: Handler for '${n}' already registered, skipping:`,i)}})}registerWildcardHandler(){try{this.room.registerTextStreamHandler("*",async(t,n)=>{var i;try{const r=await t.readAll(),s=((i=t.info)==null?void 0:i.topic)||"unknown";if(this._eventEmitters.has(s)){const o=this._eventEmitters.get(s);try{o(r),console.log(`📝 StreamHandlerManager: Processed custom topic '${s}' via event emitter`)}catch(a){console.error(`StreamHandlerManager: Error in custom handler for topic '${s}':`,a)}}else console.log(`📝 StreamHandlerManager: Received unhandled text stream for topic '${s}':`,r),this.eventEmitter.emit("text.stream.unhandled",{topic:s,data:r,participantInfo:n})}catch(r){console.error("StreamHandlerManager: Failed to process unhandled text stream:",r)}})}catch(t){console.warn("StreamHandlerManager: Generic text stream handler already registered, skipping:",t)}}registerEventEmitter(t,n){if(!this.room)throw new Error("Room not available");this._eventEmitters.set(t,n),console.log(`📝 StreamHandlerManager: Stored handler for topic '${t}' in event emitters map`);try{this.room.registerTextStreamHandler(t,async i=>{try{const r=await i.readAll();console.log(`📝 StreamHandlerManager: Direct handler called for topic '${t}'`),n(r)}catch(r){console.error(`Error processing event for topic '${t}':`,r)}}),console.log(`📝 StreamHandlerManager: Successfully registered direct handler for topic '${t}'`)}catch(i){console.warn(`StreamHandlerManager: Direct handler registration failed for topic '${t}':`,i),console.log(`📝 StreamHandlerManager: Wildcard handler will process topic '${t}' instead`)}}getRegisteredEventEmitters(){return Array.from(this._eventEmitters.keys())}hasEventEmitter(t){return this._eventEmitters.has(t)}}const vw=_.createContext(null);function Ma({config:e,children:t,autoConnect:n=!1,client:i}){const[r,s]=_.useState(null),[o,a]=_.useState(!1),[c,l]=_.useState(!1),[u,d]=_.useState(null),[h,f]=_.useState(null),[g,p]=_.useState("idle"),[v,b]=_.useState(null),[w,S]=_.useState([]),[k,x]=_.useState([]),[C,M]=_.useState([]);_.useEffect(()=>{const H=i||new Mo(e);s(H);const E=R(H);return n&&!i&&P(H),()=>{E(),i||H.disconnect().catch(console.error)}},[e,n,i]);const R=H=>{const E=()=>{l(!0),d(null)},K=()=>{a(!0),l(!1),d(null)},Y=()=>{a(!1),l(!1),f(null),p("idle"),S([]),x([]),M([])},T=de=>{d(de),l(!1)},Z=de=>{f(de),p(de.state)},ne=de=>{p(de),h&&f({...h,state:de})},ie=(de,Me)=>{f(null),p("idle"),b(Me),S([]),x([]),M([])},re=de=>{S(Me=>[...Me,de])},X=de=>{S(Me=>Me.filter(ke=>ke.id!==de.id))},le=de=>{x(Me=>[...Me,de])},J=de=>{x(Me=>[...Me,de])},Re=de=>{console.log("📝 VoxketProvider: Received transcription:",de),M(Me=>Me.find(pe=>pe.id===de.id)?(console.log("📝 VoxketProvider: Duplicate transcription detected, skipping:",de.id),Me):(console.log("📝 VoxketProvider: Adding new transcription:",de.id),[...Me,de]))},B=()=>{console.log("🧹 VoxketProvider: Clearing chat messages and transcriptions"),x([]),M([])};return H.on("connection.connecting",E),H.on("connection.connected",K),H.on("connection.disconnected",Y),H.on("connection.error",T),H.on("session.created",Z),H.on("session.state.changed",ne),H.on("session.ended",ie),H.on("participant.joined",re),H.on("participant.left",X),H.on("chat.message.received",le),H.on("chat.message.sent",J),H.on("transcription.received",Re),H.on("chat.history.cleared",B),()=>{console.log("📝 VoxketProvider: Cleaning up event listeners"),H.off("connection.connecting",E),H.off("connection.connected",K),H.off("connection.disconnected",Y),H.off("connection.error",T),H.off("session.created",Z),H.off("session.state.changed",ne),H.off("session.ended",ie),H.off("participant.joined",re),H.off("participant.left",X),H.off("chat.message.received",le),H.off("chat.message.sent",J),H.off("chat.history.cleared",B),H.off("transcription.received",Re)}},P=async H=>{const E=H||r;if(E)try{await E.connect()}catch(K){console.error("Failed to connect:",K)}},G={client:r,isConnected:o,isConnecting:c,connectionError:u,currentSession:h,sessionState:g,sessionMetrics:v,participants:w,chatMessages:k,transcriptions:C,connect:()=>P(),disconnect:async()=>{if(r)try{await r.disconnect()}catch(H){console.error("Failed to disconnect:",H)}},createSession:async(H,E={})=>{if(!r)throw new Error("Client not initialized");const K={agentId:H,participantName:E.participantName||"User",metadata:E.metadata,modalities:E.modalities||["voice"]};return await r.createSession(K)},endSession:async()=>r?await r.endSession():null,sendChatMessage:async H=>{if(!r)throw new Error("Client not initialized");await r.sendChatMessage(H)},setMicrophoneEnabled:async H=>{if(!r)throw new Error("Client not initialized");await r.setMicrophoneEnabled(H)},setCameraEnabled:async H=>{if(!r)throw new Error("Client not initialized");await r.setCameraEnabled(H)},startScreenShare:async()=>{if(!r)throw new Error("Client not initialized");await r.startScreenShare()},stopScreenShare:async()=>{if(!r)throw new Error("Client not initialized");await r.stopScreenShare()}};return m.jsx(vw.Provider,{value:G,children:t})}function si(){const e=_.useContext(vw);if(!e)throw new Error("useVoxket must be used within a VoxketProvider");return e}const Oi=new WeakSet,du=new WeakSet;class xw{constructor(t,n){Ne(this,"renderedComponents",new Map);Ne(this,"config");Ne(this,"voxketClient");this.config=t,this.voxketClient=n}renderUI(t={}){const n=this.resolveTarget(t.target||"body"),i=this.getTargetKey(n);if(du.has(n)){console.warn("⚠️ UIRenderer: Target is already being processed, skipping renderUI");return}if(Oi.has(n)){console.log("✋ UIRenderer: Target already has a React root in registry, updating existing props...");const s=this.renderedComponents.get(i);if(s&&s.root){const o=this.buildWidgetProps(t);try{s.root.render(_.createElement(Ma,{config:this.config,autoConnect:t.autoStart||!1,client:this.voxketClient,children:_.createElement(Pa,o)})),console.log("✅ UIRenderer: Successfully updated existing widget with new props");return}catch(a){throw console.error("Error re-rendering existing widget:",a),new Error(`Failed to update existing widget: ${a instanceof Error?a.message:"Unknown error"}`)}}else console.warn("⚠️ Registry inconsistency detected, cleaning up"),Oi.delete(n)}let r=this.renderedComponents.get(i);if(r&&r.target===n&&Oi.has(n)){console.log("🔄 UIRenderer: Reusing existing React root for target:",i);const s=r.root,o=this.buildWidgetProps(t);try{s.render(_.createElement(Ma,{config:this.config,autoConnect:t.autoStart||!1,client:this.voxketClient,children:_.createElement(Pa,o)}))}catch(a){throw console.error("Error rendering Voxket widget:",a),new Error(`Failed to render Voxket widget: ${a instanceof Error?a.message:"Unknown error"}`)}return}du.add(n);try{if(r){console.log("🧹 UIRenderer: Cleaning up existing component for different target");try{r.root.unmount(),this.renderedComponents.delete(i),Oi.delete(r.target),n.innerHTML=""}catch(a){console.warn("Failed to cleanup existing root:",a)}}if(Oi.has(n)){console.warn("⚠️ UIRenderer: Target already in registry, skipping root creation");return}console.log("🆕 UIRenderer: Creating new React root for target:",i);const s=iC.createRoot(n);this.renderedComponents.set(i,{root:s,target:n}),Oi.add(n);const o=this.buildWidgetProps(t);if(!s||typeof s.render!="function")throw new Error("Invalid React root. Make sure React 18+ is properly installed and configured.");try{s.render(_.createElement(Ma,{config:this.config,autoConnect:t.autoStart||!1,client:this.voxketClient,children:_.createElement(Pa,o)}))}catch(a){throw console.error("Error rendering Voxket widget:",a),new Error(`Failed to render Voxket widget: ${a instanceof Error?a.message:"Unknown error"}`)}}finally{du.delete(n)}}removeUI(t){const n=t?this.resolveTarget(t):null;if(n){const i=this.getTargetKey(n),r=this.renderedComponents.get(i);if(r){console.log("🗑️ UIRenderer: Removing UI for target:",i),this.renderedComponents.delete(i);const s=r.target,o=()=>{var a;try{s&&s.isConnected?typeof((a=r.root)==null?void 0:a.unmount)=="function"&&(r.root.unmount(),console.log("✅ UIRenderer: UI unmounted for target:",i)):console.log("ℹ️ UIRenderer: Target element already disconnected, skipping unmount")}catch(c){console.warn("Failed to unmount React root:",c)}finally{requestAnimationFrame(()=>{try{n.querySelectorAll('[id*="voxket"], [class*="voxket"], .fixed.inset-0.z-50').forEach(l=>{try{l.parentNode&&l.remove()}catch(u){console.warn("Failed to remove element:",u)}})}finally{Oi.delete(n)}})}};queueMicrotask(()=>setTimeout(o,0))}else console.log("ℹ️ UIRenderer: No component found for target, cleaning registry:",i),Oi.delete(n),n.isConnected&&n.hasChildNodes()&&(n.innerHTML="");n===document.body&&n.querySelectorAll(".fixed.z-50, .fixed.inset-0").forEach(o=>{if(o.classList.contains("bg-black")&&(o.classList.contains("backdrop-blur-sm")||o.classList.contains("bg-opacity-30")))try{o.remove()}catch(a){console.warn("Failed to remove fixed element:",a)}})}}removeAllUI(){for(const[t,n]of this.renderedComponents)n.root.unmount();this.renderedComponents.clear(),this.forceCleanupFullscreenOverlays()}forceCleanupFullscreenOverlays(){document.body.querySelectorAll(".fixed.inset-0.z-50").forEach(n=>{if(n.classList.contains("bg-black")&&(n.classList.contains("backdrop-blur-sm")||n.classList.contains("bg-opacity-30")))try{n.remove()}catch(i){console.warn("Failed to remove overlay:",i)}})}resolveTarget(t){if(typeof t=="string"){const n=document.querySelector(t);if(!n)throw new Error(`Target element not found: ${t}`);return n}return t}getTargetKey(t){return t.id?t.id:t.className?t.tagName+"_"+t.className.replace(/\s+/g,"_"):t.tagName+"_"+t.outerHTML.length%1e3}buildWidgetProps(t){var i,r,s;const n=this.config;return{agentId:t.agentId||n.agentId||"default-agent",participantName:t.participantName||n.participantName||"User",baseUrl:this.config.baseUrl,appSecret:this.config.appSecret,appId:this.config.appId,className:t.className,theme:typeof t.theme=="string"?t.theme:void 0,modalities:t.modality||n.modalities||["voice"],suportsChatInput:((i=t.modality)==null?void 0:i.includes("chat"))!==!1,suportsVideoInput:((r=t.modality)==null?void 0:r.includes("video"))===!0,suportsScreenShare:((s=t.modality)==null?void 0:s.includes("screen_share"))===!0,autoStart:t.autoStart,displayType:t.displayType||"widget",popupPosition:t.popupPosition||"bottom-right",popupTriggerText:t.popupTriggerText||"Open Chat",popupModalityMode:t.popupModalityMode||"all",width:t.width,height:t.height,onDisplayTypeChange:t.onDisplayTypeChange,prompts:t.prompts,statusMessage:t.statusMessage,welcomeTitle:t.welcomeTitle,welcomeSubTitle:t.welcomeSubTitle,loadingText:t.loadingText,voxketClient:this.voxketClient,participantMetadata:t.participantMetadata}}updateConfig(t){this.config=t}}class kw{constructor(t){Ne(this,"agentState","idle");Ne(this,"isAgentConnected",!1);Ne(this,"currentAgentInfo",null);Ne(this,"eventEmitter");this.eventEmitter=t}getAgentState(){return this.agentState}setAgentState(t){this.agentState!==t&&(this.agentState=t,this.eventEmitter.emit("agent.state.changed",{state:t}))}getIsAgentConnected(){return this.isAgentConnected}setAgentConnected(t){this.isAgentConnected=t,console.log(t?"🤖 AgentManager: Agent marked as connected":"🤖 AgentManager: Agent marked as disconnected")}getCurrentAgentInfo(){return this.currentAgentInfo}setCurrentAgentInfo(t){this.currentAgentInfo=t,console.log("📝 AgentManager: Agent info updated:",t)}reset(){this.agentState="idle",this.isAgentConnected=!1,this.currentAgentInfo=null,console.log("🔄 AgentManager: Agent state reset")}handleAgentStateChanged(t){this.isAgentConnected||(this.setAgentConnected(!0),this.eventEmitter.emit("agent.connected",t)),t.new_state==="speaking"?(this.setAgentState("speaking"),this.eventEmitter.emit("agent.speaking",t)):t.new_state==="thinking"?(this.setAgentState("thinking"),this.eventEmitter.emit("agent.thinking",t)):(t.new_state==="idle"||t.new_state==="listening")&&this.setAgentState("idle")}}class Mo extends Sf{constructor(n){super();Ne(this,"config");Ne(this,"pluginManager");Ne(this,"rpcManager");Ne(this,"chatManager");Ne(this,"mediaManager");Ne(this,"connectionManager");Ne(this,"streamHandlerManager");Ne(this,"uiRenderer");Ne(this,"agentManager");Ne(this,"currentSession",null);if(!n.authToken&&(!n.appId||!n.appSecret))throw new Error("Either authToken or both appId and appSecret must be provided");this.config=n,this.chatManager=new mw(this,n.participantName||"User"),this.mediaManager=new gw(this),this.agentManager=new kw(this),this.connectionManager=new bw({baseUrl:n.baseUrl,appId:n.appId,appSecret:n.appSecret,authToken:n.authToken},this),this.streamHandlerManager=new yw(this,this.chatManager,this.agentManager),this.uiRenderer=new xw(n,this),this.pluginManager=new fw(this),this.rpcManager=new pw,this.setupEventListeners(),this.setupRpcEventForwarding()}setupEventListeners(){this.on("connection.connected",()=>{var i,r,s,o,a,c,l;if(console.log("🔌 VoxketClient: connection.connected event fired",{hasSession:!!this.currentSession,sessionState:(i=this.currentSession)==null?void 0:i.state,sessionId:(r=this.currentSession)==null?void 0:r.id}),(o=(s=this.config).onConnected)==null||o.call(s),this.currentSession&&this.currentSession.state==="connecting"){const u=this.currentSession.state;this.currentSession.state="connected",this.emit("session.state.changed","connected",u),console.log("✅ VoxketClient: Session state changed to connected")}else console.log("⚠️ VoxketClient: Cannot update session state",{hasSession:!!this.currentSession,currentState:(a=this.currentSession)==null?void 0:a.state});const n=this.connectionManager.getRoom();if(n){this.rpcManager.setRoom(n);const u=Array.from(n.remoteParticipants.values()).find(d=>{var h;return(h=d.identity)==null?void 0:h.startsWith("agent-")});u&&(console.log("🤖 VoxketClient: Agent already in room, marking as connected",{agentIdentity:u.identity,hasAudioTrack:u.audioTrackPublications.size>0}),this.agentManager.getIsAgentConnected()||(this.agentManager.setAgentConnected(!0),this.emit("agent.connected",{identity:u.identity})))}(l=(c=this.currentSession)==null?void 0:c.activeModalities)!=null&&l.includes("voice")&&setTimeout(async()=>{try{this.mediaManager.getLocalParticipant()&&(this.mediaManager.isMicrophoneEnabled||(await this.mediaManager.setMicrophoneEnabled(!0),this.emit("track.unmuted",{source:"microphone",enabled:!0}),console.log("🎤 VoxketClient: Microphone enabled after connection")))}catch(u){console.warn("VoxketClient: Failed to enable microphone after room connection:",u)}},100)}),this.on("connection.disconnected",n=>{var i,r,s;(r=(i=this.config).onDisconnected)==null||r.call(i,n),this.streamHandlerManager.resetHandlersFlag(),this.agentManager.reset(),this.chatManager.clearChatMessages(),n&&console.log("🔍 VoxketClient: Disconnect reason details:",{reason:n.toString(),currentSession:(s=this.currentSession)==null?void 0:s.id})}),this.on("connection.error",n=>{var i,r;(r=(i=this.config).onError)==null||r.call(i,n)}),this.on("chat.message.received",n=>{var i,r;this.chatManager.addChatMessage(n),(r=(i=this.config).onMessageReceived)==null||r.call(i,n)}),this.on("chat.message.updated",n=>{this.chatManager.updateChatMessage(n)}),this.on("chat.message.sent",n=>{this.chatManager.addChatMessage(n)}),this.on("transcription.received",n=>{var i,r;(r=(i=this.config).onTranscriptionReceived)==null||r.call(i,n)}),this.on("session.state.changed",n=>{var i,r;(r=(i=this.config).onSessionStateChanged)==null||r.call(i,n)}),this.on("session.created",n=>{var i,r;(r=(i=this.config).onSessionStart)==null||r.call(i,n.id)}),this.on("session.ended",(n,i)=>{var r,s;(s=(r=this.config).onSessionEnd)==null||s.call(r,i)}),this.on("participant.joined",n=>{var i,r;(r=(i=this.config).onUserJoined)==null||r.call(i,n.id)}),this.on("participant.left",n=>{var i,r;(r=(i=this.config).onUserLeft)==null||r.call(i,n.id)})}setupRpcEventForwarding(){if(!this.rpcManager){console.warn("RpcManager not initialized, skipping event forwarding setup");return}this.rpcManager.on("rpc.method.registered",n=>this.emit("rpc.method.registered",n)),this.rpcManager.on("rpc.method.called",n=>this.emit("rpc.method.called",n)),this.rpcManager.on("rpc.interaction.started",n=>this.emit("rpc.interaction.started",n)),this.rpcManager.on("rpc.interaction.completed",n=>this.emit("rpc.interaction.completed",n)),this.rpcManager.on("rpc.interaction.timeout",n=>this.emit("rpc.interaction.timeout",n)),this.rpcManager.on("rpc.interaction.dismissed",n=>this.emit("rpc.interaction.dismissed",n))}async connect(n,i,r,s){const o=n||this.config.agentId||"default-agent",a=i||this.config.participantName||"User",c=r||this.config.modalities||["voice"],l=s||this.config.participantMetadata,u=await this.connectionManager.connect(o,a,c,l),d=this.connectionManager.getRoom();return this.chatManager.setRoom(d),this.mediaManager.setRoom(d),this.streamHandlerManager.setRoom(d),u.agentInfo&&this.agentManager.setCurrentAgentInfo(u.agentInfo),u}async disconnect(){await this.connectionManager.disconnect(),this.currentSession=null;const n=this.connectionManager.getRoom();this.chatManager.setRoom(n),this.mediaManager.setRoom(n),this.streamHandlerManager.setRoom(n)}async createSession(n){var i,r;try{const s=await this.connect(n.agentId,n.participantName,n.modalities,n.participantMetadata),o={id:s.voxketSessionId,agentId:n.agentId,state:"connecting",startedAt:new Date,metadata:n.metadata||{},activeModalities:n.modalities||["voice"],agentInfo:s.agentInfo||this.agentManager.getCurrentAgentInfo()};this.currentSession=o,this.emit("session.created",o);const a=this.connectionManager.getRoom();if(a&&(a.state!=="connected"?(console.log("⏳ VoxketClient: Waiting for room to connect..."),await new Promise((l,u)=>{const d=setTimeout(()=>{u(new Error("Room connection timeout"))},1e4),h=()=>{clearTimeout(d),a.off("connected",h),a.off("disconnected",f),console.log("✅ VoxketClient: Room connected successfully"),l()},f=()=>{clearTimeout(d),a.off("connected",h),a.off("disconnected",f),u(new Error("Room disconnected while waiting for connection"))};a.once("connected",h),a.once("disconnected",f)})):console.log("✅ VoxketClient: Room already connected"),this.currentSession.state="connected",this.emit("session.state.changed","connected","connecting"),console.log("⏳ VoxketClient: Waiting for agent to connect..."),await new Promise(l=>{const u=setTimeout(()=>{console.warn("⚠️ VoxketClient: Agent connection timeout (30s), continuing anyway"),l(!1)},3e4),d=()=>{clearTimeout(u),this.off("agent.connected",d),this.off("participant.joined",h),console.log("✅ VoxketClient: Agent connected and ready"),l(!0)},h=f=>{var g,p;((g=f.id)!=null&&g.startsWith("agent-")||(p=f.name)!=null&&p.toLowerCase().includes("agent"))&&(clearTimeout(u),this.off("agent.connected",d),this.off("participant.joined",h),console.log("✅ VoxketClient: Agent participant joined:",f.name||f.id),l(!0))};this.once("agent.connected",d),this.on("participant.joined",h),this.agentManager.getIsAgentConnected()&&(clearTimeout(u),this.off("agent.connected",d),this.off("participant.joined",h),console.log("✅ VoxketClient: Agent already connected"),l(!0))})&&(this.currentSession.state="active",this.emit("session.state.changed","active","connected"))),(i=n.modalities)!=null&&i.includes("voice"))try{await this.mediaManager.setMicrophoneEnabled(!0),this.emit("track.unmuted",{source:"microphone",enabled:!0}),console.log("🎤 VoxketClient: Microphone enabled successfully")}catch(c){console.warn("VoxketClient: Failed to enable microphone, but continuing with session:",c)}if((r=n.modalities)!=null&&r.includes("video"))try{await new Promise(c=>setTimeout(c,200)),await this.mediaManager.enableCamera(),console.log("🎥 VoxketClient: Camera enabled successfully")}catch(c){console.warn("VoxketClient: Failed to enable camera, but continuing with session:",c)}return o}catch(s){throw console.error("VoxketClient: Failed to create session:",s),s instanceof tt?s:s instanceof TypeError&&s.message.includes("fetch")?new tt("Network connection failed","CONNECTION_FAILED",s):s instanceof Error&&s.message.includes("Failed to fetch connection details")?new tt(`API connection failed: ${s.message}`,"CONNECTION_FAILED",s):new tt(`Failed to create session: ${s instanceof Error?s.message:"Unknown error"}`,"SESSION_NOT_FOUND",s)}}async startSession(n,i){const r={agentId:n||this.config.agentId||"default-agent",participantName:(i==null?void 0:i.participantName)||this.config.participantName||"User",modalities:(i==null?void 0:i.modalities)||this.config.modalities||["voice","chat"],metadata:i==null?void 0:i.metadata,participantMetadata:i==null?void 0:i.participantMetadata};return this.createSession(r)}async endSession(){var n,i;if(!this.currentSession)return null;try{const r={sessionId:this.currentSession.id,duration:Date.now()-(((n=this.currentSession.startedAt)==null?void 0:n.getTime())||0),messageCount:0,participantCount:((i=this.connectionManager.getRoom())==null?void 0:i.remoteParticipants.size)||0,audioQuality:{avgBitrate:64e3,avgLatency:150,packetLoss:.01,jitter:.05},videoQuality:{avgBitrate:5e5,avgLatency:150,packetLoss:.01,jitter:.05},networkStats:{totalBytesReceived:0,totalBytesSent:0,connectionType:"webrtc",avgRoundTripTime:150},events:[]};return this.currentSession.endedAt=new Date,this.currentSession.state="disconnected",this.emit("session.ended",this.currentSession,r),await this.disconnect(),r}catch(r){throw new tt("Failed to end session","SESSION_NOT_FOUND",r)}}getCurrentSession(){return this.currentSession}getSessionMetrics(){var n,i;return this.currentSession?{sessionId:this.currentSession.id,duration:Date.now()-(((n=this.currentSession.startedAt)==null?void 0:n.getTime())||0),messageCount:0,participantCount:((i=this.connectionManager.getRoom())==null?void 0:i.remoteParticipants.size)||0,audioQuality:{avgBitrate:64e3,avgLatency:150,packetLoss:.01,jitter:.05},videoQuality:{avgBitrate:5e5,avgLatency:150,packetLoss:.01,jitter:.05},networkStats:{totalBytesReceived:0,totalBytesSent:0,connectionType:"webrtc",avgRoundTripTime:150},events:[]}:null}async sendMessage(n,i){if(!this.currentSession)throw new tt("No active session","SESSION_NOT_FOUND");return this.dismissCurrentInteraction(),this.chatManager.sendMessage(n,i)}async sendChatMessage(n,i){return this.sendMessage(n,i)}async sendAttachments(n,i){if(!this.currentSession)throw new tt("No active session","SESSION_NOT_FOUND");return this.dismissCurrentInteraction(),this.chatManager.sendAttachments(n,i)}async sendAttachment(n,i){return this.chatManager.sendAttachment(n,i)}getChatMessages(){return this.chatManager.getChatMessages()}addChatMessage(n){this.chatManager.addChatMessage(n)}updateChatMessage(n){this.chatManager.updateChatMessage(n)}clearChatMessages(){this.chatManager.clearChatMessages(),this.dismissCurrentInteraction(),this.uiRenderer.removeAllUI()}toggleMicrophone(n){return this.mediaManager.toggleMicrophone(n)}async setMicrophoneEnabled(n){return this.mediaManager.setMicrophoneEnabled(n)}toggleCamera(n){return this.mediaManager.toggleCamera(n)}async setCameraEnabled(n){return this.mediaManager.setCameraEnabled(n)}async enableCamera(){return this.mediaManager.enableCamera()}async disableCamera(){return this.mediaManager.disableCamera()}async startScreenShare(){return this.mediaManager.startScreenShare()}async stopScreenShare(){return this.mediaManager.stopScreenShare()}async getAudioInputDevices(){return this.mediaManager.getAudioInputDevices()}async getVideoInputDevices(){return this.mediaManager.getVideoInputDevices()}async setAudioInputDevice(n){return this.mediaManager.setAudioInputDevice(n)}async setVideoInputDevice(n){return this.mediaManager.setVideoInputDevice(n)}get isMicrophoneEnabled(){return this.mediaManager.isMicrophoneEnabled}get isCameraEnabled(){return this.mediaManager.isCameraEnabled}get isScreenShareEnabled(){return this.mediaManager.isScreenShareEnabled}getMicrophoneTrack(){return this.mediaManager.getMicrophoneTrack()}getCameraTrack(){return this.mediaManager.getCameraTrack()}getScreenShareTrack(){return this.mediaManager.getScreenShareTrack()}getAgentAudioTrack(){return this.mediaManager.getAgentAudioTrack()}getAgentVideoTrack(){return this.mediaManager.getAgentVideoTrack()}getVideoTrackRefs(){return this.mediaManager.getVideoTrackRefs()}getCameraTrackRefs(){return this.mediaManager.getCameraTrackRefs()}getScreenShareTrackRefs(){return this.mediaManager.getScreenShareTrackRefs()}getPublishPermissions(){return this.mediaManager.getPublishPermissions()}canPublishSource(n){return this.mediaManager.canPublishSource(n)}getLocalParticipant(){return this.mediaManager.getLocalParticipant()}getRemoteParticipants(){return this.mediaManager.getRemoteParticipants()}getParticipants(){return this.connectionManager.getParticipants()}getRoom(){return this.connectionManager.getRoom()}getConnectionState(){return this.connectionManager.getConnectionState()}get connected(){return this.connectionManager.connected}getCurrentAgentInfo(){return this.agentManager.getCurrentAgentInfo()}getIsAgentConnected(){return this.agentManager.getIsAgentConnected()}getAgentState(){return this.agentManager.getAgentState()}renderUI(n={}){this.uiRenderer.renderUI(n)}removeUI(n){this.uiRenderer.removeUI(n)}removeAllUI(){this.uiRenderer.removeAllUI()}async registerFrontendRPC(n,i,r="embedded"){return this.rpcManager.registerFrontendRPC(n,i,r)}getCurrentInteraction(){return this.rpcManager.getCurrentInteraction()}dismissCurrentInteraction(){this.rpcManager.dismissCurrentInteraction()}getRegisteredRpcMethods(){return this.rpcManager.getRegisteredMethods()}unregisterRpcMethod(n){this.rpcManager.unregisterMethod(n)}registerPlugin(n){this.pluginManager.register(n)}getPluginManager(){return this.pluginManager}registerEventListener(n,i){return this.on(n,i)}registerEventEmitter(n,i){return this.streamHandlerManager.registerEventEmitter(n,i)}getRegisteredEventEmitters(){return this.streamHandlerManager.getRegisteredEventEmitters()}hasEventEmitter(n){return this.streamHandlerManager.hasEventEmitter(n)}updateConfig(n){this.config={...this.config,...n},this.uiRenderer.updateConfig(this.config),this.connectionManager.updateConfig({baseUrl:this.config.baseUrl,appId:this.config.appId,appSecret:this.config.appSecret}),this.chatManager.setParticipantName(this.config.participantName||"User")}setParticipantMetadata(n){this.config.participantMetadata=n}getParticipantMetadata(){return this.config.participantMetadata}async startRecording(){var n;try{this.emit("recording.started",{sessionId:(n=this.currentSession)==null?void 0:n.id,timestamp:new Date})}catch(i){throw new tt("Failed to start recording","RECORDING_ERROR",i)}}async stopRecording(){var n;try{this.emit("recording.stopped",{sessionId:(n=this.currentSession)==null?void 0:n.id,timestamp:new Date})}catch(i){throw new tt("Failed to stop recording","RECORDING_ERROR",i)}}}const uV=je.create(KS),dV=je.create(df),hV=je.create(QS),fV=je.create(uw);function pV({theme:e,mode:t,loadingText:n,sessionState:i}){const r=on(e),s=()=>{if(i==="connected")return"Connecting to agent...";if(n)return n;switch(t){case"voice":return"Connecting to voice agent...";case"chat":return"Starting chat session...";case"video":return"Connecting to video call...";default:return"Connecting..."}};return m.jsxs("div",{className:"flex flex-col items-center justify-center h-full w-full p-8",children:[m.jsxs("div",{className:"text-center",children:[m.jsx("h3",{className:`text-lg font-semibold mb-2 ${r.text.accent}`,children:s()}),m.jsx("p",{className:`text-sm ${r.text.muted}`,children:"Please wait a moment..."})]}),m.jsxs("div",{className:"flex space-x-1 mt-4",children:[m.jsx("div",{className:"w-2 h-2 rounded-full animate-bounce bg-blue-500",style:{animationDelay:"0ms"}}),m.jsx("div",{className:"w-2 h-2 rounded-full animate-bounce bg-blue-500",style:{animationDelay:"150ms"}}),m.jsx("div",{className:"w-2 h-2 rounded-full animate-bounce bg-blue-500",style:{animationDelay:"300ms"}})]})]})}const mV=je.create(pV);function $b({children:e,theme:t,displayType:n="widget",onClose:i,popupPosition:r="bottom-right",onExpand:s}){const o=on(t);if(n==="fullscreen")return m.jsx("div",{className:"fixed inset-0 z-[9999] bg-black/40 bg-opacity-30 backdrop-blur-sm flex items-center justify-center p-8",onClick:a=>{a.target===a.currentTarget&&i&&i()},children:m.jsxs("div",{className:"w-full h-full max-w-7xl max-h-[95vh] rounded-2xl relative bg-transparent flex flex-col",onClick:a=>{a.stopPropagation()},children:[i&&m.jsx("button",{onClick:a=>{a.preventDefault(),a.stopPropagation(),i()},className:`absolute top-4 cursor-pointer right-4 z-[10000] w-12 h-12 rounded-full flex items-center justify-center transition-all duration-200 shadow-lg border backdrop-blur-sm ${t==="light"?"bg-white bg-opacity-90 text-gray-900 hover:bg-gray-100 border-gray-300":"bg-gray-900 bg-opacity-90 text-white hover:bg-gray-800 border-gray-700"}`,title:"Exit Fullscreen",type:"button",children:m.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("path",{d:"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"})})}),m.jsxs("div",{id:"voice-card",className:`voxket-widget-root theme-${t} ${o.card} w-full h-full flex flex-col rounded-xl shadow-2xl relative overflow-hidden`,"data-theme":t,style:{minHeight:"600px",height:"100%",contain:"layout style paint",overscrollBehavior:"contain",backgroundColor:t==="midnight"?"#161a25":void 0},children:[m.jsx("div",{className:o.cardTopGradient}),m.jsx("div",{className:o.cardPurpleBlur}),m.jsx("div",{className:o.cardPinkBlur}),m.jsx("div",{className:"relative z-10 flex flex-col h-full",children:e}),m.jsx("div",{className:o.cardPulse1}),m.jsx("div",{className:o.cardPulse2,style:{animationDelay:"1s"}})]})]})});if(n==="popup"){const a={"top-left":"top-4 left-4","top-right":"top-4 right-4","bottom-left":"bottom-4 left-4","bottom-right":"bottom-4 right-4"};return m.jsx("div",{className:"fixed rounded-2xl inset-0 z-[9999] pointer-events-none",children:m.jsxs("div",{className:`fixed rounded-2xl ${a[r]} pointer-events-auto`,children:[i&&m.jsx("button",{onClick:i,className:`absolute -top-2 -right-2 z-10 w-8 h-8 rounded-full flex items-center justify-center transition-all duration-200 text-sm shadow-lg border ${t==="light"?"bg-white bg-opacity-90 text-gray-900 hover:bg-gray-100 border-gray-300":"bg-gray-900 bg-opacity-90 text-white hover:bg-gray-800 border-gray-700"}`,children:"×"}),m.jsxs("div",{id:"voice-card",className:`voxket-widget-root theme-${t} ${o.card} rounded-2xl flex flex-col relative overflow-hidden`,"data-theme":t,style:{width:"350px",height:"500px",contain:"layout style paint",overscrollBehavior:"contain",backgroundColor:t==="midnight"?"#161a25":void 0},children:[m.jsx("div",{className:o.cardTopGradient}),m.jsx("div",{className:o.cardPurpleBlur}),m.jsx("div",{className:o.cardPinkBlur}),m.jsx("div",{className:"relative z-10 flex flex-col h-full w-full",children:e}),m.jsx("div",{className:o.cardPulse1}),m.jsx("div",{className:o.cardPulse2,style:{animationDelay:"1s"}})]})]})})}return m.jsxs("div",{id:"voice-card",className:`voxket-widget-root theme-${t} ${o.card} relative overflow-hidden w-full h-full`,"data-theme":t,style:{height:"100%",maxHeight:"100%",contain:"layout style paint",overscrollBehavior:"contain",backgroundColor:t==="midnight"?"#161a25":void 0},children:[m.jsx("div",{className:o.cardTopGradient}),m.jsx("div",{className:o.cardPurpleBlur}),m.jsx("div",{className:o.cardPinkBlur}),m.jsx("div",{className:"relative z-10 flex flex-col h-full w-full",children:e}),m.jsx("div",{className:o.cardPulse1}),m.jsx("div",{className:o.cardPulse2,style:{animationDelay:"1s"}})]})}function gV(e){if(typeof window>"u")return null;const{agentId:t,participantName:n,baseUrl:i,appSecret:r,appId:s,authToken:o,prompts:a,statusMessage:c,welcomeTitle:l,welcomeSubTitle:u,className:d,width:h,height:f,loadingText:g,suportsChatInput:p=!0,suportsVideoInput:v=!0,suportsScreenShare:b=!0,theme:w="vox",onSessionStart:S,onSessionEnd:k,enableSessionLogging:x=!0,onSessionLogsUpdate:C,onSessionMetricsUpdate:M,modalities:R=["voice"],displayType:P="widget",popupPosition:y="bottom-right",popupTriggerText:I="Open Chat",onPopupToggle:N,voxketClient:L,onDisplayTypeChange:U,participantMetadata:q,popupModalityMode:ue="all",popupTriggerLogoUrl:se}=e,[G,H]=D.useState(!1),[E,K]=D.useState(null),[Y,T]=D.useState(()=>{try{if(L)return!!L.getCurrentSession()}catch(A){console.error("Error checking existing session:",A)}return!1}),[Z,ne]=D.useState(!1),[ie,re]=D.useState(t||""),[X,le]=D.useState(n||"User"),[J,Re]=D.useState(()=>{try{if(L)return L.getCurrentSession()}catch(A){console.error("Error getting current session:",A)}return null}),[B,de]=D.useState(()=>{var A,z,te;try{if(L){const ge=L.getCurrentSession();if((A=ge==null?void 0:ge.activeModalities)!=null&&A.includes("chat"))return"chat";if((z=ge==null?void 0:ge.activeModalities)!=null&&z.includes("voice"))return"voice";if((te=ge==null?void 0:ge.activeModalities)!=null&&te.includes("video"))return"video"}}catch(ge){console.error("Error determining current mode:",ge)}return"welcome"}),[Me,ke]=D.useState(!1),[pe,Ce]=D.useState(!1),[Pe,Ee]=D.useState(()=>R.length===1?R[0]:null),[It,zt]=D.useState(!1);D.useEffect(()=>{P==="fullscreen"&&console.log("🎯 Widget: Switched to fullscreen mode")},[P]),D.useEffect(()=>{Y&&!Z?console.log("📊 Session started:",{currentMode:B,sessionId:J==null?void 0:J.id}):!Y&&!Z&&B==="welcome"&&console.log("📊 Returned to welcome screen")},[Y,B,Z]);const ot=D.useRef(null);if(!ot.current)try{if(L)console.log("🔄 Using existing VoxketClient to preserve session state"),ot.current=L;else if(!o&&(!s||!r)){const A="Missing required props: Either provide 'authToken' or both 'appId' and 'appSecret'";console.error("❌ VoxketClient creation failed:",A),K(new Error(A)),H(!0)}else if(i){const A={...o?{authToken:o}:{appId:s,appSecret:r},baseUrl:i,agentId:ie,participantName:X||"User",modalities:R,participantMetadata:q};console.log("🔧 Creating new VoxketClient with config:",{authMethod:o?"Bearer Token":"App Credentials",...o?{}:{appId:(s==null?void 0:s.substring(0,8))+"..."},baseUrl:i,agentId:ie,participantName:X||"User",modalities:R}),ot.current=new Mo(A)}else{const A="Missing required prop: baseUrl";console.error("❌ VoxketClient creation failed:",A),K(new Error(A)),H(!0)}}catch(A){console.error("❌ Failed to create VoxketClient:",A),K(A),H(!0)}const be=ot.current;D.useEffect(()=>{const A=ot.current;return()=>{A&&!L&&(console.log("🧹 Widget unmounting: disconnecting VoxketClient"),A.disconnect().catch(z=>{console.error("❌ Error during widget cleanup disconnect:",z)}))}},[L]);const Bt=D.useMemo(()=>P==="popup"&&Pe?[Pe]:R,[P,Pe,R]),at=D.useMemo(()=>{try{if(!be)return console.warn("⚠️ No VoxketClient available, creating fallback room"),new vi;const A=be.getRoom();return console.log("🏠 Widget: Room reference updated:",{roomExists:!!A,roomState:A==null?void 0:A.state,sessionStarted:Y,currentMode:B}),A||new vi}catch(A){return console.error("❌ Error getting room from client:",A),new vi}},[be,Y,B]);D.useEffect(()=>{if(at){const A=()=>{console.log("🏠 Widget: Room state changed:",{state:at.state,numParticipants:at.numParticipants,isConnected:at.state==="connected",sessionId:J==null?void 0:J.id})},z=(te,ge,ht)=>{console.log("🎵 Widget: Track subscribed:",{trackKind:te.kind,trackSource:te.source,participantSid:ht.sid,participantIdentity:ht.identity,sessionId:J==null?void 0:J.id})};return at.on(F.Connected,A),at.on(F.Disconnected,A),at.on(F.TrackSubscribed,z),()=>{at.off(F.Connected,A),at.off(F.Disconnected,A),at.off(F.TrackSubscribed,z)}}},[at,J==null?void 0:J.id]),D.useEffect(()=>{!Z&&B==="welcome"?console.log("🎬 Widget: Welcome screen ready"):Y&&B!=="welcome"&&console.log("🎬 Widget: Session mode active:",B)},[B,Z,Y]),D.useEffect(()=>{(B==="voice"||B==="video"||B==="chat")&&!J&&!Y&&!Z&&be&&!be.connected&&(console.log("🔄 Auto-correcting: Found orphaned mode without session, returning to welcome"),de("welcome"),ne(!1))},[B,J,Y,Z,be]);const{sessionMetrics:Q,sessionLogs:ae,logEvent:Ie}=hw({room:at,onSessionStart:S,onSessionEnd:k,enableConsoleLogging:x,enableLocalStorage:x,voxketSessionId:J==null?void 0:J.id});D.useEffect(()=>{C&&C(ae)},[ae,C]),D.useEffect(()=>{M&&Q&&M(Q)},[Q,M]),D.useEffect(()=>{if(!be)return;const A=(z,te)=>{console.log("📊 Widget: Session state changed:",{from:te,to:z,currentLoading:Z}),(z==="connecting"||z==="connected")&&(Z||(console.log("⏳ Widget: Setting loading=true (waiting for agent)"),ne(!0))),z==="active"&&(console.log("✅ Widget: Session active, agent ready - removing loader"),ne(!1),T(!0)),(z==="disconnected"||z==="error")&&(console.log("🔴 Widget: Session ended - resetting state"),ne(!1),T(!1),Re(null),de("welcome"))};return be.on("session.state.changed",A),()=>{be.off("session.state.changed",A)}},[be,Z]),D.useEffect(()=>{if(!be)return;const A=()=>{const z=be.connected,te=be.getCurrentSession();console.log("🔗 Connection state changed:",{isConnected:z,currentSessionId:te==null?void 0:te.id,currentMode:B,loading:Z,sessionStarted:Y}),!z&&Y&&!Z&&(console.log("🔴 Connection lost during active session - returning to welcome"),ne(!1),T(!1),Re(null),de("welcome")),z&&te&&Z&&(console.log("🟢 Connected with active session - removing loader"),ne(!1),T(!0),Re(te))};return be.on("connectionStateChanged",A),be.on("sessionEnded",()=>{console.log("📞 Session ended - returning to welcome"),ne(!1),T(!1),Re(null),de("welcome")}),()=>{be.off("connectionStateChanged",A),be.off("sessionEnded",()=>{})}},[be,B,Z,Y]);const Ye=!!(!!(be!=null&&be.connected)&&Y&&J);D.useEffect(()=>{const A=te=>{console.log("🔴 Widget: Room disconnected:",te),console.log("🔍 Widget: Current state on disconnect:",{currentMode:B,sessionStarted:Y,currentSessionId:J==null?void 0:J.id,loading:Z}),ne(!1),T(!1),Re(null),de("welcome"),console.log("🏠 Widget: Automatically returning to welcome screen after disconnect")},z=te=>{console.log("📹 Media devices error:",te)};return at.on(F.MediaDevicesError,z),at.on(F.Disconnected,A),()=>{at.off(F.Disconnected,A),at.off(F.MediaDevicesError,z)}},[at,B,Y,J==null?void 0:J.id,Z]);const tn=async()=>{try{if(!be){console.error("❌ VoxketClient not available"),K(new Error("VoxketClient not initialized")),H(!0);return}ne(!0),de("voice"),console.log("🎤 Starting voice session...",{agentId:ie,participantName:X}),console.log("🎤 Pre-start state:",{currentMode:"voice",sessionStarted:!1,loading:!0}),Ie("USER_STARTED_VOICE_SESSION",{agentId:ie,participantName:X});const A=await be.startSession(ie,{participantName:X||"User",modalities:["voice"],participantMetadata:be.getParticipantMetadata()||q});console.log("✅ Voice session started successfully:",A.id),Re(A),T(!0),ne(!1),S&&S(A.id)}catch(A){console.error("❌ Failed to start voice session:",A),ne(!1),T(!1),de("welcome")}},On=async()=>{try{if(!be){console.error("❌ VoxketClient not available"),K(new Error("VoxketClient not initialized")),H(!0);return}ne(!0),de("chat"),console.log("💬 Starting chat session...",{agentId:ie,participantName:X}),Ie("USER_STARTED_CHAT_SESSION",{agentId:ie,participantName:X});const A=await be.startSession(ie,{participantName:X||"User",modalities:["chat"],participantMetadata:be.getParticipantMetadata()||q});console.log("✅ Chat session started successfully:",A.id),Re(A),T(!0),ne(!1),S&&S(A.id)}catch(A){console.error("❌ Failed to start chat session:",A),ne(!1),T(!1),de("welcome")}},gn=async()=>{try{if(!be){console.error("❌ VoxketClient not available"),K(new Error("VoxketClient not initialized")),H(!0);return}ne(!0),de("video"),console.log("📺 Starting video session...",{agentId:ie,participantName:X}),console.log("📺 Pre-start state:",{currentMode:"video",sessionStarted:!1,loading:!0}),Ie("USER_STARTED_VIDEO_SESSION",{agentId:ie,participantName:X});const A=await be.startSession(ie,{participantName:X||"User",modalities:["video","voice"],participantMetadata:be.getParticipantMetadata()||q});console.log("✅ Video session started successfully:",A.id),Re(A),T(!0),ne(!1),S&&S(A.id)}catch(A){console.error("❌ Failed to start video session:",A),ne(!1),T(!1),de("welcome")}},an=()=>{de("welcome"),ne(!1),U&&U(e.displayType||"widget"),J&&Y?(console.log("🧹 Widget: Cleaning up active session"),T(!1),Re(null),be&&(console.log("🔌 Widget: Disconnecting client and cleaning up room"),be.disconnect().catch(A=>{console.error("❌ Widget: Error during disconnect:",A)}))):(console.log("📝 Widget: No active session to clean up"),be&&be.connected&&(console.log("🔌 Widget: Force disconnecting client for fresh state"),be.disconnect().catch(A=>{console.error("❌ Widget: Error during force disconnect:",A)}))),P==="popup"&&!Me&&ke(!0),console.log("✅ Widget: handleBackToWelcome completed",{newCurrentMode:"welcome",newLoading:!1,newSessionStarted:!1})},En=()=>{const A=!Me;ke(A),N&&N(A),!A&&!(J&&Y)&&(de("welcome"),T(!1),Re(null))},Qt=()=>{console.log("🔄 Closing fullscreen, switching to widget display type"),e.onDisplayTypeChange?e.onDisplayTypeChange("widget"):console.warn("⚠️ No onDisplayTypeChange callback provided")},Kn=()=>{if(console.log("🔄 Expand to fullscreen requested"),e.onDisplayTypeChange)e.onDisplayTypeChange("fullscreen");else{console.warn("⚠️ No onDisplayTypeChange callback provided for expand functionality");const A=document.getElementById("voice-card")||document.querySelector(".voxket-widget-container");A&&A.requestFullscreen&&A.requestFullscreen().catch(z=>{console.warn("⚠️ Fullscreen API not supported or failed:",z)})}};D.useEffect(()=>{var A,z,te;if(L&&be){const ge=be.getCurrentSession();be.connected,ge&&(console.log("✅ Restoring session state:",ge.id),Re(ge),T(!0),ne(!1),(A=ge.activeModalities)!=null&&A.includes("chat")?de("chat"):(z=ge.activeModalities)!=null&&z.includes("voice")?de("voice"):(te=ge.activeModalities)!=null&&te.includes("video")&&de("video"))}},[L,be]),D.useEffect(()=>()=>{!L&&be&&be.disconnect()},[be,L]);let Wt=B==="video"?"w-[32rem]":"w-96",Cr=B==="video"?"h-[30rem]":"h-[25rem]",Er={};if(h&&(h.startsWith("w-")?Wt=h:(Er.width=h,Wt="")),f&&(f.startsWith("h-")?Cr=f:(Er.height=f,Cr="")),P==="popup"&&!Me)return console.log("🟡 Showing popup trigger button"),m.jsxs(m.Fragment,{children:[m.jsx(dw,{onClick:()=>{if(Ye){!Pe&&(J!=null&&J.activeModalities)&&(J.activeModalities.includes("chat")?Ee("chat"):J.activeModalities.includes("video")?Ee("video"):J.activeModalities.includes("voice")&&Ee("voice")),Ce(!1),ke(!0),N&&N(!0);return}if(ue!=="all"){Ee(ue),Ce(!1),ke(!0),N&&N(!0);return}if(R.length===1){Ee(R[0]),Ce(!1),ke(!0),N&&N(!0);return}Ce(A=>!A),Ee(null),zt(!1)},position:y,ariaLabel:I,size:64,isRunning:Ye,logoUrl:se}),pe&&ue==="all"&&(()=>{const te={};y==="bottom-right"?(te.bottom=88,te.right=16):y==="bottom-left"?(te.bottom=88,te.left=16):y==="top-right"?(te.top=88,te.right=16):(te.top=88,te.left=16);const ge="absolute w-0 h-0 border-8",ht=y.startsWith("bottom")?m.jsx("div",{className:`${ge} border-transparent border-t-black`,style:{bottom:-16,right:y.endsWith("right")?16:void 0,left:y.endsWith("left")?16:void 0}}):m.jsx("div",{className:`${ge} border-transparent border-b-black`,style:{top:-16,right:y.endsWith("right")?16:void 0,left:y.endsWith("left")?16:void 0}});return m.jsx("div",{className:"fixed z-[51]",style:te,children:m.jsxs("div",{className:"relative bg-black text-white rounded-xl shadow-2xl px-3 py-3",children:[ht,m.jsx("div",{className:"text-xs uppercase tracking-wide mb-2 opacity-70",children:"Choose modality"}),m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("button",{type:"button",onClick:()=>{Ee("voice"),Ce(!1),ke(!0),N&&N(!0)},className:"px-3 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white text-sm",title:"Voice",children:"Voice"}),m.jsx("button",{type:"button",onClick:()=>{Ee("chat"),Ce(!1),ke(!0),N&&N(!0)},className:"px-3 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white text-sm",title:"Chat",children:"Chat"}),m.jsx("button",{type:"button",onClick:()=>{Ee("video"),Ce(!1),ke(!0),N&&N(!0)},className:"px-3 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white text-sm",title:"Video",children:"Video"})]})]})})})()]});if(G||!be){const A=(E==null?void 0:E.message)||"VoxketWidget encountered an error. Please check your configuration.";return m.jsx("div",{className:`voxket-widget-root theme-${w} flex items-center justify-center p-8 ${d||""}`,style:{width:h||"400px",height:f||"500px",border:"1px solid #ff4444",borderRadius:"8px",background:"#fff5f5",color:"#cc0000"},children:m.jsxs("div",{className:"text-center",children:[m.jsx("div",{className:"text-4xl mb-4",children:"⚠️"}),m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Widget Error"}),m.jsx("p",{className:"text-sm mb-4",children:A}),m.jsx("button",{onClick:()=>{H(!1),K(null),window.location.reload()},className:"px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors",children:"Retry"})]})})}let ws=`voxket-widget-root theme-${w}`,Zi={scrollMargin:0,scrollPadding:0,contain:"layout style paint"};P==="widget"?(ws+=` flex min-h-fit ${Wt} ${Cr} ${d}`,Zi={...Zi,...Er}):(ws=`${d||""}`,Zi={});const oi=m.jsx("div",{className:"h-full w-full flex flex-col overflow-hidden relative z-10",children:m.jsxs(ls,{mode:"wait",children:[B==="welcome"&&!Z&&m.jsx(fV,{agentId:ie,participantName:X||"",onAgentIdChange:re,onParticipantNameChange:le,onStartCall:tn,onStartChat:On,onStartVideo:gn,disabled:Y||Z,prompts:a,statusMessage:c,title:l,subTitle:u,theme:w,modalities:Bt,initial:{opacity:0,y:0},animate:{opacity:1,y:0},exit:{opacity:0,y:40},transition:{duration:.3,ease:"easeInOut"}},"welcome"),Z&&(B==="voice"||B==="chat"||B==="video")&&m.jsx(mV,{theme:w,mode:B,loadingText:g,sessionState:J==null?void 0:J.state,initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9},transition:{duration:.3,ease:"easeInOut"}},`loading-${B}`),B==="voice"&&!Z&&Y&&be&&m.jsxs(Za.Provider,{value:at,children:[m.jsx(ug,{},`audio-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(ag,{label:"Start Audio"},`start-audio-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(uV,{loadingText:g,participantName:X||"User",sessionStarted:Y,disabled:!1,theme:w,client:be,displayType:P,onBack:P==="popup"?En:an,initial:{opacity:0,y:40},animate:{opacity:1,y:0},exit:{opacity:0,y:-40},transition:{duration:.3,ease:"easeInOut"}},"voice-session")]}),B==="chat"&&!Z&&Y&&be&&m.jsx(dV,{client:be,theme:w,displayType:P,onBack:P==="popup"?En:an,onEndChat:an,disabled:!1,initial:{opacity:0,y:40},animate:{opacity:1,y:0},exit:{opacity:0,y:-40},transition:{duration:.3,ease:"easeInOut"}},"chat-view"),B==="video"&&!Z&&Y&&be&&m.jsxs(Za.Provider,{value:at,children:[m.jsx(ug,{},`audio-video-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(ag,{label:"Start Audio"},`start-audio-video-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(hV,{client:be,theme:w,displayType:P,onBack:P==="popup"?En:an,onEndCall:an,disabled:!1,initial:{opacity:0,y:40},animate:{opacity:1,y:0},exit:{opacity:0,y:-40},transition:{duration:.3,ease:"easeInOut"}},"video-session")]})]})});return P==="fullscreen"||P==="popup"?m.jsx($b,{theme:w,displayType:P,popupPosition:y,onClose:P==="fullscreen"?Qt:En,children:oi}):m.jsx("div",{className:ws,style:Zi,children:m.jsx($b,{theme:w,displayType:P,popupPosition:y,onExpand:Kn,children:oi})})}function Pa(e){return m.jsx(kf,{children:m.jsx(gV,{...e})})}function bV({logs:e,onClear:t,onExport:n}){const[i,r]=_.useState(!1),[s,o]=_.useState(""),a=e.filter(c=>!s||c.event.toLowerCase().includes(s.toLowerCase()));return i?m.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:m.jsxs("div",{className:"bg-white rounded-lg shadow-xl max-w-4xl w-full max-h-[80vh] flex flex-col m-4",children:[m.jsxs("div",{className:"flex items-center justify-between p-4 border-b",children:[m.jsxs("h2",{className:"text-lg font-semibold",children:["Session Logs (",e.length,")"]}),m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("input",{type:"text",placeholder:"Filter events...",value:s,onChange:c=>o(c.target.value),className:"px-3 py-1 border rounded text-sm"}),m.jsx("button",{onClick:t,className:"px-3 py-1 bg-red-600 text-white rounded text-sm hover:bg-red-700",children:"Clear"}),m.jsx("button",{onClick:n,className:"px-3 py-1 bg-green-600 text-white rounded text-sm hover:bg-green-700",children:"Export"}),m.jsx("button",{onClick:()=>r(!1),className:"px-3 py-1 bg-gray-600 text-white rounded text-sm hover:bg-gray-700",children:"Close"})]})]}),m.jsx("div",{className:"flex-1 overflow-auto p-4",children:a.length===0?m.jsx("p",{className:"text-gray-500 text-center py-8",children:"No logs found"}):m.jsx("div",{className:"space-y-2",children:a.map((c,l)=>m.jsxs("div",{className:"border rounded p-3 text-sm",children:[m.jsxs("div",{className:"flex items-center justify-between mb-1",children:[m.jsx("span",{className:"font-semibold text-blue-600",children:c.event}),m.jsx("span",{className:"text-gray-500 text-xs",children:new Date(c.timestamp).toLocaleTimeString()})]}),c.sessionId&&m.jsxs("div",{className:"text-xs text-gray-600 mb-1",children:["Session: ",c.sessionId]}),c.data&&m.jsx("div",{className:"bg-gray-50 p-2 rounded text-xs",children:m.jsx("pre",{className:"whitespace-pre-wrap overflow-auto",children:JSON.stringify(c.data,null,2)})})]},l))})})]})}):m.jsxs("button",{onClick:()=>r(!0),className:"fixed bottom-4 right-4 bg-blue-600 text-white px-4 py-2 rounded-lg shadow-lg hover:bg-blue-700 transition-colors text-sm z-50",children:["Session Logs (",e.length,")"]})}function yV({metrics:e}){return e?m.jsxs("div",{className:"bg-gray-100 p-4 rounded-lg",children:[m.jsx("h3",{className:"font-semibold mb-2",children:"Current Session"}),m.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Session ID:"}),m.jsx("div",{className:"font-mono text-xs",children:e.sessionId})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Start Time:"}),m.jsx("div",{children:new Date(e.startTime).toLocaleString()})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Messages:"}),m.jsx("div",{children:e.totalMessages})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Participants:"}),m.jsx("div",{children:e.participantCount})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Connection Issues:"}),m.jsx("div",{children:e.connectionIssues})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Duration:"}),m.jsxs("div",{children:[Math.round((Date.now()-new Date(e.startTime).getTime())/1e3),"s"]})]})]})]}):null}function wr(){const{currentSession:e,sessionState:t,sessionMetrics:n,createSession:i,endSession:r}=si(),s=_.useCallback(async(a,c)=>await i(a,c),[i]),o=_.useCallback(async()=>await r(),[r]);return{session:e,state:t,metrics:n,isActive:e!==null&&t!=="disconnected",isConnecting:t==="connecting",isConnected:t==="connected"||t==="active",start:s,stop:o}}function Sw(){const{sessionMetrics:e,currentSession:t}=si();return{metrics:e,sessionId:t==null?void 0:t.id,duration:e==null?void 0:e.duration,participantCount:e==null?void 0:e.participantCount,messageCount:e==null?void 0:e.messageCount,audioQuality:e==null?void 0:e.audioQuality,networkStats:e==null?void 0:e.networkStats}}function ww(){const{setMicrophoneEnabled:e,client:t}=si(),[n,i]=_.useState(!1),[r,s]=_.useState(!1),o=_.useCallback(async()=>{if(!r){s(!0);try{const l=!n;await e(l),i(l)}catch(l){console.error("Failed to toggle microphone:",l)}finally{s(!1)}}},[n,r,e]),a=_.useCallback(async()=>{if(!(n||r)){s(!0);try{await e(!0),i(!0)}catch(l){console.error("Failed to enable microphone:",l)}finally{s(!1)}}},[n,r,e]),c=_.useCallback(async()=>{if(!(!n||r)){s(!0);try{await e(!1),i(!1)}catch(l){console.error("Failed to disable microphone:",l)}finally{s(!1)}}},[n,r,e]);return{isEnabled:n,isLoading:r,toggle:o,enable:a,disable:c}}function Cw(){const{setCameraEnabled:e}=si(),[t,n]=_.useState(!1),[i,r]=_.useState(!1),s=_.useCallback(async()=>{if(!i){r(!0);try{const c=!t;await e(c),n(c)}catch(c){console.error("Failed to toggle camera:",c)}finally{r(!1)}}},[t,i,e]),o=_.useCallback(async()=>{if(!(t||i)){r(!0);try{await e(!0),n(!0)}catch(c){console.error("Failed to enable camera:",c)}finally{r(!1)}}},[t,i,e]),a=_.useCallback(async()=>{if(!(!t||i)){r(!0);try{await e(!1),n(!1)}catch(c){console.error("Failed to disable camera:",c)}finally{r(!1)}}},[t,i,e]);return{isEnabled:t,isLoading:i,toggle:s,enable:o,disable:a}}function Ew(){const{startScreenShare:e,stopScreenShare:t}=si(),[n,i]=_.useState(!1),[r,s]=_.useState(!1),o=_.useCallback(async()=>{if(!(n||r)){s(!0);try{await e(),i(!0)}catch(l){console.error("Failed to start screen share:",l)}finally{s(!1)}}},[n,r,e]),a=_.useCallback(async()=>{if(!(!n||r)){s(!0);try{await t(),i(!1)}catch(l){console.error("Failed to stop screen share:",l)}finally{s(!1)}}},[n,r,t]),c=_.useCallback(async()=>{n?await a():await o()},[n,o,a]);return{isSharing:n,isLoading:r,start:o,stop:a,toggle:c}}function vV(){const{client:e}=si(),[t,n]=_.useState({tracks:[],layout:{type:"grid",showLocalVideo:!0,aspectRatio:"16:9"},isRecording:!1}),i=_.useMemo(()=>t.tracks.find(p=>p.isLocal),[t.tracks]),r=_.useMemo(()=>t.tracks.filter(p=>!p.isLocal),[t.tracks]),s=_.useCallback(async()=>{try{i!=null&&i.isEnabled?await(e==null?void 0:e.disableCamera()):await(e==null?void 0:e.enableCamera())}catch(p){throw console.error("Failed to toggle camera:",p),p}},[e,i]),o=_.useCallback(async()=>{try{t.tracks.find(v=>v.isScreenShare)?await(e==null?void 0:e.stopScreenShare()):await(e==null?void 0:e.startScreenShare())}catch(p){throw console.error("Failed to toggle screen share:",p),p}},[e,t.tracks]),a=_.useCallback(p=>{n(v=>({...v,layout:p}))},[]),c=_.useCallback(p=>{n(v=>({...v,pinnedTrack:p}))},[]),l=_.useCallback(()=>{n(p=>({...p,pinnedTrack:void 0}))},[]),u=_.useCallback(async()=>{try{await(e==null?void 0:e.startRecording()),n(p=>({...p,isRecording:!0}))}catch(p){throw console.error("Failed to start recording:",p),p}},[e]),d=_.useCallback(async()=>{try{await(e==null?void 0:e.stopRecording()),n(p=>({...p,isRecording:!1}))}catch(p){throw console.error("Failed to stop recording:",p),p}},[e]),h=_.useCallback(p=>t.tracks.find(v=>v.id===p),[t.tracks]),f=_.useCallback(p=>t.tracks.filter(v=>v.participantId===p),[t.tracks]),g=_.useCallback(p=>p.isEnabled&&t.tracks.includes(p),[t.tracks]);return _.useEffect(()=>{if(!e)return;const p=w=>{n(S=>({...S,tracks:[...S.tracks.filter(k=>k.id!==w.id),w]}))},v=w=>{n(S=>{var k;return{...S,tracks:S.tracks.filter(x=>x.id!==w),pinnedTrack:((k=S.pinnedTrack)==null?void 0:k.id)===w?void 0:S.pinnedTrack}})},b=w=>{n(S=>({...S,tracks:S.tracks.map(k=>k.id===w.id?w:k)}))};return e.on("videoTrackAdded",p),e.on("videoTrackRemoved",v),e.on("videoTrackUpdated",b),()=>{e.off("videoTrackAdded",p),e.off("videoTrackRemoved",v),e.off("videoTrackUpdated",b)}},[e]),{tracks:t.tracks,localTrack:i,remoteTraracks:r,pinnedTrack:t.pinnedTrack,layout:t.layout,isRecording:t.isRecording,toggleCamera:s,toggleScreenShare:o,setLayout:a,pinTrack:c,unpinTrack:l,startRecording:u,stopRecording:d,getTrackById:h,getTracksByParticipant:f,isTrackActive:g}}function Gc(){const{chatMessages:e,sendChatMessage:t,currentSession:n}=si(),[i,r]=_.useState(!1),s=_.useCallback(async l=>{if(!(!l.trim()||i||!n)){r(!0);try{await t(l.trim())}catch(u){throw console.error("Failed to send chat message:",u),u}finally{r(!1)}}},[t,i,n]),{userMessages:o,agentMessages:a,allMessages:c}=_.useMemo(()=>{const l=e.filter(d=>d.sender.type==="participant"),u=e.filter(d=>d.sender.type==="agent");return{userMessages:l,agentMessages:u,allMessages:e}},[e]);return{messages:c,userMessages:o,agentMessages:a,messageCount:c.length,isSending:i,canSend:!!n&&!i,send:s}}function xV(){const{send:e,isSending:t,canSend:n}=Gc(),[i,r]=_.useState(""),s=_.useCallback(async()=>{if(!(!i.trim()||!n))try{await e(i),r("")}catch(a){throw a}},[i,e,n]),o=_.useCallback(a=>{a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),s())},[s]);return{value:i,setValue:r,send:s,handleKeyPress:o,isSending:t,canSend:n&&i.trim().length>0}}function Cf(){const{isConnected:e,isConnecting:t,connectionError:n,connect:i,disconnect:r}=si(),s=_.useCallback(async()=>{if(!(e||t))try{await i()}catch(a){throw console.error("Failed to connect:",a),a}},[i,e,t]),o=_.useCallback(async()=>{if(e)try{await r()}catch(a){throw console.error("Failed to disconnect:",a),a}},[r,e]);return{isConnected:e,isConnecting:t,isDisconnected:!e&&!t,error:n,hasError:!!n,connect:s,disconnect:o}}function Tw(){const{participants:e}=si();return{participants:e,count:e.length,localParticipant:e.find(t=>t.isLocal),remoteParticipants:e.filter(t=>!t.isLocal)}}const Aw=_.createContext({}),Po=()=>_.useContext(Aw);function Iw({children:e,...t}){return m.jsx(Aw.Provider,{value:t,children:e})}function Na({name:e,children:t,fallback:n,className:i}){return m.jsx("div",{className:`voxket-slot voxket-slot--${e} ${i||""}`,children:t||n})}function Rw(e,t={}){return Object.assign(e,t)}function Mw({showMicrophoneControl:e=!0,showCameraControl:t=!0,showScreenShareControl:n=!0,showSessionActions:i=!0,customControls:r,className:s=""}){const o=wr(),a=ww(),c=Cw(),l=Ew(),u=Po(),d=["voxket-session-controls",`voxket-session-controls--${u.variant||"default"}`,`voxket-session-controls--${u.size||"md"}`,o.isActive?"voxket-session-controls--active":"voxket-session-controls--inactive",s].filter(Boolean).join(" ");return!o.isActive&&!i?m.jsx("div",{className:d,children:m.jsx("div",{className:"voxket-controls-inactive",children:m.jsx("p",{children:"Controls available during active session"})})}):m.jsxs("div",{className:d,children:[i&&m.jsx("div",{className:"voxket-session-actions",children:o.isActive?m.jsx("button",{onClick:o.stop,className:"voxket-button voxket-button--danger",children:"End Session"}):m.jsx(kV,{})}),o.isActive&&m.jsxs("div",{className:"voxket-media-controls",children:[e&&m.jsxs("button",{onClick:a.toggle,disabled:a.isLoading,className:`voxket-button voxket-button--media ${a.isEnabled?"voxket-button--active":""}`,title:a.isEnabled?"Mute microphone":"Unmute microphone",children:[m.jsx("span",{className:"voxket-icon",children:"🎤"}),a.isLoading?"Loading...":a.isEnabled?"Mute":"Unmute"]}),t&&m.jsxs("button",{onClick:c.toggle,disabled:c.isLoading,className:`voxket-button voxket-button--media ${c.isEnabled?"voxket-button--active":""}`,title:c.isEnabled?"Stop camera":"Start camera",children:[m.jsx("span",{className:"voxket-icon",children:"📹"}),c.isLoading?"Loading...":c.isEnabled?"Stop Video":"Start Video"]}),n&&m.jsxs("button",{onClick:l.toggle,disabled:l.isLoading,className:`voxket-button voxket-button--media ${l.isSharing?"voxket-button--active":""}`,title:l.isSharing?"Stop screen share":"Start screen share",children:[m.jsx("span",{className:"voxket-icon",children:"🖥️"}),l.isLoading?"Loading...":l.isSharing?"Stop Share":"Share Screen"]})]}),r&&m.jsx("div",{className:"voxket-custom-controls",children:r})]})}function kV(){wr();const[e,t]=_.useState(!1),n=async()=>{t(!0);try{console.log("Start session - agentId needed")}catch(i){console.error("Failed to start session:",i)}finally{t(!1)}};return m.jsx("button",{onClick:n,disabled:e,className:"voxket-button voxket-button--primary",children:e?"Starting...":"Start Session"})}function Ef({showConnectionStatus:e=!0,showSessionInfo:t=!0,showAgentInfo:n=!0,className:i=""}){const r=wr(),s=Cf(),o=Po(),a=["voxket-session-header",`voxket-session-header--${o.variant||"default"}`,`voxket-session-header--${o.size||"md"}`,i].filter(Boolean).join(" ");return m.jsxs("div",{className:a,children:[e&&m.jsxs("div",{className:"voxket-connection-status",children:[m.jsx("div",{className:`voxket-status-indicator ${s.isConnected?"connected":"disconnected"}`}),m.jsx("span",{className:"voxket-status-text",children:s.isConnecting?"Connecting...":s.isConnected?"Connected":"Disconnected"})]}),t&&r.session&&m.jsxs("div",{className:"voxket-session-info",children:[m.jsxs("div",{className:"voxket-session-id",children:["Session: ",r.session.id.slice(-8)]}),m.jsxs("div",{className:"voxket-session-state",children:["State: ",r.state]})]}),n&&r.session&&m.jsxs("div",{className:"voxket-agent-info",children:[m.jsxs("div",{className:"voxket-agent-id",children:["Agent: ",r.session.agentId]}),m.jsxs("div",{className:"voxket-modalities",children:["Modalities: ",r.session.activeModalities.join(", ")]})]}),s.error&&m.jsxs("div",{className:"voxket-error-message",children:["Error: ",s.error.message]})]})}function Tf({showChat:e=!0,showTranscriptions:t=!1,customContent:n,className:i=""}){const r=wr(),s=Gc(),o=Po(),a=["voxket-session-content",`voxket-session-content--${o.variant||"default"}`,`voxket-session-content--${o.size||"md"}`,i].filter(Boolean).join(" ");return r.isActive?m.jsx("div",{className:a,children:n||m.jsxs(m.Fragment,{children:[e&&m.jsxs("div",{className:"voxket-chat-container",children:[m.jsxs("div",{className:"voxket-chat-messages",children:[s.messages.map(c=>m.jsxs("div",{className:`voxket-message voxket-message--${c.sender.type}`,children:[m.jsxs("div",{className:"voxket-message-header",children:[m.jsx("span",{className:"voxket-message-sender",children:c.sender.name}),m.jsx("span",{className:"voxket-message-time",children:c.timestamp.toLocaleTimeString()})]}),m.jsx("div",{className:"voxket-message-content",children:c.content})]},c.id)),s.messages.length===0&&m.jsx("div",{className:"voxket-empty-messages",children:m.jsx("p",{children:"No messages yet. Start the conversation!"})})]}),m.jsx(SV,{})]}),t&&m.jsx("div",{className:"voxket-transcriptions",children:m.jsx("div",{className:"voxket-transcription-placeholder",children:m.jsx("p",{children:"Voice transcriptions will appear here"})})})]})}):m.jsx("div",{className:a,children:m.jsx("div",{className:"voxket-inactive-state",children:m.jsxs("div",{className:"voxket-inactive-message",children:[m.jsx("h3",{children:"Start a conversation"}),m.jsx("p",{children:"Begin a session to start chatting with the AI agent"})]})})})}function SV(){const e=Gc(),[t,n]=_.useState(""),i=async()=>{if(!(!t.trim()||!e.canSend))try{await e.send(t),n("")}catch(s){console.error("Failed to send message:",s)}},r=s=>{s.key==="Enter"&&!s.shiftKey&&(s.preventDefault(),i())};return m.jsxs("div",{className:"voxket-chat-input",children:[m.jsx("input",{type:"text",value:t,onChange:s=>n(s.target.value),onKeyPress:r,placeholder:"Type your message...",disabled:!e.canSend,className:"voxket-input"}),m.jsx("button",{onClick:i,disabled:!e.canSend||!t.trim(),className:"voxket-send-button",children:e.isSending?"Sending...":"Send"})]})}function Af({showMetrics:e=!0,showParticipants:t=!0,showStatus:n=!0,customFooter:i,className:r=""}){const s=wr(),o=Sw(),a=Tw(),c=Po(),l=["voxket-session-footer",`voxket-session-footer--${c.variant||"default"}`,`voxket-session-footer--${c.size||"md"}`,r].filter(Boolean).join(" ");return s.isActive?m.jsx("div",{className:l,children:i||m.jsxs(m.Fragment,{children:[n&&m.jsxs("div",{className:"voxket-session-status",children:[m.jsx("div",{className:"voxket-status-indicator voxket-status-indicator--active"}),m.jsx("span",{className:"voxket-status-text",children:"Session Active"})]}),e&&o.metrics&&m.jsxs("div",{className:"voxket-session-metrics",children:[m.jsxs("div",{className:"voxket-metric",children:[m.jsx("span",{className:"voxket-metric-label",children:"Duration:"}),m.jsx("span",{className:"voxket-metric-value",children:wV(o.duration||0)})]}),m.jsxs("div",{className:"voxket-metric",children:[m.jsx("span",{className:"voxket-metric-label",children:"Messages:"}),m.jsx("span",{className:"voxket-metric-value",children:o.metrics.messageCount})]})]}),t&&m.jsxs("div",{className:"voxket-participants-info",children:[m.jsxs("span",{className:"voxket-participants-count",children:[a.count," participant",a.count!==1?"s":""]}),a.remoteParticipants.length>0&&m.jsx("div",{className:"voxket-participant-list",children:a.remoteParticipants.map(u=>m.jsx("span",{className:"voxket-participant-name",children:u.name},u.id))})]})]})}):m.jsx("div",{className:l,children:m.jsx("div",{className:"voxket-footer-inactive",children:m.jsx("span",{className:"voxket-status-text",children:"Ready to start session"})})})}function wV(e){const t=Math.floor(e/1e3),n=Math.floor(t/60),i=Math.floor(n/60);return i>0?`${i}:${(n%60).toString().padStart(2,"0")}:${(t%60).toString().padStart(2,"0")}`:`${n}:${(t%60).toString().padStart(2,"0")}`}function CV({agentId:e,sessionConfig:t,autoStart:n=!1,onSessionStart:i,onSessionEnd:r,variant:s="default",size:o="md",theme:a,className:c="",children:l}){var f;const u=wr(),d=Cf();_.useEffect(()=>{n&&e&&d.isConnected&&!u.isActive&&u.start(e,t).catch(console.error)},[n,e,d.isConnected,u.isActive]),_.useEffect(()=>{var g;(g=u.session)!=null&&g.id&&i&&i(u.session.id)},[(f=u.session)==null?void 0:f.id,i]),_.useEffect(()=>()=>{u.isActive&&r&&u.stop().then(r).catch(console.error)},[]);const h=["voxket-session",`voxket-session--${s}`,`voxket-session--${o}`,u.isActive?"voxket-session--active":"voxket-session--inactive",c].filter(Boolean).join(" ");return m.jsx(Iw,{variant:s,size:o,theme:a,className:c,children:m.jsx("div",{className:h,children:l||m.jsxs(m.Fragment,{children:[m.jsx(Na,{name:"header",fallback:m.jsx(Ef,{})}),m.jsx(Na,{name:"content",fallback:m.jsx(Tf,{})}),m.jsx(Na,{name:"footer",fallback:m.jsx(Af,{})})]})})})}const Pw=Rw(CV,{Header:Ef,Content:Tf,Footer:Af,Controls:Mw}),fr={name:"default",colors:{primary:"#3B82F6",secondary:"#6B7280",accent:"#8B5CF6",background:"#FFFFFF",surface:"#F9FAFB",text:{primary:"#111827",secondary:"#6B7280",muted:"#9CA3AF",inverse:"#FFFFFF"},status:{success:"#10B981",warning:"#F59E0B",error:"#EF4444",info:"#3B82F6"},border:"#E5E7EB",shadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1)"},typography:{fontFamily:"system-ui, -apple-system, sans-serif",fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},fontWeight:{normal:400,medium:500,semibold:600,bold:700},lineHeight:{tight:1.25,normal:1.5,relaxed:1.75}},spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem"},borderRadius:{none:"0",sm:"0.25rem",md:"0.5rem",lg:"0.75rem",full:"9999px"},shadows:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",md:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1)"}},Ld={...fr,name:"dark",colors:{primary:"#60A5FA",secondary:"#9CA3AF",accent:"#A78BFA",background:"#111827",surface:"#1F2937",text:{primary:"#F9FAFB",secondary:"#D1D5DB",muted:"#9CA3AF",inverse:"#111827"},status:{success:"#34D399",warning:"#FBBF24",error:"#F87171",info:"#60A5FA"},border:"#374151",shadow:"0 1px 3px 0 rgba(0, 0, 0, 0.3)"}},Bd={...fr,name:"enterprise",colors:{primary:"#1E40AF",secondary:"#64748B",accent:"#7C3AED",background:"#FFFFFF",surface:"#F8FAFC",text:{primary:"#0F172A",secondary:"#475569",muted:"#94A3B8",inverse:"#FFFFFF"},status:{success:"#059669",warning:"#D97706",error:"#DC2626",info:"#1E40AF"},border:"#CBD5E1",shadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1)"},borderRadius:{none:"0",sm:"0.125rem",md:"0.25rem",lg:"0.375rem",full:"9999px"}},Nw=_.createContext(null),Ow=()=>{const e=_.useContext(Nw);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e};function EV({theme:e="default",themes:t={},children:n,cssVariables:i=!0,className:r=""}){const[s,o]=_.useState(()=>{const h={default:fr,dark:Ld,enterprise:Bd,...t};return typeof e=="string"?h[e]||fr:e}),[a,c]=_.useState(()=>({default:fr,dark:Ld,enterprise:Bd,...t})),l=h=>{if(typeof h=="string"){const f=a[h];f&&o(f)}else o(h)},u=h=>{c(f=>({...f,[h.name]:h}))};_.useEffect(()=>{if(i&&typeof document<"u"){const h=document.documentElement;Object.entries(_w(s)).forEach(([f,g])=>{h.style.setProperty(`--voxket-${f}`,g)})}},[s,i]);const d={theme:s,setTheme:l,themes:a,registerTheme:u};return m.jsx(Nw.Provider,{value:d,children:m.jsx("div",{className:`voxket-theme voxket-theme--${s.name} ${r}`,children:n})})}function _w(e){const t={},n=(i,r="")=>{for(const[s,o]of Object.entries(i)){const a=r?`${r}-${s}`:s;typeof o=="object"&&o!==null&&!Array.isArray(o)?n(o,a):t[a]=String(o)}};return n(e),t}function TV(e=fr,t){return{...e,...t,colors:{...e.colors,...t.colors},typography:{...e.typography,...t.typography},spacing:{...e.spacing,...t.spacing},borderRadius:{...e.borderRadius,...t.borderRadius},shadows:{...e.shadows,...t.shadows}}}function AV(e){var n;const{theme:t}=Ow();return((n=t.components)==null?void 0:n[e])||{}}const IV=wf("voice-modality","voice",{onActivate:async e=>{const t=e.config;t.enableTranscription&&RV(e),t.enableVoiceActivation&&MV(e,t),console.log("Voice modality activated",t)},onDeactivate:async e=>{console.log("Voice modality deactivated")},onMessage:async(e,t)=>{t.type==="audio"&&PV(e,t)}});function RV(e,t){e.on("participant.speaking.started",n=>{console.log("Transcription: Started for",n.name)}),e.on("participant.speaking.stopped",n=>{console.log("Transcription: Stopped for",n.name)})}function MV(e,t){const n=t.silenceThreshold||-50;console.log("Voice activation setup with threshold:",n)}function PV(e,t){console.log("Playing audio response:",t.content)}const NV=wf("chat-modality","chat",{onActivate:async e=>{const t=e.config;t.enableRichText&&OV(),t.enableFileUpload&&_V(e),t.enableCustomComponents&&DV(),console.log("Chat modality activated",t)},onDeactivate:async e=>{console.log("Chat modality deactivated")},onMessage:async(e,t)=>{const n=e.config;t.type==="ui_component"?LV(e,t):t.type==="text"&&n.enableRichText&&BV(e,t)}});function OV(e){console.log("Rich text support enabled")}function _V(e){console.log("File upload enabled"),e.on("chat.file.uploaded",t=>{console.log("File uploaded:",t.name)})}function DV(e){console.log("Custom components enabled");const t=new Map;t.set("quick-actions",FV),t.set("form",UV),t.set("card",jV),t.set("chart",VV)}function LV(e,t){const{componentType:n,props:i}=t.metadata;console.log("Rendering custom component:",n,i),e.emit("chat.component.render",{type:n,props:i,timestamp:new Date})}function BV(e,t){console.log("Processing rich text message:",t.content)}function FV(e){return{type:"quick-actions",actions:e.actions||[],layout:e.layout||"horizontal"}}function UV(e){return{type:"form",fields:e.fields||[],submitAction:e.submitAction,validation:e.validation}}function jV(e){return{type:"card",title:e.title,content:e.content,actions:e.actions,variant:e.variant||"default"}}function VV(e){return{type:"chart",chartType:e.chartType||"line",data:e.data,options:e.options}}function Oa({track:e,participantName:t,showControls:n=!0,showName:i=!0,showMuteIndicator:r=!0,isPinned:s=!1,className:o="",onClick:a,onPin:c,onUnpin:l}){const u=_.useRef(null),[d,h]=_.useState(!1);_.useEffect(()=>{if(!u.current||!e.isEnabled)return;const v=u.current;return v.srcObject=null,()=>{v.srcObject&&(v.srcObject=null)}},[e]);const f=()=>{a==null||a(e)},g=v=>{v.stopPropagation(),s?l==null||l(e):c==null||c(e)},p=["voxket-video-tile",e.isLocal?"voxket-video-tile--local":"voxket-video-tile--remote",e.isScreenShare?"voxket-video-tile--screen-share":"voxket-video-tile--camera",s?"voxket-video-tile--pinned":"",e.isEnabled?"":"voxket-video-tile--disabled",d?"voxket-video-tile--hovered":"",o].filter(Boolean).join(" ");return m.jsxs("div",{className:p,onClick:f,onMouseEnter:()=>h(!0),onMouseLeave:()=>h(!1),style:{aspectRatio:e.dimensions?`${e.dimensions.width} / ${e.dimensions.height}`:"16 / 9"},children:[m.jsx("video",{ref:u,className:"voxket-video-element",autoPlay:!0,playsInline:!0,muted:e.isLocal}),!e.isEnabled&&m.jsxs("div",{className:"voxket-video-placeholder",children:[m.jsx("div",{className:"voxket-video-placeholder-icon",children:e.isScreenShare?"🖥️":"📹"}),m.jsx("p",{className:"voxket-video-placeholder-text",children:e.isScreenShare?"Screen sharing paused":"Camera off"})]}),m.jsxs("div",{className:"voxket-video-overlay",children:[i&&t&&m.jsxs("div",{className:"voxket-video-name",children:[t,e.isLocal&&" (You)"]}),r&&!e.isEnabled&&m.jsx("div",{className:"voxket-video-mute-indicator",children:"🔇"}),n&&(d||s)&&m.jsxs("div",{className:"voxket-video-controls",children:[m.jsx("button",{className:`voxket-video-control-btn ${s?"voxket-video-control-btn--active":""}`,onClick:g,title:s?"Unpin video":"Pin video",children:"📌"}),e.isScreenShare&&m.jsx("div",{className:"voxket-video-indicator",children:"🖥️"}),e.source&&m.jsx("div",{className:"voxket-video-source",children:e.source})]})]}),!e.isEnabled&&m.jsx("div",{className:"voxket-video-loading",children:m.jsx("div",{className:"voxket-spinner"})})]})}function zV({tracks:e,layout:t,className:n="",onLayoutChange:i,onTrackClick:r,maxVisibleTracks:s=9,showPagination:o=!0}){const[a,c]=_.useState(0),[l,u]=_.useState(null),d=_.useMemo(()=>{let w=[...e];t.type==="speaker"&&l&&(w=[l,...e.filter(x=>x.id!==l.id)]);const S=a*s,k=S+s;return w.slice(S,k)},[e,t,l,a,s]),h=Math.ceil(e.length/s),f=_.useMemo(()=>{const w=d.length;switch(t.type){case"grid":const S=Math.ceil(Math.sqrt(w)),k=Math.ceil(w/S);return{display:"grid",gridTemplateColumns:`repeat(${S}, 1fr)`,gridTemplateRows:`repeat(${k}, 1fr)`,gap:"8px"};case"speaker":return{display:"flex",flexDirection:"column",gap:"8px"};case"sidebar":return{display:"flex",gap:"8px"};case"gallery":return{display:"flex",flexWrap:"wrap",gap:"8px",justifyContent:"center"};default:return{}}},[t.type,d.length]),g=w=>{u(w)},p=()=>{u(null)},v=w=>{i==null||i({...t,type:w})},b=["voxket-video-grid",`voxket-video-grid--${t.type}`,`voxket-video-grid--${d.length}-tracks`,n].filter(Boolean).join(" ");return e.length===0?m.jsx("div",{className:"voxket-video-grid-empty",children:m.jsxs("div",{className:"voxket-video-grid-empty-content",children:[m.jsx("div",{className:"voxket-video-grid-empty-icon",children:"📹"}),m.jsx("p",{children:"No video tracks available"})]})}):m.jsxs("div",{className:b,children:[m.jsxs("div",{className:"voxket-video-grid-controls",children:[m.jsx("div",{className:"voxket-video-layout-controls",children:["grid","speaker","sidebar","gallery"].map(w=>m.jsx("button",{className:`voxket-layout-btn ${t.type===w?"voxket-layout-btn--active":""}`,onClick:()=>v(w),title:`Switch to ${w} layout`,children:GV(w)},w))}),m.jsxs("div",{className:"voxket-video-count",children:[e.length," participant",e.length!==1?"s":""]})]}),m.jsx("div",{className:"voxket-video-grid-content",style:f,children:t.type==="speaker"&&l?m.jsxs(m.Fragment,{children:[m.jsx("div",{className:"voxket-video-speaker-main",children:m.jsx(Oa,{track:l,participantName:`Participant ${l.participantId}`,isPinned:!0,onClick:r,onUnpin:p})}),m.jsx("div",{className:"voxket-video-speaker-sidebar",children:d.filter(w=>w.id!==l.id).map(w=>m.jsx(Oa,{track:w,participantName:`Participant ${w.participantId}`,showControls:!1,onClick:r,onPin:g},w.id))})]}):d.map(w=>m.jsx(Oa,{track:w,participantName:`Participant ${w.participantId}`,isPinned:(l==null?void 0:l.id)===w.id,onClick:r,onPin:g,onUnpin:p},w.id))}),o&&h>1&&m.jsxs("div",{className:"voxket-video-pagination",children:[m.jsx("button",{className:"voxket-pagination-btn",onClick:()=>c(Math.max(0,a-1)),disabled:a===0,children:"←"}),m.jsxs("span",{className:"voxket-pagination-info",children:["Page ",a+1," of ",h]}),m.jsx("button",{className:"voxket-pagination-btn",onClick:()=>c(Math.min(h-1,a+1)),disabled:a===h-1,children:"→"})]})]})}function GV(e){switch(e){case"grid":return"⊞";case"speaker":return"🎤";case"sidebar":return"⫸";case"gallery":return"⊡";case"picture-in-picture":return"⧉";default:return"⊞"}}function HV({localTrack:e,onToggleCamera:t,onToggleScreenShare:n,onLayoutChange:i,showLayoutControls:r=!0,showCameraControls:s=!0,showScreenShareControls:o=!0,className:a=""}){const c=["voxket-video-controls",a].filter(Boolean).join(" "),l=u=>{i==null||i({type:u,showLocalVideo:!0,aspectRatio:"16:9"})};return m.jsxs("div",{className:c,children:[s&&m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Camera"}),m.jsxs("button",{className:`voxket-control-btn ${e!=null&&e.isEnabled?"voxket-control-btn--active":""}`,onClick:t,title:e!=null&&e.isEnabled?"Turn off camera":"Turn on camera",children:[m.jsx("span",{className:"voxket-control-icon",children:e!=null&&e.isEnabled?"📹":"📷"}),m.jsx("span",{className:"voxket-control-label",children:e!=null&&e.isEnabled?"Camera On":"Camera Off"})]}),(e==null?void 0:e.dimensions)&&m.jsxs("div",{className:"voxket-video-info",children:[e.dimensions.width," × ",e.dimensions.height]})]}),o&&m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Screen Share"}),m.jsxs("button",{className:`voxket-control-btn ${e!=null&&e.isScreenShare?"voxket-control-btn--active":""}`,onClick:n,title:e!=null&&e.isScreenShare?"Stop screen sharing":"Start screen sharing",children:[m.jsx("span",{className:"voxket-control-icon",children:e!=null&&e.isScreenShare?"🛑":"🖥️"}),m.jsx("span",{className:"voxket-control-label",children:e!=null&&e.isScreenShare?"Stop Sharing":"Share Screen"})]})]}),r&&m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Layout"}),m.jsx("div",{className:"voxket-layout-buttons",children:[{type:"grid",icon:"⊞",label:"Grid"},{type:"speaker",icon:"🎤",label:"Speaker"},{type:"sidebar",icon:"⫸",label:"Sidebar"},{type:"gallery",icon:"⊡",label:"Gallery"}].map(({type:u,icon:d,label:h})=>m.jsxs("button",{className:"voxket-layout-control-btn",onClick:()=>l(u),title:`Switch to ${h} layout`,children:[m.jsx("span",{className:"voxket-control-icon",children:d}),m.jsx("span",{className:"voxket-control-label",children:h})]},u))})]}),m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Video Settings"}),m.jsxs("div",{className:"voxket-video-settings",children:[m.jsxs("div",{className:"voxket-setting-group",children:[m.jsx("label",{className:"voxket-setting-label",children:"Quality"}),m.jsxs("select",{className:"voxket-setting-select",children:[m.jsx("option",{value:"high",children:"High (720p)"}),m.jsx("option",{value:"medium",children:"Medium (480p)"}),m.jsx("option",{value:"low",children:"Low (240p)"})]})]}),m.jsxs("div",{className:"voxket-setting-group",children:[m.jsx("label",{className:"voxket-setting-label",children:"Frame Rate"}),m.jsxs("select",{className:"voxket-setting-select",children:[m.jsx("option",{value:"30",children:"30 fps"}),m.jsx("option",{value:"15",children:"15 fps"}),m.jsx("option",{value:"10",children:"10 fps"})]})]}),m.jsxs("div",{className:"voxket-setting-group",children:[m.jsx("label",{className:"voxket-setting-label",children:"Bandwidth"}),m.jsxs("select",{className:"voxket-setting-select",children:[m.jsx("option",{value:"unlimited",children:"Unlimited"}),m.jsx("option",{value:"1000",children:"1 Mbps"}),m.jsx("option",{value:"500",children:"500 Kbps"}),m.jsx("option",{value:"250",children:"250 Kbps"})]})]})]})]}),m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Statistics"}),m.jsxs("div",{className:"voxket-video-stats",children:[m.jsxs("div",{className:"voxket-stat-item",children:[m.jsx("span",{className:"voxket-stat-label",children:"Resolution:"}),m.jsx("span",{className:"voxket-stat-value",children:e!=null&&e.dimensions?`${e.dimensions.width}×${e.dimensions.height}`:"N/A"})]}),m.jsxs("div",{className:"voxket-stat-item",children:[m.jsx("span",{className:"voxket-stat-label",children:"Source:"}),m.jsx("span",{className:"voxket-stat-value",children:(e==null?void 0:e.source)||"None"})]}),m.jsxs("div",{className:"voxket-stat-item",children:[m.jsx("span",{className:"voxket-stat-label",children:"Status:"}),m.jsx("span",{className:`voxket-stat-value ${e!=null&&e.isEnabled?"voxket-stat-value--active":"voxket-stat-value--inactive"}`,children:e!=null&&e.isEnabled?"Active":"Inactive"})]})]})]})]})}const Dw=({handler:e,loadData:t,data:n,client:i,addLocalMessage:r})=>{const[s,o]=D.useState(null),[a,c]=D.useState(!0),[l,u]=D.useState(!1),[d]=D.useState(Date.now()),[h,f]=D.useState("pending");D.useEffect(()=>{(async()=>{try{if(c(!0),n&&typeof n=="object"){const w={title:n.title||"Untitled Assignment",description:n.description||"No description provided",estimated_time_of_completion:n.estimated_time_of_completion||"Unknown"};o(w),console.log("📋 AssignmentView: Assignment loaded from RPC data:",w)}}catch(w){console.error("📋 AssignmentView: Error loading assignment:",w),o({title:"Assignment Loading Error",description:"There was an error loading the assignment details. Please try again.",estimated_time_of_completion:"Unknown"})}finally{c(!1)}})()},[n,t]);const g=({message:b,assignment:w})=>{const S=b.toLowerCase().includes("declined"),k=S?"bg-red-50 border-red-200":"bg-green-50 border-green-200",x=S?"text-red-700":"text-green-700",C=S?"❌":"🎉";return m.jsxs("div",{className:`max-w-sm mx-auto ${k} border rounded-lg shadow p-3 flex flex-col items-center`,children:[m.jsx("div",{className:"text-2xl mb-2",children:C}),m.jsx("div",{className:`${x} font-semibold text-sm mb-1`,children:b}),m.jsx("div",{className:"text-xs text-gray-600 text-center mb-1",children:w.title}),m.jsx("div",{className:"text-xs text-gray-500",children:"Thank you for your response!"})]})},p=async()=>{if(!(!s||!e)){u(!0);try{const b={message:"accepted"};console.log("📋 AssignmentView: Assignment accepted:",b),e.didSuccess(b),f("accepted")}catch(b){console.error("📋 AssignmentView: Error accepting assignment:",b),e.didFail({error:"Failed to accept assignment"}),f("error")}finally{u(!1)}}},v=async()=>{if(!(!s||!e)){u(!0);try{const b={message:"declined"};console.log("📋 AssignmentView: Assignment declined:",b),e.didSuccess(b),f("declined")}catch(b){console.error("📋 AssignmentView: Error declining assignment:",b),e.didFail({error:"Failed to decline assignment"}),f("error")}finally{u(!1)}}};return a?m.jsx("div",{className:"max-w-sm mx-auto bg-white rounded-lg shadow-lg p-3",children:m.jsxs("div",{className:"flex items-center justify-center py-4",children:[m.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-blue-600"}),m.jsx("span",{className:"ml-2 text-xs text-gray-600",children:"Loading assignment..."})]})}):s?h==="accepted"||h==="declined"||h==="error"?m.jsx(g,{message:h==="accepted"?"Assignment accepted!":h==="declined"?"Assignment declined":"Assignment error occurred",assignment:s}):m.jsxs("div",{className:"max-w-sm mx-auto bg-white rounded-lg shadow-lg overflow-hidden",children:[m.jsx("div",{className:"bg-gradient-to-r from-blue-600 to-purple-600 text-white p-3",children:m.jsx("div",{className:"flex items-center justify-between",children:m.jsx("h3",{className:"text-xs font-semibold text-white truncate",children:s.title})})}),m.jsxs("div",{className:"p-3 text-black",children:[m.jsx("div",{className:"bg-gray-50 rounded p-2 mb-3",children:m.jsx("p",{className:"text-xs text-black leading-snug",children:s.description})}),m.jsx("div",{className:"mb-3 text-black",children:m.jsxs("div",{className:"flex items-center text-xs text-gray-600",children:[m.jsx("span",{className:"text-xs mr-1",children:"📅"}),m.jsxs("span",{children:["Est: ",s.estimated_time_of_completion]})]})}),m.jsxs("div",{className:"flex gap-2",children:[m.jsx("button",{onClick:p,disabled:l,className:"flex-1 bg-green-600 text-white py-2 px-3 rounded text-xs font-medium hover:bg-green-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:l?m.jsxs("span",{className:"flex items-center justify-center",children:[m.jsx("div",{className:"animate-spin rounded-full h-2 w-2 border-b-2 border-white mr-1"}),m.jsx("span",{className:"text-xs",children:"Processing..."})]}):"Accept"}),m.jsx("button",{onClick:v,disabled:l,className:"flex-1 bg-red-600 text-white py-2 px-3 rounded text-xs font-medium hover:bg-red-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:"Decline"})]})]})]}):m.jsx("div",{className:"max-w-sm mx-auto bg-white rounded-lg shadow-lg p-3",children:m.jsxs("div",{className:"text-center py-4",children:[m.jsx("div",{className:"text-red-600 text-sm font-semibold mb-2",children:"⚠️ Assignment Error"}),m.jsx("p",{className:"text-xs text-gray-600 mb-3",children:"Failed to load assignment details."})]})})};function KV(){const[e,t]=D.useState(null),[n,i]=D.useState([]);D.useEffect(()=>{const a=new Mo({appId:"your-app-id",appSecret:"your-app-secret",baseUrl:"https://your-voxket-api.com",agentId:"your-agent-id",participantName:"User",modalities:["chat"]});return t(a),a.on("rpc.method.called",c=>{console.log("RPC Method Called:",c)}),a.on("rpc.interaction.completed",c=>{console.log("RPC Interaction Completed:",c)}),()=>{a.disconnect()}},[]);const r=async()=>{if(e)try{await e.registerFrontendRPC("give_assignment",Dw,"embedded");const a=e.getRegisteredRpcMethods();i(a),console.log("✅ Assignment RPC registered successfully")}catch(a){console.error("❌ Failed to register assignment RPC:",a)}},s=async()=>{if(!e)return;const a=({handler:c,timeout:l})=>{const[u,d]=D.useState(""),h=[{id:"pro",name:"Pro Plan",price:"$29/month"},{id:"enterprise",name:"Enterprise Plan",price:"$99/month"},{id:"basic",name:"Basic Plan",price:"$9/month"}],f=p=>{d(p)},g=()=>{const p=h.find(v=>v.id===u);c==null||c.didSuccess({selectedProduct:u,productName:p==null?void 0:p.name,price:p==null?void 0:p.price,timestamp:new Date().toISOString()})};return m.jsxs("div",{className:"p-6 bg-white rounded-lg",children:[m.jsx("h3",{className:"text-xl font-bold mb-4",children:"Choose Your Plan"}),m.jsx("p",{className:"text-gray-600 mb-4",children:"Select the plan that best fits your needs:"}),m.jsx("div",{className:"space-y-3 mb-6",children:h.map(p=>m.jsx("div",{onClick:()=>f(p.id),className:`p-4 border rounded-lg cursor-pointer transition-all ${u===p.id?"border-blue-500 bg-blue-50":"border-gray-200 hover:border-gray-300"}`,children:m.jsxs("div",{className:"flex justify-between items-center",children:[m.jsxs("div",{children:[m.jsx("h4",{className:"font-medium",children:p.name}),m.jsx("p",{className:"text-gray-600 text-sm",children:p.price})]}),m.jsx("div",{className:`w-4 h-4 rounded-full ${u===p.id?"bg-blue-500":"border-2 border-gray-300"}`})]})},p.id))}),m.jsxs("div",{className:"flex justify-end space-x-3",children:[m.jsx("button",{onClick:()=>c==null?void 0:c.dismissView(),className:"px-4 py-2 border border-gray-300 text-gray-700 rounded hover:bg-gray-50",children:"Cancel"}),m.jsx("button",{onClick:g,disabled:!u,className:"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 disabled:opacity-50",children:"Select Plan"})]}),l&&m.jsxs("p",{className:"text-xs text-gray-500 mt-2",children:["Time remaining: ",l," seconds"]})]})};try{await e.registerFrontendRPC("recommend_product",a,"modal");const c=e.getRegisteredRpcMethods();i(c),console.log("✅ Product Recommendation RPC registered successfully")}catch(c){console.error("❌ Failed to register product recommendation RPC:",c)}},o=async()=>{if(!e)return;const a=({handler:c})=>{const[l,u]=D.useState(0),[d,h]=D.useState(""),f=()=>{c==null||c.didSuccess({rating:l,comment:d,timestamp:new Date().toISOString()})};return m.jsxs("div",{className:"p-4 bg-white rounded-lg",children:[m.jsx("h3",{className:"text-lg font-semibold mb-3",children:"How was your experience?"}),m.jsxs("div",{className:"mb-4",children:[m.jsx("p",{className:"text-sm text-gray-600 mb-2",children:"Rate your experience:"}),m.jsx("div",{className:"flex space-x-1",children:[1,2,3,4,5].map(g=>m.jsx("button",{onClick:()=>u(g),className:`text-2xl ${g<=l?"text-yellow-400":"text-gray-300"}`,children:"⭐"},g))})]}),m.jsxs("div",{className:"mb-4",children:[m.jsx("p",{className:"text-sm text-gray-600 mb-2",children:"Additional comments:"}),m.jsx("textarea",{value:d,onChange:g=>h(g.target.value),className:"w-full p-2 border border-gray-300 rounded text-sm",rows:3,placeholder:"Tell us more about your experience..."})]}),m.jsxs("div",{className:"flex justify-end space-x-2",children:[m.jsx("button",{onClick:()=>c==null?void 0:c.dismissView(),className:"px-3 py-1 text-sm border border-gray-300 text-gray-700 rounded hover:bg-gray-50",children:"Skip"}),m.jsx("button",{onClick:f,disabled:l===0,className:"px-3 py-1 text-sm bg-blue-500 text-white rounded hover:bg-blue-600 disabled:opacity-50",children:"Submit"})]})]})};try{await e.registerFrontendRPC("collect_feedback",a,"embedded");const c=e.getRegisteredRpcMethods();i(c),console.log("✅ Feedback RPC registered successfully")}catch(c){console.error("❌ Failed to register feedback RPC:",c)}};return m.jsxs("div",{className:"p-6",children:[m.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Frontend RPC Examples"}),m.jsxs("div",{className:"space-y-4 mb-6",children:[m.jsxs("div",{children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Register RPC Methods"}),m.jsxs("div",{className:"space-x-2",children:[m.jsx("button",{onClick:r,className:"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600",children:"Register Assignment RPC"}),m.jsx("button",{onClick:s,className:"px-4 py-2 bg-green-500 text-white rounded hover:bg-green-600",children:"Register Product Recommendation RPC"}),m.jsx("button",{onClick:o,className:"px-4 py-2 bg-purple-500 text-white rounded hover:bg-purple-600",children:"Register Feedback RPC"})]})]}),m.jsxs("div",{children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Registered Methods"}),n.length>0?m.jsx("ul",{className:"list-disc list-inside space-y-1",children:n.map(a=>m.jsx("li",{className:"text-gray-700",children:m.jsx("code",{className:"bg-gray-100 px-2 py-1 rounded",children:a})},a))}):m.jsx("p",{className:"text-gray-500",children:"No methods registered yet"})]})]}),m.jsxs("div",{className:"bg-gray-50 p-4 rounded-lg",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"How it works"}),m.jsxs("ol",{className:"list-decimal list-inside space-y-2 text-sm text-gray-700",children:[m.jsxs("li",{children:["Register RPC methods with React components using ",m.jsx("code",{children:"client.registerFrontendRPC()"})]}),m.jsx("li",{children:"When the agent calls an RPC method, the corresponding component will be displayed"}),m.jsx("li",{children:"Users interact with the component, and the response is sent back to the agent"}),m.jsx("li",{children:"Components can be displayed in different modes: embedded, modal, or fullscreen"}),m.jsx("li",{children:"Each component has a timeout and can handle success/failure scenarios"})]})]}),m.jsxs("div",{className:"mt-6 bg-blue-50 p-4 rounded-lg",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2 text-blue-800",children:"Agent Side"}),m.jsx("p",{className:"text-sm text-blue-700 mb-2",children:"On the agent side, you can call these RPC methods like this:"}),m.jsx("pre",{className:"bg-white p-3 rounded text-xs text-gray-800 overflow-x-auto",children:`// Agent calls RPC method
182
+ `,style:{minHeight:"3rem",display:o===i?"flex":"none",alignItems:"center",justifyContent:"center"},children:m.jsx("span",{className:"italic",children:s})},o))})}const uw=_.forwardRef(({disabled:e,onStartCall:t,onStartChat:n,onStartVideo:i,prompts:r=['"Click to talk"','"How can I assist you today?"'],statusMessage:s="Agent is ready",title:o="Choose how to interact",subTitle:a="Ask me anything or give me a task to complete",theme:c="vox",modalities:l=["voice","chat","video"]},u)=>{const d=on(c),h=l.includes("voice"),f=l.includes("chat"),g=l.includes("video"),p=[h,f,g].filter(Boolean).length;return m.jsxs("div",{className:"flex flex-col items-center h-full justify-center w-full relative px-8 py-16","aria-disabled":e,style:{background:"transparent"},children:[m.jsx("div",{className:"absolute inset-0 opacity-[0.01] pointer-events-none mix-blend-overlay",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulance type='fractalNoise' baseFrequency='2' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`,backgroundRepeat:"repeat"}}),m.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[500px] h-[500px] bg-gradient-radial from-white/[0.02] to-transparent blur-3xl pointer-events-none"}),m.jsxs("div",{className:"flex flex-col items-center justify-center w-full max-w-2xl space-y-12 z-10",children:[m.jsx("div",{className:"text-center space-y-2 max-w-md",children:m.jsx("p",{className:`text-base leading-relaxed tracking-wide ${d.text.secondary}`,children:a})}),m.jsx("div",{className:"flex items-center justify-center w-full",children:h&&f&&g?m.jsxs("div",{className:"flex gap-5 items-center justify-center",children:[m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:t,children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]}),m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:n,children:[m.jsx(lu,{onClick:n,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Chat"})]}),m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:i||t,children:[m.jsx(uu,{onClick:i||t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Video"})]})]}):p>1?m.jsxs("div",{className:"flex gap-6 items-center justify-center",children:[h&&m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:t,children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]}),f&&m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:n,children:[m.jsx(lu,{onClick:n,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Chat"})]}),g&&i&&m.jsxs("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",onClick:i,children:[m.jsx(uu,{onClick:i,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Video"})]})]}):m.jsx("div",{className:"flex flex-col items-center gap-3 group cursor-pointer",children:h?m.jsxs(m.Fragment,{children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]}):f?m.jsxs(m.Fragment,{children:[m.jsx(lu,{onClick:n,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Chat"})]}):g&&i?m.jsxs(m.Fragment,{children:[m.jsx(uu,{onClick:i,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Video"})]}):m.jsxs(m.Fragment,{children:[m.jsx(aa,{onClick:t,disabled:e,theme:c}),m.jsx("span",{className:`text-xs font-medium tracking-wider uppercase ${d.text.muted} group-hover:text-white transition-colors duration-300`,children:"Voice"})]})})}),m.jsx("div",{className:"w-full flex justify-center",children:m.jsx(rV,{prompts:r,theme:c})})]})]})});uw.displayName="Welcome";class kf extends D.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("VoxketWidget Error:",t,n)}render(){if(this.state.hasError){if(this.props.fallback){const t=this.props.fallback;return D.createElement(t,{error:this.state.error})}return D.createElement("div",{style:{padding:"20px",border:"1px solid #ff4444",borderRadius:"8px",background:"#fff5f5",color:"#cc0000"}},"VoxketWidget encountered an error. Please check the console for details.")}return this.props.children}}const sV="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZgAAAJkCAYAAAAsgzeqAAAAAXNSR0IArs4c6QAAIABJREFUeF7sfQeUHMW1dnWctEk5B5BEkEQUOVlgwAZZJCPeMwbMI0i2MMImGpzGAWMMmGdwAgcyBgknwCY8AzIggkAEgQgCZaFV3tWGCR3//1Z1dVfXzuyudrdBMnfO0VnNTHd1z1fV96ubFYIvRAARQAQQAUQgAQSUBMbEIREBRAARQAQQAYIEg4sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABJMIrDgoIoAIIAKIABIMrgFEABFABBCBRBBAgkkEVhwUEUAEEAFEAAkG1wAigAggAohAIgggwSQCKw6KCCACiAAigASDawARQAQQAUQgEQSQYBKBFQdFBBABRAARQILBNYAIIAKIACKQCAJIMInAioMiAogAIoAIIMHgGkAEEAFEABFIBAEkmERgxUERAUQAEUAEkGBwDSACiAAigAgkggASTCKw4qCIACKACCACSDC4BhABRAARQAQSQQAJJhFYcVBEABFABBABJBhcA4gAIoAIIAKJIIAEkwisOCgigAggAogAEgyuAUQAEUAEEIFEEECCSQRWHBQRQAQQAUQACQbXACKACCACiEAiCCDBJAIrDooIIAKIACKABINrABFABBABRCARBJBgEoEVB0UEEAFEABFAgsE1gAggAogAIpAIAkgwicCKgyICiAAigAggweAaQAQQAUQAEUgEASSYRGDFQREBRAARQASQYHANIAKIACKACCSCABJMIrDioIgAIoAIIAJIMLgGEAFEABFABBJBAAkmEVhxUEQAEUAEEAEkGFwDiAAigAggAokggASTCKw4KCKACCACiAASDK4BRAARQAQQgUQQQIJJBFYcFBFABBABRAAJBtcAIoAIIAKIQCIIIMEkAisOigggAogAIoAEg2sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABJMIrDgoIoAIIAKIABIMrgFEABFABBCBRBBAgkkEVhwUEUAEEAFEAAkG1wAigAggAohAIgggwSQCKw6KCCACiAAigASDawARQAQQAUQgEQSQYBKBFQdFBBABRAARQILBNYAIIAKIACKQCAJIMInAioMiAogAIoAIIMHgGkAEEAFEABFIBAEkmERgxUERAUQAEUAEkGBwDSACiAAigAgkggASTCKw4qCIACKACCACSDC4BhABRAARQAQSQQAJJhFYcVBEABFABBABJBhcA4gAIoAIIAKJIIAEkwisOCgigAggAogAEgyuAUQAEUAEEIFEEECCSQRWHBQRQAQQAUQACQbXACKACCACiEAiCCDBJAIrDooIIAKIACKABINrABFABBABRCARBJBgEoEVB0UEEAFEABFAgsE1gAggAogAIpAIAkgwicCKgyICiAAigAggweAaQAQQAUQAEUgEASSYRGDFQREBRAARQASQYHANIAKIACKACCSCABJMIrDioIgAIoAIIAJIMLgGEAFEABFABBJBAAkmEVhxUEQAEUAEEAEkGFwDiAAigAggAokggASTCKw4KCKACCACiAASDK4BRAARQAQQgUQQQIJJBFYcFBFABBABRAAJBtcAIoAIIAKIQCIIIMEkAisOigggAogAIoAEg2sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABJMIrDgoIoAIIAKIABIMrgFEABFABBCBRBBAgkkEVhwUEUAEEAFEAAkG1wAigAggAohAIgggwSQCKw6KCCACiAAigASDawARQAQQAUQgEQSQYBKBFQdFBBABRAARQILBNYAIIAKIACKQCAJIMInAioMiAogAIoAIIMHgGkAEEAFEABFIBAEkmERgxUERAUQAEUAEkGBwDSACiAAigAgkggASTCKw4qCIACKACCACSDC4BhABRAARQAQSQQAJJhFYcVBEABFABBABJBhcA4gAIoAIIAKJIIAEkwisOCgigAggAogAEgyuAUQAEUAEEIFEEECCSQRWHBQRQAQQAUQACQbXACKACCACiEAiCCDBJAIrDooIIAKIACKABINrABFABBABRCARBJBgEoEVB0UEEAFEABFAgsE1gAggAogAIpAIAkgwicCKgyICiAAigAggweAaQAQQAUQAEUgEASSYRGDFQREBRAARQASQYHANIAKIACKACCSCABJMIrDioIgAIoAIIAJIMLgGEAFEABFABBJBAAkmEVhxUEQAEUAEEAEkGFwDiAAigAggAokggASTCKw4KCKACCACiAASDK4BRAARQAQQgUQQQIJJBFYcFBFABBABRAAJBtcAIoAIIAKIQCIIIMEkAisOigggAogAIoAEg2sAEUAEEAFEIBEEkGASgRUHRQQQAUQAEUCCwTWACCACiAAikAgCSDCJwIqDIgKIACKACCDB4BpABBABRAARSAQBJJhEYMVBEQFEABFABJBgcA0gAogAIoAIJIIAEkwisOKgiAAigAggAkgwuAYQAUQAEUAEEkEACSYRWHFQRAARQAQQASQYXAOIACKACCACiSCABNNLWGfMmKGNHz++/8knnji6oa5//cYNG9zaXM22ctFrvGnOTU3z3plnE0L8Xl4GT0cEEAFEYKdDAAmmF1N28QkXp750+elTxowacXI6lTq0rr5ukK4bim1ZW23bea2xcd17r7z2xiuPPvXEu/fdd18rEk0vwMZTEQFEYKdDAAmmF1P20P0P7fHZo4++UfGtQ5qbm9N1dXWG67qeaZqe7/t+ff2AtnKptGT1mrUvbN7a/K8Xnn1hyeX5y7cg0fQCdDwVEUAEdhoEkGB6OFX5fF494TOfu2LkmNGXlaziAF3XVcuySKYmQ1zXJY7jkGw26yqK4miK0lRbU7PetuwVS99777EVq1a8XNq8eeVZc+a09PDyeBoigAgkjwCXj2ji7iHWSDA9BM4nvrJ88QeP+IZ2ZNl16lKpFLFtm6QyJvF9th4NwyAK8YimaYT4LtEVtb2+rqasEbWtrWXbffP//dzff/Czny1vbR3a8uGHj4Gvxuvh7eBpiAAi0AsEYMO4ZMkSfd26cuqWG74/xEgbY1XNH6Q4nqp4pKmppbDkrgfvWnf77bfDc4qvbiKABNNN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kkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABFBgcA0gASSABJBAUgigwCQFKw6KBJAAEkACKDC4BpAAEkACSCApBFBgkoIVB0UCSAAJIAEUGFwDSAAJIAEkkBQCKDBJwYqDIgEkgASQAAoMrgEkgASQABJICgEUmKRgxUGRABJAAkgABQbXABJAAkgACSSFAApMUrDioEgACSABJIACg2sACSABJIAEkkIABSYpWHFQJIAEkAASQIHBNYAEkAASQAJJIYACkxSsOCgSQAJIAAmgwOAaQAJIAAkggaQQQIFJClYcFAkgASSABP4PDQqqMgGtmQIAAAAASUVORK5CYII=",dw=({onClick:e,position:t="bottom-right",size:n=64,className:i="",style:r,ariaLabel:s="Open Voxket",logoScale:o=.7,isRunning:a=!1,logoUrl:c=sV})=>{const l={"top-left":"top-4 left-4","top-right":"top-4 right-4","bottom-left":"bottom-4 left-4","bottom-right":"bottom-4 right-4"},u={width:n,height:n,...r},d=D.useMemo(()=>{if(typeof window>"u"||!window.matchMedia)return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}},[]),h="0 8px 32px rgba(0,0,0,0.3)",f="0 0 0 3px rgba(34,211,238,0.6), 0 0 20px rgba(6,182,212,0.5), 0 8px 32px rgba(0,0,0,0.3)";return m.jsxs(je.button,{type:"button",onClick:e,"aria-label":s,className:`fixed z-50 rounded-full bg-black flex items-center justify-center overflow-visible focus:outline-none focus:ring-2 focus:ring-cyan-400/60 ${l[t]} ${i}`,style:u,initial:{scale:.9,opacity:0,boxShadow:h},animate:{scale:1,opacity:1,boxShadow:a&&!d?[f,"0 0 0 3px rgba(34,211,238,0.9), 0 0 30px rgba(6,182,212,0.7), 0 8px 32px rgba(0,0,0,0.3)",f]:a?f:h},exit:{scale:.9,opacity:0},whileHover:{scale:1.05},whileTap:{scale:.95},"data-position":t,"data-voxket-trigger":"true",transition:{scale:{type:"spring",stiffness:400,damping:25},opacity:{duration:.2},boxShadow:a&&!d?{duration:1.5,repeat:1/0,ease:"easeInOut"}:{duration:.3}},children:[a&&m.jsx(je.span,{"aria-hidden":!0,className:"absolute inset-[-3px] rounded-full pointer-events-none",style:{background:"conic-gradient(from 0deg, rgba(6,182,212,0.8) 0deg, rgba(34,211,238,1) 120deg, rgba(6,182,212,0.8) 240deg, rgba(34,211,238,1) 360deg)",WebkitMask:"radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px))",mask:"radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px))"},animate:d?void 0:{rotate:360},transition:d?void 0:{duration:3,repeat:1/0,ease:"linear"}}),m.jsx("span",{className:"absolute inset-0 rounded-full bg-black","aria-hidden":!0}),m.jsx("img",{src:c,alt:"Voxket",className:"object-contain select-none pointer-events-none relative z-10",style:{width:`${Math.max(0,Math.min(1,o))*100}%`,height:`${Math.max(0,Math.min(1,o))*100}%`,filter:a?"brightness(1.1) contrast(1.05)":"none"},draggable:!1})]})};function hw({room:e,onSessionEnd:t,onSessionStart:n,enableConsoleLogging:i=!0,enableLocalStorage:r=!0,voxketSessionId:s}={}){const[o,a]=D.useState(null),[c,l]=D.useState([]),[u,d]=D.useState(null),[h,f]=D.useState([]),g=D.useCallback((w,S)=>{const k={timestamp:new Date,event:w,data:S,sessionId:o==null?void 0:o.sessionId,participantId:u==null?void 0:u.identity};if(l(x=>[...x,k]),r){const x=JSON.parse(localStorage.getItem("voxket-session-logs")||"[]");x.push(k),localStorage.setItem("voxket-session-logs",JSON.stringify(x))}return k},[o==null?void 0:o.sessionId,u==null?void 0:u.identity,i,r]);D.useEffect(()=>{if(!e)return;const w=()=>{const y=s||`session-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,I=new Date,N={sessionId:y,startTime:I,totalMessages:0,connectionIssues:0,participantCount:h.length,events:[]};a(N),g("SESSION_STARTED",{sessionId:y,startTime:I}),n==null||n(y)},S=()=>{if(o){const y=new Date,I=y.getTime()-o.startTime.getTime(),N={...o,endTime:y,duration:I,events:c};g("SESSION_ENDED",{sessionId:o.sessionId,duration:`${Math.round(I/1e3)}s`,totalMessages:o.totalMessages,connectionIssues:o.connectionIssues}),t==null||t(N),a(null),l([])}},k=y=>{g("CONNECTION_STATE_CHANGED",{state:y}),y===ze.Reconnecting&&o&&(a(I=>I?{...I,connectionIssues:I.connectionIssues+1}:null),g("CONNECTION_ISSUE",{type:"reconnecting"}))},x=y=>{g("TRACK_PUBLISHED",{trackKind:y.kind,trackSource:y.source})},C=y=>{g("TRACK_UNPUBLISHED",{trackKind:y.kind,trackSource:y.source})},M=(y,I)=>{o&&a(N=>N?{...N,totalMessages:N.totalMessages+1}:null),g("DATA_RECEIVED",{participantId:I==null?void 0:I.identity,dataSize:y.length})},R=y=>{g("PARTICIPANT_CONNECTED",{participantId:y.identity,participantName:y.name}),f(I=>[...I,y]),o&&a(I=>I?{...I,participantCount:I.participantCount+1}:null)},P=y=>{g("PARTICIPANT_DISCONNECTED",{participantId:y.identity,participantName:y.name}),f(I=>I.filter(N=>N.identity!==y.identity))};return e.localParticipant&&d(e.localParticipant),e.on(F.Connected,w),e.on(F.Disconnected,S),e.on(F.ConnectionStateChanged,k),e.on(F.TrackPublished,x),e.on(F.TrackUnpublished,C),e.on(F.DataReceived,M),e.on(F.ParticipantConnected,R),e.on(F.ParticipantDisconnected,P),()=>{e.off(F.Connected,w),e.off(F.Disconnected,S),e.off(F.ConnectionStateChanged,k),e.off(F.TrackPublished,x),e.off(F.TrackUnpublished,C),e.off(F.DataReceived,M),e.off(F.ParticipantConnected,R),e.off(F.ParticipantDisconnected,P)}},[e,o,c,h.length,g,t,n]);const p=D.useCallback(()=>r?JSON.parse(localStorage.getItem("voxket-session-logs")||"[]"):c,[c,r]),v=D.useCallback(()=>{r&&localStorage.removeItem("voxket-session-logs"),l([])},[r]),b=D.useCallback(()=>{const w=p(),S=JSON.stringify(w,null,2),k="data:application/json;charset=utf-8,"+encodeURIComponent(S),x=`voxket-session-logs-${new Date().toISOString().split("T")[0]}.json`,C=document.createElement("a");C.setAttribute("href",k),C.setAttribute("download",x),C.click()},[p]);return{sessionMetrics:o,sessionLogs:c,logEvent:g,getSessionLogs:p,clearSessionLogs:v,exportSessionLogs:b}}class Sf{constructor(){Ne(this,"listeners",{})}on(t,n){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(n),()=>this.off(t,n)}once(t,n){const i=(...r)=>{this.off(t,i),n(...r)};return this.on(t,i)}off(t,n){const i=this.listeners[t];if(!i)return;const r=i.indexOf(n);r>-1&&i.splice(r,1)}removeAllListeners(t){t?delete this.listeners[t]:this.listeners={}}emit(t,...n){const i=this.listeners[t];if(!i)return;const r=[...i];for(const s of r)try{s(...n)}catch(o){console.error(`Error in event listener for ${String(t)}:`,o)}}listenerCount(t){var n;return((n=this.listeners[t])==null?void 0:n.length)??0}eventNames(){return Object.keys(this.listeners)}}class fw{constructor(t){Ne(this,"plugins",new Map);Ne(this,"installedPlugins",new Set);Ne(this,"context");this.context={client:t,emit:t.emit.bind(t),on:t.on.bind(t),config:{}}}register(t){if(this.plugins.has(t.name))throw new Error(`Plugin '${t.name}' is already registered`);if(t.dependencies){for(const n of t.dependencies)if(!this.plugins.has(n))throw new Error(`Plugin '${t.name}' depends on '${n}' which is not registered`)}this.plugins.set(t.name,t)}async install(t,n){const i=this.plugins.get(t);if(!i)throw new Error(`Plugin '${t}' is not registered`);if(this.installedPlugins.has(t))throw new Error(`Plugin '${t}' is already installed`);if(i.dependencies)for(const s of i.dependencies)this.installedPlugins.has(s)||await this.install(s);const r={...this.context,config:{...i.config,...n}};i.install&&await i.install(r),this.installedPlugins.add(t),this.setupPluginEvents(i,r)}async uninstall(t){var i;const n=this.plugins.get(t);if(!n)throw new Error(`Plugin '${t}' is not registered`);if(this.installedPlugins.has(t)){for(const[r,s]of this.plugins)if(this.installedPlugins.has(r)&&((i=s.dependencies)!=null&&i.includes(t)))throw new Error(`Cannot uninstall '${t}' because '${r}' depends on it`);n.uninstall&&await n.uninstall(this.context),this.installedPlugins.delete(t)}}isInstalled(t){return this.installedPlugins.has(t)}getInstalledPlugins(){return Array.from(this.installedPlugins)}getAvailablePlugins(){return Array.from(this.plugins.keys())}getPluginInfo(t){return this.plugins.get(t)}setupPluginEvents(t,n){t.onSessionStart&&n.on("session.started",i=>{t.onSessionStart(n,i.id)}),t.onSessionEnd&&n.on("session.ended",i=>{t.onSessionEnd(n,i.id)}),t.onAgentResponse&&n.on("agent.response",i=>{t.onAgentResponse(n,i)})}}function oV(e){return e}function wf(e,t,n){return{name:e,version:"1.0.0",description:`${t} modality plugin`,install:async i=>{n.onActivate&&await n.onActivate(i)},uninstall:async i=>{n.onDeactivate&&await n.onDeactivate(i)},onAgentResponse:n.onMessage}}const aV={name:"analytics",version:"1.0.0",description:"Built-in analytics tracking",install:async e=>{console.log("Analytics plugin installed"),e.on("session.started",t=>{console.log("Analytics: Session started",t.id)}),e.on("session.ended",(t,n)=>{console.log("Analytics: Session ended",t.id,n)}),e.on("chat.message.sent",t=>{console.log("Analytics: User message sent",t.content.length)})}},cV={name:"debug",version:"1.0.0",description:"Debug logging and development tools",install:async e=>{console.log("Debug plugin installed");const t=e.emit;e.emit=(n,...i)=>(console.log(`[Debug] Event: ${String(n)}`,i),t(n,...i))}},lV={name:"metrics",version:"1.0.0",description:"Advanced metrics collection",install:async e=>{console.log("Metrics plugin installed");const t=new Map;e.on("session.started",n=>{t.set(n.id,{startTime:Date.now(),events:[]})}),e.on("agent.response",n=>{console.log("Metrics: Agent response analyzed",{type:n.type,length:n.content.length,timestamp:n.timestamp})})}};class pw extends Sf{constructor(n){super();Ne(this,"room",null);Ne(this,"registeredMethods",new Map);Ne(this,"activeInteractions",new Map);Ne(this,"currentInteraction",null);n&&this.setRoom(n)}setRoom(n){this.room=n}async registerFrontendRPC(n,i,r="embedded"){if(console.log(`RpcManager: Starting registration for method '${n}'`),!this.room)throw console.error(`RpcManager: Cannot register '${n}' - no room instance`),new Error("Room not initialized. Cannot register RPC method.");if(!this.room.localParticipant)throw console.error(`RpcManager: Cannot register '${n}' - no local participant`),new Error("Local participant not available for RPC registration");console.log(`RpcManager: Room state: ${this.room.state}`),console.log(`RpcManager: Local participant: ${this.room.localParticipant.identity}`),console.log(`RpcManager: Registering frontend RPC method: ${n}`);const s={methodName:n,component:i,presentationMode:r};this.registeredMethods.set(n,s);try{this.room.registerRpcMethod(n,async o=>{console.log(`RpcManager: RPC method '${n}' called by ${o.callerIdentity}`),console.log("RpcManager: Payload:",o.payload),this.emit("rpc.method.called",{methodName:n,data:o});let a;console.log(`RpcManager: Current registration for '${n}':`,s);let c=o.responseTimeout||30;try{a=JSON.parse(o.payload)}catch{a=o.payload}try{const l=await this.awaitUserInteraction(n,i,r,a,c);return JSON.stringify(l)}catch(l){throw console.error(`RpcManager: Error in RPC method '${n}':`,l),l}}),this.emit("rpc.method.registered",{methodName:n}),console.log(`RpcManager: Successfully registered RPC method: ${n}`)}catch(o){throw console.error(`RpcManager: Failed to register RPC method '${n}':`,o),o}}async awaitUserInteraction(n,i,r,s,o){return new Promise((a,c)=>{const l=`${n}_${Date.now()}`;console.log(`RpcManager: Starting user interaction for method: ${n}, timeout: ${o} seconds`);const u={didSuccess:(h,f)=>{console.log(`RpcManager: User interaction successful for method: ${n}`,h),this.clearInteraction(l),this.currentInteraction=null;const g={success:!0,message:"User interaction completed successfully",data:h,timestamp:new Date,...f?{successView:f}:{}};this.emit("rpc.interaction.completed",{methodName:n,response:g}),a(g)},didFail:h=>{console.log(`RpcManager: User interaction failed for method: ${n}`,h),this.clearInteraction(l);const f={success:!1,message:"User interaction failed",error:h,timestamp:new Date};this.emit("rpc.interaction.completed",{methodName:n,response:f}),a(f)},dismissView:()=>{var f;console.log(`RpcManager: User dismissed interaction for method: ${n}`),console.log("RpcManager: Current interaction before dismiss:",(f=this.currentInteraction)==null?void 0:f.methodName),this.clearInteraction(l),this.currentInteraction=null,console.log("RpcManager: Current interaction after dismiss:",this.currentInteraction);const h={success:!0,data:{dismissed:!0,reason:"User dismissed the interaction"},message:"User interaction dismissed",timestamp:new Date};this.emit("rpc.interaction.dismissed",{methodName:n,response:h}),this.emit("rpc.interaction.completed",{methodName:n,response:h}),setTimeout(()=>{var g;((g=this.currentInteraction)==null?void 0:g.methodName)===n&&(console.log(`RpcManager: Force clearing interaction for ${n}`),this.currentInteraction=null)},0),a(h)},didTimeout:h=>{console.log(`RpcManager: User interaction timeout for method: ${n}`),this.clearInteraction(l),this.currentInteraction=null;const f={success:!0,message:`User interaction timed out after ${o} seconds, it should be considered as declined, agent don't need to retry`,timestamp:new Date,...h?{timeoutView:h}:{}};this.emit("rpc.interaction.timeout",{methodName:n,response:f}),setTimeout(()=>{var g;((g=this.currentInteraction)==null?void 0:g.methodName)===n&&(console.log(`RpcManager: Force clearing interaction for ${n}`),this.currentInteraction=null)},0),a(f)}},d=setTimeout(()=>{u.didTimeout&&u.didTimeout()},o);this.activeInteractions.set(l,{resolve:h=>a(JSON.parse(h)),reject:c,timeoutId:d}),this.currentInteraction={isVisible:!0,methodName:n,component:i,presentationMode:r,timeout:o,data:s,handler:u},this.emit("rpc.interaction.started",{methodName:n,presentationMode:r}),setTimeout(async()=>{var h;if((h=this.currentInteraction)!=null&&h.handler)try{console.log(`RpcManager: Component created for method: ${n} with data:`,s)}catch(f){console.error("RpcManager: Error loading data into component:",f),u.didFail({error:"Failed to load data into component"})}},100)})}clearInteraction(n){const i=this.activeInteractions.get(n);i&&(console.log(`RpcManager: Clearing interaction: ${n}`),clearTimeout(i.timeoutId),this.activeInteractions.delete(n))}getCurrentInteraction(){return this.currentInteraction}dismissCurrentInteraction(){var n;this.currentInteraction&&(console.log(`RpcManager: Dismissing current interaction: ${this.currentInteraction.methodName}`),(n=this.currentInteraction.handler)==null||n.dismissView(),setTimeout(()=>{this.currentInteraction&&(console.log("RpcManager: Force clearing lingering interaction"),this.currentInteraction=null)},0))}getRegisteredMethods(){return Array.from(this.registeredMethods.keys())}unregisterMethod(n){this.registeredMethods.delete(n),console.log(`RpcManager: Unregistered RPC method: ${n}`)}clear(){for(const[n,i]of this.activeInteractions)clearTimeout(i.timeoutId);this.activeInteractions.clear(),this.registeredMethods.clear(),this.currentInteraction=null,console.log("RpcManager: Cleared all registrations and interactions")}}class tt extends Error{constructor(t,n,i){super(t),this.code=n,this.details=i,this.name="VoxketError"}}class mw{constructor(t,n="User"){Ne(this,"chatMessages",[]);Ne(this,"activeTranscriptions",new Map);Ne(this,"room",null);Ne(this,"eventEmitter");Ne(this,"participantName");this.eventEmitter=t,this.participantName=n}setRoom(t){this.room=t}setParticipantName(t){this.participantName=t}getChatMessages(){return[...this.chatMessages]}addChatMessage(t){this.chatMessages.some(i=>i.id===t.id)||this.chatMessages.push(t)}updateChatMessage(t){const n=this.chatMessages.findIndex(i=>i.id===t.id);n!==-1&&(this.chatMessages[n]=t)}clearChatMessages(){this.chatMessages=[],this.activeTranscriptions.clear(),console.log("🧹 ChatManager: Cleared chat messages and transcription history")}trackTranscription(t,n){this.activeTranscriptions.set(t,{messageId:n,timestamp:Date.now()})}getActiveTranscription(t){const n=Date.now(),i=this.activeTranscriptions.get(t);return i&&n-i.timestamp<1e3?i:null}async sendMessage(t,n){if(!this.room)throw new tt("No room connection","CONNECTION_FAILED");if(!this.room.localParticipant)throw new tt("No local participant","CONNECTION_FAILED");try{const i={id:`msg_${Date.now()}`,content:t,sender:{id:"user",name:this.participantName,type:"participant"},timestamp:new Date,metadata:n||{}};await this.room.localParticipant.sendText(t,{topic:"lk.chat",destinationIdentities:[]}),this.eventEmitter.emit("chat.message.sent",i)}catch(i){throw console.error("ChatManager: Failed to send chat message:",i),new tt("Failed to send message","NETWORK_ERROR",i)}}async sendAttachments(t,n){if(!this.room)throw new tt("No room connection","CONNECTION_FAILED");if(!this.room.localParticipant)throw new tt("No local participant","CONNECTION_FAILED");if(!t||t.length===0)throw new tt("No files provided","INVALID_PARAMETER");const i=t.filter(r=>r.type.startsWith("image/"));if(i.length===0)throw new tt("Only image files are allowed","INVALID_PARAMETER");i.length!==t.length&&console.warn("ChatManager: Some non-image files were filtered out");try{const r=i.map(async(s,o)=>{const c={id:`att_${Date.now()}_${o}`,content:`📎 ${s.name}`,sender:{id:"user",name:this.participantName,type:"participant"},timestamp:new Date,metadata:{...n,type:"attachment",fileName:s.name,fileSize:s.size,mimeType:s.type,uploading:!0}};this.eventEmitter.emit("chat.message.sent",c);const l=await this.room.localParticipant.sendFile(s,{mimeType:s.type,topic:"images",onProgress:d=>{const h={...c,metadata:{...c.metadata,uploadProgress:d}};this.eventEmitter.emit("chat.message.updated",h)}});try{const d=new FileReader,h=new Promise((p,v)=>{d.onload=()=>{typeof d.result=="string"?p(d.result):v(new Error("Failed to convert to base64"))},d.onerror=v});d.readAsDataURL(s);const g={type:"image",data:await h,filename:s.name,mimeType:s.type,size:s.size};await this.room.localParticipant.sendText(JSON.stringify(g),{topic:"images",destinationIdentities:[]})}catch(d){console.warn("ChatManager: Failed to send image data to agent:",d);try{const h=`I've shared an image: ${s.name}`;await this.room.localParticipant.sendText(h,{topic:"lk.chat",destinationIdentities:[]})}catch(h){console.warn("ChatManager: Failed to send image notification to agent:",h)}}const u={...c,metadata:{...c.metadata,uploading:!1,uploadProgress:1,streamId:l.id}};return this.eventEmitter.emit("chat.message.updated",u),l});await Promise.all(r)}catch(r){throw console.error("ChatManager: Failed to send attachments:",r),new tt("Failed to send attachments","NETWORK_ERROR",r)}}async sendAttachment(t,n){return this.sendAttachments([t],n)}convertMarkdownToText(t){if(!t)return"";let n=t;return n=n.replace(/\*\*(.*?)\*\*/g,"$1"),n=n.replace(/__(.*?)__/g,"$1"),n=n.replace(/\*(.*?)\*/g,"$1"),n=n.replace(/_(.*?)_/g,"$1"),n=n.replace(/~~(.*?)~~/g,"$1"),n=n.replace(/`([^`]+)`/g,"$1"),n=n.replace(/```[\s\S]*?```/g,""),n=n.replace(/^#{1,6}\s+/gm,""),n=n.replace(/\[([^\]]+)\]\([^)]+\)/g,"$1"),n.trim()}}class gw{constructor(t){Ne(this,"room",null);Ne(this,"eventEmitter");Ne(this,"silencePreventionNode",null);Ne(this,"silencePreventionOscillator",null);Ne(this,"audioContext",null);this.eventEmitter=t,this.initializeAudioContext()}initializeAudioContext(){try{if(this.audioContext||(this.audioContext=new(window.AudioContext||window.webkitAudioContext),console.log("🔊 MediaManager: AudioContext created:",{state:this.audioContext.state,sampleRate:this.audioContext.sampleRate})),this.audioContext.state==="suspended"){console.log("🔊 MediaManager: AudioContext suspended, will resume on user interaction");const t=async()=>{this.audioContext&&this.audioContext.state==="suspended"&&(await this.audioContext.resume(),console.log("✅ MediaManager: AudioContext resumed:",this.audioContext.state)),document.removeEventListener("click",t),document.removeEventListener("touchstart",t),document.removeEventListener("keydown",t)};document.addEventListener("click",t,{once:!0}),document.addEventListener("touchstart",t,{once:!0}),document.addEventListener("keydown",t,{once:!0})}else this.audioContext.state==="running"&&console.log("✅ MediaManager: AudioContext already running")}catch(t){console.error("MediaManager: Failed to initialize AudioContext:",t)}}async ensureAudioContextRunning(){if(this.audioContext||this.initializeAudioContext(),this.audioContext&&this.audioContext.state==="suspended"){console.log("🔊 MediaManager: Attempting to resume suspended AudioContext");try{await this.audioContext.resume(),console.log("✅ MediaManager: AudioContext resumed successfully")}catch(t){console.error("MediaManager: Failed to resume AudioContext:",t)}}}setRoom(t){this.room=t}getLocalParticipant(){var t;return((t=this.room)==null?void 0:t.localParticipant)??null}getRemoteParticipants(){var t;return Array.from(((t=this.room)==null?void 0:t.remoteParticipants.values())??[])}async toggleMicrophone(t){return this.setMicrophoneEnabled(t!==!1)}async setMicrophoneEnabled(t){var n,i,r;try{if(!this.room||this.room.state!=="connected")throw console.warn("⚠️ MediaManager: Cannot enable microphone - room not connected",{hasRoom:!!this.room,roomState:(n=this.room)==null?void 0:n.state}),new tt("Cannot enable microphone: room not connected","CONNECTION_FAILED");await this.ensureAudioContextRunning();const s=(i=this.room)==null?void 0:i.localParticipant.isMicrophoneEnabled,o=t??!s;o&&this.startSilencePrevention(),await((r=this.room)==null?void 0:r.localParticipant.setMicrophoneEnabled(o,{autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0})),o?this.eventEmitter.emit("track.unmuted",{source:"microphone",enabled:!0}):(this.eventEmitter.emit("track.muted",{source:"microphone",enabled:!1}),this.stopSilencePrevention()),console.log("🎤 MediaManager: Microphone",o?"enabled":"disabled")}catch(s){throw console.error("MediaManager: Failed to toggle microphone:",s),this.stopSilencePrevention(),new tt("Failed to toggle microphone","PERMISSION_DENIED",s)}}startSilencePrevention(){try{if(this.audioContext||(this.audioContext=new AudioContext),this.silencePreventionOscillator)return;console.log("🔇 MediaManager: Starting silence prevention"),this.silencePreventionOscillator=this.audioContext.createOscillator(),this.silencePreventionNode=this.audioContext.createGain(),this.silencePreventionOscillator.frequency.value=20,this.silencePreventionNode.gain.value=.001,this.silencePreventionOscillator.connect(this.silencePreventionNode),this.silencePreventionNode.connect(this.audioContext.destination),this.silencePreventionOscillator.start(),console.log("✅ MediaManager: Silence prevention started")}catch(t){console.error("❌ MediaManager: Failed to start silence prevention:",t)}}stopSilencePrevention(){try{this.silencePreventionOscillator&&(console.log("🔇 MediaManager: Stopping silence prevention"),this.silencePreventionOscillator.stop(),this.silencePreventionOscillator.disconnect(),this.silencePreventionOscillator=null),this.silencePreventionNode&&(this.silencePreventionNode.disconnect(),this.silencePreventionNode=null)}catch(t){console.error("❌ MediaManager: Failed to stop silence prevention:",t)}}async toggleCamera(t){return this.setCameraEnabled(t!==!1)}async setCameraEnabled(t){var n,i;try{const r=(n=this.room)==null?void 0:n.localParticipant.isCameraEnabled,s=t??!r;await((i=this.room)==null?void 0:i.localParticipant.setCameraEnabled(s)),s?this.eventEmitter.emit("track.unmuted",{source:"camera",enabled:!0}):this.eventEmitter.emit("track.muted",{source:"camera",enabled:!1})}catch(r){throw new tt("Failed to toggle camera","PERMISSION_DENIED",r)}}async enableCamera(){return this.setCameraEnabled(!0)}async disableCamera(){return this.setCameraEnabled(!1)}async startScreenShare(){var t;try{await((t=this.room)==null?void 0:t.localParticipant.setScreenShareEnabled(!0)),this.eventEmitter.emit("track.unmuted",{source:"screenShare",enabled:!0})}catch(n){throw new tt("Failed to start screen share","PERMISSION_DENIED",n)}}async stopScreenShare(){var t;try{await((t=this.room)==null?void 0:t.localParticipant.setScreenShareEnabled(!1)),this.eventEmitter.emit("track.muted",{source:"screenShare",enabled:!1})}catch(n){throw new tt("Failed to stop screen share","PERMISSION_DENIED",n)}}async getAudioInputDevices(){try{return(await navigator.mediaDevices.enumerateDevices()).filter(n=>n.kind==="audioinput")}catch(t){throw new tt("Failed to get audio input devices","DEVICE_ERROR",t)}}async getVideoInputDevices(){try{return(await navigator.mediaDevices.enumerateDevices()).filter(n=>n.kind==="videoinput")}catch(t){throw new tt("Failed to get video input devices","DEVICE_ERROR",t)}}async setAudioInputDevice(t){var n;try{if(!((n=this.room)!=null&&n.localParticipant))throw new Error("Not connected to room")}catch(i){throw new tt("Failed to set audio input device","DEVICE_ERROR",i)}}async setVideoInputDevice(t){var n;try{if(!((n=this.room)!=null&&n.localParticipant))throw new Error("Not connected to room")}catch(i){throw new tt("Failed to set video input device","DEVICE_ERROR",i)}}getMicrophoneTrack(){const t=this.getLocalParticipant();if(!t)return null;for(const[,n]of t.trackPublications)if(n.source===j.Source.Microphone)return n.track;return null}getCameraTrack(){const t=this.getLocalParticipant();if(!t)return null;for(const[,n]of t.trackPublications)if(n.source===j.Source.Camera)return n.track;return null}getScreenShareTrack(){const t=this.getLocalParticipant();if(!t)return null;for(const[,n]of t.trackPublications)if(n.source===j.Source.ScreenShare)return n.track;return null}get isMicrophoneEnabled(){const t=this.getMicrophoneTrack();return t?!t.isMuted:!1}get isCameraEnabled(){const t=this.getCameraTrack();return t?!t.isMuted:!1}get isScreenShareEnabled(){const t=this.getScreenShareTrack();return t?!t.isMuted:!1}getAgentAudioTrack(){const t=this.getRemoteParticipants();console.log("🔊 MediaManager.getAgentAudioTrack: Checking remote participants:",{count:t.length,participants:t.map(n=>({identity:n.identity,name:n.name,hasMicTrack:!!n.getTrackPublication(j.Source.Microphone)}))});for(const n of t){const i=n.getTrackPublication(j.Source.Microphone);if(i!=null&&i.track)return console.log("✅ MediaManager.getAgentAudioTrack: Found audio track for",n.identity),{source:j.Source.Microphone,participant:n,publication:i}}return console.log("❌ MediaManager.getAgentAudioTrack: No audio track found"),null}getAgentVideoTrack(){const t=this.getRemoteParticipants();for(const n of t){const i=n.getTrackPublication(j.Source.Camera);if(i!=null&&i.track)return{source:j.Source.Camera,participant:n,publication:i}}return null}getVideoTrackRefs(){const t=[],n=this.getLocalParticipant();if(n){const r=n.getTrackPublication(j.Source.Camera);r!=null&&r.track&&t.push({source:j.Source.Camera,participant:n,publication:r});const s=n.getTrackPublication(j.Source.ScreenShare);s!=null&&s.track&&t.push({source:j.Source.ScreenShare,participant:n,publication:s})}const i=this.getRemoteParticipants();for(const r of i){const s=r.getTrackPublication(j.Source.Camera);s!=null&&s.track&&t.push({source:j.Source.Camera,participant:r,publication:s});const o=r.getTrackPublication(j.Source.ScreenShare);o!=null&&o.track&&t.push({source:j.Source.ScreenShare,participant:r,publication:o})}return t}getCameraTrackRefs(){return this.getVideoTrackRefs().filter(t=>t.source===j.Source.Camera)}getScreenShareTrackRefs(){return this.getVideoTrackRefs().filter(t=>t.source===j.Source.ScreenShare)}getPublishPermissions(){const t=this.getLocalParticipant();if(!t)return{camera:!1,microphone:!1,screenShare:!1,data:!1};const n=t.permissions;if(!n)return{camera:!0,microphone:!0,screenShare:!0,data:!0};const i=r=>!!n.canPublish&&(n.canPublishSources.length===0||n.canPublishSources.includes(r));return{camera:i(1),microphone:i(2),screenShare:i(3),data:n.canPublishData??!1}}canPublishSource(t){return this.getPublishPermissions()[t]}}class bw{constructor(t,n){Ne(this,"room",null);Ne(this,"config");Ne(this,"eventEmitter");Ne(this,"connectionState",ze.Disconnected);Ne(this,"isConnected",!1);Ne(this,"currentAgentInfo",null);this.config=t,this.eventEmitter=n,this.initializeRoom()}initializeRoom(){this.room=new vi({adaptiveStream:!1,stopLocalTrackOnUnpublish:!1,audioCaptureDefaults:{autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0},publishDefaults:{stopMicTrackOnMute:!1,preConnectBuffer:!0}}),this.setupRoomEventListeners()}setupRoomEventListeners(){this.room&&(this.room.on(F.Connected,()=>{this.connectionState=ze.Connected,this.isConnected=!0,console.log("📡 ConnectionManager: Emitting connection.connected event"),this.eventEmitter.emit("connection.connected")}),this.room.on(F.Disconnected,t=>{console.log("ConnectionManager: Room disconnected, reason:",t),this.connectionState=ze.Disconnected,this.isConnected=!1,t&&console.log("ConnectionManager: Disconnect reason details:",{reason:t.toString(),connectionState:this.connectionState}),this.eventEmitter.emit("connection.disconnected",t==null?void 0:t.toString())}),this.room.on(F.ConnectionStateChanged,t=>{this.connectionState=t,t===ze.Connecting&&this.eventEmitter.emit("connection.connecting")}),this.room.on(F.ParticipantConnected,t=>{const n={id:t.identity,name:t.name||t.identity,isLocal:!1};this.eventEmitter.emit("participant.joined",n)}),this.room.on(F.ParticipantDisconnected,t=>{const n={id:t.identity,name:t.name||t.identity,isLocal:!1};this.eventEmitter.emit("participant.left",n)}),this.room.on(F.LocalTrackPublished,t=>{console.log("ConnectionManager: Local track published:",t.source),t.source===j.Source.ScreenShare?this.eventEmitter.emit("track.unmuted",{source:"screenShare",enabled:!0}):t.source===j.Source.Microphone&&(console.log("✅ ConnectionManager: Local MICROPHONE track RE-PUBLISHED at:",new Date().toISOString()),console.log(" Track restart complete - audio should resume"))}),this.room.on(F.LocalTrackUnpublished,t=>{console.log(" ConnectionManager: Local track unpublished:",t.source),t.source===j.Source.ScreenShare?this.eventEmitter.emit("track.muted",{source:"screenShare",enabled:!1}):t.source===j.Source.Microphone&&(console.warn("⚠️ ConnectionManager: Local MICROPHONE track UNPUBLISHED at:",new Date().toISOString()),console.log(" ⚠️ WARNING: This will cause audio disruption!"))}),this.room.on(F.LocalAudioSilenceDetected,()=>{var t,n;console.log("🔇 ConnectionManager: Local audio silence detected at:",new Date().toISOString()),console.log(" Remote participants count:",(t=this.room)==null?void 0:t.remoteParticipants.size),(n=this.room)==null||n.remoteParticipants.forEach(i=>{console.log(" Remote participant:",i.identity,{audioTracks:i.audioTrackPublications.size,hasAudio:Array.from(i.audioTrackPublications.values()).some(r=>r.track)})})}),this.room.on(F.TrackSubscribed,(t,n,i)=>{var r,s;console.log("🎵 ConnectionManager: Track subscribed:",{trackKind:t.kind,trackSource:t.source,participantIdentity:i.identity,isAgent:(r=i.identity)==null?void 0:r.startsWith("agent-")}),this.eventEmitter.emit("media.track.subscribed",{id:t.sid||n.trackSid,kind:t.kind,source:((s=t.source)==null?void 0:s.toString())||"unknown",participantId:i.identity,isEnabled:!t.isMuted,isMuted:t.isMuted})}),this.room.on(F.TrackUnsubscribed,(t,n,i)=>{var r;console.log("🔇 ConnectionManager: Track unsubscribed:",{trackKind:t.kind,participantIdentity:i.identity}),this.eventEmitter.emit("media.track.unsubscribed",{id:t.sid||n.trackSid,kind:t.kind,source:((r=t.source)==null?void 0:r.toString())||"unknown",participantId:i.identity,isEnabled:!1,isMuted:!0})}))}async fetchConnectionDetails(t,n,i,r){try{const s={agent_id:t,participant_name:n,participant_metadata:r||{user_id:""},modality:i[0],modalities:i},o={accept:"application/json","Content-Type":"application/json"};if(this.config.authToken)o.Authorization=`Bearer ${this.config.authToken}`;else if(this.config.appId&&this.config.appSecret)o["X-APP-ID"]=this.config.appId,o["X-APP-SECRET"]=this.config.appSecret;else throw new Error("Either authToken or both appId and appSecret must be provided");const a=await fetch(`${this.config.baseUrl}/api/live/agent/session`,{method:"POST",headers:o,body:JSON.stringify(s)});if(!a.ok){let u=`HTTP ${a.status}: Failed to fetch connection details`;try{const d=await a.json();d&&(d.error?u=`API Error: ${d.error}`:d.detail?u=`API Error: ${d.detail}`:d.message&&(u=`API Error: ${d.message}`))}catch{try{const h=await a.text();h&&(u=`API Error: ${h}`)}catch{}}throw new Error(u)}const c=await a.json();let l;return c.agent_info&&(l={id:c.agent_info.agent_info.id,name:c.agent_info.agent_info.name,capabilities:c.agent_info.capabilities,modality_supported:c.agent_info.modality_supported,session_settings:c.agent_info.session_settings||{}},this.currentAgentInfo=l),{serverUrl:c.wss_url,participantToken:c.token,voxketSessionId:c.session_id,agentInfo:l}}catch(s){console.error("ConnectionManager: fetchConnectionDetails failed:",s);const o=new tt(`Failed to fetch connection details: ${s instanceof Error?s.message:"Unknown error"}`,"CONNECTION_FAILED",s);throw this.eventEmitter.emit("connection.error",o),o}}async connect(t,n,i,r){var s;try{this.eventEmitter.emit("connection.connecting");const o=await this.fetchConnectionDetails(t,n,i,r);return await((s=this.room)==null?void 0:s.connect(o.serverUrl,o.participantToken)),this.isConnected=!0,o}catch(o){console.error("ConnectionManager: Connection failed:",o);const a=new tt(`Failed to connect to Voxket services: ${o instanceof Error?o.message:"Unknown error"}`,"CONNECTION_FAILED",o);throw this.eventEmitter.emit("connection.error",a),a}}async disconnect(){try{this.room&&await this.room.disconnect(),this.isConnected=!1,this.currentAgentInfo=null,this.initializeRoom(),this.eventEmitter.emit("connection.disconnected")}catch(t){console.error("ConnectionManager: Disconnect failed:",t);const n=new tt("Failed to disconnect properly","NETWORK_ERROR",t);throw this.eventEmitter.emit("connection.error",n),n}}getRoom(){return this.room}getConnectionState(){return this.connectionState}get connected(){return this.isConnected&&this.connectionState===ze.Connected}getCurrentAgentInfo(){return this.currentAgentInfo}getParticipants(){if(!this.room)return[];const t=[];return this.room.localParticipant&&t.push({id:this.room.localParticipant.identity,name:this.room.localParticipant.name||this.room.localParticipant.identity,isLocal:!0}),this.room.remoteParticipants.forEach(n=>{t.push({id:n.identity,name:n.name||n.identity,isLocal:!1})}),t}updateConfig(t){this.config={...this.config,...t}}}class yw{constructor(t,n,i){Ne(this,"room",null);Ne(this,"eventEmitter");Ne(this,"chatManager");Ne(this,"agentManager");Ne(this,"textStreamHandlersRegistered",!1);Ne(this,"_eventEmitters",new Map);this.eventEmitter=t,this.chatManager=n,this.agentManager=i}setRoom(t){this.room=t,t&&!this.textStreamHandlersRegistered&&(console.log("📡 StreamHandlerManager: Auto-registering handlers on room set"),this.setupTextStreamHandlers())}areHandlersRegistered(){return this.textStreamHandlersRegistered}resetHandlersFlag(){this.textStreamHandlersRegistered=!1}setupTextStreamHandlers(){this.room&&(this.registerChatHandler(),this.registerTranscriptionHandler(),this.registerSuggestedResponseHandler(),this.registerAgentStateHandler(),this.registerFunctionToolsHandler(),this.registerImageTextStreamHandler(),this.registerImageByteStreamHandler(),this.registerCommonTopicHandlers(),this.registerWildcardHandler(),this.textStreamHandlersRegistered=!0)}registerChatHandler(){try{this.room.registerTextStreamHandler("lk.chat",async(t,n)=>{try{const i=await t.readAll(),r={id:`msg_${Date.now()}_${n.identity||"user"}_${Math.random().toString(36).substr(2,9)}`,content:i,timestamp:new Date,sender:{id:n.identity||"user",name:n.identity||"User",type:"participant"},metadata:{topic:"lk.chat"}};this.eventEmitter.emit("chat.message.received",r)}catch(i){console.error("StreamHandlerManager: Failed to process lk.chat message:",i)}})}catch(t){console.warn("StreamHandlerManager: lk.chat handler already registered, skipping:",t)}}registerTranscriptionHandler(){try{console.log("📡 StreamHandlerManager: Registering lk.transcription handler"),this.room.registerTextStreamHandler("lk.transcription",async(t,n)=>{var i,r;console.log("💬 StreamHandlerManager: Received lk.transcription stream from:",n.identity);try{const s=n.identity===((r=(i=this.room)==null?void 0:i.localParticipant)==null?void 0:r.identity),o=n.identity,a=this.chatManager.getActiveTranscription(o);let c,l=!0;a?(c=a.messageId,l=!1):(c=`msg_${s?"user":"agent"}_${n.identity}_${Date.now()}`,this.chatManager.trackTranscription(o,c));let u="";const d=this.agentManager.getCurrentAgentInfo(),h=(d==null?void 0:d.name)||n.identity||"AI Assistant",f=s?"participant":"agent",g=s?"User":h,p={id:c,content:"",timestamp:new Date,sender:{id:n.identity||"unknown",name:g,type:f},metadata:{topic:"lk.transcription",streaming:!0}};l&&this.eventEmitter.emit("chat.message.received",p);for await(const S of t){u+=S;const k=this.chatManager.convertMarkdownToText(u),x={...p,content:k,metadata:{...p.metadata,streaming:!0}};this.eventEmitter.emit("chat.message.updated",x)}const v=this.chatManager.convertMarkdownToText(u),b={...p,content:v,metadata:{...p.metadata,streaming:!1}};this.eventEmitter.emit("chat.message.updated",b);const w={id:c,text:v,isFinal:!0,startTime:p.timestamp.getTime(),participantId:n.identity||"agent"};this.eventEmitter.emit("transcription.received",w)}catch(s){console.error("StreamHandlerManager: Failed to process lk.transcription message:",s);try{const o=await t.readAll(),a=this.agentManager.getCurrentAgentInfo(),c=(a==null?void 0:a.name)||n.identity||"AI Assistant",l={id:`msg_${Date.now()}_agent_transcription_${Math.random().toString(36).substr(2,9)}`,content:o,timestamp:new Date,sender:{id:n.identity||"agent",name:c,type:"agent"},metadata:{topic:"lk.transcription"}};this.eventEmitter.emit("chat.message.received",l),console.log("💬 StreamHandlerManager: Emitted chat.message.received:",{id:l.id,sender:l.sender.name,contentLength:l.content.length,preview:l.content.substring(0,50)});const u={id:l.id,text:l.content,isFinal:!0,startTime:l.timestamp.getTime(),participantId:n.identity||"agent"};this.eventEmitter.emit("transcription.received",u),console.log("📝 StreamHandlerManager: Emitted transcription.received:",{id:u.id,textLength:u.text.length})}catch(o){console.error("StreamHandlerManager: Fallback failed for lk.transcription:",o)}}})}catch(t){console.warn("StreamHandlerManager: lk.transcription handler already registered, skipping:",t)}}registerSuggestedResponseHandler(){try{this.room.registerTextStreamHandler("suggested_response",async t=>{const n=await t.readAll();let i=[];try{i=["tes","hello how are you","algebra make me learn that","what is the meaning of life"]}catch(r){console.warn("StreamHandlerManager: Failed to parse suggested_response:",r,n)}this.eventEmitter.emit("suggested.response",i)})}catch(t){console.warn("StreamHandlerManager: suggested_response handler already registered, skipping:",t)}}registerAgentStateHandler(){try{this.room.registerTextStreamHandler("agent_state_changed",async(t,n)=>{const i=await t.readAll();let r={};try{r=typeof i=="string"?JSON.parse(i.replace(/'/g,'"')):i}catch(s){console.warn("StreamHandlerManager: Failed to parse agent_state_changed:",s,i)}this.agentManager.handleAgentStateChanged(r)})}catch(t){console.warn("StreamHandlerManager: agent_state_changed handler already registered, skipping:",t)}}registerFunctionToolsHandler(){try{this.room.registerTextStreamHandler("function_tools_executed",async(t,n)=>{const i=await t.readAll();let r={};try{if(typeof i=="string")try{r=JSON.parse(i)}catch(s){let o=i;try{o=o.replace(/\bTrue\b/g,"true"),o=o.replace(/\bFalse\b/g,"false"),o=o.replace(/\bNone\b/g,"null");const a=o.replace(/\\"/g,"___ESCAPED_QUOTE___");let c="",l=!1;for(let u=0;u<a.length;u++){const d=a[u],h=u>0?a[u-1]:"";d==='"'&&h!=="\\"?(l=!l,c+=d):d==="'"&&h!=="\\"&&!l?c+='"':c+=d}o=c.replace(/___ESCAPED_QUOTE___/g,'\\"'),r=JSON.parse(o)}catch(a){console.warn("StreamHandlerManager: Enhanced parsing also failed:",a);try{let c=i.replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/\bNone\b/g,"null");r=new Function("return "+c)()}catch(c){throw console.error("StreamHandlerManager: All parsing methods failed:",c),s}}}else r=i}catch(s){console.warn("StreamHandlerManager: Failed to parse function_tool_executed:",s,i);let o=null;if(typeof i=="string"&&i.includes("visualization_data"))try{const a=i.match(/"arguments":\s*"({.*?})"/);if(a){const c=a[1].replace(/\\"/g,'"');o=JSON.parse(c),console.log("🛠️ StreamHandlerManager: Extracted visualization data:",o)}}catch(a){console.warn("StreamHandlerManager: Failed to extract visualization data:",a)}r={type:"function_tools_executed",function_calls:[],function_call_outputs:[],created_at:Date.now()/1e3,parseError:!0,rawData:i,extractedVisualizationData:o}}this.eventEmitter.emit("tool.executed",r)})}catch(t){console.warn("StreamHandlerManager: function_tool_executed handler already registered, skipping:",t)}}registerImageTextStreamHandler(){try{this.room.registerTextStreamHandler("images",async(t,n)=>{try{const i=await t.readAll()}catch(i){console.error("StreamHandlerManager: Error processing images stream:",i)}})}catch(t){console.warn("StreamHandlerManager: images text handler already registered, skipping:",t)}}registerImageByteStreamHandler(){try{this.room.registerByteStreamHandler("images",async(t,n)=>{var i,r;try{const s=t.info,o={id:`img_${Date.now()}_${n.identity||"agent"}_${Math.random().toString(36).substr(2,9)}`,content:`🖼️ ${s.name||"Image"}`,sender:{id:n.identity||"agent",name:n.identity||"Agent",type:n.identity===((r=(i=this.room)==null?void 0:i.localParticipant)==null?void 0:r.identity)?"participant":"agent"},timestamp:new Date,metadata:{type:"attachment",fileName:s.name,fileSize:s.size,mimeType:s.mimeType,streamId:s.id,downloading:!0}};this.eventEmitter.emit("chat.message.received",o),t.onProgress&&(t.onProgress=d=>{const h={...o,metadata:{...o.metadata,downloadProgress:d||0}};this.eventEmitter.emit("chat.message.updated",h)});const a=[];for await(const d of t)a.push(d);const c=new Blob(a,{type:s.mimeType||"application/octet-stream"}),l=URL.createObjectURL(c),u={...o,metadata:{...o.metadata,downloading:!1,downloadProgress:1,downloadUrl:l,blob:c}};this.eventEmitter.emit("chat.message.updated",u)}catch(s){console.error("StreamHandlerManager: Error processing image attachment:",s)}})}catch(t){console.warn("StreamHandlerManager: image byte handler already registered, skipping:",t)}}registerCommonTopicHandlers(){["error","warning","status","system","debug","info"].forEach(n=>{try{this.room.registerTextStreamHandler(n,async(i,r)=>{try{const s=await i.readAll();if(console.log(`📝 StreamHandlerManager: Received '${n}' stream:`,s),n==="error"){let o={};try{o=typeof s=="string"?JSON.parse(s):s}catch{o={message:s}}console.warn("⚠️ StreamHandlerManager: Agent error:",o),this.eventEmitter.emit("agent.error",o)}else this.eventEmitter.emit("text.stream.received",{topic:n,data:s,participantInfo:r})}catch(s){console.error(`StreamHandlerManager: Failed to process '${n}' stream:`,s)}})}catch(i){console.warn(`StreamHandlerManager: Handler for '${n}' already registered, skipping:`,i)}})}registerWildcardHandler(){try{this.room.registerTextStreamHandler("*",async(t,n)=>{var i;try{const r=await t.readAll(),s=((i=t.info)==null?void 0:i.topic)||"unknown";if(this._eventEmitters.has(s)){const o=this._eventEmitters.get(s);try{o(r),console.log(`📝 StreamHandlerManager: Processed custom topic '${s}' via event emitter`)}catch(a){console.error(`StreamHandlerManager: Error in custom handler for topic '${s}':`,a)}}else console.log(`📝 StreamHandlerManager: Received unhandled text stream for topic '${s}':`,r),this.eventEmitter.emit("text.stream.unhandled",{topic:s,data:r,participantInfo:n})}catch(r){console.error("StreamHandlerManager: Failed to process unhandled text stream:",r)}})}catch(t){console.warn("StreamHandlerManager: Generic text stream handler already registered, skipping:",t)}}registerEventEmitter(t,n){if(!this.room)throw new Error("Room not available");this._eventEmitters.set(t,n),console.log(`📝 StreamHandlerManager: Stored handler for topic '${t}' in event emitters map`);try{this.room.registerTextStreamHandler(t,async i=>{try{const r=await i.readAll();console.log(`📝 StreamHandlerManager: Direct handler called for topic '${t}'`),n(r)}catch(r){console.error(`Error processing event for topic '${t}':`,r)}}),console.log(`📝 StreamHandlerManager: Successfully registered direct handler for topic '${t}'`)}catch(i){console.warn(`StreamHandlerManager: Direct handler registration failed for topic '${t}':`,i),console.log(`📝 StreamHandlerManager: Wildcard handler will process topic '${t}' instead`)}}getRegisteredEventEmitters(){return Array.from(this._eventEmitters.keys())}hasEventEmitter(t){return this._eventEmitters.has(t)}}const vw=_.createContext(null);function Ma({config:e,children:t,autoConnect:n=!1,client:i}){const[r,s]=_.useState(null),[o,a]=_.useState(!1),[c,l]=_.useState(!1),[u,d]=_.useState(null),[h,f]=_.useState(null),[g,p]=_.useState("idle"),[v,b]=_.useState(null),[w,S]=_.useState([]),[k,x]=_.useState([]),[C,M]=_.useState([]);_.useEffect(()=>{const H=i||new Mo(e);s(H);const E=R(H);return n&&!i&&P(H),()=>{E(),i||H.disconnect().catch(console.error)}},[e,n,i]);const R=H=>{const E=()=>{l(!0),d(null)},K=()=>{a(!0),l(!1),d(null)},Y=()=>{a(!1),l(!1),f(null),p("idle"),S([]),x([]),M([])},T=de=>{d(de),l(!1)},Z=de=>{f(de),p(de.state)},ne=de=>{p(de),h&&f({...h,state:de})},ie=(de,Me)=>{f(null),p("idle"),b(Me),S([]),x([]),M([])},re=de=>{S(Me=>[...Me,de])},X=de=>{S(Me=>Me.filter(ke=>ke.id!==de.id))},le=de=>{x(Me=>[...Me,de])},J=de=>{x(Me=>[...Me,de])},Re=de=>{console.log("📝 VoxketProvider: Received transcription:",de),M(Me=>Me.find(pe=>pe.id===de.id)?(console.log("📝 VoxketProvider: Duplicate transcription detected, skipping:",de.id),Me):(console.log("📝 VoxketProvider: Adding new transcription:",de.id),[...Me,de]))},B=()=>{console.log("🧹 VoxketProvider: Clearing chat messages and transcriptions"),x([]),M([])};return H.on("connection.connecting",E),H.on("connection.connected",K),H.on("connection.disconnected",Y),H.on("connection.error",T),H.on("session.created",Z),H.on("session.state.changed",ne),H.on("session.ended",ie),H.on("participant.joined",re),H.on("participant.left",X),H.on("chat.message.received",le),H.on("chat.message.sent",J),H.on("transcription.received",Re),H.on("chat.history.cleared",B),()=>{console.log("📝 VoxketProvider: Cleaning up event listeners"),H.off("connection.connecting",E),H.off("connection.connected",K),H.off("connection.disconnected",Y),H.off("connection.error",T),H.off("session.created",Z),H.off("session.state.changed",ne),H.off("session.ended",ie),H.off("participant.joined",re),H.off("participant.left",X),H.off("chat.message.received",le),H.off("chat.message.sent",J),H.off("chat.history.cleared",B),H.off("transcription.received",Re)}},P=async H=>{const E=H||r;if(E)try{await E.connect()}catch(K){console.error("Failed to connect:",K)}},G={client:r,isConnected:o,isConnecting:c,connectionError:u,currentSession:h,sessionState:g,sessionMetrics:v,participants:w,chatMessages:k,transcriptions:C,connect:()=>P(),disconnect:async()=>{if(r)try{await r.disconnect()}catch(H){console.error("Failed to disconnect:",H)}},createSession:async(H,E={})=>{if(!r)throw new Error("Client not initialized");const K={agentId:H,participantName:E.participantName||"User",metadata:E.metadata,modalities:E.modalities||["voice"]};return await r.createSession(K)},endSession:async()=>r?await r.endSession():null,sendChatMessage:async H=>{if(!r)throw new Error("Client not initialized");await r.sendChatMessage(H)},setMicrophoneEnabled:async H=>{if(!r)throw new Error("Client not initialized");await r.setMicrophoneEnabled(H)},setCameraEnabled:async H=>{if(!r)throw new Error("Client not initialized");await r.setCameraEnabled(H)},startScreenShare:async()=>{if(!r)throw new Error("Client not initialized");await r.startScreenShare()},stopScreenShare:async()=>{if(!r)throw new Error("Client not initialized");await r.stopScreenShare()}};return m.jsx(vw.Provider,{value:G,children:t})}function si(){const e=_.useContext(vw);if(!e)throw new Error("useVoxket must be used within a VoxketProvider");return e}const Oi=new WeakSet,du=new WeakSet;class xw{constructor(t,n){Ne(this,"renderedComponents",new Map);Ne(this,"config");Ne(this,"voxketClient");this.config=t,this.voxketClient=n}renderUI(t={}){const n=this.resolveTarget(t.target||"body"),i=this.getTargetKey(n);if(du.has(n)){console.warn("⚠️ UIRenderer: Target is already being processed, skipping renderUI");return}if(Oi.has(n)){console.log("✋ UIRenderer: Target already has a React root in registry, updating existing props...");const s=this.renderedComponents.get(i);if(s&&s.root){const o=this.buildWidgetProps(t);try{s.root.render(_.createElement(Ma,{config:this.config,autoConnect:t.autoStart||!1,client:this.voxketClient,children:_.createElement(Pa,o)})),console.log("✅ UIRenderer: Successfully updated existing widget with new props");return}catch(a){throw console.error("Error re-rendering existing widget:",a),new Error(`Failed to update existing widget: ${a instanceof Error?a.message:"Unknown error"}`)}}else console.warn("⚠️ Registry inconsistency detected, cleaning up"),Oi.delete(n)}let r=this.renderedComponents.get(i);if(r&&r.target===n&&Oi.has(n)){console.log("🔄 UIRenderer: Reusing existing React root for target:",i);const s=r.root,o=this.buildWidgetProps(t);try{s.render(_.createElement(Ma,{config:this.config,autoConnect:t.autoStart||!1,client:this.voxketClient,children:_.createElement(Pa,o)}))}catch(a){throw console.error("Error rendering Voxket widget:",a),new Error(`Failed to render Voxket widget: ${a instanceof Error?a.message:"Unknown error"}`)}return}du.add(n);try{if(r){console.log("🧹 UIRenderer: Cleaning up existing component for different target");try{r.root.unmount(),this.renderedComponents.delete(i),Oi.delete(r.target),n.innerHTML=""}catch(a){console.warn("Failed to cleanup existing root:",a)}}if(Oi.has(n)){console.warn("⚠️ UIRenderer: Target already in registry, skipping root creation");return}console.log("🆕 UIRenderer: Creating new React root for target:",i);const s=iC.createRoot(n);this.renderedComponents.set(i,{root:s,target:n}),Oi.add(n);const o=this.buildWidgetProps(t);if(!s||typeof s.render!="function")throw new Error("Invalid React root. Make sure React 18+ is properly installed and configured.");try{s.render(_.createElement(Ma,{config:this.config,autoConnect:t.autoStart||!1,client:this.voxketClient,children:_.createElement(Pa,o)}))}catch(a){throw console.error("Error rendering Voxket widget:",a),new Error(`Failed to render Voxket widget: ${a instanceof Error?a.message:"Unknown error"}`)}}finally{du.delete(n)}}removeUI(t){const n=t?this.resolveTarget(t):null;if(n){const i=this.getTargetKey(n),r=this.renderedComponents.get(i);if(r){console.log("🗑️ UIRenderer: Removing UI for target:",i),this.renderedComponents.delete(i);const s=r.target,o=()=>{var a;try{s&&s.isConnected?typeof((a=r.root)==null?void 0:a.unmount)=="function"&&(r.root.unmount(),console.log("✅ UIRenderer: UI unmounted for target:",i)):console.log("ℹ️ UIRenderer: Target element already disconnected, skipping unmount")}catch(c){console.warn("Failed to unmount React root:",c)}finally{requestAnimationFrame(()=>{try{n.querySelectorAll('[id*="voxket"], [class*="voxket"], .fixed.inset-0.z-50').forEach(l=>{try{l.parentNode&&l.remove()}catch(u){console.warn("Failed to remove element:",u)}})}finally{Oi.delete(n)}})}};queueMicrotask(()=>setTimeout(o,0))}else console.log("ℹ️ UIRenderer: No component found for target, cleaning registry:",i),Oi.delete(n),n.isConnected&&n.hasChildNodes()&&(n.innerHTML="");n===document.body&&n.querySelectorAll(".fixed.z-50, .fixed.inset-0").forEach(o=>{if(o.classList.contains("bg-black")&&(o.classList.contains("backdrop-blur-sm")||o.classList.contains("bg-opacity-30")))try{o.remove()}catch(a){console.warn("Failed to remove fixed element:",a)}})}}removeAllUI(){for(const[t,n]of this.renderedComponents)n.root.unmount();this.renderedComponents.clear(),this.forceCleanupFullscreenOverlays()}forceCleanupFullscreenOverlays(){document.body.querySelectorAll(".fixed.inset-0.z-50").forEach(n=>{if(n.classList.contains("bg-black")&&(n.classList.contains("backdrop-blur-sm")||n.classList.contains("bg-opacity-30")))try{n.remove()}catch(i){console.warn("Failed to remove overlay:",i)}})}resolveTarget(t){if(typeof t=="string"){const n=document.querySelector(t);if(!n)throw new Error(`Target element not found: ${t}`);return n}return t}getTargetKey(t){return t.id?t.id:t.className?t.tagName+"_"+t.className.replace(/\s+/g,"_"):t.tagName+"_"+t.outerHTML.length%1e3}buildWidgetProps(t){var i,r,s;const n=this.config;return{agentId:t.agentId||n.agentId||"default-agent",participantName:t.participantName||n.participantName||"User",baseUrl:this.config.baseUrl,appSecret:this.config.appSecret,appId:this.config.appId,className:t.className,theme:typeof t.theme=="string"?t.theme:void 0,modalities:t.modality||n.modalities||["voice"],suportsChatInput:((i=t.modality)==null?void 0:i.includes("chat"))!==!1,suportsVideoInput:((r=t.modality)==null?void 0:r.includes("video"))===!0,suportsScreenShare:((s=t.modality)==null?void 0:s.includes("screen_share"))===!0,autoStart:t.autoStart,displayType:t.displayType||"widget",popupPosition:t.popupPosition||"bottom-right",popupTriggerText:t.popupTriggerText||"Open Chat",popupModalityMode:t.popupModalityMode||"all",width:t.width,height:t.height,onDisplayTypeChange:t.onDisplayTypeChange,prompts:t.prompts,statusMessage:t.statusMessage,welcomeTitle:t.welcomeTitle,welcomeSubTitle:t.welcomeSubTitle,loadingText:t.loadingText,voxketClient:this.voxketClient,participantMetadata:t.participantMetadata}}updateConfig(t){this.config=t}}class kw{constructor(t){Ne(this,"agentState","idle");Ne(this,"isAgentConnected",!1);Ne(this,"currentAgentInfo",null);Ne(this,"eventEmitter");this.eventEmitter=t}getAgentState(){return this.agentState}setAgentState(t){this.agentState!==t&&(this.agentState=t,this.eventEmitter.emit("agent.state.changed",{state:t}))}getIsAgentConnected(){return this.isAgentConnected}setAgentConnected(t){this.isAgentConnected=t,console.log(t?"🤖 AgentManager: Agent marked as connected":"🤖 AgentManager: Agent marked as disconnected")}getCurrentAgentInfo(){return this.currentAgentInfo}setCurrentAgentInfo(t){this.currentAgentInfo=t,console.log("📝 AgentManager: Agent info updated:",t)}reset(){this.agentState="idle",this.isAgentConnected=!1,this.currentAgentInfo=null,console.log("🔄 AgentManager: Agent state reset")}handleAgentStateChanged(t){this.isAgentConnected||(this.setAgentConnected(!0),this.eventEmitter.emit("agent.connected",t)),t.new_state==="speaking"?(this.setAgentState("speaking"),this.eventEmitter.emit("agent.speaking",t)):t.new_state==="thinking"?(this.setAgentState("thinking"),this.eventEmitter.emit("agent.thinking",t)):(t.new_state==="idle"||t.new_state==="listening")&&this.setAgentState("idle")}}class Mo extends Sf{constructor(n){super();Ne(this,"config");Ne(this,"pluginManager");Ne(this,"rpcManager");Ne(this,"chatManager");Ne(this,"mediaManager");Ne(this,"connectionManager");Ne(this,"streamHandlerManager");Ne(this,"uiRenderer");Ne(this,"agentManager");Ne(this,"currentSession",null);if(!n.authToken&&(!n.appId||!n.appSecret))throw new Error("Either authToken or both appId and appSecret must be provided");this.config=n,this.chatManager=new mw(this,n.participantName||"User"),this.mediaManager=new gw(this),this.agentManager=new kw(this),this.connectionManager=new bw({baseUrl:n.baseUrl,appId:n.appId,appSecret:n.appSecret,authToken:n.authToken},this),this.streamHandlerManager=new yw(this,this.chatManager,this.agentManager),this.uiRenderer=new xw(n,this),this.pluginManager=new fw(this),this.rpcManager=new pw,this.setupEventListeners(),this.setupRpcEventForwarding()}setupEventListeners(){this.on("connection.connected",()=>{var i,r,s,o,a,c,l;if(console.log("🔌 VoxketClient: connection.connected event fired",{hasSession:!!this.currentSession,sessionState:(i=this.currentSession)==null?void 0:i.state,sessionId:(r=this.currentSession)==null?void 0:r.id}),(o=(s=this.config).onConnected)==null||o.call(s),this.currentSession&&this.currentSession.state==="connecting"){const u=this.currentSession.state;this.currentSession.state="connected",this.emit("session.state.changed","connected",u),console.log("✅ VoxketClient: Session state changed to connected")}else console.log("⚠️ VoxketClient: Cannot update session state",{hasSession:!!this.currentSession,currentState:(a=this.currentSession)==null?void 0:a.state});const n=this.connectionManager.getRoom();if(n){this.rpcManager.setRoom(n);const u=Array.from(n.remoteParticipants.values()).find(d=>{var h;return(h=d.identity)==null?void 0:h.startsWith("agent-")});u&&(console.log("🤖 VoxketClient: Agent already in room, marking as connected",{agentIdentity:u.identity,hasAudioTrack:u.audioTrackPublications.size>0}),this.agentManager.getIsAgentConnected()||(this.agentManager.setAgentConnected(!0),this.emit("agent.connected",{identity:u.identity})))}(l=(c=this.currentSession)==null?void 0:c.activeModalities)!=null&&l.includes("voice")&&setTimeout(async()=>{try{this.mediaManager.getLocalParticipant()&&(this.mediaManager.isMicrophoneEnabled||(await this.mediaManager.setMicrophoneEnabled(!0),this.emit("track.unmuted",{source:"microphone",enabled:!0}),console.log("🎤 VoxketClient: Microphone enabled after connection")))}catch(u){console.warn("VoxketClient: Failed to enable microphone after room connection:",u)}},100)}),this.on("connection.disconnected",n=>{var i,r,s;(r=(i=this.config).onDisconnected)==null||r.call(i,n),this.streamHandlerManager.resetHandlersFlag(),this.agentManager.reset(),this.chatManager.clearChatMessages(),n&&console.log("🔍 VoxketClient: Disconnect reason details:",{reason:n.toString(),currentSession:(s=this.currentSession)==null?void 0:s.id})}),this.on("connection.error",n=>{var i,r;(r=(i=this.config).onError)==null||r.call(i,n)}),this.on("chat.message.received",n=>{var i,r;this.chatManager.addChatMessage(n),(r=(i=this.config).onMessageReceived)==null||r.call(i,n)}),this.on("chat.message.updated",n=>{this.chatManager.updateChatMessage(n)}),this.on("chat.message.sent",n=>{this.chatManager.addChatMessage(n)}),this.on("transcription.received",n=>{var i,r;(r=(i=this.config).onTranscriptionReceived)==null||r.call(i,n)}),this.on("session.state.changed",n=>{var i,r;(r=(i=this.config).onSessionStateChanged)==null||r.call(i,n)}),this.on("session.created",n=>{var i,r;(r=(i=this.config).onSessionStart)==null||r.call(i,n.id)}),this.on("session.ended",(n,i)=>{var r,s;(s=(r=this.config).onSessionEnd)==null||s.call(r,i)}),this.on("participant.joined",n=>{var i,r;(r=(i=this.config).onUserJoined)==null||r.call(i,n.id)}),this.on("participant.left",n=>{var i,r;(r=(i=this.config).onUserLeft)==null||r.call(i,n.id)})}setupRpcEventForwarding(){if(!this.rpcManager){console.warn("RpcManager not initialized, skipping event forwarding setup");return}this.rpcManager.on("rpc.method.registered",n=>this.emit("rpc.method.registered",n)),this.rpcManager.on("rpc.method.called",n=>this.emit("rpc.method.called",n)),this.rpcManager.on("rpc.interaction.started",n=>this.emit("rpc.interaction.started",n)),this.rpcManager.on("rpc.interaction.completed",n=>this.emit("rpc.interaction.completed",n)),this.rpcManager.on("rpc.interaction.timeout",n=>this.emit("rpc.interaction.timeout",n)),this.rpcManager.on("rpc.interaction.dismissed",n=>this.emit("rpc.interaction.dismissed",n))}async connect(n,i,r,s){const o=n||this.config.agentId||"default-agent",a=i||this.config.participantName||"User",c=r||this.config.modalities||["voice"],l=s||this.config.participantMetadata,u=await this.connectionManager.connect(o,a,c,l),d=this.connectionManager.getRoom();return this.chatManager.setRoom(d),this.mediaManager.setRoom(d),this.streamHandlerManager.setRoom(d),u.agentInfo&&this.agentManager.setCurrentAgentInfo(u.agentInfo),u}async disconnect(){await this.connectionManager.disconnect(),this.currentSession=null;const n=this.connectionManager.getRoom();this.chatManager.setRoom(n),this.mediaManager.setRoom(n),this.streamHandlerManager.setRoom(n)}async createSession(n){var i,r;try{const s=await this.connect(n.agentId,n.participantName,n.modalities,n.participantMetadata),o={id:s.voxketSessionId,agentId:n.agentId,state:"connecting",startedAt:new Date,metadata:n.metadata||{},activeModalities:n.modalities||["voice"],agentInfo:s.agentInfo||this.agentManager.getCurrentAgentInfo()};this.currentSession=o,this.emit("session.created",o);const a=this.connectionManager.getRoom();if(a&&(a.state!=="connected"?(console.log("⏳ VoxketClient: Waiting for room to connect..."),await new Promise((l,u)=>{const d=setTimeout(()=>{u(new Error("Room connection timeout"))},1e4),h=()=>{clearTimeout(d),a.off("connected",h),a.off("disconnected",f),console.log("✅ VoxketClient: Room connected successfully"),l()},f=()=>{clearTimeout(d),a.off("connected",h),a.off("disconnected",f),u(new Error("Room disconnected while waiting for connection"))};a.once("connected",h),a.once("disconnected",f)})):console.log("✅ VoxketClient: Room already connected"),this.currentSession.state="connected",this.emit("session.state.changed","connected","connecting"),console.log("⏳ VoxketClient: Waiting for agent to connect..."),await new Promise(l=>{const u=setTimeout(()=>{console.warn("⚠️ VoxketClient: Agent connection timeout (30s), continuing anyway"),l(!1)},3e4),d=()=>{clearTimeout(u),this.off("agent.connected",d),this.off("participant.joined",h),console.log("✅ VoxketClient: Agent connected and ready"),l(!0)},h=f=>{var g,p;((g=f.id)!=null&&g.startsWith("agent-")||(p=f.name)!=null&&p.toLowerCase().includes("agent"))&&(clearTimeout(u),this.off("agent.connected",d),this.off("participant.joined",h),console.log("✅ VoxketClient: Agent participant joined:",f.name||f.id),l(!0))};this.once("agent.connected",d),this.on("participant.joined",h),this.agentManager.getIsAgentConnected()&&(clearTimeout(u),this.off("agent.connected",d),this.off("participant.joined",h),console.log("✅ VoxketClient: Agent already connected"),l(!0))})&&(this.currentSession.state="active",this.emit("session.state.changed","active","connected"))),(i=n.modalities)!=null&&i.includes("voice"))try{await this.mediaManager.setMicrophoneEnabled(!0),this.emit("track.unmuted",{source:"microphone",enabled:!0}),console.log("🎤 VoxketClient: Microphone enabled successfully")}catch(c){console.warn("VoxketClient: Failed to enable microphone, but continuing with session:",c)}if((r=n.modalities)!=null&&r.includes("video"))try{await new Promise(c=>setTimeout(c,200)),await this.mediaManager.enableCamera(),console.log("🎥 VoxketClient: Camera enabled successfully")}catch(c){console.warn("VoxketClient: Failed to enable camera, but continuing with session:",c)}return o}catch(s){throw console.error("VoxketClient: Failed to create session:",s),s instanceof tt?s:s instanceof TypeError&&s.message.includes("fetch")?new tt("Network connection failed","CONNECTION_FAILED",s):s instanceof Error&&s.message.includes("Failed to fetch connection details")?new tt(`API connection failed: ${s.message}`,"CONNECTION_FAILED",s):new tt(`Failed to create session: ${s instanceof Error?s.message:"Unknown error"}`,"SESSION_NOT_FOUND",s)}}async startSession(n,i){const r={agentId:n||this.config.agentId||"default-agent",participantName:(i==null?void 0:i.participantName)||this.config.participantName||"User",modalities:(i==null?void 0:i.modalities)||this.config.modalities||["voice","chat"],metadata:i==null?void 0:i.metadata,participantMetadata:i==null?void 0:i.participantMetadata};return this.createSession(r)}async endSession(){var n,i;if(!this.currentSession)return null;try{const r={sessionId:this.currentSession.id,duration:Date.now()-(((n=this.currentSession.startedAt)==null?void 0:n.getTime())||0),messageCount:0,participantCount:((i=this.connectionManager.getRoom())==null?void 0:i.remoteParticipants.size)||0,audioQuality:{avgBitrate:64e3,avgLatency:150,packetLoss:.01,jitter:.05},videoQuality:{avgBitrate:5e5,avgLatency:150,packetLoss:.01,jitter:.05},networkStats:{totalBytesReceived:0,totalBytesSent:0,connectionType:"webrtc",avgRoundTripTime:150},events:[]};return this.currentSession.endedAt=new Date,this.currentSession.state="disconnected",this.emit("session.ended",this.currentSession,r),await this.disconnect(),r}catch(r){throw new tt("Failed to end session","SESSION_NOT_FOUND",r)}}getCurrentSession(){return this.currentSession}getSessionMetrics(){var n,i;return this.currentSession?{sessionId:this.currentSession.id,duration:Date.now()-(((n=this.currentSession.startedAt)==null?void 0:n.getTime())||0),messageCount:0,participantCount:((i=this.connectionManager.getRoom())==null?void 0:i.remoteParticipants.size)||0,audioQuality:{avgBitrate:64e3,avgLatency:150,packetLoss:.01,jitter:.05},videoQuality:{avgBitrate:5e5,avgLatency:150,packetLoss:.01,jitter:.05},networkStats:{totalBytesReceived:0,totalBytesSent:0,connectionType:"webrtc",avgRoundTripTime:150},events:[]}:null}async sendMessage(n,i){if(!this.currentSession)throw new tt("No active session","SESSION_NOT_FOUND");return this.dismissCurrentInteraction(),this.chatManager.sendMessage(n,i)}async sendChatMessage(n,i){return this.sendMessage(n,i)}async sendAttachments(n,i){if(!this.currentSession)throw new tt("No active session","SESSION_NOT_FOUND");return this.dismissCurrentInteraction(),this.chatManager.sendAttachments(n,i)}async sendAttachment(n,i){return this.chatManager.sendAttachment(n,i)}getChatMessages(){return this.chatManager.getChatMessages()}addChatMessage(n){this.chatManager.addChatMessage(n)}updateChatMessage(n){this.chatManager.updateChatMessage(n)}clearChatMessages(){this.chatManager.clearChatMessages(),this.dismissCurrentInteraction(),this.uiRenderer.removeAllUI()}toggleMicrophone(n){return this.mediaManager.toggleMicrophone(n)}async setMicrophoneEnabled(n){return this.mediaManager.setMicrophoneEnabled(n)}toggleCamera(n){return this.mediaManager.toggleCamera(n)}async setCameraEnabled(n){return this.mediaManager.setCameraEnabled(n)}async enableCamera(){return this.mediaManager.enableCamera()}async disableCamera(){return this.mediaManager.disableCamera()}async startScreenShare(){return this.mediaManager.startScreenShare()}async stopScreenShare(){return this.mediaManager.stopScreenShare()}async getAudioInputDevices(){return this.mediaManager.getAudioInputDevices()}async getVideoInputDevices(){return this.mediaManager.getVideoInputDevices()}async setAudioInputDevice(n){return this.mediaManager.setAudioInputDevice(n)}async setVideoInputDevice(n){return this.mediaManager.setVideoInputDevice(n)}get isMicrophoneEnabled(){return this.mediaManager.isMicrophoneEnabled}get isCameraEnabled(){return this.mediaManager.isCameraEnabled}get isScreenShareEnabled(){return this.mediaManager.isScreenShareEnabled}getMicrophoneTrack(){return this.mediaManager.getMicrophoneTrack()}getCameraTrack(){return this.mediaManager.getCameraTrack()}getScreenShareTrack(){return this.mediaManager.getScreenShareTrack()}getAgentAudioTrack(){return this.mediaManager.getAgentAudioTrack()}getAgentVideoTrack(){return this.mediaManager.getAgentVideoTrack()}getVideoTrackRefs(){return this.mediaManager.getVideoTrackRefs()}getCameraTrackRefs(){return this.mediaManager.getCameraTrackRefs()}getScreenShareTrackRefs(){return this.mediaManager.getScreenShareTrackRefs()}getPublishPermissions(){return this.mediaManager.getPublishPermissions()}canPublishSource(n){return this.mediaManager.canPublishSource(n)}getLocalParticipant(){return this.mediaManager.getLocalParticipant()}getRemoteParticipants(){return this.mediaManager.getRemoteParticipants()}getParticipants(){return this.connectionManager.getParticipants()}getRoom(){return this.connectionManager.getRoom()}getConnectionState(){return this.connectionManager.getConnectionState()}get connected(){return this.connectionManager.connected}getCurrentAgentInfo(){return this.agentManager.getCurrentAgentInfo()}getIsAgentConnected(){return this.agentManager.getIsAgentConnected()}getAgentState(){return this.agentManager.getAgentState()}renderUI(n={}){this.uiRenderer.renderUI(n)}removeUI(n){this.uiRenderer.removeUI(n)}removeAllUI(){this.uiRenderer.removeAllUI()}async registerFrontendRPC(n,i,r="embedded"){return this.rpcManager.registerFrontendRPC(n,i,r)}getCurrentInteraction(){return this.rpcManager.getCurrentInteraction()}dismissCurrentInteraction(){this.rpcManager.dismissCurrentInteraction()}getRegisteredRpcMethods(){return this.rpcManager.getRegisteredMethods()}unregisterRpcMethod(n){this.rpcManager.unregisterMethod(n)}registerPlugin(n){this.pluginManager.register(n)}getPluginManager(){return this.pluginManager}registerEventListener(n,i){return this.on(n,i)}registerEventEmitter(n,i){return this.streamHandlerManager.registerEventEmitter(n,i)}getRegisteredEventEmitters(){return this.streamHandlerManager.getRegisteredEventEmitters()}hasEventEmitter(n){return this.streamHandlerManager.hasEventEmitter(n)}updateConfig(n){this.config={...this.config,...n},this.uiRenderer.updateConfig(this.config),this.connectionManager.updateConfig({baseUrl:this.config.baseUrl,appId:this.config.appId,appSecret:this.config.appSecret}),this.chatManager.setParticipantName(this.config.participantName||"User")}setParticipantMetadata(n){this.config.participantMetadata=n}getParticipantMetadata(){return this.config.participantMetadata}async startRecording(){var n;try{this.emit("recording.started",{sessionId:(n=this.currentSession)==null?void 0:n.id,timestamp:new Date})}catch(i){throw new tt("Failed to start recording","RECORDING_ERROR",i)}}async stopRecording(){var n;try{this.emit("recording.stopped",{sessionId:(n=this.currentSession)==null?void 0:n.id,timestamp:new Date})}catch(i){throw new tt("Failed to stop recording","RECORDING_ERROR",i)}}}const uV=je.create(KS),dV=je.create(df),hV=je.create(QS),fV=je.create(uw);function pV({theme:e,mode:t,loadingText:n,sessionState:i}){const r=on(e),s=()=>{if(i==="connected")return"Connecting to agent...";if(n)return n;switch(t){case"voice":return"Connecting to voice agent...";case"chat":return"Starting chat session...";case"video":return"Connecting to video call...";default:return"Connecting..."}};return m.jsxs("div",{className:"flex flex-col items-center justify-center h-full w-full p-8",children:[m.jsxs("div",{className:"text-center",children:[m.jsx("h3",{className:`text-lg font-semibold mb-2 ${r.text.accent}`,children:s()}),m.jsx("p",{className:`text-sm ${r.text.muted}`,children:"Please wait a moment..."})]}),m.jsxs("div",{className:"flex space-x-1 mt-4",children:[m.jsx("div",{className:"w-2 h-2 rounded-full animate-bounce bg-blue-500",style:{animationDelay:"0ms"}}),m.jsx("div",{className:"w-2 h-2 rounded-full animate-bounce bg-blue-500",style:{animationDelay:"150ms"}}),m.jsx("div",{className:"w-2 h-2 rounded-full animate-bounce bg-blue-500",style:{animationDelay:"300ms"}})]})]})}const mV=je.create(pV);function $b({children:e,theme:t,displayType:n="widget",onClose:i,popupPosition:r="bottom-right",onExpand:s}){const o=on(t);if(n==="fullscreen")return m.jsx("div",{className:"fixed inset-0 z-[9999] bg-black/40 bg-opacity-30 backdrop-blur-sm flex items-center justify-center p-8",onClick:a=>{a.target===a.currentTarget&&i&&i()},children:m.jsxs("div",{className:"w-full h-full max-w-7xl max-h-[95vh] rounded-2xl relative bg-transparent flex flex-col",onClick:a=>{a.stopPropagation()},children:[i&&m.jsx("button",{onClick:a=>{a.preventDefault(),a.stopPropagation(),i()},className:`absolute top-4 cursor-pointer right-4 z-[10000] w-12 h-12 rounded-full flex items-center justify-center transition-all duration-200 shadow-lg border backdrop-blur-sm ${t==="light"?"bg-white bg-opacity-90 text-gray-900 hover:bg-gray-100 border-gray-300":"bg-gray-900 bg-opacity-90 text-white hover:bg-gray-800 border-gray-700"}`,title:"Exit Fullscreen",type:"button",children:m.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("path",{d:"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"})})}),m.jsxs("div",{id:"voice-card",className:`voxket-widget-root theme-${t} ${o.card} w-full h-full flex flex-col rounded-xl shadow-2xl relative overflow-hidden`,"data-theme":t,style:{minHeight:"600px",height:"100%",contain:"layout style paint",overscrollBehavior:"contain",backgroundColor:t==="midnight"?"#161a25":void 0},children:[m.jsx("div",{className:o.cardTopGradient}),m.jsx("div",{className:o.cardPurpleBlur}),m.jsx("div",{className:o.cardPinkBlur}),m.jsx("div",{className:"relative z-10 flex flex-col h-full",children:e}),m.jsx("div",{className:o.cardPulse1}),m.jsx("div",{className:o.cardPulse2,style:{animationDelay:"1s"}})]})]})});if(n==="popup"){const a={"top-left":"top-4 left-4","top-right":"top-4 right-4","bottom-left":"bottom-4 left-4","bottom-right":"bottom-4 right-4"};return m.jsx("div",{className:"fixed rounded-2xl inset-0 z-[9999] pointer-events-none",children:m.jsxs("div",{className:`fixed rounded-2xl ${a[r]} pointer-events-auto`,children:[i&&m.jsx("button",{onClick:i,className:`absolute -top-2 -right-2 z-10 w-8 h-8 rounded-full flex items-center justify-center transition-all duration-200 text-sm shadow-lg border ${t==="light"?"bg-white bg-opacity-90 text-gray-900 hover:bg-gray-100 border-gray-300":"bg-gray-900 bg-opacity-90 text-white hover:bg-gray-800 border-gray-700"}`,children:"×"}),m.jsxs("div",{id:"voice-card",className:`voxket-widget-root theme-${t} ${o.card} rounded-2xl flex flex-col relative overflow-hidden`,"data-theme":t,style:{width:"350px",height:"500px",contain:"layout style paint",overscrollBehavior:"contain",backgroundColor:t==="midnight"?"#161a25":void 0},children:[m.jsx("div",{className:o.cardTopGradient}),m.jsx("div",{className:o.cardPurpleBlur}),m.jsx("div",{className:o.cardPinkBlur}),m.jsx("div",{className:"relative z-10 flex flex-col h-full w-full",children:e}),m.jsx("div",{className:o.cardPulse1}),m.jsx("div",{className:o.cardPulse2,style:{animationDelay:"1s"}})]})]})})}return m.jsxs("div",{id:"voice-card",className:`voxket-widget-root theme-${t} ${o.card} relative overflow-hidden w-full h-full`,"data-theme":t,style:{height:"100%",maxHeight:"100%",contain:"layout style paint",overscrollBehavior:"contain",backgroundColor:t==="midnight"?"#161a25":void 0},children:[m.jsx("div",{className:o.cardTopGradient}),m.jsx("div",{className:o.cardPurpleBlur}),m.jsx("div",{className:o.cardPinkBlur}),m.jsx("div",{className:"relative z-10 flex flex-col h-full w-full",children:e}),m.jsx("div",{className:o.cardPulse1}),m.jsx("div",{className:o.cardPulse2,style:{animationDelay:"1s"}})]})}function gV(e){if(typeof window>"u")return null;const{agentId:t,participantName:n,baseUrl:i,appSecret:r,appId:s,authToken:o,prompts:a,statusMessage:c,welcomeTitle:l,welcomeSubTitle:u,className:d,width:h,height:f,loadingText:g,suportsChatInput:p=!0,suportsVideoInput:v=!0,suportsScreenShare:b=!0,theme:w="vox",onSessionStart:S,onSessionEnd:k,enableSessionLogging:x=!0,onSessionLogsUpdate:C,onSessionMetricsUpdate:M,modalities:R=["voice"],displayType:P="widget",popupPosition:y="bottom-right",popupTriggerText:I="Open Chat",onPopupToggle:N,voxketClient:L,onDisplayTypeChange:U,participantMetadata:q,popupModalityMode:ue="all",popupTriggerLogoUrl:se}=e,[G,H]=D.useState(!1),[E,K]=D.useState(null),[Y,T]=D.useState(()=>{try{if(L)return!!L.getCurrentSession()}catch(A){console.error("Error checking existing session:",A)}return!1}),[Z,ne]=D.useState(!1),[ie,re]=D.useState(t||""),[X,le]=D.useState(n||"User"),[J,Re]=D.useState(()=>{try{if(L)return L.getCurrentSession()}catch(A){console.error("Error getting current session:",A)}return null}),[B,de]=D.useState(()=>{var A,z,te;try{if(L){const ge=L.getCurrentSession();if((A=ge==null?void 0:ge.activeModalities)!=null&&A.includes("chat"))return"chat";if((z=ge==null?void 0:ge.activeModalities)!=null&&z.includes("voice"))return"voice";if((te=ge==null?void 0:ge.activeModalities)!=null&&te.includes("video"))return"video"}}catch(ge){console.error("Error determining current mode:",ge)}return"welcome"}),[Me,ke]=D.useState(!1),[pe,Ce]=D.useState(!1),[Pe,Ee]=D.useState(()=>R.length===1?R[0]:null),[It,zt]=D.useState(!1);D.useEffect(()=>{P==="fullscreen"&&console.log("🎯 Widget: Switched to fullscreen mode")},[P]),D.useEffect(()=>{Y&&!Z?console.log("📊 Session started:",{currentMode:B,sessionId:J==null?void 0:J.id}):!Y&&!Z&&B==="welcome"&&console.log("📊 Returned to welcome screen")},[Y,B,Z]);const ot=D.useRef(null);if(!ot.current)try{if(L)console.log("🔄 Using existing VoxketClient to preserve session state"),ot.current=L;else if(!o&&(!s||!r)){const A="Missing required props: Either provide 'authToken' or both 'appId' and 'appSecret'";console.error("❌ VoxketClient creation failed:",A),K(new Error(A)),H(!0)}else if(i){const A={...o?{authToken:o}:{appId:s,appSecret:r},baseUrl:i,agentId:ie,participantName:X||"User",modalities:R,participantMetadata:q};console.log("🔧 Creating new VoxketClient with config:",{authMethod:o?"Bearer Token":"App Credentials",...o?{}:{appId:(s==null?void 0:s.substring(0,8))+"..."},baseUrl:i,agentId:ie,participantName:X||"User",modalities:R}),ot.current=new Mo(A)}else{const A="Missing required prop: baseUrl";console.error("❌ VoxketClient creation failed:",A),K(new Error(A)),H(!0)}}catch(A){console.error("❌ Failed to create VoxketClient:",A),K(A),H(!0)}const be=ot.current;D.useEffect(()=>{const A=ot.current;return()=>{A&&!L&&(console.log("🧹 Widget unmounting: disconnecting VoxketClient"),A.disconnect().catch(z=>{console.error("❌ Error during widget cleanup disconnect:",z)}))}},[L]);const Bt=D.useMemo(()=>P==="popup"&&Pe?[Pe]:R,[P,Pe,R]),at=D.useMemo(()=>{try{if(!be)return console.warn("⚠️ No VoxketClient available, creating fallback room"),new vi;const A=be.getRoom();return console.log("🏠 Widget: Room reference updated:",{roomExists:!!A,roomState:A==null?void 0:A.state,sessionStarted:Y,currentMode:B}),A||new vi}catch(A){return console.error("❌ Error getting room from client:",A),new vi}},[be,Y,B]);D.useEffect(()=>{if(at){const A=()=>{console.log("🏠 Widget: Room state changed:",{state:at.state,numParticipants:at.numParticipants,isConnected:at.state==="connected",sessionId:J==null?void 0:J.id})},z=(te,ge,ht)=>{console.log("🎵 Widget: Track subscribed:",{trackKind:te.kind,trackSource:te.source,participantSid:ht.sid,participantIdentity:ht.identity,sessionId:J==null?void 0:J.id})};return at.on(F.Connected,A),at.on(F.Disconnected,A),at.on(F.TrackSubscribed,z),()=>{at.off(F.Connected,A),at.off(F.Disconnected,A),at.off(F.TrackSubscribed,z)}}},[at,J==null?void 0:J.id]),D.useEffect(()=>{!Z&&B==="welcome"?console.log("🎬 Widget: Welcome screen ready"):Y&&B!=="welcome"&&console.log("🎬 Widget: Session mode active:",B)},[B,Z,Y]),D.useEffect(()=>{(B==="voice"||B==="video"||B==="chat")&&!J&&!Y&&!Z&&be&&!be.connected&&(console.log("🔄 Auto-correcting: Found orphaned mode without session, returning to welcome"),de("welcome"),ne(!1))},[B,J,Y,Z,be]);const{sessionMetrics:Q,sessionLogs:ae,logEvent:Ie}=hw({room:at,onSessionStart:S,onSessionEnd:k,enableConsoleLogging:x,enableLocalStorage:x,voxketSessionId:J==null?void 0:J.id});D.useEffect(()=>{C&&C(ae)},[ae,C]),D.useEffect(()=>{M&&Q&&M(Q)},[Q,M]),D.useEffect(()=>{if(!be)return;const A=(z,te)=>{console.log("📊 Widget: Session state changed:",{from:te,to:z,currentLoading:Z}),(z==="connecting"||z==="connected")&&(Z||(console.log("⏳ Widget: Setting loading=true (waiting for agent)"),ne(!0))),z==="active"&&(console.log("✅ Widget: Session active, agent ready - removing loader"),ne(!1),T(!0)),(z==="disconnected"||z==="error")&&(console.log("🔴 Widget: Session ended - resetting state"),ne(!1),T(!1),Re(null),de("welcome"))};return be.on("session.state.changed",A),()=>{be.off("session.state.changed",A)}},[be,Z]),D.useEffect(()=>{if(!be)return;const A=()=>{const z=be.connected,te=be.getCurrentSession();console.log("🔗 Connection state changed:",{isConnected:z,currentSessionId:te==null?void 0:te.id,currentMode:B,loading:Z,sessionStarted:Y}),!z&&Y&&!Z&&(console.log("🔴 Connection lost during active session - returning to welcome"),ne(!1),T(!1),Re(null),de("welcome")),z&&te&&Z&&(console.log("🟢 Connected with active session - removing loader"),ne(!1),T(!0),Re(te))};return be.on("connectionStateChanged",A),be.on("sessionEnded",()=>{console.log("📞 Session ended - returning to welcome"),ne(!1),T(!1),Re(null),de("welcome")}),()=>{be.off("connectionStateChanged",A),be.off("sessionEnded",()=>{})}},[be,B,Z,Y]);const Ye=!!(!!(be!=null&&be.connected)&&Y&&J);D.useEffect(()=>{const A=te=>{console.log("🔴 Widget: Room disconnected:",te),console.log("🔍 Widget: Current state on disconnect:",{currentMode:B,sessionStarted:Y,currentSessionId:J==null?void 0:J.id,loading:Z}),ne(!1),T(!1),Re(null),de("welcome"),console.log("🏠 Widget: Automatically returning to welcome screen after disconnect")},z=te=>{console.log("📹 Media devices error:",te)};return at.on(F.MediaDevicesError,z),at.on(F.Disconnected,A),()=>{at.off(F.Disconnected,A),at.off(F.MediaDevicesError,z)}},[at,B,Y,J==null?void 0:J.id,Z]);const tn=async()=>{try{if(!be){console.error("❌ VoxketClient not available"),K(new Error("VoxketClient not initialized")),H(!0);return}ne(!0),de("voice"),console.log("🎤 Starting voice session...",{agentId:ie,participantName:X}),console.log("🎤 Pre-start state:",{currentMode:"voice",sessionStarted:!1,loading:!0}),Ie("USER_STARTED_VOICE_SESSION",{agentId:ie,participantName:X});const A=await be.startSession(ie,{participantName:X||"User",modalities:["voice"],participantMetadata:be.getParticipantMetadata()||q});console.log("✅ Voice session started successfully:",A.id),Re(A),T(!0),ne(!1),S&&S(A.id)}catch(A){console.error("❌ Failed to start voice session:",A),ne(!1),T(!1),de("welcome")}},On=async()=>{try{if(!be){console.error("❌ VoxketClient not available"),K(new Error("VoxketClient not initialized")),H(!0);return}ne(!0),de("chat"),console.log("💬 Starting chat session...",{agentId:ie,participantName:X}),Ie("USER_STARTED_CHAT_SESSION",{agentId:ie,participantName:X});const A=await be.startSession(ie,{participantName:X||"User",modalities:["chat"],participantMetadata:be.getParticipantMetadata()||q});console.log("✅ Chat session started successfully:",A.id),Re(A),T(!0),ne(!1),S&&S(A.id)}catch(A){console.error("❌ Failed to start chat session:",A),ne(!1),T(!1),de("welcome")}},gn=async()=>{try{if(!be){console.error("❌ VoxketClient not available"),K(new Error("VoxketClient not initialized")),H(!0);return}ne(!0),de("video"),console.log("📺 Starting video session...",{agentId:ie,participantName:X}),console.log("📺 Pre-start state:",{currentMode:"video",sessionStarted:!1,loading:!0}),Ie("USER_STARTED_VIDEO_SESSION",{agentId:ie,participantName:X});const A=await be.startSession(ie,{participantName:X||"User",modalities:["video","voice"],participantMetadata:be.getParticipantMetadata()||q});console.log("✅ Video session started successfully:",A.id),Re(A),T(!0),ne(!1),S&&S(A.id)}catch(A){console.error("❌ Failed to start video session:",A),ne(!1),T(!1),de("welcome")}},an=()=>{de("welcome"),ne(!1),U&&U(e.displayType||"widget"),J&&Y?(console.log("🧹 Widget: Cleaning up active session"),T(!1),Re(null),be&&(console.log("🔌 Widget: Disconnecting client and cleaning up room"),be.disconnect().catch(A=>{console.error("❌ Widget: Error during disconnect:",A)}))):(console.log("📝 Widget: No active session to clean up"),be&&be.connected&&(console.log("🔌 Widget: Force disconnecting client for fresh state"),be.disconnect().catch(A=>{console.error("❌ Widget: Error during force disconnect:",A)}))),P==="popup"&&!Me&&ke(!0),console.log("✅ Widget: handleBackToWelcome completed",{newCurrentMode:"welcome",newLoading:!1,newSessionStarted:!1})},En=()=>{const A=!Me;ke(A),N&&N(A),!A&&!(J&&Y)&&(de("welcome"),T(!1),Re(null))},Qt=()=>{console.log("🔄 Closing fullscreen, switching to widget display type"),e.onDisplayTypeChange?e.onDisplayTypeChange("widget"):console.warn("⚠️ No onDisplayTypeChange callback provided")},Kn=()=>{if(console.log("🔄 Expand to fullscreen requested"),e.onDisplayTypeChange)e.onDisplayTypeChange("fullscreen");else{console.warn("⚠️ No onDisplayTypeChange callback provided for expand functionality");const A=document.getElementById("voice-card")||document.querySelector(".voxket-widget-container");A&&A.requestFullscreen&&A.requestFullscreen().catch(z=>{console.warn("⚠️ Fullscreen API not supported or failed:",z)})}};D.useEffect(()=>{var A,z,te;if(L&&be){const ge=be.getCurrentSession();be.connected,ge&&(console.log("✅ Restoring session state:",ge.id),Re(ge),T(!0),ne(!1),(A=ge.activeModalities)!=null&&A.includes("chat")?de("chat"):(z=ge.activeModalities)!=null&&z.includes("voice")?de("voice"):(te=ge.activeModalities)!=null&&te.includes("video")&&de("video"))}},[L,be]),D.useEffect(()=>()=>{!L&&be&&be.disconnect()},[be,L]);let Wt=B==="video"?"w-[32rem]":"w-96",Cr=B==="video"?"h-[30rem]":"h-[25rem]",Er={};if(h&&(h.startsWith("w-")?Wt=h:(Er.width=h,Wt="")),f&&(f.startsWith("h-")?Cr=f:(Er.height=f,Cr="")),P==="popup"&&!Me)return console.log("🟡 Showing popup trigger button"),m.jsxs(m.Fragment,{children:[m.jsx(dw,{onClick:()=>{if(Ye){!Pe&&(J!=null&&J.activeModalities)&&(J.activeModalities.includes("chat")?Ee("chat"):J.activeModalities.includes("video")?Ee("video"):J.activeModalities.includes("voice")&&Ee("voice")),Ce(!1),ke(!0),N&&N(!0);return}if(ue!=="all"){Ee(ue),Ce(!1),ke(!0),N&&N(!0);return}if(R.length===1){Ee(R[0]),Ce(!1),ke(!0),N&&N(!0);return}Ce(A=>!A),Ee(null),zt(!1)},position:y,ariaLabel:I,size:64,isRunning:Ye,logoUrl:se}),pe&&ue==="all"&&(()=>{const te={};y==="bottom-right"?(te.bottom=88,te.right=16):y==="bottom-left"?(te.bottom=88,te.left=16):y==="top-right"?(te.top=88,te.right=16):(te.top=88,te.left=16);const ge="absolute w-0 h-0 border-8",ht=y.startsWith("bottom")?m.jsx("div",{className:`${ge} border-transparent border-t-black`,style:{bottom:-16,right:y.endsWith("right")?16:void 0,left:y.endsWith("left")?16:void 0}}):m.jsx("div",{className:`${ge} border-transparent border-b-black`,style:{top:-16,right:y.endsWith("right")?16:void 0,left:y.endsWith("left")?16:void 0}});return m.jsx("div",{className:"fixed z-[51]",style:te,children:m.jsxs("div",{className:"relative bg-black text-white rounded-xl shadow-2xl p-5",children:[ht,m.jsx("div",{className:"text-xs uppercase tracking-wide mb-2 opacity-70",children:"Choose modality"}),m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("button",{type:"button",onClick:()=>{Ee("voice"),Ce(!1),ke(!0),N&&N(!0)},className:"px-3 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white text-sm",title:"Voice",children:"Voice"}),m.jsx("button",{type:"button",onClick:()=>{Ee("chat"),Ce(!1),ke(!0),N&&N(!0)},className:"px-3 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white text-sm",title:"Chat",children:"Chat"}),m.jsx("button",{type:"button",onClick:()=>{Ee("video"),Ce(!1),ke(!0),N&&N(!0)},className:"px-3 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white text-sm",title:"Video",children:"Video"})]})]})})})()]});if(G||!be){const A=(E==null?void 0:E.message)||"VoxketWidget encountered an error. Please check your configuration.";return m.jsx("div",{className:`voxket-widget-root theme-${w} flex items-center justify-center p-8 ${d||""}`,style:{width:h||"400px",height:f||"500px",border:"1px solid #ff4444",borderRadius:"8px",background:"#fff5f5",color:"#cc0000"},children:m.jsxs("div",{className:"text-center",children:[m.jsx("div",{className:"text-4xl mb-4",children:"⚠️"}),m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Widget Error"}),m.jsx("p",{className:"text-sm mb-4",children:A}),m.jsx("button",{onClick:()=>{H(!1),K(null),window.location.reload()},className:"px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors",children:"Retry"})]})})}let ws=`voxket-widget-root theme-${w}`,Zi={scrollMargin:0,scrollPadding:0,contain:"layout style paint"};P==="widget"?(ws+=` flex min-h-fit ${Wt} ${Cr} ${d}`,Zi={...Zi,...Er}):(ws=`${d||""}`,Zi={});const oi=m.jsx("div",{className:"h-full w-full flex flex-col overflow-hidden relative z-10",children:m.jsxs(ls,{mode:"wait",children:[B==="welcome"&&!Z&&m.jsx(fV,{agentId:ie,participantName:X||"",onAgentIdChange:re,onParticipantNameChange:le,onStartCall:tn,onStartChat:On,onStartVideo:gn,disabled:Y||Z,prompts:a,statusMessage:c,title:l,subTitle:u,theme:w,modalities:Bt,initial:{opacity:0,y:0},animate:{opacity:1,y:0},exit:{opacity:0,y:40},transition:{duration:.3,ease:"easeInOut"}},"welcome"),Z&&(B==="voice"||B==="chat"||B==="video")&&m.jsx(mV,{theme:w,mode:B,loadingText:g,sessionState:J==null?void 0:J.state,initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9},transition:{duration:.3,ease:"easeInOut"}},`loading-${B}`),B==="voice"&&!Z&&Y&&be&&m.jsxs(Za.Provider,{value:at,children:[m.jsx(ug,{},`audio-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(ag,{label:"Start Audio"},`start-audio-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(uV,{loadingText:g,participantName:X||"User",sessionStarted:Y,disabled:!1,theme:w,client:be,displayType:P,onBack:P==="popup"?En:an,initial:{opacity:0,y:40},animate:{opacity:1,y:0},exit:{opacity:0,y:-40},transition:{duration:.3,ease:"easeInOut"}},"voice-session")]}),B==="chat"&&!Z&&Y&&be&&m.jsx(dV,{client:be,theme:w,displayType:P,onBack:P==="popup"?En:an,onEndChat:an,disabled:!1,initial:{opacity:0,y:40},animate:{opacity:1,y:0},exit:{opacity:0,y:-40},transition:{duration:.3,ease:"easeInOut"}},"chat-view"),B==="video"&&!Z&&Y&&be&&m.jsxs(Za.Provider,{value:at,children:[m.jsx(ug,{},`audio-video-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(ag,{label:"Start Audio"},`start-audio-video-${(J==null?void 0:J.id)||"no-session"}`),m.jsx(hV,{client:be,theme:w,displayType:P,onBack:P==="popup"?En:an,onEndCall:an,disabled:!1,initial:{opacity:0,y:40},animate:{opacity:1,y:0},exit:{opacity:0,y:-40},transition:{duration:.3,ease:"easeInOut"}},"video-session")]})]})});return P==="fullscreen"||P==="popup"?m.jsx($b,{theme:w,displayType:P,popupPosition:y,onClose:P==="fullscreen"?Qt:En,children:oi}):m.jsx("div",{className:ws,style:Zi,children:m.jsx($b,{theme:w,displayType:P,popupPosition:y,onExpand:Kn,children:oi})})}function Pa(e){return m.jsx(kf,{children:m.jsx(gV,{...e})})}function bV({logs:e,onClear:t,onExport:n}){const[i,r]=_.useState(!1),[s,o]=_.useState(""),a=e.filter(c=>!s||c.event.toLowerCase().includes(s.toLowerCase()));return i?m.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:m.jsxs("div",{className:"bg-white rounded-lg shadow-xl max-w-4xl w-full max-h-[80vh] flex flex-col m-4",children:[m.jsxs("div",{className:"flex items-center justify-between p-4 border-b",children:[m.jsxs("h2",{className:"text-lg font-semibold",children:["Session Logs (",e.length,")"]}),m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("input",{type:"text",placeholder:"Filter events...",value:s,onChange:c=>o(c.target.value),className:"px-3 py-1 border rounded text-sm"}),m.jsx("button",{onClick:t,className:"px-3 py-1 bg-red-600 text-white rounded text-sm hover:bg-red-700",children:"Clear"}),m.jsx("button",{onClick:n,className:"px-3 py-1 bg-green-600 text-white rounded text-sm hover:bg-green-700",children:"Export"}),m.jsx("button",{onClick:()=>r(!1),className:"px-3 py-1 bg-gray-600 text-white rounded text-sm hover:bg-gray-700",children:"Close"})]})]}),m.jsx("div",{className:"flex-1 overflow-auto p-4",children:a.length===0?m.jsx("p",{className:"text-gray-500 text-center py-8",children:"No logs found"}):m.jsx("div",{className:"space-y-2",children:a.map((c,l)=>m.jsxs("div",{className:"border rounded p-3 text-sm",children:[m.jsxs("div",{className:"flex items-center justify-between mb-1",children:[m.jsx("span",{className:"font-semibold text-blue-600",children:c.event}),m.jsx("span",{className:"text-gray-500 text-xs",children:new Date(c.timestamp).toLocaleTimeString()})]}),c.sessionId&&m.jsxs("div",{className:"text-xs text-gray-600 mb-1",children:["Session: ",c.sessionId]}),c.data&&m.jsx("div",{className:"bg-gray-50 p-2 rounded text-xs",children:m.jsx("pre",{className:"whitespace-pre-wrap overflow-auto",children:JSON.stringify(c.data,null,2)})})]},l))})})]})}):m.jsxs("button",{onClick:()=>r(!0),className:"fixed bottom-4 right-4 bg-blue-600 text-white px-4 py-2 rounded-lg shadow-lg hover:bg-blue-700 transition-colors text-sm z-50",children:["Session Logs (",e.length,")"]})}function yV({metrics:e}){return e?m.jsxs("div",{className:"bg-gray-100 p-4 rounded-lg",children:[m.jsx("h3",{className:"font-semibold mb-2",children:"Current Session"}),m.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Session ID:"}),m.jsx("div",{className:"font-mono text-xs",children:e.sessionId})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Start Time:"}),m.jsx("div",{children:new Date(e.startTime).toLocaleString()})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Messages:"}),m.jsx("div",{children:e.totalMessages})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Participants:"}),m.jsx("div",{children:e.participantCount})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Connection Issues:"}),m.jsx("div",{children:e.connectionIssues})]}),m.jsxs("div",{children:[m.jsx("span",{className:"text-gray-600",children:"Duration:"}),m.jsxs("div",{children:[Math.round((Date.now()-new Date(e.startTime).getTime())/1e3),"s"]})]})]})]}):null}function wr(){const{currentSession:e,sessionState:t,sessionMetrics:n,createSession:i,endSession:r}=si(),s=_.useCallback(async(a,c)=>await i(a,c),[i]),o=_.useCallback(async()=>await r(),[r]);return{session:e,state:t,metrics:n,isActive:e!==null&&t!=="disconnected",isConnecting:t==="connecting",isConnected:t==="connected"||t==="active",start:s,stop:o}}function Sw(){const{sessionMetrics:e,currentSession:t}=si();return{metrics:e,sessionId:t==null?void 0:t.id,duration:e==null?void 0:e.duration,participantCount:e==null?void 0:e.participantCount,messageCount:e==null?void 0:e.messageCount,audioQuality:e==null?void 0:e.audioQuality,networkStats:e==null?void 0:e.networkStats}}function ww(){const{setMicrophoneEnabled:e,client:t}=si(),[n,i]=_.useState(!1),[r,s]=_.useState(!1),o=_.useCallback(async()=>{if(!r){s(!0);try{const l=!n;await e(l),i(l)}catch(l){console.error("Failed to toggle microphone:",l)}finally{s(!1)}}},[n,r,e]),a=_.useCallback(async()=>{if(!(n||r)){s(!0);try{await e(!0),i(!0)}catch(l){console.error("Failed to enable microphone:",l)}finally{s(!1)}}},[n,r,e]),c=_.useCallback(async()=>{if(!(!n||r)){s(!0);try{await e(!1),i(!1)}catch(l){console.error("Failed to disable microphone:",l)}finally{s(!1)}}},[n,r,e]);return{isEnabled:n,isLoading:r,toggle:o,enable:a,disable:c}}function Cw(){const{setCameraEnabled:e}=si(),[t,n]=_.useState(!1),[i,r]=_.useState(!1),s=_.useCallback(async()=>{if(!i){r(!0);try{const c=!t;await e(c),n(c)}catch(c){console.error("Failed to toggle camera:",c)}finally{r(!1)}}},[t,i,e]),o=_.useCallback(async()=>{if(!(t||i)){r(!0);try{await e(!0),n(!0)}catch(c){console.error("Failed to enable camera:",c)}finally{r(!1)}}},[t,i,e]),a=_.useCallback(async()=>{if(!(!t||i)){r(!0);try{await e(!1),n(!1)}catch(c){console.error("Failed to disable camera:",c)}finally{r(!1)}}},[t,i,e]);return{isEnabled:t,isLoading:i,toggle:s,enable:o,disable:a}}function Ew(){const{startScreenShare:e,stopScreenShare:t}=si(),[n,i]=_.useState(!1),[r,s]=_.useState(!1),o=_.useCallback(async()=>{if(!(n||r)){s(!0);try{await e(),i(!0)}catch(l){console.error("Failed to start screen share:",l)}finally{s(!1)}}},[n,r,e]),a=_.useCallback(async()=>{if(!(!n||r)){s(!0);try{await t(),i(!1)}catch(l){console.error("Failed to stop screen share:",l)}finally{s(!1)}}},[n,r,t]),c=_.useCallback(async()=>{n?await a():await o()},[n,o,a]);return{isSharing:n,isLoading:r,start:o,stop:a,toggle:c}}function vV(){const{client:e}=si(),[t,n]=_.useState({tracks:[],layout:{type:"grid",showLocalVideo:!0,aspectRatio:"16:9"},isRecording:!1}),i=_.useMemo(()=>t.tracks.find(p=>p.isLocal),[t.tracks]),r=_.useMemo(()=>t.tracks.filter(p=>!p.isLocal),[t.tracks]),s=_.useCallback(async()=>{try{i!=null&&i.isEnabled?await(e==null?void 0:e.disableCamera()):await(e==null?void 0:e.enableCamera())}catch(p){throw console.error("Failed to toggle camera:",p),p}},[e,i]),o=_.useCallback(async()=>{try{t.tracks.find(v=>v.isScreenShare)?await(e==null?void 0:e.stopScreenShare()):await(e==null?void 0:e.startScreenShare())}catch(p){throw console.error("Failed to toggle screen share:",p),p}},[e,t.tracks]),a=_.useCallback(p=>{n(v=>({...v,layout:p}))},[]),c=_.useCallback(p=>{n(v=>({...v,pinnedTrack:p}))},[]),l=_.useCallback(()=>{n(p=>({...p,pinnedTrack:void 0}))},[]),u=_.useCallback(async()=>{try{await(e==null?void 0:e.startRecording()),n(p=>({...p,isRecording:!0}))}catch(p){throw console.error("Failed to start recording:",p),p}},[e]),d=_.useCallback(async()=>{try{await(e==null?void 0:e.stopRecording()),n(p=>({...p,isRecording:!1}))}catch(p){throw console.error("Failed to stop recording:",p),p}},[e]),h=_.useCallback(p=>t.tracks.find(v=>v.id===p),[t.tracks]),f=_.useCallback(p=>t.tracks.filter(v=>v.participantId===p),[t.tracks]),g=_.useCallback(p=>p.isEnabled&&t.tracks.includes(p),[t.tracks]);return _.useEffect(()=>{if(!e)return;const p=w=>{n(S=>({...S,tracks:[...S.tracks.filter(k=>k.id!==w.id),w]}))},v=w=>{n(S=>{var k;return{...S,tracks:S.tracks.filter(x=>x.id!==w),pinnedTrack:((k=S.pinnedTrack)==null?void 0:k.id)===w?void 0:S.pinnedTrack}})},b=w=>{n(S=>({...S,tracks:S.tracks.map(k=>k.id===w.id?w:k)}))};return e.on("videoTrackAdded",p),e.on("videoTrackRemoved",v),e.on("videoTrackUpdated",b),()=>{e.off("videoTrackAdded",p),e.off("videoTrackRemoved",v),e.off("videoTrackUpdated",b)}},[e]),{tracks:t.tracks,localTrack:i,remoteTraracks:r,pinnedTrack:t.pinnedTrack,layout:t.layout,isRecording:t.isRecording,toggleCamera:s,toggleScreenShare:o,setLayout:a,pinTrack:c,unpinTrack:l,startRecording:u,stopRecording:d,getTrackById:h,getTracksByParticipant:f,isTrackActive:g}}function Gc(){const{chatMessages:e,sendChatMessage:t,currentSession:n}=si(),[i,r]=_.useState(!1),s=_.useCallback(async l=>{if(!(!l.trim()||i||!n)){r(!0);try{await t(l.trim())}catch(u){throw console.error("Failed to send chat message:",u),u}finally{r(!1)}}},[t,i,n]),{userMessages:o,agentMessages:a,allMessages:c}=_.useMemo(()=>{const l=e.filter(d=>d.sender.type==="participant"),u=e.filter(d=>d.sender.type==="agent");return{userMessages:l,agentMessages:u,allMessages:e}},[e]);return{messages:c,userMessages:o,agentMessages:a,messageCount:c.length,isSending:i,canSend:!!n&&!i,send:s}}function xV(){const{send:e,isSending:t,canSend:n}=Gc(),[i,r]=_.useState(""),s=_.useCallback(async()=>{if(!(!i.trim()||!n))try{await e(i),r("")}catch(a){throw a}},[i,e,n]),o=_.useCallback(a=>{a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),s())},[s]);return{value:i,setValue:r,send:s,handleKeyPress:o,isSending:t,canSend:n&&i.trim().length>0}}function Cf(){const{isConnected:e,isConnecting:t,connectionError:n,connect:i,disconnect:r}=si(),s=_.useCallback(async()=>{if(!(e||t))try{await i()}catch(a){throw console.error("Failed to connect:",a),a}},[i,e,t]),o=_.useCallback(async()=>{if(e)try{await r()}catch(a){throw console.error("Failed to disconnect:",a),a}},[r,e]);return{isConnected:e,isConnecting:t,isDisconnected:!e&&!t,error:n,hasError:!!n,connect:s,disconnect:o}}function Tw(){const{participants:e}=si();return{participants:e,count:e.length,localParticipant:e.find(t=>t.isLocal),remoteParticipants:e.filter(t=>!t.isLocal)}}const Aw=_.createContext({}),Po=()=>_.useContext(Aw);function Iw({children:e,...t}){return m.jsx(Aw.Provider,{value:t,children:e})}function Na({name:e,children:t,fallback:n,className:i}){return m.jsx("div",{className:`voxket-slot voxket-slot--${e} ${i||""}`,children:t||n})}function Rw(e,t={}){return Object.assign(e,t)}function Mw({showMicrophoneControl:e=!0,showCameraControl:t=!0,showScreenShareControl:n=!0,showSessionActions:i=!0,customControls:r,className:s=""}){const o=wr(),a=ww(),c=Cw(),l=Ew(),u=Po(),d=["voxket-session-controls",`voxket-session-controls--${u.variant||"default"}`,`voxket-session-controls--${u.size||"md"}`,o.isActive?"voxket-session-controls--active":"voxket-session-controls--inactive",s].filter(Boolean).join(" ");return!o.isActive&&!i?m.jsx("div",{className:d,children:m.jsx("div",{className:"voxket-controls-inactive",children:m.jsx("p",{children:"Controls available during active session"})})}):m.jsxs("div",{className:d,children:[i&&m.jsx("div",{className:"voxket-session-actions",children:o.isActive?m.jsx("button",{onClick:o.stop,className:"voxket-button voxket-button--danger",children:"End Session"}):m.jsx(kV,{})}),o.isActive&&m.jsxs("div",{className:"voxket-media-controls",children:[e&&m.jsxs("button",{onClick:a.toggle,disabled:a.isLoading,className:`voxket-button voxket-button--media ${a.isEnabled?"voxket-button--active":""}`,title:a.isEnabled?"Mute microphone":"Unmute microphone",children:[m.jsx("span",{className:"voxket-icon",children:"🎤"}),a.isLoading?"Loading...":a.isEnabled?"Mute":"Unmute"]}),t&&m.jsxs("button",{onClick:c.toggle,disabled:c.isLoading,className:`voxket-button voxket-button--media ${c.isEnabled?"voxket-button--active":""}`,title:c.isEnabled?"Stop camera":"Start camera",children:[m.jsx("span",{className:"voxket-icon",children:"📹"}),c.isLoading?"Loading...":c.isEnabled?"Stop Video":"Start Video"]}),n&&m.jsxs("button",{onClick:l.toggle,disabled:l.isLoading,className:`voxket-button voxket-button--media ${l.isSharing?"voxket-button--active":""}`,title:l.isSharing?"Stop screen share":"Start screen share",children:[m.jsx("span",{className:"voxket-icon",children:"🖥️"}),l.isLoading?"Loading...":l.isSharing?"Stop Share":"Share Screen"]})]}),r&&m.jsx("div",{className:"voxket-custom-controls",children:r})]})}function kV(){wr();const[e,t]=_.useState(!1),n=async()=>{t(!0);try{console.log("Start session - agentId needed")}catch(i){console.error("Failed to start session:",i)}finally{t(!1)}};return m.jsx("button",{onClick:n,disabled:e,className:"voxket-button voxket-button--primary",children:e?"Starting...":"Start Session"})}function Ef({showConnectionStatus:e=!0,showSessionInfo:t=!0,showAgentInfo:n=!0,className:i=""}){const r=wr(),s=Cf(),o=Po(),a=["voxket-session-header",`voxket-session-header--${o.variant||"default"}`,`voxket-session-header--${o.size||"md"}`,i].filter(Boolean).join(" ");return m.jsxs("div",{className:a,children:[e&&m.jsxs("div",{className:"voxket-connection-status",children:[m.jsx("div",{className:`voxket-status-indicator ${s.isConnected?"connected":"disconnected"}`}),m.jsx("span",{className:"voxket-status-text",children:s.isConnecting?"Connecting...":s.isConnected?"Connected":"Disconnected"})]}),t&&r.session&&m.jsxs("div",{className:"voxket-session-info",children:[m.jsxs("div",{className:"voxket-session-id",children:["Session: ",r.session.id.slice(-8)]}),m.jsxs("div",{className:"voxket-session-state",children:["State: ",r.state]})]}),n&&r.session&&m.jsxs("div",{className:"voxket-agent-info",children:[m.jsxs("div",{className:"voxket-agent-id",children:["Agent: ",r.session.agentId]}),m.jsxs("div",{className:"voxket-modalities",children:["Modalities: ",r.session.activeModalities.join(", ")]})]}),s.error&&m.jsxs("div",{className:"voxket-error-message",children:["Error: ",s.error.message]})]})}function Tf({showChat:e=!0,showTranscriptions:t=!1,customContent:n,className:i=""}){const r=wr(),s=Gc(),o=Po(),a=["voxket-session-content",`voxket-session-content--${o.variant||"default"}`,`voxket-session-content--${o.size||"md"}`,i].filter(Boolean).join(" ");return r.isActive?m.jsx("div",{className:a,children:n||m.jsxs(m.Fragment,{children:[e&&m.jsxs("div",{className:"voxket-chat-container",children:[m.jsxs("div",{className:"voxket-chat-messages",children:[s.messages.map(c=>m.jsxs("div",{className:`voxket-message voxket-message--${c.sender.type}`,children:[m.jsxs("div",{className:"voxket-message-header",children:[m.jsx("span",{className:"voxket-message-sender",children:c.sender.name}),m.jsx("span",{className:"voxket-message-time",children:c.timestamp.toLocaleTimeString()})]}),m.jsx("div",{className:"voxket-message-content",children:c.content})]},c.id)),s.messages.length===0&&m.jsx("div",{className:"voxket-empty-messages",children:m.jsx("p",{children:"No messages yet. Start the conversation!"})})]}),m.jsx(SV,{})]}),t&&m.jsx("div",{className:"voxket-transcriptions",children:m.jsx("div",{className:"voxket-transcription-placeholder",children:m.jsx("p",{children:"Voice transcriptions will appear here"})})})]})}):m.jsx("div",{className:a,children:m.jsx("div",{className:"voxket-inactive-state",children:m.jsxs("div",{className:"voxket-inactive-message",children:[m.jsx("h3",{children:"Start a conversation"}),m.jsx("p",{children:"Begin a session to start chatting with the AI agent"})]})})})}function SV(){const e=Gc(),[t,n]=_.useState(""),i=async()=>{if(!(!t.trim()||!e.canSend))try{await e.send(t),n("")}catch(s){console.error("Failed to send message:",s)}},r=s=>{s.key==="Enter"&&!s.shiftKey&&(s.preventDefault(),i())};return m.jsxs("div",{className:"voxket-chat-input",children:[m.jsx("input",{type:"text",value:t,onChange:s=>n(s.target.value),onKeyPress:r,placeholder:"Type your message...",disabled:!e.canSend,className:"voxket-input"}),m.jsx("button",{onClick:i,disabled:!e.canSend||!t.trim(),className:"voxket-send-button",children:e.isSending?"Sending...":"Send"})]})}function Af({showMetrics:e=!0,showParticipants:t=!0,showStatus:n=!0,customFooter:i,className:r=""}){const s=wr(),o=Sw(),a=Tw(),c=Po(),l=["voxket-session-footer",`voxket-session-footer--${c.variant||"default"}`,`voxket-session-footer--${c.size||"md"}`,r].filter(Boolean).join(" ");return s.isActive?m.jsx("div",{className:l,children:i||m.jsxs(m.Fragment,{children:[n&&m.jsxs("div",{className:"voxket-session-status",children:[m.jsx("div",{className:"voxket-status-indicator voxket-status-indicator--active"}),m.jsx("span",{className:"voxket-status-text",children:"Session Active"})]}),e&&o.metrics&&m.jsxs("div",{className:"voxket-session-metrics",children:[m.jsxs("div",{className:"voxket-metric",children:[m.jsx("span",{className:"voxket-metric-label",children:"Duration:"}),m.jsx("span",{className:"voxket-metric-value",children:wV(o.duration||0)})]}),m.jsxs("div",{className:"voxket-metric",children:[m.jsx("span",{className:"voxket-metric-label",children:"Messages:"}),m.jsx("span",{className:"voxket-metric-value",children:o.metrics.messageCount})]})]}),t&&m.jsxs("div",{className:"voxket-participants-info",children:[m.jsxs("span",{className:"voxket-participants-count",children:[a.count," participant",a.count!==1?"s":""]}),a.remoteParticipants.length>0&&m.jsx("div",{className:"voxket-participant-list",children:a.remoteParticipants.map(u=>m.jsx("span",{className:"voxket-participant-name",children:u.name},u.id))})]})]})}):m.jsx("div",{className:l,children:m.jsx("div",{className:"voxket-footer-inactive",children:m.jsx("span",{className:"voxket-status-text",children:"Ready to start session"})})})}function wV(e){const t=Math.floor(e/1e3),n=Math.floor(t/60),i=Math.floor(n/60);return i>0?`${i}:${(n%60).toString().padStart(2,"0")}:${(t%60).toString().padStart(2,"0")}`:`${n}:${(t%60).toString().padStart(2,"0")}`}function CV({agentId:e,sessionConfig:t,autoStart:n=!1,onSessionStart:i,onSessionEnd:r,variant:s="default",size:o="md",theme:a,className:c="",children:l}){var f;const u=wr(),d=Cf();_.useEffect(()=>{n&&e&&d.isConnected&&!u.isActive&&u.start(e,t).catch(console.error)},[n,e,d.isConnected,u.isActive]),_.useEffect(()=>{var g;(g=u.session)!=null&&g.id&&i&&i(u.session.id)},[(f=u.session)==null?void 0:f.id,i]),_.useEffect(()=>()=>{u.isActive&&r&&u.stop().then(r).catch(console.error)},[]);const h=["voxket-session",`voxket-session--${s}`,`voxket-session--${o}`,u.isActive?"voxket-session--active":"voxket-session--inactive",c].filter(Boolean).join(" ");return m.jsx(Iw,{variant:s,size:o,theme:a,className:c,children:m.jsx("div",{className:h,children:l||m.jsxs(m.Fragment,{children:[m.jsx(Na,{name:"header",fallback:m.jsx(Ef,{})}),m.jsx(Na,{name:"content",fallback:m.jsx(Tf,{})}),m.jsx(Na,{name:"footer",fallback:m.jsx(Af,{})})]})})})}const Pw=Rw(CV,{Header:Ef,Content:Tf,Footer:Af,Controls:Mw}),fr={name:"default",colors:{primary:"#3B82F6",secondary:"#6B7280",accent:"#8B5CF6",background:"#FFFFFF",surface:"#F9FAFB",text:{primary:"#111827",secondary:"#6B7280",muted:"#9CA3AF",inverse:"#FFFFFF"},status:{success:"#10B981",warning:"#F59E0B",error:"#EF4444",info:"#3B82F6"},border:"#E5E7EB",shadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1)"},typography:{fontFamily:"system-ui, -apple-system, sans-serif",fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},fontWeight:{normal:400,medium:500,semibold:600,bold:700},lineHeight:{tight:1.25,normal:1.5,relaxed:1.75}},spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem"},borderRadius:{none:"0",sm:"0.25rem",md:"0.5rem",lg:"0.75rem",full:"9999px"},shadows:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",md:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1)"}},Ld={...fr,name:"dark",colors:{primary:"#60A5FA",secondary:"#9CA3AF",accent:"#A78BFA",background:"#111827",surface:"#1F2937",text:{primary:"#F9FAFB",secondary:"#D1D5DB",muted:"#9CA3AF",inverse:"#111827"},status:{success:"#34D399",warning:"#FBBF24",error:"#F87171",info:"#60A5FA"},border:"#374151",shadow:"0 1px 3px 0 rgba(0, 0, 0, 0.3)"}},Bd={...fr,name:"enterprise",colors:{primary:"#1E40AF",secondary:"#64748B",accent:"#7C3AED",background:"#FFFFFF",surface:"#F8FAFC",text:{primary:"#0F172A",secondary:"#475569",muted:"#94A3B8",inverse:"#FFFFFF"},status:{success:"#059669",warning:"#D97706",error:"#DC2626",info:"#1E40AF"},border:"#CBD5E1",shadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1)"},borderRadius:{none:"0",sm:"0.125rem",md:"0.25rem",lg:"0.375rem",full:"9999px"}},Nw=_.createContext(null),Ow=()=>{const e=_.useContext(Nw);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e};function EV({theme:e="default",themes:t={},children:n,cssVariables:i=!0,className:r=""}){const[s,o]=_.useState(()=>{const h={default:fr,dark:Ld,enterprise:Bd,...t};return typeof e=="string"?h[e]||fr:e}),[a,c]=_.useState(()=>({default:fr,dark:Ld,enterprise:Bd,...t})),l=h=>{if(typeof h=="string"){const f=a[h];f&&o(f)}else o(h)},u=h=>{c(f=>({...f,[h.name]:h}))};_.useEffect(()=>{if(i&&typeof document<"u"){const h=document.documentElement;Object.entries(_w(s)).forEach(([f,g])=>{h.style.setProperty(`--voxket-${f}`,g)})}},[s,i]);const d={theme:s,setTheme:l,themes:a,registerTheme:u};return m.jsx(Nw.Provider,{value:d,children:m.jsx("div",{className:`voxket-theme voxket-theme--${s.name} ${r}`,children:n})})}function _w(e){const t={},n=(i,r="")=>{for(const[s,o]of Object.entries(i)){const a=r?`${r}-${s}`:s;typeof o=="object"&&o!==null&&!Array.isArray(o)?n(o,a):t[a]=String(o)}};return n(e),t}function TV(e=fr,t){return{...e,...t,colors:{...e.colors,...t.colors},typography:{...e.typography,...t.typography},spacing:{...e.spacing,...t.spacing},borderRadius:{...e.borderRadius,...t.borderRadius},shadows:{...e.shadows,...t.shadows}}}function AV(e){var n;const{theme:t}=Ow();return((n=t.components)==null?void 0:n[e])||{}}const IV=wf("voice-modality","voice",{onActivate:async e=>{const t=e.config;t.enableTranscription&&RV(e),t.enableVoiceActivation&&MV(e,t),console.log("Voice modality activated",t)},onDeactivate:async e=>{console.log("Voice modality deactivated")},onMessage:async(e,t)=>{t.type==="audio"&&PV(e,t)}});function RV(e,t){e.on("participant.speaking.started",n=>{console.log("Transcription: Started for",n.name)}),e.on("participant.speaking.stopped",n=>{console.log("Transcription: Stopped for",n.name)})}function MV(e,t){const n=t.silenceThreshold||-50;console.log("Voice activation setup with threshold:",n)}function PV(e,t){console.log("Playing audio response:",t.content)}const NV=wf("chat-modality","chat",{onActivate:async e=>{const t=e.config;t.enableRichText&&OV(),t.enableFileUpload&&_V(e),t.enableCustomComponents&&DV(),console.log("Chat modality activated",t)},onDeactivate:async e=>{console.log("Chat modality deactivated")},onMessage:async(e,t)=>{const n=e.config;t.type==="ui_component"?LV(e,t):t.type==="text"&&n.enableRichText&&BV(e,t)}});function OV(e){console.log("Rich text support enabled")}function _V(e){console.log("File upload enabled"),e.on("chat.file.uploaded",t=>{console.log("File uploaded:",t.name)})}function DV(e){console.log("Custom components enabled");const t=new Map;t.set("quick-actions",FV),t.set("form",UV),t.set("card",jV),t.set("chart",VV)}function LV(e,t){const{componentType:n,props:i}=t.metadata;console.log("Rendering custom component:",n,i),e.emit("chat.component.render",{type:n,props:i,timestamp:new Date})}function BV(e,t){console.log("Processing rich text message:",t.content)}function FV(e){return{type:"quick-actions",actions:e.actions||[],layout:e.layout||"horizontal"}}function UV(e){return{type:"form",fields:e.fields||[],submitAction:e.submitAction,validation:e.validation}}function jV(e){return{type:"card",title:e.title,content:e.content,actions:e.actions,variant:e.variant||"default"}}function VV(e){return{type:"chart",chartType:e.chartType||"line",data:e.data,options:e.options}}function Oa({track:e,participantName:t,showControls:n=!0,showName:i=!0,showMuteIndicator:r=!0,isPinned:s=!1,className:o="",onClick:a,onPin:c,onUnpin:l}){const u=_.useRef(null),[d,h]=_.useState(!1);_.useEffect(()=>{if(!u.current||!e.isEnabled)return;const v=u.current;return v.srcObject=null,()=>{v.srcObject&&(v.srcObject=null)}},[e]);const f=()=>{a==null||a(e)},g=v=>{v.stopPropagation(),s?l==null||l(e):c==null||c(e)},p=["voxket-video-tile",e.isLocal?"voxket-video-tile--local":"voxket-video-tile--remote",e.isScreenShare?"voxket-video-tile--screen-share":"voxket-video-tile--camera",s?"voxket-video-tile--pinned":"",e.isEnabled?"":"voxket-video-tile--disabled",d?"voxket-video-tile--hovered":"",o].filter(Boolean).join(" ");return m.jsxs("div",{className:p,onClick:f,onMouseEnter:()=>h(!0),onMouseLeave:()=>h(!1),style:{aspectRatio:e.dimensions?`${e.dimensions.width} / ${e.dimensions.height}`:"16 / 9"},children:[m.jsx("video",{ref:u,className:"voxket-video-element",autoPlay:!0,playsInline:!0,muted:e.isLocal}),!e.isEnabled&&m.jsxs("div",{className:"voxket-video-placeholder",children:[m.jsx("div",{className:"voxket-video-placeholder-icon",children:e.isScreenShare?"🖥️":"📹"}),m.jsx("p",{className:"voxket-video-placeholder-text",children:e.isScreenShare?"Screen sharing paused":"Camera off"})]}),m.jsxs("div",{className:"voxket-video-overlay",children:[i&&t&&m.jsxs("div",{className:"voxket-video-name",children:[t,e.isLocal&&" (You)"]}),r&&!e.isEnabled&&m.jsx("div",{className:"voxket-video-mute-indicator",children:"🔇"}),n&&(d||s)&&m.jsxs("div",{className:"voxket-video-controls",children:[m.jsx("button",{className:`voxket-video-control-btn ${s?"voxket-video-control-btn--active":""}`,onClick:g,title:s?"Unpin video":"Pin video",children:"📌"}),e.isScreenShare&&m.jsx("div",{className:"voxket-video-indicator",children:"🖥️"}),e.source&&m.jsx("div",{className:"voxket-video-source",children:e.source})]})]}),!e.isEnabled&&m.jsx("div",{className:"voxket-video-loading",children:m.jsx("div",{className:"voxket-spinner"})})]})}function zV({tracks:e,layout:t,className:n="",onLayoutChange:i,onTrackClick:r,maxVisibleTracks:s=9,showPagination:o=!0}){const[a,c]=_.useState(0),[l,u]=_.useState(null),d=_.useMemo(()=>{let w=[...e];t.type==="speaker"&&l&&(w=[l,...e.filter(x=>x.id!==l.id)]);const S=a*s,k=S+s;return w.slice(S,k)},[e,t,l,a,s]),h=Math.ceil(e.length/s),f=_.useMemo(()=>{const w=d.length;switch(t.type){case"grid":const S=Math.ceil(Math.sqrt(w)),k=Math.ceil(w/S);return{display:"grid",gridTemplateColumns:`repeat(${S}, 1fr)`,gridTemplateRows:`repeat(${k}, 1fr)`,gap:"8px"};case"speaker":return{display:"flex",flexDirection:"column",gap:"8px"};case"sidebar":return{display:"flex",gap:"8px"};case"gallery":return{display:"flex",flexWrap:"wrap",gap:"8px",justifyContent:"center"};default:return{}}},[t.type,d.length]),g=w=>{u(w)},p=()=>{u(null)},v=w=>{i==null||i({...t,type:w})},b=["voxket-video-grid",`voxket-video-grid--${t.type}`,`voxket-video-grid--${d.length}-tracks`,n].filter(Boolean).join(" ");return e.length===0?m.jsx("div",{className:"voxket-video-grid-empty",children:m.jsxs("div",{className:"voxket-video-grid-empty-content",children:[m.jsx("div",{className:"voxket-video-grid-empty-icon",children:"📹"}),m.jsx("p",{children:"No video tracks available"})]})}):m.jsxs("div",{className:b,children:[m.jsxs("div",{className:"voxket-video-grid-controls",children:[m.jsx("div",{className:"voxket-video-layout-controls",children:["grid","speaker","sidebar","gallery"].map(w=>m.jsx("button",{className:`voxket-layout-btn ${t.type===w?"voxket-layout-btn--active":""}`,onClick:()=>v(w),title:`Switch to ${w} layout`,children:GV(w)},w))}),m.jsxs("div",{className:"voxket-video-count",children:[e.length," participant",e.length!==1?"s":""]})]}),m.jsx("div",{className:"voxket-video-grid-content",style:f,children:t.type==="speaker"&&l?m.jsxs(m.Fragment,{children:[m.jsx("div",{className:"voxket-video-speaker-main",children:m.jsx(Oa,{track:l,participantName:`Participant ${l.participantId}`,isPinned:!0,onClick:r,onUnpin:p})}),m.jsx("div",{className:"voxket-video-speaker-sidebar",children:d.filter(w=>w.id!==l.id).map(w=>m.jsx(Oa,{track:w,participantName:`Participant ${w.participantId}`,showControls:!1,onClick:r,onPin:g},w.id))})]}):d.map(w=>m.jsx(Oa,{track:w,participantName:`Participant ${w.participantId}`,isPinned:(l==null?void 0:l.id)===w.id,onClick:r,onPin:g,onUnpin:p},w.id))}),o&&h>1&&m.jsxs("div",{className:"voxket-video-pagination",children:[m.jsx("button",{className:"voxket-pagination-btn",onClick:()=>c(Math.max(0,a-1)),disabled:a===0,children:"←"}),m.jsxs("span",{className:"voxket-pagination-info",children:["Page ",a+1," of ",h]}),m.jsx("button",{className:"voxket-pagination-btn",onClick:()=>c(Math.min(h-1,a+1)),disabled:a===h-1,children:"→"})]})]})}function GV(e){switch(e){case"grid":return"⊞";case"speaker":return"🎤";case"sidebar":return"⫸";case"gallery":return"⊡";case"picture-in-picture":return"⧉";default:return"⊞"}}function HV({localTrack:e,onToggleCamera:t,onToggleScreenShare:n,onLayoutChange:i,showLayoutControls:r=!0,showCameraControls:s=!0,showScreenShareControls:o=!0,className:a=""}){const c=["voxket-video-controls",a].filter(Boolean).join(" "),l=u=>{i==null||i({type:u,showLocalVideo:!0,aspectRatio:"16:9"})};return m.jsxs("div",{className:c,children:[s&&m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Camera"}),m.jsxs("button",{className:`voxket-control-btn ${e!=null&&e.isEnabled?"voxket-control-btn--active":""}`,onClick:t,title:e!=null&&e.isEnabled?"Turn off camera":"Turn on camera",children:[m.jsx("span",{className:"voxket-control-icon",children:e!=null&&e.isEnabled?"📹":"📷"}),m.jsx("span",{className:"voxket-control-label",children:e!=null&&e.isEnabled?"Camera On":"Camera Off"})]}),(e==null?void 0:e.dimensions)&&m.jsxs("div",{className:"voxket-video-info",children:[e.dimensions.width," × ",e.dimensions.height]})]}),o&&m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Screen Share"}),m.jsxs("button",{className:`voxket-control-btn ${e!=null&&e.isScreenShare?"voxket-control-btn--active":""}`,onClick:n,title:e!=null&&e.isScreenShare?"Stop screen sharing":"Start screen sharing",children:[m.jsx("span",{className:"voxket-control-icon",children:e!=null&&e.isScreenShare?"🛑":"🖥️"}),m.jsx("span",{className:"voxket-control-label",children:e!=null&&e.isScreenShare?"Stop Sharing":"Share Screen"})]})]}),r&&m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Layout"}),m.jsx("div",{className:"voxket-layout-buttons",children:[{type:"grid",icon:"⊞",label:"Grid"},{type:"speaker",icon:"🎤",label:"Speaker"},{type:"sidebar",icon:"⫸",label:"Sidebar"},{type:"gallery",icon:"⊡",label:"Gallery"}].map(({type:u,icon:d,label:h})=>m.jsxs("button",{className:"voxket-layout-control-btn",onClick:()=>l(u),title:`Switch to ${h} layout`,children:[m.jsx("span",{className:"voxket-control-icon",children:d}),m.jsx("span",{className:"voxket-control-label",children:h})]},u))})]}),m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Video Settings"}),m.jsxs("div",{className:"voxket-video-settings",children:[m.jsxs("div",{className:"voxket-setting-group",children:[m.jsx("label",{className:"voxket-setting-label",children:"Quality"}),m.jsxs("select",{className:"voxket-setting-select",children:[m.jsx("option",{value:"high",children:"High (720p)"}),m.jsx("option",{value:"medium",children:"Medium (480p)"}),m.jsx("option",{value:"low",children:"Low (240p)"})]})]}),m.jsxs("div",{className:"voxket-setting-group",children:[m.jsx("label",{className:"voxket-setting-label",children:"Frame Rate"}),m.jsxs("select",{className:"voxket-setting-select",children:[m.jsx("option",{value:"30",children:"30 fps"}),m.jsx("option",{value:"15",children:"15 fps"}),m.jsx("option",{value:"10",children:"10 fps"})]})]}),m.jsxs("div",{className:"voxket-setting-group",children:[m.jsx("label",{className:"voxket-setting-label",children:"Bandwidth"}),m.jsxs("select",{className:"voxket-setting-select",children:[m.jsx("option",{value:"unlimited",children:"Unlimited"}),m.jsx("option",{value:"1000",children:"1 Mbps"}),m.jsx("option",{value:"500",children:"500 Kbps"}),m.jsx("option",{value:"250",children:"250 Kbps"})]})]})]})]}),m.jsxs("div",{className:"voxket-video-controls-section",children:[m.jsx("h4",{className:"voxket-video-controls-title",children:"Statistics"}),m.jsxs("div",{className:"voxket-video-stats",children:[m.jsxs("div",{className:"voxket-stat-item",children:[m.jsx("span",{className:"voxket-stat-label",children:"Resolution:"}),m.jsx("span",{className:"voxket-stat-value",children:e!=null&&e.dimensions?`${e.dimensions.width}×${e.dimensions.height}`:"N/A"})]}),m.jsxs("div",{className:"voxket-stat-item",children:[m.jsx("span",{className:"voxket-stat-label",children:"Source:"}),m.jsx("span",{className:"voxket-stat-value",children:(e==null?void 0:e.source)||"None"})]}),m.jsxs("div",{className:"voxket-stat-item",children:[m.jsx("span",{className:"voxket-stat-label",children:"Status:"}),m.jsx("span",{className:`voxket-stat-value ${e!=null&&e.isEnabled?"voxket-stat-value--active":"voxket-stat-value--inactive"}`,children:e!=null&&e.isEnabled?"Active":"Inactive"})]})]})]})]})}const Dw=({handler:e,loadData:t,data:n,client:i,addLocalMessage:r})=>{const[s,o]=D.useState(null),[a,c]=D.useState(!0),[l,u]=D.useState(!1),[d]=D.useState(Date.now()),[h,f]=D.useState("pending");D.useEffect(()=>{(async()=>{try{if(c(!0),n&&typeof n=="object"){const w={title:n.title||"Untitled Assignment",description:n.description||"No description provided",estimated_time_of_completion:n.estimated_time_of_completion||"Unknown"};o(w),console.log("📋 AssignmentView: Assignment loaded from RPC data:",w)}}catch(w){console.error("📋 AssignmentView: Error loading assignment:",w),o({title:"Assignment Loading Error",description:"There was an error loading the assignment details. Please try again.",estimated_time_of_completion:"Unknown"})}finally{c(!1)}})()},[n,t]);const g=({message:b,assignment:w})=>{const S=b.toLowerCase().includes("declined"),k=S?"bg-red-50 border-red-200":"bg-green-50 border-green-200",x=S?"text-red-700":"text-green-700",C=S?"❌":"🎉";return m.jsxs("div",{className:`max-w-sm mx-auto ${k} border rounded-lg shadow p-3 flex flex-col items-center`,children:[m.jsx("div",{className:"text-2xl mb-2",children:C}),m.jsx("div",{className:`${x} font-semibold text-sm mb-1`,children:b}),m.jsx("div",{className:"text-xs text-gray-600 text-center mb-1",children:w.title}),m.jsx("div",{className:"text-xs text-gray-500",children:"Thank you for your response!"})]})},p=async()=>{if(!(!s||!e)){u(!0);try{const b={message:"accepted"};console.log("📋 AssignmentView: Assignment accepted:",b),e.didSuccess(b),f("accepted")}catch(b){console.error("📋 AssignmentView: Error accepting assignment:",b),e.didFail({error:"Failed to accept assignment"}),f("error")}finally{u(!1)}}},v=async()=>{if(!(!s||!e)){u(!0);try{const b={message:"declined"};console.log("📋 AssignmentView: Assignment declined:",b),e.didSuccess(b),f("declined")}catch(b){console.error("📋 AssignmentView: Error declining assignment:",b),e.didFail({error:"Failed to decline assignment"}),f("error")}finally{u(!1)}}};return a?m.jsx("div",{className:"max-w-sm mx-auto bg-white rounded-lg shadow-lg p-3",children:m.jsxs("div",{className:"flex items-center justify-center py-4",children:[m.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-blue-600"}),m.jsx("span",{className:"ml-2 text-xs text-gray-600",children:"Loading assignment..."})]})}):s?h==="accepted"||h==="declined"||h==="error"?m.jsx(g,{message:h==="accepted"?"Assignment accepted!":h==="declined"?"Assignment declined":"Assignment error occurred",assignment:s}):m.jsxs("div",{className:"max-w-sm mx-auto bg-white rounded-lg shadow-lg overflow-hidden",children:[m.jsx("div",{className:"bg-gradient-to-r from-blue-600 to-purple-600 text-white p-3",children:m.jsx("div",{className:"flex items-center justify-between",children:m.jsx("h3",{className:"text-xs font-semibold text-white truncate",children:s.title})})}),m.jsxs("div",{className:"p-3 text-black",children:[m.jsx("div",{className:"bg-gray-50 rounded p-2 mb-3",children:m.jsx("p",{className:"text-xs text-black leading-snug",children:s.description})}),m.jsx("div",{className:"mb-3 text-black",children:m.jsxs("div",{className:"flex items-center text-xs text-gray-600",children:[m.jsx("span",{className:"text-xs mr-1",children:"📅"}),m.jsxs("span",{children:["Est: ",s.estimated_time_of_completion]})]})}),m.jsxs("div",{className:"flex gap-2",children:[m.jsx("button",{onClick:p,disabled:l,className:"flex-1 bg-green-600 text-white py-2 px-3 rounded text-xs font-medium hover:bg-green-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:l?m.jsxs("span",{className:"flex items-center justify-center",children:[m.jsx("div",{className:"animate-spin rounded-full h-2 w-2 border-b-2 border-white mr-1"}),m.jsx("span",{className:"text-xs",children:"Processing..."})]}):"Accept"}),m.jsx("button",{onClick:v,disabled:l,className:"flex-1 bg-red-600 text-white py-2 px-3 rounded text-xs font-medium hover:bg-red-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:"Decline"})]})]})]}):m.jsx("div",{className:"max-w-sm mx-auto bg-white rounded-lg shadow-lg p-3",children:m.jsxs("div",{className:"text-center py-4",children:[m.jsx("div",{className:"text-red-600 text-sm font-semibold mb-2",children:"⚠️ Assignment Error"}),m.jsx("p",{className:"text-xs text-gray-600 mb-3",children:"Failed to load assignment details."})]})})};function KV(){const[e,t]=D.useState(null),[n,i]=D.useState([]);D.useEffect(()=>{const a=new Mo({appId:"your-app-id",appSecret:"your-app-secret",baseUrl:"https://your-voxket-api.com",agentId:"your-agent-id",participantName:"User",modalities:["chat"]});return t(a),a.on("rpc.method.called",c=>{console.log("RPC Method Called:",c)}),a.on("rpc.interaction.completed",c=>{console.log("RPC Interaction Completed:",c)}),()=>{a.disconnect()}},[]);const r=async()=>{if(e)try{await e.registerFrontendRPC("give_assignment",Dw,"embedded");const a=e.getRegisteredRpcMethods();i(a),console.log("✅ Assignment RPC registered successfully")}catch(a){console.error("❌ Failed to register assignment RPC:",a)}},s=async()=>{if(!e)return;const a=({handler:c,timeout:l})=>{const[u,d]=D.useState(""),h=[{id:"pro",name:"Pro Plan",price:"$29/month"},{id:"enterprise",name:"Enterprise Plan",price:"$99/month"},{id:"basic",name:"Basic Plan",price:"$9/month"}],f=p=>{d(p)},g=()=>{const p=h.find(v=>v.id===u);c==null||c.didSuccess({selectedProduct:u,productName:p==null?void 0:p.name,price:p==null?void 0:p.price,timestamp:new Date().toISOString()})};return m.jsxs("div",{className:"p-6 bg-white rounded-lg",children:[m.jsx("h3",{className:"text-xl font-bold mb-4",children:"Choose Your Plan"}),m.jsx("p",{className:"text-gray-600 mb-4",children:"Select the plan that best fits your needs:"}),m.jsx("div",{className:"space-y-3 mb-6",children:h.map(p=>m.jsx("div",{onClick:()=>f(p.id),className:`p-4 border rounded-lg cursor-pointer transition-all ${u===p.id?"border-blue-500 bg-blue-50":"border-gray-200 hover:border-gray-300"}`,children:m.jsxs("div",{className:"flex justify-between items-center",children:[m.jsxs("div",{children:[m.jsx("h4",{className:"font-medium",children:p.name}),m.jsx("p",{className:"text-gray-600 text-sm",children:p.price})]}),m.jsx("div",{className:`w-4 h-4 rounded-full ${u===p.id?"bg-blue-500":"border-2 border-gray-300"}`})]})},p.id))}),m.jsxs("div",{className:"flex justify-end space-x-3",children:[m.jsx("button",{onClick:()=>c==null?void 0:c.dismissView(),className:"px-4 py-2 border border-gray-300 text-gray-700 rounded hover:bg-gray-50",children:"Cancel"}),m.jsx("button",{onClick:g,disabled:!u,className:"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 disabled:opacity-50",children:"Select Plan"})]}),l&&m.jsxs("p",{className:"text-xs text-gray-500 mt-2",children:["Time remaining: ",l," seconds"]})]})};try{await e.registerFrontendRPC("recommend_product",a,"modal");const c=e.getRegisteredRpcMethods();i(c),console.log("✅ Product Recommendation RPC registered successfully")}catch(c){console.error("❌ Failed to register product recommendation RPC:",c)}},o=async()=>{if(!e)return;const a=({handler:c})=>{const[l,u]=D.useState(0),[d,h]=D.useState(""),f=()=>{c==null||c.didSuccess({rating:l,comment:d,timestamp:new Date().toISOString()})};return m.jsxs("div",{className:"p-4 bg-white rounded-lg",children:[m.jsx("h3",{className:"text-lg font-semibold mb-3",children:"How was your experience?"}),m.jsxs("div",{className:"mb-4",children:[m.jsx("p",{className:"text-sm text-gray-600 mb-2",children:"Rate your experience:"}),m.jsx("div",{className:"flex space-x-1",children:[1,2,3,4,5].map(g=>m.jsx("button",{onClick:()=>u(g),className:`text-2xl ${g<=l?"text-yellow-400":"text-gray-300"}`,children:"⭐"},g))})]}),m.jsxs("div",{className:"mb-4",children:[m.jsx("p",{className:"text-sm text-gray-600 mb-2",children:"Additional comments:"}),m.jsx("textarea",{value:d,onChange:g=>h(g.target.value),className:"w-full p-2 border border-gray-300 rounded text-sm",rows:3,placeholder:"Tell us more about your experience..."})]}),m.jsxs("div",{className:"flex justify-end space-x-2",children:[m.jsx("button",{onClick:()=>c==null?void 0:c.dismissView(),className:"px-3 py-1 text-sm border border-gray-300 text-gray-700 rounded hover:bg-gray-50",children:"Skip"}),m.jsx("button",{onClick:f,disabled:l===0,className:"px-3 py-1 text-sm bg-blue-500 text-white rounded hover:bg-blue-600 disabled:opacity-50",children:"Submit"})]})]})};try{await e.registerFrontendRPC("collect_feedback",a,"embedded");const c=e.getRegisteredRpcMethods();i(c),console.log("✅ Feedback RPC registered successfully")}catch(c){console.error("❌ Failed to register feedback RPC:",c)}};return m.jsxs("div",{className:"p-6",children:[m.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Frontend RPC Examples"}),m.jsxs("div",{className:"space-y-4 mb-6",children:[m.jsxs("div",{children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Register RPC Methods"}),m.jsxs("div",{className:"space-x-2",children:[m.jsx("button",{onClick:r,className:"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600",children:"Register Assignment RPC"}),m.jsx("button",{onClick:s,className:"px-4 py-2 bg-green-500 text-white rounded hover:bg-green-600",children:"Register Product Recommendation RPC"}),m.jsx("button",{onClick:o,className:"px-4 py-2 bg-purple-500 text-white rounded hover:bg-purple-600",children:"Register Feedback RPC"})]})]}),m.jsxs("div",{children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Registered Methods"}),n.length>0?m.jsx("ul",{className:"list-disc list-inside space-y-1",children:n.map(a=>m.jsx("li",{className:"text-gray-700",children:m.jsx("code",{className:"bg-gray-100 px-2 py-1 rounded",children:a})},a))}):m.jsx("p",{className:"text-gray-500",children:"No methods registered yet"})]})]}),m.jsxs("div",{className:"bg-gray-50 p-4 rounded-lg",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"How it works"}),m.jsxs("ol",{className:"list-decimal list-inside space-y-2 text-sm text-gray-700",children:[m.jsxs("li",{children:["Register RPC methods with React components using ",m.jsx("code",{children:"client.registerFrontendRPC()"})]}),m.jsx("li",{children:"When the agent calls an RPC method, the corresponding component will be displayed"}),m.jsx("li",{children:"Users interact with the component, and the response is sent back to the agent"}),m.jsx("li",{children:"Components can be displayed in different modes: embedded, modal, or fullscreen"}),m.jsx("li",{children:"Each component has a timeout and can handle success/failure scenarios"})]})]}),m.jsxs("div",{className:"mt-6 bg-blue-50 p-4 rounded-lg",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2 text-blue-800",children:"Agent Side"}),m.jsx("p",{className:"text-sm text-blue-700 mb-2",children:"On the agent side, you can call these RPC methods like this:"}),m.jsx("pre",{className:"bg-white p-3 rounded text-xs text-gray-800 overflow-x-auto",children:`// Agent calls RPC method
183
183
  const response = await participant.performRpc({
184
184
  method: 'give_assignment',
185
185
  data: JSON.stringify({