const elements={iceState:document.getElementById("ice-connection-state"),signalingState:document.getElementById("signaling-state"),dataChannelState:document.getElementById("datachannel-state"),displaySelect:document.getElementById("display-id"),connectBtn:document.getElementById("connect"),disconnectBtn:document.getElementById("disconnect"),media:document.getElementById("media"),video:document.getElementById("video"),audio:document.getElementById("audio"),connectionOverlay:document.getElementById("connection-overlay"),connectedOverlay:document.getElementById("connected-overlay"),connectedPanel:document.getElementById("connected-panel"),panelCollapsedBar:document.getElementById("panel-collapsed-bar"),connectingOverlay:document.getElementById("connecting-overlay"),connectingMessageText:document.getElementById("connecting-message-text"),connectionStatusLed:document.getElementById("connection-status-led"),connectionStatusIndicator:document.getElementById("connection-status-indicator"),connectedStatusLed:document.getElementById("connected-status-led"),disconnectConnected:document.getElementById("disconnect-connected"),serverConfigBtn:document.getElementById("server-config-btn"),serverConfigContainer:document.getElementById("server-config-container"),signalingServerInput:document.getElementById("signaling-server"),stunTurnServerInput:document.getElementById("stun-turn-server")},DEFAULT_CONFIG={signalingUrl:"wss://192.168.0.107:33333",iceServers:[{urls:["stun:192.168.0.107:33334"]},{urls:["turn:192.168.0.107:33334"],username:"crossdesk",credential:"crossdeskpw"}],heartbeatIntervalMs:3e3,heartbeatTimeoutMs:1e4,reconnectDelayMs:2e3,clientTag:"web"},CONFIG=Object.assign({},DEFAULT_CONFIG,window.CROSSDESK_CONFIG||{});function extractSignalingHostPort(){try{return new URL(CONFIG.signalingUrl).host}catch{return"192.168.0.107:33333"}}function extractStunTurnHostPort(){if(CONFIG.iceServers&&CONFIG.iceServers.length>0){const e=CONFIG.iceServers[0];if(e.urls){const t=Array.isArray(e.urls)?e.urls:[e.urls];if(t.length>0){const o=t[0],n=o.match(/stun:(.+):([0-9]+)/)||o.match(/turn:(.+):([0-9]+)/);if(n)return`${n[1]}:${n[2]}`}}}return"192.168.0.107:33334"}function initServerConfigInputs(){elements.signalingServerInput&&(elements.signalingServerInput.value=extractSignalingHostPort()),elements.stunTurnServerInput&&(elements.stunTurnServerInput.value=extractStunTurnHostPort())}function checkConnectButtonEnabled(){if(!elements.connectBtn)return;const e=getTransmissionId(),t=getTransmissionPwd();if(!e||!t){elements.connectBtn.disabled=!0;return}if(elements.serverConfigContainer&&elements.serverConfigContainer.style.display!=="none"){const n=elements.signalingServerInput?.value.trim(),a=elements.stunTurnServerInput?.value.trim();n&&a?elements.connectBtn.disabled=!1:elements.connectBtn.disabled=!0}else elements.connectBtn.disabled=!1}function toggleServerConfig(){if(!elements.serverConfigContainer)return;elements.serverConfigContainer.style.display==="none"?(initServerConfigInputs(),elements.serverConfigContainer.style.display="block"):elements.serverConfigContainer.style.display="none",checkConnectButtonEnabled()}function updateServerConfig(e,t){return!e||!t?!1:(CONFIG.signalingUrl=`wss://${e}`,CONFIG.iceServers=[{urls:[`stun:${t}`]},{urls:[`turn:${t}`],username:"crossdesk",credential:"crossdeskpw"}],window.CROSSDESK_CONFIG=CONFIG,!0)}function saveServerConfig(){if(!elements.signalingServerInput||!elements.stunTurnServerInput)return;const e=elements.signalingServerInput.value.trim(),t=elements.stunTurnServerInput.value.trim();if(!e||!t){alert("\u8BF7\u586B\u5199\u5B8C\u6574\u7684\u670D\u52A1\u5668\u5730\u5740");return}updateServerConfig(e,t)&&(elements.serverConfigContainer&&(elements.serverConfigContainer.style.display="none"),setTimeout(()=>{window.location.reload()},500))}const control=window.CrossDeskControl;let pc=null,clientId="000000",heartbeatTimer=null,lastPongAt=Date.now(),trackIndex=0;const trackMap=new Map;let websocket=null;function initWebSocket(){websocket||(websocket=new WebSocket(CONFIG.signalingUrl),websocket.addEventListener("message",e=>{if(typeof e.data!="string")return;const t=JSON.parse(e.data);if(t.type==="pong"){lastPongAt=Date.now();return}handleSignalingMessage(t)}),websocket.addEventListener("open",()=>{enableConnectButton(!0),sendLogin(),startHeartbeat()}),websocket.addEventListener("close",()=>{stopHeartbeat(),enableConnectButton(!1)}),websocket.addEventListener("error",()=>{stopHeartbeat(),scheduleReconnect()}))}function handleSignalingMessage(e){switch(e.type){case"login":clientId=e.user_id.split("@")[0];break;case"user_join_transmission":if(e.status==="failed"){let t="";e.reason==="No such transmission id"?t="\u6CA1\u6709\u8BE5\u8BBE\u5907":e.reason==="Incorrect password"&&(t="\u5BC6\u7801\u9519\u8BEF"),t&&elements.connectingOverlay&&elements.connectingMessageText&&(elements.connectingMessageText.textContent=t,elements.connectingOverlay.style.display="flex",setTimeout(()=>{elements.connectingOverlay&&(elements.connectingOverlay.style.display="none"),disconnect()},3e3))}break;case"offer":handleOffer(e);break;case"new_candidate_mid":if(!pc)return;pc.addIceCandidate(new RTCIceCandidate({sdpMid:e.mid,candidate:e.candidate})).catch(t=>console.error("Error adding ICE candidate",t));break;default:break}}function startHeartbeat(){stopHeartbeat(),lastPongAt=Date.now(),heartbeatTimer=setInterval(()=>{websocket.readyState===WebSocket.OPEN&&websocket.send(JSON.stringify({type:"ping",ts:Date.now()})),Date.now()-lastPongAt>CONFIG.heartbeatTimeoutMs&&scheduleReconnect()},CONFIG.heartbeatIntervalMs)}function stopHeartbeat(){heartbeatTimer&&(clearInterval(heartbeatTimer),heartbeatTimer=null)}function scheduleReconnect(){try{websocket&&websocket.close()}catch{}setTimeout(()=>window.location.reload(),CONFIG.reconnectDelayMs)}function sendLogin(){websocket.send(JSON.stringify({type:"login",user_id:CONFIG.clientTag}))}function handleOffer(e){pc=createPeerConnection(),pc.setRemoteDescription(e).then(()=>sendAnswer(pc)).catch(t=>console.error("Failed to handle offer",t))}function createPeerConnection(){const e={iceServers:CONFIG.iceServers,iceTransportPolicy:"all"},t=new RTCPeerConnection(e);t.addEventListener("iceconnectionstatechange",()=>{const n=t.iceConnectionState;updateStatus(elements.iceState,n);const a=n==="connected";updateStatusLed(elements.connectionStatusLed,a,!0),updateStatusLed(elements.connectedStatusLed,a,!1),n==="disconnected"||n==="failed"?elements.connectingOverlay&&elements.connectingMessageText&&(n==="disconnected"?elements.connectingMessageText.textContent="\u8FDE\u63A5\u5DF2\u65AD\u5F00...":n==="failed"&&(elements.connectingMessageText.textContent="\u8FDE\u63A5\u5931\u8D25..."),elements.connectingOverlay.style.display="flex"):(n==="connected"||n==="checking"||n==="completed")&&elements.connectingOverlay&&(n==="connected"||n==="completed")&&(elements.connectingOverlay.style.display="none")}),updateStatus(elements.iceState,t.iceConnectionState);const o=t.iceConnectionState==="connected";return updateStatusLed(elements.connectionStatusLed,o,!0),updateStatusLed(elements.connectedStatusLed,o,!1),t.addEventListener("signalingstatechange",()=>{updateStatus(elements.signalingState,t.signalingState)}),updateStatus(elements.signalingState,t.signalingState),t.onicecandidate=({candidate:n})=>{n&&websocket.send(JSON.stringify({type:"new_candidate_mid",transmission_id:getTransmissionId(),user_id:clientId,remote_user_id:getTransmissionId(),candidate:n.candidate,mid:n.sdpMid}))},t.ontrack=({track:n,streams:a})=>{if(n.kind==="audio"&&elements.audio){if(elements.audio.srcObject)elements.audio.srcObject.addTrack(n);else{const i=a&&a[0]?a[0]:new MediaStream([n]);elements.audio.srcObject=i,elements.audio.autoplay=!0,elements.audio.play().catch(l=>{console.log("Audio autoplay prevented:",l)})}return}if(n.kind!=="video"||!elements.video)return;const c=trackIndex;if(trackIndex++,trackMap.set(c,n),elements.video.srcObject)elements.video.srcObject.addTrack(n);else{const i=a&&a[0]?a[0]:new MediaStream([n]);elements.video.srcObject=i,elements.video.muted=!0,elements.video.setAttribute("playsinline","true"),elements.video.setAttribute("webkit-playsinline","true"),elements.video.setAttribute("x5-video-player-type","h5"),elements.video.setAttribute("x5-video-player-fullscreen","true"),elements.video.autoplay=!0,hideConnectingOverlayOnFirstFrame()}if(!elements.displaySelect)return;if(c===0){const i=Array.from(elements.displaySelect.options).find(l=>l.value==="");i&&i.remove()}if(!Array.from(elements.displaySelect.options).find(i=>i.value===String(c))){const i=document.createElement("option");i.value=String(c),i.textContent=n.id||`Display ${c}`,elements.displaySelect.appendChild(i)}c===0&&!elements.displaySelect.value&&(elements.displaySelect.value=String(c))},t.ondatachannel=n=>{const a=n.channel;control.setDataChannel(a),bindDataChannel(a)},t}function bindDataChannel(e){e.addEventListener("open",()=>{updateStatus(elements.dataChannelState,"open"),enableDataChannelUi(!0)}),e.addEventListener("close",()=>{updateStatus(elements.dataChannelState,"closed"),enableDataChannelUi(!1),control.setDataChannel(null)}),e.addEventListener("message",t=>{})}async function sendAnswer(e){await e.setLocalDescription(await e.createAnswer()),await waitIceGathering(e),websocket.send(JSON.stringify({type:"answer",transmission_id:getTransmissionId(),user_id:clientId,remote_user_id:getTransmissionId(),sdp:e.localDescription.sdp}))}function waitIceGathering(e){return e.iceGatheringState==="complete"?Promise.resolve():new Promise(t=>{e.addEventListener("icegatheringstatechange",()=>{e.iceGatheringState==="complete"&&t()})})}function getTransmissionId(){return document.getElementById("transmission-id").value.trim()}function getTransmissionPwd(){return document.getElementById("transmission-pwd").value.trim()}function sendJoinRequest(){websocket.send(JSON.stringify({type:"join_transmission",user_id:clientId,transmission_id:`${getTransmissionId()}@${getTransmissionPwd()}`}))}function sendLeaveRequest(){websocket.send(JSON.stringify({type:"user_leave_transmission",user_id:clientId,transmission_id:getTransmissionId()}))}function connect(){if(!(!elements.connectBtn||!elements.disconnectBtn||!elements.media)){if(!websocket){const e=elements.signalingServerInput?.value.trim(),t=elements.stunTurnServerInput?.value.trim();if(elements.serverConfigContainer&&elements.serverConfigContainer.style.display!=="none"&&e&&t&&!updateServerConfig(e,t)){alert("\u670D\u52A1\u5668\u914D\u7F6E\u65E0\u6548");return}initWebSocket();return}websocket.readyState===WebSocket.OPEN&&(saveServerConfig(),elements.connectBtn.style.display="none",elements.disconnectBtn.style.display="inline-block",elements.media.style.display="flex",elements.connectionOverlay&&(elements.connectionOverlay.style.display="none"),elements.connectedOverlay&&(elements.connectedOverlay.style.display="block",elements.connectedPanel&&(isPanelMinimized=!1,panelAlignment="left",elements.connectedPanel.classList.remove("minimized"),elements.connectedPanel.style.left="0",elements.connectedPanel.style.right="auto",hideConnectedPanel())),elements.connectingOverlay&&(elements.connectingOverlay.style.display="flex"),elements.connectingMessageText&&(elements.connectingMessageText.textContent="\u8FDE\u63A5\u4E2D..."),sendJoinRequest())}}function disconnect(){!elements.connectBtn||!elements.disconnectBtn||!elements.media||(elements.disconnectBtn.style.display="none",elements.connectBtn.style.display="inline-block",elements.media.style.display="none",elements.connectionOverlay&&(elements.connectionOverlay.style.display="flex"),elements.connectedOverlay&&(elements.connectedOverlay.style.display="none"),elements.connectingOverlay&&(elements.connectingOverlay.style.display="none"),panelHideTimer&&(clearTimeout(panelHideTimer),panelHideTimer=null),isPanelMinimized=!1,isDragging=!1,panelAlignment="left",elements.connectedPanel&&(elements.connectedPanel.classList.remove("minimized"),elements.connectedPanel.style.left="0",elements.connectedPanel.style.right="auto"),sendLeaveRequest(),teardownPeerConnection(),enableDataChannelUi(!1),updateStatus(elements.iceState,""),updateStatus(elements.signalingState,""),updateStatus(elements.dataChannelState,"closed"),trackIndex=0,trackMap.clear(),elements.displaySelect&&(elements.displaySelect.innerHTML=''),updateStatusLed(elements.connectionStatusLed,!1,!0),updateStatusLed(elements.connectedStatusLed,!1,!1),websocket&&(websocket.close(),websocket=null))}function hideConnectingOverlayOnFirstFrame(){if(!elements.video||!elements.connectingOverlay)return;if(elements.video.requestVideoFrameCallback){let t=null;const o=()=>{elements.connectingOverlay&&(elements.connectingOverlay.style.display="none"),t!==null&&elements.video.cancelVideoFrameCallback(t)};t=elements.video.requestVideoFrameCallback(o);return}const e=()=>{elements.connectingOverlay&&(elements.connectingOverlay.style.display="none"),elements.video.removeEventListener("loadeddata",e),elements.video.removeEventListener("canplay",e)};elements.video.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?e():(elements.video.addEventListener("loadeddata",e,{once:!0}),elements.video.addEventListener("canplay",e,{once:!0}))}function teardownPeerConnection(){if(pc){try{pc.getSenders().forEach(e=>e.track?.stop?.())}catch{}pc.close(),pc=null,elements.video?.srcObject&&(elements.video.srcObject.getTracks().forEach(e=>e.stop()),elements.video.srcObject=null),elements.audio?.srcObject&&(elements.audio.srcObject.getTracks().forEach(e=>e.stop()),elements.audio.srcObject=null)}}function updateStatus(e,t){e&&(e.textContent=t||"")}function updateStatusLed(e,t,o=!0){e&&(t?(e.classList.remove("status-led-off"),e.classList.add("status-led-on"),o&&elements.connectionStatusIndicator&&(elements.connectionStatusIndicator.style.display="flex")):(e.classList.remove("status-led-on"),e.classList.add("status-led-off"),o&&elements.connectionStatusIndicator&&(elements.connectionStatusIndicator.style.display="none")))}function enableConnectButton(e){elements.connectBtn&&(e?checkConnectButtonEnabled():elements.connectBtn.disabled=!0)}function enableDataChannelUi(e){elements.displaySelect&&(elements.displaySelect.disabled=!e)}function setDisplayId(){if(!elements.displaySelect)return;const e=elements.displaySelect.value.trim();if(!e)return;const t=parseInt(e,10);if(isNaN(t)||!Number.isFinite(t)){console.warn("setDisplayId: Invalid display_id value:",e);return}const o=trackMap.get(t);if(o&&elements.video){const n=new MediaStream([o]);elements.video.srcObject=n,elements.video.muted=!0,elements.video.setAttribute("playsinline","true"),elements.video.setAttribute("webkit-playsinline","true"),elements.video.setAttribute("x5-video-player-type","h5"),elements.video.setAttribute("x5-video-player-fullscreen","true"),elements.video.autoplay=!0}control.sendDisplayId(t)}elements.connectBtn&&elements.connectBtn.addEventListener("click",connect),elements.disconnectBtn&&elements.disconnectBtn.addEventListener("click",disconnect),elements.disconnectConnected&&elements.disconnectConnected.addEventListener("click",disconnect),elements.displaySelect&&elements.displaySelect.addEventListener("change",setDisplayId),elements.serverConfigBtn&&elements.serverConfigBtn.addEventListener("click",toggleServerConfig),elements.signalingServerInput&&elements.signalingServerInput.addEventListener("input",checkConnectButtonEnabled),elements.stunTurnServerInput&&elements.stunTurnServerInput.addEventListener("input",checkConnectButtonEnabled),document.getElementById("transmission-id")&&document.getElementById("transmission-id").addEventListener("input",checkConnectButtonEnabled),document.getElementById("transmission-pwd")&&document.getElementById("transmission-pwd").addEventListener("input",checkConnectButtonEnabled),checkConnectButtonEnabled();let panelHideTimer=null;const PANEL_HIDE_DELAY=3e3;let isPanelMinimized=!1,isDragging=!1,dragStartX=0,dragStartY=0,panelStartLeft=0,panelStartTop=0,panelAlignment="left",panelCorner="top-left";const SNAP_THRESHOLD=20;function calculateExpandPosition(e,t,o,n){const d=window.innerWidth,i=window.innerHeight;let l=e,r=t,s="auto",u="auto",f="left",g="top";return e+400>d&&(e-400>=0?(l=e-400+o,s="auto",f="right"):(l="0",s="auto",f="left")),t+100>i&&(t-100>=0?(r=t-100+n,u="auto",g="bottom"):(r="auto",u="0",g="bottom")),{left:l,top:r,right:s,bottom:u,horizontalAlign:f,verticalAlign:g}}function togglePanelMinimize(){if(elements.connectedPanel){if(isPanelMinimized=!isPanelMinimized,isPanelMinimized){const e=elements.panelCollapsedBar.getBoundingClientRect();let t=e.left,o=e.top;const n=window.innerWidth,a=window.innerHeight,c=48;t=Math.max(0,Math.min(t,n-c)),o=Math.max(0,Math.min(o,a-c)),elements.connectedPanel.classList.add("minimized"),elements.connectedPanel.style.left=`${t}px`,elements.connectedPanel.style.top=`${o}px`,elements.connectedPanel.style.right="auto",elements.connectedPanel.style.bottom="auto",elements.connectedPanel.offsetHeight}else{const e=elements.connectedPanel.getBoundingClientRect(),t=e.left,o=e.top,n=e.width,a=e.height;elements.connectedPanel.classList.remove("minimized");const c=calculateExpandPosition(t,o,n,a);requestAnimationFrame(()=>{const d=elements.connectedPanel.offsetWidth,i=elements.connectedPanel.offsetHeight,l=window.innerWidth,r=window.innerHeight;let s=t,u=o,f="auto",g="auto",m="top-left";t+d>l&&(s="auto",f=0),o+i>r&&(u="auto",g=0),s!=="auto"&&(s=Math.max(0,Math.min(s,l-d))),u!=="auto"&&(u=Math.max(0,Math.min(u,r-i))),panelCorner=m,elements.connectedPanel.style.left=typeof s=="number"?`${s}px`:s,elements.connectedPanel.style.top=typeof u=="number"?`${u}px`:u,elements.connectedPanel.style.right=f,elements.connectedPanel.style.bottom=g,updatePanelAlignment()})}panelHideTimer&&(clearTimeout(panelHideTimer),panelHideTimer=null)}}function minimizePanel(){if(!elements.connectedPanel||isPanelMinimized)return;const e=elements.panelCollapsedBar.getBoundingClientRect();let t=e.left,o=e.top;const n=window.innerWidth,a=window.innerHeight,c=48;t=Math.max(0,Math.min(t,n-c)),o=Math.max(0,Math.min(o,a-c)),isPanelMinimized=!0,elements.connectedPanel.classList.add("minimized"),elements.connectedPanel.style.left=`${t}px`,elements.connectedPanel.style.top=`${o}px`,elements.connectedPanel.style.right="auto",elements.connectedPanel.style.bottom="auto",elements.connectedPanel.offsetHeight,updatePanelAlignment()}function updatePanelAlignment(){if(!elements.connectedPanel)return;const e=elements.connectedPanel.getBoundingClientRect(),t=window.innerWidth,o=e.left;t-e.right{const c=elements.connectedPanel.offsetWidth,d=elements.connectedPanel.offsetHeight,i=window.innerWidth,l=window.innerHeight;let r=t,s=o,u="auto",f="auto",g="top-left";t+c>i&&(r="auto",u=0),o+d>l&&(s="auto",f=0),r!=="auto"&&(r=Math.max(0,Math.min(r,i-c))),s!=="auto"&&(s=Math.max(0,Math.min(s,l-d))),panelCorner=g,elements.connectedPanel.style.left=typeof r=="number"?`${r}px`:r,elements.connectedPanel.style.top=typeof s=="number"?`${s}px`:s,elements.connectedPanel.style.right=u,elements.connectedPanel.style.bottom=f,updatePanelAlignment()})}function showConnectedPanel(){elements.connectedPanel&&(maximizePanel(),panelHideTimer&&(clearTimeout(panelHideTimer),panelHideTimer=null))}function hideConnectedPanel(){elements.connectedPanel&&(panelHideTimer=setTimeout(()=>{elements.connectedPanel&&!isPanelMinimized&&minimizePanel()},PANEL_HIDE_DELAY))}function startDrag(e){if(!elements.connectedPanel)return;isDragging=!0,control&&control.setDraggingPanel&&control.setDraggingPanel(!0);const t=e.touches?e.touches[0].clientX:e.clientX,o=e.touches?e.touches[0].clientY:e.clientY;dragStartX=t,dragStartY=o;const n=elements.connectedPanel.getBoundingClientRect();panelStartLeft=n.left,panelStartTop=n.top,e.preventDefault(),document.addEventListener("mousemove",onDrag),document.addEventListener("mouseup",stopDrag),document.addEventListener("touchmove",onDrag),document.addEventListener("touchend",stopDrag)}function onDrag(e){if(!isDragging||!elements.connectedPanel)return;e.preventDefault(),e.stopPropagation();const t=e.touches?e.touches[0].clientX:e.clientX,o=e.touches?e.touches[0].clientY:e.clientY,n=t-dragStartX,a=o-dragStartY,c=panelStartLeft+n,d=panelStartTop+a,i=elements.connectedPanel.offsetWidth,l=elements.connectedPanel.offsetHeight,r=window.innerWidth-i,s=window.innerHeight-l,u=Math.max(0,Math.min(c,r)),f=Math.max(0,Math.min(d,s));elements.connectedPanel.style.left=`${u}px`,elements.connectedPanel.style.top=`${f}px`,elements.connectedPanel.style.right="auto",elements.connectedPanel.style.bottom="auto";const g=window.innerWidth,m=u;g-u-i{t.clientY<=80?showConnectedPanel():!elements.connectedPanel?.matches(":hover")&&!isPanelMinimized&&hideConnectedPanel()}),elements.connectedOverlay.addEventListener("mouseleave",()=>{isPanelMinimized||hideConnectedPanel()}),elements.connectedPanel&&(elements.connectedPanel.addEventListener("mouseenter",()=>{isPanelMinimized||showConnectedPanel()}),elements.connectedPanel.addEventListener("mouseleave",()=>{isPanelMinimized||hideConnectedPanel()})),elements.panelCollapsedBar){let t=!1,o=0,n={x:0,y:0};elements.panelCollapsedBar.addEventListener("mousedown",a=>{a.stopPropagation(),a.preventDefault(),control&&control.setDraggingPanel&&control.setDraggingPanel(!0),t=!1,o=Date.now(),n.x=a.clientX,n.y=a.clientY;const c=i=>{i.stopPropagation();const l=Math.abs(i.clientX-n.x),r=Math.abs(i.clientY-n.y);(l>5||r>5)&&(t=!0,startDrag(i),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d))},d=i=>{i.stopPropagation(),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d);const l=Date.now()-o,r=Math.abs(i.clientX-n.x),s=Math.abs(i.clientY-n.y);!t&&l<300&&r<=5&&s<=5?(control&&control.setDraggingPanel&&control.setDraggingPanel(!1),isPanelMinimized?togglePanelMinimize():minimizePanel()):control&&control.setDraggingPanel&&control.setDraggingPanel(!1),t=!1};document.addEventListener("mousemove",c),document.addEventListener("mouseup",d)}),elements.panelCollapsedBar.addEventListener("touchstart",a=>{a.stopPropagation(),a.preventDefault(),control&&control.setDraggingPanel&&control.setDraggingPanel(!0),t=!1,o=Date.now(),n.x=a.touches[0].clientX,n.y=a.touches[0].clientY;const c=i=>{i.stopPropagation();const l=Math.abs(i.touches[0].clientX-n.x),r=Math.abs(i.touches[0].clientY-n.y);(l>5||r>5)&&(t=!0,startDrag(i),document.removeEventListener("touchmove",c),document.removeEventListener("touchend",d))},d=i=>{i.stopPropagation(),document.removeEventListener("touchmove",c),document.removeEventListener("touchend",d);const l=Date.now()-o,r=i.changedTouches&&i.changedTouches[0]?i.changedTouches[0].clientX:n.x,s=i.changedTouches&&i.changedTouches[0]?i.changedTouches[0].clientY:n.y,u=Math.abs(r-n.x),f=Math.abs(s-n.y);!t&&l<300&&u<=5&&f<=5?(control&&control.setDraggingPanel&&control.setDraggingPanel(!1),isPanelMinimized?togglePanelMinimize():minimizePanel()):control&&control.setDraggingPanel&&control.setDraggingPanel(!1),t=!1};document.addEventListener("touchmove",c),document.addEventListener("touchend",d)},{passive:!1})}elements.video&&elements.video.addEventListener("click",t=>{(t.clientY<=80||t.target===elements.video)&&(isPanelMinimized?togglePanelMinimize():(showConnectedPanel(),hideConnectedPanel()))})}window.connect=connect,window.disconnect=disconnect,window.setDisplayId=setDisplayId,document.addEventListener("copy",e=>(e.preventDefault(),e.clipboardData.setData("text/plain",""),!1)),document.addEventListener("cut",e=>(e.preventDefault(),e.clipboardData.setData("text/plain",""),!1)),document.addEventListener("paste",e=>{const t=e.target;if(!(t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA")))return e.preventDefault(),!1}),document.addEventListener("contextmenu",e=>{const t=e.target;if(!(t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA")))return e.preventDefault(),!1}),document.addEventListener("selectstart",e=>{const t=e.target;if(!(t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT")))return e.preventDefault(),!1}),document.addEventListener("dragstart",e=>(e.preventDefault(),!1));