@mintplayer/ng-bootstrap 21.0.0 → 21.1.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.
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +33 -46
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs +12 -30
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs +6 -18
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +31 -65
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +200 -132
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs +5 -7
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +14 -17
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +231 -347
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +43 -39
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +7 -35
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +46 -86
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +7 -6
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +32 -74
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs +6 -7
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs +18 -18
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +20 -22
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +16 -10
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +8 -28
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +208 -265
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs +8 -21
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +43 -38
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +59 -120
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +11 -25
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +8 -28
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +67 -103
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +34 -63
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +19 -47
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +35 -41
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +205 -779
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +34 -39
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +74 -100
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs +37 -79
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +78 -45
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs +16 -26
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +14 -40
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs +8 -32
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs +70 -76
- package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs +11 -11
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +53 -99
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs +7 -38
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +23 -49
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +33 -38
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +45 -98
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +12 -24
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +21 -43
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +29 -49
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
- package/package.json +5 -5
- package/types/mintplayer-ng-bootstrap-accordion.d.ts +11 -15
- package/types/mintplayer-ng-bootstrap-alert.d.ts +4 -9
- package/types/mintplayer-ng-bootstrap-badge.d.ts +5 -9
- package/types/mintplayer-ng-bootstrap-calendar.d.ts +14 -22
- package/types/mintplayer-ng-bootstrap-carousel.d.ts +41 -35
- package/types/mintplayer-ng-bootstrap-close.d.ts +1 -2
- package/types/mintplayer-ng-bootstrap-code-snippet.d.ts +4 -5
- package/types/mintplayer-ng-bootstrap-color-picker.d.ts +70 -97
- package/types/mintplayer-ng-bootstrap-datatable.d.ts +11 -11
- package/types/mintplayer-ng-bootstrap-datepicker.d.ts +6 -13
- package/types/mintplayer-ng-bootstrap-dropdown.d.ts +14 -20
- package/types/mintplayer-ng-bootstrap-enhanced-paste.d.ts +1 -3
- package/types/mintplayer-ng-bootstrap-file-upload.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-grid.d.ts +14 -26
- package/types/mintplayer-ng-bootstrap-let.d.ts +0 -2
- package/types/mintplayer-ng-bootstrap-markdown.d.ts +1 -5
- package/types/mintplayer-ng-bootstrap-modal.d.ts +3 -6
- package/types/mintplayer-ng-bootstrap-multiselect.d.ts +6 -6
- package/types/mintplayer-ng-bootstrap-navbar-toggler.d.ts +5 -11
- package/types/mintplayer-ng-bootstrap-navbar.d.ts +75 -80
- package/types/mintplayer-ng-bootstrap-navigation-lock.d.ts +2 -4
- package/types/mintplayer-ng-bootstrap-offcanvas.d.ts +12 -14
- package/types/mintplayer-ng-bootstrap-ordinal-number.d.ts +1 -2
- package/types/mintplayer-ng-bootstrap-pagination.d.ts +17 -31
- package/types/mintplayer-ng-bootstrap-placeholder.d.ts +3 -8
- package/types/mintplayer-ng-bootstrap-playlist-toggler.d.ts +5 -11
- package/types/mintplayer-ng-bootstrap-popover.d.ts +15 -23
- package/types/mintplayer-ng-bootstrap-progress-bar.d.ts +19 -22
- package/types/mintplayer-ng-bootstrap-range.d.ts +1 -2
- package/types/mintplayer-ng-bootstrap-rating.d.ts +8 -14
- package/types/mintplayer-ng-bootstrap-resizable.d.ts +7 -11
- package/types/mintplayer-ng-bootstrap-scheduler.d.ts +132 -220
- package/types/mintplayer-ng-bootstrap-scrollspy.d.ts +14 -15
- package/types/mintplayer-ng-bootstrap-searchbox.d.ts +20 -27
- package/types/mintplayer-ng-bootstrap-select.d.ts +13 -23
- package/types/mintplayer-ng-bootstrap-select2.d.ts +16 -14
- package/types/mintplayer-ng-bootstrap-shell.d.ts +6 -12
- package/types/mintplayer-ng-bootstrap-signature-pad.d.ts +7 -12
- package/types/mintplayer-ng-bootstrap-spinner.d.ts +8 -16
- package/types/mintplayer-ng-bootstrap-splitter.d.ts +21 -27
- package/types/mintplayer-ng-bootstrap-sticky-footer.d.ts +3 -3
- package/types/mintplayer-ng-bootstrap-tab-control.d.ts +29 -37
- package/types/mintplayer-ng-bootstrap-table.d.ts +6 -13
- package/types/mintplayer-ng-bootstrap-timepicker.d.ts +7 -14
- package/types/mintplayer-ng-bootstrap-toast.d.ts +5 -10
- package/types/mintplayer-ng-bootstrap-toggle-button.d.ts +22 -36
- package/types/mintplayer-ng-bootstrap-tooltip.d.ts +4 -7
- package/types/mintplayer-ng-bootstrap-treeview.d.ts +10 -15
- package/types/mintplayer-ng-bootstrap-trust-html.d.ts +0 -2
- package/types/mintplayer-ng-bootstrap-typeahead.d.ts +14 -17
|
@@ -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.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/src/lib/dock.module.ts","../../../../libs/mintplayer-ng-bootstrap/dock/mintplayer-ng-bootstrap-dock.ts"],"sourcesContent":["import { AfterContentInit, Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'bs-dock-pane',\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n standalone: false,\n})\nexport class BsDockPaneComponent implements AfterContentInit {\n @Input() name!: string;\n @Input() title?: string;\n\n @ViewChild(TemplateRef, { static: true }) template!: TemplateRef<unknown>;\n\n ngAfterContentInit(): void {\n if (!this.name) {\n throw new Error('bs-dock-pane requires a unique \"name\" input.');\n }\n }\n}\n","\nimport {\n DockFloatingStackLayout,\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n DockSplitNode,\n DockStackNode,\n} from '../types/dock-layout';\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\nconst templateHtml = `\n <style>\n :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-split__child,\n .dock-stack,\n .dock-stack__content,\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 rgba(0, 0, 0, 0.3);\n border-radius: 0.5rem;\n background: rgba(255, 255, 255, 0.92);\n box-shadow: 0 16px 32px rgba(15, 23, 42, 0.25);\n overflow: hidden;\n min-width: 12rem;\n min-height: 8rem;\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(\n to bottom,\n rgba(148, 163, 184, 0.6),\n rgba(148, 163, 184, 0.25)\n );\n border-bottom: 1px solid rgba(148, 163, 184, 0.5);\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: rgba(30, 41, 59, 0.95);\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(148, 163, 184, 0.25);\n transition: background 120ms ease;\n }\n\n .dock-floating__resizer:hover,\n .dock-floating__resizer[data-resizing='true'] {\n background: rgba(148, 163, 184, 0.4);\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 display: flex;\n flex: 1 1 0;\n gap: var(--dock-split-gap);\n position: relative;\n }\n\n .dock-split[data-direction=\"vertical\"] {\n flex-direction: column;\n }\n\n .dock-split[data-direction=\"horizontal\"] {\n flex-direction: row;\n }\n\n .dock-split__child {\n display: flex;\n flex: 1 1 0;\n position: relative;\n }\n\n .dock-split__divider {\n position: relative;\n flex: 0 0 auto;\n background: rgba(0, 0, 0, 0.08);\n transition: background 120ms ease;\n }\n\n .dock-split[data-direction=\"horizontal\"] > .dock-split__divider {\n width: 0.5rem;\n cursor: col-resize;\n /* Extend through perpendicular gaps for visual continuity */\n margin-top: calc(var(--dock-split-gap) * -1);\n margin-bottom: calc(var(--dock-split-gap) * -1);\n }\n\n .dock-split[data-direction=\"vertical\"] > .dock-split__divider {\n height: 0.5rem;\n cursor: row-resize;\n /* Extend through perpendicular gaps for visual continuity */\n margin-left: calc(var(--dock-split-gap) * -1);\n margin-right: calc(var(--dock-split-gap) * -1);\n }\n\n .dock-split__divider::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 999px;\n background: rgba(0, 0, 0, 0.25);\n }\n\n .dock-split[data-direction=\"horizontal\"] > .dock-split__divider::after {\n width: 0.125rem;\n height: 60%;\n }\n\n .dock-split[data-direction=\"vertical\"] > .dock-split__divider::after {\n width: 60%;\n height: 0.125rem;\n }\n\n .dock-split__divider:hover,\n .dock-split__divider:focus-visible,\n .dock-split__divider[data-resizing='true'] {\n background: rgba(59, 130, 246, 0.35);\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: rgba(59, 130, 246, 0.2);\n border: 1px solid rgba(59, 130, 246, 0.6);\n box-shadow: 0 2px 6px rgba(15, 23, 42, 0.2);\n cursor: all-scroll;\n pointer-events: auto;\n opacity: 0;\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(59, 130, 246, 0.35);\n border-color: rgba(59, 130, 246, 0.9);\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: rgba(59, 130, 246, 0.7);\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);\n pointer-events: none;\n z-index: 130;\n }\n\n .dock-stack {\n display: flex;\n flex-direction: column;\n flex: 1 1 0;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.25rem;\n background: rgba(255, 255, 255, 0.75);\n backdrop-filter: blur(4px);\n }\n\n .dock-stack__header {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n padding: 0.25rem;\n background: rgba(0, 0, 0, 0.05);\n border-bottom: 1px solid rgba(0, 0, 0, 0.15);\n }\n\n .dock-tab {\n appearance: none;\n border: none;\n padding: 0.25rem 0.5rem;\n border-radius: 0.25rem;\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: grab;\n transition: background 160ms ease;\n }\n\n .dock-tab:active {\n cursor: grabbing;\n }\n\n .dock-tab:hover {\n background: rgba(0, 0, 0, 0.05);\n }\n\n .dock-tab:focus-visible {\n outline: 2px solid rgba(59, 130, 246, 0.8);\n outline-offset: 1px;\n }\n\n .dock-tab--active {\n background: rgba(59, 130, 246, 0.15);\n }\n\n .dock-stack__content {\n position: relative;\n flex: 1 1 auto;\n display: flex;\n overflow: hidden;\n }\n\n .dock-stack__pane {\n position: relative;\n flex: 1 1 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .dock-stack__pane[hidden] {\n display: none !important;\n }\n\n .dock-drop-indicator {\n position: absolute;\n pointer-events: none;\n border: 2px solid rgba(59, 130, 246, 0.9);\n background: rgba(59, 130, 246, 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: rgba(15, 23, 42, 0.15);\n box-shadow: 0 4px 12px rgba(15, 23, 42, 0.25);\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 rgba(59, 130, 246, 0.4);\n background: rgba(255, 255, 255, 0.9);\n color: rgba(30, 64, 175, 0.9);\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: rgba(59, 130, 246, 0.25);\n border-color: rgba(59, 130, 246, 0.8);\n color: rgba(30, 64, 175, 1);\n }\n\n .dock-drop-joystick__button:focus-visible {\n outline: 2px solid rgba(59, 130, 246, 0.9);\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 </style>\n <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>\n`;\n\nlet cachedTemplate: HTMLTemplateElement | null = null;\nlet cachedTemplateDocument: Document | null = null;\n\nfunction ensureTemplate(documentRef: Document): HTMLTemplateElement {\n if (!cachedTemplate || cachedTemplateDocument !== documentRef) {\n cachedTemplate = documentRef.createElement('template');\n cachedTemplate.innerHTML = templateHtml;\n cachedTemplateDocument = documentRef;\n }\n\n return cachedTemplate;\n}\n\nexport class MintDockManagerElement extends HTMLElement {\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 get observedAttributes(): string[] {\n return ['layout'];\n // return ['layout', 'debug-snap-markers'];\n }\n\n private static instanceCounter = 0;\n\n private readonly documentRef: Document;\n private readonly windowRef: (Window & typeof globalThis) | null;\n private readonly rootEl: HTMLElement;\n private readonly dockedEl: HTMLElement;\n private readonly floatingLayerEl: HTMLElement;\n private readonly dropIndicator: HTMLElement;\n private readonly dropJoystick: HTMLElement;\n private readonly 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 resizeState:\n | {\n path: DockPath;\n index: number;\n pointerId: number;\n orientation: 'horizontal' | 'vertical';\n container: HTMLElement;\n divider: HTMLElement;\n startPos: number;\n initialSizes: number[];\n beforeSize: number;\n afterSize: 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 intersectionHandles: Map<string, HTMLElement> = new Map();\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 a divider\n private activeSnapAxis: 'x' | 'y' | null = null;\n private activeSnapTargets: number[] = [];\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 private renderSnapMarkersForDivider(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n // Clear previous\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n if (!this.resizeState || !this.activeSnapAxis || this.activeSnapTargets.length === 0) return;\n const rootRect = this.rootEl.getBoundingClientRect();\n const dRect = this.resizeState.divider.getBoundingClientRect();\n if (this.activeSnapAxis === 'x') {\n const y = dRect.top + dRect.height / 2 - rootRect.top;\n this.activeSnapTargets.forEach((sx) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${rootRect.left + sx - rootRect.left}px`;\n dot.style.top = `${y}px`;\n layer.appendChild(dot);\n });\n } else if (this.activeSnapAxis === 'y') {\n const x = dRect.left + dRect.width / 2 - rootRect.left;\n this.activeSnapTargets.forEach((sy) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${x}px`;\n dot.style.top = `${rootRect.top + sy - rootRect.top}px`;\n layer.appendChild(dot);\n });\n }\n }\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 first entries\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 vRect = st.vs[0].container.querySelector<HTMLElement>(':scope > .dock-split__divider')?.getBoundingClientRect();\n if (vRect) centerX = vRect.left + vRect.width / 2 - rootRect.left;\n }\n if (st.hs.length > 0) {\n const hRect = st.hs[0].container.querySelector<HTMLElement>(':scope > .dock-split__divider')?.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 const documentRef = this.resolveDocument();\n this.documentRef = documentRef;\n this.windowRef = this.resolveWindow(documentRef);\n const shadowRoot = this.attachShadow({ mode: 'open' });\n const template = ensureTemplate(documentRef);\n shadowRoot.appendChild(template.content.cloneNode(true));\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\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\n const floatingLayer = shadowRoot.querySelector<HTMLElement>(\n '.dock-floating-layer',\n );\n if (!floatingLayer) {\n throw new Error('mint-dock-manager template is missing the floating layer element.');\n }\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\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\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 this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onDragOver = this.onDragOver.bind(this);\n this.onGlobalDragOver = this.onGlobalDragOver.bind(this);\n this.onGlobalDragEnd = this.onGlobalDragEnd.bind(this);\n this.onDrop = this.onDrop.bind(this);\n this.onDragLeave = this.onDragLeave.bind(this);\n this.onDrag = this.onDrag.bind(this);\n this.onDragMouseMove = this.onDragMouseMove.bind(this);\n this.onDragTouchMove = this.onDragTouchMove.bind(this);\n this.onDragMouseUp = this.onDragMouseUp.bind(this);\n this.onDragTouchEnd = this.onDragTouchEnd.bind(this);\n this.onWindowResize = this.onWindowResize.bind(this);\n }\n\n connectedCallback(): void {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\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 this.render();\n this.rootEl.addEventListener('dragover', this.onDragOver);\n this.rootEl.addEventListener('drop', this.onDrop);\n this.rootEl.addEventListener('dragleave', this.onDragLeave);\n this.dropJoystick.addEventListener('dragover', this.onDragOver);\n this.dropJoystick.addEventListener('drop', this.onDrop);\n this.dropJoystick.addEventListener('dragleave', this.onDragLeave);\n // Strengthen zone tracking by reacting to dragenter/dragover directly on the buttons.\n // This avoids relying solely on hit-testing each frame which can be jittery during HTML5 drag.\n this.dropJoystickButtons.forEach((btn) => {\n const handler = (e: DragEvent) => {\n if (!this.dragState) return;\n const z = btn.dataset['zone'];\n if (this.isDropZone(z)) {\n this.updateDropJoystickActiveZone(z);\n e.preventDefault();\n }\n };\n btn.addEventListener('dragenter', handler);\n btn.addEventListener('dragover', handler);\n });\n const win = this.windowRef;\n win?.addEventListener('dragover', this.onGlobalDragOver);\n win?.addEventListener('drag', this.onDrag);\n win?.addEventListener('dragend', this.onGlobalDragEnd, true);\n win?.addEventListener('resize', this.onWindowResize);\n }\n\n disconnectedCallback(): void {\n this.rootEl.removeEventListener('dragover', this.onDragOver);\n this.rootEl.removeEventListener('drop', this.onDrop);\n this.rootEl.removeEventListener('dragleave', this.onDragLeave);\n this.dropJoystick.removeEventListener('dragover', this.onDragOver);\n this.dropJoystick.removeEventListener('drop', this.onDrop);\n this.dropJoystick.removeEventListener('dragleave', this.onDragLeave);\n const win = this.windowRef;\n win?.removeEventListener('dragover', this.onGlobalDragOver);\n win?.removeEventListener('drag', this.onDrag);\n win?.removeEventListener('dragend', this.onGlobalDragEnd, true);\n this.stopDragPointerTracking();\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n const win2 = this.windowRef;\n win2?.removeEventListener('resize', this.onWindowResize);\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\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 this.rootLayout = this.cloneLayoutNode(snapshot.root);\n this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);\n this.titles = snapshot.titles ? { ...snapshot.titles } : {};\n this.render();\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 render(): void {\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 this.scheduleRenderIntersectionHandles();\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 onWindowResize(): void {\n // Recompute intersection handles on window resize\n this.scheduleRenderIntersectionHandles();\n }\n\n private scheduleRenderIntersectionHandles(): void {\n this.intersectionRaf = null;\n this.renderIntersectionHandles();\n }\n\n private renderIntersectionHandles(): void {\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n // Keep existing handles; we will diff and update positions\n // 1) Clean up legacy handles (created before keying) that lack a data-key\n Array.from(layer.querySelectorAll('.dock-intersection-handle'))\n .filter((el) => !(el as HTMLElement).dataset['key'])\n .forEach((el) => el.remove());\n\n // 2) Rebuild the internal map from DOM to avoid drifting state and dedupe duplicates\n const domByKey = new Map<string, HTMLElement>();\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle[data-key]')).forEach((el) => {\n const key = el.dataset['key'] ?? '';\n if (!key) return;\n if (domByKey.has(key)) {\n // Remove duplicates with the same key, keep the first one\n el.remove();\n return;\n }\n domByKey.set(key, el);\n // Ensure listener is attached only once\n if (!el.dataset['listener']) {\n el.dataset['listener'] = '1';\n // Listener will be (re)assigned later when we know the current h/v pair\n }\n });\n // Sync internal map with DOM\n this.intersectionHandles = domByKey;\n\n const rootRect = this.rootEl.getBoundingClientRect();\n\n // If a corner resize is active, only update that handle's position and avoid creating new ones\n if (this.cornerResizeState) {\n const st = this.cornerResizeState;\n const h0 = st.hs[0];\n const v0 = st.vs[0];\n const hPathStr = this.formatPath(h0.path);\n const vPathStr = this.formatPath(v0.path);\n const key = `${hPathStr}:${h0.index}|${vPathStr}:${v0.index}`;\n // Find divider elements corresponding to active paths\n const hDiv = this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split__divider[data-path=\"${hPathStr}\"][data-index=\"${h0.index}\"]`,\n );\n const vDiv = this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split__divider[data-path=\"${vPathStr}\"][data-index=\"${v0.index}\"]`,\n );\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 const handle = st.handle;\n if (!handle.dataset['key']) {\n handle.dataset['key'] = key;\n }\n this.intersectionHandles.set(key, handle);\n handle.style.left = `${x}px`;\n handle.style.top = `${y}px`;\n // Remove any other handles that don't match the active key\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if ((el.dataset['key'] ?? '') !== key) {\n el.remove();\n }\n });\n // Normalize internal map as well\n this.intersectionHandles = new Map([[key, handle]]);\n }\n return;\n }\n const allDividers = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split__divider') ?? [],\n );\n\n const hDividers: {\n el: HTMLElement;\n rect: DOMRect;\n path: DockPath | null;\n pathStr?: string;\n index: number;\n container: HTMLElement;\n }[] = [];\n const vDividers: {\n el: HTMLElement;\n rect: DOMRect;\n path: DockPath | null;\n pathStr?: string;\n index: number;\n container: HTMLElement;\n }[] = [];\n\n allDividers.forEach((el) => {\n const orientation = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n const rect = el.getBoundingClientRect();\n const container = el.closest('.dock-split') as HTMLElement | null;\n const path = this.parsePath(el.dataset['path']);\n const pathStr = el.dataset['path'] ?? '';\n const index = Number.parseInt(el.dataset['index'] ?? '', 10);\n if (!container || !Number.isFinite(index)) return;\n const info = { el, rect, path, pathStr, index, container };\n // Note: node.direction === 'horizontal' means the split lays out children left-to-right,\n // which yields a VERTICAL divider bar. So mapping is inverted here.\n if (orientation === 'horizontal') {\n vDividers.push(info);\n } else if (orientation === 'vertical') {\n hDividers.push(info);\n }\n });\n\n const desiredKeys = new Set<string>();\n\n const tol = 24; // px tolerance to account for gaps and subpixel layout\n const groupMap = new Map<string, HTMLElement>();\n const groupPairs = new Map<string, 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\n const x = vCenterX - rootRect.left;\n const y = hCenterY - rootRect.top;\n const key = `${h.pathStr}:${h.index}|${v.pathStr}:${v.index}`;\n const gk = `${Math.round(x)}:${Math.round(y)}`;\n let handle = groupMap.get(gk);\n if (!handle) {\n // Try reuse via existing pair mapping\n handle = this.intersectionHandles.get(key) ?? null as any;\n if (!handle) {\n 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 handle.dataset['key'] = key;\n handle.dataset['listener'] = '1';\n handle.addEventListener('pointerdown', (ev) => this.beginCornerResize(ev, h, v, handle!));\n handle.addEventListener('dblclick', (ev) => this.onIntersectionDoubleClick(ev, handle!));\n layer.appendChild(handle);\n }\n groupMap.set(gk, handle);\n }\n // Track pairs for this group and map all pair keys to the same handle\n const arr = groupPairs.get(gk) ?? [];\n arr.push({ h: { pathStr: h.pathStr ?? '', index: h.index }, v: { pathStr: v.pathStr ?? '', index: v.index } });\n groupPairs.set(gk, arr);\n this.intersectionHandles.set(key, handle);\n // Update position for the grouped handle\n handle.style.left = `${x}px`;\n handle.style.top = `${y}px`;\n });\n });\n\n // Attach grouped pairs data to each handle and prune stale ones\n const keep = new Set<HTMLElement>(groupMap.values());\n groupMap.forEach((handle, gk) => {\n const pairs = groupPairs.get(gk) ?? [];\n handle.dataset['pairs'] = JSON.stringify(pairs);\n });\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if (!keep.has(el)) {\n el.remove();\n }\n });\n // Reset intersectionHandles to only currently mapped keys\n const newMap = new Map<string, HTMLElement>();\n groupPairs.forEach((pairs, gk) => {\n const handle = groupMap.get(gk)!;\n pairs.forEach((p) => newMap.set(`${p.h.pathStr}:${p.h.index}|${p.v.pathStr}:${p.v.index}`, handle));\n });\n this.intersectionHandles = newMap;\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 div = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${pathStr}\"][data-index=\"${index}\"]`) ?? null;\n const container = div?.closest('.dock-split') as HTMLElement | null;\n if (!container) return;\n if (axis === 'h') {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n const initial = children.map((c) => c.getBoundingClientRect().height);\n hs.push({ path, index, container, initialSizes: initial, before: initial[index], after: initial[index+1] });\n } else {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n const initial = children.map((c) => c.getBoundingClientRect().width);\n vs.push({ path, index, container, initialSizes: initial, before: initial[index], after: initial[index+1] });\n }\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\n let centerX: number | null = null;\n let centerY: number | null = null;\n // Resolve one vertical bar (from vs) and one horizontal bar (from hs)\n if (vs.length > 0) {\n const vPair = vs[0];\n const vPathStr = this.formatPath(vPair.path);\n const vDiv = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${vPathStr}\"][data-index=\"${vPair.index}\"]`) ?? null;\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 hPathStr = this.formatPath(hPair.path);\n const hDiv = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${hPathStr}\"][data-index=\"${hPair.index}\"]`) ?? null;\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 const allDividers = Array.from(this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split__divider') ?? []);\n allDividers.forEach((el) => {\n const o = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n const r = el.getBoundingClientRect();\n if (o === '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 (o === '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 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 // Update all horizontal bars (vertical splits) with Y delta\n state.hs.forEach((h) => {\n const node = this.resolveSplitNode(h.path);\n if (!node) return;\n const deltaY = clientY - h.startY;\n const minSize = 48;\n const pairTotal = h.beforeSize + h.afterSize;\n let newBefore = Math.min(Math.max(h.beforeSize + deltaY, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...h.initialSizes];\n sizesPx[h.index] = newBefore;\n sizesPx[h.index+1] = newAfter;\n const total = sizesPx.reduce((a,s)=>a+s,0);\n const normalized = total>0 ? sizesPx.map((s)=>s/total) : [];\n node.sizes = normalized;\n const children = Array.from(h.container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n normalized.forEach((size, idx) => { if (children[idx]) children[idx].style.flex = `${Math.max(size,0)} 1 0`; });\n });\n\n // Update all vertical bars (horizontal splits) with X delta\n state.vs.forEach((v) => {\n const node = this.resolveSplitNode(v.path);\n if (!node) return;\n const deltaX = clientX - v.startX;\n const minSize = 48;\n const pairTotal = v.beforeSize + v.afterSize;\n let newBefore = Math.min(Math.max(v.beforeSize + deltaX, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...v.initialSizes];\n sizesPx[v.index] = newBefore;\n sizesPx[v.index+1] = newAfter;\n const total = sizesPx.reduce((a,s)=>a+s,0);\n const normalized = total>0 ? sizesPx.map((s)=>s/total) : [];\n node.sizes = normalized;\n const children = Array.from(v.container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n normalized.forEach((size, idx) => { if (children[idx]) children[idx].style.flex = `${Math.max(size,0)} 1 0`; });\n });\n\n this.dispatchLayoutChanged();\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 const applySizes = (pathStr: string, 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 // Find divider index from any divider belonging to this path\n const divEl = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${pathStr}\"]`);\n const index = divEl ? Number.parseInt(divEl.dataset['index'] ?? '0', 10) : 0;\n const newSizes = mutate([...sizes], index);\n node.sizes = newSizes;\n const segments = path.segments.join('/');\n const container = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split[data-path=\"${segments}\"]`);\n if (container) {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n newSizes.forEach((s, i) => { if (children[i]) children[i].style.flex = `${Math.max(s, 0)} 1 0`; });\n }\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) return;\n const norm = this.normalizeSizesArray(sizes, node.children.length);\n node.sizes = norm;\n const segments = path!.segments.join('/');\n const container = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split[data-path=\"${segments}\"]`);\n if (container) {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n norm.forEach((s, i) => { if (children[i]) children[i].style.flex = `${Math.max(s, 0)} 1 0`; });\n }\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 applySizes(p.h.pathStr, (sizes, idx) => {\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.v.pathStr, (sizes, idx) => {\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 });\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 delete state.handle.dataset['resizing'];\n } catch (err) {\n /* no-op */\n }\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\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.resizeState &&\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 const container = this.documentRef.createElement('div');\n container.classList.add('dock-split');\n container.dataset['direction'] = node.direction;\n container.dataset['path'] = path.join('/');\n\n const sizes = Array.isArray(node.sizes) ? node.sizes : [];\n node.children.forEach((child, index) => {\n const childWrapper = this.documentRef.createElement('div');\n childWrapper.classList.add('dock-split__child');\n childWrapper.dataset['index'] = String(index);\n\n const size = sizes[index];\n if (typeof size === 'number' && Number.isFinite(size)) {\n childWrapper.style.flex = `${Math.max(size, 0)} 1 0`;\n } else {\n childWrapper.style.flex = '1 1 0';\n }\n\n childWrapper.appendChild(this.renderNode(child, [...path, index], floatingIndex));\n container.appendChild(childWrapper);\n\n if (index < node.children.length - 1) {\n const divider = this.documentRef.createElement('div');\n divider.classList.add('dock-split__divider');\n divider.setAttribute('role', 'separator');\n divider.tabIndex = 0;\n // Tag divider with metadata for intersection detection\n const dividerPath: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n divider.dataset['path'] = this.formatPath(dividerPath);\n divider.dataset['index'] = String(index);\n divider.dataset['orientation'] = node.direction;\n divider.addEventListener('pointerdown', (event) =>\n this.beginResize(\n event,\n container,\n floatingIndex !== undefined\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] },\n index,\n ),\n );\n container.appendChild(divider);\n }\n });\n\n return container;\n }\n\n private renderStack(\n node: DockStackNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n const stack = this.documentRef.createElement('div');\n stack.classList.add('dock-stack');\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 header = this.documentRef.createElement('div');\n header.classList.add('dock-stack__header');\n header.setAttribute('role', 'tablist');\n const content = this.documentRef.createElement('div');\n content.classList.add('dock-stack__content');\n\n const panes = Array.from(new Set(node.panes));\n if (panes.length === 0) {\n const empty = this.documentRef.createElement('div');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n content.appendChild(empty);\n stack.append(header, content);\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 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 const button = this.documentRef.createElement('button');\n button.type = 'button';\n button.classList.add('dock-tab');\n button.dataset['pane'] = paneName;\n button.id = tabId;\n button.textContent = this.titles[paneName] ?? paneName;\n button.setAttribute('role', 'tab');\n button.setAttribute('aria-controls', panelId);\n if (paneName === activePane) {\n button.classList.add('dock-tab--active');\n }\n button.setAttribute('aria-selected', String(paneName === activePane));\n button.draggable = true;\n button.addEventListener('pointerdown', (event) => {\n const stackEl = button.closest<HTMLElement>('.dock-stack');\n this.captureTabDragMetrics(event, stackEl ?? null);\n event.stopPropagation();\n });\n button.addEventListener('pointerup', () => this.clearPendingTabDragMetrics());\n button.addEventListener('pointercancel', () => this.clearPendingTabDragMetrics());\n button.addEventListener('dragstart', (event) => {\n const stackEl = button.closest<HTMLElement>('.dock-stack');\n this.beginPaneDrag(event, this.clonePath(location), paneName, stackEl ?? null);\n });\n button.addEventListener('dragend', () => {\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n });\n button.addEventListener('click', () => {\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 header.appendChild(button);\n\n const paneHost = this.documentRef.createElement('div');\n paneHost.classList.add('dock-stack__pane');\n paneHost.dataset['pane'] = paneName;\n paneHost.id = panelId;\n paneHost.setAttribute('role', 'tabpanel');\n paneHost.setAttribute('aria-labelledby', tabId);\n if (paneName !== activePane) {\n paneHost.setAttribute('hidden', '');\n }\n\n const slotEl = this.documentRef.createElement('slot');\n slotEl.name = paneName;\n paneHost.appendChild(slotEl);\n content.appendChild(paneHost);\n });\n\n stack.dataset['activePane'] = activePane;\n stack.append(header, content);\n return stack;\n }\n\n private beginResize(\n event: PointerEvent,\n container: HTMLElement,\n path: DockPath,\n index: number,\n ): void {\n event.preventDefault();\n const divider = event.currentTarget as HTMLElement | null;\n if (!divider) {\n return;\n }\n\n const orientation = (container.dataset['direction'] as 'horizontal' | 'vertical') ?? 'horizontal';\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n const initialSizes = children.map((child) => {\n const rect = child.getBoundingClientRect();\n return orientation === 'horizontal' ? rect.width : rect.height;\n });\n\n const beforeSize = initialSizes[index];\n const afterSize = initialSizes[index + 1];\n const startPos = orientation === 'horizontal' ? event.clientX : event.clientY;\n\n divider.setPointerCapture(event.pointerId);\n divider.dataset['resizing'] = 'true';\n this.resizeState = {\n path: this.clonePath(path),\n index,\n pointerId: event.pointerId,\n orientation,\n container,\n divider,\n startPos,\n initialSizes,\n beforeSize,\n afterSize,\n };\n\n this.startPointerTracking();\n // Compute localized snap targets: intersections with perpendicular dividers near this divider\n try {\n const rootRect = this.rootEl.getBoundingClientRect();\n const dividerRect = divider.getBoundingClientRect();\n const allDividers = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split__divider') ?? [],\n );\n const targets: number[] = [];\n if (orientation === 'horizontal') {\n // Current bar is vertical → snap X to centers of other vertical bars (no crossing check needed)\n allDividers.forEach((el) => {\n if (el === divider) return;\n const o = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n if (o !== 'horizontal') return; // vertical divider bars (split direction horizontal)\n const r = el.getBoundingClientRect();\n const xCenter = r.left + r.width / 2 - rootRect.left;\n targets.push(xCenter);\n });\n this.activeSnapAxis = 'x';\n this.activeSnapTargets = targets;\n this.renderSnapMarkersForDivider();\n } else {\n // Current bar is horizontal → snap Y to centers of other horizontal bars (no crossing check needed)\n allDividers.forEach((el) => {\n if (el === divider) return;\n const o = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n if (o !== 'vertical') return; // horizontal divider bars (split direction vertical)\n const r = el.getBoundingClientRect();\n const yCenter = r.top + r.height / 2 - rootRect.top;\n targets.push(yCenter);\n });\n this.activeSnapAxis = 'y';\n this.activeSnapTargets = targets;\n this.renderSnapMarkersForDivider();\n }\n } catch {\n this.activeSnapAxis = null;\n this.activeSnapTargets = [];\n this.clearSnapMarkers();\n }\n }\n\n private onPointerMove(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.handleCornerResizeMove(event);\n }\n if (this.resizeState && event.pointerId === this.resizeState.pointerId) {\n const state = this.resizeState;\n const splitNode = this.resolveSplitNode(state.path);\n if (!splitNode) {\n return;\n }\n\n let currentPos = state.orientation === 'horizontal' ? event.clientX : event.clientY;\n // Localized axis snap near neighboring intersections\n const tol = 10;\n const rootRect = this.rootEl.getBoundingClientRect();\n if (this.activeSnapTargets.length) {\n if (state.orientation === 'horizontal' && this.activeSnapAxis === 'x') {\n // Vertical divider snapping along X\n let closest = Number.POSITIVE_INFINITY;\n let best = currentPos;\n const pointerX = event.clientX;\n this.activeSnapTargets.forEach((sx) => {\n const px = rootRect.left + sx;\n const d = Math.abs(pointerX - px);\n if (d < closest) { closest = d; best = px; }\n });\n if (closest <= tol) currentPos = best;\n this.renderSnapMarkersForDivider();\n } else if (state.orientation === 'vertical' && this.activeSnapAxis === 'y') {\n // Horizontal divider snapping along Y\n let closest = Number.POSITIVE_INFINITY;\n let best = currentPos;\n const pointerY = event.clientY;\n this.activeSnapTargets.forEach((sy) => {\n const py = rootRect.top + sy;\n const d = Math.abs(pointerY - py);\n if (d < closest) { closest = d; best = py; }\n });\n if (closest <= tol) currentPos = best;\n this.renderSnapMarkersForDivider();\n }\n }\n const delta = currentPos - state.startPos;\n const minSize = 48;\n const pairTotal = state.beforeSize + state.afterSize;\n\n let newBefore = state.beforeSize + delta;\n // Optional snap with Shift\n if (event.shiftKey && pairTotal > 0) {\n const ratios = [1 / 3, 1 / 2, 2 / 3];\n const target = newBefore / pairTotal;\n let best = ratios[0];\n let bestDist = Math.abs(target - best);\n for (let i = 1; i < ratios.length; i++) {\n const d = Math.abs(target - ratios[i]);\n if (d < bestDist) {\n best = ratios[i];\n bestDist = d;\n }\n }\n newBefore = best * pairTotal;\n }\n\n newBefore = Math.min(Math.max(newBefore, minSize), pairTotal - minSize);\n let newAfter = pairTotal - newBefore;\n\n if (!Number.isFinite(newBefore) || !Number.isFinite(newAfter)) {\n return;\n }\n\n if (newAfter < minSize) {\n newAfter = minSize;\n newBefore = pairTotal - minSize;\n }\n\n const newSizesPixels = [...state.initialSizes];\n newSizesPixels[state.index] = newBefore;\n newSizesPixels[state.index + 1] = newAfter;\n\n const total = newSizesPixels.reduce((acc, size) => acc + size, 0);\n const normalized = total > 0 ? newSizesPixels.map((size) => size / total) : [];\n\n splitNode.sizes = normalized;\n const children = Array.from(state.container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n normalized.forEach((size, idx) => {\n if (children[idx]) {\n children[idx].style.flex = `${Math.max(size, 0)} 1 0`;\n }\n });\n this.dispatchLayoutChanged();\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 if (this.resizeState && event.pointerId === this.resizeState.pointerId) {\n const divider = this.resizeState.divider;\n divider.dataset['resizing'] = 'false';\n divider.releasePointerCapture(this.resizeState.pointerId);\n this.resizeState = null;\n this.scheduleRenderIntersectionHandles();\n this.activeSnapAxis = null;\n this.activeSnapTargets = [];\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 private beginPaneDrag(\n event: DragEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n if (!event.dataTransfer) {\n return;\n }\n\n // Create a ghost element for the drag image. This prevents the browser from cancelling\n // the drag operation when the original element is removed from the DOM during re-render.\n const ghost = (event.currentTarget as HTMLElement).cloneNode(true) as HTMLElement;\n ghost.style.position = 'absolute';\n ghost.style.left = '-9999px';\n ghost.style.top = '-9999px';\n ghost.style.width = `${(event.currentTarget as HTMLElement).offsetWidth}px`;\n ghost.style.height = `${(event.currentTarget as HTMLElement).offsetHeight}px`;\n this.shadowRoot?.appendChild(ghost);\n\n // Use the ghost element as the drag image.\n // The offset is set to where the user's cursor is on the original element.\n const dragImgOffsetX = Number.isFinite((event as any).offsetX) ? (event as any).offsetX : 0;\n const dragImgOffsetY = Number.isFinite((event as any).offsetY) ? (event as any).offsetY : 0;\n event.dataTransfer.setDragImage(ghost, dragImgOffsetX, dragImgOffsetY);\n\n // The ghost element is no longer needed after the drag image is set.\n // We defer its removal to ensure the browser has captured it.\n setTimeout(() => ghost.remove(), 0);\n\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 const headerEl = stackEl?.querySelector<HTMLElement>('.dock-stack__header') ?? 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 : Number.isFinite(event.clientX)\n ? event.clientX\n : undefined,\n startClientY:\n metrics && Number.isFinite(metrics.startClientY)\n ? metrics.startClientY\n : Number.isFinite(event.clientY)\n ? event.clientY\n : undefined,\n };\n // Seed last known pointer position from pointerdown metrics to avoid (0,0) glitches in Firefox\n if (\n this.dragState.startClientX !== undefined &&\n this.dragState.startClientY !== undefined &&\n Number.isFinite(this.dragState.startClientX) &&\n Number.isFinite(this.dragState.startClientY)\n ) {\n this.lastDragPointerPosition = {\n x: this.dragState.startClientX as number,\n y: this.dragState.startClientY as number,\n };\n }\n // Prefer the pointer offset relative to the dragged tab to avoid jumps on conversion\n if (Number.isFinite((event as any).offsetX)) {\n this.dragState.pointerOffsetX = (event as any).offsetX as number;\n }\n if (Number.isFinite((event as any).offsetY)) {\n this.dragState.pointerOffsetY = (event as any).offsetY as number;\n }\n this.updateDraggedFloatingPosition(event);\n this.startDragPointerTracking();\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', pane);\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; // not the only pane in this floating window\n }\n if (shouldConvert) {\n const startX = Number.isFinite(event.clientX) ? event.clientX : (this.dragState.startClientX ?? 0);\n const startY = Number.isFinite(event.clientY) ? event.clientY : (this.dragState.startClientY ?? 0);\n this.convertPendingTabDragToFloating(startX, startY);\n }\n }\n }\n }\n\n private preparePaneDragSource(\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n event: DragEvent,\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 const state = this.dragState;\n this.dragState = null;\n this.hideDropIndicator();\n this.clearHeaderDragPlaceholder();\n this.stopDragPointerTracking();\n this.lastDragPointerPosition = null;\n if (state && state.floatingIndex !== null && !state.dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private onDragOver(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n event.preventDefault();\n // Keep internal pointer tracking up-to-date.\n this.updateDraggedFloatingPosition(event);\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n\n // Some browsers intermittently report (0,0) for dragover coordinates.\n // Mirror the robust logic used in onDrop: prefer actual event coordinates\n // when valid, otherwise fall back to the last tracked pointer position.\n const pointFromEvent =\n Number.isFinite(event.clientX) && Number.isFinite(event.clientY)\n ? { clientX: event.clientX, clientY: event.clientY }\n : null;\n\n const point =\n pointFromEvent ??\n (this.lastDragPointerPosition\n ? { clientX: this.lastDragPointerPosition.x, clientY: this.lastDragPointerPosition.y }\n : null);\n\n const stack =\n this.findStackElement(event) ??\n (point ? this.findStackAtPoint(point.clientX, point.clientY) : null);\n if (!stack) {\n if (this.dropJoystick.dataset['visible'] !== 'true') {\n this.hideDropIndicator();\n }\n return;\n }\n\n const path = this.parsePath(stack.dataset['path']);\n // While reordering within the same header, suppress the joystick/indicator entirely\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 px = (point ? point.clientX : event.clientX) as number;\n const py = (point ? point.clientY : event.clientY) as number;\n if (Number.isFinite(px) && Number.isFinite(py) && this.isPointerOverSourceHeader(px, py)) {\n // Drive live reorder using the unified path so we update instantly.\n this.updatePaneDragDropTargetFromPoint(px, py);\n this.hideDropIndicator();\n return;\n }\n }\n // If the hovered stack changed, clear any sticky zone from the previous\n // target before computing the new zone.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n const eventZoneHint = this.extractDropZoneFromEvent(event);\n const pointZoneHint = point ? this.findDropZoneByPoint(point.clientX, point.clientY) : null;\n const zone = this.computeDropZone(stack, point ?? event, pointZoneHint ?? eventZoneHint);\n this.showDropIndicator(stack, zone);\n }\n\n private updateDraggedFloatingPosition(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n\n const { clientX, clientY } = event;\n const hasValidCoordinates =\n Number.isFinite(clientX) &&\n Number.isFinite(clientY) &&\n !(clientX === 0 && clientY === 0);\n\n if (hasValidCoordinates) {\n this.lastDragPointerPosition = { x: clientX, y: clientY };\n this.updateDraggedFloatingPositionFromPoint(clientX, clientY);\n return;\n }\n\n if (this.lastDragPointerPosition) {\n const { x, y } = this.lastDragPointerPosition;\n this.updateDraggedFloatingPositionFromPoint(x, y);\n }\n }\n\n private onGlobalDragOver(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n this.updateDraggedFloatingPosition(event);\n }\n\n private onDrag(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n this.updateDraggedFloatingPosition(event);\n }\n\n private onGlobalDragEnd(): void {\n // Attempt to finalize a drop even if the drop event doesn't reach us (Firefox/edge cases)\n const state = this.dragState;\n const pos = this.lastDragPointerPosition;\n if (state && pos) {\n const stack = this.findStackAtPoint(pos.x, pos.y);\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n const path = stack ? this.parsePath(stack.dataset['path']) : (joystickPath ?? joystickTargetPath);\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const zone = this.isDropZone(joystickZone)\n ? joystickZone\n : (stack ? this.computeDropZone(stack, { clientX: pos.x, clientY: pos.y }, null) : null);\n \n if (path && this.isDropZone(zone)) {\n this.handleDrop(path, zone!);\n this.hideDropIndicator();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n }\n } else {\n this.hideDropIndicator();\n }\n\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\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 // Ignore obviously bogus coordinates sometimes seen during HTML5 drag\n if (clientX === 0 && clientY === 0) {\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 const header = stack.querySelector<HTMLElement>('.dock-stack__header');\n if (header) {\n // Ensure placeholder exists and move it as the pointer moves\n this.ensureHeaderDragPlaceholder(header, this.dragState.pane);\n const idx = this.computeHeaderInsertIndex(header, clientX);\n if (this.dragState.liveReorderIndex !== idx) {\n this.updateHeaderDragPlaceholderPosition(header, idx);\n // Keep model reordering until drop; only move the placeholder now\n this.dragState.liveReorderIndex = idx;\n }\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 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 header = stackEl?.querySelector('.dock-stack__header') as HTMLElement | null;\n if (!header) {\n // Be conservative: if we cannot resolve the header, treat as inside\n return true;\n }\n const sr = this.shadowRoot;\n const elements = sr ? sr.elementsFromPoint(clientX, clientY) : [];\n for (const el of elements) {\n if (el instanceof HTMLElement && header.contains(el)) {\n return true;\n }\n }\n return false;\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 private ensureHeaderDragPlaceholder(header: HTMLElement, pane: string): void {\n if (this.dragState?.placeholderHeader === header && this.dragState.placeholderEl) {\n return;\n }\n const dragged = Array.from(header.querySelectorAll<HTMLElement>('.dock-tab')).find((t) => t.dataset['pane'] === pane) ?? null;\n if (!dragged) {\n return;\n }\n // Create placeholder\n const placeholder = this.documentRef.createElement('button');\n placeholder.type = 'button';\n placeholder.classList.add('dock-tab');\n placeholder.dataset['placeholder'] = 'true';\n // Keep the placeholder visually empty but reserving the same width\n placeholder.textContent = '';\n placeholder.setAttribute('aria-hidden', 'true');\n placeholder.style.width = `${dragged.offsetWidth}px`;\n // Hide the original dragged tab so it doesn't duplicate visually and free up its slot\n dragged.style.display = 'none';\n // Insert placeholder in the original position of the dragged tab\n header.insertBefore(placeholder, dragged);\n if (this.dragState) {\n this.dragState.placeholderHeader = header;\n this.dragState.placeholderEl = placeholder;\n }\n }\n\n // Move the placeholder to the computed target index within the header\n private updateHeaderDragPlaceholderPosition(header: HTMLElement, targetIndex: number): void {\n const placeholder = this.dragState?.placeholderEl ?? null;\n if (!placeholder) {\n return;\n }\n const draggedPane = this.dragState?.pane ?? null;\n const tabs = Array.from(header.querySelectorAll<HTMLElement>('.dock-tab'))\n .filter((t) => t !== placeholder && (!draggedPane || t.dataset['pane'] !== draggedPane));\n const clampedTarget = Math.max(0, Math.min(targetIndex, tabs.length));\n const ref = tabs[clampedTarget] ?? null;\n header.insertBefore(placeholder, ref);\n }\n\n // Remove placeholder and restore original tab visibility\n private clearHeaderDragPlaceholder(): void {\n const ph = this.dragState?.placeholderEl ?? null;\n const header = this.dragState?.placeholderHeader ?? null;\n if (header) {\n const dragged = this.dragState?.pane\n ? (Array.from(header.querySelectorAll<HTMLElement>('.dock-tab')).find((t) => t.dataset['pane'] === this.dragState?.pane) ?? null)\n : null;\n if (dragged) {\n dragged.style.display = '';\n }\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('mousemove', this.onDragMouseMove, true);\n win?.addEventListener('touchmove', this.onDragTouchMove, { passive: false });\n win?.addEventListener('mouseup', this.onDragMouseUp, true);\n win?.addEventListener('touchend', this.onDragTouchEnd, true);\n win?.addEventListener('touchcancel', this.onDragTouchEnd, 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('mousemove', this.onDragMouseMove, true);\n win?.removeEventListener('touchmove', this.onDragTouchMove);\n win?.removeEventListener('mouseup', this.onDragMouseUp, true);\n win?.removeEventListener('touchend', this.onDragTouchEnd, true);\n win?.removeEventListener('touchcancel', this.onDragTouchEnd, true);\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.clearPendingDragEndTimeout();\n }\n\n private onDragMouseMove(event: MouseEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n\n if (event.buttons === 0) {\n this.scheduleDeferredDragEnd();\n return;\n }\n\n this.lastDragPointerPosition = { x: event.clientX, y: event.clientY };\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n }\n\n private onDragTouchMove(event: TouchEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n\n const touch = event.touches[0];\n if (!touch) {\n this.scheduleDeferredDragEnd();\n return;\n }\n\n event.preventDefault();\n this.lastDragPointerPosition = { x: touch.clientX, y: touch.clientY };\n this.updateDraggedFloatingPositionFromPoint(touch.clientX, touch.clientY);\n }\n\n private onDragMouseUp(): void {\n // Prefer committing a drop from pointer-up since some browsers suppress drop events\n if (this.dragState) {\n const pos = this.lastDragPointerPosition;\n if (pos) {\n this.finalizeDropFromPoint(pos.x, pos.y);\n }\n }\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 const pointerOffsetX = Number.isFinite(this.dragState?.pointerOffsetX as number)\n ? (this.dragState!.pointerOffsetX as number)\n : metrics && Number.isFinite(metrics.pointerOffsetX)\n ? (metrics.pointerOffsetX as number)\n : width / 2;\n const pointerOffsetY = Number.isFinite(this.dragState?.pointerOffsetY as number)\n ? (this.dragState!.pointerOffsetY as number)\n : metrics && Number.isFinite(metrics.pointerOffsetY)\n ? (metrics.pointerOffsetY as number)\n : height / 2;\n\n const pointerLeft = Number.isFinite(clientX)\n ? clientX - hostRect.left - pointerOffsetX\n : 0;\n const pointerTop = Number.isFinite(clientY)\n ? clientY - hostRect.top - pointerOffsetY\n : 0;\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: pointerLeft,\n top: pointerTop,\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.render();\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 this.dispatchLayoutChanged();\n }\n\n // Compute the intended tab insert index within a header based on pointer X\n // Adds a slight rightward bias and uses the placeholder rect (if present)\n // to ensure offsets are correct even when the dragged tab is display:none.\n private computeHeaderInsertIndex(header: HTMLElement, clientX: number): number {\n const allTabs = Array.from(header.querySelectorAll<HTMLElement>('.dock-tab'));\n if (allTabs.length === 0) {\n return 0;\n }\n\n const draggedPane = this.dragState?.pane ?? null;\n const draggedEl = draggedPane\n ? (allTabs.find((t) => t.dataset['pane'] === draggedPane) ?? null)\n : null;\n const placeholderEl = header.querySelector<HTMLElement>('.dock-tab[data-placeholder=\"true\"]');\n\n const targets = allTabs.filter((t) => t !== draggedEl && t !== placeholderEl);\n if (targets.length === 0) {\n return 0;\n }\n\n const rightBias = 12;\n const leftBias = 0;\n\n const baseRect = placeholderEl\n ? placeholderEl.getBoundingClientRect()\n : draggedEl\n ? draggedEl.getBoundingClientRect()\n : null;\n const rectValid = !!baseRect && Number.isFinite(baseRect.width) && (baseRect as DOMRect).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 private onDragTouchEnd(): void {\n this.handleDragPointerUpCommon();\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 header = stack.querySelector<HTMLElement>('.dock-stack__header');\n if (header) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(header, clientX);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.render();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n return;\n }\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 onDrop(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n event.preventDefault();\n\n const pointFromEvent =\n Number.isFinite(event.clientX) && Number.isFinite(event.clientY)\n ? { clientX: event.clientX, clientY: event.clientY }\n : null;\n\n const point =\n pointFromEvent ??\n (this.lastDragPointerPosition\n ? {\n clientX: this.lastDragPointerPosition.x,\n clientY: this.lastDragPointerPosition.y,\n }\n : null);\n\n const stack =\n this.findStackElement(event) ??\n (point ? this.findStackAtPoint(point.clientX, point.clientY) : null);\n\n // Prefer joystick's stored target path when the joystick is visible (drop over buttons)\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n let path = stack\n ? this.parsePath(stack.dataset['path'])\n : (joystickPath ?? joystickTargetPath);\n if (!path && joystickVisible) {\n // As a last resort, target the main dock surface only when empty\n const dockPath = this.parsePath(this.dockedEl.dataset['path']);\n path = (!this.rootLayout ? dockPath : null);\n }\n\n // Defer same-header reorder decision until after zone resolution below\n\n // Prefer joystick's active zone if available, else infer from event/point\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const eventZoneHint = this.extractDropZoneFromEvent(event);\n const pointZoneHint = point ? this.findDropZoneByPoint(point.clientX, point.clientY) : null;\n const zone = this.isDropZone(joystickZone)\n ? joystickZone\n : stack\n ? this.computeDropZone(stack, point ?? event, pointZoneHint ?? eventZoneHint)\n : (this.isDropZone(pointZoneHint ?? eventZoneHint) ? (pointZoneHint ?? eventZoneHint) : null);\n\n \n // If still in same header and no side zone chosen, treat as in-header reorder\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n stack &&\n path &&\n this.pathsEqual(path, this.dragState.sourcePath) &&\n (!zone || zone === 'center')\n ) {\n const header = stack.querySelector<HTMLElement>('.dock-stack__header');\n if (header) {\n const x = (point ? point.clientX : event.clientX) as number;\n if (Number.isFinite(x)) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(header, x);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.render();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n this.endPaneDrag();\n return;\n }\n }\n }\n }\n // If joystick is visible and both path and zone are resolved, force using joystick as authoritative\n if (joystickVisible && path && this.isDropZone(joystickZone)) {\n this.handleDrop(path, joystickZone);\n this.endPaneDrag();\n return;\n }\n if (!zone) {\n this.hideDropIndicator();\n this.endPaneDrag();\n return;\n }\n this.handleDrop(path, zone);\n this.endPaneDrag();\n }\n\n private onDragLeave(event: DragEvent): void {\n const related = event.relatedTarget as Node | null;\n\n // During active drags, browsers can emit spurious dragleave with null\n // relatedTarget while the pointer is still over the joystick/buttons.\n // Be conservative: if we can resolve a stack/joystick at the last known\n // pointer position, don’t hide (prevents flicker of active state).\n if (this.dragState) {\n const pos =\n (Number.isFinite((event as DragEvent).clientX) && Number.isFinite((event as DragEvent).clientY))\n ? { x: (event as DragEvent).clientX, y: (event as DragEvent).clientY }\n : this.lastDragPointerPosition;\n if (pos) {\n const stackAtPoint = this.findStackAtPoint(pos.x, pos.y);\n if (stackAtPoint) {\n return; // still inside our drop area; ignore this dragleave\n }\n }\n }\n\n if (!related) {\n this.hideDropIndicator();\n return;\n }\n\n const rootContains = this.rootEl.contains(related);\n const joystickContains = this.dropJoystick.contains(related);\n if (!rootContains && !joystickContains) {\n this.hideDropIndicator();\n }\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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 as DragEvent).composedPath === 'function') {\n const path = (event as DragEvent).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 findStackElement(event: DragEvent): HTMLElement | null {\n const path = event.composedPath();\n const stack = this.findStackInTargets(path);\n if (stack) {\n return stack;\n }\n\n // If the root dock area is empty, treat the docked surface as a valid\n // target when it appears in the composed path.\n if (!this.rootLayout) {\n for (const target of path) {\n if (\n target instanceof HTMLElement &&\n (target === this.dockedEl || target.classList.contains('dock-docked'))\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 const headerButtons = stack.querySelectorAll<HTMLButtonElement>('.dock-tab');\n headerButtons.forEach((button) => {\n const isSelected = button.dataset['pane'] === paneName;\n button.classList.toggle('dock-tab--active', isSelected);\n button.setAttribute('aria-selected', String(isSelected));\n });\n\n const panes = stack.querySelectorAll<HTMLElement>('.dock-stack__pane');\n panes.forEach((pane) => {\n if (pane.dataset['pane'] === paneName) {\n pane.removeAttribute('hidden');\n } else {\n pane.setAttribute('hidden', '');\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 if (!path) {\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\ndeclare global {\n interface HTMLElementTagNameMap {\n 'mint-dock-manager': MintDockManagerElement;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n Output,\n QueryList,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } 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 standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockManagerComponent implements AfterViewInit {\n @Input()\n set layout(value: DockLayoutNode | DockLayout | null) {\n const snapshot = this.cloneLayout(this.ensureSnapshot(value));\n this._layout = snapshot;\n this.layoutString = this.stringifyLayout(snapshot);\n this.applyLayout();\n }\n get layout(): 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 @Output() layoutChange = new EventEmitter<DockLayoutSnapshot | null>();\n @Output() layoutSnapshotChange = new EventEmitter<DockLayoutSnapshot>();\n\n layoutString: string | null = null;\n\n @ContentChildren(BsDockPaneComponent) panes: QueryList<BsDockPaneComponent> = new QueryList();\n @ViewChild('manager', { static: true }) managerRef!: ElementRef<MintDockManagerElement>;\n\n protected readonly trackByPane = (_: number, pane: BsDockPaneComponent) => pane.name;\n\n private _layout: DockLayoutSnapshot = { root: null, floating: [] };\n\n constructor(\n private readonly changeDetector: ChangeDetectorRef,\n @Inject(DOCUMENT) documentRef: Document,\n ) {\n if (documentRef) {\n MintDockManagerElement.configureDocument(documentRef);\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 = this.stringifyLayout(this._layout);\n this.layoutChange.emit(this.layout);\n this.layoutSnapshotChange.emit(this.cloneLayout(snapshot));\n this.changeDetector.markForCheck();\n }\n\n private applyLayout(): void {\n if (!this.managerRef) {\n return;\n }\n\n const element = this.managerRef.nativeElement;\n const layout = this.layout;\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","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BsDockManagerComponent } from './components/dock-manager.component';\nimport { BsDockPaneComponent } from './components/dock-pane.component';\n\n@NgModule({\n declarations: [BsDockManagerComponent, BsDockPaneComponent],\n imports: [CommonModule],\n exports: [BsDockManagerComponent, BsDockPaneComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class BsDockModule {}\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.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/src/lib/dock.module.ts","../../../../libs/mintplayer-ng-bootstrap/dock/mintplayer-ng-bootstrap-dock.ts"],"sourcesContent":["import { AfterContentInit, Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'bs-dock-pane',\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n standalone: false,\n})\nexport class BsDockPaneComponent implements AfterContentInit {\n @Input() name!: string;\n @Input() title?: string;\n\n @ViewChild(TemplateRef, { static: true }) template!: TemplateRef<unknown>;\n\n ngAfterContentInit(): void {\n if (!this.name) {\n throw new Error('bs-dock-pane requires a unique \"name\" input.');\n }\n }\n}\n","\nimport {\n DockFloatingStackLayout,\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n DockSplitNode,\n DockStackNode,\n} from '../types/dock-layout';\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\nconst templateHtml = `\n <style>\n :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-split__child,\n .dock-stack,\n .dock-stack__content,\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 rgba(0, 0, 0, 0.3);\n border-radius: 0.5rem;\n background: rgba(255, 255, 255, 0.92);\n box-shadow: 0 16px 32px rgba(15, 23, 42, 0.25);\n overflow: hidden;\n min-width: 12rem;\n min-height: 8rem;\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(\n to bottom,\n rgba(148, 163, 184, 0.6),\n rgba(148, 163, 184, 0.25)\n );\n border-bottom: 1px solid rgba(148, 163, 184, 0.5);\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: rgba(30, 41, 59, 0.95);\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(148, 163, 184, 0.25);\n transition: background 120ms ease;\n }\n\n .dock-floating__resizer:hover,\n .dock-floating__resizer[data-resizing='true'] {\n background: rgba(148, 163, 184, 0.4);\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 display: flex;\n flex: 1 1 0;\n gap: var(--dock-split-gap);\n position: relative;\n }\n\n .dock-split[data-direction=\"vertical\"] {\n flex-direction: column;\n }\n\n .dock-split[data-direction=\"horizontal\"] {\n flex-direction: row;\n }\n\n .dock-split__child {\n display: flex;\n flex: 1 1 0;\n position: relative;\n }\n\n .dock-split__divider {\n position: relative;\n flex: 0 0 auto;\n background: rgba(0, 0, 0, 0.08);\n transition: background 120ms ease;\n }\n\n .dock-split[data-direction=\"horizontal\"] > .dock-split__divider {\n width: 0.5rem;\n cursor: col-resize;\n /* Extend through perpendicular gaps for visual continuity */\n margin-top: calc(var(--dock-split-gap) * -1);\n margin-bottom: calc(var(--dock-split-gap) * -1);\n }\n\n .dock-split[data-direction=\"vertical\"] > .dock-split__divider {\n height: 0.5rem;\n cursor: row-resize;\n /* Extend through perpendicular gaps for visual continuity */\n margin-left: calc(var(--dock-split-gap) * -1);\n margin-right: calc(var(--dock-split-gap) * -1);\n }\n\n .dock-split__divider::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 999px;\n background: rgba(0, 0, 0, 0.25);\n }\n\n .dock-split[data-direction=\"horizontal\"] > .dock-split__divider::after {\n width: 0.125rem;\n height: 60%;\n }\n\n .dock-split[data-direction=\"vertical\"] > .dock-split__divider::after {\n width: 60%;\n height: 0.125rem;\n }\n\n .dock-split__divider:hover,\n .dock-split__divider:focus-visible,\n .dock-split__divider[data-resizing='true'] {\n background: rgba(59, 130, 246, 0.35);\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: rgba(59, 130, 246, 0.2);\n border: 1px solid rgba(59, 130, 246, 0.6);\n box-shadow: 0 2px 6px rgba(15, 23, 42, 0.2);\n cursor: all-scroll;\n pointer-events: auto;\n opacity: 0;\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(59, 130, 246, 0.35);\n border-color: rgba(59, 130, 246, 0.9);\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: rgba(59, 130, 246, 0.7);\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);\n pointer-events: none;\n z-index: 130;\n }\n\n .dock-stack {\n display: flex;\n flex-direction: column;\n flex: 1 1 0;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.25rem;\n background: rgba(255, 255, 255, 0.75);\n backdrop-filter: blur(4px);\n }\n\n .dock-stack__header {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n padding: 0.25rem;\n background: rgba(0, 0, 0, 0.05);\n border-bottom: 1px solid rgba(0, 0, 0, 0.15);\n }\n\n .dock-tab {\n appearance: none;\n border: none;\n padding: 0.25rem 0.5rem;\n border-radius: 0.25rem;\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: grab;\n transition: background 160ms ease;\n }\n\n .dock-tab:active {\n cursor: grabbing;\n }\n\n .dock-tab:hover {\n background: rgba(0, 0, 0, 0.05);\n }\n\n .dock-tab:focus-visible {\n outline: 2px solid rgba(59, 130, 246, 0.8);\n outline-offset: 1px;\n }\n\n .dock-tab--active {\n background: rgba(59, 130, 246, 0.15);\n }\n\n .dock-stack__content {\n position: relative;\n flex: 1 1 auto;\n display: flex;\n overflow: hidden;\n }\n\n .dock-stack__pane {\n position: relative;\n flex: 1 1 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .dock-stack__pane[hidden] {\n display: none !important;\n }\n\n .dock-drop-indicator {\n position: absolute;\n pointer-events: none;\n border: 2px solid rgba(59, 130, 246, 0.9);\n background: rgba(59, 130, 246, 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: rgba(15, 23, 42, 0.15);\n box-shadow: 0 4px 12px rgba(15, 23, 42, 0.25);\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 rgba(59, 130, 246, 0.4);\n background: rgba(255, 255, 255, 0.9);\n color: rgba(30, 64, 175, 0.9);\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: rgba(59, 130, 246, 0.25);\n border-color: rgba(59, 130, 246, 0.8);\n color: rgba(30, 64, 175, 1);\n }\n\n .dock-drop-joystick__button:focus-visible {\n outline: 2px solid rgba(59, 130, 246, 0.9);\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 </style>\n <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>\n`;\n\nlet cachedTemplate: HTMLTemplateElement | null = null;\nlet cachedTemplateDocument: Document | null = null;\n\nfunction ensureTemplate(documentRef: Document): HTMLTemplateElement {\n if (!cachedTemplate || cachedTemplateDocument !== documentRef) {\n cachedTemplate = documentRef.createElement('template');\n cachedTemplate.innerHTML = templateHtml;\n cachedTemplateDocument = documentRef;\n }\n\n return cachedTemplate;\n}\n\nexport class MintDockManagerElement extends HTMLElement {\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 get observedAttributes(): string[] {\n return ['layout'];\n // return ['layout', 'debug-snap-markers'];\n }\n\n private static instanceCounter = 0;\n\n private readonly documentRef: Document;\n private readonly windowRef: (Window & typeof globalThis) | null;\n private readonly rootEl: HTMLElement;\n private readonly dockedEl: HTMLElement;\n private readonly floatingLayerEl: HTMLElement;\n private readonly dropIndicator: HTMLElement;\n private readonly dropJoystick: HTMLElement;\n private readonly 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 resizeState:\n | {\n path: DockPath;\n index: number;\n pointerId: number;\n orientation: 'horizontal' | 'vertical';\n container: HTMLElement;\n divider: HTMLElement;\n startPos: number;\n initialSizes: number[];\n beforeSize: number;\n afterSize: 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 intersectionHandles: Map<string, HTMLElement> = new Map();\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 a divider\n private activeSnapAxis: 'x' | 'y' | null = null;\n private activeSnapTargets: number[] = [];\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 private renderSnapMarkersForDivider(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n // Clear previous\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n if (!this.resizeState || !this.activeSnapAxis || this.activeSnapTargets.length === 0) return;\n const rootRect = this.rootEl.getBoundingClientRect();\n const dRect = this.resizeState.divider.getBoundingClientRect();\n if (this.activeSnapAxis === 'x') {\n const y = dRect.top + dRect.height / 2 - rootRect.top;\n this.activeSnapTargets.forEach((sx) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${rootRect.left + sx - rootRect.left}px`;\n dot.style.top = `${y}px`;\n layer.appendChild(dot);\n });\n } else if (this.activeSnapAxis === 'y') {\n const x = dRect.left + dRect.width / 2 - rootRect.left;\n this.activeSnapTargets.forEach((sy) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${x}px`;\n dot.style.top = `${rootRect.top + sy - rootRect.top}px`;\n layer.appendChild(dot);\n });\n }\n }\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 first entries\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 vRect = st.vs[0].container.querySelector<HTMLElement>(':scope > .dock-split__divider')?.getBoundingClientRect();\n if (vRect) centerX = vRect.left + vRect.width / 2 - rootRect.left;\n }\n if (st.hs.length > 0) {\n const hRect = st.hs[0].container.querySelector<HTMLElement>(':scope > .dock-split__divider')?.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 const documentRef = this.resolveDocument();\n this.documentRef = documentRef;\n this.windowRef = this.resolveWindow(documentRef);\n const shadowRoot = this.attachShadow({ mode: 'open' });\n const template = ensureTemplate(documentRef);\n shadowRoot.appendChild(template.content.cloneNode(true));\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\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\n const floatingLayer = shadowRoot.querySelector<HTMLElement>(\n '.dock-floating-layer',\n );\n if (!floatingLayer) {\n throw new Error('mint-dock-manager template is missing the floating layer element.');\n }\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\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\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 this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onDragOver = this.onDragOver.bind(this);\n this.onGlobalDragOver = this.onGlobalDragOver.bind(this);\n this.onGlobalDragEnd = this.onGlobalDragEnd.bind(this);\n this.onDrop = this.onDrop.bind(this);\n this.onDragLeave = this.onDragLeave.bind(this);\n this.onDrag = this.onDrag.bind(this);\n this.onDragMouseMove = this.onDragMouseMove.bind(this);\n this.onDragTouchMove = this.onDragTouchMove.bind(this);\n this.onDragMouseUp = this.onDragMouseUp.bind(this);\n this.onDragTouchEnd = this.onDragTouchEnd.bind(this);\n this.onWindowResize = this.onWindowResize.bind(this);\n }\n\n connectedCallback(): void {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\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 this.render();\n this.rootEl.addEventListener('dragover', this.onDragOver);\n this.rootEl.addEventListener('drop', this.onDrop);\n this.rootEl.addEventListener('dragleave', this.onDragLeave);\n this.dropJoystick.addEventListener('dragover', this.onDragOver);\n this.dropJoystick.addEventListener('drop', this.onDrop);\n this.dropJoystick.addEventListener('dragleave', this.onDragLeave);\n // Strengthen zone tracking by reacting to dragenter/dragover directly on the buttons.\n // This avoids relying solely on hit-testing each frame which can be jittery during HTML5 drag.\n this.dropJoystickButtons.forEach((btn) => {\n const handler = (e: DragEvent) => {\n if (!this.dragState) return;\n const z = btn.dataset['zone'];\n if (this.isDropZone(z)) {\n this.updateDropJoystickActiveZone(z);\n e.preventDefault();\n }\n };\n btn.addEventListener('dragenter', handler);\n btn.addEventListener('dragover', handler);\n });\n const win = this.windowRef;\n win?.addEventListener('dragover', this.onGlobalDragOver);\n win?.addEventListener('drag', this.onDrag);\n win?.addEventListener('dragend', this.onGlobalDragEnd, true);\n win?.addEventListener('resize', this.onWindowResize);\n }\n\n disconnectedCallback(): void {\n this.rootEl.removeEventListener('dragover', this.onDragOver);\n this.rootEl.removeEventListener('drop', this.onDrop);\n this.rootEl.removeEventListener('dragleave', this.onDragLeave);\n this.dropJoystick.removeEventListener('dragover', this.onDragOver);\n this.dropJoystick.removeEventListener('drop', this.onDrop);\n this.dropJoystick.removeEventListener('dragleave', this.onDragLeave);\n const win = this.windowRef;\n win?.removeEventListener('dragover', this.onGlobalDragOver);\n win?.removeEventListener('drag', this.onDrag);\n win?.removeEventListener('dragend', this.onGlobalDragEnd, true);\n this.stopDragPointerTracking();\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n const win2 = this.windowRef;\n win2?.removeEventListener('resize', this.onWindowResize);\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\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 this.rootLayout = this.cloneLayoutNode(snapshot.root);\n this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);\n this.titles = snapshot.titles ? { ...snapshot.titles } : {};\n this.render();\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 render(): void {\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 this.scheduleRenderIntersectionHandles();\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 onWindowResize(): void {\n // Recompute intersection handles on window resize\n this.scheduleRenderIntersectionHandles();\n }\n\n private scheduleRenderIntersectionHandles(): void {\n this.intersectionRaf = null;\n this.renderIntersectionHandles();\n }\n\n private renderIntersectionHandles(): void {\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n // Keep existing handles; we will diff and update positions\n // 1) Clean up legacy handles (created before keying) that lack a data-key\n Array.from(layer.querySelectorAll('.dock-intersection-handle'))\n .filter((el) => !(el as HTMLElement).dataset['key'])\n .forEach((el) => el.remove());\n\n // 2) Rebuild the internal map from DOM to avoid drifting state and dedupe duplicates\n const domByKey = new Map<string, HTMLElement>();\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle[data-key]')).forEach((el) => {\n const key = el.dataset['key'] ?? '';\n if (!key) return;\n if (domByKey.has(key)) {\n // Remove duplicates with the same key, keep the first one\n el.remove();\n return;\n }\n domByKey.set(key, el);\n // Ensure listener is attached only once\n if (!el.dataset['listener']) {\n el.dataset['listener'] = '1';\n // Listener will be (re)assigned later when we know the current h/v pair\n }\n });\n // Sync internal map with DOM\n this.intersectionHandles = domByKey;\n\n const rootRect = this.rootEl.getBoundingClientRect();\n\n // If a corner resize is active, only update that handle's position and avoid creating new ones\n if (this.cornerResizeState) {\n const st = this.cornerResizeState;\n const h0 = st.hs[0];\n const v0 = st.vs[0];\n const hPathStr = this.formatPath(h0.path);\n const vPathStr = this.formatPath(v0.path);\n const key = `${hPathStr}:${h0.index}|${vPathStr}:${v0.index}`;\n // Find divider elements corresponding to active paths\n const hDiv = this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split__divider[data-path=\"${hPathStr}\"][data-index=\"${h0.index}\"]`,\n );\n const vDiv = this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split__divider[data-path=\"${vPathStr}\"][data-index=\"${v0.index}\"]`,\n );\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 const handle = st.handle;\n if (!handle.dataset['key']) {\n handle.dataset['key'] = key;\n }\n this.intersectionHandles.set(key, handle);\n handle.style.left = `${x}px`;\n handle.style.top = `${y}px`;\n // Remove any other handles that don't match the active key\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if ((el.dataset['key'] ?? '') !== key) {\n el.remove();\n }\n });\n // Normalize internal map as well\n this.intersectionHandles = new Map([[key, handle]]);\n }\n return;\n }\n const allDividers = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split__divider') ?? [],\n );\n\n const hDividers: {\n el: HTMLElement;\n rect: DOMRect;\n path: DockPath | null;\n pathStr?: string;\n index: number;\n container: HTMLElement;\n }[] = [];\n const vDividers: {\n el: HTMLElement;\n rect: DOMRect;\n path: DockPath | null;\n pathStr?: string;\n index: number;\n container: HTMLElement;\n }[] = [];\n\n allDividers.forEach((el) => {\n const orientation = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n const rect = el.getBoundingClientRect();\n const container = el.closest('.dock-split') as HTMLElement | null;\n const path = this.parsePath(el.dataset['path']);\n const pathStr = el.dataset['path'] ?? '';\n const index = Number.parseInt(el.dataset['index'] ?? '', 10);\n if (!container || !Number.isFinite(index)) return;\n const info = { el, rect, path, pathStr, index, container };\n // Note: node.direction === 'horizontal' means the split lays out children left-to-right,\n // which yields a VERTICAL divider bar. So mapping is inverted here.\n if (orientation === 'horizontal') {\n vDividers.push(info);\n } else if (orientation === 'vertical') {\n hDividers.push(info);\n }\n });\n\n const desiredKeys = new Set<string>();\n\n const tol = 24; // px tolerance to account for gaps and subpixel layout\n const groupMap = new Map<string, HTMLElement>();\n const groupPairs = new Map<string, 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\n const x = vCenterX - rootRect.left;\n const y = hCenterY - rootRect.top;\n const key = `${h.pathStr}:${h.index}|${v.pathStr}:${v.index}`;\n const gk = `${Math.round(x)}:${Math.round(y)}`;\n let handle = groupMap.get(gk);\n if (!handle) {\n // Try reuse via existing pair mapping\n handle = this.intersectionHandles.get(key) ?? null as any;\n if (!handle) {\n 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 handle.dataset['key'] = key;\n handle.dataset['listener'] = '1';\n handle.addEventListener('pointerdown', (ev) => this.beginCornerResize(ev, h, v, handle!));\n handle.addEventListener('dblclick', (ev) => this.onIntersectionDoubleClick(ev, handle!));\n layer.appendChild(handle);\n }\n groupMap.set(gk, handle);\n }\n // Track pairs for this group and map all pair keys to the same handle\n const arr = groupPairs.get(gk) ?? [];\n arr.push({ h: { pathStr: h.pathStr ?? '', index: h.index }, v: { pathStr: v.pathStr ?? '', index: v.index } });\n groupPairs.set(gk, arr);\n this.intersectionHandles.set(key, handle);\n // Update position for the grouped handle\n handle.style.left = `${x}px`;\n handle.style.top = `${y}px`;\n });\n });\n\n // Attach grouped pairs data to each handle and prune stale ones\n const keep = new Set<HTMLElement>(groupMap.values());\n groupMap.forEach((handle, gk) => {\n const pairs = groupPairs.get(gk) ?? [];\n handle.dataset['pairs'] = JSON.stringify(pairs);\n });\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if (!keep.has(el)) {\n el.remove();\n }\n });\n // Reset intersectionHandles to only currently mapped keys\n const newMap = new Map<string, HTMLElement>();\n groupPairs.forEach((pairs, gk) => {\n const handle = groupMap.get(gk)!;\n pairs.forEach((p) => newMap.set(`${p.h.pathStr}:${p.h.index}|${p.v.pathStr}:${p.v.index}`, handle));\n });\n this.intersectionHandles = newMap;\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 div = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${pathStr}\"][data-index=\"${index}\"]`) ?? null;\n const container = div?.closest('.dock-split') as HTMLElement | null;\n if (!container) return;\n if (axis === 'h') {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n const initial = children.map((c) => c.getBoundingClientRect().height);\n hs.push({ path, index, container, initialSizes: initial, before: initial[index], after: initial[index+1] });\n } else {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n const initial = children.map((c) => c.getBoundingClientRect().width);\n vs.push({ path, index, container, initialSizes: initial, before: initial[index], after: initial[index+1] });\n }\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\n let centerX: number | null = null;\n let centerY: number | null = null;\n // Resolve one vertical bar (from vs) and one horizontal bar (from hs)\n if (vs.length > 0) {\n const vPair = vs[0];\n const vPathStr = this.formatPath(vPair.path);\n const vDiv = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${vPathStr}\"][data-index=\"${vPair.index}\"]`) ?? null;\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 hPathStr = this.formatPath(hPair.path);\n const hDiv = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${hPathStr}\"][data-index=\"${hPair.index}\"]`) ?? null;\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 const allDividers = Array.from(this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split__divider') ?? []);\n allDividers.forEach((el) => {\n const o = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n const r = el.getBoundingClientRect();\n if (o === '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 (o === '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 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 // Update all horizontal bars (vertical splits) with Y delta\n state.hs.forEach((h) => {\n const node = this.resolveSplitNode(h.path);\n if (!node) return;\n const deltaY = clientY - h.startY;\n const minSize = 48;\n const pairTotal = h.beforeSize + h.afterSize;\n let newBefore = Math.min(Math.max(h.beforeSize + deltaY, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...h.initialSizes];\n sizesPx[h.index] = newBefore;\n sizesPx[h.index+1] = newAfter;\n const total = sizesPx.reduce((a,s)=>a+s,0);\n const normalized = total>0 ? sizesPx.map((s)=>s/total) : [];\n node.sizes = normalized;\n const children = Array.from(h.container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n normalized.forEach((size, idx) => { if (children[idx]) children[idx].style.flex = `${Math.max(size,0)} 1 0`; });\n });\n\n // Update all vertical bars (horizontal splits) with X delta\n state.vs.forEach((v) => {\n const node = this.resolveSplitNode(v.path);\n if (!node) return;\n const deltaX = clientX - v.startX;\n const minSize = 48;\n const pairTotal = v.beforeSize + v.afterSize;\n let newBefore = Math.min(Math.max(v.beforeSize + deltaX, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...v.initialSizes];\n sizesPx[v.index] = newBefore;\n sizesPx[v.index+1] = newAfter;\n const total = sizesPx.reduce((a,s)=>a+s,0);\n const normalized = total>0 ? sizesPx.map((s)=>s/total) : [];\n node.sizes = normalized;\n const children = Array.from(v.container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n normalized.forEach((size, idx) => { if (children[idx]) children[idx].style.flex = `${Math.max(size,0)} 1 0`; });\n });\n\n this.dispatchLayoutChanged();\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 const applySizes = (pathStr: string, 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 // Find divider index from any divider belonging to this path\n const divEl = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split__divider[data-path=\"${pathStr}\"]`);\n const index = divEl ? Number.parseInt(divEl.dataset['index'] ?? '0', 10) : 0;\n const newSizes = mutate([...sizes], index);\n node.sizes = newSizes;\n const segments = path.segments.join('/');\n const container = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split[data-path=\"${segments}\"]`);\n if (container) {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n newSizes.forEach((s, i) => { if (children[i]) children[i].style.flex = `${Math.max(s, 0)} 1 0`; });\n }\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) return;\n const norm = this.normalizeSizesArray(sizes, node.children.length);\n node.sizes = norm;\n const segments = path!.segments.join('/');\n const container = this.shadowRoot?.querySelector<HTMLElement>(`.dock-split[data-path=\"${segments}\"]`);\n if (container) {\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n norm.forEach((s, i) => { if (children[i]) children[i].style.flex = `${Math.max(s, 0)} 1 0`; });\n }\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 applySizes(p.h.pathStr, (sizes, idx) => {\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.v.pathStr, (sizes, idx) => {\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 });\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 delete state.handle.dataset['resizing'];\n } catch (err) {\n /* no-op */\n }\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\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.resizeState &&\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 const container = this.documentRef.createElement('div');\n container.classList.add('dock-split');\n container.dataset['direction'] = node.direction;\n container.dataset['path'] = path.join('/');\n\n const sizes = Array.isArray(node.sizes) ? node.sizes : [];\n node.children.forEach((child, index) => {\n const childWrapper = this.documentRef.createElement('div');\n childWrapper.classList.add('dock-split__child');\n childWrapper.dataset['index'] = String(index);\n\n const size = sizes[index];\n if (typeof size === 'number' && Number.isFinite(size)) {\n childWrapper.style.flex = `${Math.max(size, 0)} 1 0`;\n } else {\n childWrapper.style.flex = '1 1 0';\n }\n\n childWrapper.appendChild(this.renderNode(child, [...path, index], floatingIndex));\n container.appendChild(childWrapper);\n\n if (index < node.children.length - 1) {\n const divider = this.documentRef.createElement('div');\n divider.classList.add('dock-split__divider');\n divider.setAttribute('role', 'separator');\n divider.tabIndex = 0;\n // Tag divider with metadata for intersection detection\n const dividerPath: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n divider.dataset['path'] = this.formatPath(dividerPath);\n divider.dataset['index'] = String(index);\n divider.dataset['orientation'] = node.direction;\n divider.addEventListener('pointerdown', (event) =>\n this.beginResize(\n event,\n container,\n floatingIndex !== undefined\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] },\n index,\n ),\n );\n container.appendChild(divider);\n }\n });\n\n return container;\n }\n\n private renderStack(\n node: DockStackNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n const stack = this.documentRef.createElement('div');\n stack.classList.add('dock-stack');\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 header = this.documentRef.createElement('div');\n header.classList.add('dock-stack__header');\n header.setAttribute('role', 'tablist');\n const content = this.documentRef.createElement('div');\n content.classList.add('dock-stack__content');\n\n const panes = Array.from(new Set(node.panes));\n if (panes.length === 0) {\n const empty = this.documentRef.createElement('div');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n content.appendChild(empty);\n stack.append(header, content);\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 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 const button = this.documentRef.createElement('button');\n button.type = 'button';\n button.classList.add('dock-tab');\n button.dataset['pane'] = paneName;\n button.id = tabId;\n button.textContent = this.titles[paneName] ?? paneName;\n button.setAttribute('role', 'tab');\n button.setAttribute('aria-controls', panelId);\n if (paneName === activePane) {\n button.classList.add('dock-tab--active');\n }\n button.setAttribute('aria-selected', String(paneName === activePane));\n button.draggable = true;\n button.addEventListener('pointerdown', (event) => {\n const stackEl = button.closest<HTMLElement>('.dock-stack');\n this.captureTabDragMetrics(event, stackEl ?? null);\n event.stopPropagation();\n });\n button.addEventListener('pointerup', () => this.clearPendingTabDragMetrics());\n button.addEventListener('pointercancel', () => this.clearPendingTabDragMetrics());\n button.addEventListener('dragstart', (event) => {\n const stackEl = button.closest<HTMLElement>('.dock-stack');\n this.beginPaneDrag(event, this.clonePath(location), paneName, stackEl ?? null);\n });\n button.addEventListener('dragend', () => {\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n });\n button.addEventListener('click', () => {\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 header.appendChild(button);\n\n const paneHost = this.documentRef.createElement('div');\n paneHost.classList.add('dock-stack__pane');\n paneHost.dataset['pane'] = paneName;\n paneHost.id = panelId;\n paneHost.setAttribute('role', 'tabpanel');\n paneHost.setAttribute('aria-labelledby', tabId);\n if (paneName !== activePane) {\n paneHost.setAttribute('hidden', '');\n }\n\n const slotEl = this.documentRef.createElement('slot');\n slotEl.name = paneName;\n paneHost.appendChild(slotEl);\n content.appendChild(paneHost);\n });\n\n stack.dataset['activePane'] = activePane;\n stack.append(header, content);\n return stack;\n }\n\n private beginResize(\n event: PointerEvent,\n container: HTMLElement,\n path: DockPath,\n index: number,\n ): void {\n event.preventDefault();\n const divider = event.currentTarget as HTMLElement | null;\n if (!divider) {\n return;\n }\n\n const orientation = (container.dataset['direction'] as 'horizontal' | 'vertical') ?? 'horizontal';\n const children = Array.from(container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n const initialSizes = children.map((child) => {\n const rect = child.getBoundingClientRect();\n return orientation === 'horizontal' ? rect.width : rect.height;\n });\n\n const beforeSize = initialSizes[index];\n const afterSize = initialSizes[index + 1];\n const startPos = orientation === 'horizontal' ? event.clientX : event.clientY;\n\n divider.setPointerCapture(event.pointerId);\n divider.dataset['resizing'] = 'true';\n this.resizeState = {\n path: this.clonePath(path),\n index,\n pointerId: event.pointerId,\n orientation,\n container,\n divider,\n startPos,\n initialSizes,\n beforeSize,\n afterSize,\n };\n\n this.startPointerTracking();\n // Compute localized snap targets: intersections with perpendicular dividers near this divider\n try {\n const rootRect = this.rootEl.getBoundingClientRect();\n const dividerRect = divider.getBoundingClientRect();\n const allDividers = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split__divider') ?? [],\n );\n const targets: number[] = [];\n if (orientation === 'horizontal') {\n // Current bar is vertical → snap X to centers of other vertical bars (no crossing check needed)\n allDividers.forEach((el) => {\n if (el === divider) return;\n const o = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n if (o !== 'horizontal') return; // vertical divider bars (split direction horizontal)\n const r = el.getBoundingClientRect();\n const xCenter = r.left + r.width / 2 - rootRect.left;\n targets.push(xCenter);\n });\n this.activeSnapAxis = 'x';\n this.activeSnapTargets = targets;\n this.renderSnapMarkersForDivider();\n } else {\n // Current bar is horizontal → snap Y to centers of other horizontal bars (no crossing check needed)\n allDividers.forEach((el) => {\n if (el === divider) return;\n const o = (el.dataset['orientation'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n if (o !== 'vertical') return; // horizontal divider bars (split direction vertical)\n const r = el.getBoundingClientRect();\n const yCenter = r.top + r.height / 2 - rootRect.top;\n targets.push(yCenter);\n });\n this.activeSnapAxis = 'y';\n this.activeSnapTargets = targets;\n this.renderSnapMarkersForDivider();\n }\n } catch {\n this.activeSnapAxis = null;\n this.activeSnapTargets = [];\n this.clearSnapMarkers();\n }\n }\n\n private onPointerMove(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.handleCornerResizeMove(event);\n }\n if (this.resizeState && event.pointerId === this.resizeState.pointerId) {\n const state = this.resizeState;\n const splitNode = this.resolveSplitNode(state.path);\n if (!splitNode) {\n return;\n }\n\n let currentPos = state.orientation === 'horizontal' ? event.clientX : event.clientY;\n // Localized axis snap near neighboring intersections\n const tol = 10;\n const rootRect = this.rootEl.getBoundingClientRect();\n if (this.activeSnapTargets.length) {\n if (state.orientation === 'horizontal' && this.activeSnapAxis === 'x') {\n // Vertical divider snapping along X\n let closest = Number.POSITIVE_INFINITY;\n let best = currentPos;\n const pointerX = event.clientX;\n this.activeSnapTargets.forEach((sx) => {\n const px = rootRect.left + sx;\n const d = Math.abs(pointerX - px);\n if (d < closest) { closest = d; best = px; }\n });\n if (closest <= tol) currentPos = best;\n this.renderSnapMarkersForDivider();\n } else if (state.orientation === 'vertical' && this.activeSnapAxis === 'y') {\n // Horizontal divider snapping along Y\n let closest = Number.POSITIVE_INFINITY;\n let best = currentPos;\n const pointerY = event.clientY;\n this.activeSnapTargets.forEach((sy) => {\n const py = rootRect.top + sy;\n const d = Math.abs(pointerY - py);\n if (d < closest) { closest = d; best = py; }\n });\n if (closest <= tol) currentPos = best;\n this.renderSnapMarkersForDivider();\n }\n }\n const delta = currentPos - state.startPos;\n const minSize = 48;\n const pairTotal = state.beforeSize + state.afterSize;\n\n let newBefore = state.beforeSize + delta;\n // Optional snap with Shift\n if (event.shiftKey && pairTotal > 0) {\n const ratios = [1 / 3, 1 / 2, 2 / 3];\n const target = newBefore / pairTotal;\n let best = ratios[0];\n let bestDist = Math.abs(target - best);\n for (let i = 1; i < ratios.length; i++) {\n const d = Math.abs(target - ratios[i]);\n if (d < bestDist) {\n best = ratios[i];\n bestDist = d;\n }\n }\n newBefore = best * pairTotal;\n }\n\n newBefore = Math.min(Math.max(newBefore, minSize), pairTotal - minSize);\n let newAfter = pairTotal - newBefore;\n\n if (!Number.isFinite(newBefore) || !Number.isFinite(newAfter)) {\n return;\n }\n\n if (newAfter < minSize) {\n newAfter = minSize;\n newBefore = pairTotal - minSize;\n }\n\n const newSizesPixels = [...state.initialSizes];\n newSizesPixels[state.index] = newBefore;\n newSizesPixels[state.index + 1] = newAfter;\n\n const total = newSizesPixels.reduce((acc, size) => acc + size, 0);\n const normalized = total > 0 ? newSizesPixels.map((size) => size / total) : [];\n\n splitNode.sizes = normalized;\n const children = Array.from(state.container.querySelectorAll<HTMLElement>(':scope > .dock-split__child'));\n normalized.forEach((size, idx) => {\n if (children[idx]) {\n children[idx].style.flex = `${Math.max(size, 0)} 1 0`;\n }\n });\n this.dispatchLayoutChanged();\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 if (this.resizeState && event.pointerId === this.resizeState.pointerId) {\n const divider = this.resizeState.divider;\n divider.dataset['resizing'] = 'false';\n divider.releasePointerCapture(this.resizeState.pointerId);\n this.resizeState = null;\n this.scheduleRenderIntersectionHandles();\n this.activeSnapAxis = null;\n this.activeSnapTargets = [];\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 private beginPaneDrag(\n event: DragEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n if (!event.dataTransfer) {\n return;\n }\n\n // Create a ghost element for the drag image. This prevents the browser from cancelling\n // the drag operation when the original element is removed from the DOM during re-render.\n const ghost = (event.currentTarget as HTMLElement).cloneNode(true) as HTMLElement;\n ghost.style.position = 'absolute';\n ghost.style.left = '-9999px';\n ghost.style.top = '-9999px';\n ghost.style.width = `${(event.currentTarget as HTMLElement).offsetWidth}px`;\n ghost.style.height = `${(event.currentTarget as HTMLElement).offsetHeight}px`;\n this.shadowRoot?.appendChild(ghost);\n\n // Use the ghost element as the drag image.\n // The offset is set to where the user's cursor is on the original element.\n const dragImgOffsetX = Number.isFinite((event as any).offsetX) ? (event as any).offsetX : 0;\n const dragImgOffsetY = Number.isFinite((event as any).offsetY) ? (event as any).offsetY : 0;\n event.dataTransfer.setDragImage(ghost, dragImgOffsetX, dragImgOffsetY);\n\n // The ghost element is no longer needed after the drag image is set.\n // We defer its removal to ensure the browser has captured it.\n setTimeout(() => ghost.remove(), 0);\n\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 const headerEl = stackEl?.querySelector<HTMLElement>('.dock-stack__header') ?? 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 : Number.isFinite(event.clientX)\n ? event.clientX\n : undefined,\n startClientY:\n metrics && Number.isFinite(metrics.startClientY)\n ? metrics.startClientY\n : Number.isFinite(event.clientY)\n ? event.clientY\n : undefined,\n };\n // Seed last known pointer position from pointerdown metrics to avoid (0,0) glitches in Firefox\n if (\n this.dragState.startClientX !== undefined &&\n this.dragState.startClientY !== undefined &&\n Number.isFinite(this.dragState.startClientX) &&\n Number.isFinite(this.dragState.startClientY)\n ) {\n this.lastDragPointerPosition = {\n x: this.dragState.startClientX as number,\n y: this.dragState.startClientY as number,\n };\n }\n // Prefer the pointer offset relative to the dragged tab to avoid jumps on conversion\n if (Number.isFinite((event as any).offsetX)) {\n this.dragState.pointerOffsetX = (event as any).offsetX as number;\n }\n if (Number.isFinite((event as any).offsetY)) {\n this.dragState.pointerOffsetY = (event as any).offsetY as number;\n }\n this.updateDraggedFloatingPosition(event);\n this.startDragPointerTracking();\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', pane);\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; // not the only pane in this floating window\n }\n if (shouldConvert) {\n const startX = Number.isFinite(event.clientX) ? event.clientX : (this.dragState.startClientX ?? 0);\n const startY = Number.isFinite(event.clientY) ? event.clientY : (this.dragState.startClientY ?? 0);\n this.convertPendingTabDragToFloating(startX, startY);\n }\n }\n }\n }\n\n private preparePaneDragSource(\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n event: DragEvent,\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 const state = this.dragState;\n this.dragState = null;\n this.hideDropIndicator();\n this.clearHeaderDragPlaceholder();\n this.stopDragPointerTracking();\n this.lastDragPointerPosition = null;\n if (state && state.floatingIndex !== null && !state.dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private onDragOver(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n event.preventDefault();\n // Keep internal pointer tracking up-to-date.\n this.updateDraggedFloatingPosition(event);\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n\n // Some browsers intermittently report (0,0) for dragover coordinates.\n // Mirror the robust logic used in onDrop: prefer actual event coordinates\n // when valid, otherwise fall back to the last tracked pointer position.\n const pointFromEvent =\n Number.isFinite(event.clientX) && Number.isFinite(event.clientY)\n ? { clientX: event.clientX, clientY: event.clientY }\n : null;\n\n const point =\n pointFromEvent ??\n (this.lastDragPointerPosition\n ? { clientX: this.lastDragPointerPosition.x, clientY: this.lastDragPointerPosition.y }\n : null);\n\n const stack =\n this.findStackElement(event) ??\n (point ? this.findStackAtPoint(point.clientX, point.clientY) : null);\n if (!stack) {\n if (this.dropJoystick.dataset['visible'] !== 'true') {\n this.hideDropIndicator();\n }\n return;\n }\n\n const path = this.parsePath(stack.dataset['path']);\n // While reordering within the same header, suppress the joystick/indicator entirely\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 px = (point ? point.clientX : event.clientX) as number;\n const py = (point ? point.clientY : event.clientY) as number;\n if (Number.isFinite(px) && Number.isFinite(py) && this.isPointerOverSourceHeader(px, py)) {\n // Drive live reorder using the unified path so we update instantly.\n this.updatePaneDragDropTargetFromPoint(px, py);\n this.hideDropIndicator();\n return;\n }\n }\n // If the hovered stack changed, clear any sticky zone from the previous\n // target before computing the new zone.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n const eventZoneHint = this.extractDropZoneFromEvent(event);\n const pointZoneHint = point ? this.findDropZoneByPoint(point.clientX, point.clientY) : null;\n const zone = this.computeDropZone(stack, point ?? event, pointZoneHint ?? eventZoneHint);\n this.showDropIndicator(stack, zone);\n }\n\n private updateDraggedFloatingPosition(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n\n const { clientX, clientY } = event;\n const hasValidCoordinates =\n Number.isFinite(clientX) &&\n Number.isFinite(clientY) &&\n !(clientX === 0 && clientY === 0);\n\n if (hasValidCoordinates) {\n this.lastDragPointerPosition = { x: clientX, y: clientY };\n this.updateDraggedFloatingPositionFromPoint(clientX, clientY);\n return;\n }\n\n if (this.lastDragPointerPosition) {\n const { x, y } = this.lastDragPointerPosition;\n this.updateDraggedFloatingPositionFromPoint(x, y);\n }\n }\n\n private onGlobalDragOver(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n this.updateDraggedFloatingPosition(event);\n }\n\n private onDrag(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n this.updateDraggedFloatingPosition(event);\n }\n\n private onGlobalDragEnd(): void {\n // Attempt to finalize a drop even if the drop event doesn't reach us (Firefox/edge cases)\n const state = this.dragState;\n const pos = this.lastDragPointerPosition;\n if (state && pos) {\n const stack = this.findStackAtPoint(pos.x, pos.y);\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n const path = stack ? this.parsePath(stack.dataset['path']) : (joystickPath ?? joystickTargetPath);\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const zone = this.isDropZone(joystickZone)\n ? joystickZone\n : (stack ? this.computeDropZone(stack, { clientX: pos.x, clientY: pos.y }, null) : null);\n \n if (path && this.isDropZone(zone)) {\n this.handleDrop(path, zone!);\n this.hideDropIndicator();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n }\n } else {\n this.hideDropIndicator();\n }\n\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\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 // Ignore obviously bogus coordinates sometimes seen during HTML5 drag\n if (clientX === 0 && clientY === 0) {\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 const header = stack.querySelector<HTMLElement>('.dock-stack__header');\n if (header) {\n // Ensure placeholder exists and move it as the pointer moves\n this.ensureHeaderDragPlaceholder(header, this.dragState.pane);\n const idx = this.computeHeaderInsertIndex(header, clientX);\n if (this.dragState.liveReorderIndex !== idx) {\n this.updateHeaderDragPlaceholderPosition(header, idx);\n // Keep model reordering until drop; only move the placeholder now\n this.dragState.liveReorderIndex = idx;\n }\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 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 header = stackEl?.querySelector('.dock-stack__header') as HTMLElement | null;\n if (!header) {\n // Be conservative: if we cannot resolve the header, treat as inside\n return true;\n }\n const sr = this.shadowRoot;\n const elements = sr ? sr.elementsFromPoint(clientX, clientY) : [];\n for (const el of elements) {\n if (el instanceof HTMLElement && header.contains(el)) {\n return true;\n }\n }\n return false;\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 private ensureHeaderDragPlaceholder(header: HTMLElement, pane: string): void {\n if (this.dragState?.placeholderHeader === header && this.dragState.placeholderEl) {\n return;\n }\n const dragged = Array.from(header.querySelectorAll<HTMLElement>('.dock-tab')).find((t) => t.dataset['pane'] === pane) ?? null;\n if (!dragged) {\n return;\n }\n // Create placeholder\n const placeholder = this.documentRef.createElement('button');\n placeholder.type = 'button';\n placeholder.classList.add('dock-tab');\n placeholder.dataset['placeholder'] = 'true';\n // Keep the placeholder visually empty but reserving the same width\n placeholder.textContent = '';\n placeholder.setAttribute('aria-hidden', 'true');\n placeholder.style.width = `${dragged.offsetWidth}px`;\n // Hide the original dragged tab so it doesn't duplicate visually and free up its slot\n dragged.style.display = 'none';\n // Insert placeholder in the original position of the dragged tab\n header.insertBefore(placeholder, dragged);\n if (this.dragState) {\n this.dragState.placeholderHeader = header;\n this.dragState.placeholderEl = placeholder;\n }\n }\n\n // Move the placeholder to the computed target index within the header\n private updateHeaderDragPlaceholderPosition(header: HTMLElement, targetIndex: number): void {\n const placeholder = this.dragState?.placeholderEl ?? null;\n if (!placeholder) {\n return;\n }\n const draggedPane = this.dragState?.pane ?? null;\n const tabs = Array.from(header.querySelectorAll<HTMLElement>('.dock-tab'))\n .filter((t) => t !== placeholder && (!draggedPane || t.dataset['pane'] !== draggedPane));\n const clampedTarget = Math.max(0, Math.min(targetIndex, tabs.length));\n const ref = tabs[clampedTarget] ?? null;\n header.insertBefore(placeholder, ref);\n }\n\n // Remove placeholder and restore original tab visibility\n private clearHeaderDragPlaceholder(): void {\n const ph = this.dragState?.placeholderEl ?? null;\n const header = this.dragState?.placeholderHeader ?? null;\n if (header) {\n const dragged = this.dragState?.pane\n ? (Array.from(header.querySelectorAll<HTMLElement>('.dock-tab')).find((t) => t.dataset['pane'] === this.dragState?.pane) ?? null)\n : null;\n if (dragged) {\n dragged.style.display = '';\n }\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('mousemove', this.onDragMouseMove, true);\n win?.addEventListener('touchmove', this.onDragTouchMove, { passive: false });\n win?.addEventListener('mouseup', this.onDragMouseUp, true);\n win?.addEventListener('touchend', this.onDragTouchEnd, true);\n win?.addEventListener('touchcancel', this.onDragTouchEnd, 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('mousemove', this.onDragMouseMove, true);\n win?.removeEventListener('touchmove', this.onDragTouchMove);\n win?.removeEventListener('mouseup', this.onDragMouseUp, true);\n win?.removeEventListener('touchend', this.onDragTouchEnd, true);\n win?.removeEventListener('touchcancel', this.onDragTouchEnd, true);\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.clearPendingDragEndTimeout();\n }\n\n private onDragMouseMove(event: MouseEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n\n if (event.buttons === 0) {\n this.scheduleDeferredDragEnd();\n return;\n }\n\n this.lastDragPointerPosition = { x: event.clientX, y: event.clientY };\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n }\n\n private onDragTouchMove(event: TouchEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n\n const touch = event.touches[0];\n if (!touch) {\n this.scheduleDeferredDragEnd();\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.lastDragPointerPosition = { x: touch.clientX, y: touch.clientY };\n this.updateDraggedFloatingPositionFromPoint(touch.clientX, touch.clientY);\n }\n\n private onDragMouseUp(): void {\n // Prefer committing a drop from pointer-up since some browsers suppress drop events\n if (this.dragState) {\n const pos = this.lastDragPointerPosition;\n if (pos) {\n this.finalizeDropFromPoint(pos.x, pos.y);\n }\n }\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 const pointerOffsetX = Number.isFinite(this.dragState?.pointerOffsetX as number)\n ? (this.dragState!.pointerOffsetX as number)\n : metrics && Number.isFinite(metrics.pointerOffsetX)\n ? (metrics.pointerOffsetX as number)\n : width / 2;\n const pointerOffsetY = Number.isFinite(this.dragState?.pointerOffsetY as number)\n ? (this.dragState!.pointerOffsetY as number)\n : metrics && Number.isFinite(metrics.pointerOffsetY)\n ? (metrics.pointerOffsetY as number)\n : height / 2;\n\n const pointerLeft = Number.isFinite(clientX)\n ? clientX - hostRect.left - pointerOffsetX\n : 0;\n const pointerTop = Number.isFinite(clientY)\n ? clientY - hostRect.top - pointerOffsetY\n : 0;\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: pointerLeft,\n top: pointerTop,\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.render();\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 this.dispatchLayoutChanged();\n }\n\n // Compute the intended tab insert index within a header based on pointer X\n // Adds a slight rightward bias and uses the placeholder rect (if present)\n // to ensure offsets are correct even when the dragged tab is display:none.\n private computeHeaderInsertIndex(header: HTMLElement, clientX: number): number {\n const allTabs = Array.from(header.querySelectorAll<HTMLElement>('.dock-tab'));\n if (allTabs.length === 0) {\n return 0;\n }\n\n const draggedPane = this.dragState?.pane ?? null;\n const draggedEl = draggedPane\n ? (allTabs.find((t) => t.dataset['pane'] === draggedPane) ?? null)\n : null;\n const placeholderEl = header.querySelector<HTMLElement>('.dock-tab[data-placeholder=\"true\"]');\n\n const targets = allTabs.filter((t) => t !== draggedEl && t !== placeholderEl);\n if (targets.length === 0) {\n return 0;\n }\n\n const rightBias = 12;\n const leftBias = 0;\n\n const baseRect = placeholderEl\n ? placeholderEl.getBoundingClientRect()\n : draggedEl\n ? draggedEl.getBoundingClientRect()\n : null;\n const rectValid = !!baseRect && Number.isFinite(baseRect.width) && (baseRect as DOMRect).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 private onDragTouchEnd(): void {\n this.handleDragPointerUpCommon();\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 header = stack.querySelector<HTMLElement>('.dock-stack__header');\n if (header) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(header, clientX);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.render();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n return;\n }\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 onDrop(event: DragEvent): void {\n if (!this.dragState) {\n return;\n }\n event.preventDefault();\n\n const pointFromEvent =\n Number.isFinite(event.clientX) && Number.isFinite(event.clientY)\n ? { clientX: event.clientX, clientY: event.clientY }\n : null;\n\n const point =\n pointFromEvent ??\n (this.lastDragPointerPosition\n ? {\n clientX: this.lastDragPointerPosition.x,\n clientY: this.lastDragPointerPosition.y,\n }\n : null);\n\n const stack =\n this.findStackElement(event) ??\n (point ? this.findStackAtPoint(point.clientX, point.clientY) : null);\n\n // Prefer joystick's stored target path when the joystick is visible (drop over buttons)\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n let path = stack\n ? this.parsePath(stack.dataset['path'])\n : (joystickPath ?? joystickTargetPath);\n if (!path && joystickVisible) {\n // As a last resort, target the main dock surface only when empty\n const dockPath = this.parsePath(this.dockedEl.dataset['path']);\n path = (!this.rootLayout ? dockPath : null);\n }\n\n // Defer same-header reorder decision until after zone resolution below\n\n // Prefer joystick's active zone if available, else infer from event/point\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const eventZoneHint = this.extractDropZoneFromEvent(event);\n const pointZoneHint = point ? this.findDropZoneByPoint(point.clientX, point.clientY) : null;\n const zone = this.isDropZone(joystickZone)\n ? joystickZone\n : stack\n ? this.computeDropZone(stack, point ?? event, pointZoneHint ?? eventZoneHint)\n : (this.isDropZone(pointZoneHint ?? eventZoneHint) ? (pointZoneHint ?? eventZoneHint) : null);\n\n \n // If still in same header and no side zone chosen, treat as in-header reorder\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n stack &&\n path &&\n this.pathsEqual(path, this.dragState.sourcePath) &&\n (!zone || zone === 'center')\n ) {\n const header = stack.querySelector<HTMLElement>('.dock-stack__header');\n if (header) {\n const x = (point ? point.clientX : event.clientX) as number;\n if (Number.isFinite(x)) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(header, x);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.render();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n this.endPaneDrag();\n return;\n }\n }\n }\n }\n // If joystick is visible and both path and zone are resolved, force using joystick as authoritative\n if (joystickVisible && path && this.isDropZone(joystickZone)) {\n this.handleDrop(path, joystickZone);\n this.endPaneDrag();\n return;\n }\n if (!zone) {\n this.hideDropIndicator();\n this.endPaneDrag();\n return;\n }\n this.handleDrop(path, zone);\n this.endPaneDrag();\n }\n\n private onDragLeave(event: DragEvent): void {\n const related = event.relatedTarget as Node | null;\n\n // During active drags, browsers can emit spurious dragleave with null\n // relatedTarget while the pointer is still over the joystick/buttons.\n // Be conservative: if we can resolve a stack/joystick at the last known\n // pointer position, don’t hide (prevents flicker of active state).\n if (this.dragState) {\n const pos =\n (Number.isFinite((event as DragEvent).clientX) && Number.isFinite((event as DragEvent).clientY))\n ? { x: (event as DragEvent).clientX, y: (event as DragEvent).clientY }\n : this.lastDragPointerPosition;\n if (pos) {\n const stackAtPoint = this.findStackAtPoint(pos.x, pos.y);\n if (stackAtPoint) {\n return; // still inside our drop area; ignore this dragleave\n }\n }\n }\n\n if (!related) {\n this.hideDropIndicator();\n return;\n }\n\n const rootContains = this.rootEl.contains(related);\n const joystickContains = this.dropJoystick.contains(related);\n if (!rootContains && !joystickContains) {\n this.hideDropIndicator();\n }\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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.render();\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 as DragEvent).composedPath === 'function') {\n const path = (event as DragEvent).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 findStackElement(event: DragEvent): HTMLElement | null {\n const path = event.composedPath();\n const stack = this.findStackInTargets(path);\n if (stack) {\n return stack;\n }\n\n // If the root dock area is empty, treat the docked surface as a valid\n // target when it appears in the composed path.\n if (!this.rootLayout) {\n for (const target of path) {\n if (\n target instanceof HTMLElement &&\n (target === this.dockedEl || target.classList.contains('dock-docked'))\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 const headerButtons = stack.querySelectorAll<HTMLButtonElement>('.dock-tab');\n headerButtons.forEach((button) => {\n const isSelected = button.dataset['pane'] === paneName;\n button.classList.toggle('dock-tab--active', isSelected);\n button.setAttribute('aria-selected', String(isSelected));\n });\n\n const panes = stack.querySelectorAll<HTMLElement>('.dock-stack__pane');\n panes.forEach((pane) => {\n if (pane.dataset['pane'] === paneName) {\n pane.removeAttribute('hidden');\n } else {\n pane.setAttribute('hidden', '');\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 if (!path) {\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\ndeclare global {\n interface HTMLElementTagNameMap {\n 'mint-dock-manager': MintDockManagerElement;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n Output,\n QueryList,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } 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 standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockManagerComponent implements AfterViewInit {\n @Input()\n set layout(value: DockLayoutNode | DockLayout | null) {\n const snapshot = this.cloneLayout(this.ensureSnapshot(value));\n this._layout = snapshot;\n this.layoutString = this.stringifyLayout(snapshot);\n this.applyLayout();\n }\n get layout(): 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 @Output() layoutChange = new EventEmitter<DockLayoutSnapshot | null>();\n @Output() layoutSnapshotChange = new EventEmitter<DockLayoutSnapshot>();\n\n layoutString: string | null = null;\n\n @ContentChildren(BsDockPaneComponent) panes: QueryList<BsDockPaneComponent> = new QueryList();\n @ViewChild('manager', { static: true }) managerRef!: ElementRef<MintDockManagerElement>;\n\n protected readonly trackByPane = (_: number, pane: BsDockPaneComponent) => pane.name;\n\n private _layout: DockLayoutSnapshot = { root: null, floating: [] };\n\n constructor(\n private readonly changeDetector: ChangeDetectorRef,\n @Inject(DOCUMENT) documentRef: Document,\n ) {\n if (documentRef) {\n MintDockManagerElement.configureDocument(documentRef);\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 = this.stringifyLayout(this._layout);\n this.layoutChange.emit(this.layout);\n this.layoutSnapshotChange.emit(this.cloneLayout(snapshot));\n this.changeDetector.markForCheck();\n }\n\n private applyLayout(): void {\n if (!this.managerRef) {\n return;\n }\n\n const element = this.managerRef.nativeElement;\n const layout = this.layout;\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","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BsDockManagerComponent } from './components/dock-manager.component';\nimport { BsDockPaneComponent } from './components/dock-pane.component';\n\n@NgModule({\n declarations: [BsDockManagerComponent, BsDockPaneComponent],\n imports: [CommonModule],\n exports: [BsDockManagerComponent, BsDockPaneComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class BsDockModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|