@mintplayer/ng-bootstrap 21.23.0 → 21.23.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-bootstrap-dock.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-pane.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.template.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.html","../../../../libs/mintplayer-ng-bootstrap/dock/mintplayer-ng-bootstrap-dock.ts"],"sourcesContent":["import { AfterContentInit, Component, input, TemplateRef, viewChild, ChangeDetectionStrategy} from '@angular/core';\n\n@Component({\n selector: 'bs-dock-pane',\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockPaneComponent implements AfterContentInit {\n readonly name = input.required<string>();\n readonly title = input<string | undefined>(undefined);\n\n readonly template = viewChild.required(TemplateRef);\n\n ngAfterContentInit(): void {\n if (!this.name()) {\n throw new Error('bs-dock-pane requires a unique \"name\" input.');\n }\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// Source: mint-dock-manager.element.html + mint-dock-manager.element.scss\n// Regenerate with the codegen-wc Nx target.\n\nimport { html, unsafeCSS } from 'lit';\n\nexport const template = html`<div class=\"dock-root\">\n <div class=\"dock-docked\"></div>\n <div class=\"dock-floating-layer\"></div>\n <div class=\"dock-intersections-layer dock-intersection-layer\"></div>\n</div>\n<div class=\"dock-drop-indicator\"></div>\n<div class=\"dock-drop-joystick\" data-visible=\"false\">\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"top\"\n aria-label=\"Dock to top\"\n >\n ↑\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"left\"\n aria-label=\"Dock to left\"\n >\n ←\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"center\"\n aria-label=\"Dock to center\"\n >\n •\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"right\"\n aria-label=\"Dock to right\"\n >\n →\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"bottom\"\n aria-label=\"Dock to bottom\"\n >\n ↓\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n</div>`;\nexport const styles = unsafeCSS(`:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n contain: layout paint size style;\n box-sizing: border-box;\n font-family: inherit;\n color: inherit;\n --dock-split-gap: 0.25rem;\n}\n\n.dock-root,\n.dock-docked,\n.dock-split,\n.dock-stack,\n.dock-stack__pane {\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n}\n\n.dock-root {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.dock-docked {\n position: absolute;\n inset: 0;\n display: flex;\n z-index: 0;\n}\n\n.dock-floating-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n}\n\n.dock-intersections-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 120;\n}\n\n.dock-floating {\n position: absolute;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.5rem;\n background: var(--bs-body-bg);\n box-shadow: var(--bs-box-shadow-lg);\n overflow: hidden;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating[data-dragging=true] {\n pointer-events: none;\n}\n\n.dock-floating__chrome {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.35rem 0.75rem;\n cursor: move;\n background: linear-gradient(to bottom, rgba(var(--bs-primary-rgb), 0.15), rgba(var(--bs-primary-rgb), 0.05));\n border-bottom: 1px solid var(--bs-primary-border-subtle);\n user-select: none;\n -webkit-user-select: none;\n}\n\n.dock-floating__title {\n flex: 1 1 auto;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--bs-body-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.dock-floating > .dock-stack {\n flex: 1 1 auto;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating__resizer {\n position: absolute;\n pointer-events: auto;\n z-index: 2;\n background: rgba(var(--bs-primary-rgb), 0.1);\n transition: background 120ms ease;\n}\n\n.dock-floating__resizer:hover,\n.dock-floating__resizer[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.3);\n}\n\n.dock-floating__resizer--top,\n.dock-floating__resizer--bottom {\n left: 0.75rem;\n right: 0.75rem;\n height: 0.5rem;\n}\n\n.dock-floating__resizer--top {\n top: 0;\n cursor: n-resize;\n}\n\n.dock-floating__resizer--bottom {\n bottom: 0;\n cursor: s-resize;\n}\n\n.dock-floating__resizer--left,\n.dock-floating__resizer--right {\n top: 1.75rem;\n bottom: 0.75rem;\n width: 0.5rem;\n}\n\n.dock-floating__resizer--left {\n left: 0;\n cursor: w-resize;\n}\n\n.dock-floating__resizer--right {\n right: 0;\n cursor: e-resize;\n}\n\n.dock-floating__resizer--top-left,\n.dock-floating__resizer--top-right,\n.dock-floating__resizer--bottom-left,\n.dock-floating__resizer--bottom-right {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n.dock-floating__resizer--top-left {\n top: 0;\n left: 0;\n cursor: nw-resize;\n}\n\n.dock-floating__resizer--top-right {\n top: 0;\n right: 0;\n cursor: ne-resize;\n}\n\n.dock-floating__resizer--bottom-left {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n}\n\n.dock-floating__resizer--bottom-right {\n right: 0;\n bottom: 0;\n cursor: se-resize;\n}\n\n.dock-split {\n flex: 1 1 0;\n position: relative;\n}\n\n.dock-intersection-handle {\n position: absolute;\n width: 1rem;\n height: 1rem;\n margin-left: -0.5rem;\n margin-top: -0.5rem;\n border-radius: 0.375rem;\n background: var(--bs-primary-bg-subtle);\n border: 1px solid var(--bs-primary-border-subtle);\n box-shadow: var(--bs-box-shadow-sm);\n cursor: all-scroll;\n pointer-events: auto;\n opacity: 0.45;\n transition: background 120ms ease, border-color 120ms ease, opacity 120ms ease;\n}\n\n.dock-intersection-handle:hover,\n.dock-intersection-handle:focus-visible,\n.dock-intersection-handle[data-visible=true],\n.dock-intersection-handle[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.35);\n border-color: var(--bs-primary);\n opacity: 1;\n outline: none;\n}\n\n.dock-snap-marker {\n position: absolute;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -3px;\n border-radius: 50%;\n background: var(--bs-primary);\n box-shadow: 0 0 0 2px var(--bs-primary-bg-subtle);\n pointer-events: none;\n z-index: 130;\n}\n\n.dock-stack {\n flex: 1 1 0;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n background: var(--bs-body-bg);\n backdrop-filter: blur(4px);\n}\n\n.dock-tab {\n cursor: grab;\n display: block;\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n}\n\n.dock-tab:active {\n cursor: grabbing;\n}\n\n.dock-stack__pane {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n\n.dock-drop-indicator {\n position: absolute;\n pointer-events: none;\n border: 2px solid var(--bs-primary);\n background: rgba(var(--bs-primary-rgb), 0.2);\n border-radius: 0.25rem;\n opacity: 0;\n transition: opacity 120ms ease;\n z-index: 100;\n}\n\n.dock-drop-indicator[data-visible=true] {\n opacity: 1;\n}\n\n.dock-drop-joystick {\n position: absolute;\n display: grid;\n grid-template-columns: repeat(3, min-content);\n grid-template-rows: repeat(3, min-content);\n gap: 0.125rem;\n padding: 0.125rem;\n border-radius: 999px;\n background: var(--bs-tertiary-bg);\n box-shadow: var(--bs-box-shadow);\n pointer-events: none;\n transform: translate(-50%, -50%);\n z-index: 110;\n}\n\n.dock-drop-joystick__spacer {\n width: 1.75rem;\n height: 1.75rem;\n pointer-events: none;\n}\n\n.dock-drop-joystick__button {\n width: 1.75rem;\n height: 1.75rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n border: 1px solid var(--bs-primary-border-subtle);\n background: var(--bs-body-bg);\n color: var(--bs-primary);\n font-size: 0.75rem;\n line-height: 1;\n font-weight: 600;\n pointer-events: auto;\n cursor: pointer;\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\n}\n\n.dock-drop-joystick__button[data-active=true],\n.dock-drop-joystick__button:hover,\n.dock-drop-joystick__button:focus-visible {\n background: var(--bs-primary-bg-subtle);\n border-color: var(--bs-primary);\n color: var(--bs-primary);\n}\n\n.dock-drop-joystick__button:focus-visible {\n outline: 2px solid var(--bs-primary);\n outline-offset: 1px;\n}\n\n.dock-drop-joystick__button[data-zone=center] {\n border-radius: 0.5rem;\n}\n\n::slotted(*) {\n flex: 1 1 auto;\n display: block;\n min-width: 0;\n min-height: 0;\n}`);\n","\nimport { LitElement, type TemplateResult } from 'lit';\n// Side-effect import: registers <mp-tab-control> + <mp-tab-page> custom elements.\n// Each dock stack is rendered as <mp-tab-control>, so the dock depends on this\n// lib being loaded before any layout is rendered.\nimport '@mintplayer/ng-bootstrap/web-components/tab-control';\n// Side-effect import: registers <mp-splitter>. Each DockSplitNode is rendered\n// as a nested <mp-splitter>, so this lib must load before any layout renders.\nimport '@mintplayer/ng-bootstrap/web-components/splitter';\nimport {\n DockFloatingStackLayout,\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n DockSplitNode,\n DockStackNode,\n} from '../types/dock-layout';\nimport { template, styles } from './mint-dock-manager.element.template';\n\ntype DockPath =\n | { type: 'docked'; segments: number[] }\n | { type: 'floating'; index: number; segments: number[] };\n\ntype DockedLocation = { context: 'docked'; path: number[]; node: DockStackNode };\ntype FloatingLocation = {\n context: 'floating';\n index: number;\n path: number[];\n node: DockStackNode;\n};\n\ntype ResolvedLocation = DockedLocation | FloatingLocation;\n\ntype DropZone = 'center' | 'left' | 'right' | 'top' | 'bottom';\n\ntype FloatingResizeEdges = {\n horizontal: 'left' | 'right' | 'none';\n vertical: 'top' | 'bottom' | 'none';\n};\n\nexport class MintDockManagerElement extends LitElement {\n static override styles = [styles];\n\n private static documentRef: Document | null =\n typeof document !== 'undefined' ? document : null;\n\n static configureDocument(documentRef: Document | null | undefined): void {\n if (documentRef) {\n MintDockManagerElement.documentRef = documentRef;\n }\n }\n\n static override get observedAttributes(): string[] {\n return [...(super.observedAttributes ?? []), 'layout'];\n }\n\n private static instanceCounter = 0;\n\n private documentRef!: Document;\n private windowRef!: (Window & typeof globalThis) | null;\n private rootEl!: HTMLElement;\n private dockedEl!: HTMLElement;\n private floatingLayerEl!: HTMLElement;\n private dropIndicator!: HTMLElement;\n private dropJoystick!: HTMLElement;\n private dropJoystickButtons!: HTMLButtonElement[];\n private readonly instanceId: string;\n private dropJoystickTarget: HTMLElement | null = null;\n private rootLayout: DockLayoutNode | null = null;\n private floatingLayouts: DockFloatingStackLayout[] = [];\n private titles: Record<string, string> = {};\n private pendingTabDragMetrics:\n | {\n pointerOffsetX: number;\n pointerOffsetY: number;\n left: number;\n top: number;\n width: number;\n height: number;\n startClientX: number;\n startClientY: number;\n }\n | null = null;\n private dragState: {\n pane: string;\n sourcePath: DockPath;\n floatingIndex: number | null;\n pointerOffsetX: number;\n pointerOffsetY: number;\n dropHandled: boolean;\n // For tab reordering before converting to floating\n sourceStackEl?: HTMLElement | null;\n sourceHeaderBounds?: { left: number; top: number; right: number; bottom: number } | null;\n startClientX?: number;\n startClientY?: number;\n liveReorderIndex?: number;\n placeholderHeader?: HTMLElement | null;\n placeholderEl?: HTMLElement | null;\n } | null = null;\n private floatingDragState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n dropTarget?: { path: DockPath; zone: DropZone };\n }\n | null = null;\n private floatingResizeState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startWidth: number;\n startHeight: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n edges: FloatingResizeEdges;\n }\n | null = null;\n private intersectionRaf: number | null = null;\n private rootResizeObserver: ResizeObserver | null = null;\n private dockedMutationObserver: MutationObserver | null = null;\n private cornerResizeState:\n | {\n pointerId: number;\n handle: HTMLElement;\n // All horizontal divider bars (belong to vertical splits)\n hs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startY: number;\n }>;\n // All vertical divider bars (belong to horizontal splits)\n vs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startX: number;\n }>;\n }\n | null = null;\n private pointerTrackingActive = false;\n private dragPointerTrackingActive = false;\n private lastDragPointerPosition: { x: number; y: number } | null = null;\n // Localized snapping while dragging an intersection handle\n private cornerSnapXTargets: number[] = [];\n private cornerSnapYTargets: number[] = [];\n // Debug: render snap markers while dragging\n private showSnapMarkers = false;\n\n private renderSnapMarkersForCorner(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n if (!this.cornerResizeState) return;\n const rootRect = this.rootEl.getBoundingClientRect();\n // Compute representative center lines from the dividers being resized.\n // st.{hs,vs}[i].container is the <mp-splitter>; the divider lives in its\n // shadow at getSplitterDividers(splitter)[index].\n let centerX: number | null = null;\n let centerY: number | null = null;\n const st = this.cornerResizeState;\n if (st.vs.length > 0) {\n const v0 = st.vs[0];\n const vDiv = this.getSplitterDividers(v0.container)[v0.index];\n const vRect = vDiv?.getBoundingClientRect();\n if (vRect) centerX = vRect.left + vRect.width / 2 - rootRect.left;\n }\n if (st.hs.length > 0) {\n const h0 = st.hs[0];\n const hDiv = this.getSplitterDividers(h0.container)[h0.index];\n const hRect = hDiv?.getBoundingClientRect();\n if (hRect) centerY = hRect.top + hRect.height / 2 - rootRect.top;\n }\n if (centerY != null) {\n this.cornerSnapXTargets.forEach((sx) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${sx}px`;\n dot.style.top = `${centerY}px`;\n layer.appendChild(dot);\n });\n }\n if (centerX != null) {\n this.cornerSnapYTargets.forEach((sy) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${centerX}px`;\n dot.style.top = `${sy}px`;\n layer.appendChild(dot);\n });\n }\n }\n\n private clearSnapMarkers(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n }\n private pendingDragEndTimeout: number | NodeJS.Timeout | null = null;\n private previousSplitSizes: Map<string, number[]> = new Map();\n\n constructor() {\n super();\n this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;\n // Set windowRef eagerly so connectedCallback's window-level drag listeners\n // (added before firstUpdated runs) can actually attach. Without this,\n // win?.addEventListener was a silent no-op on first connect and HTML5\n // drag-to-detach gestures never reached the dock — the floating wrapper\n // was created but stayed at its conversion-time coordinates because the\n // 'drag' listener that updates its position was never attached.\n this.windowRef = typeof window !== 'undefined' ? window : null;\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onDragPointerMove = this.onDragPointerMove.bind(this);\n this.onDragPointerUp = this.onDragPointerUp.bind(this);\n this.onDragPointerCancel = this.onDragPointerCancel.bind(this);\n this.onSplitterResize = this.onSplitterResize.bind(this);\n }\n\n override render(): TemplateResult {\n return template;\n }\n\n protected override firstUpdated(): void {\n // Resolve document and window now that we are connected.\n const documentRef = this.resolveDocument();\n this.documentRef = documentRef;\n this.windowRef = this.resolveWindow(documentRef);\n\n // Query the rendered shadow DOM for the dock skeleton.\n const shadowRoot = this.shadowRoot!;\n const root = shadowRoot.querySelector<HTMLElement>('.dock-root');\n if (!root) {\n throw new Error('mint-dock-manager template is missing the root element.');\n }\n const docked = shadowRoot.querySelector<HTMLElement>('.dock-docked');\n if (!docked) {\n throw new Error('mint-dock-manager template is missing the docked surface element.');\n }\n const floatingLayer = shadowRoot.querySelector<HTMLElement>('.dock-floating-layer');\n if (!floatingLayer) {\n throw new Error('mint-dock-manager template is missing the floating layer element.');\n }\n const indicator = shadowRoot.querySelector<HTMLElement>('.dock-drop-indicator');\n if (!indicator) {\n throw new Error('mint-dock-manager template is missing the drop indicator element.');\n }\n const joystick = shadowRoot.querySelector<HTMLElement>('.dock-drop-joystick');\n if (!joystick) {\n throw new Error('mint-dock-manager template is missing the drop joystick element.');\n }\n const joystickButtons = Array.from(\n joystick.querySelectorAll<HTMLButtonElement>('.dock-drop-joystick__button[data-zone]'),\n );\n if (joystickButtons.length === 0) {\n throw new Error('mint-dock-manager template is missing drop joystick buttons.');\n }\n\n this.rootEl = root;\n this.dockedEl = docked;\n this.floatingLayerEl = floatingLayer;\n this.dropIndicator = indicator;\n this.dropJoystick = joystick;\n this.dropJoystickButtons = joystickButtons;\n\n // Tag the docked surface with a root path so it can act as\n // a drop target when the main layout is empty.\n this.dockedEl.dataset['path'] = this.formatPath({ type: 'docked', segments: [] });\n\n // Drop targeting (drop indicator + joystick zone selection) runs entirely\n // off pointer-based hit-testing in updatePaneDragDropTargetFromPoint and\n // findDropZoneByPoint — no HTML5 dragover/drop/dragleave listeners needed.\n\n // Render any layout that was set before the shadow DOM existed.\n this.renderLayout();\n\n // Reactive triggers for intersection-handle re-rendering. Each observer\n // wakes scheduleRenderIntersectionHandles() (rAF-coalesced), which means\n // multiple notifications in the same frame collapse to one render and\n // the rAF tick gives <mp-splitter> elements time to populate their\n // shadow roots before we query their dividers.\n this.rootResizeObserver = new ResizeObserver(() => this.scheduleRenderIntersectionHandles());\n this.rootResizeObserver.observe(this.rootEl);\n this.dockedMutationObserver = new MutationObserver(() => this.scheduleRenderIntersectionHandles());\n this.dockedMutationObserver.observe(this.dockedEl, { childList: true, subtree: true });\n // mp-splitter dispatches bubbling 'resizing' / 'resize-end' on user drag;\n // delegating on dockedEl catches every nested splitter without per-instance wiring.\n this.dockedEl.addEventListener('resizing', this.onSplitterResize);\n this.dockedEl.addEventListener('resize-end', this.onSplitterResize);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\n }\n }\n\n override disconnectedCallback(): void {\n const win = this.windowRef;\n this.stopDragPointerTracking();\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n this.rootResizeObserver?.disconnect();\n this.rootResizeObserver = null;\n this.dockedMutationObserver?.disconnect();\n this.dockedMutationObserver = null;\n this.dockedEl?.removeEventListener('resizing', this.onSplitterResize);\n this.dockedEl?.removeEventListener('resize-end', this.onSplitterResize);\n if (this.intersectionRaf !== null) {\n this.windowRef?.clearTimeout(this.intersectionRaf);\n this.intersectionRaf = null;\n }\n super.disconnectedCallback();\n }\n\n override attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n super.attributeChangedCallback(name, _oldValue, newValue);\n if (name === 'layout') {\n this.layout = newValue ? this.parseLayout(newValue) : null;\n } else if (name === 'debug-snap-markers') {\n this.showSnapMarkers = !(newValue === null || newValue === 'false' || newValue === '0');\n if (!this.showSnapMarkers) {\n this.clearSnapMarkers();\n }\n }\n }\n\n get layout(): DockLayoutSnapshot {\n return {\n root: this.cloneLayoutNode(this.rootLayout),\n floating: this.cloneFloatingArray(this.floatingLayouts),\n titles: { ...this.titles },\n };\n }\n\n set layout(value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null) {\n const snapshot = this.ensureSnapshot(value);\n // While a drag/resize is in flight, the dock manager is the source of\n // truth for layout state — its mid-drag mutations (e.g. floating bounds\n // updated every mousemove, or a stack split during a pane-drag-to-floating\n // conversion) race the host's two-way binding round-trip. The host re-\n // feeds the layout we *just* dispatched via `dock-layout-changed`, but by\n // the time the round-trip arrives the user has moved the cursor again, so\n // the structural-equality guard below would let it through and clobber the\n // in-progress state (e.g. snap a freshly-detached floating window back to\n // the converted-at coordinates instead of letting it follow the cursor).\n // Reject any external layout write during interaction; the host will sync\n // back to the dock's final state when interaction ends and the dock fires\n // a fresh dock-layout-changed event.\n if (this.isInteracting()) return;\n // Skip renderLayout when the incoming layout is structurally identical\n // to the current state. After a divider drag the dock dispatches\n // dock-layout-changed; an Angular host doing two-way binding will feed\n // that snapshot right back through `[layout]` (and through the\n // `[attr.layout]` round-trip). Without this guard, every drag-end\n // tears down and rebuilds the whole splitter tree, giving a one-frame\n // flash of `flex: 1 1 0` equal-share before the pin restores sizes.\n const currentJson = JSON.stringify({\n root: this.rootLayout,\n floating: this.floatingLayouts,\n titles: this.titles,\n });\n const newJson = JSON.stringify(snapshot);\n if (currentJson === newJson) return;\n\n this.rootLayout = this.cloneLayoutNode(snapshot.root);\n this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);\n this.titles = snapshot.titles ? { ...snapshot.titles } : {};\n this.renderLayout();\n }\n\n /**\n * True while the user is actively interacting with the dock — pane drag,\n * floating window drag, floating window resize, or intersection corner\n * resize. The `set layout` setter consults this to refuse external\n * round-trips that would overwrite in-progress drag state.\n */\n private isInteracting(): boolean {\n return !!(\n this.dragState ||\n this.floatingDragState ||\n this.floatingResizeState ||\n this.cornerResizeState\n );\n }\n\n get snapshot(): DockLayoutSnapshot {\n return this.layout;\n }\n\n toJSON(): DockLayoutSnapshot {\n return this.snapshot;\n }\n\n private resolveDocument(): Document {\n const staticDocument = MintDockManagerElement.documentRef;\n const ownerDocument = this.ownerDocument ?? null;\n const globalDocument =\n typeof document !== 'undefined' ? document : null;\n const resolvedDocument = staticDocument ?? ownerDocument ?? globalDocument;\n\n if (!resolvedDocument) {\n throw new Error('mint-dock-manager requires a Document to initialize.');\n }\n\n if (!MintDockManagerElement.documentRef) {\n MintDockManagerElement.documentRef = resolvedDocument;\n }\n\n return resolvedDocument;\n }\n\n private resolveWindow(\n documentRef: Document,\n ): (Window & typeof globalThis) | null {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n return (documentRef.defaultView as (Window & typeof globalThis) | null) ?? null;\n }\n\n private parseLayout(value: string): DockLayoutSnapshot | null {\n try {\n const parsed = JSON.parse(value) as\n | DockLayoutSnapshot\n | DockLayout\n | DockLayoutNode\n | null;\n return this.ensureSnapshot(parsed);\n } catch (err) {\n console.warn('mint-dock-manager: failed to parse layout attribute', err);\n return null;\n }\n }\n\n private ensureSnapshot(\n value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ((value as DockLayoutNode).kind) {\n return { root: value as DockLayoutNode, floating: [], titles: {} };\n }\n\n const layout = value as DockLayout | DockLayoutSnapshot;\n return {\n root: layout.root ?? null,\n floating: Array.isArray(layout.floating)\n ? layout.floating.map((floating) => this.normalizeFloatingLayout(floating))\n : [],\n titles: layout.titles ? { ...layout.titles } : {},\n };\n }\n\n private renderLayout(): void {\n // The layout setter may run before firstUpdated() has populated the\n // shadow-DOM fields (e.g. when an attribute is set on the markup).\n // Bail out; firstUpdated() will call renderLayout() once ready.\n if (!this.dockedEl) return;\n this.dockedEl.innerHTML = '';\n this.floatingLayerEl.innerHTML = '';\n this.hideDropIndicator();\n\n if (this.rootLayout) {\n const fragment = this.renderNode(this.rootLayout, []);\n this.dockedEl.appendChild(fragment);\n }\n\n this.renderFloatingPanes();\n // Note: intersection handles are repositioned reactively via observers\n // wired up in firstUpdated (rootResizeObserver, dockedMutationObserver,\n // and delegated 'resizing' / 'resize-end' events). The MutationObserver\n // on dockedEl fires when the renderNode subtree above is appended.\n }\n\n private renderNode(\n node: DockLayoutNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n if (node.kind === 'split') {\n return this.renderSplit(node, path, floatingIndex);\n }\n\n return this.renderStack(node, path, floatingIndex);\n }\n\n private renderFloatingPanes(): void {\n this.floatingLayerEl.innerHTML = '';\n this.floatingLayouts.forEach((floating, index) => {\n const wrapper = this.documentRef.createElement('div');\n wrapper.classList.add('dock-floating');\n wrapper.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n\n const { left, top, width, height } = floating.bounds;\n wrapper.style.left = `${left}px`;\n wrapper.style.top = `${top}px`;\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n\n const zIndex = this.getFloatingPaneZIndex(index);\n wrapper.style.zIndex = String(zIndex);\n\n const chrome = this.documentRef.createElement('div');\n chrome.classList.add('dock-floating__chrome');\n chrome.addEventListener('pointerdown', (event) =>\n this.beginFloatingDrag(event, index, wrapper, chrome),\n );\n\n const title = this.documentRef.createElement('div');\n title.classList.add('dock-floating__title');\n title.textContent = this.getFloatingWindowTitle(floating);\n chrome.appendChild(title);\n\n wrapper.appendChild(chrome);\n\n if (floating.root) {\n const content = this.renderNode(floating.root, [], index);\n content.classList.add('dock-floating__stack');\n wrapper.appendChild(content);\n } else {\n const placeholder = this.documentRef.createElement('div');\n placeholder.classList.add('dock-stack');\n placeholder.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n const empty = this.documentRef.createElement('div');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n placeholder.appendChild(empty);\n wrapper.appendChild(placeholder);\n }\n\n const resizerConfigs: { classes: string[]; edges: FloatingResizeEdges }[] = [\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-left'],\n edges: { horizontal: 'left', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top'],\n edges: { horizontal: 'none', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-right'],\n edges: { horizontal: 'right', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--right'],\n edges: { horizontal: 'right', vertical: 'none' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-right'],\n edges: { horizontal: 'right', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom'],\n edges: { horizontal: 'none', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-left'],\n edges: { horizontal: 'left', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--left'],\n edges: { horizontal: 'left', vertical: 'none' },\n },\n ];\n\n resizerConfigs.forEach(({ classes, edges }) => {\n const resizer = this.documentRef.createElement('div');\n resizer.classList.add(...classes);\n resizer.addEventListener('pointerdown', (event) =>\n this.beginFloatingResize(event, index, wrapper, resizer, edges),\n );\n wrapper.appendChild(resizer);\n });\n this.floatingLayerEl.appendChild(wrapper);\n });\n }\n\n private onSplitterResize(): void {\n // mp-splitter dispatches 'resizing' continuously during a divider drag\n // and 'resize-end' when the user releases. Both keep the handle glued\n // to the new intersection coordinate.\n this.scheduleRenderIntersectionHandles();\n }\n\n private scheduleRenderIntersectionHandles(): void {\n if (this.intersectionRaf !== null) return;\n const win = this.windowRef;\n if (!win) return;\n // Defer with setTimeout(5) instead of rAF so we run AFTER any\n // flex-redistribution settles. Sequence we have to wait through:\n // (1) DOM mutation (e.g. panel removed by drop)\n // (2) microtasks: <mp-splitter>'s slotchange + size-pinning rAF\n // (3) layout flush\n // A bare rAF can fire before (2) resolves, so getBoundingClientRect on\n // the dividers reads a transient flex-distributed position and the\n // glyph lands ~tens of pixels off. 5ms is past the microtask queue and\n // past splitter's pinning rAF in practice, so the divider rects we\n // read are the settled, post-pin values.\n this.intersectionRaf = win.setTimeout(() => {\n this.intersectionRaf = null;\n this.renderIntersectionHandles();\n }, 5) as unknown as number;\n }\n\n private renderIntersectionHandles(): void {\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n\n const rootRect = this.rootEl.getBoundingClientRect();\n\n // Active corner-resize: keep st.handle alive (it owns pointer capture and\n // the cornerResizeState references it). Update its position from current\n // divider rects, drop every other handle by reference.\n if (this.cornerResizeState) {\n const st = this.cornerResizeState;\n const h0 = st.hs[0];\n const v0 = st.vs[0];\n const hSplitter = this.findSplitterByPath(h0.path.segments);\n const vSplitter = this.findSplitterByPath(v0.path.segments);\n const hDiv = hSplitter ? this.getSplitterDividers(hSplitter)[h0.index] : null;\n const vDiv = vSplitter ? this.getSplitterDividers(vSplitter)[v0.index] : null;\n if (hDiv && vDiv) {\n const hr = hDiv.getBoundingClientRect();\n const vr = vDiv.getBoundingClientRect();\n const x = vr.left + vr.width / 2 - rootRect.left;\n const y = hr.top + hr.height / 2 - rootRect.top;\n st.handle.style.left = `${x}px`;\n st.handle.style.top = `${y}px`;\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if (el !== st.handle) el.remove();\n });\n }\n return;\n }\n\n // Idle path: full clear + rebuild. Cheaper to reason about than incremental\n // diffing, and handles' positions are always derived from current divider\n // rects so a layout change (drop, splitter restructure, flex redistribution)\n // can never leave a stale glyph behind.\n layer.replaceChildren();\n\n type DividerInfo = {\n rect: DOMRect;\n pathStr: string;\n index: number;\n };\n const hDividers: DividerInfo[] = [];\n const vDividers: DividerInfo[] = [];\n\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined;\n const pathStr = splitter.dataset['path'] ?? '';\n this.getSplitterDividers(splitter).forEach((el, index) => {\n const info: DividerInfo = { rect: el.getBoundingClientRect(), pathStr, index };\n // direction='horizontal' means children flow left-to-right, so the\n // divider bars between them are VERTICAL (and vice-versa).\n if (direction === 'horizontal') vDividers.push(info);\n else if (direction === 'vertical') hDividers.push(info);\n });\n });\n\n // Group intersections that round to the same on-screen pixel, so two\n // sibling splitters whose dividers happen to overlap share one handle.\n const tol = 24;\n const groups = new Map<string, { x: number; y: number; pairs: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> }>();\n hDividers.forEach((h) => {\n const hCenterY = h.rect.top + h.rect.height / 2;\n vDividers.forEach((v) => {\n const vCenterX = v.rect.left + v.rect.width / 2;\n const dx = vCenterX < h.rect.left ? h.rect.left - vCenterX : vCenterX > h.rect.right ? vCenterX - h.rect.right : 0;\n const dy = hCenterY < v.rect.top ? v.rect.top - hCenterY : hCenterY > v.rect.bottom ? hCenterY - v.rect.bottom : 0;\n if (dx > tol || dy > tol) return;\n const x = vCenterX - rootRect.left;\n const y = hCenterY - rootRect.top;\n const gk = `${Math.round(x)}:${Math.round(y)}`;\n const group = groups.get(gk) ?? { x, y, pairs: [] };\n group.pairs.push({ h: { pathStr: h.pathStr, index: h.index }, v: { pathStr: v.pathStr, index: v.index } });\n groups.set(gk, group);\n });\n });\n\n groups.forEach((group, gk) => {\n const handle = this.documentRef.createElement('div');\n handle.classList.add('dock-intersection-handle', 'glyph');\n handle.setAttribute('role', 'separator');\n handle.setAttribute('aria-label', 'Resize split intersection');\n const firstPair = group.pairs[0];\n const key = `${firstPair.h.pathStr}:${firstPair.h.index}|${firstPair.v.pathStr}:${firstPair.v.index}`;\n handle.dataset['key'] = key;\n handle.dataset['pairs'] = JSON.stringify(group.pairs);\n handle.style.left = `${group.x}px`;\n handle.style.top = `${group.y}px`;\n // beginCornerResize/onIntersectionDoubleClick read data-pairs to\n // reconstruct the (h, v) pair list, so the (h, v) args we pass here\n // are only used as a fallback when data-pairs is empty — safe to use\n // the first pair's structure as the seed.\n const seedH = { path: this.parsePath(firstPair.h.pathStr), index: firstPair.h.index, container: this.findSplitterByPath(this.parsePath(firstPair.h.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n const seedV = { path: this.parsePath(firstPair.v.pathStr), index: firstPair.v.index, container: this.findSplitterByPath(this.parsePath(firstPair.v.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n handle.addEventListener('pointerdown', (ev) => this.beginCornerResize(ev, seedH, seedV, handle));\n handle.addEventListener('dblclick', (ev) => this.onIntersectionDoubleClick(ev, handle));\n layer.appendChild(handle);\n });\n }\n\n private beginCornerResize(\n event: PointerEvent,\n h: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n v: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n handle: HTMLElement,\n ): void {\n event.preventDefault();\n\n // Build pairs from dataset if available (grouped intersections), otherwise from the provided pair\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> =\n pairsRaw ? JSON.parse(pairsRaw) : [];\n const hs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n const vs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n\n const ensureHV = (pathStr: string, index: number, axis: 'h'|'v') => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n // Initial pixel sizes come from each panel-wrapper inside the splitter's\n // shadow root. We capture them once on pointerdown and feed deltas to\n // setPanelSizes() during the drag.\n const panels = this.getSplitterPanels(splitter);\n if (panels.length === 0) return;\n const dim: 'height' | 'width' = axis === 'h' ? 'height' : 'width';\n const initial = panels.map((p) => p.getBoundingClientRect()[dim]);\n const entry = { path, index, container: splitter, initialSizes: initial, before: initial[index], after: initial[index + 1] };\n if (axis === 'h') hs.push(entry);\n else vs.push(entry);\n };\n\n if (parsed.length > 0) {\n parsed.forEach((p) => { ensureHV(p.h.pathStr, p.h.index, 'h'); ensureHV(p.v.pathStr, p.v.index, 'v'); });\n } else if (h.path && v.path) {\n ensureHV(this.formatPath(h.path), h.index, 'h');\n ensureHV(this.formatPath(v.path), v.index, 'v');\n }\n if (hs.length === 0 && vs.length === 0) return;\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n handle.classList.add('hovering');\n } catch {}\n\n this.cornerResizeState = {\n pointerId: event.pointerId,\n handle,\n hs: hs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startY: event.clientY })),\n vs: vs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startX: event.clientX })),\n };\n\n this.startPointerTracking();\n // Ensure handle has a stable key (use group if present)\n if (!handle.dataset['key']) {\n handle.dataset['key'] = handle.dataset['group'] ?? '';\n }\n this.renderSnapMarkersForCorner();\n\n // Compute localized snap targets for this intersection\n try {\n const rootRect = this.rootEl.getBoundingClientRect();\n // Use first pair to define the crossing lines. Resolve dividers via\n // each splitter's shadow root.\n let centerX: number | null = null;\n let centerY: number | null = null;\n if (vs.length > 0) {\n const vPair = vs[0];\n const vDiv = this.getSplitterDividers(vPair.container)[vPair.index];\n const vr = vDiv?.getBoundingClientRect();\n if (vr) centerX = vr.left + vr.width / 2;\n }\n if (hs.length > 0) {\n const hPair = hs[0];\n const hDiv = this.getSplitterDividers(hPair.container)[hPair.index];\n const hr = hDiv?.getBoundingClientRect();\n if (hr) centerY = hr.top + hr.height / 2;\n }\n\n const xTargets: number[] = [];\n const yTargets: number[] = [];\n // Iterate every splitter, then flat-map its shadow dividers — a\n // splitter's data-direction tells us whether its bars are vertical\n // (horizontal split) or horizontal (vertical split).\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n this.getSplitterDividers(splitter).forEach((el) => {\n const r = el.getBoundingClientRect();\n if (direction === 'horizontal' && centerY != null) {\n // vertical bar → contributes X if it crosses centerY\n if (centerY >= r.top && centerY <= r.bottom) {\n xTargets.push(r.left + r.width / 2 - rootRect.left);\n }\n } else if (direction === 'vertical' && centerX != null) {\n // horizontal bar → contributes Y if it crosses centerX\n if (centerX >= r.left && centerX <= r.right) {\n yTargets.push(r.top + r.height / 2 - rootRect.top);\n }\n }\n });\n });\n this.cornerSnapXTargets = xTargets;\n this.cornerSnapYTargets = yTargets;\n } catch {\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n }\n\n private handleCornerResizeMove(event: PointerEvent): void {\n const state = this.cornerResizeState;\n if (!state || state.pointerId !== event.pointerId) return;\n\n const snapValue = (val: number, total: number, active: boolean) => {\n if (!active || total <= 0) return val;\n const ratios = [1/3, 1/2, 2/3];\n const r = val / total;\n let best = ratios[0];\n let d = Math.abs(r - best);\n for (let i=1;i<ratios.length;i++){ const dd = Math.abs(r - ratios[i]); if (dd < d) { d = dd; best = ratios[i]; } }\n return best * total;\n };\n\n // Axis snapping to nearby intersections\n const tol = 10;\n const rootRect = this.rootEl.getBoundingClientRect();\n let clientX = event.clientX;\n let clientY = event.clientY;\n if (this.cornerSnapXTargets.length) {\n let best = clientX, bestDist = tol + 1;\n this.cornerSnapXTargets.forEach((sx) => {\n const px = rootRect.left + sx; const d = Math.abs(px - clientX); if (d < bestDist) { bestDist = d; best = px; }\n });\n if (bestDist <= tol) clientX = best;\n }\n if (this.cornerSnapYTargets.length) {\n let best = clientY, bestDist = tol + 1;\n this.cornerSnapYTargets.forEach((sy) => {\n const py = rootRect.top + sy; const d = Math.abs(py - clientY); if (d < bestDist) { bestDist = d; best = py; }\n });\n if (bestDist <= tol) clientY = best;\n }\n\n // Apply the new pair sizes to one splitter's panel-wrappers via\n // mp-splitter's setPanelSizes(pixels) API. We persist the normalized\n // ratios on the layout node so renderSplit's initial sizing stays in sync.\n const applyPairSize = (\n entry: {\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n },\n delta: number,\n ): void => {\n const node = this.resolveSplitNode(entry.path);\n if (!node) return;\n const minSize = 48;\n const pairTotal = entry.beforeSize + entry.afterSize;\n let newBefore = Math.min(Math.max(entry.beforeSize + delta, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...entry.initialSizes];\n sizesPx[entry.index] = newBefore;\n sizesPx[entry.index + 1] = newAfter;\n const total = sizesPx.reduce((a, s) => a + s, 0);\n node.sizes = total > 0 ? sizesPx.map((s) => s / total) : [];\n (entry.container as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(sizesPx);\n };\n\n // Update all horizontal bars (vertical splits) with Y delta, then all\n // vertical bars (horizontal splits) with X delta.\n state.hs.forEach((h) => applyPairSize(h, clientY - h.startY));\n state.vs.forEach((v) => applyPairSize(v, clientX - v.startX));\n\n this.dispatchLayoutChanged();\n // setPanelSizes() is programmatic and doesn't fire 'resizing' events, so\n // the delegated listener on dockedEl doesn't wake during a corner drag.\n // Schedule the handle repositioning ourselves; renderIntersectionHandles\n // has a fast-path for the active cornerResizeState that just updates\n // left/top from the new divider rects.\n this.scheduleRenderIntersectionHandles();\n }\n\n private endCornerResize(pointerId: number): void {\n const state = this.cornerResizeState;\n if (!state || pointerId !== state.pointerId) return;\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch {}\n state.handle.dataset['resizing'] = 'false';\n this.cornerResizeState = null;\n // Re-render handles to account for new positions\n this.scheduleRenderIntersectionHandles();\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n\n private onIntersectionDoubleClick(event: MouseEvent, handle: HTMLElement): void {\n event.preventDefault();\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }>\n = pairsRaw ? JSON.parse(pairsRaw) : [];\n if (!Array.isArray(parsed) || parsed.length === 0) {\n const k = handle.dataset['key'] ?? '';\n const parts = k.split('|');\n if (parts.length === 2) {\n const [hPart, vPart] = parts;\n const hi = hPart.lastIndexOf(':');\n const vi = vPart.lastIndexOf(':');\n if (hi > 0 && vi > 0) {\n const hPathStr = hPart.slice(0, hi);\n const vPathStr = vPart.slice(0, vi);\n const hIdx = Number.parseInt(hPart.slice(hi + 1), 10);\n const vIdx = Number.parseInt(vPart.slice(vi + 1), 10);\n parsed.push({ h: { pathStr: hPathStr, index: hIdx }, v: { pathStr: vPathStr, index: vIdx } });\n }\n }\n }\n if (parsed.length === 0) return;\n\n const splitKeys = new Set<string>();\n parsed.forEach((p) => { splitKeys.add(p.h.pathStr); splitKeys.add(p.v.pathStr); });\n let hasStored = false;\n splitKeys.forEach((k) => { if (this.previousSplitSizes.has(k)) hasStored = true; });\n\n // Persist `node.sizes` (normalized) and push pixel sizes into the\n // matching <mp-splitter> via setPanelSizes(). The splitter's panel\n // wrappers live in its shadow DOM, so direct flex mutation is no\n // longer an option.\n const pushSizesToSplitter = (path: DockPath, normalized: number[]): void => {\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? 'horizontal';\n const containerSize = direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const totalWeight = normalized.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const px = normalized.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n };\n\n const applySizes = (pathStr: string, dividerIndex: number, mutate: (sizes: number[], index: number) => number[]) => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const node = this.resolveSplitNode(path);\n if (!node) return;\n const sizes = this.normalizeSizesArray(node.sizes ?? [], node.children.length);\n const newSizes = mutate([...sizes], dividerIndex);\n node.sizes = newSizes;\n pushSizesToSplitter(path, newSizes);\n };\n\n if (hasStored) {\n // Restore stored sizes\n this.previousSplitSizes.forEach((sizes, pathStr) => {\n const path = this.parsePath(pathStr);\n const node = path ? this.resolveSplitNode(path) : null;\n if (!node || !path) return;\n const norm = this.normalizeSizesArray(sizes, node.children.length);\n node.sizes = norm;\n pushSizesToSplitter(path, norm);\n });\n this.previousSplitSizes.clear();\n } else {\n // Equalize the two panes adjacent to each divider and store previous sizes\n const touched = new Set<string>();\n parsed.forEach((p) => {\n [p.h.pathStr, p.v.pathStr].forEach((key) => {\n if (touched.has(key)) return;\n const path = this.parsePath(key);\n const node = path ? this.resolveSplitNode(path) : null;\n if (node && Array.isArray(node.sizes)) {\n this.previousSplitSizes.set(key, [...node.sizes]);\n }\n touched.add(key);\n });\n const equalize = (sizes: number[], idx: number): number[] => {\n const total = (sizes[idx] ?? 0) + (sizes[idx + 1] ?? 0);\n if (total <= 0) return sizes;\n sizes[idx] = total / 2;\n sizes[idx + 1] = total / 2;\n const sum = sizes.reduce((a, s) => a + s, 0);\n return sum > 0 ? sizes.map((s) => s / sum) : sizes;\n };\n applySizes(p.h.pathStr, p.h.index, equalize);\n applySizes(p.v.pathStr, p.v.index, equalize);\n });\n }\n\n this.dispatchLayoutChanged();\n this.scheduleRenderIntersectionHandles();\n }\n\n private beginFloatingDrag(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { left, top } = floating.bounds;\n\n try {\n handle.setPointerCapture(event.pointerId);\n } catch (err) {\n /* no-op: pointer capture may not be supported in all environments */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingDragState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startLeft: left,\n startTop: top,\n wrapper,\n handle,\n };\n\n this.startPointerTracking();\n }\n\n private beginFloatingResize(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n edges: FloatingResizeEdges,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n } catch (err) {\n /* pointer capture may not be supported */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingResizeState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startWidth: floating.bounds.width,\n startHeight: floating.bounds.height,\n startLeft: floating.bounds.left,\n startTop: floating.bounds.top,\n wrapper,\n handle,\n edges,\n };\n\n this.startPointerTracking();\n }\n\n private handleFloatingDragMove(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const newLeft = state.startLeft + deltaX;\n const newTop = state.startTop + deltaY;\n\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n\n this.updateFloatingDragDropTarget(event);\n }\n\n private endFloatingDrag(pointerId: number): void {\n const state = this.floatingDragState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear outside the try so a thrown releasePointerCapture (capture\n // already lost) doesn't strand the handle in its visual drag state.\n delete state.handle.dataset['resizing'];\n\n const dropHandled = state.dropTarget\n ? this.handleFloatingStackDrop(state.index, state.dropTarget.path, state.dropTarget.zone)\n : false;\n\n this.floatingDragState = null;\n this.hideDropIndicator();\n if (!dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateFloatingDragDropTarget(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state) {\n return;\n }\n\n const stack = this.findStackAtPoint(event.clientX, event.clientY);\n if (!stack) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n const path = this.parsePath(stack.dataset['path']);\n if (!path || (path.type === 'floating' && path.index === state.index)) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n // Reset sticky zone when moving to another stack while dragging the\n // floating window so the side doesn't carry over.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n const zone = this.computeDropZone(stack, event, this.extractDropZoneFromEvent(event));\n\n if (zone) {\n state.dropTarget = { path, zone };\n } else if (state.dropTarget) {\n delete state.dropTarget;\n }\n\n this.showDropIndicator(stack, zone);\n }\n\n private handleFloatingResizeMove(event: PointerEvent): void {\n const state = this.floatingResizeState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const minWidth = 192;\n const minHeight = 128;\n let newWidth = state.startWidth;\n let newHeight = state.startHeight;\n let newLeft = state.startLeft;\n let newTop = state.startTop;\n\n if (state.edges.horizontal === 'right') {\n newWidth = Math.max(minWidth, state.startWidth + deltaX);\n } else if (state.edges.horizontal === 'left') {\n newWidth = Math.max(minWidth, state.startWidth - deltaX);\n newLeft = state.startLeft + (state.startWidth - newWidth);\n }\n\n if (state.edges.vertical === 'bottom') {\n newHeight = Math.max(minHeight, state.startHeight + deltaY);\n } else if (state.edges.vertical === 'top') {\n newHeight = Math.max(minHeight, state.startHeight - deltaY);\n newTop = state.startTop + (state.startHeight - newHeight);\n }\n\n state.wrapper.style.width = `${newWidth}px`;\n state.wrapper.style.height = `${newHeight}px`;\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.width = newWidth;\n floating.bounds.height = newHeight;\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n }\n\n private endFloatingResize(pointerId: number): void {\n const state = this.floatingResizeState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear `data-resizing` outside the try — releasePointerCapture can\n // throw if the capture was already lost (e.g., the pointer left the\n // window), and we still need to drop the resizing attribute or the\n // CSS rule `.dock-floating__resizer[data-resizing='true']` keeps the\n // border dark-blue forever.\n delete state.handle.dataset['resizing'];\n\n this.floatingResizeState = null;\n this.dispatchLayoutChanged();\n }\n\n private getFloatingPaneZIndex(index: number): number {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return 10 + index;\n }\n const base =\n typeof floating.zIndex === 'number' && Number.isFinite(floating.zIndex)\n ? floating.zIndex\n : 10 + index;\n return base;\n }\n\n private promoteFloatingPane(index: number, wrapper: HTMLElement): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const maxExisting = this.floatingLayouts.reduce((max, layout, idx) => {\n if (!layout) {\n return max;\n }\n const z = idx === index ? Number.NEGATIVE_INFINITY : this.getFloatingPaneZIndex(idx);\n return Math.max(max, z);\n }, 0);\n\n const nextZ = Math.max(maxExisting + 2, 12);\n floating.zIndex = nextZ;\n wrapper.style.zIndex = String(nextZ);\n }\n\n private getFloatingWrapper(index: number): HTMLElement | null {\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n return this.floatingLayerEl.querySelector<HTMLElement>(selector);\n }\n\n private startPointerTracking(): void {\n if (this.pointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onPointerMove);\n win?.addEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = true;\n }\n\n private stopPointerTrackingIfIdle(): void {\n if (\n this.pointerTrackingActive &&\n !this.floatingDragState &&\n !this.floatingResizeState &&\n !this.cornerResizeState\n ) {\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n }\n }\n\n private getFloatingWindowTitle(floating: DockFloatingStackLayout): string {\n const fallback = 'Floating Pane';\n if (!floating || !floating.root) {\n return fallback;\n }\n\n const preferred = floating.activePane ?? this.findFirstPaneName(floating.root);\n if (!preferred) {\n return fallback;\n }\n\n return this.titles[preferred] ?? preferred ?? fallback;\n }\n\n private updateFloatingWindowTitle(index: number): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n const wrapper = this.floatingLayerEl.querySelector<HTMLElement>(selector);\n if (!wrapper) {\n return;\n }\n\n const titleEl = wrapper.querySelector<HTMLElement>('.dock-floating__title');\n if (!titleEl) {\n return;\n }\n\n titleEl.textContent = this.getFloatingWindowTitle(floating);\n }\n\n private renderSplit(\n node: DockSplitNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Each DockSplitNode renders as <mp-splitter>. The dock keeps its `.dock-split`\n // class on the host so existing `closest('.dock-split')` queries continue to\n // resolve, and stamps `data-direction` / `data-path` for the tree-driven\n // intersection-handle math.\n const splitter = this.documentRef.createElement('mp-splitter') as HTMLElement;\n splitter.classList.add('dock-split');\n splitter.dataset['direction'] = node.direction;\n splitter.dataset['path'] = path.join('/');\n // mp-splitter uses 'horizontal' (left-right) and 'vertical' (top-bottom).\n // The dock's DockSplitNode.direction matches that vocabulary 1:1.\n splitter.setAttribute('orientation', node.direction);\n\n const splitPath: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n\n node.children.forEach((child, index) => {\n // mp-splitter accepts direct children — it wraps each in a panel-wrapper\n // inside its shadow DOM and projects via a named slot per index.\n splitter.appendChild(this.renderNode(child, [...path, index], floatingIndex));\n });\n\n // Apply persisted sizes from the layout tree once mp-splitter has built\n // its panel wrappers. mp-splitter's setPanelSizes interprets values as\n // pixel widths/heights; the dock's saved sizes are flex weights, so\n // convert using the splitter's measured cross-axis container size.\n const sizes = Array.isArray(node.sizes) ? node.sizes : [];\n if (sizes.length > 0) {\n requestAnimationFrame(() => {\n const totalWeight = sizes.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const containerSize =\n node.direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const px = sizes.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n });\n }\n\n // mp-splitter fires resize-end with pixel sizes after a divider drag.\n // Convert back to flex weights (sum to a stable total — keep current sum\n // so future renders interpret consistently) and persist to the layout tree.\n splitter.addEventListener('resize-end', (event) => {\n // resize-end bubbles, so a nested mp-splitter's drag end would also\n // reach this listener. Only react to events from THIS splitter, not\n // from a descendant — otherwise we'd apply the inner's sizes to the\n // outer's splitNode and mangle the outer's weights.\n if (event.target !== splitter) return;\n const detail = (event as CustomEvent<{ sizes: number[] }>).detail;\n if (!Array.isArray(detail?.sizes) || detail.sizes.length === 0) return;\n const splitNode = this.resolveSplitNode(splitPath);\n if (!splitNode) return;\n const previousTotal = (splitNode.sizes ?? []).reduce(\n (s, w) => s + Math.max(w, 0),\n 0,\n );\n const total = detail.sizes.reduce((s, v) => s + Math.max(v, 0), 0);\n const targetTotal = previousTotal > 0 ? previousTotal : detail.sizes.length;\n if (total > 0) {\n splitNode.sizes = detail.sizes.map(\n (px) => (Math.max(px, 0) / total) * targetTotal,\n );\n this.dispatchLayoutChanged();\n }\n });\n\n return splitter;\n }\n\n private renderStack(\n node: DockStackNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Dock stacks are rendered as <mp-tab-control>. The dock keeps `.dock-stack`\n // as a class on the host so existing `closest('.dock-stack')` queries\n // continue to resolve. The tab strip + body slot projection are owned by\n // mp-tab-control; the dock just provides the slotted header/content\n // elements and listens for tab-activate to drive layout-tree updates.\n const stack = this.documentRef.createElement('mp-tab-control') as HTMLElement;\n stack.classList.add('dock-stack');\n // Dock controls activation; tell mp-tab-control not to auto-pick.\n stack.setAttribute('select-first-tab', 'false');\n // `border=\"top\"` gives us the strip-cutout line under the tabs (so the\n // active tab visually punches through into the body) without adding the\n // full Bootstrap frame, which would double up with the dock's own outer\n // chrome border on `.dock-stack` (and on `.dock-floating` for floating\n // panels).\n stack.setAttribute('border', 'top');\n\n const location: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n stack.dataset['path'] = this.formatPath(location);\n\n const panes = Array.from(new Set(node.panes));\n if (panes.length === 0) {\n const emptyHeader = this.documentRef.createElement('span');\n emptyHeader.setAttribute('slot', '__empty__-header');\n emptyHeader.textContent = '(empty)';\n const empty = this.documentRef.createElement('div');\n empty.setAttribute('slot', '__empty__-content');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n stack.append(emptyHeader, empty);\n stack.setAttribute('active-tab', '__empty__');\n return stack;\n }\n\n const activePane = panes.includes(node.activePane ?? '')\n ? node.activePane!\n : panes[0];\n\n const baseSlug = path.length ? path.join('-') : 'root';\n const pathSlug =\n typeof floatingIndex === 'number' ? `f${floatingIndex}-${baseSlug}` : baseSlug;\n\n panes.forEach((paneName) => {\n const paneSlugRaw = paneName.replace(/[^a-zA-Z0-9_-]/g, '-');\n const paneSlug = paneSlugRaw.length > 0 ? paneSlugRaw : 'pane';\n const tabId = `${this.instanceId}-tab-${pathSlug}-${paneSlug}`;\n const panelId = `${this.instanceId}-panel-${pathSlug}-${paneSlug}`;\n\n // Header span — projected via mp-tab-control's `${tabId}-header` slot\n // into the strip's button content. Carries the dock's drag handlers.\n const headerSpan = this.documentRef.createElement('span');\n headerSpan.setAttribute('slot', `${tabId}-header`);\n headerSpan.classList.add('dock-tab');\n headerSpan.dataset['pane'] = paneName;\n headerSpan.dataset['tabId'] = tabId;\n headerSpan.textContent = this.titles[paneName] ?? paneName;\n\n // Pointer-only drag (no HTML5 dnd). pointerdown captures metrics + arms\n // a threshold gesture; once the pointer moves >threshold pixels we\n // promote it to a real pane drag via beginPaneDrag. Using pointer\n // events sidesteps the entire class of HTML5 dnd quirks (cancellation\n // when source DOM is removed mid-drag, suppressed mousemove, bogus 0/0\n // coordinates in Firefox, browser-specific drag-image behavior).\n headerSpan.addEventListener('pointerdown', (event) => {\n this.captureTabDragMetrics(event, stack);\n this.armPaneDragGesture(event, this.clonePath(location), paneName, stack);\n event.stopPropagation();\n });\n\n // Content wrapper — projected via mp-tab-control's `${tabId}-content`\n // slot only when this tab is active. Holds the dock manager's per-pane\n // <slot> for the consumer's content.\n const paneHost = this.documentRef.createElement('div');\n paneHost.setAttribute('slot', `${tabId}-content`);\n paneHost.classList.add('dock-stack__pane');\n paneHost.dataset['pane'] = paneName;\n paneHost.dataset['tabId'] = tabId;\n paneHost.id = panelId;\n\n const slotEl = this.documentRef.createElement('slot');\n slotEl.name = paneName;\n paneHost.appendChild(slotEl);\n\n stack.append(headerSpan, paneHost);\n\n if (paneName === activePane) {\n stack.setAttribute('active-tab', tabId);\n }\n });\n\n stack.dataset['activePane'] = activePane;\n\n // Drive activatePane from mp-tab-control's tab-activate event. We map the\n // tabId back to the original paneName via the header span's data-pane.\n stack.addEventListener('tab-activate', (event) => {\n const detail = (event as CustomEvent<{ tabId: string }>).detail;\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > [data-tab-id=\"${detail.tabId}\"]`,\n );\n const paneName = headerSpan?.dataset['pane'];\n if (paneName) {\n this.activatePane(stack, paneName, this.clonePath(location));\n this.dispatchEvent(\n new CustomEvent('dock-pane-activated', {\n detail: { pane: paneName },\n bubbles: true,\n composed: true,\n }),\n );\n }\n });\n\n return stack;\n }\n\n /**\n * Returns the strip (`.tsc`) element inside an `<mp-tab-control>`'s shadow\n * DOM. Used by drag/drop logic that needs the strip's geometry instead of\n * the host element's bounds.\n */\n private getStackStripEl(stack: HTMLElement): HTMLElement | null {\n if (stack.tagName !== 'MP-TAB-CONTROL') return null;\n return stack.shadowRoot?.querySelector<HTMLElement>('.tsc') ?? null;\n }\n\n /**\n * Returns the rendered tab buttons inside an `<mp-tab-control>`'s shadow\n * strip — the light-DOM `.dock-tab` spans the dock owns are projected into\n * these buttons via `<slot>`. Use these for geometry / position queries\n * (insert-index computation, drop-indicator placement). Use the light-DOM\n * `.dock-tab` spans for data queries (paneName, drag listeners).\n */\n private getStackTabButtons(stack: HTMLElement): HTMLButtonElement[] {\n if (stack.tagName !== 'MP-TAB-CONTROL') return [];\n return Array.from(\n stack.shadowRoot?.querySelectorAll<HTMLButtonElement>('button.nav-link') ?? [],\n );\n }\n\n /**\n * Returns the dividers inside an `<mp-splitter>`'s shadow DOM, in DOM order.\n * mp-splitter renders one `.divider` between each pair of adjacent panels,\n * so for an N-child split, length N-1.\n */\n private getSplitterDividers(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.divider') ?? [],\n );\n }\n\n /**\n * Returns the panel wrappers inside an `<mp-splitter>`'s shadow DOM, in\n * DOM order. These are the elements mp-splitter sizes (via setPanelSizes)\n * during a divider drag — the dock reads their geometry for intersection\n * handle math and snap markers.\n */\n private getSplitterPanels(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.panel-wrapper') ?? [],\n );\n }\n\n /**\n * Locate the rendered `<mp-splitter>` element for a given DockPath\n * `segments` value (the split-tree path). Searches the dock's shadow.\n */\n private findSplitterByPath(segments: number[]): HTMLElement | null {\n return (\n this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split[data-path=\"${segments.join('/')}\"]`,\n ) ?? null\n );\n }\n\n private onPointerMove(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.handleCornerResizeMove(event);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.handleFloatingResizeMove(event);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.handleFloatingDragMove(event);\n }\n }\n\n private onPointerUp(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.endCornerResize(event.pointerId);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.endFloatingDrag(event.pointerId);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.endFloatingResize(event.pointerId);\n }\n\n this.stopPointerTrackingIfIdle();\n }\n\n private captureTabDragMetrics(event: PointerEvent, stackEl: HTMLElement | null): void {\n if (!stackEl) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl.getBoundingClientRect();\n\n const pointerOffsetX = event.clientX - stackRect.left;\n const pointerOffsetY = event.clientY - stackRect.top;\n const left = stackRect.left - hostRect.left;\n const top = stackRect.top - hostRect.top;\n const width = Number.isFinite(stackRect.width) ? stackRect.width : 0;\n const height = Number.isFinite(stackRect.height) ? stackRect.height : 0;\n\n this.pendingTabDragMetrics = {\n pointerOffsetX,\n pointerOffsetY,\n left,\n top,\n width,\n height,\n startClientX: event.clientX,\n startClientY: event.clientY,\n };\n }\n\n private clearPendingTabDragMetrics(): void {\n this.pendingTabDragMetrics = null;\n }\n\n /**\n * Pointerdown handler arms a \"may become a drag\" gesture. Once the pointer\n * moves past `threshold` pixels we promote it to an actual pane drag via\n * {@link beginPaneDrag}; if the user releases first we just clear the\n * pending tab metrics. All listeners self-clean on resolve so the gesture\n * stays scoped to a single pointerdown.\n */\n private armPaneDragGesture(\n startEvent: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n if (startEvent.pointerType === 'mouse' && startEvent.button !== 0) return;\n const win = this.windowRef;\n if (!win) return;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n const pointerId = startEvent.pointerId;\n const threshold = 5;\n let resolved = false;\n\n const cleanup = (): void => {\n resolved = true;\n win.removeEventListener('pointermove', onMove, true);\n win.removeEventListener('pointerup', onRelease, true);\n win.removeEventListener('pointercancel', onRelease, true);\n };\n\n const onMove = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) < threshold) return;\n cleanup();\n this.beginPaneDrag(event, path, pane, stackEl);\n };\n\n const onRelease = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n win.addEventListener('pointermove', onMove, true);\n win.addEventListener('pointerup', onRelease, true);\n win.addEventListener('pointercancel', onRelease, true);\n }\n\n private beginPaneDrag(\n event: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n const {\n path: sourcePath,\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n } = this.preparePaneDragSource(path, pane, stackEl, event);\n\n // Capture header bounds for detecting when to convert to floating.\n // The strip lives inside the mp-tab-control's shadow as `.tsc`.\n const headerEl = stackEl ? this.getStackStripEl(stackEl) : null;\n const headerRect = headerEl ? headerEl.getBoundingClientRect() : null;\n const headerBounds = headerRect\n ? { left: headerRect.left, top: headerRect.top, right: headerRect.right, bottom: headerRect.bottom }\n : null;\n const metrics = this.pendingTabDragMetrics;\n\n this.dragState = {\n pane,\n sourcePath: this.clonePath(sourcePath),\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n dropHandled: false,\n sourceStackEl: stackEl,\n sourceHeaderBounds: headerBounds,\n startClientX:\n metrics && Number.isFinite(metrics.startClientX)\n ? metrics.startClientX\n : event.clientX,\n startClientY:\n metrics && Number.isFinite(metrics.startClientY)\n ? metrics.startClientY\n : event.clientY,\n };\n this.lastDragPointerPosition = {\n x: this.dragState.startClientX as number,\n y: this.dragState.startClientY as number,\n };\n // pointerOffsetX/Y from preparePaneDragSource is the offset within the\n // source stack rect captured at pointerdown by captureTabDragMetrics.\n // Don't overwrite with event.offsetX/Y here — the threshold-trigger\n // pointermove fired on window, so its offset is in window-local coords\n // (≈ clientX/Y) which would crash the conversion math to ~(0,0).\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n this.startDragPointerTracking();\n // Mark the source floating wrapper (if any) so its CSS rule kicks in and\n // pointer-events:none lets findStackAtPoint see through to the docked\n // stack underneath, enabling drop zones over the dock during the drag.\n this.markDraggedFloatingWrapper();\n\n // Preferred UX: if the dragged tab is the only one in its stack,\n // immediately convert to a floating window unless it is already the\n // only pane in a floating window (this case is handled by reuse logic).\n if (this.dragState && this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const loc = this.resolveStackLocation(this.dragState.sourcePath);\n if (loc && Array.isArray(loc.node.panes) && loc.node.panes.length === 1) {\n let shouldConvert = false;\n if (loc.context === 'docked') {\n shouldConvert = true;\n } else if (loc.context === 'floating') {\n const floating = this.floatingLayouts[loc.index];\n const totalPanes = floating && floating.root ? this.countPanesInTree(floating.root) : 0;\n shouldConvert = totalPanes > 1;\n }\n if (shouldConvert) {\n this.convertPendingTabDragToFloating(event.clientX, event.clientY);\n }\n }\n }\n }\n\n private preparePaneDragSource(\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n event: PointerEvent,\n ): { path: DockPath; floatingIndex: number | null; pointerOffsetX: number; pointerOffsetY: number } {\n const location = this.resolveStackLocation(path);\n if (!location || !location.node.panes.includes(pane)) {\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n const metrics = this.pendingTabDragMetrics;\n\n const domHasSibling =\n !!stackEl &&\n Array.from(stackEl.querySelectorAll<HTMLElement>('.dock-tab')).some(\n (button) => button.dataset['pane'] && button.dataset['pane'] !== pane,\n );\n\n const hasSiblingInStack = location.node.panes.some((existing) => existing !== pane);\n const floating = location.context === 'floating' ? this.floatingLayouts[location.index] : null;\n const floatingPaneCount =\n floating && floating.root ? this.countPanesInTree(floating.root) : hasSiblingInStack ? 2 : 1;\n const shouldReuseExistingWindow =\n location.context === 'floating' &&\n !!floating &&\n !hasSiblingInStack &&\n !domHasSibling &&\n floatingPaneCount <= 1;\n\n if (shouldReuseExistingWindow) {\n if (floating) {\n floating.activePane = pane;\n this.updateFloatingWindowTitle(location.index);\n const wrapper = this.getFloatingWrapper(location.index);\n if (wrapper) {\n this.promoteFloatingPane(location.index, wrapper);\n }\n const hostRect = this.getBoundingClientRect();\n const pointerOffsetX =\n metrics &&\n Number.isFinite(metrics.pointerOffsetX) &&\n Number.isFinite(metrics.left) &&\n Number.isFinite(floating.bounds.left)\n ? metrics.pointerOffsetX + (metrics.left - floating.bounds.left)\n : Number.isFinite(event.clientX) && Number.isFinite(floating.bounds.left)\n ? event.clientX - hostRect.left - floating.bounds.left\n : floating.bounds.width / 2;\n const pointerOffsetY =\n metrics &&\n Number.isFinite(metrics.pointerOffsetY) &&\n Number.isFinite(metrics.top) &&\n Number.isFinite(floating.bounds.top)\n ? metrics.pointerOffsetY + (metrics.top - floating.bounds.top)\n : Number.isFinite(event.clientY) && Number.isFinite(floating.bounds.top)\n ? event.clientY - hostRect.top - floating.bounds.top\n : floating.bounds.height / 2;\n return {\n path,\n floatingIndex: location.index,\n pointerOffsetX,\n pointerOffsetY,\n };\n }\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n // Do not convert to floating yet; allow in-header reordering first.\n // We return placeholder values and will convert once the pointer leaves the tab header.\n const pointerOffsetXVal =\n metrics && Number.isFinite(metrics.pointerOffsetX)\n ? metrics.pointerOffsetX\n : 0;\n const pointerOffsetYVal =\n metrics && Number.isFinite(metrics.pointerOffsetY)\n ? metrics.pointerOffsetY\n : 0;\n\n return {\n path,\n floatingIndex: -1,\n pointerOffsetX: pointerOffsetXVal,\n pointerOffsetY: pointerOffsetYVal,\n };\n }\n\n private endPaneDrag(): void {\n this.clearPendingDragEndTimeout();\n // Restore the dragged tab's `data-hidden` and remove the placeholder span\n // BEFORE we null out dragState — clearHeaderDragPlaceholder reads\n // `dragState.placeholderEl`, `dragState.placeholderHeader`, and\n // `dragState.pane` to know what to restore. If dragState is nulled first,\n // this becomes a silent no-op and the dragged pane stays hidden in its\n // source stack while the placeholder span lingers in the strip — which\n // is exactly the \"Panel disappears, only a small tab-thumb remains\"\n // regression the multi-pane drag-out path can otherwise trigger when\n // no renderLayout() runs between conversion and end (e.g. user releases\n // outside any drop zone, or HTML5 dragend fires without a drop).\n this.clearHeaderDragPlaceholder();\n this.clearDraggedFloatingWrapperMarkers();\n const state = this.dragState;\n this.dragState = null;\n this.hideDropIndicator();\n this.stopDragPointerTracking();\n this.lastDragPointerPosition = null;\n if (state && state.floatingIndex !== null && !state.dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateDraggedFloatingPositionFromPoint(\n clientX: number,\n clientY: number,\n ): void {\n if (!this.dragState) {\n return;\n }\n\n if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) {\n return;\n }\n\n // If still dragging a tab inside its header, only convert to floating once we leave the header.\n if (this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const b = this.dragState.sourceHeaderBounds;\n const sx = this.dragState.startClientX ?? clientX;\n const sy = this.dragState.startClientY ?? clientY;\n const dist = Math.hypot(clientX - sx, clientY - sy);\n const threshold = 8; // pixels to move before converting (tuned up)\n // Default to inside while bounds are unknown to avoid premature floating\n let insideHeader = true;\n const insideByBounds = b ? this.isPointWithinBounds(b, clientX, clientY) : true;\n const insideByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n insideHeader = insideByBounds || insideByHitTest;\n if (!insideHeader && dist > threshold) {\n // Convert to floating now using current pointer position\n this.convertPendingTabDragToFloating(clientX, clientY);\n }\n }\n\n this.updatePaneDragDropTargetFromPoint(clientX, clientY);\n\n const { floatingIndex, pointerOffsetX, pointerOffsetY } = this.dragState;\n if (floatingIndex === null || floatingIndex < 0) {\n return;\n }\n\n const floating = this.floatingLayouts[floatingIndex];\n if (!floating) {\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const newLeft = clientX - hostRect.left - pointerOffsetX;\n const newTop = clientY - hostRect.top - pointerOffsetY;\n\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n\n const wrapper = this.getFloatingWrapper(floatingIndex);\n if (wrapper) {\n wrapper.style.left = `${newLeft}px`;\n wrapper.style.top = `${newTop}px`;\n }\n }\n\n private updatePaneDragDropTargetFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n\n const stack = this.findStackAtPoint(clientX, clientY);\n const path = stack ? this.parsePath(stack.dataset['path']) : null;\n if (!stack || !path) {\n // While actively dragging, avoid hiding the indicator if it is visible.\n // Transient misses from hit-testing are common near the joystick.\n if (this.dropJoystick.dataset['visible'] !== 'true') {\n this.hideDropIndicator();\n }\n // Also ensure any in-header placeholder is cleared when not over a stack\n this.clearHeaderDragPlaceholder();\n return;\n }\n\n // If we moved to a different target stack, reset any sticky zone so\n // the new drop area doesn't inherit the previous side selection.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n // Previous behavior hid the indicator and returned early here; instead,\n // allow the live-reorder branch below to handle in-header drags.\n\n // While dragging within the same header, show a placeholder and suppress joystick/indicator\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n path &&\n this.pathsEqual(path, this.dragState.sourcePath)\n ) {\n const inHeaderByBounds = !!this.dragState.sourceHeaderBounds && this.isPointWithinBounds(this.dragState.sourceHeaderBounds, clientX, clientY);\n const inHeaderByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n if (inHeaderByBounds || inHeaderByHitTest) {\n // Ensure placeholder exists and move it as the pointer moves.\n // Placeholder management mutates the slotted children of the\n // mp-tab-control stack; the WC re-renders the strip on slotchange.\n this.ensureHeaderDragPlaceholder(stack, this.dragState.pane);\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n if (this.dragState.liveReorderIndex !== idx) {\n this.updateHeaderDragPlaceholderPosition(stack, idx);\n // Keep model reordering until drop; only move the placeholder now\n this.dragState.liveReorderIndex = idx;\n }\n this.hideDropIndicator();\n return;\n }\n }\n\n // Leaving the header: ensure any placeholder is removed immediately\n this.clearHeaderDragPlaceholder();\n\n const zoneHint = this.findDropZoneByPoint(clientX, clientY);\n const zone = this.computeDropZone(stack, { clientX, clientY }, zoneHint);\n this.showDropIndicator(stack, zone);\n }\n\n // Returns true when the pointer is currently over the source stack's header (tab strip).\n // The strip lives inside the mp-tab-control's shadow as `.tsc`, so we test\n // bounds directly rather than using elementsFromPoint(/contains) which won't\n // pierce the shadow boundary cleanly.\n private isPointerOverSourceHeader(clientX: number, clientY: number): boolean {\n const state = this.dragState;\n if (!state) {\n return false;\n }\n const stackEl = state.sourceStackEl ?? null;\n const strip = stackEl ? this.getStackStripEl(stackEl) : null;\n if (!strip) {\n // Be conservative: if we cannot resolve the strip, treat as inside\n return true;\n }\n const r = strip.getBoundingClientRect();\n return clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom;\n }\n\n private isPointWithinBounds(\n bounds: { left: number; right: number; top: number; bottom: number },\n x: number,\n y: number,\n ): boolean {\n return x >= bounds.left && x <= bounds.right && y >= bounds.top && y <= bounds.bottom;\n }\n\n // Ensure a placeholder tab exists during in-header drag and hide the real dragged tab visually.\n // Operates on the mp-tab-control stack: the dragged content div gets `data-hidden`\n // (mp-tab-control then skips its tab in the strip), and a placeholder header+content\n // pair is appended as light-DOM children of the stack. mp-tab-control's mutation\n // observer picks up the change and renders the placeholder as a tab.\n private ensureHeaderDragPlaceholder(stack: HTMLElement, pane: string): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n if (this.dragState?.placeholderHeader === stack && this.dragState.placeholderEl) {\n return;\n }\n const draggedHeader = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n if (!draggedHeader || !draggedContent) return;\n\n // Measure the dragged tab's text-only width BEFORE hiding it. The\n // `.dock-tab` rule applies padding (matching the strip button's padding so\n // the span fills the button as a drag handle), so `offsetWidth` is\n // text + padding — we subtract the span's own padding to get just the\n // text width. That's the natural slot content width we want the\n // placeholder to reserve; the placeholder span will re-apply the same\n // padding on top, mirroring the original tab's geometry exactly.\n const draggedCS = this.windowRef\n ? this.windowRef.getComputedStyle(draggedHeader)\n : globalThis.getComputedStyle(draggedHeader);\n const draggedHorizontalPadding =\n parseFloat(draggedCS.paddingLeft) + parseFloat(draggedCS.paddingRight);\n const slotContentWidth = Math.max(\n 0,\n draggedHeader.offsetWidth - draggedHorizontalPadding,\n );\n\n // Hide the dragged tab from mp-tab-control's strip (frees up the slot).\n draggedContent.setAttribute('data-hidden', '');\n\n // Build placeholder header + content. The placeholder uses a unique tabId\n // (`__dock-placeholder__`) so its slot names don't collide with real panes.\n // We mirror the dragged tab's text into the placeholder (dimmed via opacity)\n // so the strip reads as \"this tab is being dragged\" rather than \"empty slot\".\n const placeholderTabId = '__dock-placeholder__';\n const phHeader = this.documentRef.createElement('span');\n phHeader.setAttribute('slot', `${placeholderTabId}-header`);\n phHeader.classList.add('dock-tab');\n phHeader.dataset['placeholder'] = 'true';\n phHeader.dataset['tabId'] = placeholderTabId;\n phHeader.setAttribute('aria-hidden', 'true');\n phHeader.textContent = draggedHeader.textContent;\n // `display: inline-block` is required for `min-width` to take effect on the\n // span. Without it, an inline element ignores min-width and the placeholder\n // collapses to its content width (or 0 if textContent is also empty),\n // leaving a \"mini-thumb\" in the strip.\n phHeader.style.display = 'inline-block';\n phHeader.style.minWidth = `${slotContentWidth}px`;\n phHeader.style.opacity = '0.5';\n\n const phContent = this.documentRef.createElement('div');\n phContent.setAttribute('slot', `${placeholderTabId}-content`);\n phContent.classList.add('dock-stack__pane');\n phContent.dataset['placeholder'] = 'true';\n\n // Insert before the dragged header span so the placeholder appears in\n // the dragged tab's original strip position. The mutation observer in\n // mp-tab-control will refresh the tab list automatically.\n stack.insertBefore(phHeader, draggedHeader);\n stack.insertBefore(phContent, draggedContent);\n\n if (this.dragState) {\n this.dragState.placeholderHeader = stack;\n this.dragState.placeholderEl = phHeader;\n }\n }\n\n // Move the placeholder to the computed target index within the strip.\n // We reorder light-DOM children (header span + matching content div); the\n // mp-tab-control then re-renders the strip in the new order on slotchange.\n private updateHeaderDragPlaceholderPosition(stack: HTMLElement, targetIndex: number): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n const phHeader = this.dragState?.placeholderEl ?? null;\n if (!phHeader) return;\n\n const draggedPane = this.dragState?.pane ?? null;\n // Find all real header spans (excluding the placeholder + the hidden dragged one).\n const realHeaders = Array.from(\n stack.querySelectorAll<HTMLElement>(':scope > .dock-tab'),\n ).filter(\n (h) =>\n h !== phHeader &&\n (!draggedPane || h.dataset['pane'] !== draggedPane),\n );\n const clampedTarget = Math.max(0, Math.min(targetIndex, realHeaders.length));\n const ref = realHeaders[clampedTarget] ?? null;\n stack.insertBefore(phHeader, ref);\n\n // Keep the placeholder content adjacent to its header so child-order\n // remains predictable for slotchange-driven re-renders.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n if (phContent && phHeader.nextElementSibling !== phContent) {\n stack.insertBefore(phContent, phHeader.nextElementSibling);\n }\n }\n\n // Remove placeholder and restore the dragged tab's visibility.\n private clearHeaderDragPlaceholder(): void {\n const ph = this.dragState?.placeholderEl ?? null;\n const stack = this.dragState?.placeholderHeader ?? null;\n if (stack) {\n // Restore the dragged content div's visibility so its strip tab returns.\n if (this.dragState?.pane) {\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(this.dragState.pane)}\"]`,\n );\n draggedContent?.removeAttribute('data-hidden');\n }\n // Remove the placeholder content div sibling.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n phContent?.remove();\n }\n if (ph && ph.parentElement) {\n ph.parentElement.removeChild(ph);\n }\n if (this.dragState) {\n this.dragState.placeholderEl = null;\n this.dragState.placeholderHeader = null;\n }\n }\n\n private startDragPointerTracking(): void {\n if (this.dragPointerTrackingActive) {\n return;\n }\n this.lastDragPointerPosition = null;\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onDragPointerMove, true);\n win?.addEventListener('pointerup', this.onDragPointerUp, true);\n win?.addEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = true;\n }\n\n private stopDragPointerTracking(): void {\n if (!this.dragPointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onDragPointerMove, true);\n win?.removeEventListener('pointerup', this.onDragPointerUp, true);\n win?.removeEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.clearPendingDragEndTimeout();\n }\n\n private onDragPointerMove(event: PointerEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.lastDragPointerPosition = { x: event.clientX, y: event.clientY };\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n }\n\n private onDragPointerUp(event: PointerEvent): void {\n // Commit the drop from pointer release; the pointer-up coordinates are\n // authoritative for which stack/zone the user dropped into.\n if (this.dragState) {\n const x = Number.isFinite(event.clientX) ? event.clientX : this.lastDragPointerPosition?.x;\n const y = Number.isFinite(event.clientY) ? event.clientY : this.lastDragPointerPosition?.y;\n if (x !== undefined && y !== undefined) {\n this.finalizeDropFromPoint(x, y);\n }\n }\n this.handleDragPointerUpCommon();\n }\n\n private onDragPointerCancel(): void {\n // OS-level cancel (e.g. pointer capture lost): end the drag without\n // committing a drop.\n this.handleDragPointerUpCommon();\n }\n\n // Convert a currently in-header tab drag into a floating window\n private convertPendingTabDragToFloating(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const state = this.dragState;\n if (state.floatingIndex !== null && state.floatingIndex >= 0) {\n return; // already floating\n }\n // Clean up any placeholder before converting\n this.clearHeaderDragPlaceholder();\n const location = this.resolveStackLocation(state.sourcePath);\n if (!location) {\n return;\n }\n\n const pane = state.pane;\n const stackEl = state.sourceStackEl ?? null;\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl?.getBoundingClientRect() ?? null;\n const metrics = this.pendingTabDragMetrics;\n\n const fallbackWidth = 320;\n const fallbackHeight = 240;\n const width =\n metrics && Number.isFinite(metrics.width) && metrics.width > 0\n ? metrics.width\n : stackRect && Number.isFinite(stackRect.width)\n ? stackRect.width\n : fallbackWidth;\n const height =\n metrics && Number.isFinite(metrics.height) && metrics.height > 0\n ? metrics.height\n : stackRect && Number.isFinite(stackRect.height)\n ? stackRect.height\n : fallbackHeight;\n\n // Place the floating wrapper exactly where the docked stack was, so the\n // pane appears in-place at the moment of detach instead of jumping under\n // the cursor. metrics.left/top are host-relative (captured at pointerdown\n // in captureTabDragMetrics). Compensate for the floating wrapper's 1px\n // border so the visible content edge lines up with the original stack's\n // visible content edge (the docked .dock-stack also has a 1px border, so\n // the inner content rectangles match after this offset).\n const FLOATING_BORDER = 1;\n const initialLeft =\n metrics && Number.isFinite(metrics.left)\n ? metrics.left - FLOATING_BORDER\n : Number.isFinite(clientX)\n ? clientX - hostRect.left - width / 2\n : 0;\n const initialTop =\n metrics && Number.isFinite(metrics.top)\n ? metrics.top - FLOATING_BORDER\n : Number.isFinite(clientY)\n ? clientY - hostRect.top - height / 2\n : 0;\n\n // Derive pointerOffset from the cursor's actual position relative to the\n // freshly-placed wrapper (not from pointerdown metrics) so the very next\n // pointermove translates into a wrapper move of exactly the cursor delta\n // — no jump, no drift.\n const pointerOffsetX = Number.isFinite(clientX)\n ? clientX - hostRect.left - initialLeft\n : width / 2;\n const pointerOffsetY = Number.isFinite(clientY)\n ? clientY - hostRect.top - initialTop\n : height / 2;\n\n // Remove pane from its current stack and create a new floating entry\n this.removePaneFromLocation(location, pane);\n const floatingStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n const floatingLayout: DockFloatingStackLayout = {\n bounds: {\n left: initialLeft,\n top: initialTop,\n width,\n height,\n },\n root: floatingStack,\n activePane: pane,\n };\n\n this.floatingLayouts.push(floatingLayout);\n const newIndex = this.floatingLayouts.length - 1;\n this.renderLayout();\n const wrapper = this.getFloatingWrapper(newIndex);\n if (wrapper) {\n this.promoteFloatingPane(newIndex, wrapper);\n }\n // Update drag state so subsequent moves reposition the floating window\n state.sourcePath = { type: 'floating', index: newIndex, segments: [] };\n state.floatingIndex = newIndex;\n state.pointerOffsetX = pointerOffsetX;\n state.pointerOffsetY = pointerOffsetY;\n // Now that the wrapper exists, mark it so pointer-events:none kicks in\n // and findStackAtPoint can see through to docked stacks underneath.\n this.markDraggedFloatingWrapper();\n this.dispatchLayoutChanged();\n }\n\n // Toggle data-dragging on the floating wrapper currently associated with\n // the active pane drag (dragState.floatingIndex), if any. Used to make the\n // wrapper transparent to elementsFromPoint so drop zones can be shown on\n // stacks underneath. clearDraggedFloatingWrapper() is the inverse.\n private markDraggedFloatingWrapper(): void {\n const fi = this.dragState?.floatingIndex;\n if (fi === null || fi === undefined || fi < 0) return;\n const wrapper = this.getFloatingWrapper(fi);\n if (wrapper) wrapper.dataset['dragging'] = 'true';\n }\n\n private clearDraggedFloatingWrapperMarkers(): void {\n const layer = this.floatingLayerEl;\n if (!layer) return;\n layer.querySelectorAll<HTMLElement>('.dock-floating[data-dragging=\"true\"]').forEach((el) => {\n delete el.dataset['dragging'];\n });\n }\n\n // Compute the intended tab insert index within a stack's strip based on pointer X.\n // Uses the rendered tab buttons inside mp-tab-control's shadow strip for geometry;\n // the dragged tab is hidden during drag (its content has data-hidden), and the\n // placeholder button (if present) gives us the dragged-position reference.\n private computeHeaderInsertIndex(stack: HTMLElement, clientX: number): number {\n if (stack.tagName !== 'MP-TAB-CONTROL') return 0;\n const allTabButtons = this.getStackTabButtons(stack);\n if (allTabButtons.length === 0) {\n return 0;\n }\n\n const placeholderHeader = stack.querySelector<HTMLElement>(\n ':scope > .dock-tab[data-placeholder=\"true\"]',\n );\n const placeholderTabId = placeholderHeader?.dataset['tabId'];\n const placeholderButton = placeholderTabId\n ? allTabButtons.find((b) => b.id === `${placeholderTabId}-header-button`) ?? null\n : null;\n\n const targets = allTabButtons.filter((b) => b !== placeholderButton);\n if (targets.length === 0) {\n return 0;\n }\n\n const rightBias = 12;\n const leftBias = 0;\n\n const baseRect = placeholderButton ? placeholderButton.getBoundingClientRect() : null;\n const rectValid = !!baseRect && Number.isFinite(baseRect.width) && baseRect.width > 0;\n const draggedCenter = rectValid && baseRect ? baseRect.left + baseRect.width / 2 : null;\n\n for (let i = 0; i < targets.length; i += 1) {\n const rect = targets[i].getBoundingClientRect();\n const baseMid = rect.left + rect.width / 2;\n const isRightOfDragged = draggedCenter !== null ? baseMid >= draggedCenter : false;\n const mid = isRightOfDragged ? baseMid + rightBias : baseMid - leftBias;\n if (clientX < mid) {\n return i;\n }\n }\n return targets.length;\n }\n\n private reorderPaneInLocationAtIndex(location: ResolvedLocation, pane: string, targetIndex: number): void {\n const panes = location.node.panes;\n const currentIndex = panes.indexOf(pane);\n if (currentIndex === -1) {\n return;\n }\n const clampedTarget = Math.max(0, Math.min(targetIndex, panes.length - 1));\n if (clampedTarget === currentIndex) {\n return;\n }\n panes.splice(currentIndex, 1);\n panes.splice(clampedTarget, 0, pane);\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n // Commit a drop using current pointer coordinates and joystick state\n private finalizeDropFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const stack = this.findStackAtPoint(clientX, clientY);\n const stackPath = stack ? this.parsePath(stack.dataset['path']) : null;\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickStoredPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n const path = (joystickVisible ? (joystickStoredPath ?? joystickTargetPath) : null) ?? stackPath;\n\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const zone: DropZone | null = this.isDropZone(joystickZone)\n ? joystickZone\n : (stack ? this.computeDropZone(stack, { clientX, clientY }, null) : null);\n\n // Same-header reorder case when no side zone is chosen\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n stack &&\n path &&\n stackPath &&\n this.pathsEqual(stackPath, this.dragState.sourcePath) &&\n (!zone || zone === 'center')\n ) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.renderLayout();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n return;\n }\n }\n\n if (path && this.isDropZone(zone)) {\n this.handleDrop(path, zone!);\n this.dragState.dropHandled = true;\n }\n }\n\n private clearPendingDragEndTimeout(): void {\n if (this.pendingDragEndTimeout !== null) {\n const win = this.windowRef;\n if (win && typeof this.pendingDragEndTimeout === 'number') {\n win.clearTimeout(this.pendingDragEndTimeout);\n } else {\n globalThis.clearTimeout(this.pendingDragEndTimeout);\n }\n this.pendingDragEndTimeout = null;\n }\n }\n\n private scheduleDeferredDragEnd(): void {\n if (this.pendingDragEndTimeout !== null) {\n return;\n }\n\n const completeDrag = () => {\n this.pendingDragEndTimeout = null;\n this.hideDropIndicator();\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n };\n\n const win = this.windowRef;\n this.pendingDragEndTimeout = win\n ? win.setTimeout(completeDrag, 0)\n : setTimeout(completeDrag, 0);\n }\n\n private handleDrop(targetPath: DockPath | null, zone: DropZone): void {\n if (!this.dragState || !targetPath) {\n return;\n }\n\n const { pane, sourcePath } = this.dragState;\n \n const source = this.resolveStackLocation(sourcePath);\n const target = this.resolveStackLocation(targetPath);\n\n // Special case: allow dropping onto an empty main dock area (no root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n if (!source) {\n return;\n }\n const stackEmptied = this.removePaneFromLocation(source, pane, true);\n const newRoot: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n this.rootLayout = newRoot;\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n if (!source || !target) {\n return;\n }\n\n if (zone === 'center' && this.pathsEqual(sourcePath, targetPath)) {\n if (!source.node.panes.includes(pane)) {\n return;\n }\n this.reorderPaneInLocation(source, pane);\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n const stackEmptied = this.removePaneFromLocation(source, pane, true);\n\n if (zone === 'center') {\n this.addPaneToLocation(target, pane);\n this.setActivePaneForLocation(target, pane);\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n const newStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n if (target.context === 'docked') {\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, newStack, zone);\n } else {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.renderLayout();\n this.dispatchLayoutChanged();\n return;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, newStack, zone);\n floating.activePane = pane;\n }\n\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n \n }\n\n private handleFloatingStackDrop(sourceIndex: number, targetPath: DockPath, zone: DropZone): boolean {\n const source = this.floatingLayouts[sourceIndex];\n if (!source || !source.root) {\n return false;\n }\n\n const target = this.resolveStackLocation(targetPath);\n // Allow dropping an entire floating stack onto an empty main dock area\n // (no existing root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n this.rootLayout = this.cloneLayoutNode(source.root);\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n if (!target) {\n return false;\n }\n\n if (target.context === 'floating' && target.index === sourceIndex) {\n return false;\n }\n\n if (zone === 'center') {\n const panes = this.collectPaneNames(source.root);\n if (panes.length === 0) {\n return false;\n }\n\n panes.forEach((pane) => {\n this.addPaneToLocation(target, pane);\n });\n\n const activePane =\n source.activePane && panes.includes(source.activePane)\n ? source.activePane\n : this.findFirstPaneName(source.root) ?? panes[0];\n\n if (activePane) {\n this.setActivePaneForLocation(target, activePane);\n }\n\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n if (target.context === 'floating') {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n return false;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, source.root, zone);\n floating.activePane = source.activePane ?? this.findFirstPaneName(source.root) ?? undefined;\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, source.root, zone);\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n private insertWeight(sizes: number[] | undefined, index: number, totalChildren: number): number[] {\n const existingCount = totalChildren - 1;\n const normalized = this.normalizeSizesArray(sizes, existingCount);\n const newWeight = 1 / totalChildren;\n const remaining = 1 - newWeight;\n const result: number[] = [];\n for (let i = 0; i < totalChildren; i += 1) {\n if (i === index) {\n result.push(newWeight);\n } else {\n const sourceIndex = i < index ? i : i - 1;\n result.push(normalized[sourceIndex] * remaining);\n }\n }\n return result;\n }\n\n private removePaneFromStack(stack: DockStackNode, pane: string, skipCleanup = false): boolean {\n stack.panes = stack.panes.filter((p) => p !== pane);\n if (!stack.panes.includes(stack.activePane ?? '')) {\n if (stack.panes.length > 0) {\n stack.activePane = stack.panes[0];\n } else {\n delete stack.activePane;\n }\n }\n\n if (stack.panes.length > 0) {\n return false;\n }\n\n if (skipCleanup) {\n return true;\n }\n\n this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, stack);\n return true;\n }\n\n private findParentSplit(\n node: DockLayoutNode | null,\n child: DockLayoutNode,\n ): { parent: DockSplitNode; index: number } | null {\n if (!node || node === child) {\n return null;\n }\n\n if (node.kind !== 'split') {\n return null;\n }\n\n const index = node.children.indexOf(child);\n if (index !== -1) {\n return { parent: node, index };\n }\n\n for (let i = 0; i < node.children.length; i += 1) {\n const result = this.findParentSplit(node.children[i], child);\n if (result) {\n return result;\n }\n }\n\n return null;\n }\n\n private computeDropZone(\n stack: HTMLElement,\n point: { clientX: number; clientY: number } | null,\n zoneHint?: DropZone | null,\n ): DropZone | null {\n // Do not force a zone: even when the main area is empty we only\n // activate a zone when the pointer is actually over a joystick button.\n const hintedZone = this.isDropZone(zoneHint) ? zoneHint : null;\n if (hintedZone) {\n this.updateDropJoystickActiveZone(hintedZone);\n return hintedZone;\n }\n\n const pointZone =\n point &&\n Number.isFinite(point.clientX) &&\n Number.isFinite(point.clientY)\n ? this.findDropZoneByPoint(point.clientX, point.clientY)\n : null;\n\n if (pointZone) {\n this.updateDropJoystickActiveZone(pointZone);\n return pointZone;\n }\n\n if (this.dropJoystickTarget === stack) {\n // Be sticky while hovering the joystick: if we recently had a zone\n // selected, prefer keeping it instead of briefly clearing to null\n // when the browser reports transient coordinates/targets during drag.\n const sticky = this.dropJoystick.dataset['zone'];\n if (this.isDropZone(sticky)) {\n this.updateDropJoystickActiveZone(sticky);\n return sticky;\n }\n this.updateDropJoystickActiveZone(null);\n }\n\n return null;\n }\n\n private extractDropZoneFromEvent(event: Event): DropZone | null {\n if (!event) {\n return null;\n }\n\n if (typeof event.composedPath === 'function') {\n const path = event.composedPath();\n const zone = this.findDropZoneInTargets(path);\n if (zone) {\n return zone;\n }\n }\n\n if ('clientX' in event && 'clientY' in event) {\n const pointEvent = event as MouseEvent;\n const zoneFromPoint = this.findDropZoneByPoint(pointEvent.clientX, pointEvent.clientY);\n if (zoneFromPoint) {\n return zoneFromPoint;\n }\n }\n\n return null;\n }\n\n private handleDragPointerUpCommon(): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.scheduleDeferredDragEnd();\n }\n\n private findDropZoneInTargets(targets: Iterable<EventTarget>): DropZone | null {\n for (const target of targets) {\n if (\n target instanceof HTMLElement &&\n target.classList.contains('dock-drop-joystick__button')\n ) {\n const zone = target.dataset?.['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n return null;\n }\n\n private findDropZoneByPoint(clientX: number, clientY: number): DropZone | null {\n if (\n !this.dropJoystickButtons ||\n this.dropJoystick.dataset['visible'] !== 'true' ||\n !this.dropJoystickTarget\n ) {\n return null;\n }\n\n for (const button of this.dropJoystickButtons) {\n // Skip hidden/inactive buttons (used in center-only mode)\n if ((button.dataset['hidden'] === 'true') || button.style.visibility === 'hidden' || button.style.display === 'none') {\n continue;\n }\n const rect = button.getBoundingClientRect();\n if (\n clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom\n ) {\n const zone = button.dataset['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n\n return null;\n }\n\n private updateDropJoystickActiveZone(zone: DropZone | null): void {\n // If no zone is computed but the joystick is visible, keep the last\n // known active zone to avoid visual jitter while dragging across\n // small gaps where hit‑testing momentarily fails.\n const visible = this.dropJoystick.dataset['visible'] === 'true';\n const sticky = visible ? this.dropJoystick.dataset['zone'] : undefined;\n const effectiveZone: DropZone | null = zone ?? (this.isDropZone(sticky) ? sticky : null);\n\n this.dropJoystickButtons.forEach((button) => {\n const isActive = effectiveZone !== null && button.dataset['zone'] === effectiveZone;\n if (isActive) {\n button.dataset['active'] = 'true';\n } else {\n delete button.dataset['active'];\n }\n });\n if (effectiveZone) {\n this.dropJoystick.dataset['zone'] = effectiveZone;\n } else {\n delete this.dropJoystick.dataset['zone'];\n }\n }\n\n private isDropZone(value: string | null | undefined): value is DropZone {\n return value === 'left' || value === 'right' || value === 'top' || value === 'bottom' || value === 'center';\n }\n\n private showDropIndicator(stack: HTMLElement, zone: DropZone | null): void {\n const targetPath = this.parsePath(stack.dataset['path']);\n const sourcePath = this.dragState?.sourcePath ?? null;\n if (targetPath && sourcePath && this.isOrIsAncestorOf(targetPath, sourcePath)) {\n // Don't show any drop indicators on the pane being dragged.\n return;\n }\n\n const rect = stack.getBoundingClientRect();\n const hostRect = this.getBoundingClientRect();\n const indicator = this.dropIndicator;\n const joystick = this.dropJoystick;\n\n joystick.hidden = false;\n\n const path = this.parsePath(stack.dataset['path']);\n let overlayZ = 100;\n if (path && path.type === 'floating') {\n overlayZ = this.getFloatingPaneZIndex(path.index) + 100;\n }\n indicator.style.zIndex = String(overlayZ);\n joystick.style.zIndex = String(overlayZ + 1);\n\n let left = rect.left - hostRect.left;\n let top = rect.top - hostRect.top;\n let width = rect.width;\n let height = rect.height;\n\n const portion = 0.5;\n\n if (zone) {\n switch (zone) {\n case 'left':\n width = rect.width * portion;\n break;\n case 'right':\n width = rect.width * portion;\n left += rect.width * (1 - portion);\n break;\n case 'top':\n height = rect.height * portion;\n break;\n case 'bottom':\n height = rect.height * portion;\n top += rect.height * (1 - portion);\n break;\n default:\n break;\n }\n\n indicator.style.left = `${left}px`;\n indicator.style.top = `${top}px`;\n indicator.style.width = `${width}px`;\n indicator.style.height = `${height}px`;\n indicator.dataset['visible'] = 'true';\n } else {\n indicator.dataset['visible'] = 'false';\n }\n\n joystick.style.left = `${rect.left - hostRect.left + rect.width / 2}px`;\n joystick.style.top = `${rect.top - hostRect.top + rect.height / 2}px`;\n joystick.dataset['visible'] = 'true';\n this.dropJoystick.style.display = 'grid';\n joystick.dataset['path'] = stack.dataset['path'] ?? '';\n const changedTarget = this.dropJoystickTarget && this.dropJoystickTarget !== stack;\n this.dropJoystickTarget = stack;\n if (changedTarget) {\n // New target stack: forget any previously sticky zone.\n delete this.dropJoystick.dataset['zone'];\n }\n\n // If main dock area is empty, show only the center button and collapse the grid\n const isEmptyMainArea = !this.rootLayout && (stack === this.dockedEl || (targetPath && targetPath.type === 'docked' && targetPath.segments.length === 0));\n const spacers = Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer'));\n if (isEmptyMainArea) {\n // Keep spacers visible so the joystick keeps its circular footprint.\n spacers.forEach((s) => {\n s.style.display = '';\n });\n this.dropJoystickButtons.forEach((btn) => {\n const isCenter = btn.dataset['zone'] === 'center';\n if (isCenter) {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n } else {\n // Hide visually but keep layout space; also prevent interaction.\n btn.style.visibility = 'hidden';\n btn.style.pointerEvents = 'none';\n btn.dataset['hidden'] = 'true';\n btn.style.display = '';\n }\n });\n // Keep default 3x3 grid so the circular background size stays the same.\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n // Do not set an active zone automatically; users must hover the button.\n } else {\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n });\n spacers.forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n this.updateDropJoystickActiveZone(zone);\n }\n\n private hideDropIndicator(): void {\n this.dropIndicator.dataset['visible'] = 'false';\n this.dropJoystick.dataset['visible'] = 'false';\n this.dropJoystick.style.display = 'none';\n delete this.dropJoystick.dataset['path'];\n this.dropJoystickTarget = null;\n this.updateDropJoystickActiveZone(null);\n // Restore joystick structure to default.\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.display = '';\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n });\n Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer')).forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n\n private findStackAtPoint(clientX: number, clientY: number): HTMLElement | null {\n const shadow = this.shadowRoot;\n if (!shadow) {\n return null;\n }\n\n const elements = shadow.elementsFromPoint(clientX, clientY);\n const stack = this.findStackInTargets(elements);\n if (stack) {\n return stack;\n }\n // If there are no docked stacks (all panes are floating), allow the\n // docked surface itself to serve as a drop target for the main zone.\n if (!this.rootLayout) {\n const dockRect = this.dockedEl.getBoundingClientRect();\n if (\n clientX >= dockRect.left &&\n clientX <= dockRect.right &&\n clientY >= dockRect.top &&\n clientY <= dockRect.bottom\n ) {\n return this.dockedEl;\n }\n }\n\n return null;\n }\n\n private findStackInTargets(targets: Iterable<EventTarget>): HTMLElement | null {\n for (const element of targets) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element.classList.contains('dock-stack')) {\n return element;\n }\n if (\n this.dropJoystickTarget &&\n (element.classList.contains('dock-drop-joystick') ||\n element.classList.contains('dock-drop-joystick__button') ||\n element.classList.contains('dock-drop-joystick__spacer'))\n ) {\n return this.dropJoystickTarget;\n }\n }\n return null;\n }\n\n private activatePane(stack: HTMLElement, paneName: string, path: DockPath): void {\n stack.dataset['activePane'] = paneName;\n\n // Reflect to mp-tab-control's `active-tab` attribute. The WC handles\n // strip button styling (active class, aria-selected) + body-slot\n // projection automatically via the named-slot pattern.\n if (stack.tagName === 'MP-TAB-CONTROL') {\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(paneName)}\"]`,\n );\n const tabId = headerSpan?.dataset['tabId'];\n if (tabId) {\n stack.setAttribute('active-tab', tabId);\n }\n }\n\n const location = this.resolveStackLocation(path);\n if (!location) {\n return;\n }\n\n location.node.activePane = paneName;\n if (path.type === 'floating') {\n const floating = this.floatingLayouts[path.index];\n if (floating) {\n floating.activePane = paneName;\n }\n this.updateFloatingWindowTitle(path.index);\n }\n this.dispatchLayoutChanged();\n }\n\n private getNodeAtPath(root: DockLayoutNode | null, path: number[]): DockLayoutNode | null {\n if (!root) {\n return null;\n }\n\n let current: DockLayoutNode | null = root;\n if (path.length === 0) {\n return current;\n }\n\n for (const segment of path) {\n if (!current || current.kind !== 'split') {\n return null;\n }\n current = current.children[segment] ?? null;\n }\n\n return current;\n }\n\n private resolveSplitNode(path: DockPath): DockSplitNode | null {\n if (path.type === 'docked') {\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n const floating = this.floatingLayouts[path.index];\n if (!floating || !floating.root) {\n return null;\n }\n\n const node = this.getNodeAtPath(floating.root, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n private replaceNodeInTree(\n root: DockLayoutNode | null,\n target: DockLayoutNode,\n replacement: DockLayoutNode,\n ): DockLayoutNode | null {\n if (!root) {\n return replacement;\n }\n\n if (root === target) {\n return replacement;\n }\n\n const parentInfo = this.findParentSplit(root, target);\n if (!parentInfo) {\n return root;\n }\n\n parentInfo.parent.children[parentInfo.index] = replacement;\n this.normalizeSplitNode(parentInfo.parent);\n return root;\n }\n\n private cleanupEmptyStackInTree(\n root: DockLayoutNode | null,\n stack: DockStackNode,\n ): DockLayoutNode | null {\n if (!root || stack.panes.length > 0) {\n return root;\n }\n\n const parentInfo = this.findParentSplit(root, stack);\n if (!parentInfo) {\n return root === stack ? null : root;\n }\n\n const parent = parentInfo.parent;\n const index = parent.children.indexOf(stack);\n if (index === -1) {\n return root;\n }\n\n parent.children.splice(index, 1);\n if (Array.isArray(parent.sizes)) {\n parent.sizes.splice(index, 1);\n }\n this.normalizeSplitNode(parent);\n\n return this.cleanupSplitIfNecessary(root, parent);\n }\n\n private cleanupSplitIfNecessary(\n root: DockLayoutNode | null,\n split: DockSplitNode,\n ): DockLayoutNode | null {\n if (split.children.length === 1) {\n return this.replaceNodeInTree(root, split, split.children[0]);\n }\n\n if (split.children.length === 0) {\n const parentInfo = this.findParentSplit(root, split);\n if (!parentInfo) {\n return null;\n }\n\n const parent = parentInfo.parent;\n const index = parent.children.indexOf(split);\n if (index !== -1) {\n parent.children.splice(index, 1);\n if (Array.isArray(parent.sizes)) {\n parent.sizes.splice(index, 1);\n }\n this.normalizeSplitNode(parent);\n return this.cleanupSplitIfNecessary(root, parent);\n }\n }\n\n return root;\n }\n\n private dockNodeBeside(\n root: DockLayoutNode | null,\n targetNode: DockStackNode,\n newNode: DockLayoutNode,\n zone: DropZone,\n ): DockLayoutNode | null {\n const orientation = zone === 'left' || zone === 'right' ? 'horizontal' : 'vertical';\n const placeBefore = zone === 'left' || zone === 'top';\n const parentInfo = this.findParentSplit(root, targetNode);\n\n if (parentInfo && parentInfo.parent.direction === orientation) {\n const insertIndex = placeBefore ? parentInfo.index : parentInfo.index + 1;\n parentInfo.parent.children.splice(insertIndex, 0, newNode);\n parentInfo.parent.sizes = this.insertWeight(\n parentInfo.parent.sizes,\n insertIndex,\n parentInfo.parent.children.length,\n );\n return root ?? newNode;\n }\n\n const split: DockSplitNode = {\n kind: 'split',\n direction: orientation,\n children: placeBefore ? [newNode, targetNode] : [targetNode, newNode],\n sizes: [0.5, 0.5],\n };\n\n return this.replaceNodeInTree(root, targetNode, split);\n }\n\n private forEachStack(\n node: DockLayoutNode | null,\n visitor: (stack: DockStackNode, path: number[]) => void,\n path: number[] = [],\n ): void {\n if (!node) {\n return;\n }\n\n if (node.kind === 'stack') {\n visitor(node, path);\n return;\n }\n\n node.children.forEach((child, index) =>\n this.forEachStack(child, visitor, [...path, index]),\n );\n }\n\n private findStackContainingPane(\n node: DockLayoutNode | null,\n pane: string,\n ): DockStackNode | null {\n let result: DockStackNode | null = null;\n this.forEachStack(node, (stack) => {\n if (!result && stack.panes.includes(pane)) {\n result = stack;\n }\n });\n return result;\n }\n\n private findFirstPaneName(node: DockLayoutNode | null): string | null {\n let found: string | null = null;\n this.forEachStack(node, (stack) => {\n if (found || stack.panes.length === 0) {\n return;\n }\n if (stack.activePane && stack.panes.includes(stack.activePane)) {\n found = stack.activePane;\n } else {\n found = stack.panes[0];\n }\n });\n return found;\n }\n\n private collectFloatingPaneMetadata(\n node: DockLayoutNode | null,\n ): { panes: string[]; titles: Record<string, string> } {\n // Deprecated method retained temporarily for signature compatibility.\n // Use collectPaneNames instead.\n const panes = this.collectPaneNames(node);\n const titles: Record<string, string> = {};\n panes.forEach((p) => {\n const t = this.titles[p];\n if (t) {\n titles[p] = t;\n }\n });\n return { panes, titles };\n }\n\n private collectPaneNames(node: DockLayoutNode | null): string[] {\n const panes: string[] = [];\n this.forEachStack(node, (stack) => {\n stack.panes.forEach((pane) => panes.push(pane));\n });\n return panes;\n }\n\n private normalizeFloatingLayout(\n layout: DockFloatingStackLayout,\n ): DockFloatingStackLayout {\n const bounds = layout.bounds ?? { left: 0, top: 0, width: 320, height: 200 };\n const normalizedBounds = {\n left: Number.isFinite(bounds.left) ? bounds.left : 0,\n top: Number.isFinite(bounds.top) ? bounds.top : 0,\n width: Number.isFinite(bounds.width) ? Math.max(bounds.width, 160) : 320,\n height: Number.isFinite(bounds.height) ? Math.max(bounds.height, 120) : 200,\n };\n\n const root = layout.root ? this.cloneLayoutNode(layout.root) : null;\n\n return {\n id: layout.id,\n bounds: normalizedBounds,\n zIndex: layout.zIndex,\n root,\n activePane: layout.activePane,\n };\n }\n\n private formatPath(path: DockPath): string {\n if (path.type === 'floating') {\n const suffix =\n path.segments.length > 0\n ? `/${path.segments.map((segment) => segment.toString()).join('/')}`\n : '';\n return `f:${path.index}${suffix}`;\n }\n const suffix = path.segments.join('/');\n return suffix.length > 0 ? `d:${suffix}` : 'd:';\n }\n\n private clonePath(path: DockPath): DockPath {\n if (path.type === 'floating') {\n return { type: 'floating', index: path.index, segments: [...path.segments] };\n }\n return { type: 'docked', segments: [...path.segments] };\n }\n\n private parsePath(path: string | null | undefined): DockPath | null {\n // The root splitter is tagged with data-path=\"\" (raw segments-join of an\n // empty array) so empty string is a valid path representing root docked.\n // Only null/undefined is \"no path\".\n if (path == null) {\n return null;\n }\n\n if (path.startsWith('f:')) {\n const remainder = path.slice(2);\n const [indexPart, ...segmentParts] = remainder.split('/');\n const index = Number.parseInt(indexPart, 10);\n if (!Number.isFinite(index)) {\n return null;\n }\n const segments = segmentParts\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n return { type: 'floating', index, segments };\n }\n\n const normalized = path.startsWith('d:') ? path.slice(2) : path;\n if (normalized.length === 0) {\n return { type: 'docked', segments: [] };\n }\n\n const segments = normalized\n .split('/')\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n\n return { type: 'docked', segments };\n }\n\n private pathsEqual(a: DockPath, b: DockPath): boolean {\n if (a.type !== b.type) {\n return false;\n }\n\n if (a.type === 'floating') {\n const other = b as Extract<DockPath, { type: 'floating' }>;\n if (a.index !== other.index) {\n return false;\n }\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n const other = b as Extract<DockPath, { type: 'docked' }>;\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n private isOrIsAncestorOf(ancestor: DockPath, descendant: DockPath): boolean {\n if (ancestor.type !== descendant.type) {\n return false;\n }\n\n if (ancestor.type === 'floating') {\n if ((descendant as any).index !== ancestor.index) {\n return false;\n }\n }\n\n if (ancestor.segments.length > descendant.segments.length) {\n return false;\n }\n\n return ancestor.segments.every((segment, i) => segment === descendant.segments[i]);\n }\n\n private countPanesInTree(node: DockLayoutNode | null): number {\n if (!node) {\n return 0;\n }\n if (node.kind === 'stack') {\n return node.panes.length;\n }\n return node.children.reduce((total, child) => total + this.countPanesInTree(child), 0);\n }\n\n private resolveStackLocation(path: DockPath): ResolvedLocation | null {\n if (path.type === 'floating') {\n const layout = this.floatingLayouts[path.index];\n if (!layout || !layout.root) {\n return null;\n }\n const node = this.getNodeAtPath(layout.root, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n return { context: 'floating', index: path.index, path: [...path.segments], node };\n }\n\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n\n return { context: 'docked', path: [...path.segments], node };\n }\n\n private removePaneFromLocation(\n location: ResolvedLocation,\n pane: string,\n skipCleanup = false,\n ): boolean {\n if (location.context === 'docked') {\n return this.removePaneFromStack(location.node, pane, skipCleanup);\n }\n\n return this.removePaneFromFloating(location.index, location.path, pane, skipCleanup);\n }\n\n private addPaneToLocation(location: ResolvedLocation, pane: string): void {\n const panes = location.node.panes;\n const existingIndex = panes.indexOf(pane);\n if (existingIndex !== -1) {\n panes.splice(existingIndex, 1);\n }\n panes.push(pane);\n }\n\n private setActivePaneForLocation(location: ResolvedLocation, pane: string): void {\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n private cleanupLocation(location: ResolvedLocation): void {\n if (location.context === 'docked') {\n this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, location.node);\n } else {\n const floating = this.floatingLayouts[location.index];\n if (!floating) {\n return;\n }\n\n floating.root = this.cleanupEmptyStackInTree(floating.root, location.node);\n if (!floating.root) {\n this.removeFloatingAt(location.index);\n }\n }\n }\n\n private reorderPaneInLocation(location: ResolvedLocation, pane: string): void {\n const panes = location.node.panes;\n const index = panes.indexOf(pane);\n if (index === -1) {\n return;\n }\n panes.splice(index, 1);\n panes.push(pane);\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n private removeFloatingAt(index: number): void {\n if (index < 0 || index >= this.floatingLayouts.length) {\n return;\n }\n this.floatingLayouts.splice(index, 1);\n }\n\n private removePaneFromFloating(\n index: number,\n path: number[],\n pane: string,\n skipCleanup = false,\n ): boolean {\n const floating = this.floatingLayouts[index];\n if (!floating || !floating.root) {\n return false;\n }\n\n const node = this.getNodeAtPath(floating.root, path);\n if (!node || node.kind !== 'stack') {\n return false;\n }\n\n node.panes = node.panes.filter((p) => p !== pane);\n if (!node.panes.includes(node.activePane ?? '')) {\n if (node.panes.length > 0) {\n node.activePane = node.panes[0];\n } else {\n delete node.activePane;\n }\n }\n\n if (floating.activePane === pane) {\n const fallback = this.findFirstPaneName(floating.root);\n if (fallback) {\n floating.activePane = fallback;\n } else {\n delete floating.activePane;\n }\n }\n\n if (node.panes.length > 0) {\n return false;\n }\n\n if (skipCleanup) {\n return true;\n }\n\n floating.root = this.cleanupEmptyStackInTree(floating.root, node);\n if (!floating.root) {\n this.removeFloatingAt(index);\n }\n\n return true;\n }\n\n private normalizeSizesArray(sizes: number[] | undefined, count: number): number[] {\n if (count <= 0) {\n return [];\n }\n\n if (!Array.isArray(sizes) || sizes.length !== count) {\n return Array.from({ length: count }, () => 1 / count);\n }\n\n const normalized = sizes.map((value) => (Number.isFinite(value) ? Math.max(value, 0) : 0));\n const total = normalized.reduce((acc, value) => acc + value, 0);\n if (total <= 0) {\n return Array.from({ length: count }, () => 1 / count);\n }\n\n return normalized.map((value) => value / total);\n }\n\n private normalizeSplitNode(split: DockSplitNode): void {\n split.sizes = this.normalizeSizesArray(split.sizes, split.children.length);\n }\n\n private dispatchLayoutChanged(): void {\n this.dispatchEvent(\n new CustomEvent('dock-layout-changed', {\n detail: this.snapshot,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private cloneLayoutNode(layout: DockLayoutNode): DockLayoutNode;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null {\n if (!layout) {\n return null;\n }\n\n return JSON.parse(JSON.stringify(layout)) as DockLayoutNode;\n }\n\n private cloneFloatingArray(\n layouts: DockFloatingStackLayout[],\n ): DockFloatingStackLayout[] {\n return JSON.parse(JSON.stringify(layouts)) as DockFloatingStackLayout[];\n }\n}\n\nconst tagName = 'mint-dock-manager';\n\nif (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n customElements.define(tagName, MintDockManagerElement);\n}\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n inject,\n input,\n output,\n viewChild,\n signal,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n} from '../types/dock-layout';\nimport { BsDockPaneComponent } from './dock-pane.component';\nimport { MintDockManagerElement } from '../web-components/mint-dock-manager.element';\n\n@Component({\n selector: 'bs-dock-manager',\n templateUrl: './dock-manager.component.html',\n styleUrls: ['./dock-manager.component.scss'],\n imports: [NgTemplateOutlet],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockManagerComponent implements AfterViewInit {\n readonly layout = input<DockLayoutNode | DockLayout | null>(null);\n\n get layoutSnapshot(): DockLayoutSnapshot | null {\n if (!this._layout.root && this._layout.floating.length === 0) {\n return null;\n }\n return this.cloneLayout(this._layout);\n }\n\n readonly layoutChange = output<DockLayoutSnapshot | null>();\n readonly layoutSnapshotChange = output<DockLayoutSnapshot>();\n\n layoutString = signal<string | null>(null);\n\n readonly panes = contentChildren(BsDockPaneComponent);\n readonly managerRef = viewChild<ElementRef<MintDockManagerElement>>('manager');\n\n protected readonly trackByPane = (_: number, pane: BsDockPaneComponent) => pane.name();\n\n private _layout: DockLayoutSnapshot = { root: null, floating: [] };\n\n constructor() {\n const documentRef = inject(DOCUMENT);\n if (documentRef) {\n MintDockManagerElement.configureDocument(documentRef);\n }\n\n effect(() => {\n const value = this.layout();\n const snapshot = this.cloneLayout(this.ensureSnapshot(value));\n this._layout = snapshot;\n this.layoutString.set(this.stringifyLayout(snapshot));\n this.applyLayout();\n });\n }\n\n ngAfterViewInit(): void {\n this.applyLayout();\n }\n\n captureLayout(): DockLayoutSnapshot {\n const element = this.managerRef()?.nativeElement;\n return element?.snapshot ?? { root: null, floating: [] };\n }\n\n onLayoutChanged(event: Event): void {\n const snapshot =\n (event as CustomEvent<DockLayoutSnapshot>).detail ?? {\n root: null,\n floating: [],\n };\n this._layout = this.cloneLayout(snapshot);\n this.layoutString.set(this.stringifyLayout(this._layout));\n this.layoutChange.emit(this.layoutSnapshot);\n this.layoutSnapshotChange.emit(this.cloneLayout(snapshot));\n }\n\n private applyLayout(): void {\n const ref = this.managerRef();\n if (!ref) {\n return;\n }\n\n const element = ref.nativeElement;\n const layout = this.layoutSnapshot;\n element.layout = layout ?? null;\n }\n\n private ensureSnapshot(\n value: DockLayoutNode | DockLayout | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ('kind' in value) {\n return { root: value, floating: [], titles: {} };\n }\n\n return {\n root: value.root ?? null,\n floating: Array.isArray(value.floating) ? [...value.floating] : [],\n titles: value.titles ? { ...value.titles } : {},\n };\n }\n\n private stringifyLayout(layout: DockLayoutSnapshot): string | null {\n if (!layout.root && layout.floating.length === 0) {\n return null;\n }\n return JSON.stringify(layout);\n }\n\n private cloneLayout(layout: DockLayoutSnapshot): DockLayoutSnapshot {\n return JSON.parse(JSON.stringify(layout)) as DockLayoutSnapshot;\n }\n}\n","<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-dock.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-pane.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.template.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.html","../../../../libs/mintplayer-ng-bootstrap/dock/mintplayer-ng-bootstrap-dock.ts"],"sourcesContent":["import { AfterContentInit, Component, input, TemplateRef, viewChild, ChangeDetectionStrategy} from '@angular/core';\n\n@Component({\n selector: 'bs-dock-pane',\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockPaneComponent implements AfterContentInit {\n readonly name = input.required<string>();\n readonly title = input<string | undefined>(undefined);\n\n readonly template = viewChild.required(TemplateRef);\n\n ngAfterContentInit(): void {\n if (!this.name()) {\n throw new Error('bs-dock-pane requires a unique \"name\" input.');\n }\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// Source: mint-dock-manager.element.html + mint-dock-manager.element.scss\n// Regenerate with the codegen-wc Nx target.\n\nimport { html, unsafeCSS } from 'lit';\n\nexport const template = html`<div class=\"dock-root\">\n <div class=\"dock-docked\"></div>\n <div class=\"dock-floating-layer\"></div>\n <div class=\"dock-intersections-layer dock-intersection-layer\"></div>\n</div>\n<div class=\"dock-drop-indicator\"></div>\n<div class=\"dock-drop-joystick\" data-visible=\"false\">\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"top\"\n aria-label=\"Dock to top\"\n >\n ↑\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"left\"\n aria-label=\"Dock to left\"\n >\n ←\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"center\"\n aria-label=\"Dock to center\"\n >\n •\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"right\"\n aria-label=\"Dock to right\"\n >\n →\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"bottom\"\n aria-label=\"Dock to bottom\"\n >\n ↓\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n</div>`;\nexport const styles = unsafeCSS(`:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n contain: layout paint size style;\n box-sizing: border-box;\n font-family: inherit;\n color: inherit;\n --dock-split-gap: 0.25rem;\n}\n\n.dock-root,\n.dock-docked,\n.dock-split,\n.dock-stack,\n.dock-stack__pane {\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n}\n\n.dock-root {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.dock-docked {\n position: absolute;\n inset: 0;\n display: flex;\n z-index: 0;\n}\n\n.dock-floating-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n}\n\n.dock-intersections-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 120;\n}\n\n.dock-floating {\n position: absolute;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.5rem;\n background: var(--bs-body-bg);\n box-shadow: var(--bs-box-shadow-lg);\n overflow: hidden;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating[data-dragging=true] {\n pointer-events: none;\n}\n\n.dock-floating__chrome {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.35rem 0.75rem;\n cursor: move;\n touch-action: none;\n background: linear-gradient(to bottom, rgba(var(--bs-primary-rgb), 0.15), rgba(var(--bs-primary-rgb), 0.05));\n border-bottom: 1px solid var(--bs-primary-border-subtle);\n user-select: none;\n -webkit-user-select: none;\n}\n\n.dock-floating__title {\n flex: 1 1 auto;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--bs-body-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.dock-floating > .dock-stack {\n flex: 1 1 auto;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating__resizer {\n position: absolute;\n pointer-events: auto;\n z-index: 2;\n background: rgba(var(--bs-primary-rgb), 0.1);\n transition: background 120ms ease;\n touch-action: none;\n}\n\n.dock-floating__resizer:hover,\n.dock-floating__resizer[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.3);\n}\n\n.dock-floating__resizer--top,\n.dock-floating__resizer--bottom {\n left: 0.75rem;\n right: 0.75rem;\n height: 0.5rem;\n}\n\n.dock-floating__resizer--top {\n top: 0;\n cursor: n-resize;\n}\n\n.dock-floating__resizer--bottom {\n bottom: 0;\n cursor: s-resize;\n}\n\n.dock-floating__resizer--left,\n.dock-floating__resizer--right {\n top: 1.75rem;\n bottom: 0.75rem;\n width: 0.5rem;\n}\n\n.dock-floating__resizer--left {\n left: 0;\n cursor: w-resize;\n}\n\n.dock-floating__resizer--right {\n right: 0;\n cursor: e-resize;\n}\n\n.dock-floating__resizer--top-left,\n.dock-floating__resizer--top-right,\n.dock-floating__resizer--bottom-left,\n.dock-floating__resizer--bottom-right {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n.dock-floating__resizer--top-left {\n top: 0;\n left: 0;\n cursor: nw-resize;\n}\n\n.dock-floating__resizer--top-right {\n top: 0;\n right: 0;\n cursor: ne-resize;\n}\n\n.dock-floating__resizer--bottom-left {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n}\n\n.dock-floating__resizer--bottom-right {\n right: 0;\n bottom: 0;\n cursor: se-resize;\n}\n\n.dock-split {\n flex: 1 1 0;\n position: relative;\n}\n\n.dock-intersection-handle {\n position: absolute;\n width: 1rem;\n height: 1rem;\n margin-left: -0.5rem;\n margin-top: -0.5rem;\n border-radius: 0.375rem;\n background: var(--bs-primary-bg-subtle);\n border: 1px solid var(--bs-primary-border-subtle);\n box-shadow: var(--bs-box-shadow-sm);\n cursor: all-scroll;\n pointer-events: auto;\n touch-action: none;\n opacity: 0.45;\n transition: background 120ms ease, border-color 120ms ease, opacity 120ms ease;\n}\n\n.dock-intersection-handle:hover,\n.dock-intersection-handle:focus-visible,\n.dock-intersection-handle[data-visible=true],\n.dock-intersection-handle[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.35);\n border-color: var(--bs-primary);\n opacity: 1;\n outline: none;\n}\n\n.dock-snap-marker {\n position: absolute;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -3px;\n border-radius: 50%;\n background: var(--bs-primary);\n box-shadow: 0 0 0 2px var(--bs-primary-bg-subtle);\n pointer-events: none;\n z-index: 130;\n}\n\n.dock-stack {\n flex: 1 1 0;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n background: var(--bs-body-bg);\n backdrop-filter: blur(4px);\n}\n\n.dock-tab {\n cursor: grab;\n display: block;\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n touch-action: none;\n}\n\n.dock-tab:active {\n cursor: grabbing;\n}\n\n.dock-stack__pane {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n\n.dock-drop-indicator {\n position: absolute;\n pointer-events: none;\n border: 2px solid var(--bs-primary);\n background: rgba(var(--bs-primary-rgb), 0.2);\n border-radius: 0.25rem;\n opacity: 0;\n transition: opacity 120ms ease;\n z-index: 100;\n}\n\n.dock-drop-indicator[data-visible=true] {\n opacity: 1;\n}\n\n.dock-drop-joystick {\n position: absolute;\n display: grid;\n grid-template-columns: repeat(3, min-content);\n grid-template-rows: repeat(3, min-content);\n gap: 0.125rem;\n padding: 0.125rem;\n border-radius: 999px;\n background: var(--bs-tertiary-bg);\n box-shadow: var(--bs-box-shadow);\n pointer-events: none;\n transform: translate(-50%, -50%);\n z-index: 110;\n}\n\n.dock-drop-joystick__spacer {\n width: 1.75rem;\n height: 1.75rem;\n pointer-events: none;\n}\n\n.dock-drop-joystick__button {\n width: 1.75rem;\n height: 1.75rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n border: 1px solid var(--bs-primary-border-subtle);\n background: var(--bs-body-bg);\n color: var(--bs-primary);\n font-size: 0.75rem;\n line-height: 1;\n font-weight: 600;\n pointer-events: auto;\n cursor: pointer;\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\n}\n\n.dock-drop-joystick__button[data-active=true],\n.dock-drop-joystick__button:hover,\n.dock-drop-joystick__button:focus-visible {\n background: var(--bs-primary-bg-subtle);\n border-color: var(--bs-primary);\n color: var(--bs-primary);\n}\n\n.dock-drop-joystick__button:focus-visible {\n outline: 2px solid var(--bs-primary);\n outline-offset: 1px;\n}\n\n.dock-drop-joystick__button[data-zone=center] {\n border-radius: 0.5rem;\n}\n\n::slotted(*) {\n flex: 1 1 auto;\n display: block;\n min-width: 0;\n min-height: 0;\n}`);\n","\nimport { LitElement, type TemplateResult } from 'lit';\n// Side-effect import: registers <mp-tab-control> + <mp-tab-page> custom elements.\n// Each dock stack is rendered as <mp-tab-control>, so the dock depends on this\n// lib being loaded before any layout is rendered.\nimport '@mintplayer/ng-bootstrap/web-components/tab-control';\n// Side-effect import: registers <mp-splitter>. Each DockSplitNode is rendered\n// as a nested <mp-splitter>, so this lib must load before any layout renders.\nimport '@mintplayer/ng-bootstrap/web-components/splitter';\nimport {\n DockFloatingStackLayout,\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n DockSplitNode,\n DockStackNode,\n} from '../types/dock-layout';\nimport { template, styles } from './mint-dock-manager.element.template';\n\ntype DockPath =\n | { type: 'docked'; segments: number[] }\n | { type: 'floating'; index: number; segments: number[] };\n\ntype DockedLocation = { context: 'docked'; path: number[]; node: DockStackNode };\ntype FloatingLocation = {\n context: 'floating';\n index: number;\n path: number[];\n node: DockStackNode;\n};\n\ntype ResolvedLocation = DockedLocation | FloatingLocation;\n\ntype DropZone = 'center' | 'left' | 'right' | 'top' | 'bottom';\n\ntype FloatingResizeEdges = {\n horizontal: 'left' | 'right' | 'none';\n vertical: 'top' | 'bottom' | 'none';\n};\n\nexport class MintDockManagerElement extends LitElement {\n static override styles = [styles];\n\n private static documentRef: Document | null =\n typeof document !== 'undefined' ? document : null;\n\n static configureDocument(documentRef: Document | null | undefined): void {\n if (documentRef) {\n MintDockManagerElement.documentRef = documentRef;\n }\n }\n\n static override get observedAttributes(): string[] {\n return [...(super.observedAttributes ?? []), 'layout'];\n }\n\n private static instanceCounter = 0;\n\n private documentRef!: Document;\n private windowRef!: (Window & typeof globalThis) | null;\n private rootEl!: HTMLElement;\n private dockedEl!: HTMLElement;\n private floatingLayerEl!: HTMLElement;\n private dropIndicator!: HTMLElement;\n private dropJoystick!: HTMLElement;\n private dropJoystickButtons!: HTMLButtonElement[];\n private readonly instanceId: string;\n private dropJoystickTarget: HTMLElement | null = null;\n private rootLayout: DockLayoutNode | null = null;\n private floatingLayouts: DockFloatingStackLayout[] = [];\n private titles: Record<string, string> = {};\n private pendingTabDragMetrics:\n | {\n pointerOffsetX: number;\n pointerOffsetY: number;\n left: number;\n top: number;\n width: number;\n height: number;\n startClientX: number;\n startClientY: number;\n }\n | null = null;\n private dragState: {\n pane: string;\n sourcePath: DockPath;\n floatingIndex: number | null;\n pointerOffsetX: number;\n pointerOffsetY: number;\n dropHandled: boolean;\n // For tab reordering before converting to floating\n sourceStackEl?: HTMLElement | null;\n sourceHeaderBounds?: { left: number; top: number; right: number; bottom: number } | null;\n startClientX?: number;\n startClientY?: number;\n liveReorderIndex?: number;\n placeholderHeader?: HTMLElement | null;\n placeholderEl?: HTMLElement | null;\n } | null = null;\n private floatingDragState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n dropTarget?: { path: DockPath; zone: DropZone };\n }\n | null = null;\n private floatingResizeState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startWidth: number;\n startHeight: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n edges: FloatingResizeEdges;\n }\n | null = null;\n private intersectionRaf: number | null = null;\n private rootResizeObserver: ResizeObserver | null = null;\n private dockedMutationObserver: MutationObserver | null = null;\n private cornerResizeState:\n | {\n pointerId: number;\n handle: HTMLElement;\n // All horizontal divider bars (belong to vertical splits)\n hs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startY: number;\n }>;\n // All vertical divider bars (belong to horizontal splits)\n vs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startX: number;\n }>;\n }\n | null = null;\n private pointerTrackingActive = false;\n private dragPointerTrackingActive = false;\n private lastDragPointerPosition: { x: number; y: number } | null = null;\n // Localized snapping while dragging an intersection handle\n private cornerSnapXTargets: number[] = [];\n private cornerSnapYTargets: number[] = [];\n // Debug: render snap markers while dragging\n private showSnapMarkers = false;\n\n private renderSnapMarkersForCorner(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n if (!this.cornerResizeState) return;\n const rootRect = this.rootEl.getBoundingClientRect();\n // Compute representative center lines from the dividers being resized.\n // st.{hs,vs}[i].container is the <mp-splitter>; the divider lives in its\n // shadow at getSplitterDividers(splitter)[index].\n let centerX: number | null = null;\n let centerY: number | null = null;\n const st = this.cornerResizeState;\n if (st.vs.length > 0) {\n const v0 = st.vs[0];\n const vDiv = this.getSplitterDividers(v0.container)[v0.index];\n const vRect = vDiv?.getBoundingClientRect();\n if (vRect) centerX = vRect.left + vRect.width / 2 - rootRect.left;\n }\n if (st.hs.length > 0) {\n const h0 = st.hs[0];\n const hDiv = this.getSplitterDividers(h0.container)[h0.index];\n const hRect = hDiv?.getBoundingClientRect();\n if (hRect) centerY = hRect.top + hRect.height / 2 - rootRect.top;\n }\n if (centerY != null) {\n this.cornerSnapXTargets.forEach((sx) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${sx}px`;\n dot.style.top = `${centerY}px`;\n layer.appendChild(dot);\n });\n }\n if (centerX != null) {\n this.cornerSnapYTargets.forEach((sy) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${centerX}px`;\n dot.style.top = `${sy}px`;\n layer.appendChild(dot);\n });\n }\n }\n\n private clearSnapMarkers(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n }\n private pendingDragEndTimeout: number | NodeJS.Timeout | null = null;\n private previousSplitSizes: Map<string, number[]> = new Map();\n\n constructor() {\n super();\n this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;\n // Set windowRef eagerly so connectedCallback's window-level drag listeners\n // (added before firstUpdated runs) can actually attach. Without this,\n // win?.addEventListener was a silent no-op on first connect and HTML5\n // drag-to-detach gestures never reached the dock — the floating wrapper\n // was created but stayed at its conversion-time coordinates because the\n // 'drag' listener that updates its position was never attached.\n this.windowRef = typeof window !== 'undefined' ? window : null;\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onDragPointerMove = this.onDragPointerMove.bind(this);\n this.onDragPointerUp = this.onDragPointerUp.bind(this);\n this.onDragPointerCancel = this.onDragPointerCancel.bind(this);\n this.onSplitterResize = this.onSplitterResize.bind(this);\n }\n\n override render(): TemplateResult {\n return template;\n }\n\n protected override firstUpdated(): void {\n // Resolve document and window now that we are connected.\n const documentRef = this.resolveDocument();\n this.documentRef = documentRef;\n this.windowRef = this.resolveWindow(documentRef);\n\n // Query the rendered shadow DOM for the dock skeleton.\n const shadowRoot = this.shadowRoot!;\n const root = shadowRoot.querySelector<HTMLElement>('.dock-root');\n if (!root) {\n throw new Error('mint-dock-manager template is missing the root element.');\n }\n const docked = shadowRoot.querySelector<HTMLElement>('.dock-docked');\n if (!docked) {\n throw new Error('mint-dock-manager template is missing the docked surface element.');\n }\n const floatingLayer = shadowRoot.querySelector<HTMLElement>('.dock-floating-layer');\n if (!floatingLayer) {\n throw new Error('mint-dock-manager template is missing the floating layer element.');\n }\n const indicator = shadowRoot.querySelector<HTMLElement>('.dock-drop-indicator');\n if (!indicator) {\n throw new Error('mint-dock-manager template is missing the drop indicator element.');\n }\n const joystick = shadowRoot.querySelector<HTMLElement>('.dock-drop-joystick');\n if (!joystick) {\n throw new Error('mint-dock-manager template is missing the drop joystick element.');\n }\n const joystickButtons = Array.from(\n joystick.querySelectorAll<HTMLButtonElement>('.dock-drop-joystick__button[data-zone]'),\n );\n if (joystickButtons.length === 0) {\n throw new Error('mint-dock-manager template is missing drop joystick buttons.');\n }\n\n this.rootEl = root;\n this.dockedEl = docked;\n this.floatingLayerEl = floatingLayer;\n this.dropIndicator = indicator;\n this.dropJoystick = joystick;\n this.dropJoystickButtons = joystickButtons;\n\n // Tag the docked surface with a root path so it can act as\n // a drop target when the main layout is empty.\n this.dockedEl.dataset['path'] = this.formatPath({ type: 'docked', segments: [] });\n\n // Drop targeting (drop indicator + joystick zone selection) runs entirely\n // off pointer-based hit-testing in updatePaneDragDropTargetFromPoint and\n // findDropZoneByPoint — no HTML5 dragover/drop/dragleave listeners needed.\n\n // Render any layout that was set before the shadow DOM existed.\n this.renderLayout();\n\n // Reactive triggers for intersection-handle re-rendering. Each observer\n // wakes scheduleRenderIntersectionHandles() (rAF-coalesced), which means\n // multiple notifications in the same frame collapse to one render and\n // the rAF tick gives <mp-splitter> elements time to populate their\n // shadow roots before we query their dividers.\n this.rootResizeObserver = new ResizeObserver(() => this.scheduleRenderIntersectionHandles());\n this.rootResizeObserver.observe(this.rootEl);\n this.dockedMutationObserver = new MutationObserver(() => this.scheduleRenderIntersectionHandles());\n this.dockedMutationObserver.observe(this.dockedEl, { childList: true, subtree: true });\n // mp-splitter dispatches bubbling 'resizing' / 'resize-end' on user drag;\n // delegating on dockedEl catches every nested splitter without per-instance wiring.\n this.dockedEl.addEventListener('resizing', this.onSplitterResize);\n this.dockedEl.addEventListener('resize-end', this.onSplitterResize);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\n }\n }\n\n override disconnectedCallback(): void {\n const win = this.windowRef;\n this.stopDragPointerTracking();\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n this.rootResizeObserver?.disconnect();\n this.rootResizeObserver = null;\n this.dockedMutationObserver?.disconnect();\n this.dockedMutationObserver = null;\n this.dockedEl?.removeEventListener('resizing', this.onSplitterResize);\n this.dockedEl?.removeEventListener('resize-end', this.onSplitterResize);\n if (this.intersectionRaf !== null) {\n this.windowRef?.clearTimeout(this.intersectionRaf);\n this.intersectionRaf = null;\n }\n super.disconnectedCallback();\n }\n\n override attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n super.attributeChangedCallback(name, _oldValue, newValue);\n if (name === 'layout') {\n this.layout = newValue ? this.parseLayout(newValue) : null;\n } else if (name === 'debug-snap-markers') {\n this.showSnapMarkers = !(newValue === null || newValue === 'false' || newValue === '0');\n if (!this.showSnapMarkers) {\n this.clearSnapMarkers();\n }\n }\n }\n\n get layout(): DockLayoutSnapshot {\n return {\n root: this.cloneLayoutNode(this.rootLayout),\n floating: this.cloneFloatingArray(this.floatingLayouts),\n titles: { ...this.titles },\n };\n }\n\n set layout(value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null) {\n const snapshot = this.ensureSnapshot(value);\n // While a drag/resize is in flight, the dock manager is the source of\n // truth for layout state — its mid-drag mutations (e.g. floating bounds\n // updated every mousemove, or a stack split during a pane-drag-to-floating\n // conversion) race the host's two-way binding round-trip. The host re-\n // feeds the layout we *just* dispatched via `dock-layout-changed`, but by\n // the time the round-trip arrives the user has moved the cursor again, so\n // the structural-equality guard below would let it through and clobber the\n // in-progress state (e.g. snap a freshly-detached floating window back to\n // the converted-at coordinates instead of letting it follow the cursor).\n // Reject any external layout write during interaction; the host will sync\n // back to the dock's final state when interaction ends and the dock fires\n // a fresh dock-layout-changed event.\n if (this.isInteracting()) return;\n // Skip renderLayout when the incoming layout is structurally identical\n // to the current state. After a divider drag the dock dispatches\n // dock-layout-changed; an Angular host doing two-way binding will feed\n // that snapshot right back through `[layout]` (and through the\n // `[attr.layout]` round-trip). Without this guard, every drag-end\n // tears down and rebuilds the whole splitter tree, giving a one-frame\n // flash of `flex: 1 1 0` equal-share before the pin restores sizes.\n const currentJson = JSON.stringify({\n root: this.rootLayout,\n floating: this.floatingLayouts,\n titles: this.titles,\n });\n const newJson = JSON.stringify(snapshot);\n if (currentJson === newJson) return;\n\n this.rootLayout = this.cloneLayoutNode(snapshot.root);\n this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);\n this.titles = snapshot.titles ? { ...snapshot.titles } : {};\n this.renderLayout();\n }\n\n /**\n * True while the user is actively interacting with the dock — pane drag,\n * floating window drag, floating window resize, or intersection corner\n * resize. The `set layout` setter consults this to refuse external\n * round-trips that would overwrite in-progress drag state.\n */\n private isInteracting(): boolean {\n return !!(\n this.dragState ||\n this.floatingDragState ||\n this.floatingResizeState ||\n this.cornerResizeState\n );\n }\n\n get snapshot(): DockLayoutSnapshot {\n return this.layout;\n }\n\n toJSON(): DockLayoutSnapshot {\n return this.snapshot;\n }\n\n private resolveDocument(): Document {\n const staticDocument = MintDockManagerElement.documentRef;\n const ownerDocument = this.ownerDocument ?? null;\n const globalDocument =\n typeof document !== 'undefined' ? document : null;\n const resolvedDocument = staticDocument ?? ownerDocument ?? globalDocument;\n\n if (!resolvedDocument) {\n throw new Error('mint-dock-manager requires a Document to initialize.');\n }\n\n if (!MintDockManagerElement.documentRef) {\n MintDockManagerElement.documentRef = resolvedDocument;\n }\n\n return resolvedDocument;\n }\n\n private resolveWindow(\n documentRef: Document,\n ): (Window & typeof globalThis) | null {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n return (documentRef.defaultView as (Window & typeof globalThis) | null) ?? null;\n }\n\n private parseLayout(value: string): DockLayoutSnapshot | null {\n try {\n const parsed = JSON.parse(value) as\n | DockLayoutSnapshot\n | DockLayout\n | DockLayoutNode\n | null;\n return this.ensureSnapshot(parsed);\n } catch (err) {\n console.warn('mint-dock-manager: failed to parse layout attribute', err);\n return null;\n }\n }\n\n private ensureSnapshot(\n value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ((value as DockLayoutNode).kind) {\n return { root: value as DockLayoutNode, floating: [], titles: {} };\n }\n\n const layout = value as DockLayout | DockLayoutSnapshot;\n return {\n root: layout.root ?? null,\n floating: Array.isArray(layout.floating)\n ? layout.floating.map((floating) => this.normalizeFloatingLayout(floating))\n : [],\n titles: layout.titles ? { ...layout.titles } : {},\n };\n }\n\n private renderLayout(): void {\n // The layout setter may run before firstUpdated() has populated the\n // shadow-DOM fields (e.g. when an attribute is set on the markup).\n // Bail out; firstUpdated() will call renderLayout() once ready.\n if (!this.dockedEl) return;\n this.dockedEl.innerHTML = '';\n this.floatingLayerEl.innerHTML = '';\n this.hideDropIndicator();\n\n if (this.rootLayout) {\n const fragment = this.renderNode(this.rootLayout, []);\n this.dockedEl.appendChild(fragment);\n }\n\n this.renderFloatingPanes();\n // Note: intersection handles are repositioned reactively via observers\n // wired up in firstUpdated (rootResizeObserver, dockedMutationObserver,\n // and delegated 'resizing' / 'resize-end' events). The MutationObserver\n // on dockedEl fires when the renderNode subtree above is appended.\n }\n\n private renderNode(\n node: DockLayoutNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n if (node.kind === 'split') {\n return this.renderSplit(node, path, floatingIndex);\n }\n\n return this.renderStack(node, path, floatingIndex);\n }\n\n private renderFloatingPanes(): void {\n this.floatingLayerEl.innerHTML = '';\n this.floatingLayouts.forEach((floating, index) => {\n const wrapper = this.documentRef.createElement('div');\n wrapper.classList.add('dock-floating');\n wrapper.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n\n const { left, top, width, height } = floating.bounds;\n wrapper.style.left = `${left}px`;\n wrapper.style.top = `${top}px`;\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n\n const zIndex = this.getFloatingPaneZIndex(index);\n wrapper.style.zIndex = String(zIndex);\n\n const chrome = this.documentRef.createElement('div');\n chrome.classList.add('dock-floating__chrome');\n chrome.addEventListener('pointerdown', (event) =>\n this.beginFloatingDrag(event, index, wrapper, chrome),\n );\n\n const title = this.documentRef.createElement('div');\n title.classList.add('dock-floating__title');\n title.textContent = this.getFloatingWindowTitle(floating);\n chrome.appendChild(title);\n\n wrapper.appendChild(chrome);\n\n if (floating.root) {\n const content = this.renderNode(floating.root, [], index);\n content.classList.add('dock-floating__stack');\n wrapper.appendChild(content);\n } else {\n const placeholder = this.documentRef.createElement('div');\n placeholder.classList.add('dock-stack');\n placeholder.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n const empty = this.documentRef.createElement('div');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n placeholder.appendChild(empty);\n wrapper.appendChild(placeholder);\n }\n\n const resizerConfigs: { classes: string[]; edges: FloatingResizeEdges }[] = [\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-left'],\n edges: { horizontal: 'left', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top'],\n edges: { horizontal: 'none', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-right'],\n edges: { horizontal: 'right', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--right'],\n edges: { horizontal: 'right', vertical: 'none' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-right'],\n edges: { horizontal: 'right', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom'],\n edges: { horizontal: 'none', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-left'],\n edges: { horizontal: 'left', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--left'],\n edges: { horizontal: 'left', vertical: 'none' },\n },\n ];\n\n resizerConfigs.forEach(({ classes, edges }) => {\n const resizer = this.documentRef.createElement('div');\n resizer.classList.add(...classes);\n resizer.addEventListener('pointerdown', (event) =>\n this.beginFloatingResize(event, index, wrapper, resizer, edges),\n );\n wrapper.appendChild(resizer);\n });\n this.floatingLayerEl.appendChild(wrapper);\n });\n }\n\n private onSplitterResize(): void {\n // mp-splitter dispatches 'resizing' continuously during a divider drag\n // and 'resize-end' when the user releases. Both keep the handle glued\n // to the new intersection coordinate.\n this.scheduleRenderIntersectionHandles();\n }\n\n private scheduleRenderIntersectionHandles(): void {\n if (this.intersectionRaf !== null) return;\n const win = this.windowRef;\n if (!win) return;\n // Defer with setTimeout(5) instead of rAF so we run AFTER any\n // flex-redistribution settles. Sequence we have to wait through:\n // (1) DOM mutation (e.g. panel removed by drop)\n // (2) microtasks: <mp-splitter>'s slotchange + size-pinning rAF\n // (3) layout flush\n // A bare rAF can fire before (2) resolves, so getBoundingClientRect on\n // the dividers reads a transient flex-distributed position and the\n // glyph lands ~tens of pixels off. 5ms is past the microtask queue and\n // past splitter's pinning rAF in practice, so the divider rects we\n // read are the settled, post-pin values.\n this.intersectionRaf = win.setTimeout(() => {\n this.intersectionRaf = null;\n this.renderIntersectionHandles();\n }, 5) as unknown as number;\n }\n\n private renderIntersectionHandles(): void {\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n\n const rootRect = this.rootEl.getBoundingClientRect();\n\n // Active corner-resize: keep st.handle alive (it owns pointer capture and\n // the cornerResizeState references it). Update its position from current\n // divider rects, drop every other handle by reference.\n if (this.cornerResizeState) {\n const st = this.cornerResizeState;\n const h0 = st.hs[0];\n const v0 = st.vs[0];\n const hSplitter = this.findSplitterByPath(h0.path.segments);\n const vSplitter = this.findSplitterByPath(v0.path.segments);\n const hDiv = hSplitter ? this.getSplitterDividers(hSplitter)[h0.index] : null;\n const vDiv = vSplitter ? this.getSplitterDividers(vSplitter)[v0.index] : null;\n if (hDiv && vDiv) {\n const hr = hDiv.getBoundingClientRect();\n const vr = vDiv.getBoundingClientRect();\n const x = vr.left + vr.width / 2 - rootRect.left;\n const y = hr.top + hr.height / 2 - rootRect.top;\n st.handle.style.left = `${x}px`;\n st.handle.style.top = `${y}px`;\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if (el !== st.handle) el.remove();\n });\n }\n return;\n }\n\n // Idle path: full clear + rebuild. Cheaper to reason about than incremental\n // diffing, and handles' positions are always derived from current divider\n // rects so a layout change (drop, splitter restructure, flex redistribution)\n // can never leave a stale glyph behind.\n layer.replaceChildren();\n\n type DividerInfo = {\n rect: DOMRect;\n pathStr: string;\n index: number;\n };\n const hDividers: DividerInfo[] = [];\n const vDividers: DividerInfo[] = [];\n\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined;\n const pathStr = splitter.dataset['path'] ?? '';\n this.getSplitterDividers(splitter).forEach((el, index) => {\n const info: DividerInfo = { rect: el.getBoundingClientRect(), pathStr, index };\n // direction='horizontal' means children flow left-to-right, so the\n // divider bars between them are VERTICAL (and vice-versa).\n if (direction === 'horizontal') vDividers.push(info);\n else if (direction === 'vertical') hDividers.push(info);\n });\n });\n\n // Group intersections that round to the same on-screen pixel, so two\n // sibling splitters whose dividers happen to overlap share one handle.\n const tol = 24;\n const groups = new Map<string, { x: number; y: number; pairs: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> }>();\n hDividers.forEach((h) => {\n const hCenterY = h.rect.top + h.rect.height / 2;\n vDividers.forEach((v) => {\n const vCenterX = v.rect.left + v.rect.width / 2;\n const dx = vCenterX < h.rect.left ? h.rect.left - vCenterX : vCenterX > h.rect.right ? vCenterX - h.rect.right : 0;\n const dy = hCenterY < v.rect.top ? v.rect.top - hCenterY : hCenterY > v.rect.bottom ? hCenterY - v.rect.bottom : 0;\n if (dx > tol || dy > tol) return;\n const x = vCenterX - rootRect.left;\n const y = hCenterY - rootRect.top;\n const gk = `${Math.round(x)}:${Math.round(y)}`;\n const group = groups.get(gk) ?? { x, y, pairs: [] };\n group.pairs.push({ h: { pathStr: h.pathStr, index: h.index }, v: { pathStr: v.pathStr, index: v.index } });\n groups.set(gk, group);\n });\n });\n\n groups.forEach((group, gk) => {\n const handle = this.documentRef.createElement('div');\n handle.classList.add('dock-intersection-handle', 'glyph');\n handle.setAttribute('role', 'separator');\n handle.setAttribute('aria-label', 'Resize split intersection');\n const firstPair = group.pairs[0];\n const key = `${firstPair.h.pathStr}:${firstPair.h.index}|${firstPair.v.pathStr}:${firstPair.v.index}`;\n handle.dataset['key'] = key;\n handle.dataset['pairs'] = JSON.stringify(group.pairs);\n handle.style.left = `${group.x}px`;\n handle.style.top = `${group.y}px`;\n // beginCornerResize/onIntersectionDoubleClick read data-pairs to\n // reconstruct the (h, v) pair list, so the (h, v) args we pass here\n // are only used as a fallback when data-pairs is empty — safe to use\n // the first pair's structure as the seed.\n const seedH = { path: this.parsePath(firstPair.h.pathStr), index: firstPair.h.index, container: this.findSplitterByPath(this.parsePath(firstPair.h.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n const seedV = { path: this.parsePath(firstPair.v.pathStr), index: firstPair.v.index, container: this.findSplitterByPath(this.parsePath(firstPair.v.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n handle.addEventListener('pointerdown', (ev) => this.beginCornerResize(ev, seedH, seedV, handle));\n handle.addEventListener('dblclick', (ev) => this.onIntersectionDoubleClick(ev, handle));\n layer.appendChild(handle);\n });\n }\n\n private beginCornerResize(\n event: PointerEvent,\n h: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n v: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n handle: HTMLElement,\n ): void {\n event.preventDefault();\n\n // Build pairs from dataset if available (grouped intersections), otherwise from the provided pair\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> =\n pairsRaw ? JSON.parse(pairsRaw) : [];\n const hs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n const vs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n\n const ensureHV = (pathStr: string, index: number, axis: 'h'|'v') => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n // Initial pixel sizes come from each panel-wrapper inside the splitter's\n // shadow root. We capture them once on pointerdown and feed deltas to\n // setPanelSizes() during the drag.\n const panels = this.getSplitterPanels(splitter);\n if (panels.length === 0) return;\n const dim: 'height' | 'width' = axis === 'h' ? 'height' : 'width';\n const initial = panels.map((p) => p.getBoundingClientRect()[dim]);\n const entry = { path, index, container: splitter, initialSizes: initial, before: initial[index], after: initial[index + 1] };\n if (axis === 'h') hs.push(entry);\n else vs.push(entry);\n };\n\n if (parsed.length > 0) {\n parsed.forEach((p) => { ensureHV(p.h.pathStr, p.h.index, 'h'); ensureHV(p.v.pathStr, p.v.index, 'v'); });\n } else if (h.path && v.path) {\n ensureHV(this.formatPath(h.path), h.index, 'h');\n ensureHV(this.formatPath(v.path), v.index, 'v');\n }\n if (hs.length === 0 && vs.length === 0) return;\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n handle.classList.add('hovering');\n } catch {}\n\n this.cornerResizeState = {\n pointerId: event.pointerId,\n handle,\n hs: hs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startY: event.clientY })),\n vs: vs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startX: event.clientX })),\n };\n\n this.startPointerTracking();\n // Ensure handle has a stable key (use group if present)\n if (!handle.dataset['key']) {\n handle.dataset['key'] = handle.dataset['group'] ?? '';\n }\n this.renderSnapMarkersForCorner();\n\n // Compute localized snap targets for this intersection\n try {\n const rootRect = this.rootEl.getBoundingClientRect();\n // Use first pair to define the crossing lines. Resolve dividers via\n // each splitter's shadow root.\n let centerX: number | null = null;\n let centerY: number | null = null;\n if (vs.length > 0) {\n const vPair = vs[0];\n const vDiv = this.getSplitterDividers(vPair.container)[vPair.index];\n const vr = vDiv?.getBoundingClientRect();\n if (vr) centerX = vr.left + vr.width / 2;\n }\n if (hs.length > 0) {\n const hPair = hs[0];\n const hDiv = this.getSplitterDividers(hPair.container)[hPair.index];\n const hr = hDiv?.getBoundingClientRect();\n if (hr) centerY = hr.top + hr.height / 2;\n }\n\n const xTargets: number[] = [];\n const yTargets: number[] = [];\n // Iterate every splitter, then flat-map its shadow dividers — a\n // splitter's data-direction tells us whether its bars are vertical\n // (horizontal split) or horizontal (vertical split).\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n this.getSplitterDividers(splitter).forEach((el) => {\n const r = el.getBoundingClientRect();\n if (direction === 'horizontal' && centerY != null) {\n // vertical bar → contributes X if it crosses centerY\n if (centerY >= r.top && centerY <= r.bottom) {\n xTargets.push(r.left + r.width / 2 - rootRect.left);\n }\n } else if (direction === 'vertical' && centerX != null) {\n // horizontal bar → contributes Y if it crosses centerX\n if (centerX >= r.left && centerX <= r.right) {\n yTargets.push(r.top + r.height / 2 - rootRect.top);\n }\n }\n });\n });\n this.cornerSnapXTargets = xTargets;\n this.cornerSnapYTargets = yTargets;\n } catch {\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n }\n\n private handleCornerResizeMove(event: PointerEvent): void {\n const state = this.cornerResizeState;\n if (!state || state.pointerId !== event.pointerId) return;\n\n const snapValue = (val: number, total: number, active: boolean) => {\n if (!active || total <= 0) return val;\n const ratios = [1/3, 1/2, 2/3];\n const r = val / total;\n let best = ratios[0];\n let d = Math.abs(r - best);\n for (let i=1;i<ratios.length;i++){ const dd = Math.abs(r - ratios[i]); if (dd < d) { d = dd; best = ratios[i]; } }\n return best * total;\n };\n\n // Axis snapping to nearby intersections\n const tol = 10;\n const rootRect = this.rootEl.getBoundingClientRect();\n let clientX = event.clientX;\n let clientY = event.clientY;\n if (this.cornerSnapXTargets.length) {\n let best = clientX, bestDist = tol + 1;\n this.cornerSnapXTargets.forEach((sx) => {\n const px = rootRect.left + sx; const d = Math.abs(px - clientX); if (d < bestDist) { bestDist = d; best = px; }\n });\n if (bestDist <= tol) clientX = best;\n }\n if (this.cornerSnapYTargets.length) {\n let best = clientY, bestDist = tol + 1;\n this.cornerSnapYTargets.forEach((sy) => {\n const py = rootRect.top + sy; const d = Math.abs(py - clientY); if (d < bestDist) { bestDist = d; best = py; }\n });\n if (bestDist <= tol) clientY = best;\n }\n\n // Apply the new pair sizes to one splitter's panel-wrappers via\n // mp-splitter's setPanelSizes(pixels) API. We persist the normalized\n // ratios on the layout node so renderSplit's initial sizing stays in sync.\n const applyPairSize = (\n entry: {\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n },\n delta: number,\n ): void => {\n const node = this.resolveSplitNode(entry.path);\n if (!node) return;\n const minSize = 48;\n const pairTotal = entry.beforeSize + entry.afterSize;\n let newBefore = Math.min(Math.max(entry.beforeSize + delta, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...entry.initialSizes];\n sizesPx[entry.index] = newBefore;\n sizesPx[entry.index + 1] = newAfter;\n const total = sizesPx.reduce((a, s) => a + s, 0);\n node.sizes = total > 0 ? sizesPx.map((s) => s / total) : [];\n (entry.container as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(sizesPx);\n };\n\n // Update all horizontal bars (vertical splits) with Y delta, then all\n // vertical bars (horizontal splits) with X delta.\n state.hs.forEach((h) => applyPairSize(h, clientY - h.startY));\n state.vs.forEach((v) => applyPairSize(v, clientX - v.startX));\n\n this.dispatchLayoutChanged();\n // setPanelSizes() is programmatic and doesn't fire 'resizing' events, so\n // the delegated listener on dockedEl doesn't wake during a corner drag.\n // Schedule the handle repositioning ourselves; renderIntersectionHandles\n // has a fast-path for the active cornerResizeState that just updates\n // left/top from the new divider rects.\n this.scheduleRenderIntersectionHandles();\n }\n\n private endCornerResize(pointerId: number): void {\n const state = this.cornerResizeState;\n if (!state || pointerId !== state.pointerId) return;\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch {}\n state.handle.dataset['resizing'] = 'false';\n this.cornerResizeState = null;\n // Re-render handles to account for new positions\n this.scheduleRenderIntersectionHandles();\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n\n private onIntersectionDoubleClick(event: MouseEvent, handle: HTMLElement): void {\n event.preventDefault();\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }>\n = pairsRaw ? JSON.parse(pairsRaw) : [];\n if (!Array.isArray(parsed) || parsed.length === 0) {\n const k = handle.dataset['key'] ?? '';\n const parts = k.split('|');\n if (parts.length === 2) {\n const [hPart, vPart] = parts;\n const hi = hPart.lastIndexOf(':');\n const vi = vPart.lastIndexOf(':');\n if (hi > 0 && vi > 0) {\n const hPathStr = hPart.slice(0, hi);\n const vPathStr = vPart.slice(0, vi);\n const hIdx = Number.parseInt(hPart.slice(hi + 1), 10);\n const vIdx = Number.parseInt(vPart.slice(vi + 1), 10);\n parsed.push({ h: { pathStr: hPathStr, index: hIdx }, v: { pathStr: vPathStr, index: vIdx } });\n }\n }\n }\n if (parsed.length === 0) return;\n\n const splitKeys = new Set<string>();\n parsed.forEach((p) => { splitKeys.add(p.h.pathStr); splitKeys.add(p.v.pathStr); });\n let hasStored = false;\n splitKeys.forEach((k) => { if (this.previousSplitSizes.has(k)) hasStored = true; });\n\n // Persist `node.sizes` (normalized) and push pixel sizes into the\n // matching <mp-splitter> via setPanelSizes(). The splitter's panel\n // wrappers live in its shadow DOM, so direct flex mutation is no\n // longer an option.\n const pushSizesToSplitter = (path: DockPath, normalized: number[]): void => {\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? 'horizontal';\n const containerSize = direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const totalWeight = normalized.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const px = normalized.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n };\n\n const applySizes = (pathStr: string, dividerIndex: number, mutate: (sizes: number[], index: number) => number[]) => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const node = this.resolveSplitNode(path);\n if (!node) return;\n const sizes = this.normalizeSizesArray(node.sizes ?? [], node.children.length);\n const newSizes = mutate([...sizes], dividerIndex);\n node.sizes = newSizes;\n pushSizesToSplitter(path, newSizes);\n };\n\n if (hasStored) {\n // Restore stored sizes\n this.previousSplitSizes.forEach((sizes, pathStr) => {\n const path = this.parsePath(pathStr);\n const node = path ? this.resolveSplitNode(path) : null;\n if (!node || !path) return;\n const norm = this.normalizeSizesArray(sizes, node.children.length);\n node.sizes = norm;\n pushSizesToSplitter(path, norm);\n });\n this.previousSplitSizes.clear();\n } else {\n // Equalize the two panes adjacent to each divider and store previous sizes\n const touched = new Set<string>();\n parsed.forEach((p) => {\n [p.h.pathStr, p.v.pathStr].forEach((key) => {\n if (touched.has(key)) return;\n const path = this.parsePath(key);\n const node = path ? this.resolveSplitNode(path) : null;\n if (node && Array.isArray(node.sizes)) {\n this.previousSplitSizes.set(key, [...node.sizes]);\n }\n touched.add(key);\n });\n const equalize = (sizes: number[], idx: number): number[] => {\n const total = (sizes[idx] ?? 0) + (sizes[idx + 1] ?? 0);\n if (total <= 0) return sizes;\n sizes[idx] = total / 2;\n sizes[idx + 1] = total / 2;\n const sum = sizes.reduce((a, s) => a + s, 0);\n return sum > 0 ? sizes.map((s) => s / sum) : sizes;\n };\n applySizes(p.h.pathStr, p.h.index, equalize);\n applySizes(p.v.pathStr, p.v.index, equalize);\n });\n }\n\n this.dispatchLayoutChanged();\n this.scheduleRenderIntersectionHandles();\n }\n\n private beginFloatingDrag(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { left, top } = floating.bounds;\n\n try {\n handle.setPointerCapture(event.pointerId);\n } catch (err) {\n /* no-op: pointer capture may not be supported in all environments */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingDragState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startLeft: left,\n startTop: top,\n wrapper,\n handle,\n };\n\n this.startPointerTracking();\n }\n\n private beginFloatingResize(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n edges: FloatingResizeEdges,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n } catch (err) {\n /* pointer capture may not be supported */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingResizeState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startWidth: floating.bounds.width,\n startHeight: floating.bounds.height,\n startLeft: floating.bounds.left,\n startTop: floating.bounds.top,\n wrapper,\n handle,\n edges,\n };\n\n this.startPointerTracking();\n }\n\n private handleFloatingDragMove(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const newLeft = state.startLeft + deltaX;\n const newTop = state.startTop + deltaY;\n\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n\n this.updateFloatingDragDropTarget(event);\n }\n\n private endFloatingDrag(pointerId: number): void {\n const state = this.floatingDragState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear outside the try so a thrown releasePointerCapture (capture\n // already lost) doesn't strand the handle in its visual drag state.\n delete state.handle.dataset['resizing'];\n\n const dropHandled = state.dropTarget\n ? this.handleFloatingStackDrop(state.index, state.dropTarget.path, state.dropTarget.zone)\n : false;\n\n this.floatingDragState = null;\n this.hideDropIndicator();\n if (!dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateFloatingDragDropTarget(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state) {\n return;\n }\n\n const stack = this.findStackAtPoint(event.clientX, event.clientY);\n if (!stack) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n const path = this.parsePath(stack.dataset['path']);\n if (!path || (path.type === 'floating' && path.index === state.index)) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n // Reset sticky zone when moving to another stack while dragging the\n // floating window so the side doesn't carry over.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n const zone = this.computeDropZone(stack, event, this.extractDropZoneFromEvent(event));\n\n if (zone) {\n state.dropTarget = { path, zone };\n } else if (state.dropTarget) {\n delete state.dropTarget;\n }\n\n this.showDropIndicator(stack, zone);\n }\n\n private handleFloatingResizeMove(event: PointerEvent): void {\n const state = this.floatingResizeState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const minWidth = 192;\n const minHeight = 128;\n let newWidth = state.startWidth;\n let newHeight = state.startHeight;\n let newLeft = state.startLeft;\n let newTop = state.startTop;\n\n if (state.edges.horizontal === 'right') {\n newWidth = Math.max(minWidth, state.startWidth + deltaX);\n } else if (state.edges.horizontal === 'left') {\n newWidth = Math.max(minWidth, state.startWidth - deltaX);\n newLeft = state.startLeft + (state.startWidth - newWidth);\n }\n\n if (state.edges.vertical === 'bottom') {\n newHeight = Math.max(minHeight, state.startHeight + deltaY);\n } else if (state.edges.vertical === 'top') {\n newHeight = Math.max(minHeight, state.startHeight - deltaY);\n newTop = state.startTop + (state.startHeight - newHeight);\n }\n\n state.wrapper.style.width = `${newWidth}px`;\n state.wrapper.style.height = `${newHeight}px`;\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.width = newWidth;\n floating.bounds.height = newHeight;\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n }\n\n private endFloatingResize(pointerId: number): void {\n const state = this.floatingResizeState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear `data-resizing` outside the try — releasePointerCapture can\n // throw if the capture was already lost (e.g., the pointer left the\n // window), and we still need to drop the resizing attribute or the\n // CSS rule `.dock-floating__resizer[data-resizing='true']` keeps the\n // border dark-blue forever.\n delete state.handle.dataset['resizing'];\n\n this.floatingResizeState = null;\n this.dispatchLayoutChanged();\n }\n\n private getFloatingPaneZIndex(index: number): number {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return 10 + index;\n }\n const base =\n typeof floating.zIndex === 'number' && Number.isFinite(floating.zIndex)\n ? floating.zIndex\n : 10 + index;\n return base;\n }\n\n private promoteFloatingPane(index: number, wrapper: HTMLElement): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const maxExisting = this.floatingLayouts.reduce((max, layout, idx) => {\n if (!layout) {\n return max;\n }\n const z = idx === index ? Number.NEGATIVE_INFINITY : this.getFloatingPaneZIndex(idx);\n return Math.max(max, z);\n }, 0);\n\n const nextZ = Math.max(maxExisting + 2, 12);\n floating.zIndex = nextZ;\n wrapper.style.zIndex = String(nextZ);\n }\n\n private getFloatingWrapper(index: number): HTMLElement | null {\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n return this.floatingLayerEl.querySelector<HTMLElement>(selector);\n }\n\n private startPointerTracking(): void {\n if (this.pointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onPointerMove);\n win?.addEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = true;\n }\n\n private stopPointerTrackingIfIdle(): void {\n if (\n this.pointerTrackingActive &&\n !this.floatingDragState &&\n !this.floatingResizeState &&\n !this.cornerResizeState\n ) {\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n }\n }\n\n private getFloatingWindowTitle(floating: DockFloatingStackLayout): string {\n const fallback = 'Floating Pane';\n if (!floating || !floating.root) {\n return fallback;\n }\n\n const preferred = floating.activePane ?? this.findFirstPaneName(floating.root);\n if (!preferred) {\n return fallback;\n }\n\n return this.titles[preferred] ?? preferred ?? fallback;\n }\n\n private updateFloatingWindowTitle(index: number): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n const wrapper = this.floatingLayerEl.querySelector<HTMLElement>(selector);\n if (!wrapper) {\n return;\n }\n\n const titleEl = wrapper.querySelector<HTMLElement>('.dock-floating__title');\n if (!titleEl) {\n return;\n }\n\n titleEl.textContent = this.getFloatingWindowTitle(floating);\n }\n\n private renderSplit(\n node: DockSplitNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Each DockSplitNode renders as <mp-splitter>. The dock keeps its `.dock-split`\n // class on the host so existing `closest('.dock-split')` queries continue to\n // resolve, and stamps `data-direction` / `data-path` for the tree-driven\n // intersection-handle math.\n const splitter = this.documentRef.createElement('mp-splitter') as HTMLElement;\n splitter.classList.add('dock-split');\n splitter.dataset['direction'] = node.direction;\n splitter.dataset['path'] = path.join('/');\n // mp-splitter uses 'horizontal' (left-right) and 'vertical' (top-bottom).\n // The dock's DockSplitNode.direction matches that vocabulary 1:1.\n splitter.setAttribute('orientation', node.direction);\n\n const splitPath: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n\n node.children.forEach((child, index) => {\n // mp-splitter accepts direct children — it wraps each in a panel-wrapper\n // inside its shadow DOM and projects via a named slot per index.\n splitter.appendChild(this.renderNode(child, [...path, index], floatingIndex));\n });\n\n // Apply persisted sizes from the layout tree once mp-splitter has built\n // its panel wrappers. mp-splitter's setPanelSizes interprets values as\n // pixel widths/heights; the dock's saved sizes are flex weights, so\n // convert using the splitter's measured cross-axis container size.\n const sizes = Array.isArray(node.sizes) ? node.sizes : [];\n if (sizes.length > 0) {\n requestAnimationFrame(() => {\n const totalWeight = sizes.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const containerSize =\n node.direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const px = sizes.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n });\n }\n\n // mp-splitter fires resize-end with pixel sizes after a divider drag.\n // Convert back to flex weights (sum to a stable total — keep current sum\n // so future renders interpret consistently) and persist to the layout tree.\n splitter.addEventListener('resize-end', (event) => {\n // resize-end bubbles, so a nested mp-splitter's drag end would also\n // reach this listener. Only react to events from THIS splitter, not\n // from a descendant — otherwise we'd apply the inner's sizes to the\n // outer's splitNode and mangle the outer's weights.\n if (event.target !== splitter) return;\n const detail = (event as CustomEvent<{ sizes: number[] }>).detail;\n if (!Array.isArray(detail?.sizes) || detail.sizes.length === 0) return;\n const splitNode = this.resolveSplitNode(splitPath);\n if (!splitNode) return;\n const previousTotal = (splitNode.sizes ?? []).reduce(\n (s, w) => s + Math.max(w, 0),\n 0,\n );\n const total = detail.sizes.reduce((s, v) => s + Math.max(v, 0), 0);\n const targetTotal = previousTotal > 0 ? previousTotal : detail.sizes.length;\n if (total > 0) {\n splitNode.sizes = detail.sizes.map(\n (px) => (Math.max(px, 0) / total) * targetTotal,\n );\n this.dispatchLayoutChanged();\n }\n });\n\n return splitter;\n }\n\n private renderStack(\n node: DockStackNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Dock stacks are rendered as <mp-tab-control>. The dock keeps `.dock-stack`\n // as a class on the host so existing `closest('.dock-stack')` queries\n // continue to resolve. The tab strip + body slot projection are owned by\n // mp-tab-control; the dock just provides the slotted header/content\n // elements and listens for tab-activate to drive layout-tree updates.\n const stack = this.documentRef.createElement('mp-tab-control') as HTMLElement;\n stack.classList.add('dock-stack');\n // Dock controls activation; tell mp-tab-control not to auto-pick.\n stack.setAttribute('select-first-tab', 'false');\n // `border=\"top\"` gives us the strip-cutout line under the tabs (so the\n // active tab visually punches through into the body) without adding the\n // full Bootstrap frame, which would double up with the dock's own outer\n // chrome border on `.dock-stack` (and on `.dock-floating` for floating\n // panels).\n stack.setAttribute('border', 'top');\n\n const location: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n stack.dataset['path'] = this.formatPath(location);\n\n const panes = Array.from(new Set(node.panes));\n if (panes.length === 0) {\n const emptyHeader = this.documentRef.createElement('span');\n emptyHeader.setAttribute('slot', '__empty__-header');\n emptyHeader.textContent = '(empty)';\n const empty = this.documentRef.createElement('div');\n empty.setAttribute('slot', '__empty__-content');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n stack.append(emptyHeader, empty);\n stack.setAttribute('active-tab', '__empty__');\n return stack;\n }\n\n const activePane = panes.includes(node.activePane ?? '')\n ? node.activePane!\n : panes[0];\n\n const baseSlug = path.length ? path.join('-') : 'root';\n const pathSlug =\n typeof floatingIndex === 'number' ? `f${floatingIndex}-${baseSlug}` : baseSlug;\n\n panes.forEach((paneName) => {\n const paneSlugRaw = paneName.replace(/[^a-zA-Z0-9_-]/g, '-');\n const paneSlug = paneSlugRaw.length > 0 ? paneSlugRaw : 'pane';\n const tabId = `${this.instanceId}-tab-${pathSlug}-${paneSlug}`;\n const panelId = `${this.instanceId}-panel-${pathSlug}-${paneSlug}`;\n\n // Header span — projected via mp-tab-control's `${tabId}-header` slot\n // into the strip's button content. Carries the dock's drag handlers.\n const headerSpan = this.documentRef.createElement('span');\n headerSpan.setAttribute('slot', `${tabId}-header`);\n headerSpan.classList.add('dock-tab');\n headerSpan.dataset['pane'] = paneName;\n headerSpan.dataset['tabId'] = tabId;\n headerSpan.textContent = this.titles[paneName] ?? paneName;\n\n // Pointer-only drag (no HTML5 dnd). pointerdown captures metrics + arms\n // a threshold gesture; once the pointer moves >threshold pixels we\n // promote it to a real pane drag via beginPaneDrag. Using pointer\n // events sidesteps the entire class of HTML5 dnd quirks (cancellation\n // when source DOM is removed mid-drag, suppressed mousemove, bogus 0/0\n // coordinates in Firefox, browser-specific drag-image behavior).\n headerSpan.addEventListener('pointerdown', (event) => {\n this.captureTabDragMetrics(event, stack);\n this.armPaneDragGesture(event, this.clonePath(location), paneName, stack);\n event.stopPropagation();\n // Do NOT call event.preventDefault() here. On touch, that suppresses\n // the synthesized click on the parent .nav-link button — which is how\n // mp-tab-control fires `tab-activate`. `touch-action: none` on\n // `.dock-tab` already prevents the browser from arbitrating the\n // gesture for scroll, so preventDefault would be redundant + harmful.\n });\n\n // Content wrapper — projected via mp-tab-control's `${tabId}-content`\n // slot only when this tab is active. Holds the dock manager's per-pane\n // <slot> for the consumer's content.\n const paneHost = this.documentRef.createElement('div');\n paneHost.setAttribute('slot', `${tabId}-content`);\n paneHost.classList.add('dock-stack__pane');\n paneHost.dataset['pane'] = paneName;\n paneHost.dataset['tabId'] = tabId;\n paneHost.id = panelId;\n\n const slotEl = this.documentRef.createElement('slot');\n slotEl.name = paneName;\n paneHost.appendChild(slotEl);\n\n stack.append(headerSpan, paneHost);\n\n if (paneName === activePane) {\n stack.setAttribute('active-tab', tabId);\n }\n });\n\n stack.dataset['activePane'] = activePane;\n\n // Drive activatePane from mp-tab-control's tab-activate event. We map the\n // tabId back to the original paneName via the header span's data-pane.\n stack.addEventListener('tab-activate', (event) => {\n const detail = (event as CustomEvent<{ tabId: string }>).detail;\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > [data-tab-id=\"${detail.tabId}\"]`,\n );\n const paneName = headerSpan?.dataset['pane'];\n if (paneName) {\n this.activatePane(stack, paneName, this.clonePath(location));\n this.dispatchEvent(\n new CustomEvent('dock-pane-activated', {\n detail: { pane: paneName },\n bubbles: true,\n composed: true,\n }),\n );\n }\n });\n\n return stack;\n }\n\n /**\n * Returns the strip (`.tsc`) element inside an `<mp-tab-control>`'s shadow\n * DOM. Used by drag/drop logic that needs the strip's geometry instead of\n * the host element's bounds.\n */\n private getStackStripEl(stack: HTMLElement): HTMLElement | null {\n if (stack.tagName !== 'MP-TAB-CONTROL') return null;\n return stack.shadowRoot?.querySelector<HTMLElement>('.tsc') ?? null;\n }\n\n /**\n * Returns the rendered tab buttons inside an `<mp-tab-control>`'s shadow\n * strip — the light-DOM `.dock-tab` spans the dock owns are projected into\n * these buttons via `<slot>`. Use these for geometry / position queries\n * (insert-index computation, drop-indicator placement). Use the light-DOM\n * `.dock-tab` spans for data queries (paneName, drag listeners).\n */\n private getStackTabButtons(stack: HTMLElement): HTMLButtonElement[] {\n if (stack.tagName !== 'MP-TAB-CONTROL') return [];\n return Array.from(\n stack.shadowRoot?.querySelectorAll<HTMLButtonElement>('button.nav-link') ?? [],\n );\n }\n\n /**\n * Returns the dividers inside an `<mp-splitter>`'s shadow DOM, in DOM order.\n * mp-splitter renders one `.divider` between each pair of adjacent panels,\n * so for an N-child split, length N-1.\n */\n private getSplitterDividers(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.divider') ?? [],\n );\n }\n\n /**\n * Returns the panel wrappers inside an `<mp-splitter>`'s shadow DOM, in\n * DOM order. These are the elements mp-splitter sizes (via setPanelSizes)\n * during a divider drag — the dock reads their geometry for intersection\n * handle math and snap markers.\n */\n private getSplitterPanels(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.panel-wrapper') ?? [],\n );\n }\n\n /**\n * Locate the rendered `<mp-splitter>` element for a given DockPath\n * `segments` value (the split-tree path). Searches the dock's shadow.\n */\n private findSplitterByPath(segments: number[]): HTMLElement | null {\n return (\n this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split[data-path=\"${segments.join('/')}\"]`,\n ) ?? null\n );\n }\n\n private onPointerMove(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.handleCornerResizeMove(event);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.handleFloatingResizeMove(event);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.handleFloatingDragMove(event);\n }\n }\n\n private onPointerUp(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.endCornerResize(event.pointerId);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.endFloatingDrag(event.pointerId);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.endFloatingResize(event.pointerId);\n }\n\n this.stopPointerTrackingIfIdle();\n }\n\n private captureTabDragMetrics(event: PointerEvent, stackEl: HTMLElement | null): void {\n if (!stackEl) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl.getBoundingClientRect();\n\n const pointerOffsetX = event.clientX - stackRect.left;\n const pointerOffsetY = event.clientY - stackRect.top;\n const left = stackRect.left - hostRect.left;\n const top = stackRect.top - hostRect.top;\n const width = Number.isFinite(stackRect.width) ? stackRect.width : 0;\n const height = Number.isFinite(stackRect.height) ? stackRect.height : 0;\n\n this.pendingTabDragMetrics = {\n pointerOffsetX,\n pointerOffsetY,\n left,\n top,\n width,\n height,\n startClientX: event.clientX,\n startClientY: event.clientY,\n };\n }\n\n private clearPendingTabDragMetrics(): void {\n this.pendingTabDragMetrics = null;\n }\n\n /**\n * Pointerdown handler arms a \"may become a drag\" gesture. Once the pointer\n * moves past `threshold` pixels we promote it to an actual pane drag via\n * {@link beginPaneDrag}; if the user releases first we just clear the\n * pending tab metrics. All listeners self-clean on resolve so the gesture\n * stays scoped to a single pointerdown.\n */\n private armPaneDragGesture(\n startEvent: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n if (startEvent.pointerType === 'mouse' && startEvent.button !== 0) return;\n const win = this.windowRef;\n if (!win) return;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n const pointerId = startEvent.pointerId;\n const threshold = 5;\n let resolved = false;\n\n const cleanup = (): void => {\n resolved = true;\n win.removeEventListener('pointermove', onMove, true);\n win.removeEventListener('pointerup', onRelease, true);\n win.removeEventListener('pointercancel', onRelease, true);\n };\n\n const onMove = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) < threshold) return;\n cleanup();\n this.beginPaneDrag(event, path, pane, stackEl);\n };\n\n const onRelease = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n win.addEventListener('pointermove', onMove, true);\n win.addEventListener('pointerup', onRelease, true);\n win.addEventListener('pointercancel', onRelease, true);\n }\n\n private beginPaneDrag(\n event: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n const {\n path: sourcePath,\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n } = this.preparePaneDragSource(path, pane, stackEl, event);\n\n // Capture header bounds for detecting when to convert to floating.\n // The strip lives inside the mp-tab-control's shadow as `.tsc`.\n const headerEl = stackEl ? this.getStackStripEl(stackEl) : null;\n const headerRect = headerEl ? headerEl.getBoundingClientRect() : null;\n const headerBounds = headerRect\n ? { left: headerRect.left, top: headerRect.top, right: headerRect.right, bottom: headerRect.bottom }\n : null;\n const metrics = this.pendingTabDragMetrics;\n\n this.dragState = {\n pane,\n sourcePath: this.clonePath(sourcePath),\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n dropHandled: false,\n sourceStackEl: stackEl,\n sourceHeaderBounds: headerBounds,\n startClientX:\n metrics && Number.isFinite(metrics.startClientX)\n ? metrics.startClientX\n : event.clientX,\n startClientY:\n metrics && Number.isFinite(metrics.startClientY)\n ? metrics.startClientY\n : event.clientY,\n };\n this.lastDragPointerPosition = {\n x: this.dragState.startClientX as number,\n y: this.dragState.startClientY as number,\n };\n // pointerOffsetX/Y from preparePaneDragSource is the offset within the\n // source stack rect captured at pointerdown by captureTabDragMetrics.\n // Don't overwrite with event.offsetX/Y here — the threshold-trigger\n // pointermove fired on window, so its offset is in window-local coords\n // (≈ clientX/Y) which would crash the conversion math to ~(0,0).\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n this.startDragPointerTracking();\n // Mark the source floating wrapper (if any) so its CSS rule kicks in and\n // pointer-events:none lets findStackAtPoint see through to the docked\n // stack underneath, enabling drop zones over the dock during the drag.\n this.markDraggedFloatingWrapper();\n\n // Preferred UX: if the dragged tab is the only one in its stack,\n // immediately convert to a floating window unless it is already the\n // only pane in a floating window (this case is handled by reuse logic).\n if (this.dragState && this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const loc = this.resolveStackLocation(this.dragState.sourcePath);\n if (loc && Array.isArray(loc.node.panes) && loc.node.panes.length === 1) {\n let shouldConvert = false;\n if (loc.context === 'docked') {\n shouldConvert = true;\n } else if (loc.context === 'floating') {\n const floating = this.floatingLayouts[loc.index];\n const totalPanes = floating && floating.root ? this.countPanesInTree(floating.root) : 0;\n shouldConvert = totalPanes > 1;\n }\n if (shouldConvert) {\n this.convertPendingTabDragToFloating(event.clientX, event.clientY);\n }\n }\n }\n }\n\n private preparePaneDragSource(\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n event: PointerEvent,\n ): { path: DockPath; floatingIndex: number | null; pointerOffsetX: number; pointerOffsetY: number } {\n const location = this.resolveStackLocation(path);\n if (!location || !location.node.panes.includes(pane)) {\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n const metrics = this.pendingTabDragMetrics;\n\n const domHasSibling =\n !!stackEl &&\n Array.from(stackEl.querySelectorAll<HTMLElement>('.dock-tab')).some(\n (button) => button.dataset['pane'] && button.dataset['pane'] !== pane,\n );\n\n const hasSiblingInStack = location.node.panes.some((existing) => existing !== pane);\n const floating = location.context === 'floating' ? this.floatingLayouts[location.index] : null;\n const floatingPaneCount =\n floating && floating.root ? this.countPanesInTree(floating.root) : hasSiblingInStack ? 2 : 1;\n const shouldReuseExistingWindow =\n location.context === 'floating' &&\n !!floating &&\n !hasSiblingInStack &&\n !domHasSibling &&\n floatingPaneCount <= 1;\n\n if (shouldReuseExistingWindow) {\n if (floating) {\n floating.activePane = pane;\n this.updateFloatingWindowTitle(location.index);\n const wrapper = this.getFloatingWrapper(location.index);\n if (wrapper) {\n this.promoteFloatingPane(location.index, wrapper);\n }\n const hostRect = this.getBoundingClientRect();\n const pointerOffsetX =\n metrics &&\n Number.isFinite(metrics.pointerOffsetX) &&\n Number.isFinite(metrics.left) &&\n Number.isFinite(floating.bounds.left)\n ? metrics.pointerOffsetX + (metrics.left - floating.bounds.left)\n : Number.isFinite(event.clientX) && Number.isFinite(floating.bounds.left)\n ? event.clientX - hostRect.left - floating.bounds.left\n : floating.bounds.width / 2;\n const pointerOffsetY =\n metrics &&\n Number.isFinite(metrics.pointerOffsetY) &&\n Number.isFinite(metrics.top) &&\n Number.isFinite(floating.bounds.top)\n ? metrics.pointerOffsetY + (metrics.top - floating.bounds.top)\n : Number.isFinite(event.clientY) && Number.isFinite(floating.bounds.top)\n ? event.clientY - hostRect.top - floating.bounds.top\n : floating.bounds.height / 2;\n return {\n path,\n floatingIndex: location.index,\n pointerOffsetX,\n pointerOffsetY,\n };\n }\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n // Do not convert to floating yet; allow in-header reordering first.\n // We return placeholder values and will convert once the pointer leaves the tab header.\n const pointerOffsetXVal =\n metrics && Number.isFinite(metrics.pointerOffsetX)\n ? metrics.pointerOffsetX\n : 0;\n const pointerOffsetYVal =\n metrics && Number.isFinite(metrics.pointerOffsetY)\n ? metrics.pointerOffsetY\n : 0;\n\n return {\n path,\n floatingIndex: -1,\n pointerOffsetX: pointerOffsetXVal,\n pointerOffsetY: pointerOffsetYVal,\n };\n }\n\n private endPaneDrag(): void {\n this.clearPendingDragEndTimeout();\n // Restore the dragged tab's `data-hidden` and remove the placeholder span\n // BEFORE we null out dragState — clearHeaderDragPlaceholder reads\n // `dragState.placeholderEl`, `dragState.placeholderHeader`, and\n // `dragState.pane` to know what to restore. If dragState is nulled first,\n // this becomes a silent no-op and the dragged pane stays hidden in its\n // source stack while the placeholder span lingers in the strip — which\n // is exactly the \"Panel disappears, only a small tab-thumb remains\"\n // regression the multi-pane drag-out path can otherwise trigger when\n // no renderLayout() runs between conversion and end (e.g. user releases\n // outside any drop zone, or HTML5 dragend fires without a drop).\n this.clearHeaderDragPlaceholder();\n this.clearDraggedFloatingWrapperMarkers();\n const state = this.dragState;\n this.dragState = null;\n this.hideDropIndicator();\n this.stopDragPointerTracking();\n this.lastDragPointerPosition = null;\n if (state && state.floatingIndex !== null && !state.dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateDraggedFloatingPositionFromPoint(\n clientX: number,\n clientY: number,\n ): void {\n if (!this.dragState) {\n return;\n }\n\n if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) {\n return;\n }\n\n // If still dragging a tab inside its header, only convert to floating once we leave the header.\n if (this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const b = this.dragState.sourceHeaderBounds;\n const sx = this.dragState.startClientX ?? clientX;\n const sy = this.dragState.startClientY ?? clientY;\n const dist = Math.hypot(clientX - sx, clientY - sy);\n const threshold = 8; // pixels to move before converting (tuned up)\n // Default to inside while bounds are unknown to avoid premature floating\n let insideHeader = true;\n const insideByBounds = b ? this.isPointWithinBounds(b, clientX, clientY) : true;\n const insideByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n insideHeader = insideByBounds || insideByHitTest;\n if (!insideHeader && dist > threshold) {\n // Convert to floating now using current pointer position\n this.convertPendingTabDragToFloating(clientX, clientY);\n }\n }\n\n this.updatePaneDragDropTargetFromPoint(clientX, clientY);\n\n const { floatingIndex, pointerOffsetX, pointerOffsetY } = this.dragState;\n if (floatingIndex === null || floatingIndex < 0) {\n return;\n }\n\n const floating = this.floatingLayouts[floatingIndex];\n if (!floating) {\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const newLeft = clientX - hostRect.left - pointerOffsetX;\n const newTop = clientY - hostRect.top - pointerOffsetY;\n\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n\n const wrapper = this.getFloatingWrapper(floatingIndex);\n if (wrapper) {\n wrapper.style.left = `${newLeft}px`;\n wrapper.style.top = `${newTop}px`;\n }\n }\n\n private updatePaneDragDropTargetFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n\n const stack = this.findStackAtPoint(clientX, clientY);\n const path = stack ? this.parsePath(stack.dataset['path']) : null;\n if (!stack || !path) {\n // While actively dragging, avoid hiding the indicator if it is visible.\n // Transient misses from hit-testing are common near the joystick.\n if (this.dropJoystick.dataset['visible'] !== 'true') {\n this.hideDropIndicator();\n }\n // Also ensure any in-header placeholder is cleared when not over a stack\n this.clearHeaderDragPlaceholder();\n return;\n }\n\n // If we moved to a different target stack, reset any sticky zone so\n // the new drop area doesn't inherit the previous side selection.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n // Previous behavior hid the indicator and returned early here; instead,\n // allow the live-reorder branch below to handle in-header drags.\n\n // While dragging within the same header, show a placeholder and suppress joystick/indicator\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n path &&\n this.pathsEqual(path, this.dragState.sourcePath)\n ) {\n const inHeaderByBounds = !!this.dragState.sourceHeaderBounds && this.isPointWithinBounds(this.dragState.sourceHeaderBounds, clientX, clientY);\n const inHeaderByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n if (inHeaderByBounds || inHeaderByHitTest) {\n // Ensure placeholder exists and move it as the pointer moves.\n // Placeholder management mutates the slotted children of the\n // mp-tab-control stack; the WC re-renders the strip on slotchange.\n this.ensureHeaderDragPlaceholder(stack, this.dragState.pane);\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n if (this.dragState.liveReorderIndex !== idx) {\n this.updateHeaderDragPlaceholderPosition(stack, idx);\n // Keep model reordering until drop; only move the placeholder now\n this.dragState.liveReorderIndex = idx;\n }\n this.hideDropIndicator();\n return;\n }\n }\n\n // Leaving the header: ensure any placeholder is removed immediately\n this.clearHeaderDragPlaceholder();\n\n const zoneHint = this.findDropZoneByPoint(clientX, clientY);\n const zone = this.computeDropZone(stack, { clientX, clientY }, zoneHint);\n this.showDropIndicator(stack, zone);\n }\n\n // Returns true when the pointer is currently over the source stack's header (tab strip).\n // The strip lives inside the mp-tab-control's shadow as `.tsc`, so we test\n // bounds directly rather than using elementsFromPoint(/contains) which won't\n // pierce the shadow boundary cleanly.\n private isPointerOverSourceHeader(clientX: number, clientY: number): boolean {\n const state = this.dragState;\n if (!state) {\n return false;\n }\n const stackEl = state.sourceStackEl ?? null;\n const strip = stackEl ? this.getStackStripEl(stackEl) : null;\n if (!strip) {\n // Be conservative: if we cannot resolve the strip, treat as inside\n return true;\n }\n const r = strip.getBoundingClientRect();\n return clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom;\n }\n\n private isPointWithinBounds(\n bounds: { left: number; right: number; top: number; bottom: number },\n x: number,\n y: number,\n ): boolean {\n return x >= bounds.left && x <= bounds.right && y >= bounds.top && y <= bounds.bottom;\n }\n\n // Ensure a placeholder tab exists during in-header drag and hide the real dragged tab visually.\n // Operates on the mp-tab-control stack: the dragged content div gets `data-hidden`\n // (mp-tab-control then skips its tab in the strip), and a placeholder header+content\n // pair is appended as light-DOM children of the stack. mp-tab-control's mutation\n // observer picks up the change and renders the placeholder as a tab.\n private ensureHeaderDragPlaceholder(stack: HTMLElement, pane: string): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n if (this.dragState?.placeholderHeader === stack && this.dragState.placeholderEl) {\n return;\n }\n const draggedHeader = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n if (!draggedHeader || !draggedContent) return;\n\n // Measure the dragged tab's text-only width BEFORE hiding it. The\n // `.dock-tab` rule applies padding (matching the strip button's padding so\n // the span fills the button as a drag handle), so `offsetWidth` is\n // text + padding — we subtract the span's own padding to get just the\n // text width. That's the natural slot content width we want the\n // placeholder to reserve; the placeholder span will re-apply the same\n // padding on top, mirroring the original tab's geometry exactly.\n const draggedCS = this.windowRef\n ? this.windowRef.getComputedStyle(draggedHeader)\n : globalThis.getComputedStyle(draggedHeader);\n const draggedHorizontalPadding =\n parseFloat(draggedCS.paddingLeft) + parseFloat(draggedCS.paddingRight);\n const slotContentWidth = Math.max(\n 0,\n draggedHeader.offsetWidth - draggedHorizontalPadding,\n );\n\n // Hide the dragged tab from mp-tab-control's strip (frees up the slot).\n draggedContent.setAttribute('data-hidden', '');\n\n // Build placeholder header + content. The placeholder uses a unique tabId\n // (`__dock-placeholder__`) so its slot names don't collide with real panes.\n // We mirror the dragged tab's text into the placeholder (dimmed via opacity)\n // so the strip reads as \"this tab is being dragged\" rather than \"empty slot\".\n const placeholderTabId = '__dock-placeholder__';\n const phHeader = this.documentRef.createElement('span');\n phHeader.setAttribute('slot', `${placeholderTabId}-header`);\n phHeader.classList.add('dock-tab');\n phHeader.dataset['placeholder'] = 'true';\n phHeader.dataset['tabId'] = placeholderTabId;\n phHeader.setAttribute('aria-hidden', 'true');\n phHeader.textContent = draggedHeader.textContent;\n // `display: inline-block` is required for `min-width` to take effect on the\n // span. Without it, an inline element ignores min-width and the placeholder\n // collapses to its content width (or 0 if textContent is also empty),\n // leaving a \"mini-thumb\" in the strip.\n phHeader.style.display = 'inline-block';\n phHeader.style.minWidth = `${slotContentWidth}px`;\n phHeader.style.opacity = '0.5';\n\n const phContent = this.documentRef.createElement('div');\n phContent.setAttribute('slot', `${placeholderTabId}-content`);\n phContent.classList.add('dock-stack__pane');\n phContent.dataset['placeholder'] = 'true';\n\n // Insert before the dragged header span so the placeholder appears in\n // the dragged tab's original strip position. The mutation observer in\n // mp-tab-control will refresh the tab list automatically.\n stack.insertBefore(phHeader, draggedHeader);\n stack.insertBefore(phContent, draggedContent);\n\n if (this.dragState) {\n this.dragState.placeholderHeader = stack;\n this.dragState.placeholderEl = phHeader;\n }\n }\n\n // Move the placeholder to the computed target index within the strip.\n // We reorder light-DOM children (header span + matching content div); the\n // mp-tab-control then re-renders the strip in the new order on slotchange.\n private updateHeaderDragPlaceholderPosition(stack: HTMLElement, targetIndex: number): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n const phHeader = this.dragState?.placeholderEl ?? null;\n if (!phHeader) return;\n\n const draggedPane = this.dragState?.pane ?? null;\n // Find all real header spans (excluding the placeholder + the hidden dragged one).\n const realHeaders = Array.from(\n stack.querySelectorAll<HTMLElement>(':scope > .dock-tab'),\n ).filter(\n (h) =>\n h !== phHeader &&\n (!draggedPane || h.dataset['pane'] !== draggedPane),\n );\n const clampedTarget = Math.max(0, Math.min(targetIndex, realHeaders.length));\n const ref = realHeaders[clampedTarget] ?? null;\n stack.insertBefore(phHeader, ref);\n\n // Keep the placeholder content adjacent to its header so child-order\n // remains predictable for slotchange-driven re-renders.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n if (phContent && phHeader.nextElementSibling !== phContent) {\n stack.insertBefore(phContent, phHeader.nextElementSibling);\n }\n }\n\n // Remove placeholder and restore the dragged tab's visibility.\n private clearHeaderDragPlaceholder(): void {\n const ph = this.dragState?.placeholderEl ?? null;\n const stack = this.dragState?.placeholderHeader ?? null;\n if (stack) {\n // Restore the dragged content div's visibility so its strip tab returns.\n if (this.dragState?.pane) {\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(this.dragState.pane)}\"]`,\n );\n draggedContent?.removeAttribute('data-hidden');\n }\n // Remove the placeholder content div sibling.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n phContent?.remove();\n }\n if (ph && ph.parentElement) {\n ph.parentElement.removeChild(ph);\n }\n if (this.dragState) {\n this.dragState.placeholderEl = null;\n this.dragState.placeholderHeader = null;\n }\n }\n\n private startDragPointerTracking(): void {\n if (this.dragPointerTrackingActive) {\n return;\n }\n this.lastDragPointerPosition = null;\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onDragPointerMove, true);\n win?.addEventListener('pointerup', this.onDragPointerUp, true);\n win?.addEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = true;\n }\n\n private stopDragPointerTracking(): void {\n if (!this.dragPointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onDragPointerMove, true);\n win?.removeEventListener('pointerup', this.onDragPointerUp, true);\n win?.removeEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.clearPendingDragEndTimeout();\n }\n\n private onDragPointerMove(event: PointerEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.lastDragPointerPosition = { x: event.clientX, y: event.clientY };\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n }\n\n private onDragPointerUp(event: PointerEvent): void {\n // Commit the drop from pointer release; the pointer-up coordinates are\n // authoritative for which stack/zone the user dropped into.\n if (this.dragState) {\n const x = Number.isFinite(event.clientX) ? event.clientX : this.lastDragPointerPosition?.x;\n const y = Number.isFinite(event.clientY) ? event.clientY : this.lastDragPointerPosition?.y;\n if (x !== undefined && y !== undefined) {\n this.finalizeDropFromPoint(x, y);\n }\n }\n this.handleDragPointerUpCommon();\n }\n\n private onDragPointerCancel(): void {\n // OS-level cancel (e.g. pointer capture lost): end the drag without\n // committing a drop.\n this.handleDragPointerUpCommon();\n }\n\n // Convert a currently in-header tab drag into a floating window\n private convertPendingTabDragToFloating(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const state = this.dragState;\n if (state.floatingIndex !== null && state.floatingIndex >= 0) {\n return; // already floating\n }\n // Clean up any placeholder before converting\n this.clearHeaderDragPlaceholder();\n const location = this.resolveStackLocation(state.sourcePath);\n if (!location) {\n return;\n }\n\n const pane = state.pane;\n const stackEl = state.sourceStackEl ?? null;\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl?.getBoundingClientRect() ?? null;\n const metrics = this.pendingTabDragMetrics;\n\n const fallbackWidth = 320;\n const fallbackHeight = 240;\n const width =\n metrics && Number.isFinite(metrics.width) && metrics.width > 0\n ? metrics.width\n : stackRect && Number.isFinite(stackRect.width)\n ? stackRect.width\n : fallbackWidth;\n const height =\n metrics && Number.isFinite(metrics.height) && metrics.height > 0\n ? metrics.height\n : stackRect && Number.isFinite(stackRect.height)\n ? stackRect.height\n : fallbackHeight;\n\n // Place the floating wrapper exactly where the docked stack was, so the\n // pane appears in-place at the moment of detach instead of jumping under\n // the cursor. metrics.left/top are host-relative (captured at pointerdown\n // in captureTabDragMetrics). Compensate for the floating wrapper's 1px\n // border so the visible content edge lines up with the original stack's\n // visible content edge (the docked .dock-stack also has a 1px border, so\n // the inner content rectangles match after this offset).\n const FLOATING_BORDER = 1;\n const initialLeft =\n metrics && Number.isFinite(metrics.left)\n ? metrics.left - FLOATING_BORDER\n : Number.isFinite(clientX)\n ? clientX - hostRect.left - width / 2\n : 0;\n const initialTop =\n metrics && Number.isFinite(metrics.top)\n ? metrics.top - FLOATING_BORDER\n : Number.isFinite(clientY)\n ? clientY - hostRect.top - height / 2\n : 0;\n\n // Derive pointerOffset from the cursor's actual position relative to the\n // freshly-placed wrapper (not from pointerdown metrics) so the very next\n // pointermove translates into a wrapper move of exactly the cursor delta\n // — no jump, no drift.\n const pointerOffsetX = Number.isFinite(clientX)\n ? clientX - hostRect.left - initialLeft\n : width / 2;\n const pointerOffsetY = Number.isFinite(clientY)\n ? clientY - hostRect.top - initialTop\n : height / 2;\n\n // Remove pane from its current stack and create a new floating entry\n this.removePaneFromLocation(location, pane);\n const floatingStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n const floatingLayout: DockFloatingStackLayout = {\n bounds: {\n left: initialLeft,\n top: initialTop,\n width,\n height,\n },\n root: floatingStack,\n activePane: pane,\n };\n\n this.floatingLayouts.push(floatingLayout);\n const newIndex = this.floatingLayouts.length - 1;\n this.renderLayout();\n const wrapper = this.getFloatingWrapper(newIndex);\n if (wrapper) {\n this.promoteFloatingPane(newIndex, wrapper);\n }\n // Update drag state so subsequent moves reposition the floating window\n state.sourcePath = { type: 'floating', index: newIndex, segments: [] };\n state.floatingIndex = newIndex;\n state.pointerOffsetX = pointerOffsetX;\n state.pointerOffsetY = pointerOffsetY;\n // Now that the wrapper exists, mark it so pointer-events:none kicks in\n // and findStackAtPoint can see through to docked stacks underneath.\n this.markDraggedFloatingWrapper();\n this.dispatchLayoutChanged();\n }\n\n // Toggle data-dragging on the floating wrapper currently associated with\n // the active pane drag (dragState.floatingIndex), if any. Used to make the\n // wrapper transparent to elementsFromPoint so drop zones can be shown on\n // stacks underneath. clearDraggedFloatingWrapper() is the inverse.\n private markDraggedFloatingWrapper(): void {\n const fi = this.dragState?.floatingIndex;\n if (fi === null || fi === undefined || fi < 0) return;\n const wrapper = this.getFloatingWrapper(fi);\n if (wrapper) wrapper.dataset['dragging'] = 'true';\n }\n\n private clearDraggedFloatingWrapperMarkers(): void {\n const layer = this.floatingLayerEl;\n if (!layer) return;\n layer.querySelectorAll<HTMLElement>('.dock-floating[data-dragging=\"true\"]').forEach((el) => {\n delete el.dataset['dragging'];\n });\n }\n\n // Compute the intended tab insert index within a stack's strip based on pointer X.\n // Uses the rendered tab buttons inside mp-tab-control's shadow strip for geometry;\n // the dragged tab is hidden during drag (its content has data-hidden), and the\n // placeholder button (if present) gives us the dragged-position reference.\n private computeHeaderInsertIndex(stack: HTMLElement, clientX: number): number {\n if (stack.tagName !== 'MP-TAB-CONTROL') return 0;\n const allTabButtons = this.getStackTabButtons(stack);\n if (allTabButtons.length === 0) {\n return 0;\n }\n\n const placeholderHeader = stack.querySelector<HTMLElement>(\n ':scope > .dock-tab[data-placeholder=\"true\"]',\n );\n const placeholderTabId = placeholderHeader?.dataset['tabId'];\n const placeholderButton = placeholderTabId\n ? allTabButtons.find((b) => b.id === `${placeholderTabId}-header-button`) ?? null\n : null;\n\n const targets = allTabButtons.filter((b) => b !== placeholderButton);\n if (targets.length === 0) {\n return 0;\n }\n\n const rightBias = 12;\n const leftBias = 0;\n\n const baseRect = placeholderButton ? placeholderButton.getBoundingClientRect() : null;\n const rectValid = !!baseRect && Number.isFinite(baseRect.width) && baseRect.width > 0;\n const draggedCenter = rectValid && baseRect ? baseRect.left + baseRect.width / 2 : null;\n\n for (let i = 0; i < targets.length; i += 1) {\n const rect = targets[i].getBoundingClientRect();\n const baseMid = rect.left + rect.width / 2;\n const isRightOfDragged = draggedCenter !== null ? baseMid >= draggedCenter : false;\n const mid = isRightOfDragged ? baseMid + rightBias : baseMid - leftBias;\n if (clientX < mid) {\n return i;\n }\n }\n return targets.length;\n }\n\n private reorderPaneInLocationAtIndex(location: ResolvedLocation, pane: string, targetIndex: number): void {\n const panes = location.node.panes;\n const currentIndex = panes.indexOf(pane);\n if (currentIndex === -1) {\n return;\n }\n const clampedTarget = Math.max(0, Math.min(targetIndex, panes.length - 1));\n if (clampedTarget === currentIndex) {\n return;\n }\n panes.splice(currentIndex, 1);\n panes.splice(clampedTarget, 0, pane);\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n // Commit a drop using current pointer coordinates and joystick state\n private finalizeDropFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const stack = this.findStackAtPoint(clientX, clientY);\n const stackPath = stack ? this.parsePath(stack.dataset['path']) : null;\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickStoredPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n const path = (joystickVisible ? (joystickStoredPath ?? joystickTargetPath) : null) ?? stackPath;\n\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const zone: DropZone | null = this.isDropZone(joystickZone)\n ? joystickZone\n : (stack ? this.computeDropZone(stack, { clientX, clientY }, null) : null);\n\n // Same-header reorder case when no side zone is chosen\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n stack &&\n path &&\n stackPath &&\n this.pathsEqual(stackPath, this.dragState.sourcePath) &&\n (!zone || zone === 'center')\n ) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.renderLayout();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n return;\n }\n }\n\n if (path && this.isDropZone(zone)) {\n this.handleDrop(path, zone!);\n this.dragState.dropHandled = true;\n }\n }\n\n private clearPendingDragEndTimeout(): void {\n if (this.pendingDragEndTimeout !== null) {\n const win = this.windowRef;\n if (win && typeof this.pendingDragEndTimeout === 'number') {\n win.clearTimeout(this.pendingDragEndTimeout);\n } else {\n globalThis.clearTimeout(this.pendingDragEndTimeout);\n }\n this.pendingDragEndTimeout = null;\n }\n }\n\n private scheduleDeferredDragEnd(): void {\n if (this.pendingDragEndTimeout !== null) {\n return;\n }\n\n const completeDrag = () => {\n this.pendingDragEndTimeout = null;\n this.hideDropIndicator();\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n };\n\n const win = this.windowRef;\n this.pendingDragEndTimeout = win\n ? win.setTimeout(completeDrag, 0)\n : setTimeout(completeDrag, 0);\n }\n\n private handleDrop(targetPath: DockPath | null, zone: DropZone): void {\n if (!this.dragState || !targetPath) {\n return;\n }\n\n const { pane, sourcePath } = this.dragState;\n \n const source = this.resolveStackLocation(sourcePath);\n const target = this.resolveStackLocation(targetPath);\n\n // Special case: allow dropping onto an empty main dock area (no root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n if (!source) {\n return;\n }\n const stackEmptied = this.removePaneFromLocation(source, pane, true);\n const newRoot: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n this.rootLayout = newRoot;\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n if (!source || !target) {\n return;\n }\n\n if (zone === 'center' && this.pathsEqual(sourcePath, targetPath)) {\n if (!source.node.panes.includes(pane)) {\n return;\n }\n this.reorderPaneInLocation(source, pane);\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n const stackEmptied = this.removePaneFromLocation(source, pane, true);\n\n if (zone === 'center') {\n this.addPaneToLocation(target, pane);\n this.setActivePaneForLocation(target, pane);\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n const newStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n if (target.context === 'docked') {\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, newStack, zone);\n } else {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.renderLayout();\n this.dispatchLayoutChanged();\n return;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, newStack, zone);\n floating.activePane = pane;\n }\n\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n \n }\n\n private handleFloatingStackDrop(sourceIndex: number, targetPath: DockPath, zone: DropZone): boolean {\n const source = this.floatingLayouts[sourceIndex];\n if (!source || !source.root) {\n return false;\n }\n\n const target = this.resolveStackLocation(targetPath);\n // Allow dropping an entire floating stack onto an empty main dock area\n // (no existing root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n this.rootLayout = this.cloneLayoutNode(source.root);\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n if (!target) {\n return false;\n }\n\n if (target.context === 'floating' && target.index === sourceIndex) {\n return false;\n }\n\n if (zone === 'center') {\n const panes = this.collectPaneNames(source.root);\n if (panes.length === 0) {\n return false;\n }\n\n panes.forEach((pane) => {\n this.addPaneToLocation(target, pane);\n });\n\n const activePane =\n source.activePane && panes.includes(source.activePane)\n ? source.activePane\n : this.findFirstPaneName(source.root) ?? panes[0];\n\n if (activePane) {\n this.setActivePaneForLocation(target, activePane);\n }\n\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n if (target.context === 'floating') {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n return false;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, source.root, zone);\n floating.activePane = source.activePane ?? this.findFirstPaneName(source.root) ?? undefined;\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, source.root, zone);\n this.removeFloatingAt(sourceIndex);\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n private insertWeight(sizes: number[] | undefined, index: number, totalChildren: number): number[] {\n const existingCount = totalChildren - 1;\n const normalized = this.normalizeSizesArray(sizes, existingCount);\n const newWeight = 1 / totalChildren;\n const remaining = 1 - newWeight;\n const result: number[] = [];\n for (let i = 0; i < totalChildren; i += 1) {\n if (i === index) {\n result.push(newWeight);\n } else {\n const sourceIndex = i < index ? i : i - 1;\n result.push(normalized[sourceIndex] * remaining);\n }\n }\n return result;\n }\n\n private removePaneFromStack(stack: DockStackNode, pane: string, skipCleanup = false): boolean {\n stack.panes = stack.panes.filter((p) => p !== pane);\n if (!stack.panes.includes(stack.activePane ?? '')) {\n if (stack.panes.length > 0) {\n stack.activePane = stack.panes[0];\n } else {\n delete stack.activePane;\n }\n }\n\n if (stack.panes.length > 0) {\n return false;\n }\n\n if (skipCleanup) {\n return true;\n }\n\n this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, stack);\n return true;\n }\n\n private findParentSplit(\n node: DockLayoutNode | null,\n child: DockLayoutNode,\n ): { parent: DockSplitNode; index: number } | null {\n if (!node || node === child) {\n return null;\n }\n\n if (node.kind !== 'split') {\n return null;\n }\n\n const index = node.children.indexOf(child);\n if (index !== -1) {\n return { parent: node, index };\n }\n\n for (let i = 0; i < node.children.length; i += 1) {\n const result = this.findParentSplit(node.children[i], child);\n if (result) {\n return result;\n }\n }\n\n return null;\n }\n\n private computeDropZone(\n stack: HTMLElement,\n point: { clientX: number; clientY: number } | null,\n zoneHint?: DropZone | null,\n ): DropZone | null {\n // Do not force a zone: even when the main area is empty we only\n // activate a zone when the pointer is actually over a joystick button.\n const hintedZone = this.isDropZone(zoneHint) ? zoneHint : null;\n if (hintedZone) {\n this.updateDropJoystickActiveZone(hintedZone);\n return hintedZone;\n }\n\n const pointZone =\n point &&\n Number.isFinite(point.clientX) &&\n Number.isFinite(point.clientY)\n ? this.findDropZoneByPoint(point.clientX, point.clientY)\n : null;\n\n if (pointZone) {\n this.updateDropJoystickActiveZone(pointZone);\n return pointZone;\n }\n\n if (this.dropJoystickTarget === stack) {\n // Be sticky while hovering the joystick: if we recently had a zone\n // selected, prefer keeping it instead of briefly clearing to null\n // when the browser reports transient coordinates/targets during drag.\n const sticky = this.dropJoystick.dataset['zone'];\n if (this.isDropZone(sticky)) {\n this.updateDropJoystickActiveZone(sticky);\n return sticky;\n }\n this.updateDropJoystickActiveZone(null);\n }\n\n return null;\n }\n\n private extractDropZoneFromEvent(event: Event): DropZone | null {\n if (!event) {\n return null;\n }\n\n if (typeof event.composedPath === 'function') {\n const path = event.composedPath();\n const zone = this.findDropZoneInTargets(path);\n if (zone) {\n return zone;\n }\n }\n\n if ('clientX' in event && 'clientY' in event) {\n const pointEvent = event as MouseEvent;\n const zoneFromPoint = this.findDropZoneByPoint(pointEvent.clientX, pointEvent.clientY);\n if (zoneFromPoint) {\n return zoneFromPoint;\n }\n }\n\n return null;\n }\n\n private handleDragPointerUpCommon(): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.scheduleDeferredDragEnd();\n }\n\n private findDropZoneInTargets(targets: Iterable<EventTarget>): DropZone | null {\n for (const target of targets) {\n if (\n target instanceof HTMLElement &&\n target.classList.contains('dock-drop-joystick__button')\n ) {\n const zone = target.dataset?.['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n return null;\n }\n\n private findDropZoneByPoint(clientX: number, clientY: number): DropZone | null {\n if (\n !this.dropJoystickButtons ||\n this.dropJoystick.dataset['visible'] !== 'true' ||\n !this.dropJoystickTarget\n ) {\n return null;\n }\n\n for (const button of this.dropJoystickButtons) {\n // Skip hidden/inactive buttons (used in center-only mode)\n if ((button.dataset['hidden'] === 'true') || button.style.visibility === 'hidden' || button.style.display === 'none') {\n continue;\n }\n const rect = button.getBoundingClientRect();\n if (\n clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom\n ) {\n const zone = button.dataset['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n\n return null;\n }\n\n private updateDropJoystickActiveZone(zone: DropZone | null): void {\n // If no zone is computed but the joystick is visible, keep the last\n // known active zone to avoid visual jitter while dragging across\n // small gaps where hit‑testing momentarily fails.\n const visible = this.dropJoystick.dataset['visible'] === 'true';\n const sticky = visible ? this.dropJoystick.dataset['zone'] : undefined;\n const effectiveZone: DropZone | null = zone ?? (this.isDropZone(sticky) ? sticky : null);\n\n this.dropJoystickButtons.forEach((button) => {\n const isActive = effectiveZone !== null && button.dataset['zone'] === effectiveZone;\n if (isActive) {\n button.dataset['active'] = 'true';\n } else {\n delete button.dataset['active'];\n }\n });\n if (effectiveZone) {\n this.dropJoystick.dataset['zone'] = effectiveZone;\n } else {\n delete this.dropJoystick.dataset['zone'];\n }\n }\n\n private isDropZone(value: string | null | undefined): value is DropZone {\n return value === 'left' || value === 'right' || value === 'top' || value === 'bottom' || value === 'center';\n }\n\n private showDropIndicator(stack: HTMLElement, zone: DropZone | null): void {\n const targetPath = this.parsePath(stack.dataset['path']);\n const sourcePath = this.dragState?.sourcePath ?? null;\n if (targetPath && sourcePath && this.isOrIsAncestorOf(targetPath, sourcePath)) {\n // Don't show any drop indicators on the pane being dragged.\n return;\n }\n\n const rect = stack.getBoundingClientRect();\n const hostRect = this.getBoundingClientRect();\n const indicator = this.dropIndicator;\n const joystick = this.dropJoystick;\n\n joystick.hidden = false;\n\n const path = this.parsePath(stack.dataset['path']);\n let overlayZ = 100;\n if (path && path.type === 'floating') {\n overlayZ = this.getFloatingPaneZIndex(path.index) + 100;\n }\n indicator.style.zIndex = String(overlayZ);\n joystick.style.zIndex = String(overlayZ + 1);\n\n let left = rect.left - hostRect.left;\n let top = rect.top - hostRect.top;\n let width = rect.width;\n let height = rect.height;\n\n const portion = 0.5;\n\n if (zone) {\n switch (zone) {\n case 'left':\n width = rect.width * portion;\n break;\n case 'right':\n width = rect.width * portion;\n left += rect.width * (1 - portion);\n break;\n case 'top':\n height = rect.height * portion;\n break;\n case 'bottom':\n height = rect.height * portion;\n top += rect.height * (1 - portion);\n break;\n default:\n break;\n }\n\n indicator.style.left = `${left}px`;\n indicator.style.top = `${top}px`;\n indicator.style.width = `${width}px`;\n indicator.style.height = `${height}px`;\n indicator.dataset['visible'] = 'true';\n } else {\n indicator.dataset['visible'] = 'false';\n }\n\n joystick.style.left = `${rect.left - hostRect.left + rect.width / 2}px`;\n joystick.style.top = `${rect.top - hostRect.top + rect.height / 2}px`;\n joystick.dataset['visible'] = 'true';\n this.dropJoystick.style.display = 'grid';\n joystick.dataset['path'] = stack.dataset['path'] ?? '';\n const changedTarget = this.dropJoystickTarget && this.dropJoystickTarget !== stack;\n this.dropJoystickTarget = stack;\n if (changedTarget) {\n // New target stack: forget any previously sticky zone.\n delete this.dropJoystick.dataset['zone'];\n }\n\n // If main dock area is empty, show only the center button and collapse the grid\n const isEmptyMainArea = !this.rootLayout && (stack === this.dockedEl || (targetPath && targetPath.type === 'docked' && targetPath.segments.length === 0));\n const spacers = Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer'));\n if (isEmptyMainArea) {\n // Keep spacers visible so the joystick keeps its circular footprint.\n spacers.forEach((s) => {\n s.style.display = '';\n });\n this.dropJoystickButtons.forEach((btn) => {\n const isCenter = btn.dataset['zone'] === 'center';\n if (isCenter) {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n } else {\n // Hide visually but keep layout space; also prevent interaction.\n btn.style.visibility = 'hidden';\n btn.style.pointerEvents = 'none';\n btn.dataset['hidden'] = 'true';\n btn.style.display = '';\n }\n });\n // Keep default 3x3 grid so the circular background size stays the same.\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n // Do not set an active zone automatically; users must hover the button.\n } else {\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n });\n spacers.forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n this.updateDropJoystickActiveZone(zone);\n }\n\n private hideDropIndicator(): void {\n this.dropIndicator.dataset['visible'] = 'false';\n this.dropJoystick.dataset['visible'] = 'false';\n this.dropJoystick.style.display = 'none';\n delete this.dropJoystick.dataset['path'];\n this.dropJoystickTarget = null;\n this.updateDropJoystickActiveZone(null);\n // Restore joystick structure to default.\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.display = '';\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n });\n Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer')).forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n\n private findStackAtPoint(clientX: number, clientY: number): HTMLElement | null {\n const shadow = this.shadowRoot;\n if (!shadow) {\n return null;\n }\n\n const elements = shadow.elementsFromPoint(clientX, clientY);\n const stack = this.findStackInTargets(elements);\n if (stack) {\n return stack;\n }\n // If there are no docked stacks (all panes are floating), allow the\n // docked surface itself to serve as a drop target for the main zone.\n if (!this.rootLayout) {\n const dockRect = this.dockedEl.getBoundingClientRect();\n if (\n clientX >= dockRect.left &&\n clientX <= dockRect.right &&\n clientY >= dockRect.top &&\n clientY <= dockRect.bottom\n ) {\n return this.dockedEl;\n }\n }\n\n return null;\n }\n\n private findStackInTargets(targets: Iterable<EventTarget>): HTMLElement | null {\n for (const element of targets) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element.classList.contains('dock-stack')) {\n return element;\n }\n if (\n this.dropJoystickTarget &&\n (element.classList.contains('dock-drop-joystick') ||\n element.classList.contains('dock-drop-joystick__button') ||\n element.classList.contains('dock-drop-joystick__spacer'))\n ) {\n return this.dropJoystickTarget;\n }\n }\n return null;\n }\n\n private activatePane(stack: HTMLElement, paneName: string, path: DockPath): void {\n stack.dataset['activePane'] = paneName;\n\n // Reflect to mp-tab-control's `active-tab` attribute. The WC handles\n // strip button styling (active class, aria-selected) + body-slot\n // projection automatically via the named-slot pattern.\n if (stack.tagName === 'MP-TAB-CONTROL') {\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(paneName)}\"]`,\n );\n const tabId = headerSpan?.dataset['tabId'];\n if (tabId) {\n stack.setAttribute('active-tab', tabId);\n }\n }\n\n const location = this.resolveStackLocation(path);\n if (!location) {\n return;\n }\n\n location.node.activePane = paneName;\n if (path.type === 'floating') {\n const floating = this.floatingLayouts[path.index];\n if (floating) {\n floating.activePane = paneName;\n }\n this.updateFloatingWindowTitle(path.index);\n }\n this.dispatchLayoutChanged();\n }\n\n private getNodeAtPath(root: DockLayoutNode | null, path: number[]): DockLayoutNode | null {\n if (!root) {\n return null;\n }\n\n let current: DockLayoutNode | null = root;\n if (path.length === 0) {\n return current;\n }\n\n for (const segment of path) {\n if (!current || current.kind !== 'split') {\n return null;\n }\n current = current.children[segment] ?? null;\n }\n\n return current;\n }\n\n private resolveSplitNode(path: DockPath): DockSplitNode | null {\n if (path.type === 'docked') {\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n const floating = this.floatingLayouts[path.index];\n if (!floating || !floating.root) {\n return null;\n }\n\n const node = this.getNodeAtPath(floating.root, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n private replaceNodeInTree(\n root: DockLayoutNode | null,\n target: DockLayoutNode,\n replacement: DockLayoutNode,\n ): DockLayoutNode | null {\n if (!root) {\n return replacement;\n }\n\n if (root === target) {\n return replacement;\n }\n\n const parentInfo = this.findParentSplit(root, target);\n if (!parentInfo) {\n return root;\n }\n\n parentInfo.parent.children[parentInfo.index] = replacement;\n this.normalizeSplitNode(parentInfo.parent);\n return root;\n }\n\n private cleanupEmptyStackInTree(\n root: DockLayoutNode | null,\n stack: DockStackNode,\n ): DockLayoutNode | null {\n if (!root || stack.panes.length > 0) {\n return root;\n }\n\n const parentInfo = this.findParentSplit(root, stack);\n if (!parentInfo) {\n return root === stack ? null : root;\n }\n\n const parent = parentInfo.parent;\n const index = parent.children.indexOf(stack);\n if (index === -1) {\n return root;\n }\n\n parent.children.splice(index, 1);\n if (Array.isArray(parent.sizes)) {\n parent.sizes.splice(index, 1);\n }\n this.normalizeSplitNode(parent);\n\n return this.cleanupSplitIfNecessary(root, parent);\n }\n\n private cleanupSplitIfNecessary(\n root: DockLayoutNode | null,\n split: DockSplitNode,\n ): DockLayoutNode | null {\n if (split.children.length === 1) {\n return this.replaceNodeInTree(root, split, split.children[0]);\n }\n\n if (split.children.length === 0) {\n const parentInfo = this.findParentSplit(root, split);\n if (!parentInfo) {\n return null;\n }\n\n const parent = parentInfo.parent;\n const index = parent.children.indexOf(split);\n if (index !== -1) {\n parent.children.splice(index, 1);\n if (Array.isArray(parent.sizes)) {\n parent.sizes.splice(index, 1);\n }\n this.normalizeSplitNode(parent);\n return this.cleanupSplitIfNecessary(root, parent);\n }\n }\n\n return root;\n }\n\n private dockNodeBeside(\n root: DockLayoutNode | null,\n targetNode: DockStackNode,\n newNode: DockLayoutNode,\n zone: DropZone,\n ): DockLayoutNode | null {\n const orientation = zone === 'left' || zone === 'right' ? 'horizontal' : 'vertical';\n const placeBefore = zone === 'left' || zone === 'top';\n const parentInfo = this.findParentSplit(root, targetNode);\n\n if (parentInfo && parentInfo.parent.direction === orientation) {\n const insertIndex = placeBefore ? parentInfo.index : parentInfo.index + 1;\n parentInfo.parent.children.splice(insertIndex, 0, newNode);\n parentInfo.parent.sizes = this.insertWeight(\n parentInfo.parent.sizes,\n insertIndex,\n parentInfo.parent.children.length,\n );\n return root ?? newNode;\n }\n\n const split: DockSplitNode = {\n kind: 'split',\n direction: orientation,\n children: placeBefore ? [newNode, targetNode] : [targetNode, newNode],\n sizes: [0.5, 0.5],\n };\n\n return this.replaceNodeInTree(root, targetNode, split);\n }\n\n private forEachStack(\n node: DockLayoutNode | null,\n visitor: (stack: DockStackNode, path: number[]) => void,\n path: number[] = [],\n ): void {\n if (!node) {\n return;\n }\n\n if (node.kind === 'stack') {\n visitor(node, path);\n return;\n }\n\n node.children.forEach((child, index) =>\n this.forEachStack(child, visitor, [...path, index]),\n );\n }\n\n private findStackContainingPane(\n node: DockLayoutNode | null,\n pane: string,\n ): DockStackNode | null {\n let result: DockStackNode | null = null;\n this.forEachStack(node, (stack) => {\n if (!result && stack.panes.includes(pane)) {\n result = stack;\n }\n });\n return result;\n }\n\n private findFirstPaneName(node: DockLayoutNode | null): string | null {\n let found: string | null = null;\n this.forEachStack(node, (stack) => {\n if (found || stack.panes.length === 0) {\n return;\n }\n if (stack.activePane && stack.panes.includes(stack.activePane)) {\n found = stack.activePane;\n } else {\n found = stack.panes[0];\n }\n });\n return found;\n }\n\n private collectFloatingPaneMetadata(\n node: DockLayoutNode | null,\n ): { panes: string[]; titles: Record<string, string> } {\n // Deprecated method retained temporarily for signature compatibility.\n // Use collectPaneNames instead.\n const panes = this.collectPaneNames(node);\n const titles: Record<string, string> = {};\n panes.forEach((p) => {\n const t = this.titles[p];\n if (t) {\n titles[p] = t;\n }\n });\n return { panes, titles };\n }\n\n private collectPaneNames(node: DockLayoutNode | null): string[] {\n const panes: string[] = [];\n this.forEachStack(node, (stack) => {\n stack.panes.forEach((pane) => panes.push(pane));\n });\n return panes;\n }\n\n private normalizeFloatingLayout(\n layout: DockFloatingStackLayout,\n ): DockFloatingStackLayout {\n const bounds = layout.bounds ?? { left: 0, top: 0, width: 320, height: 200 };\n const normalizedBounds = {\n left: Number.isFinite(bounds.left) ? bounds.left : 0,\n top: Number.isFinite(bounds.top) ? bounds.top : 0,\n width: Number.isFinite(bounds.width) ? Math.max(bounds.width, 160) : 320,\n height: Number.isFinite(bounds.height) ? Math.max(bounds.height, 120) : 200,\n };\n\n const root = layout.root ? this.cloneLayoutNode(layout.root) : null;\n\n return {\n id: layout.id,\n bounds: normalizedBounds,\n zIndex: layout.zIndex,\n root,\n activePane: layout.activePane,\n };\n }\n\n private formatPath(path: DockPath): string {\n if (path.type === 'floating') {\n const suffix =\n path.segments.length > 0\n ? `/${path.segments.map((segment) => segment.toString()).join('/')}`\n : '';\n return `f:${path.index}${suffix}`;\n }\n const suffix = path.segments.join('/');\n return suffix.length > 0 ? `d:${suffix}` : 'd:';\n }\n\n private clonePath(path: DockPath): DockPath {\n if (path.type === 'floating') {\n return { type: 'floating', index: path.index, segments: [...path.segments] };\n }\n return { type: 'docked', segments: [...path.segments] };\n }\n\n private parsePath(path: string | null | undefined): DockPath | null {\n // The root splitter is tagged with data-path=\"\" (raw segments-join of an\n // empty array) so empty string is a valid path representing root docked.\n // Only null/undefined is \"no path\".\n if (path == null) {\n return null;\n }\n\n if (path.startsWith('f:')) {\n const remainder = path.slice(2);\n const [indexPart, ...segmentParts] = remainder.split('/');\n const index = Number.parseInt(indexPart, 10);\n if (!Number.isFinite(index)) {\n return null;\n }\n const segments = segmentParts\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n return { type: 'floating', index, segments };\n }\n\n const normalized = path.startsWith('d:') ? path.slice(2) : path;\n if (normalized.length === 0) {\n return { type: 'docked', segments: [] };\n }\n\n const segments = normalized\n .split('/')\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n\n return { type: 'docked', segments };\n }\n\n private pathsEqual(a: DockPath, b: DockPath): boolean {\n if (a.type !== b.type) {\n return false;\n }\n\n if (a.type === 'floating') {\n const other = b as Extract<DockPath, { type: 'floating' }>;\n if (a.index !== other.index) {\n return false;\n }\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n const other = b as Extract<DockPath, { type: 'docked' }>;\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n private isOrIsAncestorOf(ancestor: DockPath, descendant: DockPath): boolean {\n if (ancestor.type !== descendant.type) {\n return false;\n }\n\n if (ancestor.type === 'floating') {\n if ((descendant as any).index !== ancestor.index) {\n return false;\n }\n }\n\n if (ancestor.segments.length > descendant.segments.length) {\n return false;\n }\n\n return ancestor.segments.every((segment, i) => segment === descendant.segments[i]);\n }\n\n private countPanesInTree(node: DockLayoutNode | null): number {\n if (!node) {\n return 0;\n }\n if (node.kind === 'stack') {\n return node.panes.length;\n }\n return node.children.reduce((total, child) => total + this.countPanesInTree(child), 0);\n }\n\n private resolveStackLocation(path: DockPath): ResolvedLocation | null {\n if (path.type === 'floating') {\n const layout = this.floatingLayouts[path.index];\n if (!layout || !layout.root) {\n return null;\n }\n const node = this.getNodeAtPath(layout.root, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n return { context: 'floating', index: path.index, path: [...path.segments], node };\n }\n\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n\n return { context: 'docked', path: [...path.segments], node };\n }\n\n private removePaneFromLocation(\n location: ResolvedLocation,\n pane: string,\n skipCleanup = false,\n ): boolean {\n if (location.context === 'docked') {\n return this.removePaneFromStack(location.node, pane, skipCleanup);\n }\n\n return this.removePaneFromFloating(location.index, location.path, pane, skipCleanup);\n }\n\n private addPaneToLocation(location: ResolvedLocation, pane: string): void {\n const panes = location.node.panes;\n const existingIndex = panes.indexOf(pane);\n if (existingIndex !== -1) {\n panes.splice(existingIndex, 1);\n }\n panes.push(pane);\n }\n\n private setActivePaneForLocation(location: ResolvedLocation, pane: string): void {\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n private cleanupLocation(location: ResolvedLocation): void {\n if (location.context === 'docked') {\n this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, location.node);\n } else {\n const floating = this.floatingLayouts[location.index];\n if (!floating) {\n return;\n }\n\n floating.root = this.cleanupEmptyStackInTree(floating.root, location.node);\n if (!floating.root) {\n this.removeFloatingAt(location.index);\n }\n }\n }\n\n private reorderPaneInLocation(location: ResolvedLocation, pane: string): void {\n const panes = location.node.panes;\n const index = panes.indexOf(pane);\n if (index === -1) {\n return;\n }\n panes.splice(index, 1);\n panes.push(pane);\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n private removeFloatingAt(index: number): void {\n if (index < 0 || index >= this.floatingLayouts.length) {\n return;\n }\n this.floatingLayouts.splice(index, 1);\n }\n\n private removePaneFromFloating(\n index: number,\n path: number[],\n pane: string,\n skipCleanup = false,\n ): boolean {\n const floating = this.floatingLayouts[index];\n if (!floating || !floating.root) {\n return false;\n }\n\n const node = this.getNodeAtPath(floating.root, path);\n if (!node || node.kind !== 'stack') {\n return false;\n }\n\n node.panes = node.panes.filter((p) => p !== pane);\n if (!node.panes.includes(node.activePane ?? '')) {\n if (node.panes.length > 0) {\n node.activePane = node.panes[0];\n } else {\n delete node.activePane;\n }\n }\n\n if (floating.activePane === pane) {\n const fallback = this.findFirstPaneName(floating.root);\n if (fallback) {\n floating.activePane = fallback;\n } else {\n delete floating.activePane;\n }\n }\n\n if (node.panes.length > 0) {\n return false;\n }\n\n if (skipCleanup) {\n return true;\n }\n\n floating.root = this.cleanupEmptyStackInTree(floating.root, node);\n if (!floating.root) {\n this.removeFloatingAt(index);\n }\n\n return true;\n }\n\n private normalizeSizesArray(sizes: number[] | undefined, count: number): number[] {\n if (count <= 0) {\n return [];\n }\n\n if (!Array.isArray(sizes) || sizes.length !== count) {\n return Array.from({ length: count }, () => 1 / count);\n }\n\n const normalized = sizes.map((value) => (Number.isFinite(value) ? Math.max(value, 0) : 0));\n const total = normalized.reduce((acc, value) => acc + value, 0);\n if (total <= 0) {\n return Array.from({ length: count }, () => 1 / count);\n }\n\n return normalized.map((value) => value / total);\n }\n\n private normalizeSplitNode(split: DockSplitNode): void {\n split.sizes = this.normalizeSizesArray(split.sizes, split.children.length);\n }\n\n private dispatchLayoutChanged(): void {\n this.dispatchEvent(\n new CustomEvent('dock-layout-changed', {\n detail: this.snapshot,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private cloneLayoutNode(layout: DockLayoutNode): DockLayoutNode;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null {\n if (!layout) {\n return null;\n }\n\n return JSON.parse(JSON.stringify(layout)) as DockLayoutNode;\n }\n\n private cloneFloatingArray(\n layouts: DockFloatingStackLayout[],\n ): DockFloatingStackLayout[] {\n return JSON.parse(JSON.stringify(layouts)) as DockFloatingStackLayout[];\n }\n}\n\nconst tagName = 'mint-dock-manager';\n\nif (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n customElements.define(tagName, MintDockManagerElement);\n}\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n inject,\n input,\n output,\n viewChild,\n signal,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n} from '../types/dock-layout';\nimport { BsDockPaneComponent } from './dock-pane.component';\nimport { MintDockManagerElement } from '../web-components/mint-dock-manager.element';\n\n@Component({\n selector: 'bs-dock-manager',\n templateUrl: './dock-manager.component.html',\n styleUrls: ['./dock-manager.component.scss'],\n imports: [NgTemplateOutlet],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockManagerComponent implements AfterViewInit {\n readonly layout = input<DockLayoutNode | DockLayout | null>(null);\n\n get layoutSnapshot(): DockLayoutSnapshot | null {\n if (!this._layout.root && this._layout.floating.length === 0) {\n return null;\n }\n return this.cloneLayout(this._layout);\n }\n\n readonly layoutChange = output<DockLayoutSnapshot | null>();\n readonly layoutSnapshotChange = output<DockLayoutSnapshot>();\n\n layoutString = signal<string | null>(null);\n\n readonly panes = contentChildren(BsDockPaneComponent);\n readonly managerRef = viewChild<ElementRef<MintDockManagerElement>>('manager');\n\n protected readonly trackByPane = (_: number, pane: BsDockPaneComponent) => pane.name();\n\n private _layout: DockLayoutSnapshot = { root: null, floating: [] };\n\n constructor() {\n const documentRef = inject(DOCUMENT);\n if (documentRef) {\n MintDockManagerElement.configureDocument(documentRef);\n }\n\n effect(() => {\n const value = this.layout();\n const snapshot = this.cloneLayout(this.ensureSnapshot(value));\n this._layout = snapshot;\n this.layoutString.set(this.stringifyLayout(snapshot));\n this.applyLayout();\n });\n }\n\n ngAfterViewInit(): void {\n this.applyLayout();\n }\n\n captureLayout(): DockLayoutSnapshot {\n const element = this.managerRef()?.nativeElement;\n return element?.snapshot ?? { root: null, floating: [] };\n }\n\n onLayoutChanged(event: Event): void {\n const snapshot =\n (event as CustomEvent<DockLayoutSnapshot>).detail ?? {\n root: null,\n floating: [],\n };\n this._layout = this.cloneLayout(snapshot);\n this.layoutString.set(this.stringifyLayout(this._layout));\n this.layoutChange.emit(this.layoutSnapshot);\n this.layoutSnapshotChange.emit(this.cloneLayout(snapshot));\n }\n\n private applyLayout(): void {\n const ref = this.managerRef();\n if (!ref) {\n return;\n }\n\n const element = ref.nativeElement;\n const layout = this.layoutSnapshot;\n element.layout = layout ?? null;\n }\n\n private ensureSnapshot(\n value: DockLayoutNode | DockLayout | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ('kind' in value) {\n return { root: value, floating: [], titles: {} };\n }\n\n return {\n root: value.root ?? null,\n floating: Array.isArray(value.floating) ? [...value.floating] : [],\n titles: value.titles ? { ...value.titles } : {},\n };\n }\n\n private stringifyLayout(layout: DockLayoutSnapshot): string | null {\n if (!layout.root && layout.floating.length === 0) {\n return null;\n }\n return JSON.stringify(layout);\n }\n\n private cloneLayout(layout: DockLayoutSnapshot): DockLayoutSnapshot {\n return JSON.parse(JSON.stringify(layout)) as DockLayoutSnapshot;\n }\n}\n","<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|