{"version":3,"file":"modal.mjs","sources":["../../src/debug/modal.ts"],"sourcesContent":["import { closeIcon } from \"./icons.ts\";\nimport { getDebugRoot } from \"./core.ts\";\nimport { setInset, setMaxViewportHeight } from \"./geometry.ts\";\nimport { isCompact, onReflow } from \"./layout.ts\";\n\n\n// Track open modals as an ordered stack (most recent at end)\nlet modalStack: any[] = [];\n\nconst BASE_MODAL_ZINDEX = 10000;\n\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    var root = getDebugRoot();\n    modalStack.forEach((m, i) => {\n        if (root.contains(m)) {\n            m.style.zIndex = (BASE_MODAL_ZINDEX + i).toString();\n        }\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\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 && getDebugRoot().contains(topModal)) {\n            topModal.remove();\n        }\n    }\n});\n\n\n/**\n * Size and place a modal for the current breakpoint.\n *\n * Compact turns it into a full-screen sheet: there is no useful \"centered 600px\n * window\" on a phone, and it sidesteps the `90vh` trap (mobile Safari counts the\n * collapsible URL bar inside `vh`). Drag and resize are meaningless there, so the\n * handles hide and `makeDraggable` no-ops.\n */\nexport function applyModalLayout(modal, opts) {\n    var handles = modal.querySelectorAll('.resize-handle') as NodeListOf<HTMLElement>;\n\n    if (isCompact()) {\n        // Flush to the safe area on all four edges — setInset carries the px fallback\n        // for engines that can't parse max()/env().\n        (['top', 'right', 'bottom', 'left'] as const).forEach(function(side) { setInset(modal, side, 0); });\n        modal.style.width = 'auto';\n        modal.style.height = 'auto';\n        modal.style.minWidth = '0';\n        modal.style.minHeight = '0';\n        modal.style.maxWidth = 'none';\n        modal.style.maxHeight = 'none';\n        modal.style.transform = 'none';\n        modal.style.borderRadius = '0';\n        handles.forEach(function(handle) { handle.style.display = 'none'; });\n        return;\n    }\n\n    modal.style.right = 'auto';\n    modal.style.bottom = 'auto';\n    modal.style.borderRadius = '8px';\n    modal.style.width = opts.width || '';\n    modal.style.height = opts.height || '';\n    modal.style.minWidth = opts.minWidth || '';\n    modal.style.minHeight = opts.minHeight || '';\n    modal.style.maxWidth = opts.maxWidth || '';\n    if (opts.maxHeight) { setMaxViewportHeight(modal, opts.maxHeight); }\n    else { modal.style.maxHeight = ''; }\n    modal.style.top = opts.top || '50%';\n    modal.style.left = opts.left || '50%';\n    modal.style.transform = opts.transform || 'translate(-50%, -50%)';\n    handles.forEach(function(handle) { handle.style.display = ''; });\n}\n\n\nexport function 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.className = 'cds-surface';\n    modal.style.position = 'fixed';\n    modal.style.backgroundColor = opts.backgroundColor || '#1e1e1e';\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    applyModalLayout(modal, opts);\n\n    // Re-shape only when the breakpoint flips — a modal that outlives it would keep a\n    // 600px frame on a 390px screen. Reacting to every reflow would instead snap a\n    // dragged or resized modal back to its opening geometry on any window resize.\n    var wasCompact = isCompact();\n    var stopReflow = onReflow(function(state) {\n        if (state.compact === wasCompact) { return; }\n        wasCompact = state.compact;\n        applyModalLayout(modal, opts);\n    });\n\n    // Mark modal as selected when clicked\n    modal.addEventListener('pointerdown', 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        stopReflow();\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\n\nexport function 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 && !isCompact()) ? '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.className = 'cds-hit';\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\n\n// Pointer Events cover mouse, touch and pen in one path, and setPointerCapture\n// keeps the stream on the handle once the drag starts — so no document listeners,\n// and letting go outside the window can't strand the drag.\nexport function makeDraggable(modal, dragHandle) {\n    var activePointer: number | null = null;\n    var dragOffsetX = 0;\n    var dragOffsetY = 0;\n\n    dragHandle.setAttribute('data-drag', ''); // touch-action:none — the gesture is ours\n\n    var onPointerDown = function(e: PointerEvent) {\n        if (activePointer !== null) { return; }\n        if (e.pointerType === 'mouse' && e.button !== 0) { return; }\n        if (isCompact()) { return; } // full-screen sheet has nowhere to go\n\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\n        activePointer = e.pointerId;\n        dragHandle.setPointerCapture(e.pointerId);\n        e.preventDefault();\n    };\n\n    var onPointerMove = function(e: PointerEvent) {\n        if (e.pointerId !== activePointer) { return; }\n        modal.style.left = (e.clientX - dragOffsetX) + 'px';\n        modal.style.top = (e.clientY - dragOffsetY) + 'px';\n    };\n\n    var onPointerUp = function(e: PointerEvent) {\n        if (e.pointerId !== activePointer) { return; }\n        if (dragHandle.hasPointerCapture(e.pointerId)) { dragHandle.releasePointerCapture(e.pointerId); }\n        activePointer = null;\n    };\n\n    dragHandle.addEventListener('pointerdown', onPointerDown);\n    dragHandle.addEventListener('pointermove', onPointerMove);\n    dragHandle.addEventListener('pointerup', onPointerUp);\n    dragHandle.addEventListener('pointercancel', onPointerUp);\n\n    // Return cleanup function\n    return function cleanup() {\n        dragHandle.removeEventListener('pointerdown', onPointerDown);\n        dragHandle.removeEventListener('pointermove', onPointerMove);\n        dragHandle.removeEventListener('pointerup', onPointerUp);\n        dragHandle.removeEventListener('pointercancel', onPointerUp);\n    };\n}\n"],"names":[],"mappings":"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"}