@nice2dev/ui-communication 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react");class lt{constructor(){this.listeners=new Map}on(t,i){this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(i)}off(t,i){var s;(s=this.listeners.get(t))==null||s.delete(i)}emit(t,i){var s;(s=this.listeners.get(t))==null||s.forEach(r=>r(i))}removeAll(){this.listeners.clear()}}class at extends lt{constructor(t={}){super(),this.type="webrtc",this.signalingWs=null,this.localStream=null,this.screenStream=null,this.peers=new Map,this.userId="",this.connected=!1,this.config={iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],...t}}async connect(t,i){return this.userId=i,new Promise((s,r)=>{const o=new WebSocket(t);o.onopen=()=>{this.signalingWs=o,this.connected=!0,o.send(JSON.stringify({type:"register",userId:i})),this.emit("transport:connected",{}),s()},o.onerror=c=>{r(new Error(`Signaling WebSocket error: ${String(c)}`))},o.onclose=c=>{this.connected=!1,this.emit("transport:disconnected",{reason:c.reason})},o.onmessage=c=>{try{const f=JSON.parse(String(c.data));this.handleSignalingMessage(f).catch(console.error)}catch{}}})}disconnect(){var t;this.releaseLocalStream();for(const[,i]of this.peers)i.close();this.peers.clear(),(t=this.signalingWs)==null||t.close(),this.signalingWs=null,this.connected=!1,this.removeAll()}isConnected(){return this.connected}async getLocalStream(t){return this.localStream?this.localStream:(this.localStream=await navigator.mediaDevices.getUserMedia(t),this.localStream)}releaseLocalStream(){this.localStream&&(this.localStream.getTracks().forEach(t=>t.stop()),this.localStream=null),this.screenStream&&(this.screenStream.getTracks().forEach(t=>t.stop()),this.screenStream=null)}async startCall(t,i){const s=crypto.randomUUID();return this.sendSignal({type:"call:request",callId:s,callType:i,from:this.userId,to:t}),{id:s,type:i,participants:[],status:"ringing",isRecording:!1,isTranscribing:!1,layout:"grid"}}async acceptCall(t){this.sendSignal({type:"call:accept",callId:t,from:this.userId})}declineCall(t){this.sendSignal({type:"call:decline",callId:t,from:this.userId})}endCall(t){this.sendSignal({type:"call:end",callId:t,from:this.userId});for(const[i,s]of this.peers)s.close(),this.peers.delete(i)}muteAudio(t){var i;(i=this.localStream)==null||i.getAudioTracks().forEach(s=>{s.enabled=!t}),this.sendSignal({type:"peer:mute",from:this.userId,audio:t,video:!1})}muteVideo(t){var i;(i=this.localStream)==null||i.getVideoTracks().forEach(s=>{s.enabled=!t}),this.sendSignal({type:"peer:mute",from:this.userId,audio:!1,video:t})}async setAudioDevice(t){var s;const i=(s=this.localStream)==null?void 0:s.getAudioTracks()[0];i&&await i.applyConstraints({deviceId:{exact:t}})}async setVideoDevice(t){var s;const i=(s=this.localStream)==null?void 0:s.getVideoTracks()[0];i&&await i.applyConstraints({deviceId:{exact:t}})}async startScreenShare(){this.screenStream=await navigator.mediaDevices.getDisplayMedia({video:{frameRate:15},audio:!0});const[t]=this.screenStream.getVideoTracks();t.addEventListener("ended",()=>this.stopScreenShare());for(const[,i]of this.peers)this.screenStream.getTracks().forEach(s=>i.addTrack(s,this.screenStream));return this.sendSignal({type:"screen:started",from:this.userId}),this.screenStream}stopScreenShare(){this.screenStream&&(this.screenStream.getTracks().forEach(t=>t.stop()),this.screenStream=null,this.sendSignal({type:"screen:stopped",from:this.userId}),this.emit("screen:stopped",{participantId:this.userId}))}sendSignal(t){var i;((i=this.signalingWs)==null?void 0:i.readyState)===WebSocket.OPEN&&this.signalingWs.send(JSON.stringify(t))}async handleSignalingMessage(t){var i;switch(t.type){case"call:request":this.emit("call:incoming",{callId:t.callId,callType:t.callType??"audio",callerId:t.from});break;case"call:accept":await this.createPeerConnection(t.from),this.emit("call:accepted",{callId:t.callId,participantId:t.from});break;case"call:decline":this.emit("call:declined",{callId:t.callId,participantId:t.from});break;case"call:end":(i=this.peers.get(t.from))==null||i.close(),this.peers.delete(t.from),this.emit("call:ended",{callId:t.callId,reason:"remote-ended"});break;case"offer":{const s=await this.getOrCreatePeer(t.from);await s.setRemoteDescription(new RTCSessionDescription({type:"offer",sdp:t.sdp}));const r=await s.createAnswer();await s.setLocalDescription(r),this.sendSignal({type:"answer",to:t.from,from:this.userId,sdp:r.sdp});break}case"answer":{const s=this.peers.get(t.from);s&&await s.setRemoteDescription(new RTCSessionDescription({type:"answer",sdp:t.sdp}));break}case"ice-candidate":{const s=this.peers.get(t.from);s&&t.candidate&&await s.addIceCandidate(new RTCIceCandidate(t.candidate));break}case"peer:mute":this.emit("peer:muted",{participantId:t.from,audio:t.audio??!1,video:t.video??!1});break;case"screen:started":break;case"screen:stopped":this.emit("screen:stopped",{participantId:t.from});break}}async getOrCreatePeer(t){return this.peers.has(t)?this.peers.get(t):this.createPeerConnection(t)}async createPeerConnection(t){var r,o;const i=new RTCPeerConnection({iceServers:(r=this.config.iceServers)==null?void 0:r.map(c=>({urls:c.urls,username:c.username,credential:c.credential})),iceTransportPolicy:this.config.iceTransportPolicy});if(this.peers.set(t,i),(o=this.localStream)==null||o.getTracks().forEach(c=>i.addTrack(c,this.localStream)),i.onicecandidate=c=>{c.candidate&&this.sendSignal({type:"ice-candidate",to:t,from:this.userId,candidate:c.candidate})},i.ontrack=c=>{const f=c.streams[0];f&&this.emit("stream:added",{participantId:t,stream:f})},i.onconnectionstatechange=()=>{(i.connectionState==="failed"||i.connectionState==="disconnected")&&this.emit("stream:removed",{participantId:t})},this.config.maxBitrate){const c=i.getSenders();for(const f of c){if(!f.track)continue;const u=f.getParameters();u.encodings||(u.encodings=[{}]),f.track.kind==="audio"&&this.config.maxBitrate.audio?u.encodings[0].maxBitrate=this.config.maxBitrate.audio:f.track.kind==="video"&&this.config.maxBitrate.video&&(u.encodings[0].maxBitrate=this.config.maxBitrate.video),await f.setParameters(u)}}const s=await i.createOffer();return await i.setLocalDescription(s),this.sendSignal({type:"offer",to:t,from:this.userId,sdp:s.sdp}),i}}class ct extends lt{constructor(){super(...arguments),this.type="mock",this.connected=!1,this.localStream=null}async connect(t,i){this.connected=!0,this.emit("transport:connected",{})}disconnect(){this.releaseLocalStream(),this.connected=!1,this.removeAll()}isConnected(){return this.connected}async getLocalStream(t){const i=new AudioContext,s=i.createMediaStreamDestination();i.createOscillator().connect(s);const o=s.stream,c=document.createElement("canvas");c.width=640,c.height=480;const f=c.captureStream(15),u=[...o.getTracks(),...f.getTracks()];return this.localStream=new MediaStream(u),this.localStream}releaseLocalStream(){var t;(t=this.localStream)==null||t.getTracks().forEach(i=>i.stop()),this.localStream=null}async startCall(t,i){const s={id:crypto.randomUUID(),type:i,participants:[],status:"connecting",startedAt:new Date,isRecording:!1,isTranscribing:!1,layout:t.length>2?"grid":"spotlight"};return setTimeout(()=>this.emit("call:accepted",{callId:s.id,participantId:t[0]??"mock"}),800),s}async acceptCall(t){this.emit("call:accepted",{callId:t,participantId:"mock-remote"})}declineCall(t){this.emit("call:declined",{callId:t,participantId:"mock-remote"})}endCall(t){this.emit("call:ended",{callId:t,reason:"local-ended"})}muteAudio(t){}muteVideo(t){}async setAudioDevice(t){}async setVideoDevice(t){}async startScreenShare(){const t=document.createElement("canvas");return t.width=1920,t.height=1080,t.captureStream(15)}stopScreenShare(){this.emit("screen:stopped",{participantId:"local"})}}function dt(n,t){switch(n){case"mock":return new ct;case"webrtc":case"sfu":default:return new at(t)}}function ft(n){const{currentUser:t,transport:i="webrtc",rtcConfig:s,signalingUrl:r,autoConnect:o=!1,onCallEnded:c,onIncomingCall:f,onStreamAdded:u,onStreamRemoved:x,onError:m}=n,j=a.useRef(null),[C,v]=a.useState({isConnected:!1,activeCall:null,incomingCall:null,localStream:null,isMicMuted:!1,isCameraMuted:!1,isScreenSharing:!1,screenStream:null,isHandRaised:!1,connectionError:null}),R=a.useCallback(()=>{if(j.current)return j.current;const S=dt(i,s);return S.on("transport:connected",()=>v(h=>({...h,isConnected:!0,connectionError:null}))),S.on("transport:disconnected",()=>v(h=>({...h,isConnected:!1}))),S.on("transport:error",h=>{const{error:k}=h;v(F=>({...F,connectionError:k.message})),m==null||m(k)}),S.on("call:incoming",h=>{const{callId:k,callType:F,callerId:J}=h,I={callId:k,callType:F,caller:{id:J,name:J,presence:{status:"online"}},startedAt:new Date};v(W=>({...W,incomingCall:I})),f==null||f(I)}),S.on("call:ended",h=>{const{callId:k}=h;v(F=>{var J;return{...F,activeCall:((J=F.activeCall)==null?void 0:J.id)===k?null:F.activeCall,localStream:null}}),c==null||c(k)}),S.on("stream:added",h=>{const{participantId:k,stream:F}=h;u==null||u(k,F)}),S.on("stream:removed",h=>{const{participantId:k}=h;x==null||x(k)}),j.current=S,S},[i,s,c,f,u,x,m]);a.useEffect(()=>!o||!r?void 0:(R().connect(r,t.id).catch(h=>{const k=h instanceof Error?h:new Error(String(h));v(F=>({...F,connectionError:k.message})),m==null||m(k)}),()=>{var h;(h=j.current)==null||h.disconnect(),j.current=null}),[o,r,t.id,R,m]);const O=a.useCallback(async S=>{await R().connect(S,t.id)},[R,t.id]),l=a.useCallback(()=>{var S;(S=j.current)==null||S.disconnect(),j.current=null,v(h=>({...h,isConnected:!1}))},[]),A=a.useCallback(async(S,h="video")=>{const k=j.current??R(),F=h==="video"?{audio:!0,video:{width:1280,height:720}}:{audio:!0,video:!1},J=await k.getLocalStream(F),I=await k.startCall(S,h);return v(W=>({...W,activeCall:I,localStream:J})),I},[R]),N=a.useCallback(async()=>{const S=j.current,{incomingCall:h}=C;if(!S||!h)return;const k=h.callType==="video"?{audio:!0,video:{width:1280,height:720}}:{audio:!0,video:!1},F=await S.getLocalStream(k);await S.acceptCall(h.callId);const J={id:h.callId,type:h.callType,participants:[],status:"active",startedAt:new Date,isRecording:!1,isTranscribing:!1,layout:"spotlight"};v(I=>({...I,activeCall:J,incomingCall:null,localStream:F}))},[C]),Y=a.useCallback(()=>{var h;const{incomingCall:S}=C;S&&((h=j.current)==null||h.declineCall(S.callId),v(k=>({...k,incomingCall:null})))},[C]),H=a.useCallback(()=>{var h,k;const{activeCall:S}=C;S&&((h=j.current)==null||h.endCall(S.id),(k=j.current)==null||k.releaseLocalStream(),v(F=>({...F,activeCall:null,localStream:null,isScreenSharing:!1,screenStream:null})))},[C]),D=a.useCallback(()=>{var h;const S=!C.isMicMuted;(h=j.current)==null||h.muteAudio(S),v(k=>({...k,isMicMuted:S}))},[C.isMicMuted]),$=a.useCallback(()=>{var h;const S=!C.isCameraMuted;(h=j.current)==null||h.muteVideo(S),v(k=>({...k,isCameraMuted:S}))},[C.isCameraMuted]),U=a.useCallback(async()=>{const S=j.current;if(!S)return;const h=await S.startScreenShare();v(k=>({...k,isScreenSharing:!0,screenStream:h}))},[]),E=a.useCallback(()=>{var S;(S=j.current)==null||S.stopScreenShare(),v(h=>({...h,isScreenSharing:!1,screenStream:null}))},[]),_=a.useCallback(()=>{v(S=>({...S,isHandRaised:!S.isHandRaised}))},[]);return{state:C,connect:O,disconnect:l,startCall:A,acceptCall:N,declineCall:Y,endCall:H,toggleMic:D,toggleCamera:$,startScreenShare:U,stopScreenShare:E,toggleHand:_,transport:j}}function kt(n,t,i,s="text"){return{id:`optimistic-${crypto.randomUUID()}`,conversationId:n,authorId:t,content:i,contentType:s,timestamp:new Date,status:"sending",reactions:[],attachments:[],mentions:[],isPinned:!1}}function Me(n,t,i){if(n.type!=="dm")return;const s=n.participantIds.find(r=>r!==t);return i.find(r=>r.id===s)}function _e(n){return n.reduce((t,i)=>t+i.unreadCount,0)}function Ct(n){return n.reduce((t,i)=>t+i.mentionCount,0)}function It(n,t){return n?"workspace":t?"messenger":"bubble"}const zt={online:"Online",away:"Away",busy:"Busy",dnd:"Do not disturb",offline:"Offline",invisible:"Invisible",unknown:"Unknown"},Rt={online:"#22c55e",away:"#f59e0b",busy:"#ef4444",dnd:"#ef4444",offline:"#9ca3af",invisible:"#9ca3af",unknown:"#d1d5db"},Tt={xs:6,sm:8,md:10,lg:14};function fe({status:n,size:t="sm",showLabel:i=!1,showTooltip:s=!1,className:r,style:o,id:c,"data-testid":f}){const u=Tt[t],x=Rt[n],m=zt[n],j=e.jsx("span",{className:`nice-presence-dot nice-presence-dot--${n} nice-presence-dot--${t}`,title:s?m:void 0,"aria-label":m,role:"img",style:{display:"inline-block",width:u,height:u,borderRadius:"50%",backgroundColor:x,flexShrink:0,border:n==="offline"||n==="invisible"?"1.5px solid #9ca3af":"none",boxSizing:"border-box"}});return i?e.jsxs("span",{id:c,"data-testid":f,className:`nice-presence-indicator nice-presence-indicator--with-label${r?` ${r}`:""}`,style:{display:"inline-flex",alignItems:"center",gap:6,...o},children:[j,e.jsx("span",{className:"nice-presence-label",style:{fontSize:u+4,color:x},children:m})]}):e.jsx("span",{id:c,"data-testid":f,className:`nice-presence-indicator${r?` ${r}`:""}`,style:o,children:j})}const At=["๐Ÿ‘","โค๏ธ","๐Ÿ˜‚","๐Ÿ˜ฎ","๐Ÿ˜ข","๐ŸŽ‰"];function We({message:n,author:t,isMine:i,showAvatar:s,enableReactions:r,onReact:o,onReply:c,onEdit:f,onDelete:u,onPin:x,onOpenThread:m}){var A,N,Y,H;const[j,C]=a.useState(!1),[v,R]=a.useState(!1),O=n.isDeleted,l=n.timestamp.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return e.jsxs("div",{className:`nice-chat-message${i?" nice-chat-message--mine":""}${n.isPinned?" nice-chat-message--pinned":""}`,onMouseEnter:()=>C(!0),onMouseLeave:()=>{C(!1),R(!1)},style:{display:"flex",flexDirection:i?"row-reverse":"row",alignItems:"flex-end",gap:8,padding:"2px 16px",position:"relative"},children:[s&&!i&&e.jsxs("div",{style:{position:"relative",flexShrink:0},children:[e.jsx("div",{className:"nice-chat-avatar",style:{width:32,height:32,borderRadius:"50%",background:t!=null&&t.avatarUrl?`url(${t.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:13,fontWeight:600,flexShrink:0},children:!(t!=null&&t.avatarUrl)&&(((N=(A=t==null?void 0:t.name)==null?void 0:A[0])==null?void 0:N.toUpperCase())??"?")}),e.jsx(fe,{status:((Y=t==null?void 0:t.presence)==null?void 0:Y.status)??"unknown",size:"xs",style:{position:"absolute",bottom:0,right:0}})]}),e.jsxs("div",{style:{maxWidth:"70%",display:"flex",flexDirection:"column",alignItems:i?"flex-end":"flex-start"},children:[!i&&t&&e.jsx("span",{style:{fontSize:11,color:"#6b7280",marginBottom:2,paddingLeft:2},children:t.displayName??t.name}),n.replyTo&&e.jsx("div",{className:"nice-chat-reply-preview",style:{borderLeft:"3px solid #6366f1",paddingLeft:6,fontSize:12,color:"#6b7280",marginBottom:4,maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n.replyTo.content}),e.jsx("div",{className:`nice-chat-bubble${i?" nice-chat-bubble--mine":""}`,style:{padding:"8px 12px",borderRadius:i?"18px 18px 4px 18px":"18px 18px 18px 4px",background:i?"#6366f1":"#f3f4f6",color:i?"#fff":"#111827",fontSize:14,lineHeight:1.5,wordBreak:"break-word"},children:O?e.jsx("span",{style:{fontStyle:"italic",opacity:.6},children:"This message was deleted"}):n.contentType==="image"&&((H=n.attachments)!=null&&H[0])?e.jsx("img",{src:n.attachments[0].url,alt:n.attachments[0].name,style:{maxWidth:280,maxHeight:280,borderRadius:8,display:"block"}}):e.jsx("span",{children:n.content})}),!O&&n.attachments&&n.attachments.length>0&&n.contentType!=="image"&&e.jsx("div",{className:"nice-chat-attachments",style:{marginTop:4},children:n.attachments.map(D=>e.jsxs("a",{href:D.url,target:"_blank",rel:"noreferrer",className:"nice-chat-attachment",style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:12,color:i?"rgba(255,255,255,0.85)":"#6366f1",textDecoration:"none",background:i?"rgba(255,255,255,0.15)":"#e0e7ff",borderRadius:6,padding:"3px 8px",marginTop:2},children:["๐Ÿ“Ž ",D.name]},D.id))}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginTop:2},children:[e.jsx("span",{style:{fontSize:11,color:"#9ca3af"},children:l}),n.editedAt&&e.jsx("span",{style:{fontSize:11,color:"#9ca3af"},children:"(edited)"}),i&&e.jsx("span",{style:{fontSize:11,color:n.status==="read"?"#6366f1":"#9ca3af"},children:n.status==="sending"?"โ—‹":n.status==="sent"?"โœ“":(n.status==="delivered","โœ“โœ“")})]}),n.reactions&&n.reactions.length>0&&e.jsx("div",{className:"nice-chat-reactions",style:{display:"flex",flexWrap:"wrap",gap:4,marginTop:4},children:n.reactions.map(D=>e.jsxs("button",{onClick:()=>o(n.id,D.emoji),style:{background:D.mine?"#e0e7ff":"#f3f4f6",border:D.mine?"1px solid #6366f1":"1px solid transparent",borderRadius:12,padding:"2px 7px",fontSize:12,cursor:"pointer",display:"flex",alignItems:"center",gap:3},children:[D.emoji," ",D.count]},D.emoji))}),(n.threadCount??0)>0&&e.jsxs("button",{className:"nice-chat-thread-btn",onClick:()=>m==null?void 0:m(n),style:{background:"none",border:"none",color:"#6366f1",fontSize:12,cursor:"pointer",padding:"2px 0",marginTop:2},children:["๐Ÿ’ฌ ",n.threadCount," repl",n.threadCount===1?"y":"ies"]})]}),j&&!O&&e.jsxs("div",{className:"nice-chat-actions",style:{position:"absolute",top:-16,[i?"left":"right"]:16,display:"flex",gap:2,background:"#fff",borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.12)",padding:"3px 6px",zIndex:10},children:[r&&e.jsxs("div",{style:{position:"relative"},children:[e.jsx("button",{title:"React",onClick:()=>R(D=>!D),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px"},children:"๐Ÿ˜Š"}),v&&e.jsx("div",{style:{position:"absolute",bottom:"100%",left:0,display:"flex",gap:4,background:"#fff",borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.15)",padding:"6px 8px",zIndex:20},children:At.map(D=>e.jsx("button",{onClick:()=>{o(n.id,D),R(!1)},style:{background:"none",border:"none",cursor:"pointer",fontSize:18},children:D},D))})]}),e.jsx("button",{title:"Reply",onClick:()=>c(n),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px"},children:"โ†ฉ"}),i&&f&&e.jsx("button",{title:"Edit",onClick:()=>f(n),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px"},children:"โœ๏ธ"}),x&&e.jsx("button",{title:n.isPinned?"Unpin":"Pin",onClick:()=>x(n),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px"},children:"๐Ÿ“Œ"}),i&&u&&e.jsx("button",{title:"Delete",onClick:()=>u(n),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px",color:"#ef4444"},children:"๐Ÿ—‘"})]})]})}function Je({placeholder:n="Type a messageโ€ฆ",maxLength:t,replyTo:i,onCancelReply:s,onSend:r,onAttach:o,disabled:c}){const[f,u]=a.useState(""),x=a.useRef(null);a.useEffect(()=>{i&&x.current&&x.current.focus()},[i]);const m=v=>{v.key==="Enter"&&!v.shiftKey&&(v.preventDefault(),j())},j=()=>{const v=f.trim();v&&(r(v),u(""),x.current&&(x.current.style.height="auto"))},C=v=>{u(v.target.value),v.target.style.height="auto",v.target.style.height=`${Math.min(v.target.scrollHeight,120)}px`};return e.jsxs("div",{className:"nice-chat-input-area",style:{padding:"8px 12px",borderTop:"1px solid #e5e7eb",background:"#fff"},children:[i&&e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",background:"#f3f4f6",borderLeft:"3px solid #6366f1",padding:"4px 8px",marginBottom:6,borderRadius:"0 4px 4px 0",fontSize:12,color:"#6b7280"},children:[e.jsxs("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["Replying: ",i.content]}),e.jsx("button",{onClick:s,style:{background:"none",border:"none",cursor:"pointer",fontSize:16,color:"#9ca3af",marginLeft:8},children:"ร—"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"flex-end",gap:8},children:[o&&e.jsx("button",{onClick:o,title:"Attach file",style:{background:"none",border:"none",cursor:"pointer",fontSize:18,color:"#9ca3af",padding:"4px",flexShrink:0},children:"๐Ÿ“Ž"}),e.jsx("textarea",{ref:x,value:f,onChange:C,onKeyDown:m,placeholder:n,maxLength:t,disabled:c,rows:1,style:{flex:1,resize:"none",border:"1px solid #e5e7eb",borderRadius:20,padding:"8px 14px",fontSize:14,outline:"none",fontFamily:"inherit",lineHeight:1.5,overflow:"hidden"}}),e.jsx("button",{onClick:j,disabled:!f.trim()||c,style:{background:f.trim()?"#6366f1":"#e5e7eb",border:"none",borderRadius:"50%",width:36,height:36,cursor:f.trim()?"pointer":"default",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,fontSize:16,transition:"background 0.15s"},children:"โžค"})]}),t&&f.length>t*.8&&e.jsxs("div",{style:{textAlign:"right",fontSize:11,color:f.length>=t?"#ef4444":"#9ca3af",marginTop:2},children:[f.length,"/",t]})]})}function Ie({conversation:n,messages:t,users:i,currentUser:s,isLoading:r=!1,hasMore:o=!1,showHeader:c=!0,showUserAvatars:f=!0,enableReactions:u=!0,enableThreads:x=!0,enableAttachments:m=!0,placeholder:j,maxMessageLength:C,onSendMessage:v,onEditMessage:R,onDeleteMessage:O,onReactToMessage:l,onPinMessage:A,onLoadMoreMessages:N,onStartCall:Y,className:H,style:D,id:$,"data-testid":U}){var M,d;const E=a.useRef(null),_=a.useRef(null),[S,h]=a.useState(null),[k,F]=a.useState(null),J=a.useMemo(()=>{const y=new Map;return i.forEach(q=>y.set(q.id,q)),y},[i]);a.useEffect(()=>{var y;(y=E.current)==null||y.scrollIntoView({behavior:"smooth"})},[t]);const I=a.useCallback(()=>{const y=_.current;!y||!o||r||y.scrollTop===0&&t.length>0&&(N==null||N(n.id,t[0].id))},[o,r,t,n.id,N]),W=a.useCallback(y=>{v==null||v(n.id,y,"text"),h(null)},[n.id,v]),B=n.type==="dm"?J.get(n.participantIds.find(y=>y!==s.id)??""):void 0;return e.jsxs("div",{id:$,"data-testid":U,className:`nice-chat-window${H?` ${H}`:""}`,style:{display:"flex",flexDirection:"column",height:"100%",background:"#fff",...D},children:[c&&e.jsxs("div",{className:"nice-chat-header",style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 16px",borderBottom:"1px solid #e5e7eb",flexShrink:0},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[e.jsx("div",{style:{width:36,height:36,borderRadius:"50%",background:(B??n).avatarUrl?`url(${(B??n).avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:15,flexShrink:0},children:!(B??n).avatarUrl&&((M=((B==null?void 0:B.name)??n.name??"?")[0])==null?void 0:M.toUpperCase())}),e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600,fontSize:15},children:(B==null?void 0:B.displayName)??(B==null?void 0:B.name)??n.name??"Chat"}),B&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginTop:1},children:[e.jsx(fe,{status:B.presence.status,size:"xs"}),e.jsx("span",{style:{fontSize:12,color:"#6b7280"},children:B.presence.statusMessage??B.presence.status})]}),n.type!=="dm"&&e.jsxs("span",{style:{fontSize:12,color:"#6b7280"},children:[n.participantIds.length," members"]})]})]}),n.type==="dm"&&Y&&B&&e.jsxs("div",{style:{display:"flex",gap:4},children:[e.jsx("button",{onClick:()=>Y([B.id],"audio"),title:"Audio call",style:{background:"none",border:"1px solid #e5e7eb",borderRadius:6,padding:"5px 8px",cursor:"pointer",fontSize:16},children:"๐Ÿ“ž"}),e.jsx("button",{onClick:()=>Y([B.id],"video"),title:"Video call",style:{background:"none",border:"1px solid #e5e7eb",borderRadius:6,padding:"5px 8px",cursor:"pointer",fontSize:16},children:"๐Ÿ“น"})]})]}),e.jsxs("div",{ref:_,className:"nice-chat-messages",onScroll:I,style:{flex:1,overflowY:"auto",padding:"8px 0",display:"flex",flexDirection:"column"},children:[o&&e.jsx("button",{onClick:()=>t.length>0&&(N==null?void 0:N(n.id,t[0].id)),disabled:r,style:{display:"block",margin:"8px auto",background:"none",border:"1px solid #e5e7eb",borderRadius:16,padding:"4px 16px",fontSize:12,color:"#6b7280",cursor:"pointer"},children:r?"Loadingโ€ฆ":"Load older messages"}),t.map((y,q)=>{const X=t[q-1],Q=f&&(!X||X.authorId!==y.authorId);return e.jsx(We,{message:y,author:J.get(y.authorId),isMine:y.authorId===s.id,showAvatar:Q,enableReactions:u,onReact:(K,re)=>l==null?void 0:l(K,re),onReply:K=>h(K),onEdit:R?K=>R(K.id,K.content):void 0,onDelete:O?K=>O(K.id):void 0,onPin:A?K=>A(K.id):void 0,onOpenThread:x?K=>F(K):void 0},y.id)}),e.jsx("div",{ref:E})]}),k&&e.jsxs("div",{className:"nice-chat-thread-panel",style:{position:"absolute",right:0,top:c?57:0,bottom:0,width:320,background:"#fff",borderLeft:"1px solid #e5e7eb",display:"flex",flexDirection:"column",zIndex:5},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px",borderBottom:"1px solid #e5e7eb"},children:[e.jsx("span",{style:{fontWeight:600,fontSize:14},children:"Thread"}),e.jsx("button",{onClick:()=>F(null),style:{background:"none",border:"none",cursor:"pointer",fontSize:18,color:"#9ca3af"},children:"ร—"})]}),e.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"8px 0"},children:[e.jsx(We,{message:k,author:J.get(k.authorId),isMine:k.authorId===s.id,showAvatar:!0,enableReactions:u,onReact:(y,q)=>l==null?void 0:l(y,q),onReply:()=>{}}),(d=k.thread)==null?void 0:d.map(y=>e.jsx(We,{message:y,author:J.get(y.authorId),isMine:y.authorId===s.id,showAvatar:!0,enableReactions:u,onReact:(q,X)=>l==null?void 0:l(q,X),onReply:()=>{}},y.id))]}),e.jsx(Je,{placeholder:"Reply in threadโ€ฆ",onSend:y=>v==null?void 0:v(n.id,y,"text")})]}),e.jsx(Je,{placeholder:j,maxLength:C,replyTo:S,onCancelReply:()=>h(null),onSend:W,onAttach:m?()=>{}:void 0})]})}function Dt({conversation:n,partner:t,isActive:i,lastMessage:s,onClick:r}){var m;const o=(t==null?void 0:t.displayName)??(t==null?void 0:t.name)??n.name??"Group",c=((m=o[0])==null?void 0:m.toUpperCase())??"?",f=(t==null?void 0:t.avatarUrl)??n.avatarUrl,u=s?s.timestamp.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"",x=s?s.isDeleted?"Message deleted":s.content.slice(0,50):"";return e.jsxs("button",{className:`nice-messenger-conv-item${i?" nice-messenger-conv-item--active":""}`,onClick:r,style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",background:i?"#ede9fe":"transparent",border:"none",width:"100%",textAlign:"left",cursor:"pointer",position:"relative"},children:[e.jsxs("div",{style:{position:"relative",flexShrink:0},children:[e.jsx("div",{style:{width:40,height:40,borderRadius:"50%",background:f?`url(${f}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:16},children:!f&&c}),t&&e.jsx(fe,{status:t.presence.status,size:"xs",style:{position:"absolute",bottom:0,right:0}}),n.type!=="dm"&&e.jsx("span",{style:{position:"absolute",bottom:-2,right:-2,background:"#f3f4f6",border:"1px solid #e5e7eb",borderRadius:4,fontSize:9,padding:"0 3px",color:"#6b7280"},children:"#"})]}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline"},children:[e.jsx("span",{style:{fontWeight:n.unreadCount>0?700:500,fontSize:14,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o}),e.jsx("span",{style:{fontSize:11,color:"#9ca3af",flexShrink:0,marginLeft:4},children:u})]}),e.jsx("div",{style:{fontSize:12,color:"#6b7280",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginTop:2},children:x})]}),(n.unreadCount>0||n.mentionCount>0)&&e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:2,alignItems:"flex-end",flexShrink:0},children:[n.mentionCount>0&&e.jsxs("span",{style:{background:"#ef4444",color:"#fff",borderRadius:10,fontSize:10,padding:"1px 5px",fontWeight:700},children:["@",n.mentionCount]}),n.unreadCount>0&&e.jsx("span",{style:{background:"#6366f1",color:"#fff",borderRadius:10,fontSize:10,padding:"1px 5px",fontWeight:700},children:n.unreadCount>99?"99+":n.unreadCount})]}),n.isMuted&&e.jsx("span",{style:{position:"absolute",bottom:8,right:8,fontSize:10,color:"#9ca3af"},children:"๐Ÿ”‡"})]})}function ut({conversations:n,messages:t,users:i,currentUser:s,activeConversationId:r,teams:o,enableGroupConversations:c=!0,showPresence:f=!0,enableSearch:u=!0,onSendMessage:x,onEditMessage:m,onDeleteMessage:j,onReactToMessage:C,onPinMessage:v,onLoadMoreMessages:R,onMarkAsRead:O,onStartCall:l,onCreateConversation:A,className:N,style:Y,id:H,"data-testid":D}){var M;const[$,U]=a.useState(r??null),[E,_]=a.useState(""),[S,h]=a.useState("all");a.useMemo(()=>{const d=new Map;return i.forEach(y=>d.set(y.id,y)),d},[i]);const k=a.useMemo(()=>{let d=n;if(S==="unread"&&(d=d.filter(y=>y.unreadCount>0)),S==="groups"&&(d=d.filter(y=>y.type!=="dm")),E.trim()){const y=E.toLowerCase();d=d.filter(q=>{var Q,K;const X=Me(q,s.id,i);return(X==null?void 0:X.name.toLowerCase().includes(y))||((Q=q.name)==null?void 0:Q.toLowerCase().includes(y))||((K=q.lastMessage)==null?void 0:K.content.toLowerCase().includes(y))})}return[...d].sort((y,q)=>{var K,re;if(y.isPinned!==q.isPinned)return y.isPinned?-1:1;const X=((K=y.lastMessage)==null?void 0:K.timestamp.getTime())??y.updatedAt.getTime();return(((re=q.lastMessage)==null?void 0:re.timestamp.getTime())??q.updatedAt.getTime())-X})},[n,S,E,s.id,i]),F=a.useMemo(()=>n.find(d=>d.id===$)??null,[n,$]),J=a.useMemo(()=>$?t[$]??[]:[],[t,$]),I=a.useCallback(d=>{U(d),O==null||O(d)},[O]),W=a.useMemo(()=>_e(n),[n]),B=o??[];return e.jsxs("div",{id:H,"data-testid":D,className:`nice-messenger${N?` ${N}`:""}`,style:{display:"flex",height:"100%",background:"#fff",overflow:"hidden",...Y},children:[e.jsxs("div",{className:"nice-messenger-sidebar",style:{width:280,flexShrink:0,borderRight:"1px solid #e5e7eb",display:"flex",flexDirection:"column",background:"#fafafa"},children:[e.jsxs("div",{style:{padding:"14px 14px 8px",borderBottom:"1px solid #e5e7eb"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[e.jsxs("span",{style:{fontWeight:700,fontSize:16},children:["Messages ",W>0&&e.jsx("span",{style:{background:"#6366f1",color:"#fff",borderRadius:10,fontSize:10,padding:"1px 6px",fontWeight:700,marginLeft:4},children:W})]}),c&&A&&e.jsx("button",{onClick:()=>A([],"group"),title:"New conversation",style:{background:"#6366f1",border:"none",borderRadius:6,padding:"5px 8px",cursor:"pointer",color:"#fff",fontSize:13},children:"+"})]}),u&&e.jsx("input",{type:"search",value:E,onChange:d=>_(d.target.value),placeholder:"Search conversationsโ€ฆ",style:{width:"100%",marginTop:8,padding:"6px 10px",border:"1px solid #e5e7eb",borderRadius:16,fontSize:13,outline:"none",boxSizing:"border-box",background:"#fff"}}),e.jsx("div",{style:{display:"flex",gap:2,marginTop:8},children:["all","unread","groups"].map(d=>e.jsx("button",{onClick:()=>h(d),style:{flex:1,padding:"4px 0",border:"none",borderRadius:6,background:S===d?"#6366f1":"transparent",color:S===d?"#fff":"#6b7280",cursor:"pointer",fontSize:12,textTransform:"capitalize",fontWeight:S===d?600:400},children:d},d))})]}),f&&e.jsxs("div",{style:{padding:"8px 14px",borderBottom:"1px solid #f3f4f6",overflowX:"auto"},children:[e.jsx("div",{style:{fontSize:11,color:"#9ca3af",marginBottom:6},children:"ONLINE NOW"}),e.jsx("div",{style:{display:"flex",gap:10},children:i.filter(d=>d.id!==s.id&&d.presence.status==="online").slice(0,6).map(d=>{var y;return e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:3},children:[e.jsxs("div",{style:{position:"relative"},children:[e.jsx("div",{style:{width:34,height:34,borderRadius:"50%",background:d.avatarUrl?`url(${d.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:13,cursor:"pointer"},title:d.name,children:!d.avatarUrl&&((y=d.name[0])==null?void 0:y.toUpperCase())}),e.jsx(fe,{status:d.presence.status,size:"xs",style:{position:"absolute",bottom:0,right:0}})]}),e.jsx("span",{style:{fontSize:10,color:"#6b7280",maxWidth:36,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d.displayName??d.name.split(" ")[0]})]},d.id)})})]}),e.jsxs("div",{style:{flex:1,overflowY:"auto"},children:[B.length>0&&S==="all"&&e.jsx("div",{style:{padding:"8px 14px 4px",fontSize:11,color:"#9ca3af",fontWeight:600,letterSpacing:"0.05em"},children:"DIRECT MESSAGES"}),k.length===0?e.jsx("div",{style:{padding:24,textAlign:"center",color:"#9ca3af",fontSize:13},children:"No conversations"}):k.map(d=>e.jsx(Dt,{conversation:d,partner:Me(d,s.id,i),isActive:d.id===$,lastMessage:d.lastMessage,onClick:()=>I(d.id)},d.id))]}),e.jsxs("div",{style:{padding:"10px 14px",borderTop:"1px solid #e5e7eb",display:"flex",alignItems:"center",gap:8},children:[e.jsxs("div",{style:{position:"relative"},children:[e.jsx("div",{style:{width:32,height:32,borderRadius:"50%",background:s.avatarUrl?`url(${s.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:13},children:!s.avatarUrl&&((M=s.name[0])==null?void 0:M.toUpperCase())}),e.jsx(fe,{status:s.presence.status,size:"xs",style:{position:"absolute",bottom:0,right:0}})]}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{fontWeight:600,fontSize:13,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s.displayName??s.name}),e.jsx("div",{style:{fontSize:11,color:"#9ca3af",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s.presence.statusMessage??s.presence.status})]})]})]}),e.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"hidden",position:"relative"},children:F?e.jsx(Ie,{conversation:F,messages:J,users:i,currentUser:s,onSendMessage:x,onEditMessage:m,onDeleteMessage:j,onReactToMessage:C,onPinMessage:v,onLoadMoreMessages:R,onStartCall:l,style:{height:"100%"}}):e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",color:"#9ca3af",gap:12},children:[e.jsx("span",{style:{fontSize:48},children:"๐Ÿ’ฌ"}),e.jsx("span",{style:{fontSize:15},children:"Select a conversation to start messaging"})]})})]})}const Et=["๐Ÿ‘","โค๏ธ","๐Ÿ˜‚","๐ŸŽ‰","๐Ÿ˜ฎ","๐Ÿ˜ข"];function Ne({message:n,author:t,isMine:i,enableReactions:s,enableThreads:r,onReact:o,onOpenThread:c,onReply:f}){var R,O,l;const[u,x]=a.useState(!1),[m,j]=a.useState(!1),C=n.timestamp.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),v=n.timestamp.toLocaleDateString([],{month:"short",day:"numeric"});return e.jsxs("div",{className:`nice-channel-msg${u?" nice-channel-msg--hovered":""}${i?" nice-channel-msg--mine":""}`,onMouseEnter:()=>x(!0),onMouseLeave:()=>{x(!1),j(!1)},style:{display:"flex",gap:10,padding:"4px 16px",position:"relative",background:u?"rgba(99,102,241,0.04)":"transparent"},children:[e.jsx("div",{style:{width:36,flexShrink:0},children:e.jsx("div",{style:{width:36,height:36,borderRadius:"50%",background:t!=null&&t.avatarUrl?`url(${t.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:14},children:!(t!=null&&t.avatarUrl)&&(((O=(R=t==null?void 0:t.name)==null?void 0:R[0])==null?void 0:O.toUpperCase())??"?")})}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:8,marginBottom:2},children:[e.jsx("span",{style:{fontWeight:600,fontSize:14,color:"#111827"},children:(t==null?void 0:t.displayName)??(t==null?void 0:t.name)??"Unknown"}),t&&e.jsx(fe,{status:t.presence.status,size:"xs"}),e.jsxs("span",{style:{fontSize:11,color:"#9ca3af"},children:[v," ",C]}),n.editedAt&&e.jsx("span",{style:{fontSize:11,color:"#9ca3af"},children:"(edited)"}),n.isPinned&&e.jsx("span",{style:{fontSize:11,color:"#6366f1"},children:"๐Ÿ“Œ Pinned"})]}),n.isDeleted?e.jsx("span",{style:{fontStyle:"italic",color:"#9ca3af",fontSize:14},children:"This message was deleted"}):e.jsx("div",{style:{fontSize:14,lineHeight:1.6,color:"#1f2937",wordBreak:"break-word"},children:n.contentType==="image"&&((l=n.attachments)!=null&&l[0])?e.jsx("img",{src:n.attachments[0].url,alt:n.attachments[0].name,style:{maxWidth:400,maxHeight:300,borderRadius:8,display:"block",marginTop:4}}):n.content}),!n.isDeleted&&n.attachments&&n.attachments.length>0&&n.contentType!=="image"&&e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginTop:4},children:n.attachments.map(A=>e.jsxs("a",{href:A.url,target:"_blank",rel:"noreferrer",style:{display:"inline-flex",alignItems:"center",gap:5,fontSize:12,color:"#6366f1",background:"#ede9fe",borderRadius:6,padding:"3px 8px",textDecoration:"none"},children:["๐Ÿ“Ž ",A.name]},A.id))}),n.reactions&&n.reactions.length>0&&e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:4,marginTop:4},children:n.reactions.map(A=>e.jsxs("button",{onClick:()=>o(n.id,A.emoji),style:{background:A.mine?"#ede9fe":"#f3f4f6",border:A.mine?"1px solid #6366f1":"1px solid transparent",borderRadius:12,padding:"2px 7px",fontSize:12,cursor:"pointer",display:"flex",alignItems:"center",gap:3},children:[A.emoji," ",A.count]},A.emoji))}),r&&(n.threadCount??0)>0&&e.jsxs("button",{onClick:()=>c(n),style:{background:"none",border:"none",color:"#6366f1",fontSize:12,cursor:"pointer",padding:"2px 0",marginTop:3},children:["๐Ÿ’ฌ ",n.threadCount," repl",n.threadCount===1?"y":"ies"," โ†’"]})]}),u&&!n.isDeleted&&e.jsxs("div",{style:{position:"absolute",top:-16,right:16,display:"flex",gap:2,background:"#fff",borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.12)",padding:"3px 6px",zIndex:10},children:[s&&e.jsxs("div",{style:{position:"relative"},children:[e.jsx("button",{onClick:()=>j(A=>!A),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px"},children:"๐Ÿ˜Š"}),m&&e.jsx("div",{style:{position:"absolute",bottom:"100%",right:0,display:"flex",gap:4,background:"#fff",borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.15)",padding:"6px 8px",zIndex:20},children:Et.map(A=>e.jsx("button",{onClick:()=>{o(n.id,A),j(!1)},style:{background:"none",border:"none",cursor:"pointer",fontSize:18},children:A},A))})]}),e.jsx("button",{onClick:()=>f(n),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px"},title:"Reply",children:"โ†ฉ"}),r&&e.jsx("button",{onClick:()=>c(n),style:{background:"none",border:"none",cursor:"pointer",fontSize:14,padding:"2px 4px"},title:"Open thread",children:"๐Ÿ’ฌ"})]})]})}function pt({channel:n,messages:t,users:i,currentUser:s,team:r,isLoading:o=!1,hasMore:c=!1,enableThreads:f=!0,enableReactions:u=!0,enableAttachments:x=!0,onSendMessage:m,onEditMessage:j,onDeleteMessage:C,onReactToMessage:v,onPinMessage:R,onLoadMoreMessages:O,onStartCall:l,className:A,style:N,id:Y,"data-testid":H}){var M;const D=a.useRef(null),$=a.useRef(null),[U,E]=a.useState(""),[_,S]=a.useState(null),[h,k]=a.useState(null),F=a.useMemo(()=>{const d=new Map;return i.forEach(y=>d.set(y.id,y)),d},[i]);a.useEffect(()=>{var d;(d=D.current)==null||d.scrollIntoView({behavior:"smooth"})},[t]);const J=a.useCallback(()=>{const d=$.current;!d||!c||o||d.scrollTop===0&&t.length>0&&(O==null||O(n.id,t[0].id))},[c,o,t,n.id,O]),I=a.useCallback(()=>{const d=U.trim();d&&(m==null||m(n.id,d,"text"),E(""),S(null))},[U,n.id,m]),W=d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),I())},B=i.filter(d=>d.presence.status==="online").length;return e.jsxs("div",{id:Y,"data-testid":H,className:`nice-channel-view${A?` ${A}`:""}`,style:{display:"flex",height:"100%",background:"#fff",overflow:"hidden",...N},children:[e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"hidden"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 16px",borderBottom:"1px solid #e5e7eb",flexShrink:0},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[e.jsx("span",{style:{fontSize:20,color:"#6b7280"},children:"#"}),e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:700,fontSize:16},children:n.name}),n.description&&e.jsx("div",{style:{fontSize:12,color:"#6b7280",marginTop:1},children:n.description})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsxs("span",{style:{fontSize:12,color:"#6b7280"},children:[e.jsx("span",{style:{display:"inline-block",width:6,height:6,borderRadius:"50%",background:"#22c55e",marginRight:4,verticalAlign:"middle"}}),B," online"]}),l&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>l(i.map(d=>d.id),"audio"),style:{background:"none",border:"1px solid #e5e7eb",borderRadius:6,padding:"5px 8px",cursor:"pointer",fontSize:15},title:"Audio call",children:"๐Ÿ“ž"}),e.jsx("button",{onClick:()=>l(i.map(d=>d.id),"video"),style:{background:"none",border:"1px solid #e5e7eb",borderRadius:6,padding:"5px 8px",cursor:"pointer",fontSize:15},title:"Video meet",children:"๐Ÿ“น"})]})]})]}),e.jsxs("div",{ref:$,onScroll:J,style:{flex:1,overflowY:"auto",padding:"8px 0"},children:[c&&e.jsx("button",{onClick:()=>t.length>0&&(O==null?void 0:O(n.id,t[0].id)),disabled:o,style:{display:"block",margin:"8px auto",background:"none",border:"1px solid #e5e7eb",borderRadius:16,padding:"4px 16px",fontSize:12,color:"#6b7280",cursor:"pointer"},children:o?"Loadingโ€ฆ":"Load older messages"}),t.map(d=>e.jsx(Ne,{message:d,author:F.get(d.authorId),isMine:d.authorId===s.id,enableReactions:u,enableThreads:f,onReact:(y,q)=>v==null?void 0:v(y,q),onOpenThread:y=>k(y),onReply:y=>S(y)},d.id)),e.jsx("div",{ref:D})]}),e.jsxs("div",{style:{padding:"8px 16px",borderTop:"1px solid #e5e7eb",flexShrink:0},children:[_&&e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",background:"#f3f4f6",borderLeft:"3px solid #6366f1",padding:"3px 8px",marginBottom:6,borderRadius:"0 4px 4px 0",fontSize:12,color:"#6b7280"},children:[e.jsxs("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["Replying to: ",_.content]}),e.jsx("button",{onClick:()=>S(null),style:{background:"none",border:"none",cursor:"pointer",fontSize:16,color:"#9ca3af"},children:"ร—"})]}),e.jsxs("div",{style:{display:"flex",gap:8,alignItems:"flex-end"},children:[x&&e.jsx("button",{title:"Attach",style:{background:"none",border:"none",cursor:"pointer",fontSize:18,color:"#9ca3af",padding:"6px 4px"},children:"๐Ÿ“Ž"}),e.jsx("textarea",{value:U,onChange:d=>E(d.target.value),onKeyDown:W,placeholder:`Message #${n.name}`,rows:1,style:{flex:1,resize:"none",border:"1px solid #e5e7eb",borderRadius:8,padding:"8px 12px",fontSize:14,outline:"none",fontFamily:"inherit",lineHeight:1.5,overflow:"hidden",maxHeight:100}}),e.jsx("button",{onClick:I,disabled:!U.trim(),style:{background:U.trim()?"#6366f1":"#e5e7eb",border:"none",borderRadius:"50%",width:36,height:36,cursor:U.trim()?"pointer":"default",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,fontSize:15,transition:"background 0.15s"},children:"โžค"})]})]})]}),h&&e.jsxs("div",{style:{width:340,flexShrink:0,borderLeft:"1px solid #e5e7eb",display:"flex",flexDirection:"column",overflow:"hidden"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px",borderBottom:"1px solid #e5e7eb",flexShrink:0},children:[e.jsx("span",{style:{fontWeight:600,fontSize:14},children:"Thread"}),e.jsx("button",{onClick:()=>k(null),style:{background:"none",border:"none",cursor:"pointer",fontSize:18,color:"#9ca3af"},children:"ร—"})]}),e.jsxs("div",{style:{flex:1,overflowY:"auto"},children:[e.jsx(Ne,{message:h,author:F.get(h.authorId),isMine:h.authorId===s.id,enableReactions:u,enableThreads:!1,onReact:(d,y)=>v==null?void 0:v(d,y),onOpenThread:()=>{},onReply:()=>{}}),e.jsxs("div",{style:{padding:"6px 14px",color:"#9ca3af",fontSize:12,borderTop:"1px solid #f3f4f6"},children:[h.threadCount??0," repl",h.threadCount===1?"y":"ies"]}),(M=h.thread)==null?void 0:M.map(d=>e.jsx(Ne,{message:d,author:F.get(d.authorId),isMine:d.authorId===s.id,enableReactions:u,enableThreads:!1,onReact:(y,q)=>v==null?void 0:v(y,q),onOpenThread:()=>{},onReply:()=>{}},d.id))]}),e.jsx("div",{style:{padding:"8px 12px",borderTop:"1px solid #e5e7eb"},children:e.jsxs("div",{style:{display:"flex",gap:6,alignItems:"flex-end"},children:[e.jsx("textarea",{placeholder:"Reply in threadโ€ฆ",rows:1,onKeyDown:d=>{if(d.key==="Enter"&&!d.shiftKey){d.preventDefault();const y=d.target.value.trim();y&&(m==null||m(n.id,y,"text"),d.target.value="")}},style:{flex:1,resize:"none",border:"1px solid #e5e7eb",borderRadius:8,padding:"7px 10px",fontSize:13,outline:"none",fontFamily:"inherit",overflow:"hidden"}}),e.jsx("button",{style:{background:"#6366f1",border:"none",borderRadius:"50%",width:32,height:32,cursor:"pointer",color:"#fff",fontSize:14,display:"flex",alignItems:"center",justifyContent:"center"},children:"โžค"})]})})]})]})}function Fe({session:n,currentUser:t,localStream:i,enableScreenSharing:s=!0,enableRecording:r=!1,onEndCall:o,onMuteAudio:c,onMuteVideo:f,onStartScreenShare:u,onStopScreenShare:x,onRaiseHand:m,className:j,style:C,id:v,"data-testid":R}){var y,q;const O=a.useRef(null),l=a.useRef(null),[A,N]=a.useState(!1),[Y,H]=a.useState(n.type==="audio"),[D,$]=a.useState(!1),[U,E]=a.useState(0),[_,S]=a.useState(!1),h=n.participants.find(X=>X.user.id!==t.id);a.useEffect(()=>{O.current&&i&&(O.current.srcObject=i)},[i]),a.useEffect(()=>{l.current&&(h!=null&&h.stream)&&(l.current.srcObject=h.stream)},[h==null?void 0:h.stream]),a.useEffect(()=>{if(n.status!=="active")return;const X=setInterval(()=>E(Q=>Q+1),1e3);return()=>clearInterval(X)},[n.status]);const k=X=>{const Q=Math.floor(X/3600),K=Math.floor(X%3600/60),re=X%60;return Q>0?`${Q}:${String(K).padStart(2,"0")}:${String(re).padStart(2,"0")}`:`${String(K).padStart(2,"0")}:${String(re).padStart(2,"0")}`},F=()=>{const X=!A;N(X),c==null||c(X)},J=()=>{const X=!Y;H(X),f==null||f(X)},I=async()=>{D?($(!1),x==null||x()):($(!0),await(u==null?void 0:u()))},W=()=>{o==null||o(n.id)},B={position:"relative",width:"100%",height:"100%",background:"#111827",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",overflow:"hidden",...C},M=n.status==="ringing"||n.status==="connecting",d=h==null?void 0:h.user;return e.jsxs("div",{id:v,"data-testid":R,className:`nice-call-screen${j?` ${j}`:""}`,style:B,children:[n.type==="video"&&(h!=null&&h.stream)&&!h.isCameraOff?e.jsx("video",{ref:l,autoPlay:!0,playsInline:!0,style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover"}}):e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:16},children:[e.jsx("div",{style:{width:120,height:120,borderRadius:"50%",background:d!=null&&d.avatarUrl?`url(${d.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:48,boxShadow:M?"0 0 0 12px rgba(99,102,241,0.3)":void 0,animation:M?"nice-call-pulse 1.5s ease-in-out infinite":void 0},children:!(d!=null&&d.avatarUrl)&&(((q=(y=d==null?void 0:d.name)==null?void 0:y[0])==null?void 0:q.toUpperCase())??"?")}),e.jsx("span",{style:{color:"#fff",fontSize:22,fontWeight:600},children:(d==null?void 0:d.displayName)??(d==null?void 0:d.name)??"Callingโ€ฆ"}),d&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[e.jsx(fe,{status:d.presence.status,size:"sm"}),e.jsx("span",{style:{color:"rgba(255,255,255,0.6)",fontSize:13},children:M?n.status==="ringing"?"Callingโ€ฆ":"Connectingโ€ฆ":k(U)})]})]}),n.status==="active"&&e.jsxs("div",{style:{position:"absolute",top:16,left:"50%",transform:"translateX(-50%)",color:"rgba(255,255,255,0.7)",fontSize:13},children:[k(U),n.isRecording&&e.jsx("span",{style:{marginLeft:8,color:"#ef4444"},children:"โ— REC"})]}),(h==null?void 0:h.isMuted)&&e.jsxs("div",{style:{position:"absolute",top:16,right:70,background:"rgba(0,0,0,0.5)",borderRadius:6,padding:"3px 8px",display:"flex",alignItems:"center",gap:4,fontSize:12,color:"#fff"},children:["๐Ÿ”‡ ",d==null?void 0:d.name," is muted"]}),e.jsx("button",{onClick:()=>S(X=>!X),style:{position:"absolute",top:12,right:12,background:"rgba(0,0,0,0.4)",border:"none",borderRadius:6,padding:"5px 8px",color:"#fff",cursor:"pointer",fontSize:16},title:_?"Exit fullscreen":"Fullscreen",children:_?"โŠก":"โŠž"}),n.type==="video"&&!Y&&i&&e.jsx("div",{style:{position:"absolute",bottom:90,right:20,width:140,height:90,borderRadius:10,overflow:"hidden",border:"2px solid rgba(255,255,255,0.3)",boxShadow:"0 4px 12px rgba(0,0,0,0.5)"},children:e.jsx("video",{ref:O,autoPlay:!0,muted:!0,playsInline:!0,style:{width:"100%",height:"100%",objectFit:"cover",transform:"scaleX(-1)"}})}),e.jsxs("div",{className:"nice-call-controls",style:{position:"absolute",bottom:24,left:"50%",transform:"translateX(-50%)",display:"flex",gap:12,background:"rgba(17,24,39,0.8)",backdropFilter:"blur(8px)",borderRadius:40,padding:"8px 16px"},children:[e.jsx(ve,{icon:A?"๐Ÿ”‡":"๐ŸŽค",label:A?"Unmute":"Mute",onClick:F,active:!A,style:{background:A?"#ef4444":void 0}}),n.type==="video"&&e.jsx(ve,{icon:Y?"๐Ÿ“ท":"๐Ÿ“น",label:Y?"Turn on camera":"Turn off camera",onClick:J,active:!Y,style:{background:Y?"#ef4444":void 0}}),s&&e.jsx(ve,{icon:"๐Ÿ–ฅ",label:D?"Stop sharing":"Share screen",onClick:()=>{I()},active:D,style:{background:D?"#22c55e":void 0}}),m&&e.jsx(ve,{icon:"โœ‹",label:"Raise hand",onClick:()=>m(!0),active:!1}),r&&e.jsx(ve,{icon:"โบ",label:n.isRecording?"Stop recording":"Start recording",onClick:()=>{},active:n.isRecording,style:{background:n.isRecording?"#ef4444":void 0}}),e.jsx(ve,{icon:"๐Ÿ“ต",label:"End call",onClick:W,active:!1,style:{background:"#ef4444",color:"#fff"}})]}),e.jsx("style",{children:`
2
+ @keyframes nice-call-pulse {
3
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(99,102,241,0.4); }
4
+ 50% { box-shadow: 0 0 0 24px rgba(99,102,241,0); }
5
+ }
6
+ `})]})}function ve({icon:n,label:t,onClick:i,active:s,style:r}){return e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2},children:[e.jsx("button",{onClick:i,title:t,style:{width:44,height:44,borderRadius:"50%",border:"none",background:s?"rgba(255,255,255,0.15)":"rgba(255,255,255,0.08)",color:"#fff",fontSize:18,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background 0.2s",...r},children:n}),e.jsx("span",{style:{fontSize:9,color:"rgba(255,255,255,0.5)",textAlign:"center",maxWidth:50},children:t})]})}function Le({participant:n,isLocal:t,isPinned:i,onPin:s,size:r="medium"}){var O;const o=a.useRef(null),{user:c,isMuted:f,isCameraOff:u,isScreenSharing:x,isSpeaking:m,isHandRaised:j,stream:C,screenStream:v}=n;a.useEffect(()=>{if(!o.current)return;const l=x?v:C;l&&(o.current.srcObject=l)},[C,v,x]);const R=!u&&!!C;return e.jsxs("div",{className:`nice-conference-tile${m?" nice-conference-tile--speaking":""}${i?" nice-conference-tile--pinned":""}`,style:{position:"relative",background:"#1f2937",borderRadius:10,overflow:"hidden",border:m?"2px solid #22c55e":i?"2px solid #6366f1":"2px solid transparent",display:"flex",alignItems:"center",justifyContent:"center",aspectRatio:"16/9"},children:[R?e.jsx("video",{ref:o,autoPlay:!0,muted:t,playsInline:!0,style:{width:"100%",height:"100%",objectFit:"cover",transform:t&&!x?"scaleX(-1)":"none"}}):e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[e.jsx("div",{style:{width:r==="large"?64:r==="small"?28:44,height:r==="large"?64:r==="small"?28:44,borderRadius:"50%",background:c.avatarUrl?`url(${c.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:r==="large"?28:r==="small"?12:18},children:!c.avatarUrl&&((O=c.name[0])==null?void 0:O.toUpperCase())}),r!=="small"&&e.jsx("span",{style:{color:"#fff",fontSize:12},children:c.displayName??c.name})]}),e.jsxs("div",{style:{position:"absolute",bottom:0,left:0,right:0,background:"linear-gradient(transparent, rgba(0,0,0,0.6))",padding:"6px 8px",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[e.jsxs("span",{style:{color:"#fff",fontSize:11,fontWeight:500},children:[c.displayName??c.name,t&&" (You)"]}),e.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[j&&e.jsx("span",{style:{fontSize:13},children:"โœ‹"}),f&&e.jsx("span",{style:{fontSize:12},children:"๐Ÿ”‡"}),x&&e.jsx("span",{style:{fontSize:12},children:"๐Ÿ–ฅ"}),r!=="small"&&e.jsx("div",{style:{width:6,height:6,borderRadius:"50%",background:m?"#22c55e":"transparent",border:"1px solid rgba(255,255,255,0.3)"}})]})]}),r!=="small"&&e.jsx("button",{onClick:s,style:{position:"absolute",top:6,right:6,background:"rgba(0,0,0,0.4)",border:"none",borderRadius:4,padding:"2px 5px",color:i?"#6366f1":"rgba(255,255,255,0.6)",cursor:"pointer",fontSize:12},title:i?"Unpin":"Pin",children:"๐Ÿ“Œ"}),n.connectionQuality!=="none"&&r!=="small"&&e.jsx("div",{style:{position:"absolute",top:6,left:6,width:14,height:10,display:"flex",gap:2,alignItems:"flex-end"},children:[1,2,3].map(l=>e.jsx("div",{style:{flex:1,background:n.connectionQuality==="excellent"||n.connectionQuality==="good"&&l<=2||n.connectionQuality==="fair"&&l<=1?"#22c55e":"rgba(255,255,255,0.3)",height:`${l*30}%`,borderRadius:1}},l))})]})}function Ke({session:n,currentUser:t,localStream:i,enableScreenSharing:s=!0,enableRecording:r=!1,enableTranscription:o=!1,enableRaiseHand:c=!0,maxGridCols:f=4,onEndCall:u,onMuteAudio:x,onMuteVideo:m,onStartScreenShare:j,onStopScreenShare:C,onRaiseHand:v,className:R,style:O,id:l,"data-testid":A}){const[N,Y]=a.useState(!1),[H,D]=a.useState(!1),[$,U]=a.useState(!1),[E,_]=a.useState(!1),[S,h]=a.useState(n.pinnedParticipantId??null),[k,F]=a.useState(n.layout==="sidebar"?"grid":n.layout??"grid"),[J,I]=a.useState(0),[W,B]=a.useState(!1);a.useEffect(()=>{if(n.status!=="active")return;const L=setInterval(()=>I(V=>V+1),1e3);return()=>clearInterval(L)},[n.status]);const M=L=>{const V=Math.floor(L/3600),ne=Math.floor(L%3600/60),se=L%60;return V>0?`${V}:${String(ne).padStart(2,"0")}:${String(se).padStart(2,"0")}`:`${String(ne).padStart(2,"0")}:${String(se).padStart(2,"0")}`},d=()=>{const L=!N;Y(L),x==null||x(L)},y=()=>{const L=!H;D(L),m==null||m(L)},q=async()=>{$?(U(!1),C==null||C()):(U(!0),await(j==null?void 0:j()))},X=()=>{const L=!E;_(L),v==null||v(L)},Q=[{user:t,isMuted:N,isCameraOff:H,isScreenSharing:$,isSpeaking:!1,isHandRaised:E,stream:i,connectionQuality:"excellent"},...n.participants],K=S?Q.find(L=>L.user.id===S):null,re=Q.filter(L=>L.user.id!==S),oe=Q.length,ue=Math.min(f,oe<=1?1:oe<=2||oe<=4?2:oe<=9?3:4),le=k==="spotlight"||K!=null;return e.jsxs("div",{id:l,"data-testid":A,className:`nice-video-conference${R?` ${R}`:""}`,style:{position:"relative",width:"100%",height:"100%",background:"#111827",display:"flex",flexDirection:"column",overflow:"hidden",...O},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 16px",flexShrink:0,color:"#fff"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12},children:[e.jsxs("span",{style:{fontSize:15,fontWeight:600},children:[n.id.slice(0,8),"โ€ฆ"]}),e.jsx("span",{style:{fontSize:12,color:"rgba(255,255,255,0.6)"},children:M(J)}),n.isRecording&&e.jsx("span",{style:{fontSize:11,color:"#ef4444",display:"flex",alignItems:"center",gap:4},children:"โ— Recording"})]}),e.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[e.jsx("button",{onClick:()=>F(k==="grid"?"spotlight":"grid"),style:{background:"rgba(255,255,255,0.1)",border:"none",borderRadius:6,padding:"4px 10px",color:"#fff",cursor:"pointer",fontSize:12},children:k==="grid"?"โŠž Grid":"โŠก Spotlight"}),e.jsxs("button",{onClick:()=>B(L=>!L),style:{background:W?"#6366f1":"rgba(255,255,255,0.1)",border:"none",borderRadius:6,padding:"4px 10px",color:"#fff",cursor:"pointer",fontSize:12},children:["๐Ÿ‘ฅ ",Q.length]})]})]}),e.jsxs("div",{style:{flex:1,display:"flex",overflow:"hidden",gap:4,padding:"0 8px 8px"},children:[e.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4,overflow:"hidden"},children:le&&K?e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{flex:1},children:e.jsx(Le,{participant:K,isLocal:K.user.id===t.id,isPinned:!0,onPin:()=>h(null),size:"large"})}),e.jsx("div",{style:{display:"flex",gap:4,height:90,flexShrink:0,overflowX:"auto"},children:re.map(L=>e.jsx("div",{style:{width:140,flexShrink:0},children:e.jsx(Le,{participant:L,isLocal:L.user.id===t.id,isPinned:!1,onPin:()=>h(L.user.id),size:"small"})},L.user.id))})]}):e.jsx("div",{style:{flex:1,display:"grid",gridTemplateColumns:`repeat(${ue}, 1fr)`,gap:6,overflow:"hidden"},children:Q.map(L=>e.jsx(Le,{participant:L,isLocal:L.user.id===t.id,isPinned:L.user.id===S,onPin:()=>h(V=>V===L.user.id?null:L.user.id),size:oe<=4?"large":"medium"},L.user.id))})}),W&&e.jsxs("div",{style:{width:220,flexShrink:0,background:"rgba(255,255,255,0.05)",borderRadius:10,display:"flex",flexDirection:"column",overflow:"hidden"},children:[e.jsxs("div",{style:{padding:"10px 12px",fontWeight:600,fontSize:13,color:"#fff",borderBottom:"1px solid rgba(255,255,255,0.1)"},children:["Participants (",Q.length,")"]}),e.jsx("div",{style:{flex:1,overflowY:"auto",padding:8},children:Q.map(L=>{var V;return e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px"},children:[e.jsx("div",{style:{width:28,height:28,borderRadius:"50%",background:L.user.avatarUrl?`url(${L.user.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:11,fontWeight:700},children:!L.user.avatarUrl&&((V=L.user.name[0])==null?void 0:V.toUpperCase())}),e.jsx("div",{style:{flex:1,minWidth:0},children:e.jsxs("div",{style:{color:"#fff",fontSize:12,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[L.user.displayName??L.user.name,L.user.id===t.id&&" (You)"]})}),e.jsxs("div",{style:{display:"flex",gap:3},children:[L.isHandRaised&&e.jsx("span",{style:{fontSize:11},children:"โœ‹"}),L.isMuted&&e.jsx("span",{style:{fontSize:11},children:"๐Ÿ”‡"}),e.jsx(fe,{status:L.user.presence.status,size:"xs"})]})]},L.user.id)})})]})]}),e.jsxs("div",{className:"nice-conference-controls",style:{display:"flex",justifyContent:"center",gap:10,padding:"10px 16px",flexShrink:0,background:"rgba(0,0,0,0.3)"},children:[e.jsx(xe,{icon:N?"๐Ÿ”‡":"๐ŸŽค",label:N?"Unmute":"Mute",onClick:d,danger:N}),e.jsx(xe,{icon:H?"๐Ÿ“ท":"๐Ÿ“น",label:H?"Start video":"Stop video",onClick:y,danger:H}),s&&e.jsx(xe,{icon:"๐Ÿ–ฅ",label:$?"Stop share":"Share",onClick:()=>{q()},active:$}),c&&e.jsx(xe,{icon:"โœ‹",label:"Raise hand",onClick:X,active:E}),r&&e.jsx(xe,{icon:"โบ",label:n.isRecording?"Stop rec":"Record",onClick:()=>{},active:n.isRecording,danger:n.isRecording}),o&&e.jsx(xe,{icon:"๐Ÿ“",label:n.isTranscribing?"Stop captions":"Captions",onClick:()=>{},active:n.isTranscribing}),e.jsx(xe,{icon:"๐Ÿ“ต",label:"Leave",onClick:()=>u==null?void 0:u(n.id),end:!0})]})]})}function xe({icon:n,label:t,onClick:i,active:s,danger:r,end:o}){return e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2},children:[e.jsx("button",{title:t,onClick:i,style:{width:46,height:46,borderRadius:"50%",border:"none",background:o?"#ef4444":r?"#450a0a":s?"#6366f1":"rgba(255,255,255,0.12)",color:"#fff",fontSize:18,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background 0.15s"},children:n}),e.jsx("span",{style:{fontSize:9,color:"rgba(255,255,255,0.5)",textAlign:"center",maxWidth:52},children:t})]})}function Ue(n){const t={days:864e5,weeks:6048e5,months:2592e6,years:31536e6,forever:Number.MAX_SAFE_INTEGER};return n.unit==="forever"?t.forever:t[n.unit]*n.value}function Ce(n,t=new Date){if(n.unit!=="forever")return new Date(t.getTime()+Ue(n))}class Qe{constructor(t="nice2dev-communication"){this.storeName="nice_comm_store",this.db=null,this.dbName=t}async openDb(){return this.db?this.db:new Promise((t,i)=>{const s=indexedDB.open(this.dbName,1);s.onupgradeneeded=r=>{const o=r.target.result;o.objectStoreNames.contains(this.storeName)||o.createObjectStore(this.storeName,{keyPath:"key"})},s.onsuccess=r=>{this.db=r.target.result,t(this.db)},s.onerror=()=>i(s.error)})}async save(t,i,s){const r=await this.openDb();return new Promise((o,c)=>{const x=r.transaction(this.storeName,"readwrite").objectStore(this.storeName).put({key:t,data:i,expiresAt:s==null?void 0:s.toISOString()});x.onsuccess=()=>o(),x.onerror=()=>c(x.error)})}async load(t){const i=await this.openDb();return new Promise((s,r)=>{const f=i.transaction(this.storeName,"readonly").objectStore(this.storeName).get(t);f.onsuccess=()=>{const u=f.result;if(!u){s(void 0);return}if(u.expiresAt&&new Date(u.expiresAt)<new Date){this.delete(t),s(void 0);return}s(u.data)},f.onerror=()=>r(f.error)})}async delete(t){const i=await this.openDb();return new Promise((s,r)=>{const f=i.transaction(this.storeName,"readwrite").objectStore(this.storeName).delete(t);f.onsuccess=()=>s(),f.onerror=()=>r(f.error)})}async list(t){const i=await this.openDb();return new Promise((s,r)=>{const f=i.transaction(this.storeName,"readonly").objectStore(this.storeName).getAllKeys();f.onsuccess=()=>s((f.result??[]).filter(u=>u.startsWith(t))),f.onerror=()=>r(f.error)})}async clear(t){if(!t){const s=await this.openDb();return new Promise((r,o)=>{const u=s.transaction(this.storeName,"readwrite").objectStore(this.storeName).clear();u.onsuccess=()=>r(),u.onerror=()=>o(u.error)})}const i=await this.list(t);await Promise.all(i.map(s=>this.delete(s)))}}class Pt{constructor(t="nice_comm__"){this.prefix=t}async save(t,i,s){const r={data:i,expiresAt:s==null?void 0:s.toISOString()};localStorage.setItem(this.prefix+t,JSON.stringify(r))}async load(t){const i=localStorage.getItem(this.prefix+t);if(i)try{const s=JSON.parse(i);if(s.expiresAt&&new Date(s.expiresAt)<new Date){await this.delete(t);return}return s.data}catch{return}}async delete(t){localStorage.removeItem(this.prefix+t)}async list(t){const i=[];for(let s=0;s<localStorage.length;s++){const r=localStorage.key(s);r&&r.startsWith(this.prefix+t)&&i.push(r.slice(this.prefix.length))}return i}async clear(t){(await this.list(t??"")).forEach(s=>localStorage.removeItem(this.prefix+s))}}class ht{constructor(t,i){this.config=t,this.encryption=i,this.adapter=this.buildAdapter()}buildAdapter(){switch(this.config.provider){case"localstorage":return new Pt;case"custom":return this.config.customAdapter??new Qe;default:return new Qe}}getRuleFor(t){return this.config.retentionRules.find(i=>i.dataType===t)}async encode(t){var s;const i=JSON.stringify(t);return(s=this.encryption)!=null&&s.isEnabled()?this.encryption.encrypt(i,"messages"):i}async decode(t){var i;if(typeof t!="string")return t;if(!((i=this.encryption)!=null&&i.isEnabled()))try{return JSON.parse(t)}catch{return t}try{const s=await this.encryption.decrypt(t,"messages");return JSON.parse(s)}catch{return t}}async saveMessages(t,i){const s=this.getRuleFor("messages"),r=s?Ce(s.activePeriod):void 0,o=await this.encode(i);await this.adapter.save(`msg:${t}`,o,r)}async loadMessages(t){const i=await this.adapter.load(`msg:${t}`);if(!i)return[];const s=await this.decode(i);return Array.isArray(s)?s:[]}async appendMessage(t,i){const s=await this.loadMessages(t);await this.saveMessages(t,[...s,i])}async saveWhiteboardSnapshot(t,i){const s=this.getRuleFor("whiteboard-snapshots"),r=s?Ce(s.activePeriod):void 0,o=await this.encode(i);await this.adapter.save(`wb:${t}`,o,r)}async loadWhiteboardSnapshot(t){const i=await this.adapter.load(`wb:${t}`);return i?await this.decode(i):null}async saveRecordingMeta(t){const i=this.getRuleFor("recordings"),s=i?Ce(i.activePeriod):void 0,r=await this.encode(t);await this.adapter.save(`rec:${t.id}`,r,s)}async loadRecordingMeta(t){const i=await this.adapter.load(`rec:${t}`);return i?await this.decode(i):null}async listRecordings(){const t=await this.adapter.list("rec:");return(await Promise.all(t.map(s=>this.loadRecordingMeta(s.slice(4))))).filter(Boolean)}async deleteRecording(t){await this.adapter.delete(`rec:${t}`)}async saveDocument(t,i){const s=this.getRuleFor("documents"),r=s?Ce(s.activePeriod):void 0,o=await this.encode(i);await this.adapter.save(`doc:${t}`,o,r)}async loadDocument(t){const i=await this.adapter.load(`doc:${t}`);return i?this.decode(i):null}async enforceRetention(){let t=0,i=0;const s=new Date,r=[{prefix:"msg:",type:"messages"},{prefix:"wb:",type:"whiteboard-snapshots"},{prefix:"rec:",type:"recordings"},{prefix:"doc:",type:"documents"}];for(const{prefix:o,type:c}of r){const f=this.getRuleFor(c);if(!f)continue;const u=await this.adapter.list(o);for(const x of u){const m=await this.adapter.load(x);if(m){if(Ue(f.activePeriod),f.archivePeriod){const j=`archive:${x}`,C=Ce(f.archivePeriod,s);await this.adapter.save(j,m,C),t++}if(f.deleteAfterArchive&&f.archivePeriod){const j=Ue(f.archivePeriod);new Date(s.getTime()+j)<s&&(await this.adapter.delete(`archive:${x}`),i++)}}}}return{archived:t,deleted:i}}async estimateUsageBytes(){return typeof window<"u"&&"storage"in navigator&&"estimate"in navigator.storage?(await navigator.storage.estimate()).usage??0:0}updateConfig(t){this.config=t,this.adapter=this.buildAdapter()}getConfig(){return this.config}}const Ye=[{dataType:"messages",activePeriod:{value:1,unit:"years"},archivePeriod:{value:2,unit:"years"},deleteAfterArchive:!0,userCanDelete:!0},{dataType:"attachments",activePeriod:{value:6,unit:"months"},archivePeriod:{value:1,unit:"years"},deleteAfterArchive:!0,userCanDelete:!0},{dataType:"recordings",activePeriod:{value:3,unit:"months"},archivePeriod:{value:6,unit:"months"},deleteAfterArchive:!0,userCanDelete:!0},{dataType:"whiteboard-snapshots",activePeriod:{value:1,unit:"years"},deleteAfterArchive:!1,userCanDelete:!0},{dataType:"transcripts",activePeriod:{value:1,unit:"years"},archivePeriod:{value:2,unit:"years"},deleteAfterArchive:!0,userCanDelete:!0},{dataType:"documents",activePeriod:{value:3,unit:"years"},deleteAfterArchive:!1,userCanDelete:!0},{dataType:"call-logs",activePeriod:{value:90,unit:"days"},deleteAfterArchive:!0,userCanDelete:!1},{dataType:"audit-logs",activePeriod:{value:2,unit:"years"},deleteAfterArchive:!1,userCanDelete:!1,legalHoldEnabled:!0}],De=new Map;function gt(n,t,i){return De.has(n)||De.set(n,new ht(t,i)),De.get(n)}function Ot(n){De.delete(n)}const Ze=["#e91e63","#9c27b0","#3f51b5","#2196f3","#00bcd4","#4caf50","#ff9800","#ff5722","#795548","#607d8b"];function Wt(n){let t=0;for(let i=0;i<n.length;i++)t=t*31+n.charCodeAt(i)>>>0;return Ze[t%Ze.length]}function et(n,t,i){const s={...n},r=[...t];switch(i.type){case"object:add":case"object:update":{const o=i.payload;if(s[o.id]=o,r.length>0&&!r[0].objectIds.includes(o.id)){const c=o.layerId?r.find(f=>f.id===o.layerId)??r[0]:r[0];c.objectIds=[...c.objectIds,o.id]}break}case"object:delete":{const{id:o}=i.payload;delete s[o],r.forEach(c=>{c.objectIds=c.objectIds.filter(f=>f!==o)});break}case"object:move":{const{id:o,x:c,y:f}=i.payload;s[o]&&(s[o]={...s[o],x:c,y:f,updatedAt:i.timestamp});break}case"layer:add":{const o=i.payload;r.find(c=>c.id===o.id)||r.push(o);break}case"layer:update":{const o=i.payload,c=r.findIndex(f=>f.id===o.id);c!==-1&&(r[c]={...r[c],...o});break}case"layer:delete":{const{id:o}=i.payload,c=r.findIndex(f=>f.id===o);c!==-1&&r.splice(c,1);break}}return{objects:s,layers:r}}function Nt(n,t){switch(t.type){case"LOAD_SESSION":return{...n,session:t.session,undoStack:[],redoStack:[],isDirty:!1};case"SET_TOOL":return{...n,activeTool:t.tool};case"APPLY_OP":{const{op:i,local:s}=t,{objects:r,layers:o}=et(n.session.objects,n.session.layers,i),c={...n.session,objects:r,layers:o,updatedAt:i.timestamp},u=s&&["object:add","object:update","object:delete","object:move","layer:add","layer:update","layer:delete"].includes(i.type)?[...n.undoStack,[i]]:n.undoStack;return{...n,session:c,undoStack:u,redoStack:s?[]:n.redoStack,isDirty:!0}}case"UNDO":{if(n.undoStack.length===0)return n;const i=n.undoStack[n.undoStack.length-1],s=i.filter(c=>c.type==="object:add").map(c=>c.payload.id),r={...n.session.objects};s.forEach(c=>delete r[c]);const o=n.session.layers.map(c=>({...c,objectIds:c.objectIds.filter(f=>!s.includes(f))}));return{...n,session:{...n.session,objects:r,layers:o},undoStack:n.undoStack.slice(0,-1),redoStack:[i,...n.redoStack],isDirty:!0}}case"REDO":{if(n.redoStack.length===0)return n;const i=n.redoStack[0];let{objects:s,layers:r}={objects:n.session.objects,layers:n.session.layers};for(const o of i)({objects:s,layers:r}=et(s,r,o));return{...n,session:{...n.session,objects:s,layers:r},undoStack:[...n.undoStack,i],redoStack:n.redoStack.slice(1),isDirty:!0}}case"SET_SELECTION":return{...n,selectedObjectIds:t.ids};case"SET_DRAWING":return{...n,isDrawing:t.value};case"SET_PANNING":return{...n,isPanning:t.value};case"UPDATE_CURSOR":{const{userId:i,x:s,y:r}=t,o=n.session.collaborators[i];return o?{...n,session:{...n.session,collaborators:{...n.session.collaborators,[i]:{...o,cursorX:s,cursorY:r,lastSeenAt:new Date}}}}:n}case"REMOVE_COLLABORATOR":{const i={...n.session.collaborators};return delete i[t.userId],{...n,session:{...n.session,collaborators:i}}}case"SET_VIEWPORT":return{...n,session:{...n.session,viewport:t.viewport}};case"MARK_SAVED":return{...n,isDirty:!1,lastSavedAt:new Date};default:return n}}function yt(n){const{session:t,currentUser:i,onOperation:s,remoteOperations:r=[],readonly:o=!1,storageConfig:c,autoSaveMs:f=3e4}=n,[u,x]=a.useReducer(Nt,{session:t,activeTool:o?"select":"pen",selectedObjectIds:[],undoStack:[],redoStack:[],isDrawing:!1,isPanning:!1,isDirty:!1}),m=a.useRef(0),j=a.useRef(null),C=a.useRef(null);a.useEffect(()=>{c&&(C.current=gt(`wb_${t.id}`,c),C.current.loadWhiteboardSnapshot(t.id).then(I=>{I&&x({type:"LOAD_SESSION",session:I})}))},[t.id,c]),a.useEffect(()=>{if(!f||!C.current||!u.isDirty)return;const I=setTimeout(()=>{var W;(W=C.current)==null||W.saveWhiteboardSnapshot(u.session.id,u.session).then(()=>{x({type:"MARK_SAVED"})})},f);return()=>clearTimeout(I)},[u.isDirty,u.session,f]);const v=a.useRef(new Set);a.useEffect(()=>{for(const I of r)if(!v.current.has(I.id)&&I.userId!==i.id)if(v.current.add(I.id),I.type==="cursor:move"){const{x:W,y:B}=I.payload;x({type:"UPDATE_CURSOR",userId:I.userId,x:W,y:B})}else I.type==="viewport:sync"||x({type:"APPLY_OP",op:I,local:!1})},[r,i.id]);function R(I,W){return{id:`${i.id}_${++m.current}_${Date.now()}`,sessionId:u.session.id,type:I,userId:i.id,timestamp:new Date,payload:W}}const O=a.useCallback(I=>{o||x({type:"SET_TOOL",tool:I})},[o]),l=a.useCallback(I=>{if(o)return;const W=R("object:add",I);x({type:"APPLY_OP",op:W,local:!0}),s==null||s(W)},[o,s,u.session.id]),A=a.useCallback(I=>{if(o)return;const W=R("object:update",I);x({type:"APPLY_OP",op:W,local:!0}),s==null||s(W)},[o,s,u.session.id]),N=a.useCallback(I=>{if(!o){for(const W of I){const B=R("object:delete",{id:W});x({type:"APPLY_OP",op:B,local:!0}),s==null||s(B)}x({type:"SET_SELECTION",ids:[]})}},[o,s,u.session.id]),Y=a.useCallback(I=>{if(!o)for(const{id:W,x:B,y:M}of I){const d=R("object:move",{id:W,x:B,y:M});x({type:"APPLY_OP",op:d,local:!0}),s==null||s(d)}},[o,s,u.session.id]),H=a.useCallback(I=>{x({type:"SET_SELECTION",ids:I})},[]),D=a.useCallback(()=>{o||x({type:"UNDO"})},[o]),$=a.useCallback(()=>{o||x({type:"REDO"})},[o]),U=a.useCallback(I=>{x({type:"SET_VIEWPORT",viewport:I});const W=R("viewport:sync",I);s==null||s(W)},[s,u.session.id]),E=a.useCallback((I,W)=>{if(j.current)return;j.current=setTimeout(()=>{j.current=null},50);const B=R("cursor:move",{x:I,y:W});s==null||s(B)},[s,u.session.id]),_=a.useCallback(I=>{if(o)return;const W={id:`layer_${Date.now()}`,name:I,visible:!0,locked:!1,objectIds:[]},B=R("layer:add",W);x({type:"APPLY_OP",op:B,local:!0}),s==null||s(B)},[o,s,u.session.id]),S=a.useCallback(I=>{if(o)return;const W=R("layer:update",I);x({type:"APPLY_OP",op:W,local:!0}),s==null||s(W)},[o,s,u.session.id]),h=a.useCallback(I=>{if(o)return;const W=R("layer:delete",{id:I});x({type:"APPLY_OP",op:W,local:!0}),s==null||s(W)},[o,s,u.session.id]),k=a.useCallback(I=>{const W={user:I,cursorX:0,cursorY:0,color:Wt(I.id),selectedObjectIds:[],activeTool:"pen",lastSeenAt:new Date};x({type:"APPLY_OP",op:R("cursor:move",W),local:!1})},[]),F=a.useCallback(I=>{x({type:"REMOVE_COLLABORATOR",userId:I})},[]),J=a.useCallback(async()=>{C.current&&(await C.current.saveWhiteboardSnapshot(u.session.id,u.session),x({type:"MARK_SAVED"}))},[u.session]);return{session:u.session,activeTool:u.activeTool,selectedObjectIds:u.selectedObjectIds,isDrawing:u.isDrawing,isPanning:u.isPanning,isDirty:u.isDirty,lastSavedAt:u.lastSavedAt,canUndo:u.undoStack.length>0,canRedo:u.redoStack.length>0,collaborators:Object.values(u.session.collaborators),objects:Object.values(u.session.objects),layers:u.session.layers,viewport:u.session.viewport,setTool:O,addObject:l,updateObject:A,deleteObjects:N,moveObjects:Y,setSelection:H,undo:D,redo:$,setViewport:U,broadcastCursor:E,addLayer:_,updateLayer:S,deleteLayer:h,registerCollaborator:k,removeCollaborator:F,saveNow:J}}const Lt=[{id:"select",label:"Select",icon:"โ†–",group:"select"},{id:"laser",label:"Laser",icon:"๐Ÿ”ด",group:"select"},{id:"pen",label:"Pen",icon:"โœ๏ธ",group:"draw"},{id:"highlighter",label:"Highlight",icon:"๐Ÿ–Š๏ธ",group:"draw"},{id:"eraser",label:"Eraser",icon:"โฌœ",group:"draw"},{id:"line",label:"Line",icon:"โ•ฑ",group:"shape"},{id:"arrow",label:"Arrow",icon:"โ†’",group:"shape"},{id:"rect",label:"Rectangle",icon:"โ–ก",group:"shape"},{id:"ellipse",label:"Ellipse",icon:"โ—‹",group:"shape"},{id:"triangle",label:"Triangle",icon:"โ–ณ",group:"shape"},{id:"frame",label:"Frame",icon:"โฌš",group:"shape"},{id:"text",label:"Text",icon:"T",group:"insert"},{id:"sticky",label:"Sticky",icon:"๐Ÿ“",group:"insert"},{id:"image",label:"Image",icon:"๐Ÿ–ผ๏ธ",group:"insert"}];function Te(){return`${Date.now()}_${Math.random().toString(36).slice(2,8)}`}function $e(n,t,i){return{sx:n*i.scale+i.x,sy:t*i.scale+i.y}}function $t(n,t,i){return{wx:(n-i.x)/i.scale,wy:(t-i.y)/i.scale}}function Bt(n,t){return Math.hypot(t.x-n.x,t.y-n.y)}function Mt(n,t){if(!(t.points.length<2)){n.save(),n.globalAlpha=t.opacity,n.strokeStyle=t.color,n.lineWidth=t.strokeWidth,n.lineCap="round",n.lineJoin="round",t.tool==="highlighter"&&(n.globalCompositeOperation="multiply"),n.beginPath(),n.moveTo(t.points[0].x,t.points[0].y);for(let i=1;i<t.points.length;i++){const s={x:(t.points[i-1].x+t.points[i].x)/2,y:(t.points[i-1].y+t.points[i].y)/2};n.quadraticCurveTo(t.points[i-1].x,t.points[i-1].y,s.x,s.y)}n.stroke(),n.restore()}}function Ut(n,t){switch(n.save(),n.globalAlpha=t.opacity,n.strokeStyle=t.strokeColor,n.lineWidth=t.strokeWidth,t.fillColor&&(n.fillStyle=t.fillColor),n.translate(t.x+t.width/2,t.y+t.height/2),n.rotate(t.rotation*Math.PI/180),n.beginPath(),t.shape){case"rect":n.rect(-t.width/2,-t.height/2,t.width,t.height);break;case"ellipse":n.ellipse(0,0,t.width/2,t.height/2,0,0,Math.PI*2);break;case"triangle":{const i=t.width/2,s=t.height/2;n.moveTo(0,-s),n.lineTo(i,s),n.lineTo(-i,s),n.closePath();break}case"diamond":{const i=t.width/2,s=t.height/2;n.moveTo(0,-s),n.lineTo(i,0),n.lineTo(0,s),n.lineTo(-i,0),n.closePath();break}}t.fillColor&&n.fill(),n.stroke(),n.restore()}function _t(n,t){if(n.save(),n.translate(t.x+t.width/2,t.y+t.height/2),n.rotate(t.rotation*Math.PI/180),n.font=`${t.fontStyle} ${t.fontWeight} ${t.fontSize}px ${t.fontFamily}`,n.fillStyle=t.color,n.textAlign=t.textAlign,n.textBaseline="middle",t.backgroundColor){const i=n.measureText(t.text),s=4;n.fillStyle=t.backgroundColor,n.fillRect(-i.width/2-s,-t.fontSize/2-s,i.width+s*2,t.fontSize+s*2),n.fillStyle=t.color}n.fillText(t.text,0,0),n.restore()}function Ft(n,t){n.save(),n.translate(t.x,t.y),n.rotate(t.rotation*Math.PI/180),n.shadowColor="rgba(0,0,0,0.15)",n.shadowBlur=8,n.shadowOffsetY=3,n.fillStyle=t.backgroundColor,n.fillRect(0,0,t.width,t.height),n.shadowColor="transparent",n.fillStyle=t.textColor,n.font=`${t.fontSize}px sans-serif`,n.textAlign="left",n.textBaseline="top";const i=10,s=t.width-i*2,r=t.fontSize*1.4,o=t.text.split(" ");let c="",f=i;for(const u of o){const x=c?`${c} ${u}`:u;n.measureText(x).width>s&&c?(n.fillText(c,i,f),c=u,f+=r):c=x}c&&n.fillText(c,i,f),n.restore()}function Kt(n,t){if(!(t.points.length<2)){if(n.save(),n.strokeStyle=t.strokeColor,n.lineWidth=t.strokeWidth,n.lineCap="round",n.beginPath(),n.moveTo(t.points[0].x,t.points[0].y),t.curved&&t.points.length>2){for(let i=1;i<t.points.length-1;i++){const s=t.points[i],r={x:(s.x+t.points[i+1].x)/2,y:(s.y+t.points[i+1].y)/2};n.quadraticCurveTo(s.x,s.y,r.x,r.y)}n.lineTo(t.points[t.points.length-1].x,t.points[t.points.length-1].y)}else for(let i=1;i<t.points.length;i++)n.lineTo(t.points[i].x,t.points[i].y);if(n.stroke(),t.arrowEnd==="arrow"){const i=t.points[t.points.length-1],s=t.points[t.points.length-2],r=Math.atan2(i.y-s.y,i.x-s.x),o=12;n.beginPath(),n.moveTo(i.x,i.y),n.lineTo(i.x-o*Math.cos(r-Math.PI/6),i.y-o*Math.sin(r-Math.PI/6)),n.moveTo(i.x,i.y),n.lineTo(i.x-o*Math.cos(r+Math.PI/6),i.y-o*Math.sin(r+Math.PI/6)),n.stroke()}n.restore()}}function Yt(n,t){n.save(),n.strokeStyle=t.borderColor??"#aaa",n.lineWidth=2,n.setLineDash([8,4]),t.backgroundColor&&(n.fillStyle=t.backgroundColor,n.fillRect(t.x,t.y,t.width,t.height)),n.strokeRect(t.x,t.y,t.width,t.height),n.setLineDash([]),n.fillStyle="#555",n.font="bold 13px sans-serif",n.fillText(t.name,t.x+8,t.y-6),n.restore()}function Ht(n,t){if(t.visible)switch(t.type){case"stroke":return Mt(n,t);case"shape":return Ut(n,t);case"text":return _t(n,t);case"sticky":return Ft(n,t);case"connector":return Kt(n,t);case"frame":return Yt(n,t);case"image":{const i=t,s=new Image;s.src=i.dataUrl??i.url,n.save(),n.translate(i.x+i.width/2,i.y+i.height/2),n.rotate(i.rotation*Math.PI/180),n.drawImage(s,-i.width/2,-i.height/2,i.width,i.height),n.restore();break}}}function He({session:n,currentUser:t,onOperation:i,remoteOperations:s=[],readonly:r=!1,enableLayers:o=!0,enableExport:c=!0,enableLaserPointer:f=!0,enableVectorEditor:u=!1,enableDiagramEditor:x=!1,onExport:m,onSessionUpdate:j,storageConfig:C,className:v,style:R,"data-testid":O}){const l=yt({session:n,currentUser:t,onOperation:i,remoteOperations:s,readonly:r,storageConfig:C,autoSaveMs:3e4}),A=a.useRef(null);a.useRef(null);const N=a.useRef(0),[Y,H]=a.useState(!1),[D,$]=a.useState("#1a1a1a"),[U,E]=a.useState(3),[_,S]=a.useState(void 0),[h,k]=a.useState(18),[F,J]=a.useState("#fef08a"),[I,W]=a.useState(null),[B,M]=a.useState(null),d=a.useRef({active:!1,startX:0,startY:0,currentPoints:[],currentId:"",spaceDown:!1,panStart:null,laserPoints:[]}),y=a.useCallback((p,g,T,P)=>{if(!l.session.gridEnabled)return;const z=l.session.gridSize*g.scale,G=(g.x%z+z)%z,b=(g.y%z+z)%z;p.strokeStyle="rgba(180,180,200,0.35)",p.lineWidth=1,p.beginPath();for(let w=G;w<T;w+=z)p.moveTo(w,0),p.lineTo(w,P);for(let w=b;w<P;w+=z)p.moveTo(0,w),p.lineTo(T,w);p.stroke()},[l.session.gridEnabled,l.session.gridSize]),q=a.useCallback((p,g)=>{for(const T of l.collaborators){if(T.user.id===t.id)continue;const{sx:P,sy:z}=$e(T.cursorX,T.cursorY,g);p.save(),p.fillStyle=T.color,p.beginPath(),p.moveTo(P,z),p.lineTo(P+14,z+5),p.lineTo(P+5,z+14),p.closePath(),p.fill(),p.fillStyle=T.color,p.font="bold 11px sans-serif",p.fillText(T.user.name,P+16,z+14),p.restore()}},[l.collaborators,t.id]),X=a.useCallback((p,g)=>{if(l.selectedObjectIds.length!==0)for(const T of l.selectedObjectIds){const P=l.session.objects[T];if(!P)continue;const{sx:z,sy:G}=$e(P.x,P.y,g),b=P.width*g.scale,w=P.height*g.scale;p.strokeStyle="#4f8df9",p.lineWidth=1.5,p.setLineDash([4,2]),p.strokeRect(z-2,G-2,b+4,w+4),p.setLineDash([]);const ee=[[z-2,G-2],[z+b+2,G-2],[z-2,G+w+2],[z+b+2,G+w+2]];p.fillStyle="#fff",p.strokeStyle="#4f8df9",p.lineWidth=1.5;for(const[Z,ie]of ee)p.fillRect(Z-4,ie-4,8,8),p.strokeRect(Z-4,ie-4,8,8)}},[l.selectedObjectIds,l.session.objects]),Q=a.useCallback(()=>{const p=A.current;if(!p)return;const g=p.getContext("2d");if(!g)return;const{width:T,height:P}=p,z=l.viewport;g.clearRect(0,0,T,P),g.fillStyle=l.session.backgroundColor,g.fillRect(0,0,T,P),y(g,z,T,P),g.save();const G=Object.values(l.session.objects).filter(b=>b.visible).sort((b,w)=>b.zIndex-w.zIndex);g.translate(z.x,z.y),g.scale(z.scale,z.scale);for(const b of G)Ht(g,b);if(d.current.active&&d.current.currentPoints.length>1){const b=d.current.currentPoints;g.strokeStyle=D,g.lineWidth=U,g.lineCap="round",g.lineJoin="round",g.beginPath(),g.moveTo(b[0].x,b[0].y);for(let w=1;w<b.length;w++)g.lineTo(b[w].x,b[w].y);g.stroke()}if(d.current.laserPoints.length>1&&l.activeTool==="laser"){const b=d.current.laserPoints;g.strokeStyle="#ff2c2c",g.lineWidth=3,g.globalAlpha=.7,g.beginPath(),g.moveTo(b[0].x,b[0].y);for(let w=1;w<b.length;w++)g.lineTo(b[w].x,b[w].y);g.stroke(),g.globalAlpha=1}g.restore(),X(g,z),q(g,z)},[l.session,l.viewport,l.activeTool,y,q,X,D,U]);a.useLayoutEffect(()=>{function p(){Q(),N.current=requestAnimationFrame(p)}return N.current=requestAnimationFrame(p),()=>cancelAnimationFrame(N.current)},[Q]),a.useEffect(()=>{const p=A.current;if(!p)return;const g=new ResizeObserver(()=>{p.width=p.offsetWidth,p.height=p.offsetHeight});return g.observe(p),p.width=p.offsetWidth,p.height=p.offsetHeight,()=>g.disconnect()},[]),a.useEffect(()=>{function p(g){if(g.target.tagName==="INPUT"||g.target.tagName==="TEXTAREA"||(g.code==="Space"&&(d.current.spaceDown=g.type==="keydown",g.preventDefault()),g.type!=="keydown"))return;(g.ctrlKey||g.metaKey)&&(g.key==="z"&&(g.preventDefault(),l.undo()),g.key==="y"&&(g.preventDefault(),l.redo()),g.key==="s"&&(g.preventDefault(),l.saveNow()),g.key==="a"&&(g.preventDefault(),l.setSelection(Object.keys(l.session.objects)))),(g.key==="Delete"||g.key==="Backspace")&&l.selectedObjectIds.length>0&&l.deleteObjects(l.selectedObjectIds);const T={v:"select",p:"pen",h:"highlighter",e:"eraser",r:"rect",c:"ellipse",t:"text",s:"sticky",i:"image",a:"arrow",l:"laser"};!g.ctrlKey&&!g.metaKey&&T[g.key]&&l.setTool(T[g.key])}return window.addEventListener("keydown",p),window.addEventListener("keyup",p),()=>{window.removeEventListener("keydown",p),window.removeEventListener("keyup",p)}},[l]);const K=a.useCallback(p=>{const g=A.current.getBoundingClientRect(),T=p.clientX-g.left,P=p.clientY-g.top,{wx:z,wy:G}=$t(T,P,l.viewport);return{x:z,y:G,pressure:p.pressure??.5}},[l.viewport]),re=a.useCallback(p=>{if(r)return;p.target.setPointerCapture(p.pointerId);const g=K(p);if(p.button===1||d.current.spaceDown){d.current.panStart={x:p.clientX,y:p.clientY,vpX:l.viewport.x,vpY:l.viewport.y};return}const T=l.activeTool;if(d.current.active=!0,d.current.startX=g.x,d.current.startY=g.y,d.current.currentId=Te(),T==="pen"||T==="highlighter")d.current.currentPoints=[g];else if(T==="laser")d.current.laserPoints=[g];else if(T==="select"){const P=Object.values(l.session.objects).filter(z=>z.visible&&z.x<=g.x&&z.y<=g.y&&z.x+z.width>=g.x&&z.y+z.height>=g.y).sort((z,G)=>G.zIndex-z.zIndex)[0];P?p.shiftKey?l.setSelection([...l.selectedObjectIds,P.id]):l.setSelection([P.id]):l.setSelection([])}},[r,K,l]),oe=a.useCallback(p=>{const g=K(p);if(l.broadcastCursor(g.x,g.y),d.current.panStart){const{x:P,y:z,vpX:G,vpY:b}=d.current.panStart;l.setViewport({...l.viewport,x:G+(p.clientX-P),y:b+(p.clientY-z)});return}if(!d.current.active)return;const T=l.activeTool;if(T==="pen"||T==="highlighter"){const P=d.current.currentPoints;(P.length===0||Bt(P[P.length-1],g)>2)&&(d.current.currentPoints=[...P,g])}else if(T==="laser"){const P=d.current.laserPoints;d.current.laserPoints=[...P.slice(-40),g]}else if(T==="select"&&l.selectedObjectIds.length>0){const P=g.x-d.current.startX,z=g.y-d.current.startY;d.current.startX=g.x,d.current.startY=g.y,l.moveObjects(l.selectedObjectIds.map(G=>{const b=l.session.objects[G];return{id:G,x:b.x+P,y:b.y+z}}))}},[K,l]),ue=a.useCallback(p=>{if(d.current.panStart){d.current.panStart=null;return}if(!d.current.active)return;const g=K(p),T=l.activeTool,P=d.current.startX,z=d.current.startY,G=d.current.currentId,b=new Date;switch(d.current.active=!1,T){case"pen":case"highlighter":{const w=d.current.currentPoints;if(w.length<2)break;const ee={id:G,type:"stroke",x:Math.min(...w.map(Z=>Z.x)),y:Math.min(...w.map(Z=>Z.y)),width:Math.max(...w.map(Z=>Z.x))-Math.min(...w.map(Z=>Z.x)),height:Math.max(...w.map(Z=>Z.y))-Math.min(...w.map(Z=>Z.y)),rotation:0,zIndex:Object.keys(l.session.objects).length,locked:!1,visible:!0,createdBy:t.id,createdAt:b,points:w,color:D,strokeWidth:U,opacity:T==="highlighter"?.4:1,tool:T};l.addObject(ee),d.current.currentPoints=[];break}case"rect":case"ellipse":case"triangle":{const w=Math.min(P,g.x),ee=Math.min(z,g.y),Z=Math.abs(g.x-P),ie=Math.abs(g.y-z);if(Z<5||ie<5)break;const ce={rect:"rect",ellipse:"ellipse",triangle:"triangle"},ge={id:G,type:"shape",x:w,y:ee,width:Z,height:ie,rotation:0,zIndex:Object.keys(l.session.objects).length,locked:!1,visible:!0,createdBy:t.id,createdAt:b,shape:ce[T],fillColor:_,strokeColor:D,strokeWidth:U,opacity:1};l.addObject(ge);break}case"arrow":case"line":{const w={id:G,type:"connector",x:Math.min(P,g.x),y:Math.min(z,g.y),width:Math.abs(g.x-P),height:Math.abs(g.y-z),rotation:0,zIndex:Object.keys(l.session.objects).length,locked:!1,visible:!0,createdBy:t.id,createdAt:b,points:[{x:P,y:z},{x:g.x,y:g.y}],strokeColor:D,strokeWidth:U,arrowStart:"none",arrowEnd:T==="arrow"?"arrow":"none",curved:!1};l.addObject(w);break}case"text":{const w={id:G,type:"text",x:g.x,y:g.y,width:200,height:h+10,rotation:0,zIndex:Object.keys(l.session.objects).length,locked:!1,visible:!0,createdBy:t.id,createdAt:b,text:"Click to edit",fontSize:h,fontFamily:"sans-serif",fontWeight:"normal",fontStyle:"normal",textAlign:"left",color:D};l.addObject(w),W(G);break}case"sticky":{const w={id:G,type:"sticky",x:g.x,y:g.y,width:180,height:150,rotation:0,zIndex:Object.keys(l.session.objects).length,locked:!1,visible:!0,createdBy:t.id,createdAt:b,text:"Note...",backgroundColor:F,textColor:"#333",fontSize:14,authorId:t.id};l.addObject(w),W(G);break}case"frame":{const w=Math.min(P,g.x),ee=Math.min(z,g.y),Z=Math.abs(g.x-P),ie=Math.abs(g.y-z);if(Z<20||ie<20)break;const ce={id:G,type:"frame",x:w,y:ee,width:Z,height:ie,rotation:0,zIndex:0,locked:!1,visible:!0,createdBy:t.id,createdAt:b,name:`Frame ${Object.keys(l.session.objects).length+1}`,childIds:[],borderColor:"#8888"};l.addObject(ce);break}case"image":{const w=document.createElement("input");w.type="file",w.accept="image/*",w.onchange=()=>{var ie;const ee=(ie=w.files)==null?void 0:ie[0];if(!ee)return;const Z=new FileReader;Z.onload=ce=>{var ze;const ge=(ze=ce.target)==null?void 0:ze.result,pe=new Image;pe.onload=()=>{const Re=400/pe.width,ye={id:Te(),type:"image",x:g.x,y:g.y,width:pe.width*Re,height:pe.height*Re,rotation:0,zIndex:Object.keys(l.session.objects).length,locked:!1,visible:!0,createdBy:t.id,createdAt:new Date,url:ge,dataUrl:ge,originalWidth:pe.width,originalHeight:pe.height};l.addObject(ye)},pe.src=ge},Z.readAsDataURL(ee)},w.click();break}}},[K,l,t.id,D,U,_,h,F]),le=a.useCallback(p=>{if(p.preventDefault(),!p.ctrlKey&&!p.metaKey){l.setViewport({...l.viewport,x:l.viewport.x-p.deltaX,y:l.viewport.y-p.deltaY});return}const g=A.current.getBoundingClientRect(),T=p.clientX-g.left,P=p.clientY-g.top,G=-p.deltaY>0?1.1:.9,b=Math.min(8,Math.max(.1,l.viewport.scale*G));l.setViewport({scale:b,x:T-(T-l.viewport.x)*(b/l.viewport.scale),y:P-(P-l.viewport.y)*(b/l.viewport.scale)})},[l]),L=a.useCallback(p=>{if(p==="json"){const z=JSON.stringify(l.session,null,2);m==null||m("json",z);const G=document.createElement("a");G.href=URL.createObjectURL(new Blob([z],{type:"application/json"})),G.download=`${l.session.title}.json`,G.click();return}const g=A.current;if(!g)return;const T=g.toDataURL("image/png");m==null||m("png",T);const P=document.createElement("a");P.href=T,P.download=`${l.session.title}.png`,P.click()},[l.session,m]);a.useEffect(()=>{j==null||j(l.session)},[l.session,j]),a.useEffect(()=>{function p(g){if(g.clipboardData){for(const T of Array.from(g.clipboardData.items))if(T.type.startsWith("image/")){const P=T.getAsFile();if(!P)continue;const z=new FileReader;z.onload=G=>{var ee;const b=(ee=G.target)==null?void 0:ee.result,w=new Image;w.onload=()=>{const ie=400/w.width,ce={id:Te(),type:"image",x:100,y:100,width:w.width*ie,height:w.height*ie,rotation:0,zIndex:Object.keys(l.session.objects).length,locked:!1,visible:!0,createdBy:t.id,createdAt:new Date,url:b,dataUrl:b,originalWidth:w.width,originalHeight:w.height};l.addObject(ce)},w.src=b},z.readAsDataURL(P);break}}}return window.addEventListener("paste",p),()=>window.removeEventListener("paste",p)},[l,t.id]);const V=I?l.session.objects[I]:null,ne=a.useMemo(()=>V?$e(V.x,V.y,l.viewport):null,[V,l.viewport]),se=["#fef08a","#bfdbfe","#bbf7d0","#fecaca","#e9d5ff","#fed7aa"],ae=a.useMemo(()=>{var g;const p={};for(const T of Lt)(p[g=T.group]??(p[g]=[])).push(T);return Object.values(p)},[]);return e.jsxs("div",{className:v,"data-testid":O,style:{position:"relative",display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden",background:"#f5f5f5",fontFamily:"system-ui, sans-serif",...R},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"6px 10px",background:"#fff",borderBottom:"1px solid #e5e7eb",flexShrink:0,flexWrap:"wrap"},children:[ae.map((p,g)=>e.jsxs(a.Fragment,{children:[g>0&&e.jsx("div",{style:{width:1,height:24,background:"#e5e7eb",margin:"0 2px"}}),p.map(T=>e.jsx("button",{onClick:()=>l.setTool(T.id),title:`${T.label}`,style:{padding:"4px 7px",border:`1.5px solid ${l.activeTool===T.id?"#6366f1":"transparent"}`,borderRadius:6,background:l.activeTool===T.id?"#eef2ff":"transparent",cursor:"pointer",fontSize:15,minWidth:30,color:l.activeTool===T.id?"#4f46e5":"#374151"},children:T.icon},T.id))]},g)),e.jsx("div",{style:{width:1,height:24,background:"#e5e7eb",margin:"0 4px"}}),e.jsxs("label",{title:"Stroke color",style:{display:"flex",alignItems:"center",gap:4,cursor:"pointer"},children:[e.jsx("span",{style:{fontSize:11,color:"#6b7280"},children:"Color"}),e.jsx("input",{type:"color",value:D,onChange:p=>$(p.target.value),style:{width:28,height:28,border:"none",padding:0,borderRadius:4,cursor:"pointer"}})]}),e.jsxs("label",{title:"Fill color",style:{display:"flex",alignItems:"center",gap:4,cursor:"pointer"},children:[e.jsx("span",{style:{fontSize:11,color:"#6b7280"},children:"Fill"}),e.jsx("input",{type:"color",value:_??"#ffffff",onChange:p=>S(p.target.value==="#ffffff"?void 0:p.target.value),style:{width:28,height:28,border:"none",padding:0,borderRadius:4,cursor:"pointer"}}),e.jsx("button",{onClick:()=>S(void 0),style:{fontSize:11,padding:"1px 5px",border:"1px solid #e5e7eb",borderRadius:4,cursor:"pointer",background:_?"#fff":"#f3f4f6"},children:"No fill"})]}),e.jsxs("label",{style:{display:"flex",alignItems:"center",gap:4},children:[e.jsx("span",{style:{fontSize:11,color:"#6b7280"},children:"Width"}),e.jsx("input",{type:"range",min:1,max:24,step:1,value:U,onChange:p=>E(Number(p.target.value)),style:{width:70}}),e.jsx("span",{style:{fontSize:11,color:"#6b7280",minWidth:20},children:U})]}),l.activeTool==="sticky"&&e.jsxs(e.Fragment,{children:[e.jsx("span",{style:{fontSize:11,color:"#6b7280"},children:"Note:"}),se.map(p=>e.jsx("button",{onClick:()=>J(p),style:{width:20,height:20,background:p,border:`2px solid ${F===p?"#6366f1":"#e5e7eb"}`,borderRadius:4,cursor:"pointer"}},p))]}),e.jsx("div",{style:{flex:1}}),e.jsx("button",{onClick:l.undo,disabled:!l.canUndo,title:"Undo (Ctrl+Z)",style:de(!l.canUndo),children:"โ†ฉ"}),e.jsx("button",{onClick:l.redo,disabled:!l.canRedo,title:"Redo (Ctrl+Y)",style:de(!l.canRedo),children:"โ†ช"}),e.jsx("div",{style:{width:1,height:24,background:"#e5e7eb"}}),e.jsxs("span",{style:{fontSize:11,color:"#6b7280",minWidth:42,textAlign:"center"},children:[Math.round(l.viewport.scale*100),"%"]}),e.jsx("button",{onClick:()=>l.setViewport({x:0,y:0,scale:1}),style:de(),title:"Reset zoom",children:"โŠ™"}),o&&e.jsx("button",{onClick:()=>H(p=>!p),style:de(!1,Y),title:"Layers",children:"โŠž"}),e.jsx("button",{onClick:()=>{const p={id:Te(),sessionId:l.session.id,type:"object:update",userId:t.id,timestamp:new Date,payload:{...l.session,gridEnabled:!l.session.gridEnabled}};i==null||i(p)},style:de(!1,l.session.gridEnabled),title:"Toggle grid",children:"#"}),u&&e.jsx("button",{onClick:()=>M(p=>p==="vector"?null:"vector"),style:de(!1,B==="vector"),title:"Vector Editor panel",children:"Vฮต"}),x&&e.jsx("button",{onClick:()=>M(p=>p==="diagram"?null:"diagram"),style:de(!1,B==="diagram"),title:"Diagram Editor panel",children:"โ—‡"}),e.jsx("button",{onClick:()=>void l.saveNow(),style:de(),title:"Save (Ctrl+S)",children:l.isDirty?"๐Ÿ’พ*":"๐Ÿ’พ"}),c&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>L("png"),style:de(),title:"Export PNG",children:"PNGโ†“"}),e.jsx("button",{onClick:()=>L("json"),style:de(),title:"Export JSON",children:"JSONโ†“"})]})]}),e.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden",position:"relative"},children:[e.jsx("canvas",{ref:A,style:{flex:1,display:"block",cursor:Xt(l.activeTool,d.current.spaceDown)},onPointerDown:re,onPointerMove:oe,onPointerUp:ue,onWheel:le,onContextMenu:p=>p.preventDefault()}),o&&Y&&e.jsx(Gt,{layers:l.layers,objects:l.session.objects,onAdd:()=>l.addLayer(`Layer ${l.layers.length+1}`),onUpdate:p=>l.updateLayer(p),onDelete:p=>l.deleteLayer(p)}),B&&e.jsxs("div",{style:{position:"absolute",right:Y?220:0,top:0,bottom:0,width:360,background:"#fff",borderLeft:"1px solid #e5e7eb",padding:12,overflowY:"auto"},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[e.jsx("strong",{style:{fontSize:13},children:B==="vector"?"Vector Editor":"Diagram Editor"}),e.jsx("button",{onClick:()=>M(null),style:{border:"none",background:"none",cursor:"pointer",fontSize:16},children:"โœ•"})]}),e.jsx("p",{style:{fontSize:12,color:"#6b7280"},children:B==="vector"?"Render the full @nice2dev/ui-graphics VectorEditor here. Pass the whiteboard's StorageConfig to persist edits and onOperation to broadcast strokes in real time.":"Render the full @nice2dev/ui-diagrams NiceDiagramEditor here. Pass the collaborativeDiagram YDoc to enable simultaneous multi-user editing."}),e.jsx("div",{id:`wb-integration-${B}`,style:{width:"100%",height:400}})]})]}),l.collaborators.length>1&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"4px 12px",background:"#fff",borderTop:"1px solid #f3f4f6",fontSize:11,color:"#6b7280",flexShrink:0},children:[e.jsx("span",{children:"Collaborators:"}),l.collaborators.map(p=>e.jsxs("span",{style:{display:"flex",alignItems:"center",gap:3},children:[e.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:p.color,display:"inline-block"}}),p.user.name]},p.user.id)),l.isDirty&&e.jsx("span",{style:{marginLeft:"auto",color:"#f59e0b"},children:"โ— unsaved"}),l.lastSavedAt&&!l.isDirty&&e.jsxs("span",{style:{marginLeft:"auto",color:"#10b981"},children:["โœ“ Saved ",l.lastSavedAt.toLocaleTimeString()]})]}),V&&ne&&e.jsx("textarea",{autoFocus:!0,defaultValue:V.text,onBlur:p=>{const g={...V,text:p.target.value,updatedAt:new Date,updatedBy:t.id};l.updateObject(g),W(null)},style:{position:"absolute",left:ne.sx,top:ne.sy,minWidth:V.width*l.viewport.scale,minHeight:V.height*l.viewport.scale,fontSize:(V.fontSize??14)*l.viewport.scale,fontFamily:"sans-serif",background:V.type==="sticky"?V.backgroundColor:"rgba(255,255,255,0.95)",border:"2px solid #6366f1",borderRadius:4,padding:6,resize:"both",zIndex:1e3,color:V.type==="sticky"?V.textColor:V.color}})]})}function Gt({layers:n,objects:t,onAdd:i,onUpdate:s,onDelete:r}){return e.jsxs("div",{style:{width:200,borderLeft:"1px solid #e5e7eb",background:"#fff",display:"flex",flexDirection:"column",padding:8,gap:4,overflowY:"auto",flexShrink:0},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:4},children:[e.jsx("strong",{style:{fontSize:12,color:"#374151"},children:"Layers"}),e.jsx("button",{onClick:i,style:{fontSize:16,border:"none",background:"none",cursor:"pointer",color:"#6366f1"},title:"Add layer",children:"+"})]}),[...n].reverse().map(o=>e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"4px 6px",borderRadius:5,background:"#f9fafb",opacity:o.visible?1:.5},children:[e.jsx("button",{onClick:()=>s({id:o.id,visible:!o.visible}),title:"Toggle visibility",style:{border:"none",background:"none",cursor:"pointer",fontSize:13,padding:0,color:o.visible?"#374151":"#9ca3af"},children:o.visible?"๐Ÿ‘":"๐Ÿšซ"}),e.jsx("button",{onClick:()=>s({id:o.id,locked:!o.locked}),title:"Toggle lock",style:{border:"none",background:"none",cursor:"pointer",fontSize:13,padding:0},children:o.locked?"๐Ÿ”’":"๐Ÿ”“"}),e.jsx("span",{style:{flex:1,fontSize:11,color:"#374151",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o.name}),e.jsx("span",{style:{fontSize:10,color:"#9ca3af"},children:o.objectIds.filter(c=>c in t).length}),n.length>1&&e.jsx("button",{onClick:()=>r(o.id),title:"Delete layer",style:{border:"none",background:"none",cursor:"pointer",fontSize:13,padding:0,color:"#ef4444"},children:"ร—"})]},o.id))]})}function de(n=!1,t=!1){return{padding:"4px 8px",border:`1.5px solid ${t?"#6366f1":"#e5e7eb"}`,borderRadius:6,background:t?"#eef2ff":"#fff",cursor:n?"default":"pointer",opacity:n?.35:1,fontSize:13,color:t?"#4f46e5":"#374151",fontWeight:t?600:400}}function Xt(n,t){if(t)return"grab";switch(n){case"pen":case"highlighter":return"crosshair";case"eraser":return"cell";case"select":return"default";case"text":return"text";case"laser":return"none";default:return"crosshair"}}function be({icon:n,label:t,active:i,badge:s,onClick:r}){return e.jsxs("div",{style:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",gap:2},children:[e.jsxs("button",{title:t,onClick:r,style:{width:44,height:44,borderRadius:10,border:"none",background:i?"rgba(255,255,255,0.2)":"transparent",color:"#fff",fontSize:20,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",position:"relative"},children:[n,s!=null&&s>0&&e.jsx("span",{style:{position:"absolute",top:4,right:4,background:"#ef4444",color:"#fff",borderRadius:10,fontSize:9,padding:"1px 4px",fontWeight:700,lineHeight:1.4},children:s>99?"99+":s})]}),e.jsx("span",{style:{fontSize:9,color:"rgba(255,255,255,0.7)",letterSpacing:"0.03em"},children:t})]})}function qt({team:n,activeChannelId:t,onSelectChannel:i}){var c;const[s,r]=a.useState(!1),o=n.channels.reduce((f,u)=>f+u.unreadCount,0);return e.jsxs("div",{className:"nice-workspace-team",children:[e.jsxs("button",{onClick:()=>r(f=>!f),style:{display:"flex",alignItems:"center",gap:6,padding:"6px 10px",background:"none",border:"none",width:"100%",textAlign:"left",cursor:"pointer",color:"#374151",fontSize:13,fontWeight:600},children:[e.jsx("span",{style:{fontSize:10,color:"#9ca3af"},children:s?"โ–ถ":"โ–ผ"}),e.jsx("div",{style:{width:20,height:20,borderRadius:4,background:n.avatarUrl?`url(${n.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:9,flexShrink:0},children:!n.avatarUrl&&((c=n.name[0])==null?void 0:c.toUpperCase())}),e.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n.name}),!s&&o>0&&e.jsx("span",{style:{background:"#6366f1",color:"#fff",borderRadius:10,fontSize:9,padding:"1px 5px",fontWeight:700},children:o})]}),!s&&n.channels.map(f=>e.jsxs("button",{onClick:()=>i(n.id,f.id),style:{display:"flex",alignItems:"center",gap:6,padding:"5px 10px 5px 34px",background:f.id===t?"#ede9fe":"transparent",border:"none",width:"100%",textAlign:"left",cursor:"pointer",color:f.unreadCount>0?"#111827":"#4b5563",fontSize:13,fontWeight:f.unreadCount>0?600:400},children:[e.jsx("span",{style:{color:"#9ca3af",fontSize:12},children:f.isPrivate?"๐Ÿ”’":"#"}),e.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:f.name}),f.mentionCount>0&&e.jsxs("span",{style:{background:"#ef4444",color:"#fff",borderRadius:10,fontSize:9,padding:"1px 5px",fontWeight:700},children:["@",f.mentionCount]}),f.unreadCount>0&&f.mentionCount===0&&e.jsx("span",{style:{background:"#6366f1",color:"#fff",borderRadius:10,fontSize:9,padding:"1px 4px",fontWeight:700},children:f.unreadCount})]},f.id))]})}function Vt({conversation:n,partner:t,isActive:i,onClick:s}){var o;const r=(t==null?void 0:t.displayName)??(t==null?void 0:t.name)??n.name??"Group";return e.jsxs("button",{onClick:s,style:{display:"flex",alignItems:"center",gap:8,padding:"5px 10px",background:i?"#ede9fe":"transparent",border:"none",width:"100%",textAlign:"left",cursor:"pointer",color:n.unreadCount>0?"#111827":"#4b5563",fontWeight:n.unreadCount>0?600:400,fontSize:13},children:[e.jsxs("div",{style:{position:"relative",flexShrink:0},children:[e.jsx("div",{style:{width:24,height:24,borderRadius:"50%",background:t!=null&&t.avatarUrl?`url(${t.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:10},children:!(t!=null&&t.avatarUrl)&&((o=r[0])==null?void 0:o.toUpperCase())}),t&&e.jsx(fe,{status:t.presence.status,size:"xs",style:{position:"absolute",bottom:-1,right:-1}})]}),e.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r}),n.unreadCount>0&&e.jsx("span",{style:{background:"#6366f1",color:"#fff",borderRadius:10,fontSize:9,padding:"1px 4px",fontWeight:700,flexShrink:0},children:n.unreadCount})]})}function xt({currentUser:n,users:t,teams:i,conversations:s,messages:r,activeCall:o,incomingCall:c,meetings:f,transport:u,rtcConfig:x,enableCalls:m=!0,enableMeetings:j=!0,enableScreenSharing:C=!0,enableWhiteboard:v=!1,storageConfig:R,onSendMessage:O,onEditMessage:l,onDeleteMessage:A,onReactToMessage:N,onPinMessage:Y,onLoadMoreMessages:H,onMarkAsRead:D,onStartCall:$,onAcceptCall:U,onDeclineCall:E,onEndCall:_,onMuteAudio:S,onMuteVideo:h,onStartScreenShare:k,onStopScreenShare:F,className:J,style:I,id:W,"data-testid":B}){var z,G;const[M,d]=a.useState("teams"),[y,q]=a.useState(null),[X,Q]=a.useState(""),[K,re]=a.useState(null),oe=()=>{K||re({id:`wb-workspace-${Date.now()}`,title:"Team Whiteboard",objects:{},layers:[{id:"layer-0",name:"Layer 1",visible:!0,locked:!1,objectIds:[]}],collaborators:{},viewport:{x:0,y:0,scale:1},width:4e3,height:3e3,backgroundColor:"#ffffff",gridEnabled:!0,gridSize:20,snapEnabled:!0,createdAt:new Date,updatedAt:new Date,ownerId:n.id,permissions:"edit"})},ue=a.useMemo(()=>{const b=new Map;return t.forEach(w=>b.set(w.id,w)),b},[t]),le=a.useMemo(()=>_e(s),[s]),L=a.useMemo(()=>s.reduce((b,w)=>b+w.mentionCount,0),[s]),V=a.useMemo(()=>{if(y!=null&&y.channelId)for(const b of i){const w=b.channels.find(ee=>ee.id===y.channelId);if(w)return w}},[i,y]),ne=a.useMemo(()=>{if(y!=null&&y.teamId)return i.find(b=>b.id===y.teamId)},[i,y]),se=a.useMemo(()=>s.find(b=>b.id===(y==null?void 0:y.conversationId))??null,[s,y]),ae=a.useMemo(()=>{const b=(y==null?void 0:y.channelId)??(y==null?void 0:y.conversationId);return b?r[b]??[]:[]},[r,y]),p=!!c&&!o,g=!!o,T=a.useMemo(()=>s.filter(b=>b.type==="dm"||b.type==="group"),[s]),P=a.useMemo(()=>{if(!X)return T;const b=X.toLowerCase();return T.filter(w=>{var Z;const ee=ue.get(w.participantIds.find(ie=>ie!==n.id)??"");return(ee==null?void 0:ee.name.toLowerCase().includes(b))||((Z=w.name)==null?void 0:Z.toLowerCase().includes(b))})},[T,X,ue,n.id]);return e.jsxs("div",{id:W,"data-testid":B,className:`nice-teams-workspace${J?` ${J}`:""}`,style:{display:"flex",height:"100%",overflow:"hidden",background:"#fff",position:"relative",...I},children:[e.jsxs("div",{className:"nice-workspace-nav-rail",style:{width:64,flexShrink:0,background:"#4f46e5",display:"flex",flexDirection:"column",alignItems:"center",padding:"12px 0",gap:6},children:[e.jsx("div",{style:{width:36,height:36,borderRadius:"50%",background:n.avatarUrl?`url(${n.avatarUrl}) center/cover`:"#818cf8",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:14,marginBottom:8,flexShrink:0},children:!n.avatarUrl&&((z=n.name[0])==null?void 0:z.toUpperCase())}),e.jsx(be,{icon:"โšก",label:"Activity",active:M==="activity",badge:L,onClick:()=>d("activity")}),e.jsx(be,{icon:"๐Ÿ’ฌ",label:"Chat",active:M==="chat",badge:le,onClick:()=>d("chat")}),e.jsx(be,{icon:"๐Ÿ‘ฅ",label:"Teams",active:M==="teams",onClick:()=>d("teams")}),m&&e.jsx(be,{icon:"๐Ÿ“ž",label:"Calls",active:M==="calls",onClick:()=>d("calls")}),j&&e.jsx(be,{icon:"๐Ÿ“…",label:"Meetings",active:M==="meetings",onClick:()=>d("meetings")}),e.jsx(be,{icon:"๐Ÿ“",label:"Files",active:M==="files",onClick:()=>d("files")}),v&&e.jsx(be,{icon:"๐Ÿ–Š๏ธ",label:"Board",active:M==="whiteboard",onClick:()=>{d("whiteboard"),oe()}})]}),e.jsxs("div",{className:"nice-workspace-sidebar",style:{width:240,flexShrink:0,borderRight:"1px solid #e5e7eb",display:"flex",flexDirection:"column",background:"#fafafa",overflow:"hidden"},children:[e.jsxs("div",{style:{padding:"12px 10px 8px",flexShrink:0},children:[e.jsx("div",{style:{fontWeight:700,fontSize:15,color:"#374151",marginBottom:8,textTransform:"capitalize"},children:M}),e.jsx("input",{type:"search",value:X,onChange:b=>Q(b.target.value),placeholder:`Search ${M}โ€ฆ`,style:{width:"100%",padding:"5px 10px",border:"1px solid #e5e7eb",borderRadius:16,fontSize:12,outline:"none",boxSizing:"border-box",background:"#fff"}})]}),e.jsxs("div",{style:{flex:1,overflowY:"auto"},children:[M==="teams"&&e.jsx(e.Fragment,{children:i.map(b=>e.jsx(qt,{team:b,activeChannelId:y==null?void 0:y.channelId,onSelectChannel:(w,ee)=>{q({type:"channel",teamId:w,channelId:ee}),D==null||D(ee)}},b.id))}),M==="chat"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{padding:"4px 10px",fontSize:11,color:"#9ca3af",fontWeight:600,letterSpacing:"0.05em"},children:"DIRECT MESSAGES"}),P.map(b=>{const w=ue.get(b.participantIds.find(ee=>ee!==n.id)??"");return e.jsx(Vt,{conversation:b,partner:w,isActive:(y==null?void 0:y.conversationId)===b.id,onClick:()=>{q({type:b.type==="dm"?"dm":"group",conversationId:b.id}),D==null||D(b.id)}},b.id)})]}),M==="activity"&&e.jsxs("div",{style:{padding:12},children:[s.filter(b=>b.unreadCount>0).map(b=>e.jsxs("button",{onClick:()=>{d(b.type==="channel"?"teams":"chat"),q({type:b.type==="channel"?"channel":"dm",conversationId:b.id})},style:{display:"block",width:"100%",textAlign:"left",padding:"6px 0",background:"none",border:"none",cursor:"pointer",fontSize:13,color:"#374151"},children:[e.jsx("strong",{children:b.name??"Conversation"})," โ€” ",b.unreadCount," unread"]},b.id)),s.every(b=>b.unreadCount===0)&&e.jsx("p",{style:{color:"#9ca3af",fontSize:13,textAlign:"center",marginTop:24},children:"All caught up โœ“"})]}),M==="calls"&&e.jsxs("div",{style:{padding:12,display:"flex",flexDirection:"column",gap:8},children:[e.jsx("button",{onClick:()=>$==null?void 0:$(t.map(b=>b.id).filter(b=>b!==n.id),"audio"),style:{background:"#6366f1",color:"#fff",border:"none",borderRadius:8,padding:"8px 12px",cursor:"pointer",fontSize:13,fontWeight:600},children:"๐Ÿ“ž New audio call"}),e.jsx("button",{onClick:()=>$==null?void 0:$(t.map(b=>b.id).filter(b=>b!==n.id),"video"),style:{background:"#6366f1",color:"#fff",border:"none",borderRadius:8,padding:"8px 12px",cursor:"pointer",fontSize:13,fontWeight:600},children:"๐Ÿ“น New video call"})]}),M==="meetings"&&e.jsxs("div",{style:{padding:12},children:[(f??[]).map(b=>e.jsxs("div",{style:{padding:"8px 10px",border:"1px solid #e5e7eb",borderRadius:8,marginBottom:8},children:[e.jsx("div",{style:{fontWeight:600,fontSize:13},children:b.title}),e.jsx("div",{style:{fontSize:11,color:"#6b7280",marginTop:2},children:b.scheduledStart.toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}),e.jsx("button",{onClick:()=>{},style:{marginTop:6,background:"#6366f1",color:"#fff",border:"none",borderRadius:6,padding:"3px 10px",fontSize:12,cursor:"pointer"},children:"Join"})]},b.id)),(f??[]).length===0&&e.jsx("p",{style:{color:"#9ca3af",fontSize:13,textAlign:"center",marginTop:24},children:"No upcoming meetings"})]}),M==="files"&&e.jsx("div",{style:{padding:12},children:e.jsx("p",{style:{color:"#9ca3af",fontSize:13,textAlign:"center",marginTop:24},children:"No files shared yet"})}),M==="whiteboard"&&e.jsxs("div",{style:{padding:12},children:[e.jsxs("button",{onClick:()=>oe(),style:{width:"100%",background:"#6366f1",color:"#fff",border:"none",borderRadius:8,padding:"8px 12px",cursor:"pointer",fontSize:13,fontWeight:600,marginBottom:8},children:["๐Ÿ–Š๏ธ ",K?"Open whiteboard":"New whiteboard"]}),K&&e.jsxs("div",{style:{padding:"6px 10px",border:"1px solid #e5e7eb",borderRadius:6,fontSize:12,color:"#374151"},children:[e.jsx("div",{style:{fontWeight:500},children:K.title}),e.jsxs("div",{style:{color:"#9ca3af",marginTop:2},children:[Object.keys(K.objects).length," objects"]})]})]})]})]}),e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"hidden",position:"relative"},children:[(y==null?void 0:y.type)==="channel"&&V?e.jsx(pt,{channel:V,messages:ae,users:(ne==null?void 0:ne.members)??t,currentUser:n,team:ne,onSendMessage:O,onEditMessage:l,onDeleteMessage:A,onReactToMessage:N,onPinMessage:Y,onLoadMoreMessages:H,onStartCall:m?$:void 0,style:{height:"100%"}}):((y==null?void 0:y.type)==="dm"||(y==null?void 0:y.type)==="group")&&se?e.jsx(Ie,{conversation:se,messages:ae,users:t,currentUser:n,onSendMessage:O,onEditMessage:l,onDeleteMessage:A,onReactToMessage:N,onPinMessage:Y,onLoadMoreMessages:H,onStartCall:m?$:void 0,style:{height:"100%"}}):M==="whiteboard"&&K?e.jsx(He,{session:K,currentUser:n,storageConfig:R,onSessionUpdate:b=>re(b),style:{height:"100%"}}):e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",color:"#9ca3af",gap:12},children:[e.jsx("span",{style:{fontSize:56},children:M==="teams"?"๐Ÿ‘ฅ":M==="chat"?"๐Ÿ’ฌ":M==="calls"?"๐Ÿ“ž":M==="whiteboard"?"๐Ÿ–Š๏ธ":"โšก"}),e.jsx("span",{style:{fontSize:17,fontWeight:500},children:M==="teams"?"Select a channel to get started":M==="chat"?"Select a conversation":M==="calls"?"Start or join a call":M==="whiteboard"?'Click "New whiteboard" to start':"Nothing selected"})]}),g&&o&&e.jsx("div",{style:{position:"absolute",inset:0,zIndex:50},children:o.participants.length>2?e.jsx(Ke,{session:o,currentUser:n,enableScreenSharing:C,onEndCall:_,onMuteAudio:S,onMuteVideo:h,onStartScreenShare:k,onStopScreenShare:F}):e.jsx(Fe,{session:o,currentUser:n,enableScreenSharing:C,onEndCall:_,onMuteAudio:S,onMuteVideo:h,onStartScreenShare:k,onStopScreenShare:F})})]}),p&&c&&e.jsxs("div",{style:{position:"absolute",top:16,right:16,width:300,background:"#1f2937",borderRadius:12,padding:16,boxShadow:"0 8px 32px rgba(0,0,0,0.4)",zIndex:100,color:"#fff"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:12},children:[e.jsx("div",{style:{width:40,height:40,borderRadius:"50%",background:c.caller.avatarUrl?`url(${c.caller.avatarUrl}) center/cover`:"#6366f1",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontWeight:700,fontSize:16},children:!c.caller.avatarUrl&&((G=c.caller.name[0])==null?void 0:G.toUpperCase())}),e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600},children:c.caller.displayName??c.caller.name}),e.jsxs("div",{style:{fontSize:12,color:"rgba(255,255,255,0.6)"},children:["Incoming ",c.callType," call"]})]})]}),e.jsxs("div",{style:{display:"flex",gap:8},children:[e.jsx("button",{onClick:()=>E==null?void 0:E(c.callId),style:{flex:1,background:"#ef4444",color:"#fff",border:"none",borderRadius:8,padding:"8px",cursor:"pointer",fontWeight:600,fontSize:13},children:"๐Ÿ“ต Decline"}),e.jsx("button",{onClick:()=>U==null?void 0:U(c.callId),style:{flex:1,background:"#22c55e",color:"#fff",border:"none",borderRadius:8,padding:"8px",cursor:"pointer",fontWeight:600,fontSize:13},children:"๐Ÿ“ž Accept"})]})]})]})}const Jt={"bottom-right":{bottom:24,right:24},"bottom-left":{bottom:24,left:24},"top-right":{top:24,right:24},"top-left":{top:24,left:24}};function Qt({props:n,onExpand:t}){const[i,s]=a.useState(!1),{bubblePosition:r="bottom-right",bubbleLabel:o,currentUser:c,users:f,conversations:u=[],messages:x={},onSendMessage:m,onReactToMessage:j,onPinMessage:C,onDeleteMessage:v,onEditMessage:R,onLoadMoreMessages:O,onStartCall:l}=n,A=Jt[r],N=u[0]??null,Y=N?x[N.id]??[]:[];return e.jsxs("div",{style:{position:"fixed",zIndex:9999,...A},children:[i&&N&&e.jsxs("div",{style:{position:"absolute",bottom:r.startsWith("bottom")?64:void 0,top:r.startsWith("top")?64:void 0,right:r.endsWith("right")?0:void 0,left:r.endsWith("left")?0:void 0,width:360,height:500,background:"#fff",borderRadius:16,boxShadow:"0 8px 40px rgba(0,0,0,0.18)",overflow:"hidden",display:"flex",flexDirection:"column"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px",background:"#6366f1",color:"#fff",flexShrink:0},children:[e.jsx("span",{style:{fontWeight:700,fontSize:15},children:o??"Chat"}),e.jsxs("div",{style:{display:"flex",gap:4},children:[e.jsx("button",{onClick:()=>t("messenger"),title:"Open full chat",style:{background:"rgba(255,255,255,0.15)",border:"none",borderRadius:6,padding:"3px 7px",color:"#fff",cursor:"pointer",fontSize:13},children:"โŠž"}),e.jsx("button",{onClick:()=>s(!1),style:{background:"none",border:"none",color:"#fff",cursor:"pointer",fontSize:18},children:"ร—"})]})]}),e.jsx(Ie,{conversation:N,messages:Y,users:f,currentUser:c,showHeader:!1,onSendMessage:m,onEditMessage:R,onDeleteMessage:v,onReactToMessage:j,onPinMessage:C,onLoadMoreMessages:O,onStartCall:l,style:{flex:1}})]}),e.jsx("button",{onClick:()=>s(H=>!H),style:{width:56,height:56,borderRadius:"50%",background:"#6366f1",border:"none",boxShadow:"0 4px 16px rgba(99,102,241,0.4)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:24,color:"#fff",transition:"transform 0.15s"},title:i?"Close chat":o??"Open chat",children:i?"โœ•":"๐Ÿ’ฌ"})]})}function Zt({call:n,onAccept:t,onDecline:i}){return e.jsxs("div",{style:{position:"fixed",top:16,left:"50%",transform:"translateX(-50%)",zIndex:9998,background:"#1f2937",color:"#fff",borderRadius:12,padding:"12px 20px",boxShadow:"0 8px 32px rgba(0,0,0,0.4)",display:"flex",alignItems:"center",gap:16,minWidth:280},children:[e.jsx("div",{style:{fontSize:28},children:n.callType==="video"?"๐Ÿ“น":"๐Ÿ“ž"}),e.jsxs("div",{style:{flex:1},children:[e.jsx("div",{style:{fontWeight:600,fontSize:14},children:n.caller.displayName??n.caller.name}),e.jsxs("div",{style:{fontSize:12,color:"rgba(255,255,255,0.6)"},children:["Incoming ",n.callType," callโ€ฆ"]})]}),e.jsx("button",{onClick:i,style:{background:"#ef4444",border:"none",borderRadius:"50%",width:38,height:38,cursor:"pointer",fontSize:18,color:"#fff"},title:"Decline",children:"๐Ÿ“ต"}),e.jsx("button",{onClick:t,style:{background:"#22c55e",border:"none",borderRadius:"50%",width:38,height:38,cursor:"pointer",fontSize:18,color:"#fff"},title:"Accept",children:"๐Ÿ“ž"})]})}function bt(n){const{mode:t,currentUser:i,users:s,conversations:r=[],messages:o={},teams:c=[],meetings:f,activeCall:u,incomingCall:x,transport:m="webrtc",rtcConfig:j,onSendMessage:C,onEditMessage:v,onDeleteMessage:R,onReactToMessage:O,onPinMessage:l,onLoadMoreMessages:A,onMarkAsRead:N,onStartCall:Y,onAcceptCall:H,onDeclineCall:D,onEndCall:$,onMuteAudio:U,onMuteVideo:E,onStartScreenShare:_,onStopScreenShare:S,onRaiseHand:h,onModeChange:k,enableScreenSharing:F=!0,enableMeetings:J=!0,enableWhiteboard:I=!1,storageConfig:W,encryptionConfig:B,className:M,style:d,id:y,"data-testid":q}=n,[X,Q]=a.useState(t),[K,re]=a.useState(null),oe=a.useMemo(()=>({id:`wb-${i.id}-${Date.now()}`,title:"Whiteboard",objects:{},layers:[{id:"layer-0",name:"Layer 1",visible:!0,locked:!1,objectIds:[]}],collaborators:{},viewport:{x:0,y:0,scale:1},width:4e3,height:3e3,backgroundColor:"#ffffff",gridEnabled:!0,gridSize:20,snapEnabled:!0,createdAt:new Date,updatedAt:new Date,ownerId:i.id,permissions:"edit"}),[i.id]),[ue,le]=a.useState(u??null),[L,V]=a.useState(x??null),ne=u??ue,se=x??L;a.useEffect(()=>{Q(t)},[t]),a.useEffect(()=>{u!==void 0&&le(u)},[u]),a.useEffect(()=>{x!==void 0&&V(x)},[x]);const{state:ae,startCall:p,acceptCall:g,declineCall:T,endCall:P,toggleMic:z,toggleCamera:G,startScreenShare:b,stopScreenShare:w}=ft({currentUser:i,transport:m,rtcConfig:j,onCallEnded:te=>{le(null),$==null||$(te)},onIncomingCall:te=>{V(te)}}),ee=a.useCallback(te=>{Q(te),k==null||k(te)},[k]),Z=a.useCallback(async(te,Ve)=>{if(Y){await Y(te,Ve);return}const wt=await p(te,Ve);le(wt),Q(te.length>2?"conference":"call")},[Y,p]),ie=a.useCallback(async()=>{var te;H&&se?await H(se.callId):await g(),V(null),Q((te=ae.activeCall)!=null&&te.participants&&ae.activeCall.participants.length>2?"conference":"call")},[H,se,g,ae.activeCall]),ce=a.useCallback(()=>{D&&se?D(se.callId):T(),V(null)},[D,se,T]),ge=a.useCallback(te=>{$?$(te):P(),le(null),Q(t)},[$,P,t]),pe=a.useCallback(te=>{z(),U==null||U(te)},[z,U]),ze=a.useCallback(te=>{G(),E==null||E(te)},[G,E]),qe=a.useCallback(async()=>{await b(),await(_==null?void 0:_())},[b,_]),Re=a.useCallback(()=>{w(),S==null||S()},[w,S]),ye={onSendMessage:C,onEditMessage:v,onDeleteMessage:R,onReactToMessage:O,onPinMessage:l,onLoadMoreMessages:A,onMarkAsRead:N,onStartCall:Z,onEndCall:ge,onMuteAudio:pe,onMuteVideo:ze,onStartScreenShare:qe,onStopScreenShare:Re,onRaiseHand:h},he=ne?ne.participants.length>2?"conference":"call":X,jt={width:"100%",height:"100%",position:"relative",...d};return e.jsxs("div",{id:y,"data-testid":q,className:`nice-communication nice-communication--${he}${M?` ${M}`:""}`,style:jt,children:[se&&he!=="workspace"&&e.jsx(Zt,{call:se,onAccept:ie,onDecline:ce}),he==="bubble"&&e.jsx(Qt,{props:n,onExpand:ee}),he==="chat"&&r.length>0&&e.jsx(Ie,{conversation:r[0],messages:o[r[0].id]??[],users:s,currentUser:i,...ye,style:{height:"100%"}}),he==="messenger"&&e.jsx(ut,{conversations:r,messages:o,users:s,currentUser:i,teams:c,...ye,onAcceptCall:H,onDeclineCall:D,style:{height:"100%"}}),he==="workspace"&&e.jsx(xt,{currentUser:i,users:s,teams:c,conversations:r,messages:o,meetings:f,activeCall:ne??void 0,incomingCall:se??void 0,transport:m,rtcConfig:j,enableCalls:!0,enableMeetings:J,enableScreenSharing:F,...ye,onAcceptCall:ie,onDeclineCall:ce,style:{height:"100%"}}),he==="call"&&ne&&e.jsx(Fe,{session:ne,currentUser:i,localStream:ae.localStream??void 0,enableScreenSharing:F,...ye,style:{height:"100%"}}),he==="conference"&&ne&&e.jsx(Ke,{session:ne,currentUser:i,localStream:ae.localStream??void 0,enableScreenSharing:F,...ye,style:{height:"100%"}}),he==="whiteboard"&&I&&e.jsx(He,{session:K??oe,currentUser:i,storageConfig:W,onSessionUpdate:te=>re(te),style:{height:"100%"}})]})}const en={messages:"Messages",attachments:"Attachments","whiteboard-snapshots":"Whiteboard snapshots",recordings:"Recordings",transcripts:"Transcripts",documents:"Documents","call-logs":"Call logs","audit-logs":"Audit logs"},tt={none:"No encryption","AES-GCM-128":"AES-GCM 128-bit","AES-GCM-256":"AES-GCM 256-bit (recommended)","ChaCha20-Poly1305":"ChaCha20-Poly1305","E2E-ECDH-P384":"End-to-End ECDH P-384"},tn={messages:"Messages",attachments:"Attachments",whiteboard:"Whiteboard",recordings:"Recordings",documents:"Documents",calls:"Calls (metadata)",presence:"Presence data",all:"Everything"},nn=["days","weeks","months","years","forever"];function nt(n){if(n===0)return"0 B";const t=1024,i=["B","KB","MB","GB"],s=Math.floor(Math.log(n)/Math.log(t));return`${(n/Math.pow(t,s)).toFixed(1)} ${i[s]}`}function it({value:n,onChange:t,disabled:i=!1}){return e.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[e.jsx("input",{type:"number",min:1,max:9999,value:n.unit==="forever"?"":n.value,disabled:i||n.unit==="forever",onChange:s=>t({...n,value:Math.max(1,Number(s.target.value))}),style:{width:60,padding:"3px 6px",border:"1px solid #d1d5db",borderRadius:5,fontSize:12}}),e.jsx("select",{value:n.unit,disabled:i,onChange:s=>t({...n,unit:s.target.value}),style:{padding:"3px 6px",border:"1px solid #d1d5db",borderRadius:5,fontSize:12},children:nn.map(s=>e.jsx("option",{value:s,children:s},s))})]})}function sn({config:n,onChange:t}){const i=n.retentionRules.length>0?n.retentionRules:Ye;function s(r,o){const c=i.map(f=>f.dataType===r?{...f,...o}:f);t({...n,retentionRules:c})}return e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[e.jsx("p",{style:{fontSize:12,color:"#6b7280",margin:0},children:"Configure how long each data type is retained before archiving and eventual deletion. Legal-hold prevents deletion regardless of retention rules."}),e.jsxs("div",{style:we,children:[e.jsx("label",{style:ke,children:"Storage provider"}),e.jsxs("select",{value:n.provider,onChange:r=>t({...n,provider:r.target.value}),style:me,children:[e.jsx("option",{value:"indexeddb",children:"IndexedDB (browser)"}),e.jsx("option",{value:"localstorage",children:"LocalStorage (browser)"}),e.jsx("option",{value:"server",children:"Server"}),e.jsx("option",{value:"custom",children:"Custom adapter"})]})]}),n.provider==="server"&&e.jsxs("div",{style:we,children:[e.jsx("label",{style:ke,children:"Server URL"}),e.jsx("input",{type:"url",value:n.serverUrl??"",onChange:r=>t({...n,serverUrl:r.target.value}),placeholder:"https://your-api.example.com/storage",style:me})]}),e.jsx("hr",{style:{border:"none",borderTop:"1px solid #e5e7eb",margin:"4px 0"}}),e.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12},children:[e.jsx("thead",{children:e.jsxs("tr",{style:{background:"#f9fafb"},children:[e.jsx("th",{style:Se,children:"Data type"}),e.jsx("th",{style:Se,children:"Active period"}),e.jsx("th",{style:Se,children:"Archive after"}),e.jsx("th",{style:Se,children:"Auto-delete"}),e.jsx("th",{style:Se,children:"User can delete"}),e.jsx("th",{style:Se,children:"Legal hold"})]})}),e.jsx("tbody",{children:i.map(r=>e.jsxs("tr",{style:{borderBottom:"1px solid #f3f4f6"},children:[e.jsx("td",{style:{...je,fontWeight:500,color:"#374151"},children:en[r.dataType]}),e.jsx("td",{style:je,children:e.jsx(it,{value:r.activePeriod,onChange:o=>s(r.dataType,{activePeriod:o})})}),e.jsx("td",{style:je,children:r.archivePeriod?e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[e.jsx(it,{value:r.archivePeriod,onChange:o=>s(r.dataType,{archivePeriod:o})}),e.jsx("button",{onClick:()=>s(r.dataType,{archivePeriod:void 0}),style:{border:"none",background:"none",cursor:"pointer",color:"#ef4444",fontSize:14},title:"Remove archive period",children:"ร—"})]}):e.jsx("button",{onClick:()=>s(r.dataType,{archivePeriod:{value:1,unit:"years"}}),style:{fontSize:11,padding:"2px 8px",border:"1px dashed #d1d5db",borderRadius:4,cursor:"pointer",background:"none",color:"#6b7280"},children:"+ Add"})}),e.jsx("td",{style:{...je,textAlign:"center"},children:e.jsx("input",{type:"checkbox",checked:r.deleteAfterArchive,disabled:!r.archivePeriod,onChange:o=>s(r.dataType,{deleteAfterArchive:o.target.checked})})}),e.jsx("td",{style:{...je,textAlign:"center"},children:e.jsx("input",{type:"checkbox",checked:r.userCanDelete,onChange:o=>s(r.dataType,{userCanDelete:o.target.checked})})}),e.jsx("td",{style:{...je,textAlign:"center"},children:e.jsx("input",{type:"checkbox",checked:r.legalHoldEnabled??!1,onChange:o=>s(r.dataType,{legalHoldEnabled:o.target.checked})})})]},r.dataType))})]}),e.jsxs("div",{style:we,children:[e.jsx("label",{style:ke,children:"Storage quota"}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx("input",{type:"number",min:0,value:n.quota?Math.round(n.quota/1024/1024):0,onChange:r=>t({...n,quota:Number(r.target.value)*1024*1024}),style:{...me,width:90},placeholder:"0"}),e.jsx("span",{style:{fontSize:12,color:"#6b7280"},children:"MB (0 = unlimited)"})]})]})]})}function rn({config:n,onChange:t}){const i=["messages","attachments","whiteboard","recordings","documents","calls","presence"];return e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[e.jsx("p",{style:{fontSize:12,color:"#6b7280",margin:0},children:"Configure encryption at rest and in transit. E2E-ECDH ensures only participants can read conversations โ€” the server never sees plaintext."}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[e.jsxs("label",{style:{position:"relative",display:"inline-block",width:42,height:22},children:[e.jsx("input",{type:"checkbox",checked:n.enabled,onChange:s=>t({...n,enabled:s.target.checked}),style:{opacity:0,width:0,height:0}}),e.jsx("span",{style:{position:"absolute",inset:0,borderRadius:22,background:n.enabled?"#6366f1":"#d1d5db",transition:"background 0.2s",cursor:"pointer"},children:e.jsx("span",{style:{position:"absolute",width:16,height:16,top:3,left:n.enabled?23:3,background:"#fff",borderRadius:"50%",transition:"left 0.2s"}})})]}),e.jsx("span",{style:{fontSize:13,fontWeight:500,color:"#374151"},children:n.enabled?"๐Ÿ”’ Encryption enabled":"๐Ÿ”“ Encryption disabled"})]}),n.enabled&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:we,children:[e.jsx("label",{style:ke,children:"Default algorithm"}),e.jsx("select",{value:n.defaultAlgorithm,onChange:s=>t({...n,defaultAlgorithm:s.target.value}),style:me,children:Object.entries(tt).map(([s,r])=>e.jsx("option",{value:s,children:r},s))})]}),n.defaultAlgorithm==="E2E-ECDH-P384"&&e.jsxs("div",{style:we,children:[e.jsx("label",{style:ke,children:"Key exchange URL"}),e.jsx("input",{type:"url",value:n.keyExchangeUrl??"",onChange:s=>t({...n,keyExchangeUrl:s.target.value}),placeholder:"wss://your-server/e2e-key-exchange",style:me}),e.jsx("span",{style:{fontSize:11,color:"#6b7280",marginTop:2},children:"WebSocket endpoint for ECDH public key exchange between participants."})]}),e.jsxs("div",{style:we,children:[e.jsx("label",{style:ke,children:"External key (base64, optional)"}),e.jsx("input",{type:"password",value:n.keyMaterial??"",onChange:s=>t({...n,keyMaterial:s.target.value||void 0}),placeholder:"Leave empty to auto-generate",style:me}),e.jsx("span",{style:{fontSize:11,color:"#6b7280",marginTop:2},children:"Provide a pre-shared key for symmetric algorithms. Leave empty for automatic key generation."})]}),e.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8,cursor:"pointer"},children:[e.jsx("input",{type:"checkbox",checked:n.showIndicator??!0,onChange:s=>t({...n,showIndicator:s.target.checked})}),e.jsx("span",{style:{fontSize:12,color:"#374151"},children:"Show lock indicator in messages"})]}),e.jsx("hr",{style:{border:"none",borderTop:"1px solid #e5e7eb",margin:"4px 0"}}),e.jsx("strong",{style:{fontSize:12,color:"#374151"},children:"Per-scope overrides"}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:i.map(s=>{var f;const r=(f=n.scopeOverrides)==null?void 0:f.find(u=>u.scope===s),o=(r==null?void 0:r.enabled)??!1,c=(r==null?void 0:r.algorithm)??n.defaultAlgorithm;return e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"6px 8px",background:"#f9fafb",borderRadius:6},children:[e.jsx("input",{type:"checkbox",checked:o,onChange:u=>{const x=[...(n.scopeOverrides??[]).filter(m=>m.scope!==s),{scope:s,algorithm:c,enabled:u.target.checked}];t({...n,scopeOverrides:x})}}),e.jsx("span",{style:{minWidth:120,fontSize:12,color:"#374151"},children:tn[s]}),e.jsx("select",{value:c,disabled:!o,onChange:u=>{const x=[...(n.scopeOverrides??[]).filter(m=>m.scope!==s),{scope:s,algorithm:u.target.value,enabled:o}];t({...n,scopeOverrides:x})},style:{...me,flex:1,opacity:o?1:.4},children:Object.entries(tt).map(([u,x])=>e.jsx("option",{value:u,children:x},u))})]},s)})})]})]})}function on({storageConfig:n,encryptionConfig:t,onStorageConfigChange:i,onEncryptionConfigChange:s,currentUsageBytes:r=0,showEncryption:o=!0,showRetention:c=!0,showQuota:f=!0,className:u,style:x,"data-testid":m}){const[j,C]=a.useState("retention"),v=t??{enabled:!1,defaultAlgorithm:"AES-GCM-256",showIndicator:!0},R={...n,retentionRules:n.retentionRules.length>0?n.retentionRules:Ye};return e.jsxs("div",{className:u,"data-testid":m,style:{display:"flex",flexDirection:"column",gap:16,padding:20,background:"#fff",borderRadius:10,border:"1px solid #e5e7eb",fontFamily:"system-ui, sans-serif",maxWidth:800,...x},children:[e.jsxs("div",{children:[e.jsx("h3",{style:{margin:0,fontSize:16,color:"#111827"},children:"Storage & Privacy"}),e.jsx("p",{style:{margin:"4px 0 0",fontSize:12,color:"#6b7280"},children:"Manage data retention, encryption, and storage settings."})]}),f&&n.quota&&n.quota>0&&e.jsxs("div",{children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:12,color:"#6b7280",marginBottom:4},children:[e.jsx("span",{children:"Storage used"}),e.jsxs("span",{children:[nt(r)," / ",nt(n.quota)]})]}),e.jsx("div",{style:{height:6,background:"#e5e7eb",borderRadius:3},children:e.jsx("div",{style:{width:`${Math.min(100,r/n.quota*100)}%`,height:"100%",background:r/n.quota>.9?"#ef4444":"#6366f1",borderRadius:3,transition:"width 0.3s"}})})]}),c&&o&&e.jsx("div",{style:{display:"flex",gap:0,borderBottom:"1px solid #e5e7eb"},children:["retention","encryption"].map(O=>e.jsx("button",{onClick:()=>C(O),style:{padding:"8px 18px",border:"none",borderBottom:`2px solid ${j===O?"#6366f1":"transparent"}`,background:"none",cursor:"pointer",fontSize:13,fontWeight:j===O?600:400,color:j===O?"#4f46e5":"#6b7280",marginBottom:-1},children:O==="retention"?"๐Ÿ“ฆ Retention":"๐Ÿ” Encryption"},O))}),e.jsxs("div",{children:[(j==="retention"||!o)&&c&&e.jsx(sn,{config:R,onChange:i??(()=>{})}),(j==="encryption"||!c)&&o&&e.jsx(rn,{config:v,onChange:s??(()=>{})})]})]})}const we={display:"flex",flexDirection:"column",gap:4},ke={fontSize:12,fontWeight:500,color:"#374151"},me={padding:"6px 8px",border:"1px solid #d1d5db",borderRadius:6,fontSize:13,color:"#111827",background:"#fff"},Se={padding:"6px 8px",textAlign:"left",fontSize:11,fontWeight:600,color:"#6b7280",borderBottom:"1px solid #e5e7eb"},je={padding:"8px 8px",verticalAlign:"middle"};function Oe(n){const t=Math.floor(n/1e3),i=Math.floor(t/60),s=Math.floor(i/60);return s>0?`${s}:${String(i%60).padStart(2,"0")}:${String(t%60).padStart(2,"0")}`:`${String(i).padStart(2,"0")}:${String(t%60).padStart(2,"0")}`}function ln(n){if(n===0)return"0 B";const t=1024,i=["B","KB","MB","GB"],s=Math.floor(Math.log(n)/Math.log(t));return`${(n/Math.pow(t,s)).toFixed(1)} ${i[s]}`}function an(n){return new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(n))}const cn={idle:{label:"Idle",bg:"#f3f4f6",fg:"#6b7280"},recording:{label:"โ— Recording",bg:"#fee2e2",fg:"#dc2626"},paused:{label:"โ€– Paused",bg:"#fef3c7",fg:"#d97706"},processing:{label:"โŒ› Processing",bg:"#ede9fe",fg:"#7c3aed"},ready:{label:"โœ“ Ready",bg:"#dcfce7",fg:"#16a34a"},failed:{label:"โœ• Failed",bg:"#fee2e2",fg:"#dc2626"}};function dn({segments:n,onClose:t,currentTimeMs:i=0}){return e.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,background:"rgba(0,0,0,0.5)",display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsxs("div",{style:{background:"#fff",borderRadius:12,width:"90%",maxWidth:640,maxHeight:"80vh",display:"flex",flexDirection:"column",boxShadow:"0 20px 40px rgba(0,0,0,0.2)",overflow:"hidden"},children:[e.jsxs("div",{style:{padding:"14px 18px",borderBottom:"1px solid #e5e7eb",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsx("strong",{style:{fontSize:14,color:"#111827"},children:"Transcript"}),e.jsx("button",{onClick:t,style:pn,children:"โœ•"})]}),e.jsx("div",{style:{flex:1,overflowY:"auto",padding:"12px 18px"},children:n.length===0?e.jsx("p",{style:{fontSize:13,color:"#9ca3af",textAlign:"center",padding:"32px 0"},children:"No transcript available."}):n.map(s=>{const r=i>=s.startMs&&i<s.endMs;return e.jsxs("div",{style:{marginBottom:12,padding:"8px 10px",borderRadius:6,background:r?"#eff6ff":"transparent",borderLeft:`3px solid ${r?"#3b82f6":"transparent"}`,transition:"background 0.2s"},children:[e.jsxs("div",{style:{display:"flex",gap:10,alignItems:"baseline",marginBottom:3},children:[e.jsx("span",{style:{fontSize:11,fontWeight:600,color:"#4f46e5"},children:s.speakerName}),e.jsxs("span",{style:{fontSize:10,color:"#9ca3af"},children:[Oe(s.startMs)," โ€“ ",Oe(s.endMs)]}),e.jsxs("span",{style:{fontSize:10,color:"#d1d5db"},children:[Math.round(s.confidence*100),"% conf."]})]}),e.jsx("p",{style:{margin:0,fontSize:13,color:"#374151",lineHeight:1.5},children:s.text})]},s.id)})})]})})}function mt({startedAt:n}){const[t,i]=a.useState(0);return a.useEffect(()=>{const s=new Date(n).getTime(),r=setInterval(()=>i(Date.now()-s),500);return()=>clearInterval(r)},[n]),e.jsx(e.Fragment,{children:Oe(t)})}function fn({rec:n,onDelete:t,onDownload:i}){const[s,r]=a.useState(!1),[o,c]=a.useState(0),f=a.useRef(null),u=cn[n.state],x=n.state==="recording"||n.state==="paused";return e.jsxs(e.Fragment,{children:[s&&n.transcript&&e.jsx(dn,{segments:n.transcript,currentTimeMs:o,onClose:()=>r(!1)}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 12px",borderBottom:"1px solid #f3f4f6",flexWrap:"wrap"},children:[e.jsx("div",{style:{fontSize:20},children:n.sessionType==="call"?"๐Ÿ“ž":n.sessionType==="meeting"?"๐ŸŽฅ":n.sessionType==="whiteboard"?"๐Ÿ–ผ๏ธ":"๐Ÿ–ฅ๏ธ"}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{fontSize:13,fontWeight:500,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n.title??`Recording ${n.id.slice(0,8)}`}),e.jsxs("div",{style:{fontSize:11,color:"#9ca3af",marginTop:2,display:"flex",gap:8},children:[e.jsx("span",{children:an(n.startedAt)}),e.jsx("span",{children:x?e.jsx(mt,{startedAt:n.startedAt}):n.durationMs!=null?Oe(n.durationMs):"โ€”"}),n.size!=null&&e.jsx("span",{children:ln(n.size)}),e.jsxs("span",{children:[n.participants.length," participants"]})]})]}),e.jsx("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:20,background:u.bg,color:u.fg,fontWeight:500,whiteSpace:"nowrap"},children:u.label}),n.url&&n.state==="ready"&&e.jsx("audio",{ref:f,src:n.url,controls:!0,onTimeUpdate:()=>{f.current&&c(f.current.currentTime*1e3)},style:{height:32,maxWidth:180}}),e.jsxs("div",{style:{display:"flex",gap:4},children:[n.transcript&&n.transcript.length>0&&e.jsx("button",{onClick:()=>r(!0),style:Be,title:"View transcript",children:"๐Ÿ“"}),n.state==="ready"&&e.jsx("button",{onClick:()=>i(n),style:Be,title:"Download",children:"โฌ‡"}),e.jsx("button",{onClick:()=>t(n.id),style:{...Be,color:"#ef4444"},title:"Delete",children:"๐Ÿ—‘"})]})]})]})}function un({recordings:n,onRecordingStart:t,onRecordingStop:i,onRecordingPause:s,onRecordingResume:r,onRecordingDelete:o,onRecordingDownload:c,activeRecordingId:f,sessionType:u="meeting",className:x,style:m,"data-testid":j}){const[C,v]=a.useState(n??[]),[R,O]=a.useState(""),[l,A]=a.useState("all");a.useEffect(()=>{n&&v(n)},[n]);const N=C.find(E=>E.id===f),Y=(N==null?void 0:N.state)==="recording",H=(N==null?void 0:N.state)==="paused",D=C.filter(E=>{const _=l==="all"||E.sessionType===l,S=!R||(E.title??"").toLowerCase().includes(R.toLowerCase())||E.id.includes(R);return _&&S}),$=a.useCallback(E=>{v(_=>_.filter(S=>S.id!==E)),o==null||o(E)},[o]),U=a.useCallback(E=>{if(c){c(E.id);return}if(E.url){const _=document.createElement("a");_.href=E.url,_.download=`${E.title??E.id}.${E.mimeType.includes("mp4")?"mp4":"webm"}`,_.click()}else if(E.blob){const _=URL.createObjectURL(E.blob),S=document.createElement("a");S.href=_,S.download=`${E.title??E.id}.webm`,S.click(),setTimeout(()=>URL.revokeObjectURL(_),5e3)}},[c]);return e.jsxs("div",{className:x,"data-testid":j,style:{display:"flex",flexDirection:"column",background:"#fff",borderRadius:10,border:"1px solid #e5e7eb",fontFamily:"system-ui, sans-serif",overflow:"hidden",...m},children:[e.jsxs("div",{style:{padding:"14px 16px",borderBottom:"1px solid #e5e7eb",display:"flex",gap:8,alignItems:"center"},children:[e.jsx("span",{style:{fontSize:16},children:"๐ŸŽ™๏ธ"}),e.jsx("strong",{style:{fontSize:14,color:"#111827",flex:1},children:"Recordings"}),e.jsxs("span",{style:{fontSize:12,color:"#9ca3af"},children:[C.length," total"]})]}),e.jsxs("div",{style:{padding:"12px 16px",borderBottom:"1px solid #f3f4f6",display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[e.jsxs("select",{value:u,disabled:Y||H,onChange:()=>{},style:{...st,flex:0},children:[e.jsx("option",{value:"call",children:"Call"}),e.jsx("option",{value:"meeting",children:"Meeting"}),e.jsx("option",{value:"whiteboard",children:"Whiteboard"}),e.jsx("option",{value:"screen",children:"Screen"})]}),!Y&&!H?e.jsx("button",{onClick:t,style:{...Ae,background:"#ef4444",color:"#fff"},children:"โ— Start recording"}):e.jsxs(e.Fragment,{children:[H?e.jsx("button",{onClick:r,style:{...Ae,background:"#6366f1",color:"#fff"},children:"โ–ถ Resume"}):e.jsx("button",{onClick:s,style:{...Ae,background:"#f59e0b",color:"#fff"},children:"โ€– Pause"}),e.jsx("button",{onClick:i,style:{...Ae,background:"#374151",color:"#fff"},children:"โ–  Stop"}),N&&e.jsx("span",{style:{fontSize:12,color:"#9ca3af",marginLeft:4},children:e.jsx(mt,{startedAt:N.startedAt})})]})]}),e.jsxs("div",{style:{padding:"8px 12px",borderBottom:"1px solid #f3f4f6",display:"flex",gap:6,alignItems:"center"},children:[e.jsx("input",{type:"search",value:R,onChange:E=>O(E.target.value),placeholder:"Search recordingsโ€ฆ",style:{flex:1,padding:"4px 8px",border:"1px solid #e5e7eb",borderRadius:6,fontSize:12}}),e.jsxs("select",{value:l,onChange:E=>A(E.target.value),style:st,children:[e.jsx("option",{value:"all",children:"All types"}),e.jsx("option",{value:"call",children:"Calls"}),e.jsx("option",{value:"meeting",children:"Meetings"}),e.jsx("option",{value:"whiteboard",children:"Whiteboard"}),e.jsx("option",{value:"screen",children:"Screen"})]})]}),e.jsx("div",{style:{flex:1,overflowY:"auto"},children:D.length===0?e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:32,gap:8,color:"#9ca3af"},children:[e.jsx("span",{style:{fontSize:32},children:"๐ŸŽ™๏ธ"}),e.jsx("span",{style:{fontSize:13},children:"No recordings found"}),e.jsx("span",{style:{fontSize:11},children:"Start a recording above or adjust your search filters."})]}):D.map(E=>e.jsx(fn,{rec:E,onDelete:$,onDownload:U},E.id))})]})}const Be={border:"1px solid #e5e7eb",borderRadius:6,background:"#fff",cursor:"pointer",padding:"4px 8px",fontSize:14,lineHeight:1},Ae={border:"none",borderRadius:6,cursor:"pointer",padding:"6px 14px",fontSize:12,fontWeight:500},st={padding:"4px 6px",border:"1px solid #e5e7eb",borderRadius:6,fontSize:12,color:"#374151",background:"#fff"},pn={border:"none",background:"none",cursor:"pointer",fontSize:16,color:"#9ca3af",lineHeight:1,padding:4};function rt({participant:n,isFollowing:t,onClick:i}){const s=n.user.displayName??n.user.name,r=s.split(" ").map(o=>o[0]).slice(0,2).join("").toUpperCase();return e.jsxs("button",{onClick:i,title:`${s}${t?" (following)":""} โ€” ${n.editingRegion??"viewing"}`,style:{display:"flex",alignItems:"center",justifyContent:"center",width:30,height:30,borderRadius:"50%",background:n.color,color:"#fff",fontSize:11,fontWeight:600,border:`2px solid ${t?"#fff":n.color}`,boxShadow:t?`0 0 0 2px ${n.color}`:"none",cursor:"pointer",flexShrink:0,transition:"transform 0.15s",position:"relative",overflow:"visible"},children:[n.user.avatarUrl?e.jsx("img",{src:n.user.avatarUrl,alt:r,style:{width:"100%",height:"100%",borderRadius:"50%",objectFit:"cover"}}):r,n.isActive&&e.jsx("span",{style:{position:"absolute",bottom:-1,right:-1,width:9,height:9,borderRadius:"50%",background:"#22c55e",border:"2px solid #fff"}})]})}function hn({participant:n,containerRect:t}){if(!n.cursorX||!n.cursorY||!t)return null;const i=n.cursorX,s=n.cursorY;return e.jsxs("div",{style:{position:"absolute",left:i,top:s,pointerEvents:"none",zIndex:9e3,transform:"translate(-2px, -2px)"},children:[e.jsx("svg",{width:16,height:20,style:{display:"block"},children:e.jsx("path",{d:"M2 2 L2 16 L6 12 L10 18 L12 17 L8 11 L14 11 Z",fill:n.color,stroke:"#fff",strokeWidth:1.5})}),e.jsx("div",{style:{background:n.color,color:"#fff",fontSize:10,padding:"1px 5px",borderRadius:3,whiteSpace:"nowrap",marginTop:-2,marginLeft:10},children:n.user.displayName??n.user.name})]})}function gn({count:n}){return n===0?null:e.jsxs("div",{style:{position:"absolute",top:8,left:"50%",transform:"translateX(-50%)",zIndex:8e3,background:"#fef3c7",border:"1px solid #fbbf24",borderRadius:6,padding:"4px 12px",fontSize:12,color:"#92400e",display:"flex",alignItems:"center",gap:6,boxShadow:"0 2px 8px rgba(0,0,0,0.1)",pointerEvents:"none"},children:["โš ๏ธ ",n," edit conflict",n>1?"s":""," โ€” auto-mergingโ€ฆ"]})}function yn(){return e.jsx("div",{style:{position:"absolute",inset:0,zIndex:7e3,background:"rgba(0,0,0,0.03)",cursor:"not-allowed",display:"flex",alignItems:"flex-end",justifyContent:"center",paddingBottom:12,pointerEvents:"none"},children:e.jsx("div",{style:{background:"rgba(0,0,0,0.6)",color:"#fff",fontSize:12,padding:"4px 14px",borderRadius:20},children:"๐Ÿ‘๏ธ View only"})})}function xn({pending:n}){return n===0?e.jsx("span",{style:{fontSize:11,color:"#22c55e"},children:"โœ“ Synced"}):e.jsxs("span",{style:{fontSize:11,color:"#f59e0b"},children:["โ†‘ ",n," pendingโ€ฆ"]})}function bn({participant:n,isFollowing:t,onClick:i}){return e.jsxs("button",{onClick:i,style:{fontSize:11,padding:"2px 8px",border:`1px solid ${t?n.color:"#e5e7eb"}`,borderRadius:20,background:t?n.color:"#fff",color:t?"#fff":"#6b7280",cursor:"pointer",display:"flex",alignItems:"center",gap:4},children:["๐Ÿ‘ ",t?"Unfollow":`Follow ${(n.user.displayName??n.user.name).split(" ")[0]}`]})}function mn({editorType:n,sessionId:t,currentUser:i,participants:s=[],onOperation:r,onParticipantJoin:o,onParticipantLeave:c,onCursorMove:f,isReadOnly:u=!1,showParticipants:x=!0,showCursors:m=!0,pendingOperations:j=0,conflictCount:C=0,className:v,style:R,children:O,"data-testid":l}){const A=a.useRef(null),[N,Y]=a.useState(null),[H,D]=a.useState(null),[$,U]=a.useState(!1);a.useEffect(()=>{const h=A.current;if(!h)return;const k=new ResizeObserver(()=>Y(h.getBoundingClientRect()));return k.observe(h),Y(h.getBoundingClientRect()),()=>k.disconnect()},[]);const E=a.useCallback(h=>{if(!A.current||!f)return;const k=A.current.getBoundingClientRect();f(h.clientX-k.left,h.clientY-k.top)},[f]),_=a.useCallback(h=>{D(k=>k===h?null:h)},[]),S={vector:"โœ๏ธ Vector",pixel:"๐Ÿ–ผ๏ธ Pixel",diagram:"๐Ÿ“Š Diagram",document:"๐Ÿ“„ Document",whiteboard:"๐Ÿ–Š๏ธ Whiteboard"};return e.jsxs("div",{className:v,"data-testid":l,style:{display:"flex",flexDirection:"column",background:"#fff",borderRadius:8,border:"1px solid #e5e7eb",overflow:"hidden",fontFamily:"system-ui, sans-serif",...R},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",borderBottom:"1px solid #f3f4f6",background:"#f9fafb",minHeight:40},children:[e.jsx("span",{style:{fontSize:12,color:"#6b7280",fontWeight:500},children:S[n]}),e.jsx("span",{style:{flex:1}}),e.jsx(xn,{pending:j}),x&&s.length>0&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:-4},children:[s.slice(0,5).map((h,k)=>e.jsx("div",{style:{marginLeft:k>0?-8:0,zIndex:10-k},children:e.jsx(rt,{participant:h,isFollowing:H===h.user.id,onClick:()=>{U(!0),_(h.user.id)}})},h.user.id)),s.length>5&&e.jsxs("button",{onClick:()=>U(!$),style:{marginLeft:-4,zIndex:5,width:30,height:30,borderRadius:"50%",background:"#e5e7eb",border:"2px solid #fff",fontSize:10,fontWeight:600,color:"#374151",cursor:"pointer"},children:["+",s.length-5]})]}),x&&s.length>0&&e.jsxs("button",{onClick:()=>U(!$),style:{border:"1px solid #e5e7eb",borderRadius:5,background:$?"#eff6ff":"#fff",padding:"3px 8px",cursor:"pointer",fontSize:11,color:$?"#3b82f6":"#6b7280"},children:[s.length," online"]})]}),e.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden",position:"relative"},children:[e.jsxs("div",{ref:A,onMouseMove:E,style:{flex:1,position:"relative",overflow:"hidden"},children:[O??e.jsxs("div",{id:`collab-editor-${n}-${t}`,style:{width:"100%",height:"100%",minHeight:400,display:"flex",alignItems:"center",justifyContent:"center",background:"#f9fafb",color:"#9ca3af",fontSize:13},children:["Drop your ",n," editor here or use the"," ",e.jsx("code",{style:{background:"#e5e7eb",padding:"1px 5px",borderRadius:3,margin:"0 4px"},children:`#collab-editor-${n}-${t}`})," ","mount point."]}),m&&s.filter(h=>h.user.id!==i.id&&h.cursorX!=null&&h.cursorY!=null).map(h=>e.jsx(hn,{participant:h,containerRect:N},h.user.id)),e.jsx(gn,{count:C}),u&&e.jsx(yn,{})]}),$&&s.length>0&&e.jsxs("div",{style:{width:220,borderLeft:"1px solid #e5e7eb",background:"#f9fafb",overflowY:"auto",padding:10,display:"flex",flexDirection:"column",gap:8},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:4},children:[e.jsx("strong",{style:{fontSize:12,color:"#374151"},children:"Participants"}),e.jsx("button",{onClick:()=>U(!1),style:{border:"none",background:"none",cursor:"pointer",color:"#9ca3af",fontSize:14},children:"โœ•"})]}),s.map(h=>e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4,padding:"8px",borderRadius:6,background:"#fff",border:"1px solid #f3f4f6"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx(rt,{participant:h,isFollowing:H===h.user.id,onClick:()=>_(h.user.id)}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{fontSize:12,fontWeight:500,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h.user.displayName??h.user.name}),e.jsx("div",{style:{fontSize:10,color:"#9ca3af"},children:h.editingRegion??"viewing"})]})]}),h.user.id!==i.id&&e.jsx(bn,{participant:h,isFollowing:H===h.user.id,onClick:()=>_(h.user.id)})]},h.user.id))]})]})]})}function Ge(n){let t="";for(let i=0;i<n.length;i++)t+=String.fromCharCode(n[i]);return btoa(t)}function Xe(n){const t=atob(n),i=new Uint8Array(t.length);for(let s=0;s<t.length;s++)i[s]=t.charCodeAt(s);return i}function vn(n){return new TextEncoder().encode(n)}function Sn(n){return new TextDecoder().decode(n)}async function jn(n){return crypto.subtle.generateKey({name:"AES-GCM",length:n},!0,["encrypt","decrypt"])}async function wn(){return crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-384"},!0,["deriveKey"])}async function kn(n,t){return crypto.subtle.deriveKey({name:"ECDH",public:t},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function Cn(n,t){const i=crypto.getRandomValues(new Uint8Array(12)),s=vn(t),r=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},n,s),o=new Uint8Array(r),c=new Uint8Array(12+o.length);return c.set(i,0),c.set(o,12),Ge(c)}async function In(n,t){const i=Xe(t),s=i.slice(0,12),r=i.slice(12),o=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},n,r);return Sn(new Uint8Array(o))}async function ot(n,t){const i=Xe(n);return crypto.subtle.importKey("raw",i,{name:"AES-GCM",length:t},!1,["encrypt","decrypt"])}async function zn(n){const t=await crypto.subtle.exportKey("raw",n);return Ge(new Uint8Array(t))}async function Rn(n){const t=await crypto.subtle.exportKey("spki",n);return Ge(new Uint8Array(t))}async function Tn(n){const t=Xe(n);return crypto.subtle.importKey("spki",t,{name:"ECDH",namedCurve:"P-384"},!0,[])}class vt{constructor(t){this.keys={},this.ready=!1,this.config=t}async init(){if(!this.config.enabled){this.ready=!0;return}const t=this.config.defaultAlgorithm;if(this.config.keyMaterial)t==="AES-GCM-128"?this.keys.aes128=await ot(this.config.keyMaterial,128):this.keys.aes256=await ot(this.config.keyMaterial,256);else if(t==="AES-GCM-256"||t==="AES-GCM-128"){const i=t==="AES-GCM-256"?256:128,s=await jn(i);i===128?this.keys.aes128=s:this.keys.aes256=s}else if(t==="E2E-ECDH-P384"){const i=await wn();this.keys.ecdhPrivate=i.privateKey,this.keys.ecdhPublic=i.publicKey,this.keys.ecdhSessionKeys=new Map}this.ready=!0}async getPublicKeyForPeer(){return this.keys.ecdhPublic?Rn(this.keys.ecdhPublic):null}async registerPeerPublicKey(t,i){var o;if(!this.keys.ecdhPrivate)return;const s=await Tn(i),r=await kn(this.keys.ecdhPrivate,s);(o=this.keys.ecdhSessionKeys)==null||o.set(t,r)}resolveAlgorithm(t){if(t&&this.config.scopeOverrides){const i=this.config.scopeOverrides.find(s=>(s.scope===t||s.scope==="all")&&s.enabled);if(i)return i.algorithm}return this.config.defaultAlgorithm}getKey(t,i){var s;switch(t){case"AES-GCM-256":return this.keys.aes256??null;case"AES-GCM-128":return this.keys.aes128??null;case"E2E-ECDH-P384":return i?((s=this.keys.ecdhSessionKeys)==null?void 0:s.get(i))??null:null;default:return null}}async encrypt(t,i,s){if(!this.config.enabled)return t;if(!this.ready)throw new Error("EncryptionService not initialised โ€” call init() first");const r=this.resolveAlgorithm(i);if(r==="none")return t;const o=this.getKey(r,s);return o?Cn(o,t):(console.warn(`EncryptionService: no key found for algorithm "${r}" โ€” returning plaintext`),t)}async decrypt(t,i,s){if(!this.config.enabled)return t;if(!this.ready)throw new Error("EncryptionService not initialised โ€” call init() first");const r=this.resolveAlgorithm(i);if(r==="none")return t;const o=this.getKey(r,s);return o?In(o,t):(console.warn(`EncryptionService: no key found for algorithm "${r}" โ€” returning as-is`),t)}async exportSymmetricKey(t){const i=t??this.config.defaultAlgorithm,s=this.getKey(i);return s?zn(s):null}isEnabled(){return this.config.enabled}getConfig(){return this.config}updateConfig(t){this.config=t,this.ready=!1}}const Ee=new Map;function An(n,t){return Ee.has(n)||Ee.set(n,new vt(t)),Ee.get(n)}function Dn(n){Ee.delete(n)}class St{constructor(t={}){this.recorder=null,this.chunks=[],this.session=null,this.recognition=null,this.segmentCounter=0,this.callbacks=t}start(t,i){var f,u,x;if(((f=this.recorder)==null?void 0:f.state)==="recording")throw new Error("Recording already in progress");const s=i.mimeType??this.chooseMimeType(),r=new MediaRecorder(t,{mimeType:s});this.chunks=[];const o=new Date,c=`rec_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return this.session={id:c,sessionType:i.sessionType,startedAt:o,state:"recording",mimeType:s,participants:[i.speakerId??"unknown"],title:i.title??`Recording ${o.toLocaleString()}`},r.ondataavailable=m=>{m.data&&m.data.size>0&&this.chunks.push(m.data)},r.onstop=()=>{var j,C,v,R;const m=new Blob(this.chunks,{type:s});this.session&&(this.session.blob=m,this.session.endedAt=new Date,this.session.durationMs=this.session.endedAt.getTime()-this.session.startedAt.getTime(),this.session.size=m.size,this.session.state="ready"),(C=(j=this.callbacks).onDataAvailable)==null||C.call(j,m),(R=(v=this.callbacks).onStateChange)==null||R.call(v,"ready")},r.onerror=m=>{var j,C,v,R;(C=(j=this.callbacks).onError)==null||C.call(j,new Error(String(m))),this.session&&(this.session.state="failed"),(R=(v=this.callbacks).onStateChange)==null||R.call(v,"failed")},r.start(i.timesliceMs??1e3),this.recorder=r,i.transcribe&&this.startTranscription(i.speakerId??"unknown",i.speakerName??"Participant"),(x=(u=this.callbacks).onStateChange)==null||x.call(u,"recording"),this.session}pause(){var t,i,s;((t=this.recorder)==null?void 0:t.state)==="recording"&&(this.recorder.pause(),this.session&&(this.session.state="paused"),(s=(i=this.callbacks).onStateChange)==null||s.call(i,"paused"))}resume(){var t,i,s;((t=this.recorder)==null?void 0:t.state)==="paused"&&(this.recorder.resume(),this.session&&(this.session.state="recording"),(s=(i=this.callbacks).onStateChange)==null||s.call(i,"recording"))}stop(){var t,i;return this.stopTranscription(),this.recorder&&this.recorder.state!=="inactive"&&(this.recorder.stop(),this.session&&(this.session.state="processing"),(i=(t=this.callbacks).onStateChange)==null||i.call(t,"processing")),this.session}startTranscription(t,i){const s=window.SpeechRecognition??window.webkitSpeechRecognition;if(!s)return;const r=new s;r.continuous=!0,r.interimResults=!1,r.lang="en-US";const o=Date.now();r.onresult=c=>{var u,x;const f=c.results;for(let m=c.resultIndex;m<f.length;m++){const j=f[m];if(!j.isFinal)continue;const C=j[0],v=Date.now(),R={id:`seg_${++this.segmentCounter}`,speakerId:t,speakerName:i,text:C.transcript.trim(),startMs:v-o-1500,endMs:v-o,confidence:C.confidence??.9};this.session&&(this.session.transcript=[...this.session.transcript??[],R]),(x=(u=this.callbacks).onTranscriptSegment)==null||x.call(u,R)}},r.onerror=()=>{};try{r.start(),this.recognition=r}catch{}}stopTranscription(){var t;try{(t=this.recognition)==null||t.stop()}catch{}this.recognition=null}chooseMimeType(){const t=["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm","audio/webm;codecs=opus","audio/ogg;codecs=opus"];for(const i of t)if(MediaRecorder.isTypeSupported(i))return i;return""}getState(){var t;return((t=this.session)==null?void 0:t.state)??"idle"}getSession(){return this.session}download(t){var o,c;const i=(o=this.session)==null?void 0:o.blob;if(!i)return;const s=URL.createObjectURL(i),r=document.createElement("a");r.href=s,r.download=t??`${((c=this.session)==null?void 0:c.title)??"recording"}.webm`,r.click(),setTimeout(()=>URL.revokeObjectURL(s),3e4)}}const Pe=new Map;function En(n,t){return Pe.has(n)||Pe.set(n,new St(t)),Pe.get(n)}function Pn(n){Pe.delete(n)}exports.DEFAULT_RETENTION_RULES=Ye;exports.EncryptionService=vt;exports.MockTransport=ct;exports.NiceCallScreen=Fe;exports.NiceChannelView=pt;exports.NiceChatWindow=Ie;exports.NiceCollaborativeEditor=mn;exports.NiceCommunication=bt;exports.NiceCommunicationDefault=bt;exports.NiceMessenger=ut;exports.NicePresenceIndicator=fe;exports.NiceRecordingPanel=un;exports.NiceStorageSettings=on;exports.NiceTeamsWorkspace=xt;exports.NiceVideoConference=Ke;exports.NiceWhiteboard=He;exports.RecordingService=St;exports.StorageService=ht;exports.WebRTCTransport=at;exports.buildOptimisticMessage=kt;exports.createTransport=dt;exports.disposeEncryptionService=Dn;exports.disposeRecordingService=Pn;exports.disposeStorageService=Ot;exports.findConversationPartner=Me;exports.getDefaultMode=It;exports.getEncryptionService=An;exports.getMentionCount=Ct;exports.getRecordingService=En;exports.getStorageService=gt;exports.getUnreadCount=_e;exports.useCommunication=ft;exports.useWhiteboard=yt;
@@ -0,0 +1,23 @@
1
+ export { NiceCommunication } from './components/NiceCommunication';
2
+ export { default as NiceCommunicationDefault } from './components/NiceCommunication';
3
+ export { NicePresenceIndicator } from './components/NicePresenceIndicator';
4
+ export { NiceChatWindow } from './components/NiceChatWindow';
5
+ export { NiceMessenger } from './components/NiceMessenger';
6
+ export { NiceCallScreen } from './components/NiceCallScreen';
7
+ export { NiceVideoConference } from './components/NiceVideoConference';
8
+ export { NiceChannelView } from './components/NiceChannelView';
9
+ export { NiceTeamsWorkspace } from './components/NiceTeamsWorkspace';
10
+ export { NiceWhiteboard } from './components/NiceWhiteboard';
11
+ export { NiceStorageSettings } from './components/NiceStorageSettings';
12
+ export { NiceRecordingPanel } from './components/NiceRecordingPanel';
13
+ export { NiceCollaborativeEditor } from './components/NiceCollaborativeEditor';
14
+ export { useCommunication, buildOptimisticMessage, findConversationPartner, getUnreadCount, getMentionCount, getDefaultMode, } from './hooks/useCommunication';
15
+ export type { CommunicationState, UseCommunicationOptions, } from './hooks/useCommunication';
16
+ export { useWhiteboard } from './hooks/useWhiteboard';
17
+ export type { UseWhiteboardOptions, UseWhiteboardReturn, WhiteboardState, } from './hooks/useWhiteboard';
18
+ export { EncryptionService, getEncryptionService, disposeEncryptionService, } from './services/encryptionService';
19
+ export { StorageService, getStorageService, disposeStorageService, DEFAULT_RETENTION_RULES, } from './services/storageService';
20
+ export { RecordingService, getRecordingService, disposeRecordingService, } from './services/recordingService';
21
+ export { WebRTCTransport, MockTransport, createTransport, } from './transport/communicationTransport';
22
+ export type { ICommunicationTransport, TransportEventMap, } from './transport/communicationTransport';
23
+ export type { CommunicationMode, PresenceStatus, UserRole, MessageContentType, MessageStatus, ConversationType, ChannelType, CallStatus, CallType, TransportType, NiceCommunicationBaseProps, PresenceInfo, CommunicationUser, TeamMember, MessageReaction, MessageAttachment, MessageMention, PollOption, PollData, CodeSnippet, CallEventData, ChatMessage, Conversation, Channel, Team, CallParticipant, CallSession, IncomingCall, Meeting, IceServerConfig, RTCTransportConfig, CommunicationCallbacks, NiceCommunicationProps, NicePresenceIndicatorProps, NiceChatWindowProps, NiceMessengerProps, NiceCallScreenProps, NiceVideoConferenceProps, NiceChannelViewProps, NiceTeamsWorkspaceProps, NiceWhiteboardProps, NiceStorageSettingsProps, NiceRecordingPanelProps, NiceCollaborativeEditorProps, CollaborativeEditorType, CollaborativeEditorParticipant, EncryptionAlgorithm, EncryptionScope, EncryptionScopeConfig, EncryptionConfig, RetentionUnit, RetentionPeriod, RetentionDataType, RetentionRule, IStorageAdapter, StorageConfig, RecordingState, TranscriptSegment, RecordingSession, WhiteboardToolType, WhiteboardObjectType, WhiteboardPoint, WhiteboardStroke, WhiteboardShape, WhiteboardTextObject, WhiteboardStickyNote, WhiteboardImage, WhiteboardFrame, WhiteboardConnector, WhiteboardObject, WhiteboardLayer, WhiteboardCollaborator, WhiteboardViewport, WhiteboardSession, WhiteboardOpType, WhiteboardOperation, } from './types/communicationTypes';