@colyseus/sdk 0.17.13 → 0.17.15
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/build/3rd_party/discord.cjs +1 -1
- package/build/3rd_party/discord.mjs +1 -1
- package/build/Auth.cjs +1 -1
- package/build/Auth.mjs +1 -1
- package/build/Client.cjs +3 -2
- package/build/Client.cjs.map +1 -1
- package/build/Client.d.ts +1 -1
- package/build/Client.mjs +3 -2
- package/build/Client.mjs.map +1 -1
- package/build/Connection.cjs +30 -1
- package/build/Connection.cjs.map +1 -1
- package/build/Connection.d.ts +1 -0
- package/build/Connection.mjs +27 -1
- package/build/Connection.mjs.map +1 -1
- package/build/HTTP.cjs +1 -1
- package/build/HTTP.mjs +1 -1
- package/build/Protocol.cjs +1 -1
- package/build/Protocol.mjs +1 -1
- package/build/Room.cjs +17 -14
- package/build/Room.cjs.map +1 -1
- package/build/Room.mjs +12 -9
- package/build/Room.mjs.map +1 -1
- package/build/Storage.cjs +1 -1
- package/build/Storage.mjs +1 -1
- package/build/core/nanoevents.cjs +1 -1
- package/build/core/nanoevents.mjs +1 -1
- package/build/core/signal.cjs +1 -1
- package/build/core/signal.mjs +1 -1
- package/build/core/utils.cjs +1 -1
- package/build/core/utils.mjs +1 -1
- package/build/debug.cjs +226 -113
- package/build/debug.cjs.map +1 -1
- package/build/debug.mjs +226 -113
- package/build/debug.mjs.map +1 -1
- package/build/errors/Errors.cjs +1 -12
- package/build/errors/Errors.cjs.map +1 -1
- package/build/errors/Errors.d.ts +0 -10
- package/build/errors/Errors.mjs +2 -13
- package/build/errors/Errors.mjs.map +1 -1
- package/build/index.cjs +11 -11
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +2 -2
- package/build/index.mjs +3 -3
- package/build/index.mjs.map +1 -1
- package/build/legacy.cjs +1 -1
- package/build/legacy.mjs +1 -1
- package/build/serializer/NoneSerializer.cjs +1 -1
- package/build/serializer/NoneSerializer.mjs +1 -1
- package/build/serializer/SchemaSerializer.cjs +1 -1
- package/build/serializer/SchemaSerializer.mjs +1 -1
- package/build/serializer/Serializer.cjs +1 -1
- package/build/serializer/Serializer.mjs +1 -1
- package/build/transport/H3Transport.cjs +1 -1
- package/build/transport/H3Transport.mjs +1 -1
- package/build/transport/WebSocketTransport.cjs +16 -5
- package/build/transport/WebSocketTransport.cjs.map +1 -1
- package/build/transport/WebSocketTransport.mjs +16 -5
- package/build/transport/WebSocketTransport.mjs.map +1 -1
- package/dist/colyseus-cocos-creator.js +118 -49
- package/dist/colyseus-cocos-creator.js.map +1 -1
- package/dist/colyseus.js +118 -49
- package/dist/colyseus.js.map +1 -1
- package/dist/debug.js +284 -143
- package/dist/debug.js.map +1 -1
- package/package.json +4 -4
- package/src/Client.ts +2 -2
- package/src/Connection.ts +30 -0
- package/src/Room.ts +13 -10
- package/src/debug.ts +246 -111
- package/src/errors/Errors.ts +0 -11
- package/src/index.ts +2 -2
- package/src/transport/WebSocketTransport.ts +16 -4
package/build/debug.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.cjs","sources":["../src/debug.ts"],"sourcesContent":["import { Client } from \"./Client.ts\";\nimport type { Room } from \"./Room.ts\";\nimport type { WebSocketTransport } from \"./transport/WebSocketTransport.ts\";\n\nconst logoIcon = `<svg viewBox=\"0 0 488.94 541.2\" style=\"width: 100%; height: 100%;\">\n <g>\n <g>\n <path fill=\"#ffffff\" d=\"m80.42,197.14c13.82,11.25,30.56,22.25,50.78,32.11,14.87-28.67,72.09-100.71,233.32-79.68l-14.4-55.35c-200.24-17.18-257.81,77.11-269.7,102.92Z\"/>\n <path fill=\"#ffffff\" d=\"m44.53,167.77c22.44-40.73,99.17-124.23,290.19-105.83L310.19,1.59S109.9-21.63,8.9,109.47c3.62,10.55,13.31,33.34,35.63,58.29Z\"/>\n <path fill=\"#ffffff\" d=\"m407.7,291.25c-32.14,3.35-62.02,4.95-89.63,4.95C123.09,296.2,36.78,219.6,0,164.95v251.98s15.77,162.98,488.94,115.66l-81.24-241.33Z\"/>\n </g>\n </g>\n</svg>`;\nconst envelopeUp = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-5.354 1.25 1.25a.5.5 0 0 1-.708.708L13 12.207V14a.5.5 0 0 1-1 0v-1.717l-.28.305a.5.5 0 0 1-.737-.676l1.149-1.25a.5.5 0 0 1 .722-.016\"></path></svg>`;\nconst envelopeDown = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-1.646a.5.5 0 0 1-.722-.016l-1.149-1.25a.5.5 0 1 1 .737-.676l.28.305V11a.5.5 0 0 1 1 0v1.793l.396-.397a.5.5 0 0 1 .708.708z\"></path></svg>`;\nconst messageIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480V396.4c0-4 1.5-7.8 4.2-10.7L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"/></svg>`;\nconst treeViewIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 256 256\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M160,136v-8H88v64a8,8,0,0,0,8,8h64v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176a16,16,0,0,1-16-16v-8H96a24,24,0,0,1-24-24V80H64A16,16,0,0,1,48,64V32A16,16,0,0,1,64,16H96a16,16,0,0,1,16,16V64A16,16,0,0,1,96,80H88v32h72v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176A16,16,0,0,1,160,136Z\"></path></svg>`;\nconst infoIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M256 48C141.2 48 48 141.2 48 256s93.2 208 208 208 208-93.2 208-208S370.8 48 256 48zm21 312h-42V235h42v125zm0-166h-42v-42h42v42z\"></path></svg>`;\nconst settingsIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.003 21c-.732 .001 -1.465 -.438 -1.678 -1.317a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c.886 .215 1.325 .957 1.318 1.694\"></path><path d=\"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\"></path><path d=\"M19.001 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\"></path><path d=\"M19.001 15.5v1.5\"></path><path d=\"M19.001 21v1.5\"></path><path d=\"M22.032 17.25l-1.299 .75\"></path><path d=\"M17.27 20l-1.3 .75\"></path><path d=\"M15.97 17.25l1.3 .75\"></path><path d=\"M20.733 20l1.3 .75\"></path></svg>`;\nconst eyeSlashIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg>`;\nconst closeIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M400 145.49 366.51 112 256 222.51 145.49 112 112 145.49 222.51 256 112 366.51 145.49 400 256 289.49 366.51 400 400 366.51 289.49 256 400 145.49z\"></path></svg>`;\n\n// Store debug info per room\nconst roomDebugInfo = new Map();\n\n// Single interval for all panels\nlet globalUpdateInterval = null;\n\n// Preferences state\nconst preferences = {\n maxLatency: 350, // milliseconds\n latencySimulation: {\n enabled: false,\n delay: 0 // milliseconds\n },\n panelPosition: {\n position: 'top-right' // 'bottom-right', 'bottom-left', 'top-left', 'top-right'\n }\n};\n\n// Load preferences from localStorage\nfunction loadPreferences() {\n try {\n const savedPrefs = localStorage.getItem('colyseus-debug-preferences') || '{}';\n const prefs = JSON.parse(savedPrefs);\n\n // Load position\n if (prefs.position && ['bottom-right', 'bottom-left', 'top-left', 'top-right'].includes(prefs.position)) {\n preferences.panelPosition.position = prefs.position;\n }\n\n // Load latency\n if (prefs.latency !== undefined && prefs.latency !== null) {\n const latencyValue = parseInt(prefs.latency, 10);\n if (!isNaN(latencyValue) && latencyValue >= 0 && latencyValue <= 500) {\n preferences.latencySimulation.delay = latencyValue;\n preferences.latencySimulation.enabled = latencyValue > 0;\n }\n }\n\n // Load hidden state\n if (prefs.hidden === true) {\n panelsHidden = true;\n }\n } catch (e) {\n // localStorage might not be available or JSON parse failed, ignore\n }\n}\n\n// Save preferences to localStorage\nfunction savePreferences() {\n try {\n localStorage.setItem('colyseus-debug-preferences', JSON.stringify({\n position: preferences.panelPosition.position,\n latency: preferences.latencySimulation.delay,\n hidden: panelsHidden\n }));\n } catch (e) {\n // localStorage might not be available, ignore\n }\n}\n\n// Panel visibility state\nlet panelsHidden = false;\n\n// Track open modals as an ordered stack (most recent at end)\nlet modalStack: any[] = [];\nconst BASE_MODAL_ZINDEX = 10000;\n\n// Load preferences on script load\nloadPreferences();\n\n// Function to select a modal (bring to front)\nfunction selectModal(modal) {\n if (!modal) return;\n\n // Remove modal from stack if already present\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n\n // Add to end of stack (most recent)\n modalStack.push(modal);\n\n // Update z-indexes for all modals based on their position in stack\n modalStack.forEach((m, i) => {\n if (document.body.contains(m)) {\n m.style.zIndex = (BASE_MODAL_ZINDEX + i).toString();\n }\n });\n}\n\n// Function to remove modal from stack\nfunction removeModalFromStack(modal) {\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n}\n\n// Global ESC key handler - closes most recent modal\ndocument.addEventListener('keydown', function(e) {\n if (e.key === 'Escape' && modalStack.length > 0) {\n // Get the most recent modal (top of stack)\n const topModal = modalStack[modalStack.length - 1];\n if (topModal && document.body.contains(topModal)) {\n topModal.remove();\n }\n }\n});\n\n// Shared modal creation utilities\nfunction createModalOverlay() {\n var overlay = document.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.right = '0';\n overlay.style.bottom = '0';\n overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n overlay.style.zIndex = BASE_MODAL_ZINDEX.toString();\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n return overlay;\n}\n\nfunction createModal(options) {\n var opts = options || {};\n var modal = document.createElement('div');\n\n // Set ID if provided\n if (opts.id) {\n modal.id = opts.id;\n }\n\n // Base styles\n modal.style.position = 'fixed';\n modal.style.backgroundColor = opts.backgroundColor || '#1e1e1e';\n modal.style.borderRadius = '8px';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n modal.style.zIndex = BASE_MODAL_ZINDEX.toString();\n modal.style.display = 'flex';\n modal.style.flexDirection = 'column';\n modal.style.overflow = 'hidden';\n\n // Size\n if (opts.width) modal.style.width = opts.width;\n if (opts.height) modal.style.height = opts.height;\n if (opts.minWidth) modal.style.minWidth = opts.minWidth;\n if (opts.minHeight) modal.style.minHeight = opts.minHeight;\n if (opts.maxWidth) modal.style.maxWidth = opts.maxWidth;\n if (opts.maxHeight) modal.style.maxHeight = opts.maxHeight;\n\n // Position\n modal.style.top = opts.top || '50%';\n modal.style.left = opts.left || '50%';\n modal.style.transform = opts.transform || 'translate(-50%, -50%)';\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(modal);\n });\n\n // Mark modal as selected when opened\n selectModal(modal);\n\n // Override remove to cleanup modal from stack\n var originalRemove = modal.remove.bind(modal);\n modal.remove = function() {\n // Remove from modal stack\n removeModalFromStack(modal);\n\n // Auto-cleanup room onLeave listener\n if (opts.room && opts.trackOnLeave && opts.onLeaveCallback) {\n var callbackToRemove = opts.onLeaveCallback.current || opts.onLeaveCallback;\n opts.room.onLeave.remove(callbackToRemove);\n }\n\n if (opts.onRemove) {\n opts.onRemove();\n }\n originalRemove();\n };\n\n return modal;\n}\n\nfunction createModalHeader(options) {\n var opts = options || {};\n\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = opts.padding || '8px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n header.style.paddingBottom = opts.paddingBottom || '4px';\n header.style.marginBottom = opts.marginBottom || '6px';\n header.style.cursor = opts.draggable !== false ? 'move' : 'default';\n header.style.userSelect = 'none';\n header.style.flexShrink = '0';\n header.style.position = 'relative';\n header.style.zIndex = '1';\n\n // Title\n var title = document.createElement('div');\n title.textContent = opts.title || '';\n title.style.margin = '0';\n title.style.fontSize = opts.titleSize || '11px';\n title.style.fontWeight = 'bold';\n title.style.fontFamily = opts.titleFont || 'monospace';\n title.style.flex = '1';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n\n // Status dot (optional)\n if (opts.statusDot) {\n var statusDot = document.createElement('div');\n statusDot.style.width = '8px';\n statusDot.style.height = '8px';\n statusDot.style.borderRadius = '50%';\n statusDot.style.marginRight = '8px';\n statusDot.style.flexShrink = '0';\n statusDot.style.transition = 'background-color 0.3s';\n statusDot.style.backgroundColor = opts.statusColor || '#22c55e';\n title.insertBefore(statusDot, title.firstChild);\n\n if (opts.statusDotRef) {\n opts.statusDotRef.element = statusDot;\n }\n }\n\n // Close button\n var closeButton = document.createElement('button');\n closeButton.innerHTML = closeIcon;\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '18px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.margin = 'auto';\n closeButton.style.width = '20px';\n closeButton.style.height = '20px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.style.opacity = '0.6';\n\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n closeButton.style.opacity = '1';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n closeButton.style.opacity = '0.6';\n });\n closeButton.addEventListener('click', function(e) {\n e.stopPropagation();\n if (opts.onClose) {\n opts.onClose();\n } else if (opts.modal) {\n opts.modal.remove();\n }\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n\n return { header: header, title: title, closeButton: closeButton };\n}\n\nfunction makeDraggable(modal, dragHandle) {\n var isDragging = false;\n var dragOffsetX = 0;\n var dragOffsetY = 0;\n\n dragHandle.addEventListener('mousedown', function(e) {\n isDragging = true;\n var rect = modal.getBoundingClientRect();\n dragOffsetX = e.clientX - rect.left;\n dragOffsetY = e.clientY - rect.top;\n\n // Set position to current absolute position before removing transform\n modal.style.left = rect.left + 'px';\n modal.style.top = rect.top + 'px';\n modal.style.transform = 'none';\n e.preventDefault();\n });\n\n var onMouseMove = function(e) {\n if (isDragging) {\n var newLeft = e.clientX - dragOffsetX;\n var newTop = e.clientY - dragOffsetY;\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n }\n };\n\n var onMouseUp = function() {\n isDragging = false;\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n // Return cleanup function\n return function cleanup() {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n}\n\n// Function to get border color based on latency simulation value\nfunction getBorderColor(latencyValue, opacity) {\n var maxLatency = preferences.maxLatency;\n var percentage = latencyValue / maxLatency;\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + opacity + ')';\n}\n\nfunction initialize() {\n if (panelsHidden) return;\n\n var container = document.createElement('div');\n container.id = 'debug-logo-container';\n container.style.position = 'fixed';\n container.style.zIndex = '1000';\n container.style.width = '21px';\n container.style.height = '21px';\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.border = '3px solid ' + getBorderColor(preferences.latencySimulation.delay, 0.7);\n container.style.borderRadius = '50%';\n container.style.padding = '10px';\n container.style.boxSizing = 'content-box';\n container.style.display = 'flex';\n container.style.justifyContent = 'center';\n container.style.alignItems = 'center';\n container.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.3)';\n container.style.transition = 'border-color 0.3s ease, background-color 0.3s ease';\n container.style.cursor = 'pointer';\n\n // Apply initial position\n applyPanelPosition();\n\n // container on hover effect\n container.addEventListener('mouseenter', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.9)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.9);\n });\n container.addEventListener('mouseleave', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n });\n\n var icon = document.createElement('div');\n icon.style.width = '100%';\n icon.style.height = '100%';\n icon.style.display = 'flex';\n icon.style.justifyContent = 'center';\n icon.style.alignItems = 'center';\n\n // Use insertAdjacentHTML for better Safari compatibility with SVG\n icon.insertAdjacentHTML('beforeend', logoIcon);\n\n container.appendChild(icon);\n document.body.appendChild(container);\n\n // Create menu first\n createMenu(container);\n\n // Apply initial position after menu is created\n applyPanelPosition();\n}\n\n// Create menu that opens on logo click\nfunction createMenu(logoContainer) {\n var menu = document.createElement('div');\n menu.id = 'debug-menu';\n menu.style.position = 'fixed';\n // Position will be set by applyPanelPosition\n menu.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n menu.style.color = '#fff';\n menu.style.padding = '0 0 8px 0';\n menu.style.borderRadius = '6px';\n menu.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n menu.style.fontSize = '12px';\n menu.style.zIndex = '1001';\n menu.style.minWidth = '200px';\n menu.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n menu.style.display = 'none';\n menu.style.overflow = 'hidden';\n\n // Host name display\n var hostContainer = document.createElement('div');\n hostContainer.style.padding = '6px 12px';\n hostContainer.style.cursor = 'default';\n hostContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hostContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n hostContainer.style.marginBottom = '4px';\n hostContainer.style.borderTopLeftRadius = '6px';\n hostContainer.style.borderTopRightRadius = '6px';\n\n var hostValue = document.createElement('div');\n hostValue.id = 'debug-menu-host';\n hostValue.style.fontSize = '11px';\n hostValue.style.color = '#fff';\n hostValue.style.fontFamily = 'monospace';\n hostValue.style.whiteSpace = 'nowrap';\n hostValue.style.overflow = 'hidden';\n hostValue.style.textOverflow = 'ellipsis';\n hostValue.style.textAlign = 'center';\n hostValue.style.fontWeight = '500';\n\n // Function to update host display\n function updateHostDisplay() {\n var hostText = 'N/A';\n if (roomDebugInfo.size > 0) {\n // Get host from first room\n var firstRoom = roomDebugInfo.values().next().value;\n if (firstRoom && firstRoom.host) {\n hostText = firstRoom.host;\n }\n }\n hostValue.textContent = hostText;\n }\n\n // Update host display initially\n updateHostDisplay();\n\n hostContainer.appendChild(hostValue);\n menu.appendChild(hostContainer);\n\n // Simulate latency option\n var latencyContainer = document.createElement('div');\n latencyContainer.style.padding = '8px 12px';\n latencyContainer.style.cursor = 'default';\n\n var latencyLabel = document.createElement('div');\n latencyLabel.style.marginBottom = '8px';\n latencyLabel.style.display = 'flex';\n latencyLabel.style.alignItems = 'center';\n latencyLabel.style.justifyContent = 'space-between';\n var latencyValueSpan = document.createElement('span');\n latencyValueSpan.id = 'latency-value';\n latencyValueSpan.style.color = '#888';\n latencyValueSpan.style.fontSize = '11px';\n latencyValueSpan.textContent = preferences.latencySimulation.delay + 'ms';\n\n var latencyTextSpan = document.createElement('span');\n latencyTextSpan.textContent = 'Simulate latency';\n\n latencyLabel.appendChild(latencyTextSpan);\n latencyLabel.appendChild(latencyValueSpan);\n\n var latencySlider = document.createElement('input');\n latencySlider.type = 'range';\n latencySlider.min = '0';\n latencySlider.max = preferences.maxLatency.toString();\n latencySlider.value = preferences.latencySimulation.delay.toString();\n latencySlider.style.border = 'none';\n latencySlider.style.width = '100%';\n latencySlider.style.height = '20px';\n latencySlider.style.padding = '0';\n latencySlider.style.margin = '0';\n latencySlider.style.outline = 'none';\n latencySlider.style.cursor = 'pointer';\n latencySlider.style.webkitAppearance = 'none';\n latencySlider.style.appearance = 'none';\n latencySlider.style.background = 'transparent';\n latencySlider.id = 'latency-slider';\n\n // Function to calculate color from green (0) -> yellow (250) -> red (500)\n function getSliderColor(value, min, max) {\n var percentage = (value - min) / (max - min);\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgb(' + r + ', ' + g + ', ' + b + ')';\n }\n\n // Function to update slider track color\n function updateSliderColor(value) {\n var color = getSliderColor(value, 0, preferences.maxLatency);\n var valuePercent = (value / preferences.maxLatency) * 100;\n var yellowPercent = 50; // Yellow at 250ms (50% of 500ms)\n var gradient;\n\n if (value <= preferences.maxLatency / 2) {\n // Value is in green->yellow range: show green -> yellow\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n } else {\n // Value is in yellow->red range: show green -> yellow -> current color\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${yellowPercent}%, ${color} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n }\n\n var styleId = 'latency-slider-style';\n var existingStyle = document.getElementById(styleId);\n if (existingStyle) {\n existingStyle.remove();\n }\n var style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n #latency-slider::-webkit-slider-runnable-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n #latency-slider::-moz-range-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n `;\n document.head.appendChild(style);\n }\n\n // Initialize slider color\n updateSliderColor(parseInt(latencySlider.value));\n\n // Add custom styling via CSS (inline style limitations)\n var style = document.createElement('style');\n style.textContent = `\n #latency-slider {\n background: transparent !important;\n background-color: transparent !important;\n }\n #latency-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n background-color: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n margin-top: -5px;\n }\n #latency-slider::-webkit-slider-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n #latency-slider::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n }\n #latency-slider::-moz-range-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n `;\n document.head.appendChild(style);\n\n // Function to update container border color\n function updateContainerBackgroundColor() {\n var container = document.getElementById('debug-logo-container');\n if (container) {\n // Update to normal state (hover handlers will update on hover)\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n }\n }\n\n // Update latency value display\n latencySlider.addEventListener('input', function() {\n var value = parseInt(latencySlider.value);\n latencyValueSpan.textContent = value + 'ms';\n preferences.latencySimulation.delay = value;\n preferences.latencySimulation.enabled = value > 0;\n updateSliderColor(value);\n updateContainerBackgroundColor();\n savePreferences();\n });\n\n latencyContainer.appendChild(latencyLabel);\n latencyContainer.appendChild(latencySlider);\n menu.appendChild(latencyContainer);\n\n // Separator\n var separator = document.createElement('div');\n separator.style.height = '1px';\n separator.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n separator.style.margin = '4px 0';\n menu.appendChild(separator);\n\n // Settings option\n var settingsOption = document.createElement('div');\n settingsOption.style.padding = '8px 12px';\n settingsOption.style.cursor = 'pointer';\n settingsOption.style.transition = 'background-color 0.2s';\n settingsOption.style.display = 'flex';\n settingsOption.style.alignItems = 'center';\n settingsOption.style.gap = '8px';\n\n var settingsIconWrapper = document.createElement('span');\n settingsIconWrapper.style.display = 'inline-flex';\n settingsIconWrapper.style.alignItems = 'center';\n settingsIconWrapper.style.width = '16px';\n settingsIconWrapper.style.height = '16px';\n settingsIconWrapper.innerHTML = settingsIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"16\" width=\"16\"');\n\n var settingsText = document.createElement('span');\n settingsText.textContent = 'Preferences';\n\n settingsOption.appendChild(settingsIconWrapper);\n settingsOption.appendChild(settingsText);\n\n settingsOption.addEventListener('mouseenter', function() {\n settingsOption.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n settingsOption.addEventListener('mouseleave', function() {\n settingsOption.style.backgroundColor = 'transparent';\n });\n settingsOption.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n openSettingsModal();\n });\n menu.appendChild(settingsOption);\n\n document.body.appendChild(menu);\n\n // Toggle menu on logo click\n var menuVisible = false;\n var hostUpdateInterval = null;\n logoContainer.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = !menuVisible;\n menu.style.display = menuVisible ? 'block' : 'none';\n\n if (menuVisible) {\n updateHostDisplay();\n // Update host every second while menu is visible\n hostUpdateInterval = setInterval(updateHostDisplay, 1000);\n } else {\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n\n // Close menu when clicking outside\n document.addEventListener('click', function(e) {\n if (menuVisible && !menu.contains(e.target as Node) && !logoContainer.contains(e.target as Node)) {\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n}\n\n// Create and open Settings modal\nfunction openSettingsModal() {\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-settings-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Create overlay using shared utility\n var overlay = createModalOverlay();\n overlay.id = 'debug-settings-overlay';\n\n // Create modal (non-fixed positioning for overlay)\n var modal = document.createElement('div');\n modal.id = 'debug-settings-modal';\n modal.style.position = 'relative'; // relative position for centered overlay content\n modal.style.backgroundColor = 'rgba(30, 30, 30, 0.98)';\n modal.style.borderRadius = '8px';\n modal.style.width = '90%';\n modal.style.maxWidth = '500px';\n modal.style.maxHeight = '90vh';\n modal.style.overflowY = 'auto';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n\n // Modal header\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = '20px 24px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var title = document.createElement('h2');\n title.textContent = 'Preferences';\n title.style.margin = '0';\n title.style.fontSize = '18px';\n title.style.fontWeight = '600';\n\n var closeButton = document.createElement('button');\n closeButton.innerHTML = '×';\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '24px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.width = '32px';\n closeButton.style.height = '32px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n });\n closeButton.addEventListener('click', function() {\n overlay.remove();\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n modal.appendChild(header);\n\n // Position option\n var positionContainer = document.createElement('div');\n positionContainer.style.padding = '20px 24px';\n positionContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n positionContainer.style.display = 'flex';\n positionContainer.style.justifyContent = 'space-between';\n positionContainer.style.alignItems = 'center';\n positionContainer.style.gap = '16px';\n\n var positionTextContainer = document.createElement('div');\n positionTextContainer.style.flex = '1';\n\n var positionTitle = document.createElement('div');\n positionTitle.style.fontSize = '14px';\n positionTitle.style.fontWeight = '600';\n positionTitle.style.marginBottom = '4px';\n positionTitle.textContent = 'Position';\n\n var positionDescription = document.createElement('div');\n positionDescription.style.fontSize = '12px';\n positionDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n positionDescription.textContent = 'Adjust the placement of the panels.';\n\n positionTextContainer.appendChild(positionTitle);\n positionTextContainer.appendChild(positionDescription);\n\n var positionSelect = document.createElement('select');\n positionSelect.style.minWidth = '150px';\n positionSelect.style.padding = '8px 12px';\n positionSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n positionSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n positionSelect.style.borderRadius = '4px';\n positionSelect.style.color = '#fff';\n positionSelect.style.fontSize = '14px';\n positionSelect.style.cursor = 'pointer';\n positionSelect.style.outline = 'none';\n\n var positions = [\n { value: 'bottom-left', label: 'Bottom Left' },\n { value: 'bottom-right', label: 'Bottom Right' },\n { value: 'top-left', label: 'Top Left' },\n { value: 'top-right', label: 'Top Right' }\n ];\n\n positions.forEach(function(pos) {\n var option = document.createElement('option');\n option.value = pos.value;\n option.textContent = pos.label;\n if (preferences.panelPosition.position === pos.value) {\n option.selected = true;\n }\n positionSelect.appendChild(option);\n });\n\n positionSelect.addEventListener('change', function() {\n preferences.panelPosition.position = positionSelect.value;\n applyPanelPosition();\n savePreferences();\n });\n\n positionContainer.appendChild(positionTextContainer);\n positionContainer.appendChild(positionSelect);\n modal.appendChild(positionContainer);\n\n // Disable instruction\n var disableContainer = document.createElement('div');\n disableContainer.style.padding = '20px 24px';\n disableContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var disableTitle = document.createElement('div');\n disableTitle.style.fontSize = '14px';\n disableTitle.style.fontWeight = '600';\n disableTitle.style.marginBottom = '4px';\n disableTitle.textContent = 'Disable Dev Tools';\n\n var disableDescription = document.createElement('div');\n disableDescription.style.fontSize = '12px';\n disableDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n disableDescription.style.marginBottom = '8px';\n disableDescription.innerHTML = 'To disable this UI completely, remove the <code style=\"background: rgba(255, 255, 255, 0.1); padding: 2px 6px; border-radius: 3px; font-family: monospace; font-size: 11px;\">debug.js</code> script from your HTML file.';\n\n disableContainer.appendChild(disableTitle);\n disableContainer.appendChild(disableDescription);\n modal.appendChild(disableContainer);\n\n // Hide panels button\n var hideContainer = document.createElement('div');\n hideContainer.style.padding = '20px 24px';\n hideContainer.style.display = 'flex';\n hideContainer.style.justifyContent = 'space-between';\n hideContainer.style.alignItems = 'center';\n hideContainer.style.gap = '16px';\n\n var hideTextContainer = document.createElement('div');\n hideTextContainer.style.flex = '1';\n\n var hideTitle = document.createElement('div');\n hideTitle.style.fontSize = '14px';\n hideTitle.style.fontWeight = '600';\n hideTitle.style.marginBottom = '4px';\n hideTitle.textContent = 'Hide Dev Tools for this session';\n\n var hideDescription = document.createElement('div');\n hideDescription.style.fontSize = '12px';\n hideDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n hideDescription.textContent = 'Hide Dev Tools until you refresh the page.';\n\n hideTextContainer.appendChild(hideTitle);\n hideTextContainer.appendChild(hideDescription);\n\n var hideButton = document.createElement('button');\n hideButton.textContent = 'Hide';\n hideButton.style.padding = '8px 16px';\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hideButton.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n hideButton.style.borderRadius = '4px';\n hideButton.style.color = '#fff';\n hideButton.style.fontSize = '14px';\n hideButton.style.cursor = 'pointer';\n hideButton.style.transition = 'background-color 0.2s';\n hideButton.style.display = 'flex';\n hideButton.style.alignItems = 'center';\n hideButton.style.gap = '8px';\n hideButton.style.flexShrink = '0';\n\n hideButton.insertAdjacentHTML('afterbegin', eyeSlashIcon);\n\n hideButton.addEventListener('mouseenter', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n });\n hideButton.addEventListener('mouseleave', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n hideButton.addEventListener('click', function() {\n hidePanelsForSession();\n overlay.remove();\n });\n\n hideContainer.appendChild(hideTextContainer);\n hideContainer.appendChild(hideButton);\n modal.appendChild(hideContainer);\n\n overlay.appendChild(modal);\n document.body.appendChild(overlay);\n\n // Mark as selected modal when opened\n selectModal(overlay);\n\n // Update close button to cleanup from modal stack\n var originalOverlayRemove = overlay.remove.bind(overlay);\n overlay.remove = function() {\n removeModalFromStack(overlay);\n originalOverlayRemove();\n };\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(overlay);\n });\n\n // Close on overlay click\n overlay.addEventListener('click', function(e) {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n}\n\n// Create and open Send Messages modal\nfunction openSendMessagesModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n var messageTypes = debugInfo.messageTypes;\n\n if (!messageTypes) {\n console.warn('No message types available for this room');\n return;\n }\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-send-messages-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n var updateConnectionStatus: any = null;\n var onLeaveCallbackRef: any = { current: null };\n\n // Function to update status dot color\n const updateSendMsgStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Initial callback\n onLeaveCallbackRef.current = updateSendMsgStatusDot;\n room.onLeave(updateSendMsgStatusDot);\n\n // Create modal using shared utility\n const modal = createModal({\n id: 'debug-send-messages-modal',\n width: '400px',\n minWidth: '300px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n room: room,\n trackOnLeave: true,\n onLeaveCallback: onLeaveCallbackRef\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: debugInfo.roomName + ' - Send Message',\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n\n modal.appendChild(headerComponents.header);\n\n // Make modal draggable\n makeDraggable(modal, headerComponents.header);\n\n // Update status dot initially\n updateSendMsgStatusDot();\n\n // Form content container (scrollable)\n var formContainer = document.createElement('div');\n formContainer.style.padding = '8px';\n formContainer.style.overflowY = 'auto';\n formContainer.style.backgroundColor = '#1e1e1e';\n\n // Message Type Selector\n var typeLabel = document.createElement('label');\n typeLabel.textContent = 'Message Type';\n typeLabel.style.display = 'block';\n typeLabel.style.fontSize = '11px';\n typeLabel.style.fontWeight = '600';\n typeLabel.style.marginBottom = '4px';\n typeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var typeSelect = document.createElement('select');\n typeSelect.style.width = '100%';\n typeSelect.style.padding = '6px 8px';\n typeSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n typeSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n typeSelect.style.borderRadius = '4px';\n typeSelect.style.color = '#fff';\n typeSelect.style.fontSize = '12px';\n typeSelect.style.cursor = 'pointer';\n typeSelect.style.outline = 'none';\n typeSelect.style.marginBottom = '12px';\n\n // Add default option\n var defaultOption = document.createElement('option');\n defaultOption.value = '';\n defaultOption.textContent = 'Select a message type';\n defaultOption.disabled = true;\n defaultOption.selected = true;\n typeSelect.appendChild(defaultOption);\n\n // Add message types\n Object.keys(messageTypes).forEach(function(msgType) {\n var option = document.createElement('option');\n option.value = msgType;\n option.textContent = msgType;\n typeSelect.appendChild(option);\n });\n\n // Add wildcard option for custom message types\n var wildcardOption = document.createElement('option');\n wildcardOption.value = '*';\n wildcardOption.textContent = '* (Custom)';\n typeSelect.appendChild(wildcardOption);\n\n formContainer.appendChild(typeLabel);\n formContainer.appendChild(typeSelect);\n\n // Custom Message Type Input Container (shown when \"*\" is selected)\n var customTypeContainer = document.createElement('div');\n customTypeContainer.style.display = 'none';\n customTypeContainer.style.marginBottom = '12px';\n\n var customTypeLabel = document.createElement('label');\n customTypeLabel.textContent = 'Message Type';\n customTypeLabel.style.display = 'block';\n customTypeLabel.style.fontSize = '11px';\n customTypeLabel.style.fontWeight = '600';\n customTypeLabel.style.marginBottom = '4px';\n customTypeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var customTypeInput = document.createElement('input');\n customTypeInput.type = 'text';\n customTypeInput.placeholder = 'Enter message type name';\n customTypeInput.style.width = '100%';\n customTypeInput.style.padding = '6px 8px';\n customTypeInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n customTypeInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n customTypeInput.style.borderRadius = '4px';\n customTypeInput.style.color = '#fff';\n customTypeInput.style.fontSize = '11px';\n customTypeInput.style.fontFamily = 'monospace';\n customTypeInput.style.outline = 'none';\n\n customTypeContainer.appendChild(customTypeLabel);\n customTypeContainer.appendChild(customTypeInput);\n formContainer.appendChild(customTypeContainer);\n\n // Message Payload Input Container\n var payloadContainer = document.createElement('div');\n payloadContainer.style.display = 'none';\n payloadContainer.style.marginBottom = '12px';\n\n var payloadLabel = document.createElement('label');\n payloadLabel.textContent = 'Payload';\n payloadLabel.style.display = 'block';\n payloadLabel.style.fontSize = '11px';\n payloadLabel.style.fontWeight = '600';\n payloadLabel.style.marginBottom = '4px';\n payloadLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var payloadFieldsContainer = document.createElement('div');\n payloadFieldsContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadFieldsContainer.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadFieldsContainer.style.borderRadius = '4px';\n payloadFieldsContainer.style.padding = '8px';\n payloadFieldsContainer.style.fontFamily = 'monospace';\n payloadFieldsContainer.style.fontSize = '11px';\n\n var payloadTextarea = document.createElement('textarea');\n payloadTextarea.style.width = '100%';\n payloadTextarea.style.minHeight = '80px';\n payloadTextarea.style.padding = '6px 8px';\n payloadTextarea.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadTextarea.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadTextarea.style.borderRadius = '4px';\n payloadTextarea.style.color = '#fff';\n payloadTextarea.style.fontSize = '11px';\n payloadTextarea.style.fontFamily = 'monospace';\n payloadTextarea.style.outline = 'none';\n payloadTextarea.style.resize = 'vertical';\n payloadTextarea.placeholder = '{}';\n payloadTextarea.value = '{}';\n\n payloadContainer.appendChild(payloadLabel);\n payloadContainer.appendChild(payloadFieldsContainer);\n payloadContainer.appendChild(payloadTextarea);\n formContainer.appendChild(payloadContainer);\n\n // Error message container\n var errorContainer = document.createElement('div');\n errorContainer.style.display = 'none';\n errorContainer.style.padding = '6px 8px';\n errorContainer.style.backgroundColor = 'rgba(220, 38, 38, 0.2)';\n errorContainer.style.border = '1px solid rgba(220, 38, 38, 0.4)';\n errorContainer.style.borderRadius = '4px';\n errorContainer.style.marginBottom = '8px';\n errorContainer.style.fontSize = '11px';\n errorContainer.style.color = '#fca5a5';\n\n formContainer.appendChild(errorContainer);\n\n // Variables to store current message type and its schema\n var currentFormInputs: any = {};\n var currentMessageType = '';\n\n // Update payload fields based on selected message type\n typeSelect.addEventListener('change', function() {\n var selectedType = typeSelect.value;\n currentMessageType = selectedType;\n\n if (selectedType) {\n // Show/hide custom type input based on selection\n if (selectedType === '*') {\n customTypeContainer.style.display = 'block';\n customTypeInput.focus();\n } else {\n customTypeContainer.style.display = 'none';\n }\n\n payloadContainer.style.display = 'block';\n errorContainer.style.display = 'none';\n currentFormInputs = {};\n\n // Clear previous fields\n payloadFieldsContainer.innerHTML = '';\n\n var schema = messageTypes[selectedType];\n\n // If schema exists and has properties, create form inputs\n if (schema && schema.properties && Object.keys(schema.properties).length > 0) {\n payloadTextarea.style.display = 'none';\n payloadFieldsContainer.style.display = 'block';\n\n // Generate form fields based on schema\n Object.keys(schema.properties).forEach(function(fieldName) {\n var fieldSchema = schema.properties[fieldName];\n var fieldContainer = document.createElement('div');\n fieldContainer.style.marginBottom = '8px';\n\n var fieldLabel = document.createElement('label');\n fieldLabel.textContent = fieldName;\n if (schema.required && schema.required.includes(fieldName)) {\n fieldLabel.textContent += ' *';\n }\n fieldLabel.style.display = 'block';\n fieldLabel.style.fontSize = '10px';\n fieldLabel.style.marginBottom = '3px';\n fieldLabel.style.color = 'rgba(255, 255, 255, 0.8)';\n\n var fieldInput;\n\n if (fieldSchema.type === 'boolean') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'checkbox';\n fieldInput.style.width = '16px';\n fieldInput.style.height = '16px';\n fieldInput.style.cursor = 'pointer';\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'number';\n if (fieldSchema.type === 'integer') {\n fieldInput.step = '1';\n }\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n } else {\n fieldInput = document.createElement('input');\n fieldInput.type = 'text';\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n }\n\n if (fieldSchema.description) {\n var fieldDesc = document.createElement('div');\n fieldDesc.textContent = fieldSchema.description;\n fieldDesc.style.fontSize = '9px';\n fieldDesc.style.color = 'rgba(255, 255, 255, 0.5)';\n fieldDesc.style.marginTop = '2px';\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n fieldContainer.appendChild(fieldDesc);\n } else {\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n }\n\n payloadFieldsContainer.appendChild(fieldContainer);\n currentFormInputs[fieldName] = { input: fieldInput, schema: fieldSchema };\n });\n } else {\n // Use JSON textarea for free-form input (no schema or empty schema)\n payloadTextarea.style.display = 'block';\n payloadFieldsContainer.style.display = 'none';\n payloadTextarea.value = '{}';\n\n // Update placeholder based on whether schema exists\n if (!schema) {\n payloadTextarea.placeholder = 'Enter JSON payload (no message format defined)\\n\\nExample:\\n{\\n \"key\": \"value\"\\n}';\n } else {\n payloadTextarea.placeholder = '{}';\n }\n }\n } else {\n payloadContainer.style.display = 'none';\n }\n });\n\n // Send Button\n var sendButton = document.createElement('button');\n sendButton.textContent = 'Send';\n sendButton.style.width = '100%';\n sendButton.style.padding = '8px 12px';\n sendButton.style.backgroundColor = '#8b5cf6';\n sendButton.style.border = 'none';\n sendButton.style.borderRadius = '4px';\n sendButton.style.color = '#fff';\n sendButton.style.fontSize = '12px';\n sendButton.style.fontWeight = '600';\n sendButton.style.cursor = 'pointer';\n sendButton.style.transition = 'background-color 0.2s';\n\n var isButtonInSuccessState = false;\n var hoverColor = '#7c3aed';\n var normalColor = '#8b5cf6';\n\n sendButton.addEventListener('mouseenter', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = hoverColor;\n }\n });\n sendButton.addEventListener('mouseleave', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = normalColor;\n }\n });\n\n // Update the connection status function to also manage button state\n updateConnectionStatus = function() {\n const isConnected = room.connection?.isOpen;\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = isConnected ? '#22c55e' : '#ef4444';\n }\n\n // Update button disabled state\n sendButton.disabled = !isConnected;\n if (!isConnected) {\n sendButton.style.backgroundColor = '#6b7280';\n sendButton.style.cursor = 'not-allowed';\n sendButton.style.opacity = '0.5';\n } else if (!isButtonInSuccessState) {\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n sendButton.style.opacity = '1';\n }\n };\n\n // Swap out the onLeave callback to use the combined update function\n room.onLeave.remove(onLeaveCallbackRef.current);\n room.onLeave(updateConnectionStatus);\n onLeaveCallbackRef.current = updateConnectionStatus;\n\n updateConnectionStatus();\n\n sendButton.addEventListener('click', function() {\n errorContainer.style.display = 'none';\n\n // Check if room is connected\n if (!room.connection?.isOpen) {\n errorContainer.textContent = 'Cannot send message: Room is not connected';\n errorContainer.style.display = 'block';\n return;\n }\n\n if (!currentMessageType) {\n errorContainer.textContent = 'Please select a message type';\n errorContainer.style.display = 'block';\n return;\n }\n\n // Determine actual message type to send\n var actualMessageType = currentMessageType;\n if (currentMessageType === '*') {\n actualMessageType = customTypeInput.value.trim();\n if (!actualMessageType) {\n errorContainer.textContent = 'Please enter a message type name';\n errorContainer.style.display = 'block';\n return;\n }\n }\n\n try {\n var payload;\n\n // Build payload from form inputs or textarea\n if (Object.keys(currentFormInputs).length > 0) {\n payload = {};\n var schema = messageTypes[currentMessageType];\n\n for (var fieldName in currentFormInputs) {\n var fieldData = currentFormInputs[fieldName];\n var input = fieldData.input;\n var fieldSchema = fieldData.schema;\n var value;\n\n if (fieldSchema.type === 'boolean') {\n value = input.checked;\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n value = input.value ? parseFloat(input.value) : undefined;\n } else {\n value = input.value || undefined;\n }\n\n // Only include required fields or fields with values\n if (value !== undefined || (schema.required && schema.required.includes(fieldName))) {\n payload[fieldName] = value;\n }\n }\n } else {\n payload = JSON.parse(payloadTextarea.value);\n }\n\n // Send the message\n room.send(actualMessageType, payload);\n\n // Change button to success state\n isButtonInSuccessState = true;\n sendButton.textContent = 'Message sent!';\n sendButton.style.backgroundColor = '#22c55e';\n sendButton.style.cursor = 'default';\n\n // Restore button after 1.5 seconds\n setTimeout(function() {\n isButtonInSuccessState = false;\n sendButton.textContent = 'Send';\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n }, 800);\n\n } catch (e) {\n errorContainer.textContent = 'Error: ' + e.message;\n errorContainer.style.display = 'block';\n }\n });\n\n formContainer.appendChild(sendButton);\n\n modal.appendChild(formContainer);\n document.body.appendChild(modal);\n}\n\n// Create and open State Inspector modal\nfunction openStateInspectorModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-state-inspector-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Load saved position and size from localStorage\n var savedStateInspectorPrefs = null;\n try {\n var saved = localStorage.getItem('colyseus-state-inspector-preferences');\n if (saved) {\n savedStateInspectorPrefs = JSON.parse(saved);\n }\n } catch (e) {\n // Ignore localStorage errors\n }\n\n // Default values\n var defaultWidth = 600;\n var defaultHeight = 500;\n var defaultLeft = '50%';\n var defaultTop = '50%';\n var defaultTransform = 'translate(-50%, -50%)';\n\n // Use saved preferences if available\n if (savedStateInspectorPrefs) {\n if (savedStateInspectorPrefs.width && savedStateInspectorPrefs.width >= 300) {\n defaultWidth = savedStateInspectorPrefs.width;\n }\n if (savedStateInspectorPrefs.height && savedStateInspectorPrefs.height >= 200) {\n defaultHeight = savedStateInspectorPrefs.height;\n }\n if (savedStateInspectorPrefs.left !== undefined && savedStateInspectorPrefs.top !== undefined) {\n // Constrain position to window boundaries\n var maxLeft = window.innerWidth - defaultWidth;\n var maxTop = window.innerHeight - defaultHeight;\n\n var constrainedLeft = Math.max(0, Math.min(savedStateInspectorPrefs.left, maxLeft));\n var constrainedTop = Math.max(0, Math.min(savedStateInspectorPrefs.top, maxTop));\n\n defaultLeft = constrainedLeft + 'px';\n defaultTop = constrainedTop + 'px';\n defaultTransform = 'none';\n }\n }\n\n // Function to save state inspector preferences\n function saveStateInspectorPreferences() {\n try {\n var rect = modal.getBoundingClientRect();\n var prefs = {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n top: rect.top\n };\n localStorage.setItem('colyseus-state-inspector-preferences', JSON.stringify(prefs));\n } catch (e) {\n // Ignore localStorage errors\n }\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n\n // Function to update status dot color\n const updateStateViewerStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Register the onLeave callback\n room.onLeave(updateStateViewerStatusDot);\n\n // Create modal using shared utility with automatic onLeave tracking\n const modal = createModal({\n id: 'debug-state-inspector-modal',\n width: defaultWidth + 'px',\n height: defaultHeight + 'px',\n minWidth: '300px',\n minHeight: '200px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n top: defaultTop,\n left: defaultLeft,\n transform: defaultTransform,\n room: room,\n trackOnLeave: true,\n onLeaveCallback: updateStateViewerStatusDot\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: `${debugInfo.roomName} - State Viewer`,\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n const header = headerComponents.header;\n const closeButton = headerComponents.closeButton;\n\n modal.appendChild(header);\n\n // Update status dot initially\n updateStateViewerStatusDot();\n\n // State content container\n var contentContainer = document.createElement('div');\n contentContainer.style.padding = '8px';\n contentContainer.style.overflowY = 'auto';\n contentContainer.style.flex = '1';\n contentContainer.style.minHeight = '0';\n contentContainer.style.backgroundColor = '#1e1e1e';\n contentContainer.id = 'debug-state-content';\n\n // Single event listener for all expand buttons (event delegation)\n contentContainer.addEventListener('click', function(e: MouseEvent) {\n var expandButton = (e.target as HTMLElement).closest('[data-expand-button]');\n if (expandButton) {\n e.stopPropagation();\n toggleExpand(expandButton);\n }\n });\n\n // // Counter for unique IDs\n // var stateNodeCounter = 0;\n\n // Track expanded paths across re-renders\n var expandedPaths = new Set();\n\n // Helper function to escape HTML\n function escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n // Helper function to check if a value is expandable (object, array, or collection)\n function isExpandable(value) {\n if (value === null || value === undefined) {\n return false;\n }\n var valueType = typeof value;\n var isObject = valueType === 'object' && !(value instanceof Array);\n var hasForEach = valueType === 'object' && typeof value.forEach === 'function';\n var isArray = value instanceof Array;\n return isObject || isArray || hasForEach;\n }\n\n // Helper function to get label color based on field name\n function getLabelColor(fieldName) {\n return typeof fieldName === 'string' && fieldName.startsWith('\"') ? '#CE9178' : '#DCDCAA';\n }\n\n // Helper function to get display state for expandable nodes\n function getDisplayState(depth, isPathExpanded) {\n var isRoot = depth === 0;\n return {\n isRoot: isRoot,\n initialDisplay: isRoot ? 'block' : (isPathExpanded ? 'block' : 'none'),\n initialIcon: (isRoot || isPathExpanded) ? '▼' : '▶',\n rootClass: isRoot ? ' data-root-node=\"true\"' : ''\n };\n }\n\n // Helper function to get refId display string\n function getRefIdDisplay(refId) {\n return refId !== null && refId !== undefined ? '<span style=\"color: #909090; font-size: 11px; margin-left: 4px;\">(ref: ' + refId + ')</span>' : '';\n }\n\n // Helper function to render expand button HTML\n function renderExpandButton(displayState, displayLabel, refIdDisplay, size) {\n var html = '<div data-expand-button' + displayState.rootClass + ' style=\"display: flex; align-items: center; cursor: ' + (displayState.isRoot ? 'default' : 'pointer') + '; user-select: none; margin: 0; padding: 1px 0;\" onmouseover=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'rgba(255,255,255,0.05)\\'') + '\" onmouseout=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'transparent\\'') + '\">';\n html += '<span data-expand-icon style=\"margin-right: 4px; color: #858585; font-size: 10px; width: 10px; display: inline-block; text-align: center; user-select: none;\">' + displayState.initialIcon + '</span>';\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span>';\n }\n if (size !== null && size !== undefined && size !== '?') {\n // ×\n html += ' <span style=\"color: #858585;\">(' + size + ') </span>';\n }\n html += refIdDisplay;\n html += '</div>';\n return html;\n }\n\n // Helper function to render a key-value pair\n function renderKeyValue(key, value, depth, currentPath, keyDisplay, isKeyString) {\n if (isExpandable(value)) {\n // For expandable values, renderState handles its own container with proper indentation\n // Pass the fieldName so it displays the key as the label\n if (keyDisplay !== null) {\n return renderState(value, depth, String(key), currentPath, keyDisplay);\n } else {\n return renderState(value, depth, String(key), currentPath);\n }\n } else {\n // For primitive values, wrap in a div with key-value formatting\n // Add padding-left to align with expandable items (icon width 10px + margin-right 4px = 14px)\n var indent = depth * 6;\n var html = '<div style=\"margin-left: ' + indent + 'px; padding-left: 14px;\">';\n if (keyDisplay !== null) {\n var keyColor = isKeyString ? '#CE9178' : '#DCDCAA';\n html += '<span style=\"color: ' + keyColor + ';\">' + (isKeyString ? '\"' + escapeHtml(String(keyDisplay)) + '\"' : escapeHtml(String(keyDisplay))) + '</span><span style=\"color: #858585;\">: </span>';\n } else {\n html += '<span style=\"color: #DCDCAA;\">' + escapeHtml(String(key)) + '</span><span style=\"color: #858585;\">: </span>';\n }\n html += renderState(value, depth + 1, String(key), currentPath);\n html += '</div>';\n return html;\n }\n }\n\n // Function to render state recursively\n function renderState(\n obj: any,\n depth: number = 0,\n parentKey: string = '',\n path: string = '',\n fieldName: string = null\n ) {\n var maxDepth = 10;\n if (depth > maxDepth) {\n return '<span style=\"color: #858585; font-style: italic;\">[Max depth reached]</span>';\n }\n\n if (obj === null) {\n return '<span style=\"color: #858585;\">null</span>';\n }\n\n if (obj === undefined) {\n return '<span style=\"color: #858585;\">undefined</span>';\n }\n\n var type = typeof obj;\n var indent = depth * 6;\n var refId = obj[\"~refId\"];\n var nodeId = 'state-node-' + refId;\n var currentPath = path ? path + '.' + (parentKey || '') : (parentKey || 'root');\n var isPathExpanded = expandedPaths.has(currentPath);\n var refIdDisplay = getRefIdDisplay(refId);\n\n if (type === 'string') {\n return '<span style=\"color: #CE9178;\">\"' + escapeHtml(String(obj)) + '\"</span>';\n }\n\n if (type === 'number') {\n return '<span style=\"color: #B5CEA8;\">' + obj + '</span>';\n }\n\n if (type === 'boolean') {\n return '<span style=\"color: #569CD6;\">' + obj + '</span>';\n }\n\n // Check if object has forEach method\n var hasForEach = typeof obj.forEach === 'function';\n var collectionSize = (hasForEach) && (obj.size || obj.length) || null;\n\n if (hasForEach) {\n var size = (collectionSize !== null ? collectionSize : '?');\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'State' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, size);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n // Handle forEach collections (Map, Set, etc.)\n var isSet = obj instanceof Set || (obj.constructor && obj.constructor.name === 'Set');\n try {\n obj.forEach(function (value, key) {\n if (isSet) {\n // For Sets, forEach passes (value, value, set), so we only use the first parameter\n html += renderState(value, depth + 1, String(key), currentPath);\n } else {\n // For Maps, format key and use renderKeyValue to handle expandable values and proper formatting\n var isKeyNumber = typeof key === 'number';\n var keyStr = isKeyNumber ? '[' + String(key) + ']' : String(key);\n html += renderKeyValue(key, value, depth + 1, currentPath, keyStr, typeof key === 'string');\n }\n });\n } catch (e) {\n var errorIndent = (depth + 1) * 6;\n html += '<div style=\"margin-left: ' + errorIndent + 'px; color: #e74856;\">Error iterating: ' + escapeHtml(e.message) + '</div>';\n }\n\n html += '</div>';\n html += '</div>';\n return html;\n }\n\n if (type === 'object') {\n var keys = Object.keys(obj);\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'state' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n\n if (keys.length === 0) {\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span><span style=\"color: #858585;\"> {}</span>' + refIdDisplay;\n } else {\n html += '<span style=\"color: #858585;\">{}</span>' + refIdDisplay;\n }\n } else {\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, null);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key === \"~refId\") continue;// skip refId\n html += renderKeyValue(key, obj[key], depth + 1, currentPath, key, false);\n }\n\n html += '</div>';\n }\n\n html += '</div>';\n return html;\n }\n\n return '<span style=\"color: #858585;\">' + escapeHtml(String(obj)) + '</span>';\n }\n\n // Function to toggle expand/collapse\n function toggleExpand(expandButton) {\n // Don't allow collapsing root node\n var content = expandButton.nextElementSibling;\n var icon = expandButton.querySelector('[data-expand-icon]');\n if (content && content.style) {\n var isHidden = content.style.display === 'none';\n content.style.display = isHidden ? 'block' : 'none';\n if (icon) {\n icon.textContent = isHidden ? '▼' : '▶';\n }\n\n // Track expanded state by path\n var pathElement = expandButton.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n if (isHidden) {\n expandedPaths.add(path);\n } else {\n expandedPaths.delete(path);\n }\n }\n }\n }\n\n // Function to update state display\n function updateStateDisplay() {\n try {\n // Save currently expanded paths before clearing\n var currentExpandedPaths = new Set();\n var existingExpandButtons = contentContainer.querySelectorAll('[data-expand-button]');\n for (var i = 0; i < existingExpandButtons.length; i++) {\n var button = existingExpandButtons[i];\n var pathElement = button.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n var content = button.nextElementSibling as HTMLElement;\n if (content && content.style && content.style.display !== 'none') {\n currentExpandedPaths.add(path);\n }\n }\n }\n\n // Merge with previously tracked expanded paths\n // Keep paths that were expanded before, or are currently expanded\n var pathsToKeep = new Set();\n expandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n currentExpandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n expandedPaths = pathsToKeep;\n\n // stateNodeCounter = 0; // Reset counter for new render\n var state = room.state || {};\n contentContainer.innerHTML = '<div style=\"font-family: \\'Consolas\\', \\'Monaco\\', \\'Courier New\\', monospace; font-size: 12px; line-height: 1.5; color: #d4d4d4; padding: 8px;\">' + renderState(state) + '</div>';\n\n // Event delegation: single click listener handles all expand buttons\n } catch (e) {\n contentContainer.innerHTML = '<div style=\"color: #e74856; padding: 20px;\">Error accessing room state: ' + escapeHtml(e.message) + '</div>';\n }\n }\n\n // Throttle function to prevent excessive re-renders\n // TODO: prevent re-renders of unchanged refIds instead of just throttling\n function throttle(func, wait) {\n var timeout;\n var previous = 0;\n return function executedFunction() {\n var context = this;\n var args = arguments;\n var now = Date.now();\n var remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(function() {\n previous = Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n }\n\n // Create throttled version of updateStateDisplay\n var throttledUpdateStateDisplay = throttle(updateStateDisplay, 200);\n\n // Initial render - root is always expanded\n expandedPaths.add('root');\n updateStateDisplay();\n\n // Update state when it changes\n const originalTriggerChanges = room.serializer.decoder.triggerChanges;\n room.serializer.decoder.triggerChanges = function(changes) {\n originalTriggerChanges?.apply(this, arguments);\n throttledUpdateStateDisplay();\n /**\n * TODO: keep track of which refIds have changed and only re-render those\n */\n }\n\n modal.appendChild(contentContainer);\n document.body.appendChild(modal);\n\n // Drag and resize state variables\n var isDragging = false;\n var dragStartX = 0;\n var dragStartY = 0;\n var modalStartX = 0;\n var modalStartY = 0;\n var isResizing = false;\n var resizeHandle = null;\n var resizeStartX = 0;\n var resizeStartY = 0;\n var resizeStartWidth = 0;\n var resizeStartHeight = 0;\n var resizeStartLeft = 0;\n var resizeStartTop = 0;\n\n header.addEventListener('mousedown', function(e) {\n const target = e.target as HTMLElement;\n // Don't drag if clicking on a resize handle\n if (target.classList && target.classList.contains('resize-handle')) {\n return;\n }\n if (target === closeButton || closeButton.contains(target)) {\n return; // Don't drag when clicking close button\n }\n isDragging = true;\n dragStartX = e.clientX;\n dragStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n modalStartX = rect.left;\n modalStartY = rect.top;\n modal.style.cursor = 'move';\n e.preventDefault();\n });\n\n var handleMouseMove = function(e) {\n if (isResizing && resizeHandle) {\n // Handle resize\n var deltaX = e.clientX - resizeStartX;\n var deltaY = e.clientY - resizeStartY;\n var newWidth = resizeStartWidth;\n var newHeight = resizeStartHeight;\n var newLeft = resizeStartLeft;\n var newTop = resizeStartTop;\n\n if (resizeHandle.includes('e')) {\n newWidth = resizeStartWidth + deltaX;\n }\n if (resizeHandle.includes('w')) {\n newWidth = resizeStartWidth - deltaX;\n newLeft = resizeStartLeft + deltaX;\n }\n if (resizeHandle.includes('s')) {\n newHeight = resizeStartHeight + deltaY;\n }\n if (resizeHandle.includes('n')) {\n newHeight = resizeStartHeight - deltaY;\n newTop = resizeStartTop + deltaY;\n }\n\n // Apply constraints\n newWidth = Math.max(parseInt(modal.style.minWidth) || 300, Math.min(newWidth, window.innerWidth - newLeft));\n newHeight = Math.max(parseInt(modal.style.minHeight) || 200, Math.min(newHeight, window.innerHeight - newTop));\n\n modal.style.width = newWidth + 'px';\n modal.style.height = newHeight + 'px';\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n modal.style.transform = 'none';\n } else if (isDragging) {\n // Handle drag\n var deltaX = e.clientX - dragStartX;\n var deltaY = e.clientY - dragStartY;\n var newX = modalStartX + deltaX;\n var newY = modalStartY + deltaY;\n\n // Constrain to viewport\n var maxX = window.innerWidth - modal.offsetWidth;\n var maxY = window.innerHeight - modal.offsetHeight;\n newX = Math.max(0, Math.min(newX, maxX));\n newY = Math.max(0, Math.min(newY, maxY));\n\n modal.style.left = newX + 'px';\n modal.style.top = newY + 'px';\n modal.style.transform = 'none';\n }\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n\n var handleMouseUp = function() {\n if (isDragging) {\n isDragging = false;\n modal.style.cursor = '';\n saveStateInspectorPreferences();\n }\n if (isResizing) {\n isResizing = false;\n resizeHandle = null;\n saveStateInspectorPreferences();\n }\n };\n\n document.addEventListener('mouseup', handleMouseUp);\n\n // Resize functionality\n var resizeHandleSize = 8;\n var cornerHandleSize = 12; // Larger handles for corners to make them easier to grab\n\n // Create edge handles first, then corner handles (so corners are on top)\n var edgeHandles = ['n', 's', 'e', 'w'];\n var cornerHandles = ['nw', 'ne', 'sw', 'se'];\n\n // Create edge handles (leaving space for corners)\n edgeHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10000';\n handleEl.style.pointerEvents = 'auto';\n\n if (handle === 'n' || handle === 's') {\n handleEl.style.height = resizeHandleSize + 'px';\n handleEl.style.left = cornerHandleSize + 'px';\n handleEl.style.right = cornerHandleSize + 'px';\n if (handle === 'n') {\n handleEl.style.top = '0';\n handleEl.style.cursor = 'n-resize';\n } else {\n handleEl.style.bottom = '0';\n handleEl.style.cursor = 's-resize';\n }\n } else {\n handleEl.style.width = resizeHandleSize + 'px';\n handleEl.style.top = cornerHandleSize + 'px';\n handleEl.style.bottom = cornerHandleSize + 'px';\n if (handle === 'e') {\n handleEl.style.right = '0';\n handleEl.style.cursor = 'e-resize';\n } else {\n handleEl.style.left = '0';\n handleEl.style.cursor = 'w-resize';\n }\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n // Create corner handles (higher z-index so they're on top)\n cornerHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10002';\n handleEl.style.pointerEvents = 'auto';\n handleEl.style.width = cornerHandleSize + 'px';\n handleEl.style.height = cornerHandleSize + 'px';\n\n if (handle === 'nw') {\n handleEl.style.top = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'nw-resize';\n } else if (handle === 'ne') {\n handleEl.style.top = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'ne-resize';\n } else if (handle === 'sw') {\n handleEl.style.bottom = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'sw-resize';\n } else if (handle === 'se') {\n handleEl.style.bottom = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'se-resize';\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n\n // Remove state change listener when modal is closed\n var originalRemove = modal.remove;\n modal.remove = function() {\n // Restore original trigger changes\n room.serializer.decoder.triggerChanges = originalTriggerChanges;\n originalRemove.call(this);\n };\n}\n\n// Apply panel position based on current setting\nfunction applyPanelPosition() {\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]');\n\n var positions = {\n 'bottom-right': { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n 'bottom-left': { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n 'top-left': { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n 'top-right': { top: '14px', right: '14px', bottom: 'auto', left: 'auto' }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n\n // Update logo container\n if (logoContainer) {\n logoContainer.style.bottom = pos.bottom;\n logoContainer.style.right = pos.right;\n logoContainer.style.top = pos.top;\n logoContainer.style.left = pos.left;\n }\n\n // Update menu position\n if (menu) {\n if (preferences.panelPosition.position.startsWith('bottom')) {\n menu.style.bottom = '60px';\n menu.style.top = 'auto';\n } else {\n // For top positions, menu appears below the logo\n menu.style.top = '60px';\n menu.style.bottom = 'auto';\n }\n menu.style.right = pos.right;\n menu.style.left = pos.left;\n }\n\n // Update panels\n repositionDebugPanels();\n}\n\n// Hide panels for this session\nfunction hidePanelsForSession() {\n panelsHidden = true;\n savePreferences(); // Save the hidden state\n\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>;\n\n if (logoContainer) {\n logoContainer.style.display = 'none';\n }\n if (menu) {\n menu.style.display = 'none';\n }\n panels.forEach(function(panel) {\n panel.style.display = 'none';\n });\n}\n\n// Helper function to format bytes\nfunction formatBytes(bytes) {\n if (bytes === 0) return '0 B';\n var k = 1024;\n var sizes = ['B', 'KB', 'MB', 'GB'];\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n return (bytes / Math.pow(k, i)).toFixed(1) + ' ' + sizes[i];\n}\n\n// Helper function to create debug panel for a room\nfunction createDebugPanel(uniquePanelId, debugInfo) {\n // Check if panel already exists\n var existingPanel = document.getElementById('debug-panel-' + uniquePanelId);\n if (existingPanel) {\n return existingPanel;\n }\n\n var panel = document.createElement('div');\n panel.id = 'debug-panel-' + uniquePanelId;\n panel.style.position = 'fixed';\n // Position will be set by repositionDebugPanels\n panel.style.backgroundColor = 'rgba(0, 0, 0, 0.85)';\n panel.style.color = '#fff';\n panel.style.padding = '8px';\n panel.style.borderRadius = '6px';\n panel.style.fontFamily = 'monospace';\n panel.style.fontSize = '11px';\n panel.style.zIndex = '999';\n panel.style.minWidth = '180px';\n panel.style.marginRight = '6px';\n panel.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n panel.style.display = panelsHidden ? 'none' : 'block';\n\n var title = document.createElement('div');\n title.id = 'debug-title-' + uniquePanelId;\n title.style.fontWeight = 'bold';\n title.style.marginBottom = '6px';\n title.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n title.style.paddingBottom = '4px';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n title.style.gap = '4px';\n title.style.position = 'relative';\n title.innerHTML = '<span style=\"display: inline-flex; align-items: center;\"></span><span id=\"debug-title-text-' + uniquePanelId + '\"></span><span id=\"debug-message-icon-' + uniquePanelId + '\" style=\"display: none; align-items: center; margin-left: auto; cursor: pointer; opacity: 0.6; transition: opacity 0.2s; margin-right: 4px; width: 16px; height: 16px;\">' + messageIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"16\" width=\"16\"') + '</span><span id=\"debug-hamburger-icon-' + uniquePanelId + '\" style=\"display: inline-flex; align-items: center; cursor: pointer; opacity: 0.6; transition: opacity 0.2s; margin-right: 4px; width: 16px; height: 16px;\">' + treeViewIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"16\" width=\"16\"') + '</span><span id=\"debug-info-icon-' + uniquePanelId + '\" style=\"display: inline-flex; align-items: center; cursor: pointer; opacity: 0.6; transition: opacity 0.2s; width: 16px; height: 16px;\">' + infoIcon + '</span>';\n\n // Create tooltip for info icon\n var tooltip = document.createElement('div');\n tooltip.id = 'debug-tooltip-' + uniquePanelId;\n tooltip.style.position = 'absolute';\n tooltip.style.top = '100%';\n tooltip.style.right = '0';\n tooltip.style.marginTop = '4px';\n tooltip.style.padding = '6px 8px';\n tooltip.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n tooltip.style.color = '#fff';\n tooltip.style.borderRadius = '4px';\n tooltip.style.fontSize = '10px';\n tooltip.style.fontFamily = 'monospace';\n tooltip.style.zIndex = '1000';\n tooltip.style.display = 'none';\n tooltip.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.5)';\n tooltip.style.lineHeight = '1.4';\n tooltip.innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> N/A</div><div><strong>Host:</strong> N/A</div>';\n title.appendChild(tooltip);\n\n // Add hover handlers - use a small delay to ensure element exists\n setTimeout(function() {\n var infoIconElement = document.getElementById('debug-info-icon-' + uniquePanelId);\n if (infoIconElement) {\n var showTooltip = function() {\n tooltip.style.display = 'block';\n infoIconElement.style.opacity = '1';\n };\n var hideTooltip = function() {\n tooltip.style.display = 'none';\n infoIconElement.style.opacity = '0.6';\n };\n\n infoIconElement.addEventListener('mouseenter', showTooltip);\n infoIconElement.addEventListener('mouseleave', hideTooltip);\n\n // Also handle tooltip hover to keep it visible\n tooltip.style.pointerEvents = 'auto';\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n }\n\n // Add click handler for hamburger icon\n var hamburgerIconElement = document.getElementById('debug-hamburger-icon-' + uniquePanelId);\n if (hamburgerIconElement) {\n hamburgerIconElement.addEventListener('mouseenter', function() {\n hamburgerIconElement.style.opacity = '1';\n });\n hamburgerIconElement.addEventListener('mouseleave', function() {\n hamburgerIconElement.style.opacity = '0.6';\n });\n hamburgerIconElement.addEventListener('click', function(e) {\n e.stopPropagation();\n openStateInspectorModal(uniquePanelId);\n });\n }\n\n // Add click handler for message icon\n var messageIconElement = document.getElementById('debug-message-icon-' + uniquePanelId);\n if (messageIconElement) {\n messageIconElement.addEventListener('mouseenter', function() {\n messageIconElement.style.opacity = '1';\n });\n messageIconElement.addEventListener('mouseleave', function() {\n messageIconElement.style.opacity = '0.6';\n });\n messageIconElement.addEventListener('click', function(e) {\n e.stopPropagation();\n openSendMessagesModal(uniquePanelId);\n });\n }\n }, 0);\n\n var content = document.createElement('div');\n content.id = 'debug-content-' + uniquePanelId;\n\n panel.appendChild(title);\n panel.appendChild(content);\n\n // Prepend panel to body so new panels appear first\n if (document.body.firstChild) {\n document.body.insertBefore(panel, document.body.firstChild);\n } else {\n document.body.appendChild(panel);\n }\n\n return panel;\n}\n\n// Reposition all debug panels to stack vertically\nfunction repositionDebugPanels() {\n if (panelsHidden) return;\n\n var panels = Array.from(document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>)\n .filter(function(panel: HTMLElement) { return panel.style.display !== 'none'; })\n .reverse(); // Reverse to get oldest first (since new panels are prepended)\n\n // Calculate logoIcon container width: 22px width + 10px padding on each side = 42px\n // Add 6px margin to prevent overlap\n var logoIconOffset = 42 + 6;\n\n var positions = {\n 'bottom-right': {\n start: { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n },\n 'bottom-left': {\n start: { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-left': {\n start: { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-right': {\n start: { top: '14px', right: '14px', bottom: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n var baseOffset = 14 + logoIconOffset;\n var currentOffset = baseOffset;\n\n panels.forEach(function(panel) {\n // Set base position\n Object.keys(pos.start).forEach(function(key) {\n panel.style[key] = pos.start[key];\n });\n\n // Apply offset\n var offset = pos.offset(panel, currentOffset);\n Object.keys(offset).forEach(function(key) {\n panel.style[key] = offset[key];\n });\n\n currentOffset += panel.offsetWidth + 6;\n });\n}\n\n// Update debug panel content\nfunction updateDebugPanel(uniquePanelId, debugInfo) {\n var contentId = 'debug-content-' + uniquePanelId;\n var panelId = 'debug-panel-' + uniquePanelId;\n var titleId = 'debug-title-' + uniquePanelId;\n var content = document.getElementById(contentId);\n var panel = document.getElementById(panelId);\n var title = document.getElementById(titleId);\n\n if (!content || !panel) {\n // Only create if panel doesn't exist\n if (!panel) {\n createDebugPanel(uniquePanelId, debugInfo);\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n repositionDebugPanels();\n } else {\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n }\n }\n\n // Update title with room name only (roomId, sessionId, and Host are in tooltip)\n document.getElementById('debug-title-text-' + uniquePanelId).textContent = debugInfo.roomName;\n document.getElementById('debug-tooltip-' + uniquePanelId).innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> ' + debugInfo.sessionId + '</div><div><strong>Host:</strong> ' + debugInfo.host + '</div>';\n\n var html = '<div style=\"line-height: 1.3;\">';\n html += '<div style=\"font-size: 10px; display: flex; gap: 8px;\">';\n html += '<div style=\"flex: 1;\">';\n html += '<div style=\"margin-bottom: 4px;\"><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #FF9800;\">' + envelopeUp + '</span><span style=\"color: #FF9800;\">' + formatBytes(debugInfo.bytesSentPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesSentPerSec.toFixed(0) + ' messages</div></div>';\n html += '<div><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #2196F3;\">' + envelopeDown + '</span><span style=\"color: #2196F3;\">' + formatBytes(debugInfo.bytesReceivedPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesReceivedPerSec.toFixed(0) + ' messages</div></div>';\n html += '</div>';\n html += '<div style=\"display: flex; flex-direction: column; gap: 4px;\">';\n html += '<canvas id=\"graph-sent-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '<canvas id=\"graph-received-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '</div>';\n html += '</div>';\n html += '</div>';\n\n content.innerHTML = html;\n\n // Draw graphs after a short delay to ensure canvas elements are rendered\n setTimeout(function() {\n drawGraph('graph-sent-' + uniquePanelId, debugInfo.bytesSentHistory, '#FF9800');\n drawGraph('graph-received-' + uniquePanelId, debugInfo.bytesReceivedHistory, '#2196F3');\n }, 10);\n}\n\n// Draw graph on canvas\nfunction drawGraph(canvasId, data, color) {\n var canvas = document.getElementById(canvasId) as HTMLCanvasElement;\n if (!canvas) return;\n\n var ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n var width = canvas.width;\n var height = canvas.height;\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height);\n\n if (!data || data.length === 0) return;\n\n // Find min and max values\n var maxValue = Math.max.apply(Math, data);\n var minValue = Math.min.apply(Math, data);\n var range = maxValue - minValue || 1; // Avoid division by zero\n\n // Padding\n var padding = 2;\n var graphWidth = width - padding * 2;\n var graphHeight = height - padding * 2;\n\n // Draw grid lines\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.1)';\n ctx.lineWidth = 0.5;\n for (var i = 0; i <= 4; i++) {\n var y = padding + (graphHeight / 4) * i;\n ctx.beginPath();\n ctx.moveTo(padding, y);\n ctx.lineTo(width - padding, y);\n ctx.stroke();\n }\n\n // Draw the line\n ctx.strokeStyle = color;\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n\n for (var i = 0; i < data.length; i++) {\n var x = padding + (graphWidth / (data.length - 1 || 1)) * i;\n var normalizedValue = (data[i] - minValue) / range;\n var y = padding + graphHeight - (normalizedValue * graphHeight);\n\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n\n ctx.stroke();\n\n // Fill area under the line\n if (data.length > 0) {\n ctx.lineTo(width - padding, height - padding);\n ctx.lineTo(padding, height - padding);\n ctx.closePath();\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.2;\n ctx.fill();\n ctx.globalAlpha = 1.0;\n }\n}\n\n// Calculate per-second rates\nfunction calculateRates(debugInfo) {\n var now = Date.now();\n var elapsed = (now - debugInfo.lastUpdate) / 1000; // seconds\n\n if (elapsed > 0) {\n debugInfo.bytesSentPerSec = debugInfo.bytesSentDelta / elapsed;\n debugInfo.bytesReceivedPerSec = debugInfo.bytesReceivedDelta / elapsed;\n debugInfo.messagesSentPerSec = debugInfo.messagesSentDelta / elapsed;\n debugInfo.messagesReceivedPerSec = debugInfo.messagesReceivedDelta / elapsed;\n\n // Add to history\n debugInfo.bytesSentHistory.push(debugInfo.bytesSentPerSec);\n debugInfo.bytesReceivedHistory.push(debugInfo.bytesReceivedPerSec);\n // debugInfo.historyTimestamps.push(now);\n\n // Limit history length\n var maxLen = debugInfo.maxHistoryLength || 60;\n if (debugInfo.bytesSentHistory.length > maxLen) {\n debugInfo.bytesSentHistory.shift();\n debugInfo.bytesReceivedHistory.shift();\n // debugInfo.historyTimestamps.shift();\n }\n\n // Reset deltas\n debugInfo.bytesSentDelta = 0;\n debugInfo.bytesReceivedDelta = 0;\n debugInfo.messagesSentDelta = 0;\n debugInfo.messagesReceivedDelta = 0;\n debugInfo.lastUpdate = now;\n }\n\n // Update panel\n updateDebugPanel(debugInfo.uniquePanelId, debugInfo);\n}\n\n// Start global update interval if not already running\nfunction ensureGlobalUpdateInterval() {\n if (globalUpdateInterval === null) {\n globalUpdateInterval = setInterval(function() {\n // Loop through all panels and calculate rates\n roomDebugInfo.forEach(function(debugInfo, uniquePanelId) {\n calculateRates(debugInfo);\n });\n\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n }, 1000);\n }\n}\n\nfunction applyMonkeyPatches() {\n\n // Helper function to patch a room\n function patchRoom(room: Room) {\n if (!room) { return room; }\n\n // Generate a consistent room ID\n const roomId = room.roomId;\n const sessionId = room.sessionId;\n\n // Generate unique panel ID: use sessionId if available, otherwise use roomId + timestamp\n const uniquePanelId = sessionId && sessionId !== 'N/A' && sessionId !== ''\n ? sessionId\n : roomId + '-' + Date.now() + '-' + Math.random().toString(36).substring(2, 9);\n\n const transport = room.connection?.transport as WebSocketTransport;\n const endpoint = transport.ws?.url || 'N/A';\n\n const debugInfo = {\n uniquePanelId: uniquePanelId,\n roomId: roomId,\n roomName: room.name || 'N/A',\n sessionId: sessionId || 'N/A',\n endpoint,\n host: new URL(endpoint).host,\n room, // Store room reference for state inspector\n bytesSent: 0,\n bytesReceived: 0,\n messagesSent: 0,\n messagesReceived: 0,\n bytesSentDelta: 0,\n bytesReceivedDelta: 0,\n messagesSentDelta: 0,\n messagesReceivedDelta: 0,\n bytesSentPerSec: 0,\n bytesReceivedPerSec: 0,\n messagesSentPerSec: 0,\n messagesReceivedPerSec: 0,\n lastUpdate: Date.now(),\n bytesSentHistory: [],\n bytesReceivedHistory: [],\n // historyTimestamps: [],\n maxHistoryLength: 60, // Keep last 60 data points (1 minute at 1 second intervals)\n messageTypes: null // Will store message types from __playground_message_types\n };\n\n roomDebugInfo.set(uniquePanelId, debugInfo);\n\n // Listen for __playground_message_types message\n room.onMessage('__playground_message_types', (messageTypes: any) => {\n debugInfo.messageTypes = messageTypes;\n\n // Show/hide message icon based on message types availability\n var messageIconElement = document.getElementById('debug-message-icon-' + uniquePanelId);\n if (messageIconElement) {\n messageIconElement.style.display = messageTypes ? 'inline-flex' : 'none';\n }\n });\n\n // Helper function to track received message/bytes\n function trackReceivedMessage(data) {\n // Calculate bytes received\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n } else if (data) {\n try {\n bytes = new Blob([JSON.stringify(data)]).size;\n } catch (e) {\n bytes = new Blob([String(data)]).size;\n }\n }\n\n //\n // TODO: avoid trackig __playground_message_types messages in the stats\n //\n debugInfo.messagesReceived++;\n debugInfo.messagesReceivedDelta++;\n debugInfo.bytesReceived += bytes;\n debugInfo.bytesReceivedDelta += bytes;\n }\n\n function trackSentMessage(data) {\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n }\n debugInfo.messagesSent++;\n debugInfo.messagesSentDelta++;\n debugInfo.bytesSent += data.length;\n debugInfo.bytesSentDelta += data.length;\n }\n\n // Monkey-patch: WebSocket transport\n if (transport.ws) {\n const originalOnMessage = transport.ws.onmessage;\n const ws = transport.ws;\n\n transport.ws.onmessage = function(event) {\n // Clone event data to avoid issues with delayed processing\n var eventData = event.data;\n if (eventData instanceof Blob) {\n eventData = eventData.slice();\n } else if (eventData instanceof ArrayBuffer) {\n eventData = eventData.slice(0);\n } else if (typeof eventData === 'string') {\n eventData = eventData;\n }\n\n trackReceivedMessage(eventData);\n\n // Apply latency simulation for received messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n setTimeout(function() {\n // Create a synthetic event-like object\n var syntheticEvent = {\n data: eventData,\n target: ws,\n currentTarget: ws,\n type: 'message'\n };\n originalOnMessage.call(ws, syntheticEvent);\n }, preferences.latencySimulation.delay);\n } else {\n return originalOnMessage.apply(this, arguments);\n }\n };\n }\n\n\n // Monkey-patch: sending messages through room connection\n const originalSend = room.connection.send.bind(room.connection);\n room.connection.send = function(data: any) {\n trackSentMessage(data);\n\n // Apply latency simulation for sent messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n var clonedData = data;\n if (data instanceof ArrayBuffer) {\n clonedData = data.slice(0);\n } else if (data instanceof Blob) {\n clonedData = data.slice(0);\n } else if (data instanceof Uint8Array || data instanceof DataView || (data.buffer && data.buffer instanceof ArrayBuffer)) {\n clonedData = new Uint8Array(data).buffer;\n }\n\n setTimeout(function() {\n originalSend(clonedData);\n }, preferences.latencySimulation.delay / 2);\n } else {\n return originalSend(data);\n }\n };\n\n updateDebugPanel(uniquePanelId, debugInfo);\n\n // Ensure global update interval is running\n ensureGlobalUpdateInterval();\n\n // Clean up on room leave\n room.onLeave.once(() => {\n roomDebugInfo.delete(uniquePanelId);\n var panel = document.getElementById('debug-panel-' + uniquePanelId);\n if (panel) {\n panel.remove();\n repositionDebugPanels();\n }\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0 && globalUpdateInterval !== null) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n });\n\n\n return room;\n }\n\n // Store original methods that return rooms\n var originalJoinOrCreate = Client.prototype.joinOrCreate;\n var originalJoin = Client.prototype.join;\n var originalCreate = Client.prototype.create;\n var originalReconnect = Client.prototype.reconnect;\n\n // Patch joinOrCreate\n Client.prototype.joinOrCreate = function() {\n var promise = originalJoinOrCreate.apply(this, arguments);\n return promise.then(function(room) {\n return patchRoom(room);\n });\n };\n\n // Patch join\n Client.prototype.join = function() {\n var promise = originalJoin.apply(this, arguments);\n return promise.then(function(room) {\n return patchRoom(room);\n });\n };\n\n // Patch create\n Client.prototype.create = function() {\n var promise = originalCreate.apply(this, arguments);\n return promise.then(function(room) {\n return patchRoom(room);\n });\n };\n\n // Patch reconnect\n if (originalReconnect) {\n Client.prototype.reconnect = function() {\n var promise = originalReconnect.apply(this, arguments);\n return promise.then(function(room) {\n return patchRoom(room);\n });\n };\n }\n}\n\napplyMonkeyPatches();\n\n// Initialize only after DOM is ready\n// (in case script is loaded in HEAD tag)\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initialize);\n} else {\n // DOM is already ready\n initialize();\n}"],"names":["Client"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"debug.cjs","sources":["../src/debug.ts"],"sourcesContent":["import { Client } from \"./Client.ts\";\nimport type { Room } from \"./Room.ts\";\nimport type { WebSocketTransport } from \"./transport/WebSocketTransport.ts\";\nimport { CloseCode } from \"@colyseus/shared-types\";\n\nconst logoIcon = `<svg viewBox=\"0 0 488.94 541.2\" style=\"width: 100%; height: 100%;\">\n <g>\n <g>\n <path fill=\"#ffffff\" d=\"m80.42,197.14c13.82,11.25,30.56,22.25,50.78,32.11,14.87-28.67,72.09-100.71,233.32-79.68l-14.4-55.35c-200.24-17.18-257.81,77.11-269.7,102.92Z\"/>\n <path fill=\"#ffffff\" d=\"m44.53,167.77c22.44-40.73,99.17-124.23,290.19-105.83L310.19,1.59S109.9-21.63,8.9,109.47c3.62,10.55,13.31,33.34,35.63,58.29Z\"/>\n <path fill=\"#ffffff\" d=\"m407.7,291.25c-32.14,3.35-62.02,4.95-89.63,4.95C123.09,296.2,36.78,219.6,0,164.95v251.98s15.77,162.98,488.94,115.66l-81.24-241.33Z\"/>\n </g>\n </g>\n</svg>`;\nconst envelopeUp = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-5.354 1.25 1.25a.5.5 0 0 1-.708.708L13 12.207V14a.5.5 0 0 1-1 0v-1.717l-.28.305a.5.5 0 0 1-.737-.676l1.149-1.25a.5.5 0 0 1 .722-.016\"></path></svg>`;\nconst envelopeDown = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-1.646a.5.5 0 0 1-.722-.016l-1.149-1.25a.5.5 0 1 1 .737-.676l.28.305V11a.5.5 0 0 1 1 0v1.793l.396-.397a.5.5 0 0 1 .708.708z\"></path></svg>`;\nconst messageIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480V396.4c0-4 1.5-7.8 4.2-10.7L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"/></svg>`;\nconst treeViewIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 256 256\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M160,136v-8H88v64a8,8,0,0,0,8,8h64v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176a16,16,0,0,1-16-16v-8H96a24,24,0,0,1-24-24V80H64A16,16,0,0,1,48,64V32A16,16,0,0,1,64,16H96a16,16,0,0,1,16,16V64A16,16,0,0,1,96,80H88v32h72v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176A16,16,0,0,1,160,136Z\"></path></svg>`;\nconst infoIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M256 48C141.2 48 48 141.2 48 256s93.2 208 208 208 208-93.2 208-208S370.8 48 256 48zm21 312h-42V235h42v125zm0-166h-42v-42h42v42z\"></path></svg>`;\nconst settingsIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.003 21c-.732 .001 -1.465 -.438 -1.678 -1.317a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c.886 .215 1.325 .957 1.318 1.694\"></path><path d=\"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\"></path><path d=\"M19.001 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\"></path><path d=\"M19.001 15.5v1.5\"></path><path d=\"M19.001 21v1.5\"></path><path d=\"M22.032 17.25l-1.299 .75\"></path><path d=\"M17.27 20l-1.3 .75\"></path><path d=\"M15.97 17.25l1.3 .75\"></path><path d=\"M20.733 20l1.3 .75\"></path></svg>`;\nconst eyeSlashIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg>`;\nconst closeIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M400 145.49 366.51 112 256 222.51 145.49 112 112 145.49 222.51 256 112 366.51 145.49 400 256 289.49 366.51 400 400 366.51 289.49 256 400 145.49z\"></path></svg>`;\nconst disconnectIcon = `<svg fill=\"currentColor\" viewBox=\"0 0 36 36\" height=\"200px\" width=\"200px\"><path fill=\"currentColor\" d=\"M18 24.42a4 4 0 1 0 4 4a4 4 0 0 0-4-4m0 6a2 2 0 1 1 2-2a2 2 0 0 1-2 2\" class=\"clr-i-outline clr-i-outline-path-1\"></path><path fill=\"currentColor\" d=\"M26.21 21.85a1 1 0 0 0-.23-1.4a13.6 13.6 0 0 0-5-2.23l3.87 3.87a1 1 0 0 0 1.36-.24\" class=\"clr-i-outline clr-i-outline-path-2\"></path><path fill=\"currentColor\" d=\"M18.05 10.72a21 21 0 0 0-4.16.43l1.74 1.74a19 19 0 0 1 2.42-.17A18.76 18.76 0 0 1 28.64 16a1 1 0 0 0 1.12-1.65a20.75 20.75 0 0 0-11.71-3.63\" class=\"clr-i-outline clr-i-outline-path-3\"></path><path fill=\"currentColor\" d=\"M33.55 8.2A28.11 28.11 0 0 0 8.11 5.36l1.58 1.57a26 26 0 0 1 22.76 2.94a1 1 0 0 0 1.1-1.67\" class=\"clr-i-outline clr-i-outline-path-4\"></path><path fill=\"currentColor\" d=\"m1.84 4.75l2.43 2.43c-.62.34-1.23.7-1.83 1.1a1 1 0 1 0 1.12 1.66C4.26 9.47 5 9 5.74 8.65l3.87 3.87a20.6 20.6 0 0 0-3.38 1.88A1 1 0 0 0 7.36 16a18.8 18.8 0 0 1 3.77-2l4.16 4.16A13.5 13.5 0 0 0 10 20.55a1 1 0 0 0 1.18 1.61A11.5 11.5 0 0 1 17 20l10.8 10.8l1.41-1.41l-26-26Z\" class=\"clr-i-outline clr-i-outline-path-5\"></path><path fill=\"none\" d=\"M0 0h36v36H0z\"></path></svg>`;\n\n// Store debug info per room\nconst roomDebugInfo = new Map();\n\n// Single interval for all panels\nlet globalUpdateInterval = null;\n\n// Preferences state\nconst preferences = {\n maxLatency: 350, // milliseconds\n latencySimulation: {\n enabled: false,\n delay: 0 // milliseconds\n },\n panelPosition: {\n position: 'top-right' // 'bottom-right', 'bottom-left', 'top-left', 'top-right'\n }\n};\n\n// Load preferences from localStorage\nfunction loadPreferences() {\n try {\n const savedPrefs = localStorage.getItem('colyseus-debug-preferences') || '{}';\n const prefs = JSON.parse(savedPrefs);\n\n // Load position\n if (prefs.position && ['bottom-right', 'bottom-left', 'top-left', 'top-right'].includes(prefs.position)) {\n preferences.panelPosition.position = prefs.position;\n }\n\n // Load latency\n if (prefs.latency !== undefined && prefs.latency !== null) {\n const latencyValue = parseInt(prefs.latency, 10);\n if (!isNaN(latencyValue) && latencyValue >= 0 && latencyValue <= 500) {\n preferences.latencySimulation.delay = latencyValue;\n preferences.latencySimulation.enabled = latencyValue > 0;\n }\n }\n\n // Load hidden state\n if (prefs.hidden === true) {\n panelsHidden = true;\n }\n } catch (e) {\n // localStorage might not be available or JSON parse failed, ignore\n }\n}\n\n// Save preferences to localStorage\nfunction savePreferences() {\n try {\n localStorage.setItem('colyseus-debug-preferences', JSON.stringify({\n position: preferences.panelPosition.position,\n latency: preferences.latencySimulation.delay,\n hidden: panelsHidden\n }));\n } catch (e) {\n // localStorage might not be available, ignore\n }\n}\n\n// Panel visibility state\nlet panelsHidden = false;\n\n// Track open modals as an ordered stack (most recent at end)\nlet modalStack: any[] = [];\nconst BASE_MODAL_ZINDEX = 10000;\n\n// Load preferences on script load\nloadPreferences();\n\n// Function to select a modal (bring to front)\nfunction selectModal(modal) {\n if (!modal) return;\n\n // Remove modal from stack if already present\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n\n // Add to end of stack (most recent)\n modalStack.push(modal);\n\n // Update z-indexes for all modals based on their position in stack\n modalStack.forEach((m, i) => {\n if (document.body.contains(m)) {\n m.style.zIndex = (BASE_MODAL_ZINDEX + i).toString();\n }\n });\n}\n\n// Function to remove modal from stack\nfunction removeModalFromStack(modal) {\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n}\n\n// Global ESC key handler - closes most recent modal\ndocument.addEventListener('keydown', function(e) {\n if (e.key === 'Escape' && modalStack.length > 0) {\n // Get the most recent modal (top of stack)\n const topModal = modalStack[modalStack.length - 1];\n if (topModal && document.body.contains(topModal)) {\n topModal.remove();\n }\n }\n});\n\n// Shared modal creation utilities\nfunction createModalOverlay() {\n var overlay = document.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.right = '0';\n overlay.style.bottom = '0';\n overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n overlay.style.zIndex = BASE_MODAL_ZINDEX.toString();\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n return overlay;\n}\n\nfunction createModal(options) {\n var opts = options || {};\n var modal = document.createElement('div');\n\n // Set ID if provided\n if (opts.id) {\n modal.id = opts.id;\n }\n\n // Base styles\n modal.style.position = 'fixed';\n modal.style.backgroundColor = opts.backgroundColor || '#1e1e1e';\n modal.style.borderRadius = '8px';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n modal.style.zIndex = BASE_MODAL_ZINDEX.toString();\n modal.style.display = 'flex';\n modal.style.flexDirection = 'column';\n modal.style.overflow = 'hidden';\n\n // Size\n if (opts.width) modal.style.width = opts.width;\n if (opts.height) modal.style.height = opts.height;\n if (opts.minWidth) modal.style.minWidth = opts.minWidth;\n if (opts.minHeight) modal.style.minHeight = opts.minHeight;\n if (opts.maxWidth) modal.style.maxWidth = opts.maxWidth;\n if (opts.maxHeight) modal.style.maxHeight = opts.maxHeight;\n\n // Position\n modal.style.top = opts.top || '50%';\n modal.style.left = opts.left || '50%';\n modal.style.transform = opts.transform || 'translate(-50%, -50%)';\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(modal);\n });\n\n // Mark modal as selected when opened\n selectModal(modal);\n\n // Override remove to cleanup modal from stack\n var originalRemove = modal.remove.bind(modal);\n modal.remove = function() {\n // Remove from modal stack\n removeModalFromStack(modal);\n\n // Auto-cleanup room onLeave listener\n if (opts.room && opts.trackOnLeave && opts.onLeaveCallback) {\n var callbackToRemove = opts.onLeaveCallback.current || opts.onLeaveCallback;\n opts.room.onLeave.remove(callbackToRemove);\n }\n\n if (opts.onRemove) {\n opts.onRemove();\n }\n originalRemove();\n };\n\n return modal;\n}\n\nfunction createModalHeader(options) {\n var opts = options || {};\n\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = opts.padding || '8px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n header.style.paddingBottom = opts.paddingBottom || '4px';\n header.style.marginBottom = opts.marginBottom || '6px';\n header.style.cursor = opts.draggable !== false ? 'move' : 'default';\n header.style.userSelect = 'none';\n header.style.flexShrink = '0';\n header.style.position = 'relative';\n header.style.zIndex = '1';\n\n // Title\n var title = document.createElement('div');\n title.textContent = opts.title || '';\n title.style.margin = '0';\n title.style.fontSize = opts.titleSize || '11px';\n title.style.fontWeight = 'bold';\n title.style.fontFamily = opts.titleFont || 'monospace';\n title.style.flex = '1';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n\n // Status dot (optional)\n if (opts.statusDot) {\n var statusDot = document.createElement('div');\n statusDot.style.width = '8px';\n statusDot.style.height = '8px';\n statusDot.style.borderRadius = '50%';\n statusDot.style.marginRight = '8px';\n statusDot.style.flexShrink = '0';\n statusDot.style.transition = 'background-color 0.3s';\n statusDot.style.backgroundColor = opts.statusColor || '#22c55e';\n title.insertBefore(statusDot, title.firstChild);\n\n if (opts.statusDotRef) {\n opts.statusDotRef.element = statusDot;\n }\n }\n\n // Close button\n var closeButton = document.createElement('button');\n closeButton.innerHTML = closeIcon;\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '18px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.margin = 'auto';\n closeButton.style.width = '20px';\n closeButton.style.height = '20px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.style.opacity = '0.6';\n\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n closeButton.style.opacity = '1';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n closeButton.style.opacity = '0.6';\n });\n closeButton.addEventListener('click', function(e) {\n e.stopPropagation();\n if (opts.onClose) {\n opts.onClose();\n } else if (opts.modal) {\n opts.modal.remove();\n }\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n\n return { header: header, title: title, closeButton: closeButton };\n}\n\nfunction makeDraggable(modal, dragHandle) {\n var isDragging = false;\n var dragOffsetX = 0;\n var dragOffsetY = 0;\n\n dragHandle.addEventListener('mousedown', function(e) {\n isDragging = true;\n var rect = modal.getBoundingClientRect();\n dragOffsetX = e.clientX - rect.left;\n dragOffsetY = e.clientY - rect.top;\n\n // Set position to current absolute position before removing transform\n modal.style.left = rect.left + 'px';\n modal.style.top = rect.top + 'px';\n modal.style.transform = 'none';\n e.preventDefault();\n });\n\n var onMouseMove = function(e) {\n if (isDragging) {\n var newLeft = e.clientX - dragOffsetX;\n var newTop = e.clientY - dragOffsetY;\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n }\n };\n\n var onMouseUp = function() {\n isDragging = false;\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n // Return cleanup function\n return function cleanup() {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n}\n\n// Function to get border color based on latency simulation value\nfunction getBorderColor(latencyValue, opacity) {\n var maxLatency = preferences.maxLatency;\n var percentage = latencyValue / maxLatency;\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + opacity + ')';\n}\n\nfunction initialize() {\n if (panelsHidden) return;\n\n var container = document.createElement('div');\n container.id = 'debug-logo-container';\n container.style.position = 'fixed';\n container.style.zIndex = '1000';\n container.style.width = '21px';\n container.style.height = '21px';\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.border = '3px solid ' + getBorderColor(preferences.latencySimulation.delay, 0.7);\n container.style.borderRadius = '50%';\n container.style.padding = '10px';\n container.style.boxSizing = 'content-box';\n container.style.display = 'flex';\n container.style.justifyContent = 'center';\n container.style.alignItems = 'center';\n container.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.3)';\n container.style.transition = 'border-color 0.3s ease, background-color 0.3s ease';\n container.style.cursor = 'pointer';\n\n // Apply initial position\n applyPanelPosition();\n\n // container on hover effect\n container.addEventListener('mouseenter', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.9)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.9);\n });\n container.addEventListener('mouseleave', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n });\n\n var icon = document.createElement('div');\n icon.style.width = '100%';\n icon.style.height = '100%';\n icon.style.display = 'flex';\n icon.style.justifyContent = 'center';\n icon.style.alignItems = 'center';\n\n // Use insertAdjacentHTML for better Safari compatibility with SVG\n icon.insertAdjacentHTML('beforeend', logoIcon);\n\n container.appendChild(icon);\n document.body.appendChild(container);\n\n // Create menu first\n createMenu(container);\n\n // Apply initial position after menu is created\n applyPanelPosition();\n}\n\n// Create menu that opens on logo click\nfunction createMenu(logoContainer) {\n var menu = document.createElement('div');\n menu.id = 'debug-menu';\n menu.style.position = 'fixed';\n // Position will be set by applyPanelPosition\n menu.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n menu.style.color = '#fff';\n menu.style.padding = '0 0 8px 0';\n menu.style.borderRadius = '6px';\n menu.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n menu.style.fontSize = '12px';\n menu.style.zIndex = '1001';\n menu.style.minWidth = '200px';\n menu.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n menu.style.display = 'none';\n menu.style.overflow = 'hidden';\n\n // Host name display\n var hostContainer = document.createElement('div');\n hostContainer.style.padding = '6px 12px';\n hostContainer.style.cursor = 'default';\n hostContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hostContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n hostContainer.style.marginBottom = '4px';\n hostContainer.style.borderTopLeftRadius = '6px';\n hostContainer.style.borderTopRightRadius = '6px';\n\n var hostValue = document.createElement('div');\n hostValue.id = 'debug-menu-host';\n hostValue.style.fontSize = '11px';\n hostValue.style.color = '#fff';\n hostValue.style.fontFamily = 'monospace';\n hostValue.style.whiteSpace = 'nowrap';\n hostValue.style.overflow = 'hidden';\n hostValue.style.textOverflow = 'ellipsis';\n hostValue.style.textAlign = 'center';\n hostValue.style.fontWeight = '500';\n\n // Function to update host display\n function updateHostDisplay() {\n var hostText = 'N/A';\n if (roomDebugInfo.size > 0) {\n // Get host from first room\n var firstRoom = roomDebugInfo.values().next().value;\n if (firstRoom && firstRoom.host) {\n hostText = firstRoom.host;\n }\n }\n hostValue.textContent = hostText;\n }\n\n // Update host display initially\n updateHostDisplay();\n\n hostContainer.appendChild(hostValue);\n menu.appendChild(hostContainer);\n\n // Simulate latency option\n var latencyContainer = document.createElement('div');\n latencyContainer.style.padding = '8px 12px';\n latencyContainer.style.cursor = 'default';\n\n var latencyLabel = document.createElement('div');\n latencyLabel.style.marginBottom = '8px';\n latencyLabel.style.display = 'flex';\n latencyLabel.style.alignItems = 'center';\n latencyLabel.style.justifyContent = 'space-between';\n var latencyValueSpan = document.createElement('span');\n latencyValueSpan.id = 'latency-value';\n latencyValueSpan.style.color = '#888';\n latencyValueSpan.style.fontSize = '11px';\n latencyValueSpan.textContent = preferences.latencySimulation.delay + 'ms';\n\n var latencyTextSpan = document.createElement('span');\n latencyTextSpan.textContent = 'Simulate latency';\n\n latencyLabel.appendChild(latencyTextSpan);\n latencyLabel.appendChild(latencyValueSpan);\n\n var latencySlider = document.createElement('input');\n latencySlider.type = 'range';\n latencySlider.min = '0';\n latencySlider.max = preferences.maxLatency.toString();\n latencySlider.value = preferences.latencySimulation.delay.toString();\n latencySlider.style.border = 'none';\n latencySlider.style.width = '100%';\n latencySlider.style.height = '20px';\n latencySlider.style.padding = '0';\n latencySlider.style.margin = '0';\n latencySlider.style.outline = 'none';\n latencySlider.style.cursor = 'pointer';\n latencySlider.style.webkitAppearance = 'none';\n latencySlider.style.appearance = 'none';\n latencySlider.style.background = 'transparent';\n latencySlider.id = 'latency-slider';\n\n // Function to calculate color from green (0) -> yellow (250) -> red (500)\n function getSliderColor(value, min, max) {\n var percentage = (value - min) / (max - min);\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgb(' + r + ', ' + g + ', ' + b + ')';\n }\n\n // Function to update slider track color\n function updateSliderColor(value) {\n var color = getSliderColor(value, 0, preferences.maxLatency);\n var valuePercent = (value / preferences.maxLatency) * 100;\n var yellowPercent = 50; // Yellow at 250ms (50% of 500ms)\n var gradient;\n\n if (value <= preferences.maxLatency / 2) {\n // Value is in green->yellow range: show green -> yellow\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n } else {\n // Value is in yellow->red range: show green -> yellow -> current color\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${yellowPercent}%, ${color} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n }\n\n var styleId = 'latency-slider-style';\n var existingStyle = document.getElementById(styleId);\n if (existingStyle) {\n existingStyle.remove();\n }\n var style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n #latency-slider::-webkit-slider-runnable-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n #latency-slider::-moz-range-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n `;\n document.head.appendChild(style);\n }\n\n // Initialize slider color\n updateSliderColor(parseInt(latencySlider.value));\n\n // Add custom styling via CSS (inline style limitations)\n var style = document.createElement('style');\n style.textContent = `\n #latency-slider {\n background: transparent !important;\n background-color: transparent !important;\n }\n #latency-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n background-color: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n margin-top: -5px;\n }\n #latency-slider::-webkit-slider-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n #latency-slider::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n }\n #latency-slider::-moz-range-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n `;\n document.head.appendChild(style);\n\n // Function to update container border color\n function updateContainerBackgroundColor() {\n var container = document.getElementById('debug-logo-container');\n if (container) {\n // Update to normal state (hover handlers will update on hover)\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n }\n }\n\n // Update latency value display\n latencySlider.addEventListener('input', function() {\n var value = parseInt(latencySlider.value);\n latencyValueSpan.textContent = value + 'ms';\n preferences.latencySimulation.delay = value;\n preferences.latencySimulation.enabled = value > 0;\n updateSliderColor(value);\n updateContainerBackgroundColor();\n savePreferences();\n });\n\n latencyContainer.appendChild(latencyLabel);\n latencyContainer.appendChild(latencySlider);\n menu.appendChild(latencyContainer);\n\n // Separator\n var separator = document.createElement('div');\n separator.style.height = '1px';\n separator.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n separator.style.margin = '4px 0';\n menu.appendChild(separator);\n\n // Settings option\n var settingsOption = document.createElement('div');\n settingsOption.style.padding = '8px 12px';\n settingsOption.style.cursor = 'pointer';\n settingsOption.style.transition = 'background-color 0.2s';\n settingsOption.style.display = 'flex';\n settingsOption.style.alignItems = 'center';\n settingsOption.style.gap = '8px';\n\n var settingsIconWrapper = document.createElement('span');\n settingsIconWrapper.style.display = 'inline-flex';\n settingsIconWrapper.style.alignItems = 'center';\n settingsIconWrapper.style.width = '16px';\n settingsIconWrapper.style.height = '16px';\n settingsIconWrapper.innerHTML = settingsIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"16\" width=\"16\"');\n\n var settingsText = document.createElement('span');\n settingsText.textContent = 'Preferences';\n\n settingsOption.appendChild(settingsIconWrapper);\n settingsOption.appendChild(settingsText);\n\n settingsOption.addEventListener('mouseenter', function() {\n settingsOption.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n settingsOption.addEventListener('mouseleave', function() {\n settingsOption.style.backgroundColor = 'transparent';\n });\n settingsOption.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n openSettingsModal();\n });\n menu.appendChild(settingsOption);\n\n document.body.appendChild(menu);\n\n // Toggle menu on logo click\n var menuVisible = false;\n var hostUpdateInterval = null;\n logoContainer.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = !menuVisible;\n menu.style.display = menuVisible ? 'block' : 'none';\n\n if (menuVisible) {\n updateHostDisplay();\n // Update host every second while menu is visible\n hostUpdateInterval = setInterval(updateHostDisplay, 1000);\n } else {\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n\n // Close menu when clicking outside\n document.addEventListener('click', function(e) {\n if (menuVisible && !menu.contains(e.target as Node) && !logoContainer.contains(e.target as Node)) {\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n}\n\n// Create and open Settings modal\nfunction openSettingsModal() {\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-settings-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Create overlay using shared utility\n var overlay = createModalOverlay();\n overlay.id = 'debug-settings-overlay';\n\n // Create modal (non-fixed positioning for overlay)\n var modal = document.createElement('div');\n modal.id = 'debug-settings-modal';\n modal.style.position = 'relative'; // relative position for centered overlay content\n modal.style.backgroundColor = 'rgba(30, 30, 30, 0.98)';\n modal.style.borderRadius = '8px';\n modal.style.width = '90%';\n modal.style.maxWidth = '500px';\n modal.style.maxHeight = '90vh';\n modal.style.overflowY = 'auto';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n\n // Modal header\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = '20px 24px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var title = document.createElement('h2');\n title.textContent = 'Preferences';\n title.style.margin = '0';\n title.style.fontSize = '18px';\n title.style.fontWeight = '600';\n\n var closeButton = document.createElement('button');\n closeButton.innerHTML = '×';\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '24px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.width = '32px';\n closeButton.style.height = '32px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n });\n closeButton.addEventListener('click', function() {\n overlay.remove();\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n modal.appendChild(header);\n\n // Position option\n var positionContainer = document.createElement('div');\n positionContainer.style.padding = '20px 24px';\n positionContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n positionContainer.style.display = 'flex';\n positionContainer.style.justifyContent = 'space-between';\n positionContainer.style.alignItems = 'center';\n positionContainer.style.gap = '16px';\n\n var positionTextContainer = document.createElement('div');\n positionTextContainer.style.flex = '1';\n\n var positionTitle = document.createElement('div');\n positionTitle.style.fontSize = '14px';\n positionTitle.style.fontWeight = '600';\n positionTitle.style.marginBottom = '4px';\n positionTitle.textContent = 'Position';\n\n var positionDescription = document.createElement('div');\n positionDescription.style.fontSize = '12px';\n positionDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n positionDescription.textContent = 'Adjust the placement of the panels.';\n\n positionTextContainer.appendChild(positionTitle);\n positionTextContainer.appendChild(positionDescription);\n\n var positionSelect = document.createElement('select');\n positionSelect.style.minWidth = '150px';\n positionSelect.style.padding = '8px 12px';\n positionSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n positionSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n positionSelect.style.borderRadius = '4px';\n positionSelect.style.color = '#fff';\n positionSelect.style.fontSize = '14px';\n positionSelect.style.cursor = 'pointer';\n positionSelect.style.outline = 'none';\n\n var positions = [\n { value: 'bottom-left', label: 'Bottom Left' },\n { value: 'bottom-right', label: 'Bottom Right' },\n { value: 'top-left', label: 'Top Left' },\n { value: 'top-right', label: 'Top Right' }\n ];\n\n positions.forEach(function(pos) {\n var option = document.createElement('option');\n option.value = pos.value;\n option.textContent = pos.label;\n if (preferences.panelPosition.position === pos.value) {\n option.selected = true;\n }\n positionSelect.appendChild(option);\n });\n\n positionSelect.addEventListener('change', function() {\n preferences.panelPosition.position = positionSelect.value;\n applyPanelPosition();\n savePreferences();\n });\n\n positionContainer.appendChild(positionTextContainer);\n positionContainer.appendChild(positionSelect);\n modal.appendChild(positionContainer);\n\n // Disable instruction\n var disableContainer = document.createElement('div');\n disableContainer.style.padding = '20px 24px';\n disableContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var disableTitle = document.createElement('div');\n disableTitle.style.fontSize = '14px';\n disableTitle.style.fontWeight = '600';\n disableTitle.style.marginBottom = '4px';\n disableTitle.textContent = 'Disable Dev Tools';\n\n var disableDescription = document.createElement('div');\n disableDescription.style.fontSize = '12px';\n disableDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n disableDescription.style.marginBottom = '8px';\n disableDescription.innerHTML = 'To disable this UI completely, remove the <code style=\"background: rgba(255, 255, 255, 0.1); padding: 2px 6px; border-radius: 3px; font-family: monospace; font-size: 11px;\">debug.js</code> script from your HTML file.';\n\n disableContainer.appendChild(disableTitle);\n disableContainer.appendChild(disableDescription);\n modal.appendChild(disableContainer);\n\n // Hide panels button\n var hideContainer = document.createElement('div');\n hideContainer.style.padding = '20px 24px';\n hideContainer.style.display = 'flex';\n hideContainer.style.justifyContent = 'space-between';\n hideContainer.style.alignItems = 'center';\n hideContainer.style.gap = '16px';\n\n var hideTextContainer = document.createElement('div');\n hideTextContainer.style.flex = '1';\n\n var hideTitle = document.createElement('div');\n hideTitle.style.fontSize = '14px';\n hideTitle.style.fontWeight = '600';\n hideTitle.style.marginBottom = '4px';\n hideTitle.textContent = 'Hide Dev Tools for this session';\n\n var hideDescription = document.createElement('div');\n hideDescription.style.fontSize = '12px';\n hideDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n hideDescription.textContent = 'Hide Dev Tools until you refresh the page.';\n\n hideTextContainer.appendChild(hideTitle);\n hideTextContainer.appendChild(hideDescription);\n\n var hideButton = document.createElement('button');\n hideButton.textContent = 'Hide';\n hideButton.style.padding = '8px 16px';\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hideButton.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n hideButton.style.borderRadius = '4px';\n hideButton.style.color = '#fff';\n hideButton.style.fontSize = '14px';\n hideButton.style.cursor = 'pointer';\n hideButton.style.transition = 'background-color 0.2s';\n hideButton.style.display = 'flex';\n hideButton.style.alignItems = 'center';\n hideButton.style.gap = '8px';\n hideButton.style.flexShrink = '0';\n\n hideButton.insertAdjacentHTML('afterbegin', eyeSlashIcon);\n\n hideButton.addEventListener('mouseenter', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n });\n hideButton.addEventListener('mouseleave', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n hideButton.addEventListener('click', function() {\n hidePanelsForSession();\n overlay.remove();\n });\n\n hideContainer.appendChild(hideTextContainer);\n hideContainer.appendChild(hideButton);\n modal.appendChild(hideContainer);\n\n overlay.appendChild(modal);\n document.body.appendChild(overlay);\n\n // Mark as selected modal when opened\n selectModal(overlay);\n\n // Update close button to cleanup from modal stack\n var originalOverlayRemove = overlay.remove.bind(overlay);\n overlay.remove = function() {\n removeModalFromStack(overlay);\n originalOverlayRemove();\n };\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(overlay);\n });\n\n // Close on overlay click\n overlay.addEventListener('click', function(e) {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n}\n\n// Create and open Send Messages modal\nfunction openSendMessagesModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n var messageTypes = debugInfo.messageTypes;\n\n if (!messageTypes) {\n console.warn('No message types available for this room');\n return;\n }\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-send-messages-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n var updateConnectionStatus: any = null;\n var onLeaveCallbackRef: any = { current: null };\n\n // Function to update status dot color\n const updateSendMsgStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Initial callback\n onLeaveCallbackRef.current = updateSendMsgStatusDot;\n room.onLeave(updateSendMsgStatusDot);\n\n // Create modal using shared utility\n const modal = createModal({\n id: 'debug-send-messages-modal',\n width: '400px',\n minWidth: '300px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n room: room,\n trackOnLeave: true,\n onLeaveCallback: onLeaveCallbackRef\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: debugInfo.roomName + ' - Send Message',\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n\n modal.appendChild(headerComponents.header);\n\n // Make modal draggable\n makeDraggable(modal, headerComponents.header);\n\n // Update status dot initially\n updateSendMsgStatusDot();\n\n // Form content container (scrollable)\n var formContainer = document.createElement('div');\n formContainer.style.padding = '8px';\n formContainer.style.overflowY = 'auto';\n formContainer.style.backgroundColor = '#1e1e1e';\n\n // Message Type Selector\n var typeLabel = document.createElement('label');\n typeLabel.textContent = 'Message Type';\n typeLabel.style.display = 'block';\n typeLabel.style.fontSize = '11px';\n typeLabel.style.fontWeight = '600';\n typeLabel.style.marginBottom = '4px';\n typeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var typeSelect = document.createElement('select');\n typeSelect.style.width = '100%';\n typeSelect.style.padding = '6px 8px';\n typeSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n typeSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n typeSelect.style.borderRadius = '4px';\n typeSelect.style.color = '#fff';\n typeSelect.style.fontSize = '12px';\n typeSelect.style.cursor = 'pointer';\n typeSelect.style.outline = 'none';\n typeSelect.style.marginBottom = '12px';\n\n // Add default option\n var defaultOption = document.createElement('option');\n defaultOption.value = '';\n defaultOption.textContent = 'Select a message type';\n defaultOption.disabled = true;\n defaultOption.selected = true;\n typeSelect.appendChild(defaultOption);\n\n // Add message types\n Object.keys(messageTypes).forEach(function(msgType) {\n var option = document.createElement('option');\n option.value = msgType;\n option.textContent = msgType;\n typeSelect.appendChild(option);\n });\n\n // Add wildcard option for custom message types\n var wildcardOption = document.createElement('option');\n wildcardOption.value = '*';\n wildcardOption.textContent = '* (Custom)';\n typeSelect.appendChild(wildcardOption);\n\n formContainer.appendChild(typeLabel);\n formContainer.appendChild(typeSelect);\n\n // Custom Message Type Input Container (shown when \"*\" is selected)\n var customTypeContainer = document.createElement('div');\n customTypeContainer.style.display = 'none';\n customTypeContainer.style.marginBottom = '12px';\n\n var customTypeLabel = document.createElement('label');\n customTypeLabel.textContent = 'Message Type';\n customTypeLabel.style.display = 'block';\n customTypeLabel.style.fontSize = '11px';\n customTypeLabel.style.fontWeight = '600';\n customTypeLabel.style.marginBottom = '4px';\n customTypeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var customTypeInput = document.createElement('input');\n customTypeInput.type = 'text';\n customTypeInput.placeholder = 'Enter message type name';\n customTypeInput.style.width = '100%';\n customTypeInput.style.padding = '6px 8px';\n customTypeInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n customTypeInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n customTypeInput.style.borderRadius = '4px';\n customTypeInput.style.color = '#fff';\n customTypeInput.style.fontSize = '11px';\n customTypeInput.style.fontFamily = 'monospace';\n customTypeInput.style.outline = 'none';\n\n customTypeContainer.appendChild(customTypeLabel);\n customTypeContainer.appendChild(customTypeInput);\n formContainer.appendChild(customTypeContainer);\n\n // Message Payload Input Container\n var payloadContainer = document.createElement('div');\n payloadContainer.style.display = 'none';\n payloadContainer.style.marginBottom = '12px';\n\n var payloadLabel = document.createElement('label');\n payloadLabel.textContent = 'Payload';\n payloadLabel.style.display = 'block';\n payloadLabel.style.fontSize = '11px';\n payloadLabel.style.fontWeight = '600';\n payloadLabel.style.marginBottom = '4px';\n payloadLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var payloadFieldsContainer = document.createElement('div');\n payloadFieldsContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadFieldsContainer.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadFieldsContainer.style.borderRadius = '4px';\n payloadFieldsContainer.style.padding = '8px';\n payloadFieldsContainer.style.fontFamily = 'monospace';\n payloadFieldsContainer.style.fontSize = '11px';\n\n var payloadTextarea = document.createElement('textarea');\n payloadTextarea.style.width = '100%';\n payloadTextarea.style.minHeight = '80px';\n payloadTextarea.style.padding = '6px 8px';\n payloadTextarea.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadTextarea.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadTextarea.style.borderRadius = '4px';\n payloadTextarea.style.color = '#fff';\n payloadTextarea.style.fontSize = '11px';\n payloadTextarea.style.fontFamily = 'monospace';\n payloadTextarea.style.outline = 'none';\n payloadTextarea.style.resize = 'vertical';\n payloadTextarea.placeholder = '{}';\n payloadTextarea.value = '{}';\n\n payloadContainer.appendChild(payloadLabel);\n payloadContainer.appendChild(payloadFieldsContainer);\n payloadContainer.appendChild(payloadTextarea);\n formContainer.appendChild(payloadContainer);\n\n // Error message container\n var errorContainer = document.createElement('div');\n errorContainer.style.display = 'none';\n errorContainer.style.padding = '6px 8px';\n errorContainer.style.backgroundColor = 'rgba(220, 38, 38, 0.2)';\n errorContainer.style.border = '1px solid rgba(220, 38, 38, 0.4)';\n errorContainer.style.borderRadius = '4px';\n errorContainer.style.marginBottom = '8px';\n errorContainer.style.fontSize = '11px';\n errorContainer.style.color = '#fca5a5';\n\n formContainer.appendChild(errorContainer);\n\n // Variables to store current message type and its schema\n var currentFormInputs: any = {};\n var currentMessageType = '';\n\n // Update payload fields based on selected message type\n typeSelect.addEventListener('change', function() {\n var selectedType = typeSelect.value;\n currentMessageType = selectedType;\n\n if (selectedType) {\n // Show/hide custom type input based on selection\n if (selectedType === '*') {\n customTypeContainer.style.display = 'block';\n customTypeInput.focus();\n } else {\n customTypeContainer.style.display = 'none';\n }\n\n payloadContainer.style.display = 'block';\n errorContainer.style.display = 'none';\n currentFormInputs = {};\n\n // Clear previous fields\n payloadFieldsContainer.innerHTML = '';\n\n var schema = messageTypes[selectedType];\n\n // If schema exists and has properties, create form inputs\n if (schema && schema.properties && Object.keys(schema.properties).length > 0) {\n payloadTextarea.style.display = 'none';\n payloadFieldsContainer.style.display = 'block';\n\n // Generate form fields based on schema\n Object.keys(schema.properties).forEach(function(fieldName) {\n var fieldSchema = schema.properties[fieldName];\n var fieldContainer = document.createElement('div');\n fieldContainer.style.marginBottom = '8px';\n\n var fieldLabel = document.createElement('label');\n fieldLabel.textContent = fieldName;\n if (schema.required && schema.required.includes(fieldName)) {\n fieldLabel.textContent += ' *';\n }\n fieldLabel.style.display = 'block';\n fieldLabel.style.fontSize = '10px';\n fieldLabel.style.marginBottom = '3px';\n fieldLabel.style.color = 'rgba(255, 255, 255, 0.8)';\n\n var fieldInput;\n\n if (fieldSchema.type === 'boolean') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'checkbox';\n fieldInput.style.width = '16px';\n fieldInput.style.height = '16px';\n fieldInput.style.cursor = 'pointer';\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'number';\n if (fieldSchema.type === 'integer') {\n fieldInput.step = '1';\n }\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n } else {\n fieldInput = document.createElement('input');\n fieldInput.type = 'text';\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n }\n\n if (fieldSchema.description) {\n var fieldDesc = document.createElement('div');\n fieldDesc.textContent = fieldSchema.description;\n fieldDesc.style.fontSize = '9px';\n fieldDesc.style.color = 'rgba(255, 255, 255, 0.5)';\n fieldDesc.style.marginTop = '2px';\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n fieldContainer.appendChild(fieldDesc);\n } else {\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n }\n\n payloadFieldsContainer.appendChild(fieldContainer);\n currentFormInputs[fieldName] = { input: fieldInput, schema: fieldSchema };\n });\n } else {\n // Use JSON textarea for free-form input (no schema or empty schema)\n payloadTextarea.style.display = 'block';\n payloadFieldsContainer.style.display = 'none';\n payloadTextarea.value = '{}';\n\n // Update placeholder based on whether schema exists\n if (!schema) {\n payloadTextarea.placeholder = 'Enter JSON payload (no message format defined)\\n\\nExample:\\n{\\n \"key\": \"value\"\\n}';\n } else {\n payloadTextarea.placeholder = '{}';\n }\n }\n } else {\n payloadContainer.style.display = 'none';\n }\n });\n\n // Send Button\n var sendButton = document.createElement('button');\n sendButton.textContent = 'Send';\n sendButton.style.width = '100%';\n sendButton.style.padding = '8px 12px';\n sendButton.style.backgroundColor = '#8b5cf6';\n sendButton.style.border = 'none';\n sendButton.style.borderRadius = '4px';\n sendButton.style.color = '#fff';\n sendButton.style.fontSize = '12px';\n sendButton.style.fontWeight = '600';\n sendButton.style.cursor = 'pointer';\n sendButton.style.transition = 'background-color 0.2s';\n\n var isButtonInSuccessState = false;\n var hoverColor = '#7c3aed';\n var normalColor = '#8b5cf6';\n\n sendButton.addEventListener('mouseenter', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = hoverColor;\n }\n });\n sendButton.addEventListener('mouseleave', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = normalColor;\n }\n });\n\n // Update the connection status function to also manage button state\n updateConnectionStatus = function() {\n const isConnected = room.connection?.isOpen;\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = isConnected ? '#22c55e' : '#ef4444';\n }\n\n // Update button disabled state\n sendButton.disabled = !isConnected;\n if (!isConnected) {\n sendButton.style.backgroundColor = '#6b7280';\n sendButton.style.cursor = 'not-allowed';\n sendButton.style.opacity = '0.5';\n } else if (!isButtonInSuccessState) {\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n sendButton.style.opacity = '1';\n }\n };\n\n // Swap out the onLeave callback to use the combined update function\n room.onLeave.remove(onLeaveCallbackRef.current);\n room.onLeave(updateConnectionStatus);\n onLeaveCallbackRef.current = updateConnectionStatus;\n\n updateConnectionStatus();\n\n sendButton.addEventListener('click', function() {\n errorContainer.style.display = 'none';\n\n // Check if room is connected\n if (!room.connection?.isOpen) {\n errorContainer.textContent = 'Cannot send message: Room is not connected';\n errorContainer.style.display = 'block';\n return;\n }\n\n if (!currentMessageType) {\n errorContainer.textContent = 'Please select a message type';\n errorContainer.style.display = 'block';\n return;\n }\n\n // Determine actual message type to send\n var actualMessageType = currentMessageType;\n if (currentMessageType === '*') {\n actualMessageType = customTypeInput.value.trim();\n if (!actualMessageType) {\n errorContainer.textContent = 'Please enter a message type name';\n errorContainer.style.display = 'block';\n return;\n }\n }\n\n try {\n var payload;\n\n // Build payload from form inputs or textarea\n if (Object.keys(currentFormInputs).length > 0) {\n payload = {};\n var schema = messageTypes[currentMessageType];\n\n for (var fieldName in currentFormInputs) {\n var fieldData = currentFormInputs[fieldName];\n var input = fieldData.input;\n var fieldSchema = fieldData.schema;\n var value;\n\n if (fieldSchema.type === 'boolean') {\n value = input.checked;\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n value = input.value ? parseFloat(input.value) : undefined;\n } else {\n value = input.value || undefined;\n }\n\n // Only include required fields or fields with values\n if (value !== undefined || (schema.required && schema.required.includes(fieldName))) {\n payload[fieldName] = value;\n }\n }\n } else {\n payload = JSON.parse(payloadTextarea.value);\n }\n\n // Send the message\n room.send(actualMessageType, payload);\n\n // Change button to success state\n isButtonInSuccessState = true;\n sendButton.textContent = 'Message sent!';\n sendButton.style.backgroundColor = '#22c55e';\n sendButton.style.cursor = 'default';\n\n // Restore button after 1.5 seconds\n setTimeout(function() {\n isButtonInSuccessState = false;\n sendButton.textContent = 'Send';\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n }, 800);\n\n } catch (e) {\n errorContainer.textContent = 'Error: ' + e.message;\n errorContainer.style.display = 'block';\n }\n });\n\n formContainer.appendChild(sendButton);\n\n modal.appendChild(formContainer);\n document.body.appendChild(modal);\n}\n\n// Create and open State Inspector modal\nfunction openStateInspectorModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-state-inspector-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Load saved position and size from localStorage\n var savedStateInspectorPrefs = null;\n try {\n var saved = localStorage.getItem('colyseus-state-inspector-preferences');\n if (saved) {\n savedStateInspectorPrefs = JSON.parse(saved);\n }\n } catch (e) {\n // Ignore localStorage errors\n }\n\n // Default values\n var defaultWidth = 600;\n var defaultHeight = 500;\n var defaultLeft = '50%';\n var defaultTop = '50%';\n var defaultTransform = 'translate(-50%, -50%)';\n\n // Use saved preferences if available\n if (savedStateInspectorPrefs) {\n if (savedStateInspectorPrefs.width && savedStateInspectorPrefs.width >= 300) {\n defaultWidth = savedStateInspectorPrefs.width;\n }\n if (savedStateInspectorPrefs.height && savedStateInspectorPrefs.height >= 200) {\n defaultHeight = savedStateInspectorPrefs.height;\n }\n if (savedStateInspectorPrefs.left !== undefined && savedStateInspectorPrefs.top !== undefined) {\n // Constrain position to window boundaries\n var maxLeft = window.innerWidth - defaultWidth;\n var maxTop = window.innerHeight - defaultHeight;\n\n var constrainedLeft = Math.max(0, Math.min(savedStateInspectorPrefs.left, maxLeft));\n var constrainedTop = Math.max(0, Math.min(savedStateInspectorPrefs.top, maxTop));\n\n defaultLeft = constrainedLeft + 'px';\n defaultTop = constrainedTop + 'px';\n defaultTransform = 'none';\n }\n }\n\n // Function to save state inspector preferences\n function saveStateInspectorPreferences() {\n try {\n var rect = modal.getBoundingClientRect();\n var prefs = {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n top: rect.top\n };\n localStorage.setItem('colyseus-state-inspector-preferences', JSON.stringify(prefs));\n } catch (e) {\n // Ignore localStorage errors\n }\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n\n // Function to update status dot color\n const updateStateViewerStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Register the onLeave callback\n room.onLeave(updateStateViewerStatusDot);\n\n // Create modal using shared utility with automatic onLeave tracking\n const modal = createModal({\n id: 'debug-state-inspector-modal',\n width: defaultWidth + 'px',\n height: defaultHeight + 'px',\n minWidth: '300px',\n minHeight: '200px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n top: defaultTop,\n left: defaultLeft,\n transform: defaultTransform,\n room: room,\n trackOnLeave: true,\n onLeaveCallback: updateStateViewerStatusDot\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: `${debugInfo.roomName} - State Viewer`,\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n const header = headerComponents.header;\n const closeButton = headerComponents.closeButton;\n\n modal.appendChild(header);\n\n // Update status dot initially\n updateStateViewerStatusDot();\n\n // State content container\n var contentContainer = document.createElement('div');\n contentContainer.style.padding = '8px';\n contentContainer.style.overflowY = 'auto';\n contentContainer.style.flex = '1';\n contentContainer.style.minHeight = '0';\n contentContainer.style.backgroundColor = '#1e1e1e';\n contentContainer.id = 'debug-state-content';\n\n // Single event listener for all expand buttons (event delegation)\n contentContainer.addEventListener('click', function(e: MouseEvent) {\n var expandButton = (e.target as HTMLElement).closest('[data-expand-button]');\n if (expandButton) {\n e.stopPropagation();\n toggleExpand(expandButton);\n }\n });\n\n // // Counter for unique IDs\n // var stateNodeCounter = 0;\n\n // Track expanded paths across re-renders\n var expandedPaths = new Set();\n\n // Helper function to escape HTML\n function escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n // Helper function to check if a value is expandable (object, array, or collection)\n function isExpandable(value) {\n if (value === null || value === undefined) {\n return false;\n }\n var valueType = typeof value;\n var isObject = valueType === 'object' && !(value instanceof Array);\n var hasForEach = valueType === 'object' && typeof value.forEach === 'function';\n var isArray = value instanceof Array;\n return isObject || isArray || hasForEach;\n }\n\n // Helper function to get label color based on field name\n function getLabelColor(fieldName) {\n return typeof fieldName === 'string' && fieldName.startsWith('\"') ? '#CE9178' : '#DCDCAA';\n }\n\n // Helper function to get display state for expandable nodes\n function getDisplayState(depth, isPathExpanded) {\n var isRoot = depth === 0;\n return {\n isRoot: isRoot,\n initialDisplay: isRoot ? 'block' : (isPathExpanded ? 'block' : 'none'),\n initialIcon: (isRoot || isPathExpanded) ? '▼' : '▶',\n rootClass: isRoot ? ' data-root-node=\"true\"' : ''\n };\n }\n\n // Helper function to get refId display string\n function getRefIdDisplay(refId) {\n return refId !== null && refId !== undefined ? '<span style=\"color: #909090; font-size: 11px; margin-left: 4px;\">(ref: ' + refId + ')</span>' : '';\n }\n\n // Helper function to render expand button HTML\n function renderExpandButton(displayState, displayLabel, refIdDisplay, size) {\n var html = '<div data-expand-button' + displayState.rootClass + ' style=\"display: flex; align-items: center; cursor: ' + (displayState.isRoot ? 'default' : 'pointer') + '; user-select: none; margin: 0; padding: 1px 0;\" onmouseover=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'rgba(255,255,255,0.05)\\'') + '\" onmouseout=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'transparent\\'') + '\">';\n html += '<span data-expand-icon style=\"margin-right: 4px; color: #858585; font-size: 10px; width: 10px; display: inline-block; text-align: center; user-select: none;\">' + displayState.initialIcon + '</span>';\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span>';\n }\n if (size !== null && size !== undefined && size !== '?') {\n // ×\n html += ' <span style=\"color: #858585;\">(' + size + ') </span>';\n }\n html += refIdDisplay;\n html += '</div>';\n return html;\n }\n\n // Helper function to render a key-value pair\n function renderKeyValue(key, value, depth, currentPath, keyDisplay, isKeyString) {\n if (isExpandable(value)) {\n // For expandable values, renderState handles its own container with proper indentation\n // Pass the fieldName so it displays the key as the label\n if (keyDisplay !== null) {\n return renderState(value, depth, String(key), currentPath, keyDisplay);\n } else {\n return renderState(value, depth, String(key), currentPath);\n }\n } else {\n // For primitive values, wrap in a div with key-value formatting\n // Add padding-left to align with expandable items (icon width 10px + margin-right 4px = 14px)\n var indent = depth * 6;\n var html = '<div style=\"margin-left: ' + indent + 'px; padding-left: 14px;\">';\n if (keyDisplay !== null) {\n var keyColor = isKeyString ? '#CE9178' : '#DCDCAA';\n html += '<span style=\"color: ' + keyColor + ';\">' + (isKeyString ? '\"' + escapeHtml(String(keyDisplay)) + '\"' : escapeHtml(String(keyDisplay))) + '</span><span style=\"color: #858585;\">: </span>';\n } else {\n html += '<span style=\"color: #DCDCAA;\">' + escapeHtml(String(key)) + '</span><span style=\"color: #858585;\">: </span>';\n }\n html += renderState(value, depth + 1, String(key), currentPath);\n html += '</div>';\n return html;\n }\n }\n\n // Function to render state recursively\n function renderState(\n obj: any,\n depth: number = 0,\n parentKey: string = '',\n path: string = '',\n fieldName: string = null\n ) {\n var maxDepth = 10;\n if (depth > maxDepth) {\n return '<span style=\"color: #858585; font-style: italic;\">[Max depth reached]</span>';\n }\n\n if (obj === null) {\n return '<span style=\"color: #858585;\">null</span>';\n }\n\n if (obj === undefined) {\n return '<span style=\"color: #858585;\">undefined</span>';\n }\n\n var type = typeof obj;\n var indent = depth * 6;\n var refId = obj[\"~refId\"];\n var nodeId = 'state-node-' + refId;\n var currentPath = path ? path + '.' + (parentKey || '') : (parentKey || 'root');\n var isPathExpanded = expandedPaths.has(currentPath);\n var refIdDisplay = getRefIdDisplay(refId);\n\n if (type === 'string') {\n return '<span style=\"color: #CE9178;\">\"' + escapeHtml(String(obj)) + '\"</span>';\n }\n\n if (type === 'number') {\n return '<span style=\"color: #B5CEA8;\">' + obj + '</span>';\n }\n\n if (type === 'boolean') {\n return '<span style=\"color: #569CD6;\">' + obj + '</span>';\n }\n\n // Check if object has forEach method\n var hasForEach = typeof obj.forEach === 'function';\n var collectionSize = (hasForEach) && (obj.size || obj.length) || null;\n\n if (hasForEach) {\n var size = (collectionSize !== null ? collectionSize : '?');\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'State' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, size);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n // Handle forEach collections (Map, Set, etc.)\n var isSet = obj instanceof Set || (obj.constructor && obj.constructor.name === 'Set');\n try {\n obj.forEach(function (value, key) {\n if (isSet) {\n // For Sets, forEach passes (value, value, set), so we only use the first parameter\n html += renderState(value, depth + 1, String(key), currentPath);\n } else {\n // For Maps, format key and use renderKeyValue to handle expandable values and proper formatting\n var isKeyNumber = typeof key === 'number';\n var keyStr = isKeyNumber ? '[' + String(key) + ']' : String(key);\n html += renderKeyValue(key, value, depth + 1, currentPath, keyStr, typeof key === 'string');\n }\n });\n } catch (e) {\n var errorIndent = (depth + 1) * 6;\n html += '<div style=\"margin-left: ' + errorIndent + 'px; color: #e74856;\">Error iterating: ' + escapeHtml(e.message) + '</div>';\n }\n\n html += '</div>';\n html += '</div>';\n return html;\n }\n\n if (type === 'object') {\n var keys = Object.keys(obj);\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'state' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n\n if (keys.length === 0) {\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span><span style=\"color: #858585;\"> {}</span>' + refIdDisplay;\n } else {\n html += '<span style=\"color: #858585;\">{}</span>' + refIdDisplay;\n }\n } else {\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, null);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key === \"~refId\") continue;// skip refId\n html += renderKeyValue(key, obj[key], depth + 1, currentPath, key, false);\n }\n\n html += '</div>';\n }\n\n html += '</div>';\n return html;\n }\n\n return '<span style=\"color: #858585;\">' + escapeHtml(String(obj)) + '</span>';\n }\n\n // Function to toggle expand/collapse\n function toggleExpand(expandButton) {\n // Don't allow collapsing root node\n var content = expandButton.nextElementSibling;\n var icon = expandButton.querySelector('[data-expand-icon]');\n if (content && content.style) {\n var isHidden = content.style.display === 'none';\n content.style.display = isHidden ? 'block' : 'none';\n if (icon) {\n icon.textContent = isHidden ? '▼' : '▶';\n }\n\n // Track expanded state by path\n var pathElement = expandButton.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n if (isHidden) {\n expandedPaths.add(path);\n } else {\n expandedPaths.delete(path);\n }\n }\n }\n }\n\n // Function to update state display\n function updateStateDisplay() {\n try {\n // Save currently expanded paths before clearing\n var currentExpandedPaths = new Set();\n var existingExpandButtons = contentContainer.querySelectorAll('[data-expand-button]');\n for (var i = 0; i < existingExpandButtons.length; i++) {\n var button = existingExpandButtons[i];\n var pathElement = button.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n var content = button.nextElementSibling as HTMLElement;\n if (content && content.style && content.style.display !== 'none') {\n currentExpandedPaths.add(path);\n }\n }\n }\n\n // Merge with previously tracked expanded paths\n // Keep paths that were expanded before, or are currently expanded\n var pathsToKeep = new Set();\n expandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n currentExpandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n expandedPaths = pathsToKeep;\n\n // stateNodeCounter = 0; // Reset counter for new render\n var state = room.state || {};\n contentContainer.innerHTML = '<div style=\"font-family: \\'Consolas\\', \\'Monaco\\', \\'Courier New\\', monospace; font-size: 12px; line-height: 1.5; color: #d4d4d4; padding: 8px;\">' + renderState(state) + '</div>';\n\n // Event delegation: single click listener handles all expand buttons\n } catch (e) {\n contentContainer.innerHTML = '<div style=\"color: #e74856; padding: 20px;\">Error accessing room state: ' + escapeHtml(e.message) + '</div>';\n }\n }\n\n // Throttle function to prevent excessive re-renders\n // TODO: prevent re-renders of unchanged refIds instead of just throttling\n function throttle(func, wait) {\n var timeout;\n var previous = 0;\n return function executedFunction() {\n var context = this;\n var args = arguments;\n var now = Date.now();\n var remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(function() {\n previous = Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n }\n\n // Create throttled version of updateStateDisplay\n var throttledUpdateStateDisplay = throttle(updateStateDisplay, 200);\n\n // Initial render - root is always expanded\n expandedPaths.add('root');\n updateStateDisplay();\n\n // Update state when it changes\n const originalTriggerChanges = room.serializer.decoder.triggerChanges;\n room.serializer.decoder.triggerChanges = function(changes) {\n originalTriggerChanges?.apply(this, arguments);\n throttledUpdateStateDisplay();\n /**\n * TODO: keep track of which refIds have changed and only re-render those\n */\n }\n\n modal.appendChild(contentContainer);\n document.body.appendChild(modal);\n\n // Drag and resize state variables\n var isDragging = false;\n var dragStartX = 0;\n var dragStartY = 0;\n var modalStartX = 0;\n var modalStartY = 0;\n var isResizing = false;\n var resizeHandle = null;\n var resizeStartX = 0;\n var resizeStartY = 0;\n var resizeStartWidth = 0;\n var resizeStartHeight = 0;\n var resizeStartLeft = 0;\n var resizeStartTop = 0;\n\n header.addEventListener('mousedown', function(e) {\n const target = e.target as HTMLElement;\n // Don't drag if clicking on a resize handle\n if (target.classList && target.classList.contains('resize-handle')) {\n return;\n }\n if (target === closeButton || closeButton.contains(target)) {\n return; // Don't drag when clicking close button\n }\n isDragging = true;\n dragStartX = e.clientX;\n dragStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n modalStartX = rect.left;\n modalStartY = rect.top;\n modal.style.cursor = 'move';\n e.preventDefault();\n });\n\n var handleMouseMove = function(e) {\n if (isResizing && resizeHandle) {\n // Handle resize\n var deltaX = e.clientX - resizeStartX;\n var deltaY = e.clientY - resizeStartY;\n var newWidth = resizeStartWidth;\n var newHeight = resizeStartHeight;\n var newLeft = resizeStartLeft;\n var newTop = resizeStartTop;\n\n if (resizeHandle.includes('e')) {\n newWidth = resizeStartWidth + deltaX;\n }\n if (resizeHandle.includes('w')) {\n newWidth = resizeStartWidth - deltaX;\n newLeft = resizeStartLeft + deltaX;\n }\n if (resizeHandle.includes('s')) {\n newHeight = resizeStartHeight + deltaY;\n }\n if (resizeHandle.includes('n')) {\n newHeight = resizeStartHeight - deltaY;\n newTop = resizeStartTop + deltaY;\n }\n\n // Apply constraints\n newWidth = Math.max(parseInt(modal.style.minWidth) || 300, Math.min(newWidth, window.innerWidth - newLeft));\n newHeight = Math.max(parseInt(modal.style.minHeight) || 200, Math.min(newHeight, window.innerHeight - newTop));\n\n modal.style.width = newWidth + 'px';\n modal.style.height = newHeight + 'px';\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n modal.style.transform = 'none';\n } else if (isDragging) {\n // Handle drag\n var deltaX = e.clientX - dragStartX;\n var deltaY = e.clientY - dragStartY;\n var newX = modalStartX + deltaX;\n var newY = modalStartY + deltaY;\n\n // Constrain to viewport\n var maxX = window.innerWidth - modal.offsetWidth;\n var maxY = window.innerHeight - modal.offsetHeight;\n newX = Math.max(0, Math.min(newX, maxX));\n newY = Math.max(0, Math.min(newY, maxY));\n\n modal.style.left = newX + 'px';\n modal.style.top = newY + 'px';\n modal.style.transform = 'none';\n }\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n\n var handleMouseUp = function() {\n if (isDragging) {\n isDragging = false;\n modal.style.cursor = '';\n saveStateInspectorPreferences();\n }\n if (isResizing) {\n isResizing = false;\n resizeHandle = null;\n saveStateInspectorPreferences();\n }\n };\n\n document.addEventListener('mouseup', handleMouseUp);\n\n // Resize functionality\n var resizeHandleSize = 8;\n var cornerHandleSize = 12; // Larger handles for corners to make them easier to grab\n\n // Create edge handles first, then corner handles (so corners are on top)\n var edgeHandles = ['n', 's', 'e', 'w'];\n var cornerHandles = ['nw', 'ne', 'sw', 'se'];\n\n // Create edge handles (leaving space for corners)\n edgeHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10000';\n handleEl.style.pointerEvents = 'auto';\n\n if (handle === 'n' || handle === 's') {\n handleEl.style.height = resizeHandleSize + 'px';\n handleEl.style.left = cornerHandleSize + 'px';\n handleEl.style.right = cornerHandleSize + 'px';\n if (handle === 'n') {\n handleEl.style.top = '0';\n handleEl.style.cursor = 'n-resize';\n } else {\n handleEl.style.bottom = '0';\n handleEl.style.cursor = 's-resize';\n }\n } else {\n handleEl.style.width = resizeHandleSize + 'px';\n handleEl.style.top = cornerHandleSize + 'px';\n handleEl.style.bottom = cornerHandleSize + 'px';\n if (handle === 'e') {\n handleEl.style.right = '0';\n handleEl.style.cursor = 'e-resize';\n } else {\n handleEl.style.left = '0';\n handleEl.style.cursor = 'w-resize';\n }\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n // Create corner handles (higher z-index so they're on top)\n cornerHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10002';\n handleEl.style.pointerEvents = 'auto';\n handleEl.style.width = cornerHandleSize + 'px';\n handleEl.style.height = cornerHandleSize + 'px';\n\n if (handle === 'nw') {\n handleEl.style.top = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'nw-resize';\n } else if (handle === 'ne') {\n handleEl.style.top = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'ne-resize';\n } else if (handle === 'sw') {\n handleEl.style.bottom = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'sw-resize';\n } else if (handle === 'se') {\n handleEl.style.bottom = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'se-resize';\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n\n // Remove state change listener when modal is closed\n var originalRemove = modal.remove;\n modal.remove = function() {\n // Restore original trigger changes\n room.serializer.decoder.triggerChanges = originalTriggerChanges;\n originalRemove.call(this);\n };\n}\n\n// Apply panel position based on current setting\nfunction applyPanelPosition() {\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]');\n\n var positions = {\n 'bottom-right': { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n 'bottom-left': { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n 'top-left': { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n 'top-right': { top: '14px', right: '14px', bottom: 'auto', left: 'auto' }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n\n // Update logo container\n if (logoContainer) {\n logoContainer.style.bottom = pos.bottom;\n logoContainer.style.right = pos.right;\n logoContainer.style.top = pos.top;\n logoContainer.style.left = pos.left;\n }\n\n // Update menu position\n if (menu) {\n if (preferences.panelPosition.position.startsWith('bottom')) {\n menu.style.bottom = '60px';\n menu.style.top = 'auto';\n } else {\n // For top positions, menu appears below the logo\n menu.style.top = '60px';\n menu.style.bottom = 'auto';\n }\n menu.style.right = pos.right;\n menu.style.left = pos.left;\n }\n\n // Update panels\n repositionDebugPanels();\n}\n\n// Hide panels for this session\nfunction hidePanelsForSession() {\n panelsHidden = true;\n savePreferences(); // Save the hidden state\n\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>;\n\n if (logoContainer) {\n logoContainer.style.display = 'none';\n }\n if (menu) {\n menu.style.display = 'none';\n }\n panels.forEach(function(panel) {\n panel.style.display = 'none';\n });\n}\n\n// Helper function to format bytes\nfunction formatBytes(bytes) {\n if (!bytes) {\n return '0 B';\n } else if (bytes < 1) {\n bytes = 1; // avoid visual glitches\n }\n var k = 1024;\n var sizes = ['B', 'KB', 'MB', 'GB'];\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n return (Math.round(bytes) / Math.pow(k, i)).toFixed(1) + ' ' + sizes[i];\n}\n\n// Helper function to create debug panel for a room\nfunction createDebugPanel(uniquePanelId, debugInfo) {\n // Check if panel already exists\n var existingPanel = document.getElementById('debug-panel-' + uniquePanelId);\n if (existingPanel) {\n return existingPanel;\n }\n\n var panel = document.createElement('div');\n panel.id = 'debug-panel-' + uniquePanelId;\n panel.style.position = 'fixed';\n // Position will be set by repositionDebugPanels\n panel.style.backgroundColor = 'rgba(0, 0, 0, 0.85)';\n panel.style.color = '#fff';\n panel.style.padding = '8px';\n panel.style.borderRadius = '6px';\n panel.style.fontFamily = 'monospace';\n panel.style.fontSize = '11px';\n panel.style.zIndex = '999';\n panel.style.minWidth = '180px';\n panel.style.marginRight = '6px';\n panel.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n panel.style.display = panelsHidden ? 'none' : 'block';\n\n var title = document.createElement('div');\n title.id = 'debug-title-' + uniquePanelId;\n title.style.fontWeight = 'bold';\n title.style.marginBottom = '6px';\n title.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n title.style.paddingBottom = '4px';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n title.style.justifyContent = 'space-between';\n title.style.gap = '8px';\n title.style.position = 'relative';\n title.innerHTML = '<span id=\"debug-title-text-' + uniquePanelId + '\"><span class=\"debug-room-name\"></span><span class=\"debug-info-icon\" style=\"display: inline-flex; align-items: center; margin-left: 4px; cursor: pointer; opacity: 0.6; vertical-align: middle;\">' + infoIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"10\" width=\"10\"') + '</span></span><span id=\"debug-ping-' + uniquePanelId + '\" style=\"font-size: 10px; font-weight: normal; color: #888;\" title=\"Ping time\">--</span>';\n\n // Create tooltip for info button (will be shown on hover)\n var tooltip = document.createElement('div');\n tooltip.id = 'debug-tooltip-' + uniquePanelId;\n tooltip.style.position = 'absolute';\n tooltip.style.top = '100%';\n tooltip.style.left = '0';\n tooltip.style.marginTop = '4px';\n tooltip.style.padding = '6px 8px';\n tooltip.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n tooltip.style.color = '#fff';\n tooltip.style.borderRadius = '4px';\n tooltip.style.fontSize = '10px';\n tooltip.style.fontFamily = 'monospace';\n tooltip.style.zIndex = '1000';\n tooltip.style.display = 'none';\n tooltip.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.5)';\n tooltip.style.lineHeight = '1.4';\n tooltip.innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> N/A</div>';\n\n var content = document.createElement('div');\n content.id = 'debug-content-' + uniquePanelId;\n\n // Create action buttons container at the bottom\n var actionsContainer = document.createElement('div');\n actionsContainer.id = 'debug-actions-' + uniquePanelId;\n actionsContainer.style.display = 'flex';\n actionsContainer.style.gap = '4px';\n actionsContainer.style.marginTop = '8px';\n actionsContainer.style.paddingTop = '6px';\n actionsContainer.style.borderTop = '1px solid rgba(255, 255, 255, 0.15)';\n actionsContainer.style.position = 'relative';\n\n // Helper function to create action button\n function createActionButton(id, icon, label, onClick) {\n var btn = document.createElement('button');\n btn.id = id;\n btn.style.display = 'flex';\n btn.style.alignItems = 'center';\n btn.style.gap = '4px';\n btn.style.padding = '4px 8px';\n btn.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n btn.style.borderRadius = '4px';\n btn.style.background = 'rgba(255, 255, 255, 0.05)';\n btn.style.color = '#fff';\n btn.style.fontSize = '9px';\n btn.style.cursor = 'pointer';\n btn.style.transition = 'background 0.2s, border-color 0.2s';\n btn.innerHTML = '<span style=\"display: inline-flex; align-items: center; width: 12px; height: 12px;\">' + icon + '</span><span>' + label + '</span>';\n\n btn.addEventListener('mouseenter', function() {\n btn.style.background = 'rgba(255, 255, 255, 0.15)';\n btn.style.borderColor = 'rgba(255, 255, 255, 0.3)';\n });\n btn.addEventListener('mouseleave', function() {\n btn.style.background = 'rgba(255, 255, 255, 0.05)';\n btn.style.borderColor = 'rgba(255, 255, 255, 0.2)';\n });\n btn.addEventListener('click', function(e) {\n e.stopPropagation();\n onClick();\n });\n\n return btn;\n }\n\n // Create action buttons\n var stateBtn = createActionButton(\n 'debug-state-btn-' + uniquePanelId,\n treeViewIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'State',\n function() { openStateInspectorModal(uniquePanelId); }\n );\n\n var messageBtn = createActionButton(\n 'debug-message-btn-' + uniquePanelId,\n messageIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'Send',\n function() { openSendMessagesModal(uniquePanelId); }\n );\n messageBtn.style.display = 'none'; // Hidden by default, shown when message types available\n\n // Create disconnect button (red, simulates abnormal websocket close)\n var disconnectBtn = createActionButton(\n 'debug-disconnect-btn-' + uniquePanelId,\n disconnectIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'Drop',\n function() {\n var info = roomDebugInfo.get(uniquePanelId);\n if (info && info.room && info.room.connection) {\n // Simulate connection closure\n info.room.connection.close(CloseCode.MAY_TRY_RECONNECT);\n }\n }\n );\n\n // Track button state for hover effects\n var isReconnecting = false;\n\n // Helper to apply normal (red) button style\n function applyNormalStyle() {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.2)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.5)';\n disconnectBtn.style.color = '#ef4444';\n disconnectBtn.style.animation = '';\n disconnectBtn.style.pointerEvents = 'auto';\n disconnectBtn.style.opacity = '1';\n var labelSpan = disconnectBtn.querySelector('span:last-child') as HTMLElement;\n if (labelSpan) labelSpan.textContent = 'Drop';\n }\n\n // Helper to apply reconnecting (orange/pulsing) button style\n function applyReconnectingStyle() {\n disconnectBtn.style.background = 'rgba(251, 146, 60, 0.3)';\n disconnectBtn.style.borderColor = 'rgba(251, 146, 60, 0.6)';\n disconnectBtn.style.color = '#fb923c';\n disconnectBtn.style.animation = 'debug-pulse 1.5s ease-in-out infinite';\n disconnectBtn.style.pointerEvents = 'none';\n disconnectBtn.style.opacity = '0.8';\n var labelSpan = disconnectBtn.querySelector('span:last-child') as HTMLElement;\n if (labelSpan) labelSpan.textContent = 'Reconnecting...';\n }\n\n // Inject CSS animation if not already present\n if (!document.getElementById('debug-pulse-animation')) {\n var style = document.createElement('style');\n style.id = 'debug-pulse-animation';\n style.textContent = '@keyframes debug-pulse { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } }';\n document.head.appendChild(style);\n }\n\n // Apply initial style\n applyNormalStyle();\n\n // Register onDrop callback to show reconnecting state\n if (debugInfo.room) {\n debugInfo.room.onDrop(function() {\n isReconnecting = true;\n applyReconnectingStyle();\n });\n\n // Register onReconnect callback to restore normal state\n debugInfo.room.onReconnect(function() {\n isReconnecting = false;\n applyNormalStyle();\n });\n }\n\n // Hover effects (only when not reconnecting)\n disconnectBtn.addEventListener('mouseenter', function() {\n if (!isReconnecting) {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.35)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.7)';\n }\n });\n disconnectBtn.addEventListener('mouseleave', function() {\n if (!isReconnecting) {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.2)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.5)';\n }\n });\n\n // Add tooltip hover handlers to info icon in title\n title.appendChild(tooltip);\n var infoIconEl = title.querySelector('.debug-info-icon') as HTMLElement;\n var tooltipTimeout: any = null;\n var showTooltip = function() {\n if (tooltipTimeout) { clearTimeout(tooltipTimeout); tooltipTimeout = null; }\n tooltip.style.display = 'block';\n };\n var hideTooltip = function() {\n tooltipTimeout = setTimeout(function() {\n tooltip.style.display = 'none';\n }, 100);\n };\n if (infoIconEl) {\n infoIconEl.addEventListener('mouseenter', showTooltip);\n infoIconEl.addEventListener('mouseleave', hideTooltip);\n }\n tooltip.style.pointerEvents = 'auto';\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n\n actionsContainer.appendChild(stateBtn);\n actionsContainer.appendChild(messageBtn);\n actionsContainer.appendChild(disconnectBtn);\n\n panel.appendChild(title);\n panel.appendChild(content);\n panel.appendChild(actionsContainer);\n\n // Prepend panel to body so new panels appear first\n if (document.body.firstChild) {\n document.body.insertBefore(panel, document.body.firstChild);\n } else {\n document.body.appendChild(panel);\n }\n\n return panel;\n}\n\n// Reposition all debug panels to stack vertically\nfunction repositionDebugPanels() {\n if (panelsHidden) return;\n\n var panels = Array.from(document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>)\n .filter(function(panel: HTMLElement) { return panel.style.display !== 'none'; })\n .reverse(); // Reverse to get oldest first (since new panels are prepended)\n\n // Calculate logoIcon container width: 22px width + 10px padding on each side = 42px\n // Add 6px margin to prevent overlap\n var logoIconOffset = 42 + 6;\n\n var positions = {\n 'bottom-right': {\n start: { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n },\n 'bottom-left': {\n start: { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-left': {\n start: { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-right': {\n start: { top: '14px', right: '14px', bottom: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n var baseOffset = 14 + logoIconOffset;\n var currentOffset = baseOffset;\n\n panels.forEach(function(panel) {\n // Set base position\n Object.keys(pos.start).forEach(function(key) {\n panel.style[key] = pos.start[key];\n });\n\n // Apply offset\n var offset = pos.offset(panel, currentOffset);\n Object.keys(offset).forEach(function(key) {\n panel.style[key] = offset[key];\n });\n\n currentOffset += panel.offsetWidth + 6;\n });\n}\n\n// Update debug panel content\nfunction updateDebugPanel(uniquePanelId, debugInfo) {\n var contentId = 'debug-content-' + uniquePanelId;\n var panelId = 'debug-panel-' + uniquePanelId;\n var titleId = 'debug-title-' + uniquePanelId;\n var content = document.getElementById(contentId);\n var panel = document.getElementById(panelId);\n var title = document.getElementById(titleId);\n\n if (!content || !panel) {\n // Only create if panel doesn't exist\n if (!panel) {\n createDebugPanel(uniquePanelId, debugInfo);\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n repositionDebugPanels();\n } else {\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n }\n }\n\n // Update title with room name only (roomId and sessionId are in tooltip)\n var titleTextEl = document.getElementById('debug-title-text-' + uniquePanelId);\n var roomNameEl = titleTextEl?.querySelector('.debug-room-name');\n if (roomNameEl) roomNameEl.textContent = debugInfo.roomName;\n document.getElementById('debug-tooltip-' + uniquePanelId).innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> ' + debugInfo.sessionId + '</div>';\n\n // Update ping in header\n var pingDisplay = debugInfo.pingMs !== null ? debugInfo.pingMs + 'ms' : '--';\n var pingColor = debugInfo.pingMs !== null ? (debugInfo.pingMs < 100 ? '#22c55e' : debugInfo.pingMs < 200 ? '#eab308' : '#ef4444') : '#888';\n var pingElement = document.getElementById('debug-ping-' + uniquePanelId);\n if (pingElement) {\n pingElement.textContent = pingDisplay;\n pingElement.style.color = pingColor;\n }\n\n var html = '<div style=\"line-height: 1.3;\">';\n html += '<div style=\"font-size: 10px; display: flex; gap: 8px;\">';\n html += '<div style=\"flex: 1;\">';\n html += '<div style=\"margin-bottom: 4px;\"><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #FF9800;\">' + envelopeUp + '</span><span style=\"color: #FF9800;\">' + formatBytes(debugInfo.bytesSentPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesSentPerSec.toFixed(0) + ' messages</div></div>';\n html += '<div><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #2196F3;\">' + envelopeDown + '</span><span style=\"color: #2196F3;\">' + formatBytes(debugInfo.bytesReceivedPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesReceivedPerSec.toFixed(0) + ' messages</div></div>';\n html += '</div>';\n html += '<div style=\"display: flex; flex-direction: column; gap: 4px; align-items: flex-end;\">';\n html += '<canvas id=\"graph-sent-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '<canvas id=\"graph-received-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '</div>';\n html += '</div>';\n html += '</div>';\n\n content.innerHTML = html;\n\n // Draw graphs after a short delay to ensure canvas elements are rendered\n setTimeout(function() {\n drawGraph('graph-sent-' + uniquePanelId, debugInfo.bytesSentHistory, '#FF9800');\n drawGraph('graph-received-' + uniquePanelId, debugInfo.bytesReceivedHistory, '#2196F3');\n }, 10);\n}\n\n// Draw graph on canvas\nfunction drawGraph(canvasId, data, color) {\n var canvas = document.getElementById(canvasId) as HTMLCanvasElement;\n if (!canvas) return;\n\n var ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n var width = canvas.width;\n var height = canvas.height;\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height);\n\n if (!data || data.length === 0) return;\n\n // Find min and max values\n var maxValue = Math.max.apply(Math, data);\n var minValue = Math.min.apply(Math, data);\n var range = maxValue - minValue || 1; // Avoid division by zero\n\n // Padding\n var padding = 2;\n var graphWidth = width - padding * 2;\n var graphHeight = height - padding * 2;\n\n // Draw grid lines\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.1)';\n ctx.lineWidth = 0.5;\n for (var i = 0; i <= 4; i++) {\n var y = padding + (graphHeight / 4) * i;\n ctx.beginPath();\n ctx.moveTo(padding, y);\n ctx.lineTo(width - padding, y);\n ctx.stroke();\n }\n\n // Draw the line\n ctx.strokeStyle = color;\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n\n for (var i = 0; i < data.length; i++) {\n var x = padding + (graphWidth / (data.length - 1 || 1)) * i;\n var normalizedValue = (data[i] - minValue) / range;\n var y = padding + graphHeight - (normalizedValue * graphHeight);\n\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n\n ctx.stroke();\n\n // Fill area under the line\n if (data.length > 0) {\n ctx.lineTo(width - padding, height - padding);\n ctx.lineTo(padding, height - padding);\n ctx.closePath();\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.2;\n ctx.fill();\n ctx.globalAlpha = 1.0;\n }\n}\n\n// Calculate per-second rates\nfunction calculateRates(debugInfo) {\n var now = Date.now();\n var elapsed = (now - debugInfo.lastUpdate) / 1000; // seconds\n\n if (elapsed > 0) {\n debugInfo.bytesSentPerSec = debugInfo.bytesSentDelta / elapsed;\n debugInfo.bytesReceivedPerSec = debugInfo.bytesReceivedDelta / elapsed;\n debugInfo.messagesSentPerSec = debugInfo.messagesSentDelta / elapsed;\n debugInfo.messagesReceivedPerSec = debugInfo.messagesReceivedDelta / elapsed;\n\n // Add to history\n debugInfo.bytesSentHistory.push(debugInfo.bytesSentPerSec);\n debugInfo.bytesReceivedHistory.push(debugInfo.bytesReceivedPerSec);\n // debugInfo.historyTimestamps.push(now);\n\n // Limit history length\n var maxLen = debugInfo.maxHistoryLength || 60;\n if (debugInfo.bytesSentHistory.length > maxLen) {\n debugInfo.bytesSentHistory.shift();\n debugInfo.bytesReceivedHistory.shift();\n // debugInfo.historyTimestamps.shift();\n }\n\n // Reset deltas\n debugInfo.bytesSentDelta = 0;\n debugInfo.bytesReceivedDelta = 0;\n debugInfo.messagesSentDelta = 0;\n debugInfo.messagesReceivedDelta = 0;\n debugInfo.lastUpdate = now;\n }\n\n // Update panel\n updateDebugPanel(debugInfo.uniquePanelId, debugInfo);\n}\n\n// Start global update interval if not already running\nfunction ensureGlobalUpdateInterval() {\n if (globalUpdateInterval === null) {\n globalUpdateInterval = setInterval(function() {\n // Loop through all panels and calculate rates\n roomDebugInfo.forEach(function(debugInfo, uniquePanelId) {\n calculateRates(debugInfo);\n });\n\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n }, 1000);\n }\n}\n\nfunction applyMonkeyPatches() {\n\n // Helper function to patch a room\n function patchRoom(room: Room) {\n if (!room) { return room; }\n\n // Generate a consistent room ID\n const roomId = room.roomId;\n const sessionId = room.sessionId;\n\n // Generate unique panel ID: use sessionId if available, otherwise use roomId + timestamp\n const uniquePanelId = sessionId && sessionId !== 'N/A' && sessionId !== ''\n ? sessionId\n : roomId + '-' + Date.now() + '-' + Math.random().toString(36).substring(2, 9);\n\n const transport = room.connection?.transport as WebSocketTransport;\n const endpoint = transport.ws?.url || 'N/A';\n\n const debugInfo = {\n uniquePanelId: uniquePanelId,\n roomId: roomId,\n roomName: room.name || 'N/A',\n sessionId: sessionId || 'N/A',\n endpoint,\n host: new URL(endpoint).host,\n room, // Store room reference for state inspector\n bytesSent: 0,\n bytesReceived: 0,\n messagesSent: 0,\n messagesReceived: 0,\n bytesSentDelta: 0,\n bytesReceivedDelta: 0,\n messagesSentDelta: 0,\n messagesReceivedDelta: 0,\n bytesSentPerSec: 0,\n bytesReceivedPerSec: 0,\n messagesSentPerSec: 0,\n messagesReceivedPerSec: 0,\n lastUpdate: Date.now(),\n bytesSentHistory: [],\n bytesReceivedHistory: [],\n // historyTimestamps: [],\n maxHistoryLength: 60, // Keep last 60 data points (1 minute at 1 second intervals)\n messageTypes: null, // Will store message types from __playground_message_types\n pingMs: null as number | null, // Current ping value in milliseconds\n pingInterval: null as any // Interval for pinging the room\n };\n\n roomDebugInfo.set(uniquePanelId, debugInfo);\n\n // Start ping interval (every 2 seconds)\n debugInfo.pingInterval = setInterval(() => {\n room.ping((ms: number) => {\n debugInfo.pingMs = ms;\n });\n }, 2000);\n\n // Initial ping\n room.ping((ms: number) => {\n debugInfo.pingMs = ms;\n });\n\n // Listen for __playground_message_types message\n room.onMessage('__playground_message_types', (messageTypes: any) => {\n debugInfo.messageTypes = messageTypes;\n\n // Show/hide message button based on message types availability\n var messageBtnElement = document.getElementById('debug-message-btn-' + uniquePanelId);\n if (messageBtnElement) {\n messageBtnElement.style.display = messageTypes ? 'flex' : 'none';\n }\n });\n\n // Helper function to track received message/bytes\n function trackReceivedMessage(data) {\n // Calculate bytes received\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n } else if (data) {\n try {\n bytes = new Blob([JSON.stringify(data)]).size;\n } catch (e) {\n bytes = new Blob([String(data)]).size;\n }\n }\n\n //\n // TODO: avoid trackig __playground_message_types messages in the stats\n //\n debugInfo.messagesReceived++;\n debugInfo.messagesReceivedDelta++;\n debugInfo.bytesReceived += bytes;\n debugInfo.bytesReceivedDelta += bytes;\n }\n\n function trackSentMessage(data) {\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n }\n debugInfo.messagesSent++;\n debugInfo.messagesSentDelta++;\n debugInfo.bytesSent += data.length;\n debugInfo.bytesSentDelta += data.length;\n }\n\n // Monkey-patch: track received messages through onmessage event\n const originalOnMessage = transport.events.onmessage;\n transport.events.onmessage = function(event) {\n // Clone event data to avoid issues with delayed processing\n var eventData = event.data;\n if (eventData instanceof Blob) {\n eventData = eventData.slice();\n } else if (eventData instanceof ArrayBuffer) {\n eventData = eventData.slice(0);\n } else if (typeof eventData === 'string') {\n eventData = eventData;\n }\n\n trackReceivedMessage(eventData);\n\n // Apply latency simulation for received messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n setTimeout(function() {\n // Create a synthetic event-like object\n var syntheticEvent = {\n data: eventData,\n target: event.target,\n currentTarget: event.currentTarget,\n type: 'message'\n };\n originalOnMessage.call(event.target, syntheticEvent);\n }, preferences.latencySimulation.delay);\n } else {\n return originalOnMessage.apply(this, arguments);\n }\n };\n\n // Monkey-patch: sending messages through room connection\n const originalSend = room.connection.send.bind(room.connection);\n room.connection.send = function(data: any) {\n trackSentMessage(data);\n\n // Apply latency simulation for sent messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n var clonedData = data;\n if (data instanceof ArrayBuffer) {\n clonedData = data.slice(0);\n } else if (data instanceof Blob) {\n clonedData = data.slice(0);\n } else if (data instanceof Uint8Array || data instanceof DataView || (data.buffer && data.buffer instanceof ArrayBuffer)) {\n clonedData = new Uint8Array(data).buffer;\n }\n\n setTimeout(function() {\n originalSend(clonedData);\n }, preferences.latencySimulation.delay / 2);\n } else {\n return originalSend(data);\n }\n };\n\n updateDebugPanel(uniquePanelId, debugInfo);\n\n // Ensure global update interval is running\n ensureGlobalUpdateInterval();\n\n // Clean up on room leave\n room.onLeave.once(() => {\n // Clear ping interval\n if (debugInfo.pingInterval !== null) {\n clearInterval(debugInfo.pingInterval);\n debugInfo.pingInterval = null;\n }\n roomDebugInfo.delete(uniquePanelId);\n var panel = document.getElementById('debug-panel-' + uniquePanelId);\n if (panel) {\n panel.remove();\n repositionDebugPanels();\n }\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0 && globalUpdateInterval !== null) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n });\n\n\n return room;\n }\n\n // Store original methods that return rooms\n var originalJoinOrCreate = Client.prototype.joinOrCreate;\n var originalJoin = Client.prototype.join;\n var originalCreate = Client.prototype.create;\n var originalReconnect = Client.prototype.reconnect;\n\n // Patch joinOrCreate\n Client.prototype.joinOrCreate = function() {\n var promise = originalJoinOrCreate.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch join\n Client.prototype.join = function() {\n var promise = originalJoin.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch create\n Client.prototype.create = function() {\n var promise = originalCreate.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch reconnect\n if (originalReconnect) {\n Client.prototype.reconnect = function() {\n var promise = originalReconnect.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n }\n}\n\napplyMonkeyPatches();\n\n// Initialize only after DOM is ready\n// (in case script is loaded in HEAD tag)\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initialize);\n} else {\n // DOM is already ready\n initialize();\n}"],"names":["CloseCode","Client"],"mappings":"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"}
|