@mintplayer/ng-bootstrap 21.29.0 → 21.31.0
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-a11y.mjs +455 -0
- package/fesm2022/mintplayer-ng-bootstrap-a11y.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +8 -5
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs +10 -4
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs +7 -4
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +131 -3
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +80 -48
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +4 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +218 -14
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +294 -3
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +163 -18
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +179 -7
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +14 -4
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs +14 -0
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs +2 -1
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs +7 -4
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +70 -6
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-multi-range.mjs +693 -0
- package/fesm2022/mintplayer-ng-bootstrap-multi-range.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +5 -4
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +45 -13
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +51 -5
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +5 -3
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +18 -4
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +61 -6
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs +19 -4
- package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +8 -5
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +34 -4
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-reduced-motion.mjs +59 -0
- package/fesm2022/mintplayer-ng-bootstrap-reduced-motion.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +91 -2
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +16 -5
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +28 -5
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +18 -4
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs +10 -3
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tile-manager.mjs +143 -29
- package/fesm2022/mintplayer-ng-bootstrap-tile-manager.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +7 -4
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +42 -21
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +33 -4
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +17 -7
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +50 -8
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs +34 -12
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-web-components-a11y.mjs +74 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-a11y.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs +1476 -71
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs +194 -2
- package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs +4 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs.map +1 -1
- package/package.json +18 -2
- package/types/mintplayer-ng-bootstrap-a11y.d.ts +196 -0
- package/types/mintplayer-ng-bootstrap-accordion.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-breadcrumb.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-button-group.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-calendar.d.ts +32 -0
- package/types/mintplayer-ng-bootstrap-carousel.d.ts +56 -3
- package/types/mintplayer-ng-bootstrap-code-snippet.d.ts +1 -0
- package/types/mintplayer-ng-bootstrap-color-picker.d.ts +75 -4
- package/types/mintplayer-ng-bootstrap-datatable.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-dock.d.ts +51 -0
- package/types/mintplayer-ng-bootstrap-dropdown-menu.d.ts +54 -9
- package/types/mintplayer-ng-bootstrap-dropdown.d.ts +57 -2
- package/types/mintplayer-ng-bootstrap-file-upload.d.ts +4 -1
- package/types/mintplayer-ng-bootstrap-has-overlay.d.ts +14 -0
- package/types/mintplayer-ng-bootstrap-marquee.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-modal.d.ts +25 -1
- package/types/mintplayer-ng-bootstrap-multi-range.d.ts +170 -0
- package/types/mintplayer-ng-bootstrap-multiselect.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-navbar-toggler.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-navbar.d.ts +25 -1
- package/types/mintplayer-ng-bootstrap-offcanvas.d.ts +23 -1
- package/types/mintplayer-ng-bootstrap-pagination.d.ts +3 -1
- package/types/mintplayer-ng-bootstrap-placeholder.d.ts +5 -1
- package/types/mintplayer-ng-bootstrap-playlist-toggler.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-popover.d.ts +21 -1
- package/types/mintplayer-ng-bootstrap-priority-nav.d.ts +4 -1
- package/types/mintplayer-ng-bootstrap-progress-bar.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-range.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-rating.d.ts +3 -0
- package/types/mintplayer-ng-bootstrap-reduced-motion.d.ts +36 -0
- package/types/mintplayer-ng-bootstrap-resizable.d.ts +4 -0
- package/types/mintplayer-ng-bootstrap-scheduler.d.ts +42 -9
- package/types/mintplayer-ng-bootstrap-scrollspy.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-searchbox.d.ts +8 -1
- package/types/mintplayer-ng-bootstrap-select.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-select2.d.ts +3 -0
- package/types/mintplayer-ng-bootstrap-signature-pad.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-table.d.ts +8 -1
- package/types/mintplayer-ng-bootstrap-tile-manager.d.ts +21 -2
- package/types/mintplayer-ng-bootstrap-toast.d.ts +6 -1
- package/types/mintplayer-ng-bootstrap-toggle-button.d.ts +11 -0
- package/types/mintplayer-ng-bootstrap-tooltip.d.ts +5 -0
- package/types/mintplayer-ng-bootstrap-treeview.d.ts +12 -1
- package/types/mintplayer-ng-bootstrap-typeahead.d.ts +11 -3
- package/types/mintplayer-ng-bootstrap-virtual-datatable.d.ts +14 -1
- package/types/mintplayer-ng-bootstrap-web-components-a11y.d.ts +34 -0
- package/types/mintplayer-ng-bootstrap-web-components-scheduler-core.d.ts +35 -11
- package/types/mintplayer-ng-bootstrap-web-components-scheduler.d.ts +246 -0
- package/types/mintplayer-ng-bootstrap-web-components-splitter.d.ts +95 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-bootstrap-dock.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-pane.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.template.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.html","../../../../libs/mintplayer-ng-bootstrap/dock/mintplayer-ng-bootstrap-dock.ts"],"sourcesContent":["import { AfterContentInit, Component, input, TemplateRef, viewChild, ChangeDetectionStrategy} from '@angular/core';\n\n@Component({\n selector: 'bs-dock-pane',\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockPaneComponent implements AfterContentInit {\n readonly name = input.required<string>();\n readonly title = input<string | undefined>(undefined);\n\n readonly template = viewChild.required(TemplateRef);\n\n ngAfterContentInit(): void {\n if (!this.name()) {\n throw new Error('bs-dock-pane requires a unique \"name\" input.');\n }\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// Source: mint-dock-manager.element.html + mint-dock-manager.element.scss\n// Regenerate with the codegen-wc Nx target.\n\nimport { html, unsafeCSS } from 'lit';\n\nexport const template = html`<div class=\"dock-root\">\n <div class=\"dock-docked\"></div>\n <div class=\"dock-floating-layer\"></div>\n <div class=\"dock-intersections-layer dock-intersection-layer\"></div>\n</div>\n<div class=\"dock-drop-indicator\"></div>\n<div class=\"dock-drop-joystick\" data-visible=\"false\">\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"top\"\n aria-label=\"Dock to top\"\n >\n ↑\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"left\"\n aria-label=\"Dock to left\"\n >\n ←\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"center\"\n aria-label=\"Dock to center\"\n >\n •\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"right\"\n aria-label=\"Dock to right\"\n >\n →\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"bottom\"\n aria-label=\"Dock to bottom\"\n >\n ↓\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n</div>`;\nexport const styles = unsafeCSS(`:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n contain: layout paint size style;\n box-sizing: border-box;\n font-family: inherit;\n color: inherit;\n --dock-split-gap: 0.25rem;\n}\n\n.dock-root,\n.dock-docked,\n.dock-split,\n.dock-stack,\n.dock-stack__pane {\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n}\n\n.dock-root {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.dock-docked {\n position: absolute;\n inset: 0;\n display: flex;\n z-index: 0;\n}\n\n.dock-floating-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n}\n\n.dock-intersections-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 120;\n}\n\n.dock-floating {\n position: absolute;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.5rem;\n background: var(--bs-body-bg);\n box-shadow: var(--bs-box-shadow-lg);\n overflow: hidden;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating[data-dragging=true] {\n pointer-events: none;\n}\n\n.dock-floating__chrome {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.35rem 0.75rem;\n cursor: move;\n touch-action: none;\n background: linear-gradient(to bottom, rgba(var(--bs-primary-rgb), 0.15), rgba(var(--bs-primary-rgb), 0.05));\n border-bottom: 1px solid var(--bs-primary-border-subtle);\n user-select: none;\n -webkit-user-select: none;\n}\n\n.dock-floating__title {\n flex: 1 1 auto;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--bs-body-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.dock-floating > .dock-stack {\n flex: 1 1 auto;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating__resizer {\n position: absolute;\n pointer-events: auto;\n z-index: 2;\n background: rgba(var(--bs-primary-rgb), 0.1);\n transition: background 120ms ease;\n touch-action: none;\n}\n\n.dock-floating__resizer:hover,\n.dock-floating__resizer[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.3);\n}\n\n.dock-floating__resizer--top,\n.dock-floating__resizer--bottom {\n left: 0.75rem;\n right: 0.75rem;\n height: 0.5rem;\n}\n\n.dock-floating__resizer--top {\n top: 0;\n cursor: n-resize;\n}\n\n.dock-floating__resizer--bottom {\n bottom: 0;\n cursor: s-resize;\n}\n\n.dock-floating__resizer--left,\n.dock-floating__resizer--right {\n top: 1.75rem;\n bottom: 0.75rem;\n width: 0.5rem;\n}\n\n.dock-floating__resizer--left {\n left: 0;\n cursor: w-resize;\n}\n\n.dock-floating__resizer--right {\n right: 0;\n cursor: e-resize;\n}\n\n.dock-floating__resizer--top-left,\n.dock-floating__resizer--top-right,\n.dock-floating__resizer--bottom-left,\n.dock-floating__resizer--bottom-right {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n.dock-floating__resizer--top-left {\n top: 0;\n left: 0;\n cursor: nw-resize;\n}\n\n.dock-floating__resizer--top-right {\n top: 0;\n right: 0;\n cursor: ne-resize;\n}\n\n.dock-floating__resizer--bottom-left {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n}\n\n.dock-floating__resizer--bottom-right {\n right: 0;\n bottom: 0;\n cursor: se-resize;\n}\n\n.dock-split {\n flex: 1 1 0;\n position: relative;\n}\n\n.dock-intersection-handle {\n position: absolute;\n width: 1rem;\n height: 1rem;\n margin-left: -0.5rem;\n margin-top: -0.5rem;\n border-radius: 0.375rem;\n background: var(--bs-primary-bg-subtle);\n border: 1px solid var(--bs-primary-border-subtle);\n box-shadow: var(--bs-box-shadow-sm);\n cursor: all-scroll;\n pointer-events: auto;\n touch-action: none;\n opacity: 0.45;\n transition: background 120ms ease, border-color 120ms ease, opacity 120ms ease;\n}\n\n.dock-intersection-handle:hover,\n.dock-intersection-handle:focus-visible,\n.dock-intersection-handle[data-visible=true],\n.dock-intersection-handle[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.35);\n border-color: var(--bs-primary);\n opacity: 1;\n outline: none;\n}\n\n.dock-snap-marker {\n position: absolute;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -3px;\n border-radius: 50%;\n background: var(--bs-primary);\n box-shadow: 0 0 0 2px var(--bs-primary-bg-subtle);\n pointer-events: none;\n z-index: 130;\n}\n\n.dock-stack {\n flex: 1 1 0;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n background: var(--bs-body-bg);\n backdrop-filter: blur(4px);\n}\n\n.dock-tab {\n cursor: grab;\n display: block;\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n touch-action: none;\n user-select: none;\n -webkit-user-select: none;\n -webkit-touch-callout: none;\n}\n\n.dock-tab:active {\n cursor: grabbing;\n}\n\n.dock-tab[data-pressing=true] {\n background-color: var(--bs-secondary-bg-subtle, rgba(0, 0, 0, 0.05));\n transform: scale(1.02);\n transition: background-color 100ms ease-out, transform 100ms ease-out;\n}\n\n.dock-stack__pane {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n\n.dock-drop-indicator {\n position: absolute;\n pointer-events: none;\n border: 2px solid var(--bs-primary);\n background: rgba(var(--bs-primary-rgb), 0.2);\n border-radius: 0.25rem;\n opacity: 0;\n transition: opacity 120ms ease;\n z-index: 100;\n}\n\n.dock-drop-indicator[data-visible=true] {\n opacity: 1;\n}\n\n.dock-drop-joystick {\n position: absolute;\n display: grid;\n grid-template-columns: repeat(3, min-content);\n grid-template-rows: repeat(3, min-content);\n gap: 0.125rem;\n padding: 0.125rem;\n border-radius: 999px;\n background: var(--bs-tertiary-bg);\n box-shadow: var(--bs-box-shadow);\n pointer-events: none;\n transform: translate(-50%, -50%);\n z-index: 110;\n}\n\n.dock-drop-joystick__spacer {\n width: 1.75rem;\n height: 1.75rem;\n pointer-events: none;\n}\n\n.dock-drop-joystick__button {\n width: 1.75rem;\n height: 1.75rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n border: 1px solid var(--bs-primary-border-subtle);\n background: var(--bs-body-bg);\n color: var(--bs-primary);\n font-size: 0.75rem;\n line-height: 1;\n font-weight: 600;\n pointer-events: auto;\n cursor: pointer;\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\n}\n\n.dock-drop-joystick__button[data-active=true],\n.dock-drop-joystick__button:hover,\n.dock-drop-joystick__button:focus-visible {\n background: var(--bs-primary-bg-subtle);\n border-color: var(--bs-primary);\n color: var(--bs-primary);\n}\n\n.dock-drop-joystick__button:focus-visible {\n outline: 2px solid var(--bs-primary);\n outline-offset: 1px;\n}\n\n.dock-drop-joystick__button[data-zone=center] {\n border-radius: 0.5rem;\n}\n\n::slotted(*) {\n flex: 1 1 auto;\n display: block;\n min-width: 0;\n min-height: 0;\n}`);\n","\nimport { LitElement, type TemplateResult } from 'lit';\n// Side-effect import: registers <mp-tab-control> + <mp-tab-page> custom elements.\n// Each dock stack is rendered as <mp-tab-control>, so the dock depends on this\n// lib being loaded before any layout is rendered.\nimport '@mintplayer/ng-bootstrap/web-components/tab-control';\n// Side-effect import: registers <mp-splitter>. Each DockSplitNode is rendered\n// as a nested <mp-splitter>, so this lib must load before any layout renders.\nimport '@mintplayer/ng-bootstrap/web-components/splitter';\nimport {\n DockFloatingStackLayout,\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n DockSplitNode,\n DockStackNode,\n} from '../types/dock-layout';\nimport { template, styles } from './mint-dock-manager.element.template';\n\ntype DockPath =\n | { type: 'docked'; segments: number[] }\n | { type: 'floating'; index: number; segments: number[] };\n\ntype DockedLocation = { context: 'docked'; path: number[]; node: DockStackNode };\ntype FloatingLocation = {\n context: 'floating';\n index: number;\n path: number[];\n node: DockStackNode;\n};\n\ntype ResolvedLocation = DockedLocation | FloatingLocation;\n\ntype DropZone = 'center' | 'left' | 'right' | 'top' | 'bottom';\n\ntype FloatingResizeEdges = {\n horizontal: 'left' | 'right' | 'none';\n vertical: 'top' | 'bottom' | 'none';\n};\n\nexport class MintDockManagerElement extends LitElement {\n static override styles = [styles];\n\n private static documentRef: Document | null =\n typeof document !== 'undefined' ? document : null;\n\n static configureDocument(documentRef: Document | null | undefined): void {\n if (documentRef) {\n MintDockManagerElement.documentRef = documentRef;\n }\n }\n\n static override get observedAttributes(): string[] {\n return [...(super.observedAttributes ?? []), 'layout', 'debug-layout-integrity'];\n }\n\n private static instanceCounter = 0;\n\n // Touch tab-drag gesture: a finger that lands on a tab header must be able\n // to scroll the tabstrip natively. We require a stationary hold before\n // arming the drag, so a horizontal swipe scrolls instead of undocking.\n // See docs/prd/dock-touch-long-press-drag.md.\n private static readonly TOUCH_LONG_PRESS_MS = 600;\n private static readonly TOUCH_LONG_PRESS_SLOP_PX = 10;\n private static readonly TOUCH_PRESS_FEEDBACK_DELAY_MS = 150;\n\n private documentRef!: Document;\n private windowRef!: (Window & typeof globalThis) | null;\n private rootEl!: HTMLElement;\n private dockedEl!: HTMLElement;\n private floatingLayerEl!: HTMLElement;\n private dropIndicator!: HTMLElement;\n private dropJoystick!: HTMLElement;\n private dropJoystickButtons!: HTMLButtonElement[];\n private readonly instanceId: string;\n private dropJoystickTarget: HTMLElement | null = null;\n private rootLayout: DockLayoutNode | null = null;\n private floatingLayouts: DockFloatingStackLayout[] = [];\n private titles: Record<string, string> = {};\n private pendingTabDragMetrics:\n | {\n pointerOffsetX: number;\n pointerOffsetY: number;\n left: number;\n top: number;\n width: number;\n height: number;\n startClientX: number;\n startClientY: number;\n }\n | null = null;\n private dragState: {\n pane: string;\n sourcePath: DockPath;\n floatingIndex: number | null;\n pointerOffsetX: number;\n pointerOffsetY: number;\n dropHandled: boolean;\n // For tab reordering before converting to floating\n sourceStackEl?: HTMLElement | null;\n sourceHeaderBounds?: { left: number; top: number; right: number; bottom: number } | null;\n startClientX?: number;\n startClientY?: number;\n liveReorderIndex?: number;\n placeholderHeader?: HTMLElement | null;\n placeholderEl?: HTMLElement | null;\n } | null = null;\n private floatingDragState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n dropTarget?: { path: DockPath; zone: DropZone };\n }\n | null = null;\n private floatingResizeState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startWidth: number;\n startHeight: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n edges: FloatingResizeEdges;\n }\n | null = null;\n private intersectionRaf: number | null = null;\n private rootResizeObserver: ResizeObserver | null = null;\n private dockedMutationObserver: MutationObserver | null = null;\n private cornerResizeState:\n | {\n pointerId: number;\n handle: HTMLElement;\n // All horizontal divider bars (belong to vertical splits)\n hs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startY: number;\n }>;\n // All vertical divider bars (belong to horizontal splits)\n vs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startX: number;\n }>;\n }\n | null = null;\n private pointerTrackingActive = false;\n private dragPointerTrackingActive = false;\n private lastDragPointerPosition: { x: number; y: number } | null = null;\n // Localized snapping while dragging an intersection handle\n private cornerSnapXTargets: number[] = [];\n private cornerSnapYTargets: number[] = [];\n // Debug: render snap markers while dragging\n private showSnapMarkers = false;\n // Debug: assert every pane has a projection slot in shadow DOM after each\n // render. Off by default so production hosts pay no overhead; demo enables\n // it via the `debug-layout-integrity` attribute to catch layout-tree bugs\n // loudly during development.\n debugLayoutIntegrity = false;\n\n private renderSnapMarkersForCorner(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n if (!this.cornerResizeState) return;\n const rootRect = this.rootEl.getBoundingClientRect();\n // Compute representative center lines from the dividers being resized.\n // st.{hs,vs}[i].container is the <mp-splitter>; the divider lives in its\n // shadow at getSplitterDividers(splitter)[index].\n let centerX: number | null = null;\n let centerY: number | null = null;\n const st = this.cornerResizeState;\n if (st.vs.length > 0) {\n const v0 = st.vs[0];\n const vDiv = this.getSplitterDividers(v0.container)[v0.index];\n const vRect = vDiv?.getBoundingClientRect();\n if (vRect) centerX = vRect.left + vRect.width / 2 - rootRect.left;\n }\n if (st.hs.length > 0) {\n const h0 = st.hs[0];\n const hDiv = this.getSplitterDividers(h0.container)[h0.index];\n const hRect = hDiv?.getBoundingClientRect();\n if (hRect) centerY = hRect.top + hRect.height / 2 - rootRect.top;\n }\n if (centerY != null) {\n this.cornerSnapXTargets.forEach((sx) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${sx}px`;\n dot.style.top = `${centerY}px`;\n layer.appendChild(dot);\n });\n }\n if (centerX != null) {\n this.cornerSnapYTargets.forEach((sy) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${centerX}px`;\n dot.style.top = `${sy}px`;\n layer.appendChild(dot);\n });\n }\n }\n\n private clearSnapMarkers(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n }\n private pendingDragEndTimeout: number | NodeJS.Timeout | null = null;\n private previousSplitSizes: Map<string, number[]> = new Map();\n\n constructor() {\n super();\n this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;\n // Set windowRef eagerly so connectedCallback's window-level drag listeners\n // (added before firstUpdated runs) can actually attach. Without this,\n // win?.addEventListener was a silent no-op on first connect and HTML5\n // drag-to-detach gestures never reached the dock — the floating wrapper\n // was created but stayed at its conversion-time coordinates because the\n // 'drag' listener that updates its position was never attached.\n this.windowRef = typeof window !== 'undefined' ? window : null;\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onDragPointerMove = this.onDragPointerMove.bind(this);\n this.onDragPointerUp = this.onDragPointerUp.bind(this);\n this.onDragPointerCancel = this.onDragPointerCancel.bind(this);\n this.onSplitterResize = this.onSplitterResize.bind(this);\n }\n\n override render(): TemplateResult {\n return template;\n }\n\n protected override firstUpdated(): void {\n // Resolve document and window now that we are connected.\n const documentRef = this.resolveDocument();\n this.documentRef = documentRef;\n this.windowRef = this.resolveWindow(documentRef);\n\n // Query the rendered shadow DOM for the dock skeleton.\n const shadowRoot = this.shadowRoot!;\n const root = shadowRoot.querySelector<HTMLElement>('.dock-root');\n if (!root) {\n throw new Error('mint-dock-manager template is missing the root element.');\n }\n const docked = shadowRoot.querySelector<HTMLElement>('.dock-docked');\n if (!docked) {\n throw new Error('mint-dock-manager template is missing the docked surface element.');\n }\n const floatingLayer = shadowRoot.querySelector<HTMLElement>('.dock-floating-layer');\n if (!floatingLayer) {\n throw new Error('mint-dock-manager template is missing the floating layer element.');\n }\n const indicator = shadowRoot.querySelector<HTMLElement>('.dock-drop-indicator');\n if (!indicator) {\n throw new Error('mint-dock-manager template is missing the drop indicator element.');\n }\n const joystick = shadowRoot.querySelector<HTMLElement>('.dock-drop-joystick');\n if (!joystick) {\n throw new Error('mint-dock-manager template is missing the drop joystick element.');\n }\n const joystickButtons = Array.from(\n joystick.querySelectorAll<HTMLButtonElement>('.dock-drop-joystick__button[data-zone]'),\n );\n if (joystickButtons.length === 0) {\n throw new Error('mint-dock-manager template is missing drop joystick buttons.');\n }\n\n this.rootEl = root;\n this.dockedEl = docked;\n this.floatingLayerEl = floatingLayer;\n this.dropIndicator = indicator;\n this.dropJoystick = joystick;\n this.dropJoystickButtons = joystickButtons;\n\n // Tag the docked surface with a root path so it can act as\n // a drop target when the main layout is empty.\n this.dockedEl.dataset['path'] = this.formatPath({ type: 'docked', segments: [] });\n\n // Drop targeting (drop indicator + joystick zone selection) runs entirely\n // off pointer-based hit-testing in updatePaneDragDropTargetFromPoint and\n // findDropZoneByPoint — no HTML5 dragover/drop/dragleave listeners needed.\n\n // Render any layout that was set before the shadow DOM existed.\n this.renderLayout();\n\n // Reactive triggers for intersection-handle re-rendering. Each observer\n // wakes scheduleRenderIntersectionHandles() (rAF-coalesced), which means\n // multiple notifications in the same frame collapse to one render and\n // the rAF tick gives <mp-splitter> elements time to populate their\n // shadow roots before we query their dividers.\n this.rootResizeObserver = new ResizeObserver(() => this.scheduleRenderIntersectionHandles());\n this.rootResizeObserver.observe(this.rootEl);\n this.dockedMutationObserver = new MutationObserver(() => this.scheduleRenderIntersectionHandles());\n this.dockedMutationObserver.observe(this.dockedEl, { childList: true, subtree: true });\n // mp-splitter dispatches bubbling 'resizing' / 'resize-end' on user drag;\n // delegating on dockedEl catches every nested splitter without per-instance wiring.\n this.dockedEl.addEventListener('resizing', this.onSplitterResize);\n this.dockedEl.addEventListener('resize-end', this.onSplitterResize);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\n }\n }\n\n override disconnectedCallback(): void {\n const win = this.windowRef;\n this.stopDragPointerTracking();\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n this.rootResizeObserver?.disconnect();\n this.rootResizeObserver = null;\n this.dockedMutationObserver?.disconnect();\n this.dockedMutationObserver = null;\n this.dockedEl?.removeEventListener('resizing', this.onSplitterResize);\n this.dockedEl?.removeEventListener('resize-end', this.onSplitterResize);\n if (this.intersectionRaf !== null) {\n this.windowRef?.clearTimeout(this.intersectionRaf);\n this.intersectionRaf = null;\n }\n super.disconnectedCallback();\n }\n\n override attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n super.attributeChangedCallback(name, _oldValue, newValue);\n if (name === 'layout') {\n this.layout = newValue ? this.parseLayout(newValue) : null;\n } else if (name === 'debug-snap-markers') {\n this.showSnapMarkers = !(newValue === null || newValue === 'false' || newValue === '0');\n if (!this.showSnapMarkers) {\n this.clearSnapMarkers();\n }\n } else if (name === 'debug-layout-integrity') {\n this.debugLayoutIntegrity = !(newValue === null || newValue === 'false' || newValue === '0');\n }\n }\n\n get layout(): DockLayoutSnapshot {\n return {\n root: this.cloneLayoutNode(this.rootLayout),\n floating: this.cloneFloatingArray(this.floatingLayouts),\n titles: { ...this.titles },\n };\n }\n\n set layout(value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null) {\n const snapshot = this.ensureSnapshot(value);\n // While a drag/resize is in flight, the dock manager is the source of\n // truth for layout state — its mid-drag mutations (e.g. floating bounds\n // updated every mousemove, or a stack split during a pane-drag-to-floating\n // conversion) race the host's two-way binding round-trip. The host re-\n // feeds the layout we *just* dispatched via `dock-layout-changed`, but by\n // the time the round-trip arrives the user has moved the cursor again, so\n // the structural-equality guard below would let it through and clobber the\n // in-progress state (e.g. snap a freshly-detached floating window back to\n // the converted-at coordinates instead of letting it follow the cursor).\n // Reject any external layout write during interaction; the host will sync\n // back to the dock's final state when interaction ends and the dock fires\n // a fresh dock-layout-changed event.\n if (this.isInteracting()) return;\n // Skip renderLayout when the incoming layout is structurally identical\n // to the current state. After a divider drag the dock dispatches\n // dock-layout-changed; an Angular host doing two-way binding will feed\n // that snapshot right back through `[layout]` (and through the\n // `[attr.layout]` round-trip). Without this guard, every drag-end\n // tears down and rebuilds the whole splitter tree, giving a one-frame\n // flash of `flex: 1 1 0` equal-share before the pin restores sizes.\n const currentJson = JSON.stringify({\n root: this.rootLayout,\n floating: this.floatingLayouts,\n titles: this.titles,\n });\n const newJson = JSON.stringify(snapshot);\n if (currentJson === newJson) return;\n\n this.rootLayout = this.cloneLayoutNode(snapshot.root);\n this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);\n this.titles = snapshot.titles ? { ...snapshot.titles } : {};\n // Sanitize whatever the host fed us: empty stacks, 0/1-child splits, and\n // nested same-direction splits get pruned/flattened before we render.\n this.normalizeAllLayouts();\n this.renderLayout();\n }\n\n /**\n * True while the user is actively interacting with the dock — pane drag,\n * floating window drag, floating window resize, or intersection corner\n * resize. The `set layout` setter consults this to refuse external\n * round-trips that would overwrite in-progress drag state.\n */\n private isInteracting(): boolean {\n return !!(\n this.dragState ||\n this.floatingDragState ||\n this.floatingResizeState ||\n this.cornerResizeState\n );\n }\n\n get snapshot(): DockLayoutSnapshot {\n return this.layout;\n }\n\n toJSON(): DockLayoutSnapshot {\n return this.snapshot;\n }\n\n private resolveDocument(): Document {\n const staticDocument = MintDockManagerElement.documentRef;\n const ownerDocument = this.ownerDocument ?? null;\n const globalDocument =\n typeof document !== 'undefined' ? document : null;\n const resolvedDocument = staticDocument ?? ownerDocument ?? globalDocument;\n\n if (!resolvedDocument) {\n throw new Error('mint-dock-manager requires a Document to initialize.');\n }\n\n if (!MintDockManagerElement.documentRef) {\n MintDockManagerElement.documentRef = resolvedDocument;\n }\n\n return resolvedDocument;\n }\n\n private resolveWindow(\n documentRef: Document,\n ): (Window & typeof globalThis) | null {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n return (documentRef.defaultView as (Window & typeof globalThis) | null) ?? null;\n }\n\n private parseLayout(value: string): DockLayoutSnapshot | null {\n try {\n const parsed = JSON.parse(value) as\n | DockLayoutSnapshot\n | DockLayout\n | DockLayoutNode\n | null;\n return this.ensureSnapshot(parsed);\n } catch (err) {\n console.warn('mint-dock-manager: failed to parse layout attribute', err);\n return null;\n }\n }\n\n private ensureSnapshot(\n value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ((value as DockLayoutNode).kind) {\n return { root: value as DockLayoutNode, floating: [], titles: {} };\n }\n\n const layout = value as DockLayout | DockLayoutSnapshot;\n return {\n root: layout.root ?? null,\n floating: Array.isArray(layout.floating)\n ? layout.floating.map((floating) => this.normalizeFloatingLayout(floating))\n : [],\n titles: layout.titles ? { ...layout.titles } : {},\n };\n }\n\n private renderLayout(): void {\n // The layout setter may run before firstUpdated() has populated the\n // shadow-DOM fields (e.g. when an attribute is set on the markup).\n // Bail out; firstUpdated() will call renderLayout() once ready.\n if (!this.dockedEl) return;\n this.dockedEl.innerHTML = '';\n this.floatingLayerEl.innerHTML = '';\n this.hideDropIndicator();\n\n if (this.rootLayout) {\n const fragment = this.renderNode(this.rootLayout, []);\n this.dockedEl.appendChild(fragment);\n }\n\n this.renderFloatingPanes();\n // Note: intersection handles are repositioned reactively via observers\n // wired up in firstUpdated (rootResizeObserver, dockedMutationObserver,\n // and delegated 'resizing' / 'resize-end' events). The MutationObserver\n // on dockedEl fires when the renderNode subtree above is appended.\n\n this.verifyProjectionSlots();\n }\n\n private renderNode(\n node: DockLayoutNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n if (node.kind === 'split') {\n return this.renderSplit(node, path, floatingIndex);\n }\n\n return this.renderStack(node, path, floatingIndex);\n }\n\n private renderFloatingPanes(): void {\n this.floatingLayerEl.innerHTML = '';\n this.floatingLayouts.forEach((floating, index) => {\n const wrapper = this.documentRef.createElement('div');\n wrapper.classList.add('dock-floating');\n wrapper.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n\n const { left, top, width, height } = floating.bounds;\n wrapper.style.left = `${left}px`;\n wrapper.style.top = `${top}px`;\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n\n const zIndex = this.getFloatingPaneZIndex(index);\n wrapper.style.zIndex = String(zIndex);\n\n const chrome = this.documentRef.createElement('div');\n chrome.classList.add('dock-floating__chrome');\n chrome.addEventListener('pointerdown', (event) =>\n this.beginFloatingDrag(event, index, wrapper, chrome),\n );\n\n const title = this.documentRef.createElement('div');\n title.classList.add('dock-floating__title');\n title.textContent = this.getFloatingWindowTitle(floating);\n chrome.appendChild(title);\n\n wrapper.appendChild(chrome);\n\n if (floating.root) {\n const content = this.renderNode(floating.root, [], index);\n content.classList.add('dock-floating__stack');\n wrapper.appendChild(content);\n } else {\n const placeholder = this.documentRef.createElement('div');\n placeholder.classList.add('dock-stack');\n placeholder.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n const empty = this.documentRef.createElement('div');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n placeholder.appendChild(empty);\n wrapper.appendChild(placeholder);\n }\n\n const resizerConfigs: { classes: string[]; edges: FloatingResizeEdges }[] = [\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-left'],\n edges: { horizontal: 'left', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top'],\n edges: { horizontal: 'none', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-right'],\n edges: { horizontal: 'right', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--right'],\n edges: { horizontal: 'right', vertical: 'none' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-right'],\n edges: { horizontal: 'right', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom'],\n edges: { horizontal: 'none', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-left'],\n edges: { horizontal: 'left', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--left'],\n edges: { horizontal: 'left', vertical: 'none' },\n },\n ];\n\n resizerConfigs.forEach(({ classes, edges }) => {\n const resizer = this.documentRef.createElement('div');\n resizer.classList.add(...classes);\n resizer.addEventListener('pointerdown', (event) =>\n this.beginFloatingResize(event, index, wrapper, resizer, edges),\n );\n wrapper.appendChild(resizer);\n });\n this.floatingLayerEl.appendChild(wrapper);\n });\n }\n\n private onSplitterResize(): void {\n // mp-splitter dispatches 'resizing' continuously during a divider drag\n // and 'resize-end' when the user releases. Both keep the handle glued\n // to the new intersection coordinate.\n this.scheduleRenderIntersectionHandles();\n }\n\n private scheduleRenderIntersectionHandles(): void {\n if (this.intersectionRaf !== null) return;\n const win = this.windowRef;\n if (!win) return;\n // Defer with setTimeout(5) instead of rAF so we run AFTER any\n // flex-redistribution settles. Sequence we have to wait through:\n // (1) DOM mutation (e.g. panel removed by drop)\n // (2) microtasks: <mp-splitter>'s slotchange + size-pinning rAF\n // (3) layout flush\n // A bare rAF can fire before (2) resolves, so getBoundingClientRect on\n // the dividers reads a transient flex-distributed position and the\n // glyph lands ~tens of pixels off. 5ms is past the microtask queue and\n // past splitter's pinning rAF in practice, so the divider rects we\n // read are the settled, post-pin values.\n this.intersectionRaf = win.setTimeout(() => {\n this.intersectionRaf = null;\n this.renderIntersectionHandles();\n }, 5) as unknown as number;\n }\n\n private renderIntersectionHandles(): void {\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n\n const rootRect = this.rootEl.getBoundingClientRect();\n\n // Active corner-resize: keep st.handle alive (it owns pointer capture and\n // the cornerResizeState references it). Update its position from current\n // divider rects, drop every other handle by reference.\n if (this.cornerResizeState) {\n const st = this.cornerResizeState;\n const h0 = st.hs[0];\n const v0 = st.vs[0];\n const hSplitter = this.findSplitterByPath(h0.path.segments);\n const vSplitter = this.findSplitterByPath(v0.path.segments);\n const hDiv = hSplitter ? this.getSplitterDividers(hSplitter)[h0.index] : null;\n const vDiv = vSplitter ? this.getSplitterDividers(vSplitter)[v0.index] : null;\n if (hDiv && vDiv) {\n const hr = hDiv.getBoundingClientRect();\n const vr = vDiv.getBoundingClientRect();\n const x = vr.left + vr.width / 2 - rootRect.left;\n const y = hr.top + hr.height / 2 - rootRect.top;\n st.handle.style.left = `${x}px`;\n st.handle.style.top = `${y}px`;\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if (el !== st.handle) el.remove();\n });\n }\n return;\n }\n\n // Idle path: full clear + rebuild. Cheaper to reason about than incremental\n // diffing, and handles' positions are always derived from current divider\n // rects so a layout change (drop, splitter restructure, flex redistribution)\n // can never leave a stale glyph behind.\n layer.replaceChildren();\n\n type DividerInfo = {\n rect: DOMRect;\n pathStr: string;\n index: number;\n };\n const hDividers: DividerInfo[] = [];\n const vDividers: DividerInfo[] = [];\n\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined;\n const pathStr = splitter.dataset['path'] ?? '';\n this.getSplitterDividers(splitter).forEach((el, index) => {\n const info: DividerInfo = { rect: el.getBoundingClientRect(), pathStr, index };\n // direction='horizontal' means children flow left-to-right, so the\n // divider bars between them are VERTICAL (and vice-versa).\n if (direction === 'horizontal') vDividers.push(info);\n else if (direction === 'vertical') hDividers.push(info);\n });\n });\n\n // Group intersections that round to the same on-screen pixel, so two\n // sibling splitters whose dividers happen to overlap share one handle.\n const tol = 24;\n const groups = new Map<string, { x: number; y: number; pairs: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> }>();\n hDividers.forEach((h) => {\n const hCenterY = h.rect.top + h.rect.height / 2;\n vDividers.forEach((v) => {\n const vCenterX = v.rect.left + v.rect.width / 2;\n const dx = vCenterX < h.rect.left ? h.rect.left - vCenterX : vCenterX > h.rect.right ? vCenterX - h.rect.right : 0;\n const dy = hCenterY < v.rect.top ? v.rect.top - hCenterY : hCenterY > v.rect.bottom ? hCenterY - v.rect.bottom : 0;\n if (dx > tol || dy > tol) return;\n const x = vCenterX - rootRect.left;\n const y = hCenterY - rootRect.top;\n const gk = `${Math.round(x)}:${Math.round(y)}`;\n const group = groups.get(gk) ?? { x, y, pairs: [] };\n group.pairs.push({ h: { pathStr: h.pathStr, index: h.index }, v: { pathStr: v.pathStr, index: v.index } });\n groups.set(gk, group);\n });\n });\n\n groups.forEach((group, gk) => {\n const handle = this.documentRef.createElement('div');\n handle.classList.add('dock-intersection-handle', 'glyph');\n handle.setAttribute('role', 'separator');\n handle.setAttribute('aria-label', 'Resize split intersection');\n const firstPair = group.pairs[0];\n const key = `${firstPair.h.pathStr}:${firstPair.h.index}|${firstPair.v.pathStr}:${firstPair.v.index}`;\n handle.dataset['key'] = key;\n handle.dataset['pairs'] = JSON.stringify(group.pairs);\n handle.style.left = `${group.x}px`;\n handle.style.top = `${group.y}px`;\n // beginCornerResize/onIntersectionDoubleClick read data-pairs to\n // reconstruct the (h, v) pair list, so the (h, v) args we pass here\n // are only used as a fallback when data-pairs is empty — safe to use\n // the first pair's structure as the seed.\n const seedH = { path: this.parsePath(firstPair.h.pathStr), index: firstPair.h.index, container: this.findSplitterByPath(this.parsePath(firstPair.h.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n const seedV = { path: this.parsePath(firstPair.v.pathStr), index: firstPair.v.index, container: this.findSplitterByPath(this.parsePath(firstPair.v.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n handle.addEventListener('pointerdown', (ev) => this.beginCornerResize(ev, seedH, seedV, handle));\n handle.addEventListener('dblclick', (ev) => this.onIntersectionDoubleClick(ev, handle));\n layer.appendChild(handle);\n });\n }\n\n private beginCornerResize(\n event: PointerEvent,\n h: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n v: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n handle: HTMLElement,\n ): void {\n event.preventDefault();\n\n // Build pairs from dataset if available (grouped intersections), otherwise from the provided pair\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> =\n pairsRaw ? JSON.parse(pairsRaw) : [];\n const hs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n const vs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n\n const ensureHV = (pathStr: string, index: number, axis: 'h'|'v') => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n // Initial pixel sizes come from each panel-wrapper inside the splitter's\n // shadow root. We capture them once on pointerdown and feed deltas to\n // setPanelSizes() during the drag.\n const panels = this.getSplitterPanels(splitter);\n if (panels.length === 0) return;\n const dim: 'height' | 'width' = axis === 'h' ? 'height' : 'width';\n const initial = panels.map((p) => p.getBoundingClientRect()[dim]);\n const entry = { path, index, container: splitter, initialSizes: initial, before: initial[index], after: initial[index + 1] };\n if (axis === 'h') hs.push(entry);\n else vs.push(entry);\n };\n\n if (parsed.length > 0) {\n parsed.forEach((p) => { ensureHV(p.h.pathStr, p.h.index, 'h'); ensureHV(p.v.pathStr, p.v.index, 'v'); });\n } else if (h.path && v.path) {\n ensureHV(this.formatPath(h.path), h.index, 'h');\n ensureHV(this.formatPath(v.path), v.index, 'v');\n }\n if (hs.length === 0 && vs.length === 0) return;\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n handle.classList.add('hovering');\n } catch {}\n\n this.cornerResizeState = {\n pointerId: event.pointerId,\n handle,\n hs: hs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startY: event.clientY })),\n vs: vs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startX: event.clientX })),\n };\n\n this.startPointerTracking();\n // Ensure handle has a stable key (use group if present)\n if (!handle.dataset['key']) {\n handle.dataset['key'] = handle.dataset['group'] ?? '';\n }\n this.renderSnapMarkersForCorner();\n\n // Compute localized snap targets for this intersection\n try {\n const rootRect = this.rootEl.getBoundingClientRect();\n // Use first pair to define the crossing lines. Resolve dividers via\n // each splitter's shadow root.\n let centerX: number | null = null;\n let centerY: number | null = null;\n if (vs.length > 0) {\n const vPair = vs[0];\n const vDiv = this.getSplitterDividers(vPair.container)[vPair.index];\n const vr = vDiv?.getBoundingClientRect();\n if (vr) centerX = vr.left + vr.width / 2;\n }\n if (hs.length > 0) {\n const hPair = hs[0];\n const hDiv = this.getSplitterDividers(hPair.container)[hPair.index];\n const hr = hDiv?.getBoundingClientRect();\n if (hr) centerY = hr.top + hr.height / 2;\n }\n\n const xTargets: number[] = [];\n const yTargets: number[] = [];\n // Iterate every splitter, then flat-map its shadow dividers — a\n // splitter's data-direction tells us whether its bars are vertical\n // (horizontal split) or horizontal (vertical split).\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n this.getSplitterDividers(splitter).forEach((el) => {\n const r = el.getBoundingClientRect();\n if (direction === 'horizontal' && centerY != null) {\n // vertical bar → contributes X if it crosses centerY\n if (centerY >= r.top && centerY <= r.bottom) {\n xTargets.push(r.left + r.width / 2 - rootRect.left);\n }\n } else if (direction === 'vertical' && centerX != null) {\n // horizontal bar → contributes Y if it crosses centerX\n if (centerX >= r.left && centerX <= r.right) {\n yTargets.push(r.top + r.height / 2 - rootRect.top);\n }\n }\n });\n });\n this.cornerSnapXTargets = xTargets;\n this.cornerSnapYTargets = yTargets;\n } catch {\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n }\n\n private handleCornerResizeMove(event: PointerEvent): void {\n const state = this.cornerResizeState;\n if (!state || state.pointerId !== event.pointerId) return;\n\n const snapValue = (val: number, total: number, active: boolean) => {\n if (!active || total <= 0) return val;\n const ratios = [1/3, 1/2, 2/3];\n const r = val / total;\n let best = ratios[0];\n let d = Math.abs(r - best);\n for (let i=1;i<ratios.length;i++){ const dd = Math.abs(r - ratios[i]); if (dd < d) { d = dd; best = ratios[i]; } }\n return best * total;\n };\n\n // Axis snapping to nearby intersections\n const tol = 10;\n const rootRect = this.rootEl.getBoundingClientRect();\n let clientX = event.clientX;\n let clientY = event.clientY;\n if (this.cornerSnapXTargets.length) {\n let best = clientX, bestDist = tol + 1;\n this.cornerSnapXTargets.forEach((sx) => {\n const px = rootRect.left + sx; const d = Math.abs(px - clientX); if (d < bestDist) { bestDist = d; best = px; }\n });\n if (bestDist <= tol) clientX = best;\n }\n if (this.cornerSnapYTargets.length) {\n let best = clientY, bestDist = tol + 1;\n this.cornerSnapYTargets.forEach((sy) => {\n const py = rootRect.top + sy; const d = Math.abs(py - clientY); if (d < bestDist) { bestDist = d; best = py; }\n });\n if (bestDist <= tol) clientY = best;\n }\n\n // Apply the new pair sizes to one splitter's panel-wrappers via\n // mp-splitter's setPanelSizes(pixels) API. We persist the normalized\n // ratios on the layout node so renderSplit's initial sizing stays in sync.\n const applyPairSize = (\n entry: {\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n },\n delta: number,\n ): void => {\n const node = this.resolveSplitNode(entry.path);\n if (!node) return;\n const minSize = 48;\n const pairTotal = entry.beforeSize + entry.afterSize;\n let newBefore = Math.min(Math.max(entry.beforeSize + delta, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...entry.initialSizes];\n sizesPx[entry.index] = newBefore;\n sizesPx[entry.index + 1] = newAfter;\n const total = sizesPx.reduce((a, s) => a + s, 0);\n node.sizes = total > 0 ? sizesPx.map((s) => s / total) : [];\n (entry.container as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(sizesPx);\n };\n\n // Update all horizontal bars (vertical splits) with Y delta, then all\n // vertical bars (horizontal splits) with X delta.\n state.hs.forEach((h) => applyPairSize(h, clientY - h.startY));\n state.vs.forEach((v) => applyPairSize(v, clientX - v.startX));\n\n this.dispatchLayoutChanged();\n // setPanelSizes() is programmatic and doesn't fire 'resizing' events, so\n // the delegated listener on dockedEl doesn't wake during a corner drag.\n // Schedule the handle repositioning ourselves; renderIntersectionHandles\n // has a fast-path for the active cornerResizeState that just updates\n // left/top from the new divider rects.\n this.scheduleRenderIntersectionHandles();\n }\n\n private endCornerResize(pointerId: number): void {\n const state = this.cornerResizeState;\n if (!state || pointerId !== state.pointerId) return;\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch {}\n state.handle.dataset['resizing'] = 'false';\n this.cornerResizeState = null;\n // Re-render handles to account for new positions\n this.scheduleRenderIntersectionHandles();\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n\n private onIntersectionDoubleClick(event: MouseEvent, handle: HTMLElement): void {\n event.preventDefault();\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }>\n = pairsRaw ? JSON.parse(pairsRaw) : [];\n if (!Array.isArray(parsed) || parsed.length === 0) {\n const k = handle.dataset['key'] ?? '';\n const parts = k.split('|');\n if (parts.length === 2) {\n const [hPart, vPart] = parts;\n const hi = hPart.lastIndexOf(':');\n const vi = vPart.lastIndexOf(':');\n if (hi > 0 && vi > 0) {\n const hPathStr = hPart.slice(0, hi);\n const vPathStr = vPart.slice(0, vi);\n const hIdx = Number.parseInt(hPart.slice(hi + 1), 10);\n const vIdx = Number.parseInt(vPart.slice(vi + 1), 10);\n parsed.push({ h: { pathStr: hPathStr, index: hIdx }, v: { pathStr: vPathStr, index: vIdx } });\n }\n }\n }\n if (parsed.length === 0) return;\n\n const splitKeys = new Set<string>();\n parsed.forEach((p) => { splitKeys.add(p.h.pathStr); splitKeys.add(p.v.pathStr); });\n let hasStored = false;\n splitKeys.forEach((k) => { if (this.previousSplitSizes.has(k)) hasStored = true; });\n\n // Persist `node.sizes` (normalized) and push pixel sizes into the\n // matching <mp-splitter> via setPanelSizes(). The splitter's panel\n // wrappers live in its shadow DOM, so direct flex mutation is no\n // longer an option.\n const pushSizesToSplitter = (path: DockPath, normalized: number[]): void => {\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? 'horizontal';\n const containerSize = direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const totalWeight = normalized.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const px = normalized.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n };\n\n const applySizes = (pathStr: string, dividerIndex: number, mutate: (sizes: number[], index: number) => number[]) => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const node = this.resolveSplitNode(path);\n if (!node) return;\n const sizes = this.normalizeSizesArray(node.sizes ?? [], node.children.length);\n const newSizes = mutate([...sizes], dividerIndex);\n node.sizes = newSizes;\n pushSizesToSplitter(path, newSizes);\n };\n\n if (hasStored) {\n // Restore stored sizes\n this.previousSplitSizes.forEach((sizes, pathStr) => {\n const path = this.parsePath(pathStr);\n const node = path ? this.resolveSplitNode(path) : null;\n if (!node || !path) return;\n const norm = this.normalizeSizesArray(sizes, node.children.length);\n node.sizes = norm;\n pushSizesToSplitter(path, norm);\n });\n this.previousSplitSizes.clear();\n } else {\n // Equalize the two panes adjacent to each divider and store previous sizes\n const touched = new Set<string>();\n parsed.forEach((p) => {\n [p.h.pathStr, p.v.pathStr].forEach((key) => {\n if (touched.has(key)) return;\n const path = this.parsePath(key);\n const node = path ? this.resolveSplitNode(path) : null;\n if (node && Array.isArray(node.sizes)) {\n this.previousSplitSizes.set(key, [...node.sizes]);\n }\n touched.add(key);\n });\n const equalize = (sizes: number[], idx: number): number[] => {\n const total = (sizes[idx] ?? 0) + (sizes[idx + 1] ?? 0);\n if (total <= 0) return sizes;\n sizes[idx] = total / 2;\n sizes[idx + 1] = total / 2;\n const sum = sizes.reduce((a, s) => a + s, 0);\n return sum > 0 ? sizes.map((s) => s / sum) : sizes;\n };\n applySizes(p.h.pathStr, p.h.index, equalize);\n applySizes(p.v.pathStr, p.v.index, equalize);\n });\n }\n\n this.dispatchLayoutChanged();\n this.scheduleRenderIntersectionHandles();\n }\n\n private beginFloatingDrag(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { left, top } = floating.bounds;\n\n try {\n handle.setPointerCapture(event.pointerId);\n } catch (err) {\n /* no-op: pointer capture may not be supported in all environments */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingDragState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startLeft: left,\n startTop: top,\n wrapper,\n handle,\n };\n\n this.startPointerTracking();\n }\n\n private beginFloatingResize(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n edges: FloatingResizeEdges,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n } catch (err) {\n /* pointer capture may not be supported */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingResizeState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startWidth: floating.bounds.width,\n startHeight: floating.bounds.height,\n startLeft: floating.bounds.left,\n startTop: floating.bounds.top,\n wrapper,\n handle,\n edges,\n };\n\n this.startPointerTracking();\n }\n\n private handleFloatingDragMove(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const newLeft = state.startLeft + deltaX;\n const newTop = state.startTop + deltaY;\n\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n\n this.updateFloatingDragDropTarget(event);\n }\n\n private endFloatingDrag(pointerId: number): void {\n const state = this.floatingDragState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear outside the try so a thrown releasePointerCapture (capture\n // already lost) doesn't strand the handle in its visual drag state.\n delete state.handle.dataset['resizing'];\n\n const dropHandled = state.dropTarget\n ? this.handleFloatingStackDrop(state.index, state.dropTarget.path, state.dropTarget.zone)\n : false;\n\n this.floatingDragState = null;\n this.hideDropIndicator();\n if (!dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateFloatingDragDropTarget(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state) {\n return;\n }\n\n const stack = this.findStackAtPoint(event.clientX, event.clientY);\n if (!stack) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n const path = this.parsePath(stack.dataset['path']);\n if (!path || (path.type === 'floating' && path.index === state.index)) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n // Reset sticky zone when moving to another stack while dragging the\n // floating window so the side doesn't carry over.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n const zone = this.computeDropZone(stack, event, this.extractDropZoneFromEvent(event));\n\n if (zone) {\n state.dropTarget = { path, zone };\n } else if (state.dropTarget) {\n delete state.dropTarget;\n }\n\n this.showDropIndicator(stack, zone);\n }\n\n private handleFloatingResizeMove(event: PointerEvent): void {\n const state = this.floatingResizeState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const minWidth = 192;\n const minHeight = 128;\n let newWidth = state.startWidth;\n let newHeight = state.startHeight;\n let newLeft = state.startLeft;\n let newTop = state.startTop;\n\n if (state.edges.horizontal === 'right') {\n newWidth = Math.max(minWidth, state.startWidth + deltaX);\n } else if (state.edges.horizontal === 'left') {\n newWidth = Math.max(minWidth, state.startWidth - deltaX);\n newLeft = state.startLeft + (state.startWidth - newWidth);\n }\n\n if (state.edges.vertical === 'bottom') {\n newHeight = Math.max(minHeight, state.startHeight + deltaY);\n } else if (state.edges.vertical === 'top') {\n newHeight = Math.max(minHeight, state.startHeight - deltaY);\n newTop = state.startTop + (state.startHeight - newHeight);\n }\n\n state.wrapper.style.width = `${newWidth}px`;\n state.wrapper.style.height = `${newHeight}px`;\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.width = newWidth;\n floating.bounds.height = newHeight;\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n }\n\n private endFloatingResize(pointerId: number): void {\n const state = this.floatingResizeState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear `data-resizing` outside the try — releasePointerCapture can\n // throw if the capture was already lost (e.g., the pointer left the\n // window), and we still need to drop the resizing attribute or the\n // CSS rule `.dock-floating__resizer[data-resizing='true']` keeps the\n // border dark-blue forever.\n delete state.handle.dataset['resizing'];\n\n this.floatingResizeState = null;\n this.dispatchLayoutChanged();\n }\n\n private getFloatingPaneZIndex(index: number): number {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return 10 + index;\n }\n const base =\n typeof floating.zIndex === 'number' && Number.isFinite(floating.zIndex)\n ? floating.zIndex\n : 10 + index;\n return base;\n }\n\n private promoteFloatingPane(index: number, wrapper: HTMLElement): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const maxExisting = this.floatingLayouts.reduce((max, layout, idx) => {\n if (!layout) {\n return max;\n }\n const z = idx === index ? Number.NEGATIVE_INFINITY : this.getFloatingPaneZIndex(idx);\n return Math.max(max, z);\n }, 0);\n\n const nextZ = Math.max(maxExisting + 2, 12);\n floating.zIndex = nextZ;\n wrapper.style.zIndex = String(nextZ);\n }\n\n private getFloatingWrapper(index: number): HTMLElement | null {\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n return this.floatingLayerEl.querySelector<HTMLElement>(selector);\n }\n\n private startPointerTracking(): void {\n if (this.pointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onPointerMove);\n win?.addEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = true;\n }\n\n private stopPointerTrackingIfIdle(): void {\n if (\n this.pointerTrackingActive &&\n !this.floatingDragState &&\n !this.floatingResizeState &&\n !this.cornerResizeState\n ) {\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n }\n }\n\n private getFloatingWindowTitle(floating: DockFloatingStackLayout): string {\n const fallback = 'Floating Pane';\n if (!floating || !floating.root) {\n return fallback;\n }\n\n const preferred = floating.activePane ?? this.findFirstPaneName(floating.root);\n if (!preferred) {\n return fallback;\n }\n\n return this.titles[preferred] ?? preferred ?? fallback;\n }\n\n private updateFloatingWindowTitle(index: number): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n const wrapper = this.floatingLayerEl.querySelector<HTMLElement>(selector);\n if (!wrapper) {\n return;\n }\n\n const titleEl = wrapper.querySelector<HTMLElement>('.dock-floating__title');\n if (!titleEl) {\n return;\n }\n\n titleEl.textContent = this.getFloatingWindowTitle(floating);\n }\n\n private renderSplit(\n node: DockSplitNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Each DockSplitNode renders as <mp-splitter>. The dock keeps its `.dock-split`\n // class on the host so existing `closest('.dock-split')` queries continue to\n // resolve, and stamps `data-direction` / `data-path` for the tree-driven\n // intersection-handle math.\n const splitter = this.documentRef.createElement('mp-splitter') as HTMLElement;\n splitter.classList.add('dock-split');\n splitter.dataset['direction'] = node.direction;\n splitter.dataset['path'] = path.join('/');\n // mp-splitter uses 'horizontal' (left-right) and 'vertical' (top-bottom).\n // The dock's DockSplitNode.direction matches that vocabulary 1:1.\n splitter.setAttribute('orientation', node.direction);\n\n const splitPath: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n\n node.children.forEach((child, index) => {\n // mp-splitter accepts direct children — it wraps each in a panel-wrapper\n // inside its shadow DOM and projects via a named slot per index.\n splitter.appendChild(this.renderNode(child, [...path, index], floatingIndex));\n });\n\n // Apply persisted sizes from the layout tree once mp-splitter has built\n // its panel wrappers. mp-splitter's setPanelSizes interprets values as\n // pixel widths/heights; the dock's saved sizes are flex weights, so\n // convert using the splitter's measured cross-axis container size.\n const sizes = Array.isArray(node.sizes) ? node.sizes : [];\n if (sizes.length > 0) {\n requestAnimationFrame(() => {\n const totalWeight = sizes.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const containerSize =\n node.direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const px = sizes.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n });\n }\n\n // mp-splitter fires resize-end with pixel sizes after a divider drag.\n // Convert back to flex weights (sum to a stable total — keep current sum\n // so future renders interpret consistently) and persist to the layout tree.\n splitter.addEventListener('resize-end', (event) => {\n // resize-end bubbles, so a nested mp-splitter's drag end would also\n // reach this listener. Only react to events from THIS splitter, not\n // from a descendant — otherwise we'd apply the inner's sizes to the\n // outer's splitNode and mangle the outer's weights.\n if (event.target !== splitter) return;\n const detail = (event as CustomEvent<{ sizes: number[] }>).detail;\n if (!Array.isArray(detail?.sizes) || detail.sizes.length === 0) return;\n const splitNode = this.resolveSplitNode(splitPath);\n if (!splitNode) return;\n const previousTotal = (splitNode.sizes ?? []).reduce(\n (s, w) => s + Math.max(w, 0),\n 0,\n );\n const total = detail.sizes.reduce((s, v) => s + Math.max(v, 0), 0);\n const targetTotal = previousTotal > 0 ? previousTotal : detail.sizes.length;\n if (total > 0) {\n splitNode.sizes = detail.sizes.map(\n (px) => (Math.max(px, 0) / total) * targetTotal,\n );\n this.dispatchLayoutChanged();\n }\n });\n\n return splitter;\n }\n\n private renderStack(\n node: DockStackNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Dock stacks are rendered as <mp-tab-control>. The dock keeps `.dock-stack`\n // as a class on the host so existing `closest('.dock-stack')` queries\n // continue to resolve. The tab strip + body slot projection are owned by\n // mp-tab-control; the dock just provides the slotted header/content\n // elements and listens for tab-activate to drive layout-tree updates.\n const stack = this.documentRef.createElement('mp-tab-control') as HTMLElement;\n stack.classList.add('dock-stack');\n // Dock controls activation; tell mp-tab-control not to auto-pick.\n stack.setAttribute('select-first-tab', 'false');\n // `border=\"top\"` gives us the strip-cutout line under the tabs (so the\n // active tab visually punches through into the body) without adding the\n // full Bootstrap frame, which would double up with the dock's own outer\n // chrome border on `.dock-stack` (and on `.dock-floating` for floating\n // panels).\n stack.setAttribute('border', 'top');\n\n const location: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n stack.dataset['path'] = this.formatPath(location);\n\n const panes = Array.from(new Set(node.panes));\n if (panes.length === 0) {\n const emptyHeader = this.documentRef.createElement('span');\n emptyHeader.setAttribute('slot', '__empty__-header');\n emptyHeader.textContent = '(empty)';\n const empty = this.documentRef.createElement('div');\n empty.setAttribute('slot', '__empty__-content');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n stack.append(emptyHeader, empty);\n stack.setAttribute('active-tab', '__empty__');\n return stack;\n }\n\n const activePane = panes.includes(node.activePane ?? '')\n ? node.activePane!\n : panes[0];\n\n const baseSlug = path.length ? path.join('-') : 'root';\n const pathSlug =\n typeof floatingIndex === 'number' ? `f${floatingIndex}-${baseSlug}` : baseSlug;\n\n panes.forEach((paneName) => {\n const paneSlugRaw = paneName.replace(/[^a-zA-Z0-9_-]/g, '-');\n const paneSlug = paneSlugRaw.length > 0 ? paneSlugRaw : 'pane';\n const tabId = `${this.instanceId}-tab-${pathSlug}-${paneSlug}`;\n const panelId = `${this.instanceId}-panel-${pathSlug}-${paneSlug}`;\n\n // Header span — projected via mp-tab-control's `${tabId}-header` slot\n // into the strip's button content. Carries the dock's drag handlers.\n const headerSpan = this.documentRef.createElement('span');\n headerSpan.setAttribute('slot', `${tabId}-header`);\n headerSpan.classList.add('dock-tab');\n headerSpan.dataset['pane'] = paneName;\n headerSpan.dataset['tabId'] = tabId;\n headerSpan.textContent = this.titles[paneName] ?? paneName;\n\n // Pointer-only drag (no HTML5 dnd). pointerdown captures metrics + arms\n // a threshold gesture; once the pointer moves >threshold pixels we\n // promote it to a real pane drag via beginPaneDrag. Using pointer\n // events sidesteps the entire class of HTML5 dnd quirks (cancellation\n // when source DOM is removed mid-drag, suppressed mousemove, bogus 0/0\n // coordinates in Firefox, browser-specific drag-image behavior).\n headerSpan.addEventListener('pointerdown', (event) => {\n this.captureTabDragMetrics(event, stack);\n this.armPaneDragGesture(event, this.clonePath(location), paneName, stack);\n event.stopPropagation();\n // Do NOT call event.preventDefault() here. On touch, that suppresses\n // the synthesized click on the parent .nav-link button — which is how\n // mp-tab-control fires `tab-activate`. `touch-action: none` on\n // `.dock-tab` already prevents the browser from arbitrating the\n // gesture for scroll, so preventDefault would be redundant + harmful.\n });\n\n // Content wrapper — projected via mp-tab-control's `${tabId}-content`\n // slot only when this tab is active. Holds the dock manager's per-pane\n // <slot> for the consumer's content.\n const paneHost = this.documentRef.createElement('div');\n paneHost.setAttribute('slot', `${tabId}-content`);\n paneHost.classList.add('dock-stack__pane');\n paneHost.dataset['pane'] = paneName;\n paneHost.dataset['tabId'] = tabId;\n paneHost.id = panelId;\n\n const slotEl = this.documentRef.createElement('slot');\n slotEl.name = paneName;\n paneHost.appendChild(slotEl);\n\n stack.append(headerSpan, paneHost);\n\n if (paneName === activePane) {\n stack.setAttribute('active-tab', tabId);\n }\n });\n\n stack.dataset['activePane'] = activePane;\n\n // Drive activatePane from mp-tab-control's tab-activate event. We map the\n // tabId back to the original paneName via the header span's data-pane.\n stack.addEventListener('tab-activate', (event) => {\n const detail = (event as CustomEvent<{ tabId: string }>).detail;\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > [data-tab-id=\"${detail.tabId}\"]`,\n );\n const paneName = headerSpan?.dataset['pane'];\n if (paneName) {\n this.activatePane(stack, paneName, this.clonePath(location));\n this.dispatchEvent(\n new CustomEvent('dock-pane-activated', {\n detail: { pane: paneName },\n bubbles: true,\n composed: true,\n }),\n );\n }\n });\n\n return stack;\n }\n\n /**\n * Returns the strip (`.tsc`) element inside an `<mp-tab-control>`'s shadow\n * DOM. Used by drag/drop logic that needs the strip's geometry instead of\n * the host element's bounds.\n */\n private getStackStripEl(stack: HTMLElement): HTMLElement | null {\n if (stack.tagName !== 'MP-TAB-CONTROL') return null;\n return stack.shadowRoot?.querySelector<HTMLElement>('.tsc') ?? null;\n }\n\n /**\n * Returns the rendered tab buttons inside an `<mp-tab-control>`'s shadow\n * strip — the light-DOM `.dock-tab` spans the dock owns are projected into\n * these buttons via `<slot>`. Use these for geometry / position queries\n * (insert-index computation, drop-indicator placement). Use the light-DOM\n * `.dock-tab` spans for data queries (paneName, drag listeners).\n */\n private getStackTabButtons(stack: HTMLElement): HTMLButtonElement[] {\n if (stack.tagName !== 'MP-TAB-CONTROL') return [];\n return Array.from(\n stack.shadowRoot?.querySelectorAll<HTMLButtonElement>('button.nav-link') ?? [],\n );\n }\n\n /**\n * Returns the dividers inside an `<mp-splitter>`'s shadow DOM, in DOM order.\n * mp-splitter renders one `.divider` between each pair of adjacent panels,\n * so for an N-child split, length N-1.\n */\n private getSplitterDividers(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.divider') ?? [],\n );\n }\n\n /**\n * Returns the panel wrappers inside an `<mp-splitter>`'s shadow DOM, in\n * DOM order. These are the elements mp-splitter sizes (via setPanelSizes)\n * during a divider drag — the dock reads their geometry for intersection\n * handle math and snap markers.\n */\n private getSplitterPanels(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.panel-wrapper') ?? [],\n );\n }\n\n /**\n * Locate the rendered `<mp-splitter>` element for a given DockPath\n * `segments` value (the split-tree path). Searches the dock's shadow.\n */\n private findSplitterByPath(segments: number[]): HTMLElement | null {\n return (\n this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split[data-path=\"${segments.join('/')}\"]`,\n ) ?? null\n );\n }\n\n private onPointerMove(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.handleCornerResizeMove(event);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.handleFloatingResizeMove(event);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.handleFloatingDragMove(event);\n }\n }\n\n private onPointerUp(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.endCornerResize(event.pointerId);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.endFloatingDrag(event.pointerId);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.endFloatingResize(event.pointerId);\n }\n\n this.stopPointerTrackingIfIdle();\n }\n\n private captureTabDragMetrics(event: PointerEvent, stackEl: HTMLElement | null): void {\n if (!stackEl) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl.getBoundingClientRect();\n\n const pointerOffsetX = event.clientX - stackRect.left;\n const pointerOffsetY = event.clientY - stackRect.top;\n const left = stackRect.left - hostRect.left;\n const top = stackRect.top - hostRect.top;\n const width = Number.isFinite(stackRect.width) ? stackRect.width : 0;\n const height = Number.isFinite(stackRect.height) ? stackRect.height : 0;\n\n this.pendingTabDragMetrics = {\n pointerOffsetX,\n pointerOffsetY,\n left,\n top,\n width,\n height,\n startClientX: event.clientX,\n startClientY: event.clientY,\n };\n }\n\n private clearPendingTabDragMetrics(): void {\n this.pendingTabDragMetrics = null;\n }\n\n /**\n * Pointerdown handler arms a \"may become a drag\" gesture. Mouse / pen use a\n * 5 px distance threshold and arm immediately; touch dispatches to\n * {@link armPaneDragGestureTouch} which requires a 600 ms stationary hold\n * (so the user can scroll the tabstrip natively without undocking).\n * Once armed, both paths converge on {@link beginPaneDrag}. All listeners\n * self-clean on resolve so the gesture stays scoped to a single pointerdown.\n */\n private armPaneDragGesture(\n startEvent: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n if (startEvent.pointerType === 'touch') {\n this.armPaneDragGestureTouch(startEvent, path, pane, stackEl);\n return;\n }\n if (startEvent.pointerType === 'mouse' && startEvent.button !== 0) return;\n const win = this.windowRef;\n if (!win) return;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n const pointerId = startEvent.pointerId;\n const threshold = 5;\n let resolved = false;\n\n const cleanup = (): void => {\n resolved = true;\n win.removeEventListener('pointermove', onMove, true);\n win.removeEventListener('pointerup', onRelease, true);\n win.removeEventListener('pointercancel', onRelease, true);\n };\n\n const onMove = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) < threshold) return;\n cleanup();\n this.beginPaneDrag(event, path, pane, stackEl);\n };\n\n const onRelease = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n win.addEventListener('pointermove', onMove, true);\n win.addEventListener('pointerup', onRelease, true);\n win.addEventListener('pointercancel', onRelease, true);\n }\n\n /**\n * Touch-specific gesture arming. With `.dock-tab` set to `touch-action:\n * none`, the browser never arbitrates the gesture itself, so JS owns it\n * from frame 1. Three outcomes from the pending state:\n *\n * - User holds within {@link TOUCH_LONG_PRESS_SLOP_PX} for\n * {@link TOUCH_LONG_PRESS_MS} → timer fires → drag arms via\n * {@link beginPaneDrag}.\n * - User moves past slop and the move is mostly horizontal, and the\n * strip's `<ul>` is scrollable → enter `scrolling` mode and drive\n * `ul.scrollLeft` from JS for the rest of the gesture (no drag, no\n * momentum — direct 1:1 finger follow).\n * - User moves past slop in any other direction, releases, or\n * pointercancel fires → abandoned, no drag, no scroll. Releases\n * under slop fire the synthesized click that drives `tab-activate`.\n *\n * `touch-action: pan-x` was the original PRD design but doesn't work:\n * the policy is frozen at touchstart and `setPointerCapture` doesn't\n * promote it, so first move after a long-press fires pointercancel and\n * strands the panel. JS-driven scroll is the only model that holds.\n */\n private armPaneDragGestureTouch(\n startEvent: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n const win = this.windowRef;\n if (!win) return;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n const pointerId = startEvent.pointerId;\n let latestX = startX;\n let latestY = startY;\n let lastScrollX = startX;\n let resolved = false;\n let scrolling = false;\n let pressFeedbackApplied = false;\n\n const tabSpan: HTMLElement | null =\n startEvent.currentTarget instanceof HTMLElement\n ? startEvent.currentTarget\n : startEvent.target instanceof HTMLElement\n ? startEvent.target.closest('.dock-tab')\n : null;\n\n const stripUl: HTMLElement | null = stackEl\n ? this.getStackStripEl(stackEl)?.querySelector<HTMLElement>(\n 'ul.nav.nav-tabs',\n ) ?? null\n : null;\n\n const cleanup = (): void => {\n if (resolved) return;\n resolved = true;\n win.clearTimeout(longPressTimeout);\n win.clearTimeout(pressFeedbackTimeout);\n win.removeEventListener('pointermove', onMove, true);\n win.removeEventListener('pointerup', onRelease, true);\n win.removeEventListener('pointercancel', onCancel, true);\n if (pressFeedbackApplied && tabSpan) {\n tabSpan.removeAttribute('data-pressing');\n }\n };\n\n const onMove = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n\n if (scrolling) {\n const dx = event.clientX - lastScrollX;\n lastScrollX = event.clientX;\n if (stripUl) stripUl.scrollLeft -= dx;\n return;\n }\n\n latestX = event.clientX;\n latestY = event.clientY;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) <= MintDockManagerElement.TOUCH_LONG_PRESS_SLOP_PX) {\n return;\n }\n\n // Slop crossed before the long-press fired. If the move is mostly\n // horizontal and the strip can scroll, take over scroll in JS;\n // otherwise abandon (no drag — browser native UI is fully suppressed\n // by `touch-action: none` so no fallback is needed).\n const stripScrollable =\n !!stripUl && stripUl.scrollWidth > stripUl.clientWidth;\n if (Math.abs(dx) > Math.abs(dy) && stripScrollable) {\n win.clearTimeout(longPressTimeout);\n win.clearTimeout(pressFeedbackTimeout);\n if (pressFeedbackApplied && tabSpan) {\n tabSpan.removeAttribute('data-pressing');\n pressFeedbackApplied = false;\n }\n scrolling = true;\n lastScrollX = event.clientX;\n stripUl!.scrollLeft -= dx;\n this.clearPendingTabDragMetrics();\n return;\n }\n\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n const onRelease = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n const onCancel = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n const longPressTimeout = win.setTimeout(() => {\n if (resolved) return;\n cleanup();\n try {\n this.setPointerCapture(pointerId);\n } catch {\n // setPointerCapture throws if the pointer is no longer active\n // (e.g. timer raced a pointerup we didn't see). Drag will abort\n // naturally on the next event.\n }\n if (typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function') {\n try {\n navigator.vibrate(10);\n } catch {\n // ignore\n }\n }\n const synthEvent = new PointerEvent('pointermove', {\n pointerId,\n pointerType: 'touch',\n isPrimary: true,\n clientX: latestX,\n clientY: latestY,\n bubbles: false,\n cancelable: false,\n });\n this.beginPaneDrag(synthEvent, path, pane, stackEl);\n }, MintDockManagerElement.TOUCH_LONG_PRESS_MS);\n\n const pressFeedbackTimeout = win.setTimeout(() => {\n if (resolved || !tabSpan) return;\n pressFeedbackApplied = true;\n tabSpan.setAttribute('data-pressing', 'true');\n }, MintDockManagerElement.TOUCH_PRESS_FEEDBACK_DELAY_MS);\n\n win.addEventListener('pointermove', onMove, true);\n win.addEventListener('pointerup', onRelease, true);\n win.addEventListener('pointercancel', onCancel, true);\n }\n\n private beginPaneDrag(\n event: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n const {\n path: sourcePath,\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n } = this.preparePaneDragSource(path, pane, stackEl, event);\n\n // Capture header bounds for detecting when to convert to floating.\n // The strip lives inside the mp-tab-control's shadow as `.tsc`.\n const headerEl = stackEl ? this.getStackStripEl(stackEl) : null;\n const headerRect = headerEl ? headerEl.getBoundingClientRect() : null;\n const headerBounds = headerRect\n ? { left: headerRect.left, top: headerRect.top, right: headerRect.right, bottom: headerRect.bottom }\n : null;\n const metrics = this.pendingTabDragMetrics;\n\n this.dragState = {\n pane,\n sourcePath: this.clonePath(sourcePath),\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n dropHandled: false,\n sourceStackEl: stackEl,\n sourceHeaderBounds: headerBounds,\n startClientX:\n metrics && Number.isFinite(metrics.startClientX)\n ? metrics.startClientX\n : event.clientX,\n startClientY:\n metrics && Number.isFinite(metrics.startClientY)\n ? metrics.startClientY\n : event.clientY,\n };\n this.lastDragPointerPosition = {\n x: this.dragState.startClientX as number,\n y: this.dragState.startClientY as number,\n };\n // pointerOffsetX/Y from preparePaneDragSource is the offset within the\n // source stack rect captured at pointerdown by captureTabDragMetrics.\n // Don't overwrite with event.offsetX/Y here — the threshold-trigger\n // pointermove fired on window, so its offset is in window-local coords\n // (≈ clientX/Y) which would crash the conversion math to ~(0,0).\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n this.startDragPointerTracking();\n // Mark the source floating wrapper (if any) so its CSS rule kicks in and\n // pointer-events:none lets findStackAtPoint see through to the docked\n // stack underneath, enabling drop zones over the dock during the drag.\n this.markDraggedFloatingWrapper();\n\n // Preferred UX: if the dragged tab is the only one in its stack,\n // immediately convert to a floating window unless it is already the\n // only pane in a floating window (this case is handled by reuse logic).\n if (this.dragState && this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const loc = this.resolveStackLocation(this.dragState.sourcePath);\n if (loc && Array.isArray(loc.node.panes) && loc.node.panes.length === 1) {\n let shouldConvert = false;\n if (loc.context === 'docked') {\n shouldConvert = true;\n } else if (loc.context === 'floating') {\n const floating = this.floatingLayouts[loc.index];\n const totalPanes = floating && floating.root ? this.countPanesInTree(floating.root) : 0;\n shouldConvert = totalPanes > 1;\n }\n if (shouldConvert) {\n this.convertPendingTabDragToFloating(event.clientX, event.clientY);\n }\n }\n }\n }\n\n private preparePaneDragSource(\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n event: PointerEvent,\n ): { path: DockPath; floatingIndex: number | null; pointerOffsetX: number; pointerOffsetY: number } {\n const location = this.resolveStackLocation(path);\n if (!location || !location.node.panes.includes(pane)) {\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n const metrics = this.pendingTabDragMetrics;\n\n const domHasSibling =\n !!stackEl &&\n Array.from(stackEl.querySelectorAll<HTMLElement>('.dock-tab')).some(\n (button) => button.dataset['pane'] && button.dataset['pane'] !== pane,\n );\n\n const hasSiblingInStack = location.node.panes.some((existing) => existing !== pane);\n const floating = location.context === 'floating' ? this.floatingLayouts[location.index] : null;\n const floatingPaneCount =\n floating && floating.root ? this.countPanesInTree(floating.root) : hasSiblingInStack ? 2 : 1;\n const shouldReuseExistingWindow =\n location.context === 'floating' &&\n !!floating &&\n !hasSiblingInStack &&\n !domHasSibling &&\n floatingPaneCount <= 1;\n\n if (shouldReuseExistingWindow) {\n if (floating) {\n floating.activePane = pane;\n this.updateFloatingWindowTitle(location.index);\n const wrapper = this.getFloatingWrapper(location.index);\n if (wrapper) {\n this.promoteFloatingPane(location.index, wrapper);\n }\n const hostRect = this.getBoundingClientRect();\n const pointerOffsetX =\n metrics &&\n Number.isFinite(metrics.pointerOffsetX) &&\n Number.isFinite(metrics.left) &&\n Number.isFinite(floating.bounds.left)\n ? metrics.pointerOffsetX + (metrics.left - floating.bounds.left)\n : Number.isFinite(event.clientX) && Number.isFinite(floating.bounds.left)\n ? event.clientX - hostRect.left - floating.bounds.left\n : floating.bounds.width / 2;\n const pointerOffsetY =\n metrics &&\n Number.isFinite(metrics.pointerOffsetY) &&\n Number.isFinite(metrics.top) &&\n Number.isFinite(floating.bounds.top)\n ? metrics.pointerOffsetY + (metrics.top - floating.bounds.top)\n : Number.isFinite(event.clientY) && Number.isFinite(floating.bounds.top)\n ? event.clientY - hostRect.top - floating.bounds.top\n : floating.bounds.height / 2;\n return {\n path,\n floatingIndex: location.index,\n pointerOffsetX,\n pointerOffsetY,\n };\n }\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n // Do not convert to floating yet; allow in-header reordering first.\n // We return placeholder values and will convert once the pointer leaves the tab header.\n const pointerOffsetXVal =\n metrics && Number.isFinite(metrics.pointerOffsetX)\n ? metrics.pointerOffsetX\n : 0;\n const pointerOffsetYVal =\n metrics && Number.isFinite(metrics.pointerOffsetY)\n ? metrics.pointerOffsetY\n : 0;\n\n return {\n path,\n floatingIndex: -1,\n pointerOffsetX: pointerOffsetXVal,\n pointerOffsetY: pointerOffsetYVal,\n };\n }\n\n private endPaneDrag(): void {\n this.clearPendingDragEndTimeout();\n // Restore the dragged tab's `data-hidden` and remove the placeholder span\n // BEFORE we null out dragState — clearHeaderDragPlaceholder reads\n // `dragState.placeholderEl`, `dragState.placeholderHeader`, and\n // `dragState.pane` to know what to restore. If dragState is nulled first,\n // this becomes a silent no-op and the dragged pane stays hidden in its\n // source stack while the placeholder span lingers in the strip — which\n // is exactly the \"Panel disappears, only a small tab-thumb remains\"\n // regression the multi-pane drag-out path can otherwise trigger when\n // no renderLayout() runs between conversion and end (e.g. user releases\n // outside any drop zone, or HTML5 dragend fires without a drop).\n this.clearHeaderDragPlaceholder();\n this.clearDraggedFloatingWrapperMarkers();\n const state = this.dragState;\n this.dragState = null;\n this.hideDropIndicator();\n this.stopDragPointerTracking();\n this.lastDragPointerPosition = null;\n if (state && state.floatingIndex !== null && !state.dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateDraggedFloatingPositionFromPoint(\n clientX: number,\n clientY: number,\n ): void {\n if (!this.dragState) {\n return;\n }\n\n if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) {\n return;\n }\n\n // If still dragging a tab inside its header, only convert to floating once we leave the header.\n if (this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const b = this.dragState.sourceHeaderBounds;\n const sx = this.dragState.startClientX ?? clientX;\n const sy = this.dragState.startClientY ?? clientY;\n const dist = Math.hypot(clientX - sx, clientY - sy);\n const threshold = 8; // pixels to move before converting (tuned up)\n // Default to inside while bounds are unknown to avoid premature floating\n let insideHeader = true;\n const insideByBounds = b ? this.isPointWithinBounds(b, clientX, clientY) : true;\n const insideByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n insideHeader = insideByBounds || insideByHitTest;\n if (!insideHeader && dist > threshold) {\n // Convert to floating now using current pointer position\n this.convertPendingTabDragToFloating(clientX, clientY);\n }\n }\n\n this.updatePaneDragDropTargetFromPoint(clientX, clientY);\n\n const { floatingIndex, pointerOffsetX, pointerOffsetY } = this.dragState;\n if (floatingIndex === null || floatingIndex < 0) {\n return;\n }\n\n const floating = this.floatingLayouts[floatingIndex];\n if (!floating) {\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const newLeft = clientX - hostRect.left - pointerOffsetX;\n const newTop = clientY - hostRect.top - pointerOffsetY;\n\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n\n const wrapper = this.getFloatingWrapper(floatingIndex);\n if (wrapper) {\n wrapper.style.left = `${newLeft}px`;\n wrapper.style.top = `${newTop}px`;\n }\n }\n\n private updatePaneDragDropTargetFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n\n const stack = this.findStackAtPoint(clientX, clientY);\n const path = stack ? this.parsePath(stack.dataset['path']) : null;\n if (!stack || !path) {\n // While actively dragging, avoid hiding the indicator if it is visible.\n // Transient misses from hit-testing are common near the joystick.\n if (this.dropJoystick.dataset['visible'] !== 'true') {\n this.hideDropIndicator();\n }\n // Also ensure any in-header placeholder is cleared when not over a stack\n this.clearHeaderDragPlaceholder();\n return;\n }\n\n // If we moved to a different target stack, reset any sticky zone so\n // the new drop area doesn't inherit the previous side selection.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n // Previous behavior hid the indicator and returned early here; instead,\n // allow the live-reorder branch below to handle in-header drags.\n\n // While dragging within the same header, show a placeholder and suppress joystick/indicator\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n path &&\n this.pathsEqual(path, this.dragState.sourcePath)\n ) {\n const inHeaderByBounds = !!this.dragState.sourceHeaderBounds && this.isPointWithinBounds(this.dragState.sourceHeaderBounds, clientX, clientY);\n const inHeaderByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n if (inHeaderByBounds || inHeaderByHitTest) {\n // Ensure placeholder exists and move it as the pointer moves.\n // Placeholder management mutates the slotted children of the\n // mp-tab-control stack; the WC re-renders the strip on slotchange.\n this.ensureHeaderDragPlaceholder(stack, this.dragState.pane);\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n if (this.dragState.liveReorderIndex !== idx) {\n this.updateHeaderDragPlaceholderPosition(stack, idx);\n // Keep model reordering until drop; only move the placeholder now\n this.dragState.liveReorderIndex = idx;\n }\n this.hideDropIndicator();\n return;\n }\n }\n\n // Leaving the header: ensure any placeholder is removed immediately\n this.clearHeaderDragPlaceholder();\n\n const zoneHint = this.findDropZoneByPoint(clientX, clientY);\n const zone = this.computeDropZone(stack, { clientX, clientY }, zoneHint);\n this.showDropIndicator(stack, zone);\n }\n\n // Returns true when the pointer is currently over the source stack's header (tab strip).\n // The strip lives inside the mp-tab-control's shadow as `.tsc`, so we test\n // bounds directly rather than using elementsFromPoint(/contains) which won't\n // pierce the shadow boundary cleanly.\n private isPointerOverSourceHeader(clientX: number, clientY: number): boolean {\n const state = this.dragState;\n if (!state) {\n return false;\n }\n const stackEl = state.sourceStackEl ?? null;\n const strip = stackEl ? this.getStackStripEl(stackEl) : null;\n if (!strip) {\n // Be conservative: if we cannot resolve the strip, treat as inside\n return true;\n }\n const r = strip.getBoundingClientRect();\n return clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom;\n }\n\n private isPointWithinBounds(\n bounds: { left: number; right: number; top: number; bottom: number },\n x: number,\n y: number,\n ): boolean {\n return x >= bounds.left && x <= bounds.right && y >= bounds.top && y <= bounds.bottom;\n }\n\n // Ensure a placeholder tab exists during in-header drag and hide the real dragged tab visually.\n // Operates on the mp-tab-control stack: the dragged content div gets `data-hidden`\n // (mp-tab-control then skips its tab in the strip), and a placeholder header+content\n // pair is appended as light-DOM children of the stack. mp-tab-control's mutation\n // observer picks up the change and renders the placeholder as a tab.\n private ensureHeaderDragPlaceholder(stack: HTMLElement, pane: string): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n if (this.dragState?.placeholderHeader === stack && this.dragState.placeholderEl) {\n return;\n }\n const draggedHeader = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n if (!draggedHeader || !draggedContent) return;\n\n // Measure the dragged tab's text-only width BEFORE hiding it. The\n // `.dock-tab` rule applies padding (matching the strip button's padding so\n // the span fills the button as a drag handle), so `offsetWidth` is\n // text + padding — we subtract the span's own padding to get just the\n // text width. That's the natural slot content width we want the\n // placeholder to reserve; the placeholder span will re-apply the same\n // padding on top, mirroring the original tab's geometry exactly.\n const draggedCS = this.windowRef\n ? this.windowRef.getComputedStyle(draggedHeader)\n : globalThis.getComputedStyle(draggedHeader);\n const draggedHorizontalPadding =\n parseFloat(draggedCS.paddingLeft) + parseFloat(draggedCS.paddingRight);\n const slotContentWidth = Math.max(\n 0,\n draggedHeader.offsetWidth - draggedHorizontalPadding,\n );\n\n // Hide the dragged tab from mp-tab-control's strip (frees up the slot).\n draggedContent.setAttribute('data-hidden', '');\n\n // Build placeholder header + content. The placeholder uses a unique tabId\n // (`__dock-placeholder__`) so its slot names don't collide with real panes.\n // We mirror the dragged tab's text into the placeholder (dimmed via opacity)\n // so the strip reads as \"this tab is being dragged\" rather than \"empty slot\".\n const placeholderTabId = '__dock-placeholder__';\n const phHeader = this.documentRef.createElement('span');\n phHeader.setAttribute('slot', `${placeholderTabId}-header`);\n phHeader.classList.add('dock-tab');\n phHeader.dataset['placeholder'] = 'true';\n phHeader.dataset['tabId'] = placeholderTabId;\n phHeader.setAttribute('aria-hidden', 'true');\n phHeader.textContent = draggedHeader.textContent;\n // `display: inline-block` is required for `min-width` to take effect on the\n // span. Without it, an inline element ignores min-width and the placeholder\n // collapses to its content width (or 0 if textContent is also empty),\n // leaving a \"mini-thumb\" in the strip.\n phHeader.style.display = 'inline-block';\n phHeader.style.minWidth = `${slotContentWidth}px`;\n phHeader.style.opacity = '0.5';\n\n const phContent = this.documentRef.createElement('div');\n phContent.setAttribute('slot', `${placeholderTabId}-content`);\n phContent.classList.add('dock-stack__pane');\n phContent.dataset['placeholder'] = 'true';\n\n // Insert before the dragged header span so the placeholder appears in\n // the dragged tab's original strip position. The mutation observer in\n // mp-tab-control will refresh the tab list automatically.\n stack.insertBefore(phHeader, draggedHeader);\n stack.insertBefore(phContent, draggedContent);\n\n if (this.dragState) {\n this.dragState.placeholderHeader = stack;\n this.dragState.placeholderEl = phHeader;\n }\n }\n\n // Move the placeholder to the computed target index within the strip.\n // We reorder light-DOM children (header span + matching content div); the\n // mp-tab-control then re-renders the strip in the new order on slotchange.\n private updateHeaderDragPlaceholderPosition(stack: HTMLElement, targetIndex: number): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n const phHeader = this.dragState?.placeholderEl ?? null;\n if (!phHeader) return;\n\n const draggedPane = this.dragState?.pane ?? null;\n // Find all real header spans (excluding the placeholder + the hidden dragged one).\n const realHeaders = Array.from(\n stack.querySelectorAll<HTMLElement>(':scope > .dock-tab'),\n ).filter(\n (h) =>\n h !== phHeader &&\n (!draggedPane || h.dataset['pane'] !== draggedPane),\n );\n const clampedTarget = Math.max(0, Math.min(targetIndex, realHeaders.length));\n const ref = realHeaders[clampedTarget] ?? null;\n stack.insertBefore(phHeader, ref);\n\n // Keep the placeholder content adjacent to its header so child-order\n // remains predictable for slotchange-driven re-renders.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n if (phContent && phHeader.nextElementSibling !== phContent) {\n stack.insertBefore(phContent, phHeader.nextElementSibling);\n }\n }\n\n // Remove placeholder and restore the dragged tab's visibility.\n private clearHeaderDragPlaceholder(): void {\n const ph = this.dragState?.placeholderEl ?? null;\n const stack = this.dragState?.placeholderHeader ?? null;\n if (stack) {\n // Restore the dragged content div's visibility so its strip tab returns.\n if (this.dragState?.pane) {\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(this.dragState.pane)}\"]`,\n );\n draggedContent?.removeAttribute('data-hidden');\n }\n // Remove the placeholder content div sibling.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n phContent?.remove();\n }\n if (ph && ph.parentElement) {\n ph.parentElement.removeChild(ph);\n }\n if (this.dragState) {\n this.dragState.placeholderEl = null;\n this.dragState.placeholderHeader = null;\n }\n }\n\n private startDragPointerTracking(): void {\n if (this.dragPointerTrackingActive) {\n return;\n }\n this.lastDragPointerPosition = null;\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onDragPointerMove, true);\n win?.addEventListener('pointerup', this.onDragPointerUp, true);\n win?.addEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = true;\n }\n\n private stopDragPointerTracking(): void {\n if (!this.dragPointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onDragPointerMove, true);\n win?.removeEventListener('pointerup', this.onDragPointerUp, true);\n win?.removeEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.clearPendingDragEndTimeout();\n }\n\n private onDragPointerMove(event: PointerEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.lastDragPointerPosition = { x: event.clientX, y: event.clientY };\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n }\n\n private onDragPointerUp(event: PointerEvent): void {\n // Commit the drop from pointer release; the pointer-up coordinates are\n // authoritative for which stack/zone the user dropped into.\n if (this.dragState) {\n const x = Number.isFinite(event.clientX) ? event.clientX : this.lastDragPointerPosition?.x;\n const y = Number.isFinite(event.clientY) ? event.clientY : this.lastDragPointerPosition?.y;\n if (x !== undefined && y !== undefined) {\n this.finalizeDropFromPoint(x, y);\n }\n }\n this.handleDragPointerUpCommon();\n }\n\n private onDragPointerCancel(): void {\n // OS-level cancel (e.g. pointer capture lost): end the drag without\n // committing a drop.\n this.handleDragPointerUpCommon();\n }\n\n // Convert a currently in-header tab drag into a floating window\n private convertPendingTabDragToFloating(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const state = this.dragState;\n if (state.floatingIndex !== null && state.floatingIndex >= 0) {\n return; // already floating\n }\n // Clean up any placeholder before converting\n this.clearHeaderDragPlaceholder();\n const location = this.resolveStackLocation(state.sourcePath);\n if (!location) {\n return;\n }\n\n const pane = state.pane;\n const stackEl = state.sourceStackEl ?? null;\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl?.getBoundingClientRect() ?? null;\n const metrics = this.pendingTabDragMetrics;\n\n const fallbackWidth = 320;\n const fallbackHeight = 240;\n const width =\n metrics && Number.isFinite(metrics.width) && metrics.width > 0\n ? metrics.width\n : stackRect && Number.isFinite(stackRect.width)\n ? stackRect.width\n : fallbackWidth;\n const height =\n metrics && Number.isFinite(metrics.height) && metrics.height > 0\n ? metrics.height\n : stackRect && Number.isFinite(stackRect.height)\n ? stackRect.height\n : fallbackHeight;\n\n // Place the floating wrapper exactly where the docked stack was, so the\n // pane appears in-place at the moment of detach instead of jumping under\n // the cursor. metrics.left/top are host-relative (captured at pointerdown\n // in captureTabDragMetrics). Compensate for the floating wrapper's 1px\n // border so the visible content edge lines up with the original stack's\n // visible content edge (the docked .dock-stack also has a 1px border, so\n // the inner content rectangles match after this offset).\n const FLOATING_BORDER = 1;\n const initialLeft =\n metrics && Number.isFinite(metrics.left)\n ? metrics.left - FLOATING_BORDER\n : Number.isFinite(clientX)\n ? clientX - hostRect.left - width / 2\n : 0;\n const initialTop =\n metrics && Number.isFinite(metrics.top)\n ? metrics.top - FLOATING_BORDER\n : Number.isFinite(clientY)\n ? clientY - hostRect.top - height / 2\n : 0;\n\n // Derive pointerOffset from the cursor's actual position relative to the\n // freshly-placed wrapper (not from pointerdown metrics) so the very next\n // pointermove translates into a wrapper move of exactly the cursor delta\n // — no jump, no drift.\n const pointerOffsetX = Number.isFinite(clientX)\n ? clientX - hostRect.left - initialLeft\n : width / 2;\n const pointerOffsetY = Number.isFinite(clientY)\n ? clientY - hostRect.top - initialTop\n : height / 2;\n\n // Remove pane from its current stack and create a new floating entry\n this.removePaneFromLocation(location, pane);\n const floatingStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n const floatingLayout: DockFloatingStackLayout = {\n bounds: {\n left: initialLeft,\n top: initialTop,\n width,\n height,\n },\n root: floatingStack,\n activePane: pane,\n };\n\n this.floatingLayouts.push(floatingLayout);\n const newIndex = this.floatingLayouts.length - 1;\n this.renderLayout();\n const wrapper = this.getFloatingWrapper(newIndex);\n if (wrapper) {\n this.promoteFloatingPane(newIndex, wrapper);\n }\n // Update drag state so subsequent moves reposition the floating window\n state.sourcePath = { type: 'floating', index: newIndex, segments: [] };\n state.floatingIndex = newIndex;\n state.pointerOffsetX = pointerOffsetX;\n state.pointerOffsetY = pointerOffsetY;\n // Now that the wrapper exists, mark it so pointer-events:none kicks in\n // and findStackAtPoint can see through to docked stacks underneath.\n this.markDraggedFloatingWrapper();\n this.dispatchLayoutChanged();\n }\n\n // Toggle data-dragging on the floating wrapper currently associated with\n // the active pane drag (dragState.floatingIndex), if any. Used to make the\n // wrapper transparent to elementsFromPoint so drop zones can be shown on\n // stacks underneath. clearDraggedFloatingWrapper() is the inverse.\n private markDraggedFloatingWrapper(): void {\n const fi = this.dragState?.floatingIndex;\n if (fi === null || fi === undefined || fi < 0) return;\n const wrapper = this.getFloatingWrapper(fi);\n if (wrapper) wrapper.dataset['dragging'] = 'true';\n }\n\n private clearDraggedFloatingWrapperMarkers(): void {\n const layer = this.floatingLayerEl;\n if (!layer) return;\n layer.querySelectorAll<HTMLElement>('.dock-floating[data-dragging=\"true\"]').forEach((el) => {\n delete el.dataset['dragging'];\n });\n }\n\n // Compute the intended tab insert index within a stack's strip based on pointer X.\n // Uses the rendered tab buttons inside mp-tab-control's shadow strip for geometry;\n // the dragged tab is hidden during drag (its content has data-hidden), and the\n // placeholder button (if present) gives us the dragged-position reference.\n private computeHeaderInsertIndex(stack: HTMLElement, clientX: number): number {\n if (stack.tagName !== 'MP-TAB-CONTROL') return 0;\n const allTabButtons = this.getStackTabButtons(stack);\n if (allTabButtons.length === 0) {\n return 0;\n }\n\n const placeholderHeader = stack.querySelector<HTMLElement>(\n ':scope > .dock-tab[data-placeholder=\"true\"]',\n );\n const placeholderTabId = placeholderHeader?.dataset['tabId'];\n const placeholderButton = placeholderTabId\n ? allTabButtons.find((b) => b.id === `${placeholderTabId}-header-button`) ?? null\n : null;\n\n // The dragged pane's content is `data-hidden`, but mp-tab-control's strip\n // re-render is async (its MutationObserver schedules a Lit microtask). When\n // beginPaneDrag calls updateDraggedFloatingPositionFromPoint synchronously\n // right after preparePaneDragSource, this runs before that re-render — so\n // the dragged button is still in the strip's shadow. We must exclude it\n // explicitly, otherwise the loop counts it as a real target and the\n // placeholder gets appended past the live tabs (visible on touch\n // long-press, where the finger doesn't move and the user sees the\n // mis-positioned placeholder for the duration of the hold).\n const draggedPane = this.dragState?.pane ?? null;\n let draggedTabId: string | null = null;\n if (draggedPane) {\n for (const child of Array.from(stack.children)) {\n if (\n child instanceof HTMLElement &&\n child.classList.contains('dock-tab') &&\n !child.hasAttribute('data-placeholder') &&\n child.dataset['pane'] === draggedPane\n ) {\n draggedTabId = child.dataset['tabId'] ?? null;\n break;\n }\n }\n }\n const draggedButton = draggedTabId\n ? allTabButtons.find((b) => b.id === `${draggedTabId}-header-button`) ?? null\n : null;\n\n const targets = allTabButtons.filter(\n (b) => b !== placeholderButton && b !== draggedButton,\n );\n if (targets.length === 0) {\n return 0;\n }\n\n const rightBias = 12;\n const leftBias = 0;\n\n const baseRect = placeholderButton ? placeholderButton.getBoundingClientRect() : null;\n const rectValid = !!baseRect && Number.isFinite(baseRect.width) && baseRect.width > 0;\n const draggedCenter = rectValid && baseRect ? baseRect.left + baseRect.width / 2 : null;\n\n for (let i = 0; i < targets.length; i += 1) {\n const rect = targets[i].getBoundingClientRect();\n const baseMid = rect.left + rect.width / 2;\n const isRightOfDragged = draggedCenter !== null ? baseMid >= draggedCenter : false;\n const mid = isRightOfDragged ? baseMid + rightBias : baseMid - leftBias;\n if (clientX < mid) {\n return i;\n }\n }\n return targets.length;\n }\n\n private reorderPaneInLocationAtIndex(location: ResolvedLocation, pane: string, targetIndex: number): void {\n const panes = location.node.panes;\n const currentIndex = panes.indexOf(pane);\n if (currentIndex === -1) {\n return;\n }\n const clampedTarget = Math.max(0, Math.min(targetIndex, panes.length - 1));\n if (clampedTarget === currentIndex) {\n return;\n }\n panes.splice(currentIndex, 1);\n panes.splice(clampedTarget, 0, pane);\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n // Commit a drop using current pointer coordinates and joystick state\n private finalizeDropFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const stack = this.findStackAtPoint(clientX, clientY);\n const stackPath = stack ? this.parsePath(stack.dataset['path']) : null;\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickStoredPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n const path = (joystickVisible ? (joystickStoredPath ?? joystickTargetPath) : null) ?? stackPath;\n\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const zone: DropZone | null = this.isDropZone(joystickZone)\n ? joystickZone\n : (stack ? this.computeDropZone(stack, { clientX, clientY }, null) : null);\n\n // Same-header reorder case when no side zone is chosen\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n stack &&\n path &&\n stackPath &&\n this.pathsEqual(stackPath, this.dragState.sourcePath) &&\n (!zone || zone === 'center')\n ) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.renderLayout();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n return;\n }\n }\n\n if (path && this.isDropZone(zone)) {\n this.handleDrop(path, zone!);\n this.dragState.dropHandled = true;\n }\n }\n\n private clearPendingDragEndTimeout(): void {\n if (this.pendingDragEndTimeout !== null) {\n const win = this.windowRef;\n if (win && typeof this.pendingDragEndTimeout === 'number') {\n win.clearTimeout(this.pendingDragEndTimeout);\n } else {\n globalThis.clearTimeout(this.pendingDragEndTimeout);\n }\n this.pendingDragEndTimeout = null;\n }\n }\n\n private scheduleDeferredDragEnd(): void {\n if (this.pendingDragEndTimeout !== null) {\n return;\n }\n\n const completeDrag = () => {\n this.pendingDragEndTimeout = null;\n this.hideDropIndicator();\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n };\n\n const win = this.windowRef;\n this.pendingDragEndTimeout = win\n ? win.setTimeout(completeDrag, 0)\n : setTimeout(completeDrag, 0);\n }\n\n private handleDrop(targetPath: DockPath | null, zone: DropZone): void {\n if (!this.dragState || !targetPath) {\n return;\n }\n\n const { pane, sourcePath } = this.dragState;\n \n const source = this.resolveStackLocation(sourcePath);\n const target = this.resolveStackLocation(targetPath);\n\n // Special case: allow dropping onto an empty main dock area (no root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n if (!source) {\n return;\n }\n this.removePaneFromLocation(source, pane, true);\n const newRoot: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n this.rootLayout = newRoot;\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n if (!source || !target) {\n return;\n }\n\n if (zone === 'center' && this.pathsEqual(sourcePath, targetPath)) {\n if (!source.node.panes.includes(pane)) {\n return;\n }\n this.reorderPaneInLocation(source, pane);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n this.removePaneFromLocation(source, pane, true);\n\n if (zone === 'center') {\n this.addPaneToLocation(target, pane);\n this.setActivePaneForLocation(target, pane);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n const newStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n if (target.context === 'docked') {\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, newStack, zone);\n } else {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, newStack, zone);\n floating.activePane = pane;\n }\n\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n \n }\n\n private handleFloatingStackDrop(sourceIndex: number, targetPath: DockPath, zone: DropZone): boolean {\n const source = this.floatingLayouts[sourceIndex];\n if (!source || !source.root) {\n return false;\n }\n\n const target = this.resolveStackLocation(targetPath);\n // Allow dropping an entire floating stack onto an empty main dock area\n // (no existing root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n this.rootLayout = this.cloneLayoutNode(source.root);\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n if (!target) {\n return false;\n }\n\n if (target.context === 'floating' && target.index === sourceIndex) {\n return false;\n }\n\n if (zone === 'center') {\n const panes = this.collectPaneNames(source.root);\n if (panes.length === 0) {\n return false;\n }\n\n panes.forEach((pane) => {\n this.addPaneToLocation(target, pane);\n });\n\n const activePane =\n source.activePane && panes.includes(source.activePane)\n ? source.activePane\n : this.findFirstPaneName(source.root) ?? panes[0];\n\n if (activePane) {\n this.setActivePaneForLocation(target, activePane);\n }\n\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n if (target.context === 'floating') {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n return false;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, source.root, zone);\n floating.activePane = source.activePane ?? this.findFirstPaneName(source.root) ?? undefined;\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, source.root, zone);\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n private insertWeight(sizes: number[] | undefined, index: number, totalChildren: number): number[] {\n const existingCount = totalChildren - 1;\n const normalized = this.normalizeSizesArray(sizes, existingCount);\n const newWeight = 1 / totalChildren;\n const remaining = 1 - newWeight;\n const result: number[] = [];\n for (let i = 0; i < totalChildren; i += 1) {\n if (i === index) {\n result.push(newWeight);\n } else {\n const sourceIndex = i < index ? i : i - 1;\n result.push(normalized[sourceIndex] * remaining);\n }\n }\n return result;\n }\n\n private removePaneFromStack(stack: DockStackNode, pane: string, skipCleanup = false): boolean {\n stack.panes = stack.panes.filter((p) => p !== pane);\n if (!stack.panes.includes(stack.activePane ?? '')) {\n if (stack.panes.length > 0) {\n stack.activePane = stack.panes[0];\n } else {\n delete stack.activePane;\n }\n }\n\n if (stack.panes.length > 0) {\n return false;\n }\n\n if (skipCleanup) {\n return true;\n }\n\n this.normalizeAllLayouts();\n return true;\n }\n\n private findParentSplit(\n node: DockLayoutNode | null,\n child: DockLayoutNode,\n ): { parent: DockSplitNode; index: number } | null {\n if (!node || node === child) {\n return null;\n }\n\n if (node.kind !== 'split') {\n return null;\n }\n\n const index = node.children.indexOf(child);\n if (index !== -1) {\n return { parent: node, index };\n }\n\n for (let i = 0; i < node.children.length; i += 1) {\n const result = this.findParentSplit(node.children[i], child);\n if (result) {\n return result;\n }\n }\n\n return null;\n }\n\n private computeDropZone(\n stack: HTMLElement,\n point: { clientX: number; clientY: number } | null,\n zoneHint?: DropZone | null,\n ): DropZone | null {\n // Do not force a zone: even when the main area is empty we only\n // activate a zone when the pointer is actually over a joystick button.\n const hintedZone = this.isDropZone(zoneHint) ? zoneHint : null;\n if (hintedZone) {\n this.updateDropJoystickActiveZone(hintedZone);\n return hintedZone;\n }\n\n const pointZone =\n point &&\n Number.isFinite(point.clientX) &&\n Number.isFinite(point.clientY)\n ? this.findDropZoneByPoint(point.clientX, point.clientY)\n : null;\n\n if (pointZone) {\n this.updateDropJoystickActiveZone(pointZone);\n return pointZone;\n }\n\n if (this.dropJoystickTarget === stack) {\n // Be sticky while hovering the joystick: if we recently had a zone\n // selected, prefer keeping it instead of briefly clearing to null\n // when the browser reports transient coordinates/targets during drag.\n const sticky = this.dropJoystick.dataset['zone'];\n if (this.isDropZone(sticky)) {\n this.updateDropJoystickActiveZone(sticky);\n return sticky;\n }\n this.updateDropJoystickActiveZone(null);\n }\n\n return null;\n }\n\n private extractDropZoneFromEvent(event: Event): DropZone | null {\n if (!event) {\n return null;\n }\n\n if (typeof event.composedPath === 'function') {\n const path = event.composedPath();\n const zone = this.findDropZoneInTargets(path);\n if (zone) {\n return zone;\n }\n }\n\n if ('clientX' in event && 'clientY' in event) {\n const pointEvent = event as MouseEvent;\n const zoneFromPoint = this.findDropZoneByPoint(pointEvent.clientX, pointEvent.clientY);\n if (zoneFromPoint) {\n return zoneFromPoint;\n }\n }\n\n return null;\n }\n\n private handleDragPointerUpCommon(): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.scheduleDeferredDragEnd();\n }\n\n private findDropZoneInTargets(targets: Iterable<EventTarget>): DropZone | null {\n for (const target of targets) {\n if (\n target instanceof HTMLElement &&\n target.classList.contains('dock-drop-joystick__button')\n ) {\n const zone = target.dataset?.['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n return null;\n }\n\n private findDropZoneByPoint(clientX: number, clientY: number): DropZone | null {\n if (\n !this.dropJoystickButtons ||\n this.dropJoystick.dataset['visible'] !== 'true' ||\n !this.dropJoystickTarget\n ) {\n return null;\n }\n\n for (const button of this.dropJoystickButtons) {\n // Skip hidden/inactive buttons (used in center-only mode)\n if ((button.dataset['hidden'] === 'true') || button.style.visibility === 'hidden' || button.style.display === 'none') {\n continue;\n }\n const rect = button.getBoundingClientRect();\n if (\n clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom\n ) {\n const zone = button.dataset['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n\n return null;\n }\n\n private updateDropJoystickActiveZone(zone: DropZone | null): void {\n // If no zone is computed but the joystick is visible, keep the last\n // known active zone to avoid visual jitter while dragging across\n // small gaps where hit‑testing momentarily fails.\n const visible = this.dropJoystick.dataset['visible'] === 'true';\n const sticky = visible ? this.dropJoystick.dataset['zone'] : undefined;\n const effectiveZone: DropZone | null = zone ?? (this.isDropZone(sticky) ? sticky : null);\n\n this.dropJoystickButtons.forEach((button) => {\n const isActive = effectiveZone !== null && button.dataset['zone'] === effectiveZone;\n if (isActive) {\n button.dataset['active'] = 'true';\n } else {\n delete button.dataset['active'];\n }\n });\n if (effectiveZone) {\n this.dropJoystick.dataset['zone'] = effectiveZone;\n } else {\n delete this.dropJoystick.dataset['zone'];\n }\n }\n\n private isDropZone(value: string | null | undefined): value is DropZone {\n return value === 'left' || value === 'right' || value === 'top' || value === 'bottom' || value === 'center';\n }\n\n private showDropIndicator(stack: HTMLElement, zone: DropZone | null): void {\n const targetPath = this.parsePath(stack.dataset['path']);\n const sourcePath = this.dragState?.sourcePath ?? null;\n if (targetPath && sourcePath && this.isOrIsAncestorOf(targetPath, sourcePath)) {\n // Don't show any drop indicators on the pane being dragged.\n return;\n }\n\n const rect = stack.getBoundingClientRect();\n const hostRect = this.getBoundingClientRect();\n const indicator = this.dropIndicator;\n const joystick = this.dropJoystick;\n\n joystick.hidden = false;\n\n const path = this.parsePath(stack.dataset['path']);\n let overlayZ = 100;\n if (path && path.type === 'floating') {\n overlayZ = this.getFloatingPaneZIndex(path.index) + 100;\n }\n indicator.style.zIndex = String(overlayZ);\n joystick.style.zIndex = String(overlayZ + 1);\n\n let left = rect.left - hostRect.left;\n let top = rect.top - hostRect.top;\n let width = rect.width;\n let height = rect.height;\n\n const portion = 0.5;\n\n if (zone) {\n switch (zone) {\n case 'left':\n width = rect.width * portion;\n break;\n case 'right':\n width = rect.width * portion;\n left += rect.width * (1 - portion);\n break;\n case 'top':\n height = rect.height * portion;\n break;\n case 'bottom':\n height = rect.height * portion;\n top += rect.height * (1 - portion);\n break;\n default:\n break;\n }\n\n indicator.style.left = `${left}px`;\n indicator.style.top = `${top}px`;\n indicator.style.width = `${width}px`;\n indicator.style.height = `${height}px`;\n indicator.dataset['visible'] = 'true';\n } else {\n indicator.dataset['visible'] = 'false';\n }\n\n joystick.style.left = `${rect.left - hostRect.left + rect.width / 2}px`;\n joystick.style.top = `${rect.top - hostRect.top + rect.height / 2}px`;\n joystick.dataset['visible'] = 'true';\n this.dropJoystick.style.display = 'grid';\n joystick.dataset['path'] = stack.dataset['path'] ?? '';\n const changedTarget = this.dropJoystickTarget && this.dropJoystickTarget !== stack;\n this.dropJoystickTarget = stack;\n if (changedTarget) {\n // New target stack: forget any previously sticky zone.\n delete this.dropJoystick.dataset['zone'];\n }\n\n // If main dock area is empty, show only the center button and collapse the grid\n const isEmptyMainArea = !this.rootLayout && (stack === this.dockedEl || (targetPath && targetPath.type === 'docked' && targetPath.segments.length === 0));\n const spacers = Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer'));\n if (isEmptyMainArea) {\n // Keep spacers visible so the joystick keeps its circular footprint.\n spacers.forEach((s) => {\n s.style.display = '';\n });\n this.dropJoystickButtons.forEach((btn) => {\n const isCenter = btn.dataset['zone'] === 'center';\n if (isCenter) {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n } else {\n // Hide visually but keep layout space; also prevent interaction.\n btn.style.visibility = 'hidden';\n btn.style.pointerEvents = 'none';\n btn.dataset['hidden'] = 'true';\n btn.style.display = '';\n }\n });\n // Keep default 3x3 grid so the circular background size stays the same.\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n // Do not set an active zone automatically; users must hover the button.\n } else {\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n });\n spacers.forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n this.updateDropJoystickActiveZone(zone);\n }\n\n private hideDropIndicator(): void {\n this.dropIndicator.dataset['visible'] = 'false';\n this.dropJoystick.dataset['visible'] = 'false';\n this.dropJoystick.style.display = 'none';\n delete this.dropJoystick.dataset['path'];\n this.dropJoystickTarget = null;\n this.updateDropJoystickActiveZone(null);\n // Restore joystick structure to default.\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.display = '';\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n });\n Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer')).forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n\n private findStackAtPoint(clientX: number, clientY: number): HTMLElement | null {\n const shadow = this.shadowRoot;\n if (!shadow) {\n return null;\n }\n\n const elements = shadow.elementsFromPoint(clientX, clientY);\n const stack = this.findStackInTargets(elements);\n if (stack) {\n return stack;\n }\n // If there are no docked stacks (all panes are floating), allow the\n // docked surface itself to serve as a drop target for the main zone.\n if (!this.rootLayout) {\n const dockRect = this.dockedEl.getBoundingClientRect();\n if (\n clientX >= dockRect.left &&\n clientX <= dockRect.right &&\n clientY >= dockRect.top &&\n clientY <= dockRect.bottom\n ) {\n return this.dockedEl;\n }\n }\n\n return null;\n }\n\n private findStackInTargets(targets: Iterable<EventTarget>): HTMLElement | null {\n for (const element of targets) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element.classList.contains('dock-stack')) {\n return element;\n }\n if (\n this.dropJoystickTarget &&\n (element.classList.contains('dock-drop-joystick') ||\n element.classList.contains('dock-drop-joystick__button') ||\n element.classList.contains('dock-drop-joystick__spacer'))\n ) {\n return this.dropJoystickTarget;\n }\n }\n return null;\n }\n\n private activatePane(stack: HTMLElement, paneName: string, path: DockPath): void {\n stack.dataset['activePane'] = paneName;\n\n // Reflect to mp-tab-control's `active-tab` attribute. The WC handles\n // strip button styling (active class, aria-selected) + body-slot\n // projection automatically via the named-slot pattern.\n if (stack.tagName === 'MP-TAB-CONTROL') {\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(paneName)}\"]`,\n );\n const tabId = headerSpan?.dataset['tabId'];\n if (tabId) {\n stack.setAttribute('active-tab', tabId);\n }\n }\n\n const location = this.resolveStackLocation(path);\n if (!location) {\n return;\n }\n\n location.node.activePane = paneName;\n if (path.type === 'floating') {\n const floating = this.floatingLayouts[path.index];\n if (floating) {\n floating.activePane = paneName;\n }\n this.updateFloatingWindowTitle(path.index);\n }\n this.dispatchLayoutChanged();\n }\n\n private getNodeAtPath(root: DockLayoutNode | null, path: number[]): DockLayoutNode | null {\n if (!root) {\n return null;\n }\n\n let current: DockLayoutNode | null = root;\n if (path.length === 0) {\n return current;\n }\n\n for (const segment of path) {\n if (!current || current.kind !== 'split') {\n return null;\n }\n current = current.children[segment] ?? null;\n }\n\n return current;\n }\n\n private resolveSplitNode(path: DockPath): DockSplitNode | null {\n if (path.type === 'docked') {\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n const floating = this.floatingLayouts[path.index];\n if (!floating || !floating.root) {\n return null;\n }\n\n const node = this.getNodeAtPath(floating.root, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n private replaceNodeInTree(\n root: DockLayoutNode | null,\n target: DockLayoutNode,\n replacement: DockLayoutNode,\n ): DockLayoutNode | null {\n if (!root) {\n return replacement;\n }\n\n if (root === target) {\n return replacement;\n }\n\n const parentInfo = this.findParentSplit(root, target);\n if (!parentInfo) {\n return root;\n }\n\n parentInfo.parent.children[parentInfo.index] = replacement;\n this.normalizeSplitNode(parentInfo.parent);\n return root;\n }\n\n private dockNodeBeside(\n root: DockLayoutNode | null,\n targetNode: DockStackNode,\n newNode: DockLayoutNode,\n zone: DropZone,\n ): DockLayoutNode | null {\n const orientation = zone === 'left' || zone === 'right' ? 'horizontal' : 'vertical';\n const placeBefore = zone === 'left' || zone === 'top';\n const parentInfo = this.findParentSplit(root, targetNode);\n\n if (parentInfo && parentInfo.parent.direction === orientation) {\n const insertIndex = placeBefore ? parentInfo.index : parentInfo.index + 1;\n parentInfo.parent.children.splice(insertIndex, 0, newNode);\n parentInfo.parent.sizes = this.insertWeight(\n parentInfo.parent.sizes,\n insertIndex,\n parentInfo.parent.children.length,\n );\n return root ?? newNode;\n }\n\n const split: DockSplitNode = {\n kind: 'split',\n direction: orientation,\n children: placeBefore ? [newNode, targetNode] : [targetNode, newNode],\n sizes: [0.5, 0.5],\n };\n\n return this.replaceNodeInTree(root, targetNode, split);\n }\n\n private forEachStack(\n node: DockLayoutNode | null,\n visitor: (stack: DockStackNode, path: number[]) => void,\n path: number[] = [],\n ): void {\n if (!node) {\n return;\n }\n\n if (node.kind === 'stack') {\n visitor(node, path);\n return;\n }\n\n node.children.forEach((child, index) =>\n this.forEachStack(child, visitor, [...path, index]),\n );\n }\n\n private findStackContainingPane(\n node: DockLayoutNode | null,\n pane: string,\n ): DockStackNode | null {\n let result: DockStackNode | null = null;\n this.forEachStack(node, (stack) => {\n if (!result && stack.panes.includes(pane)) {\n result = stack;\n }\n });\n return result;\n }\n\n private findFirstPaneName(node: DockLayoutNode | null): string | null {\n let found: string | null = null;\n this.forEachStack(node, (stack) => {\n if (found || stack.panes.length === 0) {\n return;\n }\n if (stack.activePane && stack.panes.includes(stack.activePane)) {\n found = stack.activePane;\n } else {\n found = stack.panes[0];\n }\n });\n return found;\n }\n\n private collectFloatingPaneMetadata(\n node: DockLayoutNode | null,\n ): { panes: string[]; titles: Record<string, string> } {\n // Deprecated method retained temporarily for signature compatibility.\n // Use collectPaneNames instead.\n const panes = this.collectPaneNames(node);\n const titles: Record<string, string> = {};\n panes.forEach((p) => {\n const t = this.titles[p];\n if (t) {\n titles[p] = t;\n }\n });\n return { panes, titles };\n }\n\n private collectPaneNames(node: DockLayoutNode | null): string[] {\n const panes: string[] = [];\n this.forEachStack(node, (stack) => {\n stack.panes.forEach((pane) => panes.push(pane));\n });\n return panes;\n }\n\n private normalizeFloatingLayout(\n layout: DockFloatingStackLayout,\n ): DockFloatingStackLayout {\n const bounds = layout.bounds ?? { left: 0, top: 0, width: 320, height: 200 };\n const normalizedBounds = {\n left: Number.isFinite(bounds.left) ? bounds.left : 0,\n top: Number.isFinite(bounds.top) ? bounds.top : 0,\n width: Number.isFinite(bounds.width) ? Math.max(bounds.width, 160) : 320,\n height: Number.isFinite(bounds.height) ? Math.max(bounds.height, 120) : 200,\n };\n\n const root = layout.root ? this.cloneLayoutNode(layout.root) : null;\n\n return {\n id: layout.id,\n bounds: normalizedBounds,\n zIndex: layout.zIndex,\n root,\n activePane: layout.activePane,\n };\n }\n\n private formatPath(path: DockPath): string {\n if (path.type === 'floating') {\n const suffix =\n path.segments.length > 0\n ? `/${path.segments.map((segment) => segment.toString()).join('/')}`\n : '';\n return `f:${path.index}${suffix}`;\n }\n const suffix = path.segments.join('/');\n return suffix.length > 0 ? `d:${suffix}` : 'd:';\n }\n\n private clonePath(path: DockPath): DockPath {\n if (path.type === 'floating') {\n return { type: 'floating', index: path.index, segments: [...path.segments] };\n }\n return { type: 'docked', segments: [...path.segments] };\n }\n\n private parsePath(path: string | null | undefined): DockPath | null {\n // The root splitter is tagged with data-path=\"\" (raw segments-join of an\n // empty array) so empty string is a valid path representing root docked.\n // Only null/undefined is \"no path\".\n if (path == null) {\n return null;\n }\n\n if (path.startsWith('f:')) {\n const remainder = path.slice(2);\n const [indexPart, ...segmentParts] = remainder.split('/');\n const index = Number.parseInt(indexPart, 10);\n if (!Number.isFinite(index)) {\n return null;\n }\n const segments = segmentParts\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n return { type: 'floating', index, segments };\n }\n\n const normalized = path.startsWith('d:') ? path.slice(2) : path;\n if (normalized.length === 0) {\n return { type: 'docked', segments: [] };\n }\n\n const segments = normalized\n .split('/')\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n\n return { type: 'docked', segments };\n }\n\n private pathsEqual(a: DockPath, b: DockPath): boolean {\n if (a.type !== b.type) {\n return false;\n }\n\n if (a.type === 'floating') {\n const other = b as Extract<DockPath, { type: 'floating' }>;\n if (a.index !== other.index) {\n return false;\n }\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n const other = b as Extract<DockPath, { type: 'docked' }>;\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n private isOrIsAncestorOf(ancestor: DockPath, descendant: DockPath): boolean {\n if (ancestor.type !== descendant.type) {\n return false;\n }\n\n if (ancestor.type === 'floating') {\n if ((descendant as any).index !== ancestor.index) {\n return false;\n }\n }\n\n if (ancestor.segments.length > descendant.segments.length) {\n return false;\n }\n\n return ancestor.segments.every((segment, i) => segment === descendant.segments[i]);\n }\n\n private countPanesInTree(node: DockLayoutNode | null): number {\n if (!node) {\n return 0;\n }\n if (node.kind === 'stack') {\n return node.panes.length;\n }\n return node.children.reduce((total, child) => total + this.countPanesInTree(child), 0);\n }\n\n private resolveStackLocation(path: DockPath): ResolvedLocation | null {\n if (path.type === 'floating') {\n const layout = this.floatingLayouts[path.index];\n if (!layout || !layout.root) {\n return null;\n }\n const node = this.getNodeAtPath(layout.root, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n return { context: 'floating', index: path.index, path: [...path.segments], node };\n }\n\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n\n return { context: 'docked', path: [...path.segments], node };\n }\n\n private removePaneFromLocation(\n location: ResolvedLocation,\n pane: string,\n skipCleanup = false,\n ): boolean {\n if (location.context === 'docked') {\n return this.removePaneFromStack(location.node, pane, skipCleanup);\n }\n\n return this.removePaneFromFloating(location.index, location.path, pane, skipCleanup);\n }\n\n private addPaneToLocation(location: ResolvedLocation, pane: string): void {\n const panes = location.node.panes;\n const existingIndex = panes.indexOf(pane);\n if (existingIndex !== -1) {\n panes.splice(existingIndex, 1);\n }\n panes.push(pane);\n }\n\n private setActivePaneForLocation(location: ResolvedLocation, pane: string): void {\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n private 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 this.normalizeAllLayouts();\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 /**\n * Bottom-up layout sanitizer. Returns a normalized version of `node` where:\n * - Empty stacks (panes.length === 0) are dropped (returned as null).\n * - A stack's `activePane` is repaired if it no longer references one of `panes`.\n * - Splits whose direction matches a child split are flattened, with sizes\n * combined multiplicatively so the resulting on-screen pixel layout is\n * identical to the pre-merge one.\n * - Splits with 0 children become null. Splits with 1 child are unwrapped.\n *\n * Idempotent: passing the result back through this method yields the same\n * structure. Mutates the input tree in place but only returns nodes that\n * remain part of the layout.\n */\n private normalizeLayoutNode(node: DockLayoutNode | null): DockLayoutNode | null {\n if (!node) return null;\n\n if (node.kind === 'stack') {\n if (node.panes.length === 0) return null;\n if (!node.activePane || !node.panes.includes(node.activePane)) {\n node.activePane = node.panes[0];\n }\n return node;\n }\n\n const slotSizes = this.normalizeSizesArray(node.sizes, node.children.length);\n\n // Pair each child with its slot weight, drop nulls, then expand any\n // same-direction child split into its grandchildren with sizes scaled\n // multiplicatively. A 0.4 slot containing [0.3, 0.7] becomes [0.12, 0.28].\n const survivors = node.children\n .map((child, i) => ({ child: this.normalizeLayoutNode(child), slot: slotSizes[i] }))\n .filter((p): p is { child: DockLayoutNode; slot: number } => p.child !== null)\n .flatMap(({ child, slot }) => {\n if (child.kind === 'split' && child.direction === node.direction) {\n const innerSizes = this.normalizeSizesArray(child.sizes, child.children.length);\n return child.children.map((grandchild, idx) => ({\n child: grandchild,\n slot: slot * innerSizes[idx],\n }));\n }\n return [{ child, slot }];\n });\n\n if (survivors.length === 0) return null;\n if (survivors.length === 1) return survivors[0].child;\n\n node.children = survivors.map((s) => s.child);\n node.sizes = this.normalizeSizesArray(\n survivors.map((s) => s.slot),\n survivors.length,\n );\n return node;\n }\n\n /**\n * Apply `normalizeLayoutNode` to `rootLayout` and every floating window's\n * root, drop floating windows whose root collapses to null, and repair\n * stale `activePane` references on each floating window. Run this at the\n * end of every public mutation entry point (drop handlers, layout setter,\n * pane removal) so the tree the renderer sees is always in canonical form.\n */\n private normalizeAllLayouts(): void {\n this.rootLayout = this.normalizeLayoutNode(this.rootLayout);\n\n this.floatingLayouts = this.floatingLayouts\n .map((floating) => {\n floating.root = this.normalizeLayoutNode(floating.root);\n if (!floating.root) return null;\n\n const panes = this.collectPaneNames(floating.root);\n if (!floating.activePane || !panes.includes(floating.activePane)) {\n const fallback = this.findFirstPaneName(floating.root);\n if (fallback) {\n floating.activePane = fallback;\n } else {\n delete floating.activePane;\n }\n }\n return floating;\n })\n .filter((f): f is DockFloatingStackLayout => f !== null);\n }\n\n /**\n * Dev-mode integrity guard: walks every pane referenced by the current\n * layout and asserts that the rendered shadow DOM contains a matching\n * `<slot name=\"${pane}\">`. A missing slot means the layout tree got into\n * a state the renderer can't display — typically a missed normalize() call\n * or a render bug. Opt in via the `debug-layout-integrity` attribute or\n * the `debugLayoutIntegrity` property; off by default.\n */\n private verifyProjectionSlots(): void {\n if (!this.debugLayoutIntegrity) return;\n const root = this.shadowRoot;\n if (!root) return;\n\n // Collect every slot the renderer produced. Walking the rendered DOM\n // (instead of building a CSS selector per pane) sidesteps environment\n // differences — e.g. jsdom does not expose `CSS.escape`, which would\n // crash the guard during unit tests before the assertion runs.\n const slotNames = new Set(\n Array.from(root.querySelectorAll('slot'))\n .map((slot) => slot.getAttribute('name'))\n .filter((name): name is string => !!name),\n );\n\n const panes = [\n ...this.collectPaneNames(this.rootLayout),\n ...this.floatingLayouts.flatMap((f) => this.collectPaneNames(f.root)),\n ];\n\n const missing = panes.find((pane) => !slotNames.has(pane));\n if (missing) {\n throw new Error(\n `mint-dock-manager: pane \"${missing}\" has no projection slot in the shadow DOM. ` +\n `The layout tree got into a state the renderer can't display — likely a ` +\n `missing normalize() call or a render bug.`,\n );\n }\n }\n\n private dispatchLayoutChanged(): void {\n this.dispatchEvent(\n new CustomEvent('dock-layout-changed', {\n detail: this.snapshot,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private cloneLayoutNode(layout: DockLayoutNode): DockLayoutNode;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null {\n if (!layout) {\n return null;\n }\n\n return JSON.parse(JSON.stringify(layout)) as DockLayoutNode;\n }\n\n private cloneFloatingArray(\n layouts: DockFloatingStackLayout[],\n ): DockFloatingStackLayout[] {\n return JSON.parse(JSON.stringify(layouts)) as DockFloatingStackLayout[];\n }\n}\n\nconst tagName = 'mint-dock-manager';\n\nif (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n customElements.define(tagName, MintDockManagerElement);\n}\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n inject,\n input,\n output,\n viewChild,\n signal,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n} from '../types/dock-layout';\nimport { BsDockPaneComponent } from './dock-pane.component';\nimport { MintDockManagerElement } from '../web-components/mint-dock-manager.element';\n\n@Component({\n selector: 'bs-dock-manager',\n templateUrl: './dock-manager.component.html',\n styleUrls: ['./dock-manager.component.scss'],\n imports: [NgTemplateOutlet],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockManagerComponent implements AfterViewInit {\n readonly layout = input<DockLayoutNode | DockLayout | null>(null);\n /**\n * Dev-mode integrity guard. When `true`, the inner web component throws\n * after each render if any registered pane has no projection slot in the\n * shadow DOM — a signal that the layout tree got corrupted. Off by default;\n * enable in development to catch layout-logic bugs loudly.\n */\n readonly debugLayoutIntegrity = input<boolean>(false);\n protected readonly debugLayoutIntegrityAttr = computed(() =>\n this.debugLayoutIntegrity() ? '' : null,\n );\n\n get layoutSnapshot(): DockLayoutSnapshot | null {\n if (!this._layout.root && this._layout.floating.length === 0) {\n return null;\n }\n return this.cloneLayout(this._layout);\n }\n\n readonly layoutChange = output<DockLayoutSnapshot | null>();\n readonly layoutSnapshotChange = output<DockLayoutSnapshot>();\n\n layoutString = signal<string | null>(null);\n\n readonly panes = contentChildren(BsDockPaneComponent);\n readonly managerRef = viewChild<ElementRef<MintDockManagerElement>>('manager');\n\n protected readonly trackByPane = (_: number, pane: BsDockPaneComponent) => pane.name();\n\n private _layout: DockLayoutSnapshot = { root: null, floating: [] };\n\n constructor() {\n const documentRef = inject(DOCUMENT);\n if (documentRef) {\n MintDockManagerElement.configureDocument(documentRef);\n }\n\n effect(() => {\n const value = this.layout();\n const snapshot = this.cloneLayout(this.ensureSnapshot(value));\n this._layout = snapshot;\n this.layoutString.set(this.stringifyLayout(snapshot));\n this.applyLayout();\n });\n }\n\n ngAfterViewInit(): void {\n this.applyLayout();\n }\n\n captureLayout(): DockLayoutSnapshot {\n const element = this.managerRef()?.nativeElement;\n return element?.snapshot ?? { root: null, floating: [] };\n }\n\n onLayoutChanged(event: Event): void {\n const snapshot =\n (event as CustomEvent<DockLayoutSnapshot>).detail ?? {\n root: null,\n floating: [],\n };\n this._layout = this.cloneLayout(snapshot);\n this.layoutString.set(this.stringifyLayout(this._layout));\n this.layoutChange.emit(this.layoutSnapshot);\n this.layoutSnapshotChange.emit(this.cloneLayout(snapshot));\n }\n\n private applyLayout(): void {\n const ref = this.managerRef();\n if (!ref) {\n return;\n }\n\n const element = ref.nativeElement;\n const layout = this.layoutSnapshot;\n element.layout = layout ?? null;\n }\n\n private ensureSnapshot(\n value: DockLayoutNode | DockLayout | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ('kind' in value) {\n return { root: value, floating: [], titles: {} };\n }\n\n return {\n root: value.root ?? null,\n floating: Array.isArray(value.floating) ? [...value.floating] : [],\n titles: value.titles ? { ...value.titles } : {},\n };\n }\n\n private stringifyLayout(layout: DockLayoutSnapshot): string | null {\n if (!layout.root && layout.floating.length === 0) {\n return null;\n }\n return JSON.stringify(layout);\n }\n\n private cloneLayout(layout: DockLayoutSnapshot): DockLayoutSnapshot {\n return JSON.parse(JSON.stringify(layout)) as DockLayoutSnapshot;\n }\n}\n","<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n [attr.debug-layout-integrity]=\"debugLayoutIntegrityAttr()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-dock.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-pane.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.template.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/web-components/mint-dock-manager.element.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.ts","../../../../libs/mintplayer-ng-bootstrap/dock/src/lib/components/dock-manager.component.html","../../../../libs/mintplayer-ng-bootstrap/dock/mintplayer-ng-bootstrap-dock.ts"],"sourcesContent":["import { AfterContentInit, Component, input, TemplateRef, viewChild, ChangeDetectionStrategy} from '@angular/core';\n\n@Component({\n selector: 'bs-dock-pane',\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockPaneComponent implements AfterContentInit {\n readonly name = input.required<string>();\n readonly title = input<string | undefined>(undefined);\n\n readonly template = viewChild.required(TemplateRef);\n\n ngAfterContentInit(): void {\n if (!this.name()) {\n throw new Error('bs-dock-pane requires a unique \"name\" input.');\n }\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// Source: mint-dock-manager.element.html + mint-dock-manager.element.scss\n// Regenerate with the codegen-wc Nx target.\n\nimport { html, unsafeCSS } from 'lit';\n\nexport const template = html`<div class=\"dock-root\">\n <div class=\"dock-docked\"></div>\n <div class=\"dock-floating-layer\"></div>\n <div class=\"dock-intersections-layer dock-intersection-layer\"></div>\n</div>\n<div class=\"dock-drop-indicator\"></div>\n<div class=\"dock-drop-joystick\" data-visible=\"false\">\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"top\"\n aria-label=\"Dock to top\"\n >\n ↑\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"left\"\n aria-label=\"Dock to left\"\n >\n ←\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"center\"\n aria-label=\"Dock to center\"\n >\n •\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"right\"\n aria-label=\"Dock to right\"\n >\n →\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"bottom\"\n aria-label=\"Dock to bottom\"\n >\n ↓\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n</div>`;\nexport const styles = unsafeCSS(`:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n contain: layout paint size style;\n box-sizing: border-box;\n font-family: inherit;\n color: inherit;\n --dock-split-gap: 0.25rem;\n}\n\n.dock-root,\n.dock-docked,\n.dock-split,\n.dock-stack,\n.dock-stack__pane {\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n}\n\n.dock-root {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.dock-docked {\n position: absolute;\n inset: 0;\n display: flex;\n z-index: 0;\n}\n\n.dock-floating-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n}\n\n.dock-intersections-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 120;\n}\n\n.dock-floating {\n position: absolute;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.5rem;\n background: var(--bs-body-bg);\n box-shadow: var(--bs-box-shadow-lg);\n overflow: hidden;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating[data-dragging=true] {\n pointer-events: none;\n}\n\n.dock-floating__chrome {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.35rem 0.75rem;\n cursor: move;\n touch-action: none;\n background: linear-gradient(to bottom, rgba(var(--bs-primary-rgb), 0.15), rgba(var(--bs-primary-rgb), 0.05));\n border-bottom: 1px solid var(--bs-primary-border-subtle);\n user-select: none;\n -webkit-user-select: none;\n}\n\n.dock-floating__title {\n flex: 1 1 auto;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--bs-body-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.dock-floating__close {\n flex: 0 0 auto;\n appearance: none;\n background: transparent;\n border: 0;\n color: var(--bs-body-color);\n cursor: pointer;\n font-size: 1.25rem;\n line-height: 1;\n padding: 0 0.4rem;\n border-radius: 3px;\n margin-top: -1px;\n}\n.dock-floating__close:hover {\n background: rgba(var(--bs-primary-rgb), 0.15);\n}\n.dock-floating__close:focus-visible {\n outline: 2px solid var(--bs-primary);\n outline-offset: 1px;\n}\n\n.dock-floating > .dock-stack {\n flex: 1 1 auto;\n min-width: 12rem;\n min-height: 8rem;\n}\n\n.dock-floating__resizer {\n position: absolute;\n pointer-events: auto;\n z-index: 2;\n background: rgba(var(--bs-primary-rgb), 0.1);\n transition: background 120ms ease;\n touch-action: none;\n}\n\n.dock-floating__resizer:hover,\n.dock-floating__resizer[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.3);\n}\n\n.dock-floating__resizer--top,\n.dock-floating__resizer--bottom {\n left: 0.75rem;\n right: 0.75rem;\n height: 0.5rem;\n}\n\n.dock-floating__resizer--top {\n top: 0;\n cursor: n-resize;\n}\n\n.dock-floating__resizer--bottom {\n bottom: 0;\n cursor: s-resize;\n}\n\n.dock-floating__resizer--left,\n.dock-floating__resizer--right {\n top: 1.75rem;\n bottom: 0.75rem;\n width: 0.5rem;\n}\n\n.dock-floating__resizer--left {\n left: 0;\n cursor: w-resize;\n}\n\n.dock-floating__resizer--right {\n right: 0;\n cursor: e-resize;\n}\n\n.dock-floating__resizer--top-left,\n.dock-floating__resizer--top-right,\n.dock-floating__resizer--bottom-left,\n.dock-floating__resizer--bottom-right {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n.dock-floating__resizer--top-left {\n top: 0;\n left: 0;\n cursor: nw-resize;\n}\n\n.dock-floating__resizer--top-right {\n top: 0;\n right: 0;\n cursor: ne-resize;\n}\n\n.dock-floating__resizer--bottom-left {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n}\n\n.dock-floating__resizer--bottom-right {\n right: 0;\n bottom: 0;\n cursor: se-resize;\n}\n\n.dock-split {\n flex: 1 1 0;\n position: relative;\n}\n\n.dock-intersection-handle {\n position: absolute;\n width: 1rem;\n height: 1rem;\n margin-left: -0.5rem;\n margin-top: -0.5rem;\n border-radius: 0.375rem;\n background: var(--bs-primary-bg-subtle);\n border: 1px solid var(--bs-primary-border-subtle);\n box-shadow: var(--bs-box-shadow-sm);\n cursor: all-scroll;\n pointer-events: auto;\n touch-action: none;\n opacity: 0.45;\n transition: background 120ms ease, border-color 120ms ease, opacity 120ms ease;\n}\n\n.dock-intersection-handle:hover,\n.dock-intersection-handle:focus-visible,\n.dock-intersection-handle[data-visible=true],\n.dock-intersection-handle[data-resizing=true] {\n background: rgba(var(--bs-primary-rgb), 0.35);\n border-color: var(--bs-primary);\n opacity: 1;\n}\n\n.dock-intersection-handle:focus-visible {\n outline: 2px solid var(--bs-primary);\n outline-offset: 1px;\n}\n\n.dock-snap-marker {\n position: absolute;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -3px;\n border-radius: 50%;\n background: var(--bs-primary);\n box-shadow: 0 0 0 2px var(--bs-primary-bg-subtle);\n pointer-events: none;\n z-index: 130;\n}\n\n.dock-stack {\n flex: 1 1 0;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n background: var(--bs-body-bg);\n backdrop-filter: blur(4px);\n}\n\n.dock-tab {\n cursor: grab;\n display: block;\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n touch-action: none;\n user-select: none;\n -webkit-user-select: none;\n -webkit-touch-callout: none;\n}\n\n.dock-tab:active {\n cursor: grabbing;\n}\n\n.dock-tab[data-pressing=true] {\n background-color: var(--bs-secondary-bg-subtle, rgba(0, 0, 0, 0.05));\n transform: scale(1.02);\n transition: background-color 100ms ease-out, transform 100ms ease-out;\n}\n\n.dock-stack__pane {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n\n.dock-drop-indicator {\n position: absolute;\n pointer-events: none;\n border: 2px solid var(--bs-primary);\n background: rgba(var(--bs-primary-rgb), 0.2);\n border-radius: 0.25rem;\n opacity: 0;\n transition: opacity 120ms ease;\n z-index: 100;\n}\n\n.dock-drop-indicator[data-visible=true] {\n opacity: 1;\n}\n\n.dock-drop-joystick {\n position: absolute;\n display: grid;\n grid-template-columns: repeat(3, min-content);\n grid-template-rows: repeat(3, min-content);\n gap: 0.125rem;\n padding: 0.125rem;\n border-radius: 999px;\n background: var(--bs-tertiary-bg);\n box-shadow: var(--bs-box-shadow);\n pointer-events: none;\n transform: translate(-50%, -50%);\n z-index: 110;\n}\n\n.dock-drop-joystick__spacer {\n width: 1.75rem;\n height: 1.75rem;\n pointer-events: none;\n}\n\n.dock-drop-joystick__button {\n width: 1.75rem;\n height: 1.75rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n border: 1px solid var(--bs-primary-border-subtle);\n background: var(--bs-body-bg);\n color: var(--bs-primary);\n font-size: 0.75rem;\n line-height: 1;\n font-weight: 600;\n pointer-events: auto;\n cursor: pointer;\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\n}\n\n.dock-drop-joystick__button[data-active=true],\n.dock-drop-joystick__button:hover,\n.dock-drop-joystick__button:focus-visible {\n background: var(--bs-primary-bg-subtle);\n border-color: var(--bs-primary);\n color: var(--bs-primary);\n}\n\n.dock-drop-joystick__button:focus-visible {\n outline: 2px solid var(--bs-primary);\n outline-offset: 1px;\n}\n\n.dock-drop-joystick__button[data-zone=center] {\n border-radius: 0.5rem;\n}\n\n::slotted(*) {\n flex: 1 1 auto;\n display: block;\n min-width: 0;\n min-height: 0;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .dock-floating,\n .dock-floating__resizer,\n .dock-floating__close,\n .dock-intersection-handle,\n .dock-drop-indicator,\n .dock-drop-joystick__button {\n transition: none !important;\n animation: none !important;\n }\n}`);\n","\nimport { html, LitElement, type TemplateResult } from 'lit';\n// Side-effect import: registers <mp-tab-control> + <mp-tab-page> custom elements.\n// Each dock stack is rendered as <mp-tab-control>, so the dock depends on this\n// lib being loaded before any layout is rendered.\nimport '@mintplayer/ng-bootstrap/web-components/tab-control';\n// Side-effect import: registers <mp-splitter>. Each DockSplitNode is rendered\n// as a nested <mp-splitter>, so this lib must load before any layout renders.\nimport '@mintplayer/ng-bootstrap/web-components/splitter';\nimport { LiveAnnouncerController } from '@mintplayer/ng-bootstrap/web-components/a11y';\nimport {\n DockFloatingStackLayout,\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n DockSplitNode,\n DockStackNode,\n} from '../types/dock-layout';\nimport { template, styles } from './mint-dock-manager.element.template';\n\ntype DockPath =\n | { type: 'docked'; segments: number[] }\n | { type: 'floating'; index: number; segments: number[] };\n\ntype DockedLocation = { context: 'docked'; path: number[]; node: DockStackNode };\ntype FloatingLocation = {\n context: 'floating';\n index: number;\n path: number[];\n node: DockStackNode;\n};\n\ntype ResolvedLocation = DockedLocation | FloatingLocation;\n\ntype DropZone = 'center' | 'left' | 'right' | 'top' | 'bottom';\n\ntype FloatingResizeEdges = {\n horizontal: 'left' | 'right' | 'none';\n vertical: 'top' | 'bottom' | 'none';\n};\n\nexport class MintDockManagerElement extends LitElement {\n static override styles = [styles];\n\n private static documentRef: Document | null =\n typeof document !== 'undefined' ? document : null;\n\n static configureDocument(documentRef: Document | null | undefined): void {\n if (documentRef) {\n MintDockManagerElement.documentRef = documentRef;\n }\n }\n\n static override get observedAttributes(): string[] {\n return [...(super.observedAttributes ?? []), 'layout', 'debug-layout-integrity'];\n }\n\n private static instanceCounter = 0;\n\n // Touch tab-drag gesture: a finger that lands on a tab header must be able\n // to scroll the tabstrip natively. We require a stationary hold before\n // arming the drag, so a horizontal swipe scrolls instead of undocking.\n // See docs/prd/dock-touch-long-press-drag.md.\n private static readonly TOUCH_LONG_PRESS_MS = 600;\n private static readonly TOUCH_LONG_PRESS_SLOP_PX = 10;\n private static readonly TOUCH_PRESS_FEEDBACK_DELAY_MS = 150;\n\n private documentRef!: Document;\n private windowRef!: (Window & typeof globalThis) | null;\n private rootEl!: HTMLElement;\n private dockedEl!: HTMLElement;\n private floatingLayerEl!: HTMLElement;\n private dropIndicator!: HTMLElement;\n private dropJoystick!: HTMLElement;\n private dropJoystickButtons!: HTMLButtonElement[];\n private readonly instanceId: string;\n private readonly liveAnnouncer = new LiveAnnouncerController(this);\n\n /**\n * Active keyboard-driven pane move (Phase 7 of WC ARIA PRD). The user\n * pressed M on a focused tab; until they pick a destination key (T/R/B/L\n * to dock to a side, F to float) or Escape, we intercept letter keys and\n * route them to the synthetic-drop pipeline.\n */\n private paneMoveMode: { paneName: string; sourcePath: DockPath } | null = null;\n private dropJoystickTarget: HTMLElement | null = null;\n private rootLayout: DockLayoutNode | null = null;\n private floatingLayouts: DockFloatingStackLayout[] = [];\n private titles: Record<string, string> = {};\n private pendingTabDragMetrics:\n | {\n pointerOffsetX: number;\n pointerOffsetY: number;\n left: number;\n top: number;\n width: number;\n height: number;\n startClientX: number;\n startClientY: number;\n }\n | null = null;\n private dragState: {\n pane: string;\n sourcePath: DockPath;\n floatingIndex: number | null;\n pointerOffsetX: number;\n pointerOffsetY: number;\n dropHandled: boolean;\n // For tab reordering before converting to floating\n sourceStackEl?: HTMLElement | null;\n sourceHeaderBounds?: { left: number; top: number; right: number; bottom: number } | null;\n startClientX?: number;\n startClientY?: number;\n liveReorderIndex?: number;\n placeholderHeader?: HTMLElement | null;\n placeholderEl?: HTMLElement | null;\n } | null = null;\n private floatingDragState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n dropTarget?: { path: DockPath; zone: DropZone };\n }\n | null = null;\n private floatingResizeState:\n | {\n index: number;\n pointerId: number;\n startX: number;\n startY: number;\n startWidth: number;\n startHeight: number;\n startLeft: number;\n startTop: number;\n wrapper: HTMLElement;\n handle: HTMLElement;\n edges: FloatingResizeEdges;\n }\n | null = null;\n private intersectionRaf: number | null = null;\n private rootResizeObserver: ResizeObserver | null = null;\n private dockedMutationObserver: MutationObserver | null = null;\n private cornerResizeState:\n | {\n pointerId: number;\n handle: HTMLElement;\n // All horizontal divider bars (belong to vertical splits)\n hs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startY: number;\n }>;\n // All vertical divider bars (belong to horizontal splits)\n vs: Array<{\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n startX: number;\n }>;\n }\n | null = null;\n private pointerTrackingActive = false;\n private dragPointerTrackingActive = false;\n private lastDragPointerPosition: { x: number; y: number } | null = null;\n // Localized snapping while dragging an intersection handle\n private cornerSnapXTargets: number[] = [];\n private cornerSnapYTargets: number[] = [];\n // Debug: render snap markers while dragging\n private showSnapMarkers = false;\n // Debug: assert every pane has a projection slot in shadow DOM after each\n // render. Off by default so production hosts pay no overhead; demo enables\n // it via the `debug-layout-integrity` attribute to catch layout-tree bugs\n // loudly during development.\n debugLayoutIntegrity = false;\n\n private renderSnapMarkersForCorner(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n if (!this.cornerResizeState) return;\n const rootRect = this.rootEl.getBoundingClientRect();\n // Compute representative center lines from the dividers being resized.\n // st.{hs,vs}[i].container is the <mp-splitter>; the divider lives in its\n // shadow at getSplitterDividers(splitter)[index].\n let centerX: number | null = null;\n let centerY: number | null = null;\n const st = this.cornerResizeState;\n if (st.vs.length > 0) {\n const v0 = st.vs[0];\n const vDiv = this.getSplitterDividers(v0.container)[v0.index];\n const vRect = vDiv?.getBoundingClientRect();\n if (vRect) centerX = vRect.left + vRect.width / 2 - rootRect.left;\n }\n if (st.hs.length > 0) {\n const h0 = st.hs[0];\n const hDiv = this.getSplitterDividers(h0.container)[h0.index];\n const hRect = hDiv?.getBoundingClientRect();\n if (hRect) centerY = hRect.top + hRect.height / 2 - rootRect.top;\n }\n if (centerY != null) {\n this.cornerSnapXTargets.forEach((sx) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${sx}px`;\n dot.style.top = `${centerY}px`;\n layer.appendChild(dot);\n });\n }\n if (centerX != null) {\n this.cornerSnapYTargets.forEach((sy) => {\n const dot = this.documentRef.createElement('div');\n dot.className = 'dock-snap-marker';\n dot.style.left = `${centerX}px`;\n dot.style.top = `${sy}px`;\n layer.appendChild(dot);\n });\n }\n }\n\n private clearSnapMarkers(): void {\n if (!this.showSnapMarkers) return;\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n Array.from(layer.querySelectorAll('.dock-snap-marker')).forEach((el) => el.remove());\n }\n private pendingDragEndTimeout: number | NodeJS.Timeout | null = null;\n private previousSplitSizes: Map<string, number[]> = new Map();\n\n constructor() {\n super();\n this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;\n // Set windowRef eagerly so connectedCallback's window-level drag listeners\n // (added before firstUpdated runs) can actually attach. Without this,\n // win?.addEventListener was a silent no-op on first connect and HTML5\n // drag-to-detach gestures never reached the dock — the floating wrapper\n // was created but stayed at its conversion-time coordinates because the\n // 'drag' listener that updates its position was never attached.\n this.windowRef = typeof window !== 'undefined' ? window : null;\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onDragPointerMove = this.onDragPointerMove.bind(this);\n this.onDragPointerUp = this.onDragPointerUp.bind(this);\n this.onDragPointerCancel = this.onDragPointerCancel.bind(this);\n this.onSplitterResize = this.onSplitterResize.bind(this);\n }\n\n override render(): TemplateResult {\n return html`${template}${this.liveAnnouncer.template()}`;\n }\n\n protected override firstUpdated(): void {\n // Resolve document and window now that we are connected.\n const documentRef = this.resolveDocument();\n this.documentRef = documentRef;\n this.windowRef = this.resolveWindow(documentRef);\n\n // Query the rendered shadow DOM for the dock skeleton.\n const shadowRoot = this.shadowRoot!;\n const root = shadowRoot.querySelector<HTMLElement>('.dock-root');\n if (!root) {\n throw new Error('mint-dock-manager template is missing the root element.');\n }\n const docked = shadowRoot.querySelector<HTMLElement>('.dock-docked');\n if (!docked) {\n throw new Error('mint-dock-manager template is missing the docked surface element.');\n }\n const floatingLayer = shadowRoot.querySelector<HTMLElement>('.dock-floating-layer');\n if (!floatingLayer) {\n throw new Error('mint-dock-manager template is missing the floating layer element.');\n }\n const indicator = shadowRoot.querySelector<HTMLElement>('.dock-drop-indicator');\n if (!indicator) {\n throw new Error('mint-dock-manager template is missing the drop indicator element.');\n }\n const joystick = shadowRoot.querySelector<HTMLElement>('.dock-drop-joystick');\n if (!joystick) {\n throw new Error('mint-dock-manager template is missing the drop joystick element.');\n }\n const joystickButtons = Array.from(\n joystick.querySelectorAll<HTMLButtonElement>('.dock-drop-joystick__button[data-zone]'),\n );\n if (joystickButtons.length === 0) {\n throw new Error('mint-dock-manager template is missing drop joystick buttons.');\n }\n\n this.rootEl = root;\n this.dockedEl = docked;\n this.floatingLayerEl = floatingLayer;\n this.dropIndicator = indicator;\n this.dropJoystick = joystick;\n this.dropJoystickButtons = joystickButtons;\n\n // Tag the docked surface with a root path so it can act as\n // a drop target when the main layout is empty.\n this.dockedEl.dataset['path'] = this.formatPath({ type: 'docked', segments: [] });\n\n // Drop targeting (drop indicator + joystick zone selection) runs entirely\n // off pointer-based hit-testing in updatePaneDragDropTargetFromPoint and\n // findDropZoneByPoint — no HTML5 dragover/drop/dragleave listeners needed.\n\n // Keyboard pane-move (Phase 7). Capture phase so we run before mp-tab-control's\n // shadow-internal handlers preventDefault on Arrow / Home / End / Enter.\n root.addEventListener('keydown', (ev) => this.onRootKeyDown(ev), { capture: true });\n\n // Render any layout that was set before the shadow DOM existed.\n this.renderLayout();\n\n // Reactive triggers for intersection-handle re-rendering. Each observer\n // wakes scheduleRenderIntersectionHandles() (rAF-coalesced), which means\n // multiple notifications in the same frame collapse to one render and\n // the rAF tick gives <mp-splitter> elements time to populate their\n // shadow roots before we query their dividers.\n this.rootResizeObserver = new ResizeObserver(() => this.scheduleRenderIntersectionHandles());\n this.rootResizeObserver.observe(this.rootEl);\n this.dockedMutationObserver = new MutationObserver(() => this.scheduleRenderIntersectionHandles());\n this.dockedMutationObserver.observe(this.dockedEl, { childList: true, subtree: true });\n // mp-splitter dispatches bubbling 'resizing' / 'resize-end' on user drag;\n // delegating on dockedEl catches every nested splitter without per-instance wiring.\n this.dockedEl.addEventListener('resizing', this.onSplitterResize);\n this.dockedEl.addEventListener('resize-end', this.onSplitterResize);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\n }\n }\n\n override disconnectedCallback(): void {\n const win = this.windowRef;\n this.stopDragPointerTracking();\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n this.rootResizeObserver?.disconnect();\n this.rootResizeObserver = null;\n this.dockedMutationObserver?.disconnect();\n this.dockedMutationObserver = null;\n this.dockedEl?.removeEventListener('resizing', this.onSplitterResize);\n this.dockedEl?.removeEventListener('resize-end', this.onSplitterResize);\n if (this.intersectionRaf !== null) {\n this.windowRef?.clearTimeout(this.intersectionRaf);\n this.intersectionRaf = null;\n }\n super.disconnectedCallback();\n }\n\n override attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n super.attributeChangedCallback(name, _oldValue, newValue);\n if (name === 'layout') {\n this.layout = newValue ? this.parseLayout(newValue) : null;\n } else if (name === 'debug-snap-markers') {\n this.showSnapMarkers = !(newValue === null || newValue === 'false' || newValue === '0');\n if (!this.showSnapMarkers) {\n this.clearSnapMarkers();\n }\n } else if (name === 'debug-layout-integrity') {\n this.debugLayoutIntegrity = !(newValue === null || newValue === 'false' || newValue === '0');\n }\n }\n\n get layout(): DockLayoutSnapshot {\n return {\n root: this.cloneLayoutNode(this.rootLayout),\n floating: this.cloneFloatingArray(this.floatingLayouts),\n titles: { ...this.titles },\n };\n }\n\n set layout(value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null) {\n const snapshot = this.ensureSnapshot(value);\n // While a drag/resize is in flight, the dock manager is the source of\n // truth for layout state — its mid-drag mutations (e.g. floating bounds\n // updated every mousemove, or a stack split during a pane-drag-to-floating\n // conversion) race the host's two-way binding round-trip. The host re-\n // feeds the layout we *just* dispatched via `dock-layout-changed`, but by\n // the time the round-trip arrives the user has moved the cursor again, so\n // the structural-equality guard below would let it through and clobber the\n // in-progress state (e.g. snap a freshly-detached floating window back to\n // the converted-at coordinates instead of letting it follow the cursor).\n // Reject any external layout write during interaction; the host will sync\n // back to the dock's final state when interaction ends and the dock fires\n // a fresh dock-layout-changed event.\n if (this.isInteracting()) return;\n // Skip renderLayout when the incoming layout is structurally identical\n // to the current state. After a divider drag the dock dispatches\n // dock-layout-changed; an Angular host doing two-way binding will feed\n // that snapshot right back through `[layout]` (and through the\n // `[attr.layout]` round-trip). Without this guard, every drag-end\n // tears down and rebuilds the whole splitter tree, giving a one-frame\n // flash of `flex: 1 1 0` equal-share before the pin restores sizes.\n const currentJson = JSON.stringify({\n root: this.rootLayout,\n floating: this.floatingLayouts,\n titles: this.titles,\n });\n const newJson = JSON.stringify(snapshot);\n if (currentJson === newJson) return;\n\n this.rootLayout = this.cloneLayoutNode(snapshot.root);\n this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);\n this.titles = snapshot.titles ? { ...snapshot.titles } : {};\n // Sanitize whatever the host fed us: empty stacks, 0/1-child splits, and\n // nested same-direction splits get pruned/flattened before we render.\n this.normalizeAllLayouts();\n this.renderLayout();\n }\n\n /**\n * True while the user is actively interacting with the dock — pane drag,\n * floating window drag, floating window resize, or intersection corner\n * resize. The `set layout` setter consults this to refuse external\n * round-trips that would overwrite in-progress drag state.\n */\n private isInteracting(): boolean {\n return !!(\n this.dragState ||\n this.floatingDragState ||\n this.floatingResizeState ||\n this.cornerResizeState\n );\n }\n\n get snapshot(): DockLayoutSnapshot {\n return this.layout;\n }\n\n toJSON(): DockLayoutSnapshot {\n return this.snapshot;\n }\n\n private resolveDocument(): Document {\n const staticDocument = MintDockManagerElement.documentRef;\n const ownerDocument = this.ownerDocument ?? null;\n const globalDocument =\n typeof document !== 'undefined' ? document : null;\n const resolvedDocument = staticDocument ?? ownerDocument ?? globalDocument;\n\n if (!resolvedDocument) {\n throw new Error('mint-dock-manager requires a Document to initialize.');\n }\n\n if (!MintDockManagerElement.documentRef) {\n MintDockManagerElement.documentRef = resolvedDocument;\n }\n\n return resolvedDocument;\n }\n\n private resolveWindow(\n documentRef: Document,\n ): (Window & typeof globalThis) | null {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n return (documentRef.defaultView as (Window & typeof globalThis) | null) ?? null;\n }\n\n private parseLayout(value: string): DockLayoutSnapshot | null {\n try {\n const parsed = JSON.parse(value) as\n | DockLayoutSnapshot\n | DockLayout\n | DockLayoutNode\n | null;\n return this.ensureSnapshot(parsed);\n } catch (err) {\n console.warn('mint-dock-manager: failed to parse layout attribute', err);\n return null;\n }\n }\n\n private ensureSnapshot(\n value: DockLayoutSnapshot | DockLayout | DockLayoutNode | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ((value as DockLayoutNode).kind) {\n return { root: value as DockLayoutNode, floating: [], titles: {} };\n }\n\n const layout = value as DockLayout | DockLayoutSnapshot;\n return {\n root: layout.root ?? null,\n floating: Array.isArray(layout.floating)\n ? layout.floating.map((floating) => this.normalizeFloatingLayout(floating))\n : [],\n titles: layout.titles ? { ...layout.titles } : {},\n };\n }\n\n private renderLayout(): void {\n // The layout setter may run before firstUpdated() has populated the\n // shadow-DOM fields (e.g. when an attribute is set on the markup).\n // Bail out; firstUpdated() will call renderLayout() once ready.\n if (!this.dockedEl) return;\n this.dockedEl.innerHTML = '';\n this.floatingLayerEl.innerHTML = '';\n this.hideDropIndicator();\n\n if (this.rootLayout) {\n const fragment = this.renderNode(this.rootLayout, []);\n this.dockedEl.appendChild(fragment);\n }\n\n this.renderFloatingPanes();\n // Note: intersection handles are repositioned reactively via observers\n // wired up in firstUpdated (rootResizeObserver, dockedMutationObserver,\n // and delegated 'resizing' / 'resize-end' events). The MutationObserver\n // on dockedEl fires when the renderNode subtree above is appended.\n\n this.verifyProjectionSlots();\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 titleText = this.getFloatingWindowTitle(floating);\n const titleId = `${this.instanceId}-floating-${index}-title`;\n // role=dialog announces the window-like region; aria-modal=false because\n // floating panes don't trap focus — users can still interact with docked\n // panes behind them.\n wrapper.setAttribute('role', 'dialog');\n wrapper.setAttribute('aria-labelledby', titleId);\n wrapper.setAttribute('aria-modal', 'false');\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.id = titleId;\n title.textContent = titleText;\n chrome.appendChild(title);\n\n const closeBtn = this.documentRef.createElement('button');\n closeBtn.type = 'button';\n closeBtn.classList.add('dock-floating__close');\n closeBtn.setAttribute('aria-label', `Close pane: ${titleText}`);\n closeBtn.textContent = '×';\n closeBtn.addEventListener('click', (ev) => {\n ev.stopPropagation();\n this.closeFloatingPane(index);\n });\n // The chrome's pointerdown otherwise begins a drag on the close button.\n closeBtn.addEventListener('pointerdown', (ev) => ev.stopPropagation());\n chrome.appendChild(closeBtn);\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.setAttribute('role', 'separator');\n // For corner resizers (both axes), aria-orientation is omitted —\n // separator's default is \"horizontal\" but corner == both, so neither\n // value is correct. SR users still hear \"separator\" with the label.\n const isPureHorizontal = edges.horizontal === 'none' && edges.vertical !== 'none';\n const isPureVertical = edges.vertical === 'none' && edges.horizontal !== 'none';\n if (isPureHorizontal) resizer.setAttribute('aria-orientation', 'horizontal');\n else if (isPureVertical) resizer.setAttribute('aria-orientation', 'vertical');\n const labelParts: string[] = [];\n if (edges.vertical === 'top') labelParts.push('top');\n else if (edges.vertical === 'bottom') labelParts.push('bottom');\n if (edges.horizontal === 'left') labelParts.push('left');\n else if (edges.horizontal === 'right') labelParts.push('right');\n resizer.setAttribute(\n 'aria-label',\n `Resize pane ${labelParts.length === 2 ? 'corner ' : 'edge '}${labelParts.join('-')}`,\n );\n resizer.addEventListener('pointerdown', (event) =>\n this.beginFloatingResize(event, index, wrapper, resizer, edges),\n );\n wrapper.appendChild(resizer);\n });\n this.floatingLayerEl.appendChild(wrapper);\n });\n }\n\n private onSplitterResize(): void {\n // mp-splitter dispatches 'resizing' continuously during a divider drag\n // and 'resize-end' when the user releases. Both keep the handle glued\n // to the new intersection coordinate.\n this.scheduleRenderIntersectionHandles();\n }\n\n private scheduleRenderIntersectionHandles(): void {\n if (this.intersectionRaf !== null) return;\n const win = this.windowRef;\n if (!win) return;\n // Defer with setTimeout(5) instead of rAF so we run AFTER any\n // flex-redistribution settles. Sequence we have to wait through:\n // (1) DOM mutation (e.g. panel removed by drop)\n // (2) microtasks: <mp-splitter>'s slotchange + size-pinning rAF\n // (3) layout flush\n // A bare rAF can fire before (2) resolves, so getBoundingClientRect on\n // the dividers reads a transient flex-distributed position and the\n // glyph lands ~tens of pixels off. 5ms is past the microtask queue and\n // past splitter's pinning rAF in practice, so the divider rects we\n // read are the settled, post-pin values.\n this.intersectionRaf = win.setTimeout(() => {\n this.intersectionRaf = null;\n this.renderIntersectionHandles();\n }, 5) as unknown as number;\n }\n\n private renderIntersectionHandles(): void {\n const layer = this.shadowRoot?.querySelector<HTMLElement>('.dock-intersections-layer, .dock-intersection-layer');\n if (!layer) return;\n\n const rootRect = this.rootEl.getBoundingClientRect();\n\n // Active corner-resize: keep st.handle alive (it owns pointer capture and\n // the cornerResizeState references it). Update its position from current\n // divider rects, drop every other handle by reference.\n if (this.cornerResizeState) {\n const st = this.cornerResizeState;\n const h0 = st.hs[0];\n const v0 = st.vs[0];\n const hSplitter = this.findSplitterByPath(h0.path.segments);\n const vSplitter = this.findSplitterByPath(v0.path.segments);\n const hDiv = hSplitter ? this.getSplitterDividers(hSplitter)[h0.index] : null;\n const vDiv = vSplitter ? this.getSplitterDividers(vSplitter)[v0.index] : null;\n if (hDiv && vDiv) {\n const hr = hDiv.getBoundingClientRect();\n const vr = vDiv.getBoundingClientRect();\n const x = vr.left + vr.width / 2 - rootRect.left;\n const y = hr.top + hr.height / 2 - rootRect.top;\n st.handle.style.left = `${x}px`;\n st.handle.style.top = `${y}px`;\n Array.from(layer.querySelectorAll<HTMLElement>('.dock-intersection-handle')).forEach((el) => {\n if (el !== st.handle) el.remove();\n });\n }\n return;\n }\n\n // Idle path: full clear + rebuild. Cheaper to reason about than incremental\n // diffing, and handles' positions are always derived from current divider\n // rects so a layout change (drop, splitter restructure, flex redistribution)\n // can never leave a stale glyph behind.\n layer.replaceChildren();\n\n type DividerInfo = {\n rect: DOMRect;\n pathStr: string;\n index: number;\n };\n const hDividers: DividerInfo[] = [];\n const vDividers: DividerInfo[] = [];\n\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined;\n const pathStr = splitter.dataset['path'] ?? '';\n this.getSplitterDividers(splitter).forEach((el, index) => {\n const info: DividerInfo = { rect: el.getBoundingClientRect(), pathStr, index };\n // direction='horizontal' means children flow left-to-right, so the\n // divider bars between them are VERTICAL (and vice-versa).\n if (direction === 'horizontal') vDividers.push(info);\n else if (direction === 'vertical') hDividers.push(info);\n });\n });\n\n // Group intersections that round to the same on-screen pixel, so two\n // sibling splitters whose dividers happen to overlap share one handle.\n const tol = 24;\n const groups = new Map<string, { x: number; y: number; pairs: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> }>();\n hDividers.forEach((h) => {\n const hCenterY = h.rect.top + h.rect.height / 2;\n vDividers.forEach((v) => {\n const vCenterX = v.rect.left + v.rect.width / 2;\n const dx = vCenterX < h.rect.left ? h.rect.left - vCenterX : vCenterX > h.rect.right ? vCenterX - h.rect.right : 0;\n const dy = hCenterY < v.rect.top ? v.rect.top - hCenterY : hCenterY > v.rect.bottom ? hCenterY - v.rect.bottom : 0;\n if (dx > tol || dy > tol) return;\n const x = vCenterX - rootRect.left;\n const y = hCenterY - rootRect.top;\n const gk = `${Math.round(x)}:${Math.round(y)}`;\n const group = groups.get(gk) ?? { x, y, pairs: [] };\n group.pairs.push({ h: { pathStr: h.pathStr, index: h.index }, v: { pathStr: v.pathStr, index: v.index } });\n groups.set(gk, group);\n });\n });\n\n groups.forEach((group, gk) => {\n const handle = this.documentRef.createElement('div');\n handle.classList.add('dock-intersection-handle', 'glyph');\n handle.setAttribute('role', 'separator');\n handle.setAttribute('aria-label', 'Resize split intersection');\n // tabindex=0 — make the handle keyboard-reachable. Arrow keys then\n // resize the underlying h/v dividers (handled in onIntersectionKeyDown).\n handle.setAttribute('tabindex', '0');\n const firstPair = group.pairs[0];\n const key = `${firstPair.h.pathStr}:${firstPair.h.index}|${firstPair.v.pathStr}:${firstPair.v.index}`;\n handle.dataset['key'] = key;\n handle.dataset['pairs'] = JSON.stringify(group.pairs);\n handle.style.left = `${group.x}px`;\n handle.style.top = `${group.y}px`;\n // beginCornerResize/onIntersectionDoubleClick read data-pairs to\n // reconstruct the (h, v) pair list, so the (h, v) args we pass here\n // are only used as a fallback when data-pairs is empty — safe to use\n // the first pair's structure as the seed.\n const seedH = { path: this.parsePath(firstPair.h.pathStr), index: firstPair.h.index, container: this.findSplitterByPath(this.parsePath(firstPair.h.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n const seedV = { path: this.parsePath(firstPair.v.pathStr), index: firstPair.v.index, container: this.findSplitterByPath(this.parsePath(firstPair.v.pathStr)?.segments ?? []) ?? this.rootEl, rect: new DOMRect() };\n handle.addEventListener('pointerdown', (ev) => this.beginCornerResize(ev, seedH, seedV, handle));\n handle.addEventListener('dblclick', (ev) => this.onIntersectionDoubleClick(ev, handle));\n handle.addEventListener('keydown', (ev) => this.onIntersectionKeyDown(ev, handle));\n layer.appendChild(handle);\n });\n }\n\n /**\n * Keyboard resize on a focused intersection handle. ArrowLeft/Right resize\n * the vertical divider the handle sits on; ArrowUp/Down resize the\n * horizontal divider. Home/End shrink/grow the leading panel of whichever\n * axis is implied by the key. Shift = fine 1% step.\n *\n * Internally delegates to mp-splitter.resizeDividerBy() so the percent-step\n * + clamp math lives in one place. If a 2D handle straddles multiple split\n * pairs (sibling splitters whose dividers happen to overlap), the first\n * pair drives — same precedence as the pointer drag path.\n */\n private onIntersectionKeyDown(event: KeyboardEvent, handle: HTMLElement): void {\n const isVerticalAxis =\n event.key === 'ArrowLeft' || event.key === 'ArrowRight';\n const isHorizontalAxis =\n event.key === 'ArrowUp' || event.key === 'ArrowDown';\n const isHomeEnd = event.key === 'Home' || event.key === 'End';\n if (!isVerticalAxis && !isHorizontalAxis && !isHomeEnd) return;\n\n const pairsJson = handle.dataset['pairs'];\n if (!pairsJson) return;\n let pairs: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }>;\n try {\n pairs = JSON.parse(pairsJson);\n } catch {\n return;\n }\n if (pairs.length === 0) return;\n\n event.preventDefault();\n const fine = event.shiftKey;\n\n // Which divider does this key drive? Arrow{Left,Right} → vertical\n // (h-flow splitter, v-bar divider); Arrow{Up,Down} → horizontal. For\n // Home/End, default to the vertical-axis divider (matches APG's \"drive\n // the splitter to its limit\" convention on a horizontal layout).\n const drivesVerticalDivider = isVerticalAxis || isHomeEnd;\n const target = drivesVerticalDivider ? pairs[0].v : pairs[0].h;\n const path = this.parsePath(target.pathStr);\n const splitter = this.findSplitterByPath(path?.segments ?? []) as unknown as\n | { resizeDividerBy?: (i: number, k: string, fine?: boolean) => void }\n | null;\n splitter?.resizeDividerBy?.(target.index, event.key, fine);\n }\n\n private beginCornerResize(\n event: PointerEvent,\n h: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n v: { path: DockPath | null; index: number; container: HTMLElement; rect: DOMRect },\n handle: HTMLElement,\n ): void {\n event.preventDefault();\n\n // Build pairs from dataset if available (grouped intersections), otherwise from the provided pair\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }> =\n pairsRaw ? JSON.parse(pairsRaw) : [];\n const hs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n const vs: Array<{ path: DockPath; index: number; container: HTMLElement; initialSizes: number[]; before: number; after: number }>=[];\n\n const ensureHV = (pathStr: string, index: number, axis: 'h'|'v') => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n // Initial pixel sizes come from each panel-wrapper inside the splitter's\n // shadow root. We capture them once on pointerdown and feed deltas to\n // setPanelSizes() during the drag.\n const panels = this.getSplitterPanels(splitter);\n if (panels.length === 0) return;\n const dim: 'height' | 'width' = axis === 'h' ? 'height' : 'width';\n const initial = panels.map((p) => p.getBoundingClientRect()[dim]);\n const entry = { path, index, container: splitter, initialSizes: initial, before: initial[index], after: initial[index + 1] };\n if (axis === 'h') hs.push(entry);\n else vs.push(entry);\n };\n\n if (parsed.length > 0) {\n parsed.forEach((p) => { ensureHV(p.h.pathStr, p.h.index, 'h'); ensureHV(p.v.pathStr, p.v.index, 'v'); });\n } else if (h.path && v.path) {\n ensureHV(this.formatPath(h.path), h.index, 'h');\n ensureHV(this.formatPath(v.path), v.index, 'v');\n }\n if (hs.length === 0 && vs.length === 0) return;\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n handle.classList.add('hovering');\n } catch {}\n\n this.cornerResizeState = {\n pointerId: event.pointerId,\n handle,\n hs: hs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startY: event.clientY })),\n vs: vs.map((e) => ({ path: this.clonePath(e.path), index: e.index, container: e.container, beforeSize: e.before, afterSize: e.after, initialSizes: e.initialSizes, startX: event.clientX })),\n };\n\n this.startPointerTracking();\n // Ensure handle has a stable key (use group if present)\n if (!handle.dataset['key']) {\n handle.dataset['key'] = handle.dataset['group'] ?? '';\n }\n this.renderSnapMarkersForCorner();\n\n // Compute localized snap targets for this intersection\n try {\n const rootRect = this.rootEl.getBoundingClientRect();\n // Use first pair to define the crossing lines. Resolve dividers via\n // each splitter's shadow root.\n let centerX: number | null = null;\n let centerY: number | null = null;\n if (vs.length > 0) {\n const vPair = vs[0];\n const vDiv = this.getSplitterDividers(vPair.container)[vPair.index];\n const vr = vDiv?.getBoundingClientRect();\n if (vr) centerX = vr.left + vr.width / 2;\n }\n if (hs.length > 0) {\n const hPair = hs[0];\n const hDiv = this.getSplitterDividers(hPair.container)[hPair.index];\n const hr = hDiv?.getBoundingClientRect();\n if (hr) centerY = hr.top + hr.height / 2;\n }\n\n const xTargets: number[] = [];\n const yTargets: number[] = [];\n // Iterate every splitter, then flat-map its shadow dividers — a\n // splitter's data-direction tells us whether its bars are vertical\n // (horizontal split) or horizontal (vertical split).\n const allSplitters = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>('.dock-split') ?? [],\n );\n allSplitters.forEach((splitter) => {\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? undefined;\n this.getSplitterDividers(splitter).forEach((el) => {\n const r = el.getBoundingClientRect();\n if (direction === 'horizontal' && centerY != null) {\n // vertical bar → contributes X if it crosses centerY\n if (centerY >= r.top && centerY <= r.bottom) {\n xTargets.push(r.left + r.width / 2 - rootRect.left);\n }\n } else if (direction === 'vertical' && centerX != null) {\n // horizontal bar → contributes Y if it crosses centerX\n if (centerX >= r.left && centerX <= r.right) {\n yTargets.push(r.top + r.height / 2 - rootRect.top);\n }\n }\n });\n });\n this.cornerSnapXTargets = xTargets;\n this.cornerSnapYTargets = yTargets;\n } catch {\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n }\n\n private handleCornerResizeMove(event: PointerEvent): void {\n const state = this.cornerResizeState;\n if (!state || state.pointerId !== event.pointerId) return;\n\n const snapValue = (val: number, total: number, active: boolean) => {\n if (!active || total <= 0) return val;\n const ratios = [1/3, 1/2, 2/3];\n const r = val / total;\n let best = ratios[0];\n let d = Math.abs(r - best);\n for (let i=1;i<ratios.length;i++){ const dd = Math.abs(r - ratios[i]); if (dd < d) { d = dd; best = ratios[i]; } }\n return best * total;\n };\n\n // Axis snapping to nearby intersections\n const tol = 10;\n const rootRect = this.rootEl.getBoundingClientRect();\n let clientX = event.clientX;\n let clientY = event.clientY;\n if (this.cornerSnapXTargets.length) {\n let best = clientX, bestDist = tol + 1;\n this.cornerSnapXTargets.forEach((sx) => {\n const px = rootRect.left + sx; const d = Math.abs(px - clientX); if (d < bestDist) { bestDist = d; best = px; }\n });\n if (bestDist <= tol) clientX = best;\n }\n if (this.cornerSnapYTargets.length) {\n let best = clientY, bestDist = tol + 1;\n this.cornerSnapYTargets.forEach((sy) => {\n const py = rootRect.top + sy; const d = Math.abs(py - clientY); if (d < bestDist) { bestDist = d; best = py; }\n });\n if (bestDist <= tol) clientY = best;\n }\n\n // Apply the new pair sizes to one splitter's panel-wrappers via\n // mp-splitter's setPanelSizes(pixels) API. We persist the normalized\n // ratios on the layout node so renderSplit's initial sizing stays in sync.\n const applyPairSize = (\n entry: {\n path: DockPath;\n index: number;\n container: HTMLElement;\n beforeSize: number;\n afterSize: number;\n initialSizes: number[];\n },\n delta: number,\n ): void => {\n const node = this.resolveSplitNode(entry.path);\n if (!node) return;\n const minSize = 48;\n const pairTotal = entry.beforeSize + entry.afterSize;\n let newBefore = Math.min(Math.max(entry.beforeSize + delta, minSize), pairTotal - minSize);\n newBefore = snapValue(newBefore, pairTotal, event.shiftKey);\n const newAfter = pairTotal - newBefore;\n const sizesPx = [...entry.initialSizes];\n sizesPx[entry.index] = newBefore;\n sizesPx[entry.index + 1] = newAfter;\n const total = sizesPx.reduce((a, s) => a + s, 0);\n node.sizes = total > 0 ? sizesPx.map((s) => s / total) : [];\n (entry.container as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(sizesPx);\n };\n\n // Update all horizontal bars (vertical splits) with Y delta, then all\n // vertical bars (horizontal splits) with X delta.\n state.hs.forEach((h) => applyPairSize(h, clientY - h.startY));\n state.vs.forEach((v) => applyPairSize(v, clientX - v.startX));\n\n this.dispatchLayoutChanged();\n // setPanelSizes() is programmatic and doesn't fire 'resizing' events, so\n // the delegated listener on dockedEl doesn't wake during a corner drag.\n // Schedule the handle repositioning ourselves; renderIntersectionHandles\n // has a fast-path for the active cornerResizeState that just updates\n // left/top from the new divider rects.\n this.scheduleRenderIntersectionHandles();\n }\n\n private endCornerResize(pointerId: number): void {\n const state = this.cornerResizeState;\n if (!state || pointerId !== state.pointerId) return;\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch {}\n state.handle.dataset['resizing'] = 'false';\n this.cornerResizeState = null;\n // Re-render handles to account for new positions\n this.scheduleRenderIntersectionHandles();\n this.cornerSnapXTargets = [];\n this.cornerSnapYTargets = [];\n }\n\n private onIntersectionDoubleClick(event: MouseEvent, handle: HTMLElement): void {\n event.preventDefault();\n const pairsRaw = handle.dataset['pairs'];\n const parsed: Array<{ h: { pathStr: string; index: number }; v: { pathStr: string; index: number } }>\n = pairsRaw ? JSON.parse(pairsRaw) : [];\n if (!Array.isArray(parsed) || parsed.length === 0) {\n const k = handle.dataset['key'] ?? '';\n const parts = k.split('|');\n if (parts.length === 2) {\n const [hPart, vPart] = parts;\n const hi = hPart.lastIndexOf(':');\n const vi = vPart.lastIndexOf(':');\n if (hi > 0 && vi > 0) {\n const hPathStr = hPart.slice(0, hi);\n const vPathStr = vPart.slice(0, vi);\n const hIdx = Number.parseInt(hPart.slice(hi + 1), 10);\n const vIdx = Number.parseInt(vPart.slice(vi + 1), 10);\n parsed.push({ h: { pathStr: hPathStr, index: hIdx }, v: { pathStr: vPathStr, index: vIdx } });\n }\n }\n }\n if (parsed.length === 0) return;\n\n const splitKeys = new Set<string>();\n parsed.forEach((p) => { splitKeys.add(p.h.pathStr); splitKeys.add(p.v.pathStr); });\n let hasStored = false;\n splitKeys.forEach((k) => { if (this.previousSplitSizes.has(k)) hasStored = true; });\n\n // Persist `node.sizes` (normalized) and push pixel sizes into the\n // matching <mp-splitter> via setPanelSizes(). The splitter's panel\n // wrappers live in its shadow DOM, so direct flex mutation is no\n // longer an option.\n const pushSizesToSplitter = (path: DockPath, normalized: number[]): void => {\n const splitter = this.findSplitterByPath(path.segments);\n if (!splitter) return;\n const direction = (splitter.dataset['direction'] as 'horizontal' | 'vertical' | undefined) ?? 'horizontal';\n const containerSize = direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const totalWeight = normalized.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const px = normalized.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n };\n\n const applySizes = (pathStr: string, dividerIndex: number, mutate: (sizes: number[], index: number) => number[]) => {\n const path = this.parsePath(pathStr);\n if (!path) return;\n const node = this.resolveSplitNode(path);\n if (!node) return;\n const sizes = this.normalizeSizesArray(node.sizes ?? [], node.children.length);\n const newSizes = mutate([...sizes], dividerIndex);\n node.sizes = newSizes;\n pushSizesToSplitter(path, newSizes);\n };\n\n if (hasStored) {\n // Restore stored sizes\n this.previousSplitSizes.forEach((sizes, pathStr) => {\n const path = this.parsePath(pathStr);\n const node = path ? this.resolveSplitNode(path) : null;\n if (!node || !path) return;\n const norm = this.normalizeSizesArray(sizes, node.children.length);\n node.sizes = norm;\n pushSizesToSplitter(path, norm);\n });\n this.previousSplitSizes.clear();\n } else {\n // Equalize the two panes adjacent to each divider and store previous sizes\n const touched = new Set<string>();\n parsed.forEach((p) => {\n [p.h.pathStr, p.v.pathStr].forEach((key) => {\n if (touched.has(key)) return;\n const path = this.parsePath(key);\n const node = path ? this.resolveSplitNode(path) : null;\n if (node && Array.isArray(node.sizes)) {\n this.previousSplitSizes.set(key, [...node.sizes]);\n }\n touched.add(key);\n });\n const equalize = (sizes: number[], idx: number): number[] => {\n const total = (sizes[idx] ?? 0) + (sizes[idx + 1] ?? 0);\n if (total <= 0) return sizes;\n sizes[idx] = total / 2;\n sizes[idx + 1] = total / 2;\n const sum = sizes.reduce((a, s) => a + s, 0);\n return sum > 0 ? sizes.map((s) => s / sum) : sizes;\n };\n applySizes(p.h.pathStr, p.h.index, equalize);\n applySizes(p.v.pathStr, p.v.index, equalize);\n });\n }\n\n this.dispatchLayoutChanged();\n this.scheduleRenderIntersectionHandles();\n }\n\n private beginFloatingDrag(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { left, top } = floating.bounds;\n\n try {\n handle.setPointerCapture(event.pointerId);\n } catch (err) {\n /* no-op: pointer capture may not be supported in all environments */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingDragState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startLeft: left,\n startTop: top,\n wrapper,\n handle,\n };\n\n this.startPointerTracking();\n }\n\n private beginFloatingResize(\n event: PointerEvent,\n index: number,\n wrapper: HTMLElement,\n handle: HTMLElement,\n edges: FloatingResizeEdges,\n ): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n try {\n handle.setPointerCapture(event.pointerId);\n handle.dataset['resizing'] = 'true';\n } catch (err) {\n /* pointer capture may not be supported */\n }\n\n this.promoteFloatingPane(index, wrapper);\n\n this.floatingResizeState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startWidth: floating.bounds.width,\n startHeight: floating.bounds.height,\n startLeft: floating.bounds.left,\n startTop: floating.bounds.top,\n wrapper,\n handle,\n edges,\n };\n\n this.startPointerTracking();\n }\n\n private handleFloatingDragMove(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const newLeft = state.startLeft + deltaX;\n const newTop = state.startTop + deltaY;\n\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n\n this.updateFloatingDragDropTarget(event);\n }\n\n private endFloatingDrag(pointerId: number): void {\n const state = this.floatingDragState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear outside the try so a thrown releasePointerCapture (capture\n // already lost) doesn't strand the handle in its visual drag state.\n delete state.handle.dataset['resizing'];\n\n const dropHandled = state.dropTarget\n ? this.handleFloatingStackDrop(state.index, state.dropTarget.path, state.dropTarget.zone)\n : false;\n\n this.floatingDragState = null;\n this.hideDropIndicator();\n if (!dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateFloatingDragDropTarget(event: PointerEvent): void {\n const state = this.floatingDragState;\n if (!state) {\n return;\n }\n\n const stack = this.findStackAtPoint(event.clientX, event.clientY);\n if (!stack) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n const path = this.parsePath(stack.dataset['path']);\n if (!path || (path.type === 'floating' && path.index === state.index)) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n\n // Reset sticky zone when moving to another stack while dragging the\n // floating window so the side doesn't carry over.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n const zone = this.computeDropZone(stack, event, this.extractDropZoneFromEvent(event));\n\n if (zone) {\n state.dropTarget = { path, zone };\n } else if (state.dropTarget) {\n delete state.dropTarget;\n }\n\n this.showDropIndicator(stack, zone);\n }\n\n private handleFloatingResizeMove(event: PointerEvent): void {\n const state = this.floatingResizeState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const minWidth = 192;\n const minHeight = 128;\n let newWidth = state.startWidth;\n let newHeight = state.startHeight;\n let newLeft = state.startLeft;\n let newTop = state.startTop;\n\n if (state.edges.horizontal === 'right') {\n newWidth = Math.max(minWidth, state.startWidth + deltaX);\n } else if (state.edges.horizontal === 'left') {\n newWidth = Math.max(minWidth, state.startWidth - deltaX);\n newLeft = state.startLeft + (state.startWidth - newWidth);\n }\n\n if (state.edges.vertical === 'bottom') {\n newHeight = Math.max(minHeight, state.startHeight + deltaY);\n } else if (state.edges.vertical === 'top') {\n newHeight = Math.max(minHeight, state.startHeight - deltaY);\n newTop = state.startTop + (state.startHeight - newHeight);\n }\n\n state.wrapper.style.width = `${newWidth}px`;\n state.wrapper.style.height = `${newHeight}px`;\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.width = newWidth;\n floating.bounds.height = newHeight;\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n }\n\n private endFloatingResize(pointerId: number): void {\n const state = this.floatingResizeState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n\n try {\n state.handle.releasePointerCapture(state.pointerId);\n } catch (err) {\n /* no-op */\n }\n // Clear `data-resizing` outside the try — releasePointerCapture can\n // throw if the capture was already lost (e.g., the pointer left the\n // window), and we still need to drop the resizing attribute or the\n // CSS rule `.dock-floating__resizer[data-resizing='true']` keeps the\n // border dark-blue forever.\n delete state.handle.dataset['resizing'];\n\n this.floatingResizeState = null;\n this.dispatchLayoutChanged();\n }\n\n private getFloatingPaneZIndex(index: number): number {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return 10 + index;\n }\n const base =\n typeof floating.zIndex === 'number' && Number.isFinite(floating.zIndex)\n ? floating.zIndex\n : 10 + index;\n return base;\n }\n\n private promoteFloatingPane(index: number, wrapper: HTMLElement): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const maxExisting = this.floatingLayouts.reduce((max, layout, idx) => {\n if (!layout) {\n return max;\n }\n const z = idx === index ? Number.NEGATIVE_INFINITY : this.getFloatingPaneZIndex(idx);\n return Math.max(max, z);\n }, 0);\n\n const nextZ = Math.max(maxExisting + 2, 12);\n floating.zIndex = nextZ;\n wrapper.style.zIndex = String(nextZ);\n }\n\n private getFloatingWrapper(index: number): HTMLElement | null {\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n return this.floatingLayerEl.querySelector<HTMLElement>(selector);\n }\n\n private startPointerTracking(): void {\n if (this.pointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onPointerMove);\n win?.addEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = true;\n }\n\n private stopPointerTrackingIfIdle(): void {\n if (\n this.pointerTrackingActive &&\n !this.floatingDragState &&\n !this.floatingResizeState &&\n !this.cornerResizeState\n ) {\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n }\n }\n\n private getFloatingWindowTitle(floating: DockFloatingStackLayout): string {\n const fallback = 'Floating Pane';\n if (!floating || !floating.root) {\n return fallback;\n }\n\n const preferred = floating.activePane ?? this.findFirstPaneName(floating.root);\n if (!preferred) {\n return fallback;\n }\n\n return this.titles[preferred] ?? preferred ?? fallback;\n }\n\n private updateFloatingWindowTitle(index: number): void {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n const wrapper = this.floatingLayerEl.querySelector<HTMLElement>(selector);\n if (!wrapper) {\n return;\n }\n\n const titleEl = wrapper.querySelector<HTMLElement>('.dock-floating__title');\n if (!titleEl) {\n return;\n }\n\n titleEl.textContent = this.getFloatingWindowTitle(floating);\n }\n\n private renderSplit(\n node: DockSplitNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Each DockSplitNode renders as <mp-splitter>. The dock keeps its `.dock-split`\n // class on the host so existing `closest('.dock-split')` queries continue to\n // resolve, and stamps `data-direction` / `data-path` for the tree-driven\n // intersection-handle math.\n const splitter = this.documentRef.createElement('mp-splitter') as HTMLElement;\n splitter.classList.add('dock-split');\n splitter.dataset['direction'] = node.direction;\n splitter.dataset['path'] = path.join('/');\n // mp-splitter uses 'horizontal' (left-right) and 'vertical' (top-bottom).\n // The dock's DockSplitNode.direction matches that vocabulary 1:1.\n splitter.setAttribute('orientation', node.direction);\n\n const splitPath: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n\n node.children.forEach((child, index) => {\n // mp-splitter accepts direct children — it wraps each in a panel-wrapper\n // inside its shadow DOM and projects via a named slot per index.\n splitter.appendChild(this.renderNode(child, [...path, index], floatingIndex));\n });\n\n // Apply persisted sizes from the layout tree once mp-splitter has built\n // its panel wrappers. mp-splitter's setPanelSizes interprets values as\n // pixel widths/heights; the dock's saved sizes are flex weights, so\n // convert using the splitter's measured cross-axis container size.\n const sizes = Array.isArray(node.sizes) ? node.sizes : [];\n if (sizes.length > 0) {\n requestAnimationFrame(() => {\n const totalWeight = sizes.reduce((s, w) => s + Math.max(w, 0), 0);\n if (totalWeight <= 0) return;\n const containerSize =\n node.direction === 'horizontal'\n ? splitter.getBoundingClientRect().width\n : splitter.getBoundingClientRect().height;\n if (!Number.isFinite(containerSize) || containerSize <= 0) return;\n const px = sizes.map((w) => (Math.max(w, 0) / totalWeight) * containerSize);\n (splitter as unknown as { setPanelSizes?: (sizes: number[]) => void })\n .setPanelSizes?.(px);\n });\n }\n\n // mp-splitter fires resize-end with pixel sizes after a divider drag.\n // Convert back to flex weights (sum to a stable total — keep current sum\n // so future renders interpret consistently) and persist to the layout tree.\n splitter.addEventListener('resize-end', (event) => {\n // resize-end bubbles, so a nested mp-splitter's drag end would also\n // reach this listener. Only react to events from THIS splitter, not\n // from a descendant — otherwise we'd apply the inner's sizes to the\n // outer's splitNode and mangle the outer's weights.\n if (event.target !== splitter) return;\n const detail = (event as CustomEvent<{ sizes: number[] }>).detail;\n if (!Array.isArray(detail?.sizes) || detail.sizes.length === 0) return;\n const splitNode = this.resolveSplitNode(splitPath);\n if (!splitNode) return;\n const previousTotal = (splitNode.sizes ?? []).reduce(\n (s, w) => s + Math.max(w, 0),\n 0,\n );\n const total = detail.sizes.reduce((s, v) => s + Math.max(v, 0), 0);\n const targetTotal = previousTotal > 0 ? previousTotal : detail.sizes.length;\n if (total > 0) {\n splitNode.sizes = detail.sizes.map(\n (px) => (Math.max(px, 0) / total) * targetTotal,\n );\n this.dispatchLayoutChanged();\n }\n });\n\n return splitter;\n }\n\n private renderStack(\n node: DockStackNode,\n path: number[],\n floatingIndex?: number,\n ): HTMLElement {\n // Dock stacks are rendered as <mp-tab-control>. The dock keeps `.dock-stack`\n // as a class on the host so existing `closest('.dock-stack')` queries\n // continue to resolve. The tab strip + body slot projection are owned by\n // mp-tab-control; the dock just provides the slotted header/content\n // elements and listens for tab-activate to drive layout-tree updates.\n const stack = this.documentRef.createElement('mp-tab-control') as HTMLElement;\n stack.classList.add('dock-stack');\n // Dock controls activation; tell mp-tab-control not to auto-pick.\n stack.setAttribute('select-first-tab', 'false');\n // `border=\"top\"` gives us the strip-cutout line under the tabs (so the\n // active tab visually punches through into the body) without adding the\n // full Bootstrap frame, which would double up with the dock's own outer\n // chrome border on `.dock-stack` (and on `.dock-floating` for floating\n // panels).\n stack.setAttribute('border', 'top');\n\n const location: DockPath =\n typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n stack.dataset['path'] = this.formatPath(location);\n\n const panes = Array.from(new Set(node.panes));\n if (panes.length === 0) {\n const emptyHeader = this.documentRef.createElement('span');\n emptyHeader.setAttribute('slot', '__empty__-header');\n emptyHeader.textContent = '(empty)';\n const empty = this.documentRef.createElement('div');\n empty.setAttribute('slot', '__empty__-content');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n stack.append(emptyHeader, empty);\n stack.setAttribute('active-tab', '__empty__');\n return stack;\n }\n\n const activePane = panes.includes(node.activePane ?? '')\n ? node.activePane!\n : panes[0];\n\n const baseSlug = path.length ? path.join('-') : 'root';\n const pathSlug =\n typeof floatingIndex === 'number' ? `f${floatingIndex}-${baseSlug}` : baseSlug;\n\n panes.forEach((paneName) => {\n const paneSlugRaw = paneName.replace(/[^a-zA-Z0-9_-]/g, '-');\n const paneSlug = paneSlugRaw.length > 0 ? paneSlugRaw : 'pane';\n const tabId = `${this.instanceId}-tab-${pathSlug}-${paneSlug}`;\n const panelId = `${this.instanceId}-panel-${pathSlug}-${paneSlug}`;\n\n // Header span — projected via mp-tab-control's `${tabId}-header` slot\n // into the strip's button content. Carries the dock's drag handlers.\n const headerSpan = this.documentRef.createElement('span');\n headerSpan.setAttribute('slot', `${tabId}-header`);\n headerSpan.classList.add('dock-tab');\n headerSpan.dataset['pane'] = paneName;\n headerSpan.dataset['tabId'] = tabId;\n headerSpan.textContent = this.titles[paneName] ?? paneName;\n\n // Pointer-only drag (no HTML5 dnd). pointerdown captures metrics + arms\n // a threshold gesture; once the pointer moves >threshold pixels we\n // promote it to a real pane drag via beginPaneDrag. Using pointer\n // events sidesteps the entire class of HTML5 dnd quirks (cancellation\n // when source DOM is removed mid-drag, suppressed mousemove, bogus 0/0\n // coordinates in Firefox, browser-specific drag-image behavior).\n headerSpan.addEventListener('pointerdown', (event) => {\n this.captureTabDragMetrics(event, stack);\n this.armPaneDragGesture(event, this.clonePath(location), paneName, stack);\n event.stopPropagation();\n // Do NOT call event.preventDefault() here. On touch, that suppresses\n // the synthesized click on the parent .nav-link button — which is how\n // mp-tab-control fires `tab-activate`. `touch-action: none` on\n // `.dock-tab` already prevents the browser from arbitrating the\n // gesture for scroll, so preventDefault would be redundant + harmful.\n });\n\n // Content wrapper — projected via mp-tab-control's `${tabId}-content`\n // slot only when this tab is active. Holds the dock manager's per-pane\n // <slot> for the consumer's content.\n const paneHost = this.documentRef.createElement('div');\n paneHost.setAttribute('slot', `${tabId}-content`);\n paneHost.classList.add('dock-stack__pane');\n paneHost.dataset['pane'] = paneName;\n paneHost.dataset['tabId'] = tabId;\n paneHost.id = panelId;\n\n const slotEl = this.documentRef.createElement('slot');\n slotEl.name = paneName;\n paneHost.appendChild(slotEl);\n\n stack.append(headerSpan, paneHost);\n\n if (paneName === activePane) {\n stack.setAttribute('active-tab', tabId);\n }\n });\n\n stack.dataset['activePane'] = activePane;\n\n // Drive activatePane from mp-tab-control's tab-activate event. We map the\n // tabId back to the original paneName via the header span's data-pane.\n stack.addEventListener('tab-activate', (event) => {\n const detail = (event as CustomEvent<{ tabId: string }>).detail;\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > [data-tab-id=\"${detail.tabId}\"]`,\n );\n const paneName = headerSpan?.dataset['pane'];\n if (paneName) {\n this.activatePane(stack, paneName, this.clonePath(location));\n this.dispatchEvent(\n new CustomEvent('dock-pane-activated', {\n detail: { pane: paneName },\n bubbles: true,\n composed: true,\n }),\n );\n }\n });\n\n return stack;\n }\n\n /**\n * Returns the strip (`.tsc`) element inside an `<mp-tab-control>`'s shadow\n * DOM. Used by drag/drop logic that needs the strip's geometry instead of\n * the host element's bounds.\n */\n private getStackStripEl(stack: HTMLElement): HTMLElement | null {\n if (stack.tagName !== 'MP-TAB-CONTROL') return null;\n return stack.shadowRoot?.querySelector<HTMLElement>('.tsc') ?? null;\n }\n\n /**\n * Returns the rendered tab buttons inside an `<mp-tab-control>`'s shadow\n * strip — the light-DOM `.dock-tab` spans the dock owns are projected into\n * these buttons via `<slot>`. Use these for geometry / position queries\n * (insert-index computation, drop-indicator placement). Use the light-DOM\n * `.dock-tab` spans for data queries (paneName, drag listeners).\n */\n private getStackTabButtons(stack: HTMLElement): HTMLButtonElement[] {\n if (stack.tagName !== 'MP-TAB-CONTROL') return [];\n return Array.from(\n stack.shadowRoot?.querySelectorAll<HTMLButtonElement>('button.nav-link') ?? [],\n );\n }\n\n /**\n * Returns the dividers inside an `<mp-splitter>`'s shadow DOM, in DOM order.\n * mp-splitter renders one `.divider` between each pair of adjacent panels,\n * so for an N-child split, length N-1.\n */\n private getSplitterDividers(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.divider') ?? [],\n );\n }\n\n /**\n * Returns the panel wrappers inside an `<mp-splitter>`'s shadow DOM, in\n * DOM order. These are the elements mp-splitter sizes (via setPanelSizes)\n * during a divider drag — the dock reads their geometry for intersection\n * handle math and snap markers.\n */\n private getSplitterPanels(splitter: HTMLElement): HTMLElement[] {\n if (splitter.tagName !== 'MP-SPLITTER') return [];\n return Array.from(\n splitter.shadowRoot?.querySelectorAll<HTMLElement>('.panel-wrapper') ?? [],\n );\n }\n\n /**\n * Locate the rendered `<mp-splitter>` element for a given DockPath\n * `segments` value (the split-tree path). Searches the dock's shadow.\n */\n private findSplitterByPath(segments: number[]): HTMLElement | null {\n return (\n this.shadowRoot?.querySelector<HTMLElement>(\n `.dock-split[data-path=\"${segments.join('/')}\"]`,\n ) ?? null\n );\n }\n\n private onPointerMove(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.handleCornerResizeMove(event);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.handleFloatingResizeMove(event);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.handleFloatingDragMove(event);\n }\n }\n\n private onPointerUp(event: PointerEvent): void {\n if (this.cornerResizeState && event.pointerId === this.cornerResizeState.pointerId) {\n this.endCornerResize(event.pointerId);\n }\n\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.endFloatingDrag(event.pointerId);\n }\n\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.endFloatingResize(event.pointerId);\n }\n\n this.stopPointerTrackingIfIdle();\n }\n\n private captureTabDragMetrics(event: PointerEvent, stackEl: HTMLElement | null): void {\n if (!stackEl) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n this.pendingTabDragMetrics = null;\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl.getBoundingClientRect();\n\n const pointerOffsetX = event.clientX - stackRect.left;\n const pointerOffsetY = event.clientY - stackRect.top;\n const left = stackRect.left - hostRect.left;\n const top = stackRect.top - hostRect.top;\n const width = Number.isFinite(stackRect.width) ? stackRect.width : 0;\n const height = Number.isFinite(stackRect.height) ? stackRect.height : 0;\n\n this.pendingTabDragMetrics = {\n pointerOffsetX,\n pointerOffsetY,\n left,\n top,\n width,\n height,\n startClientX: event.clientX,\n startClientY: event.clientY,\n };\n }\n\n private clearPendingTabDragMetrics(): void {\n this.pendingTabDragMetrics = null;\n }\n\n /**\n * Pointerdown handler arms a \"may become a drag\" gesture. Mouse / pen use a\n * 5 px distance threshold and arm immediately; touch dispatches to\n * {@link armPaneDragGestureTouch} which requires a 600 ms stationary hold\n * (so the user can scroll the tabstrip natively without undocking).\n * Once armed, both paths converge on {@link beginPaneDrag}. All listeners\n * self-clean on resolve so the gesture stays scoped to a single pointerdown.\n */\n private armPaneDragGesture(\n startEvent: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n if (startEvent.pointerType === 'touch') {\n this.armPaneDragGestureTouch(startEvent, path, pane, stackEl);\n return;\n }\n if (startEvent.pointerType === 'mouse' && startEvent.button !== 0) return;\n const win = this.windowRef;\n if (!win) return;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n const pointerId = startEvent.pointerId;\n const threshold = 5;\n let resolved = false;\n\n const cleanup = (): void => {\n resolved = true;\n win.removeEventListener('pointermove', onMove, true);\n win.removeEventListener('pointerup', onRelease, true);\n win.removeEventListener('pointercancel', onRelease, true);\n };\n\n const onMove = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) < threshold) return;\n cleanup();\n this.beginPaneDrag(event, path, pane, stackEl);\n };\n\n const onRelease = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n win.addEventListener('pointermove', onMove, true);\n win.addEventListener('pointerup', onRelease, true);\n win.addEventListener('pointercancel', onRelease, true);\n }\n\n /**\n * Touch-specific gesture arming. With `.dock-tab` set to `touch-action:\n * none`, the browser never arbitrates the gesture itself, so JS owns it\n * from frame 1. Three outcomes from the pending state:\n *\n * - User holds within {@link TOUCH_LONG_PRESS_SLOP_PX} for\n * {@link TOUCH_LONG_PRESS_MS} → timer fires → drag arms via\n * {@link beginPaneDrag}.\n * - User moves past slop and the move is mostly horizontal, and the\n * strip's `<ul>` is scrollable → enter `scrolling` mode and drive\n * `ul.scrollLeft` from JS for the rest of the gesture (no drag, no\n * momentum — direct 1:1 finger follow).\n * - User moves past slop in any other direction, releases, or\n * pointercancel fires → abandoned, no drag, no scroll. Releases\n * under slop fire the synthesized click that drives `tab-activate`.\n *\n * `touch-action: pan-x` was the original PRD design but doesn't work:\n * the policy is frozen at touchstart and `setPointerCapture` doesn't\n * promote it, so first move after a long-press fires pointercancel and\n * strands the panel. JS-driven scroll is the only model that holds.\n */\n private armPaneDragGestureTouch(\n startEvent: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n const win = this.windowRef;\n if (!win) return;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n const pointerId = startEvent.pointerId;\n let latestX = startX;\n let latestY = startY;\n let lastScrollX = startX;\n let resolved = false;\n let scrolling = false;\n let pressFeedbackApplied = false;\n\n const tabSpan: HTMLElement | null =\n startEvent.currentTarget instanceof HTMLElement\n ? startEvent.currentTarget\n : startEvent.target instanceof HTMLElement\n ? startEvent.target.closest('.dock-tab')\n : null;\n\n const stripUl: HTMLElement | null = stackEl\n ? this.getStackStripEl(stackEl)?.querySelector<HTMLElement>(\n 'ul.nav.nav-tabs',\n ) ?? null\n : null;\n\n const cleanup = (): void => {\n if (resolved) return;\n resolved = true;\n win.clearTimeout(longPressTimeout);\n win.clearTimeout(pressFeedbackTimeout);\n win.removeEventListener('pointermove', onMove, true);\n win.removeEventListener('pointerup', onRelease, true);\n win.removeEventListener('pointercancel', onCancel, true);\n if (pressFeedbackApplied && tabSpan) {\n tabSpan.removeAttribute('data-pressing');\n }\n };\n\n const onMove = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n\n if (scrolling) {\n const dx = event.clientX - lastScrollX;\n lastScrollX = event.clientX;\n if (stripUl) stripUl.scrollLeft -= dx;\n return;\n }\n\n latestX = event.clientX;\n latestY = event.clientY;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) <= MintDockManagerElement.TOUCH_LONG_PRESS_SLOP_PX) {\n return;\n }\n\n // Slop crossed before the long-press fired. If the move is mostly\n // horizontal and the strip can scroll, take over scroll in JS;\n // otherwise abandon (no drag — browser native UI is fully suppressed\n // by `touch-action: none` so no fallback is needed).\n const stripScrollable =\n !!stripUl && stripUl.scrollWidth > stripUl.clientWidth;\n if (Math.abs(dx) > Math.abs(dy) && stripScrollable) {\n win.clearTimeout(longPressTimeout);\n win.clearTimeout(pressFeedbackTimeout);\n if (pressFeedbackApplied && tabSpan) {\n tabSpan.removeAttribute('data-pressing');\n pressFeedbackApplied = false;\n }\n scrolling = true;\n lastScrollX = event.clientX;\n stripUl!.scrollLeft -= dx;\n this.clearPendingTabDragMetrics();\n return;\n }\n\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n const onRelease = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n const onCancel = (event: PointerEvent): void => {\n if (resolved || event.pointerId !== pointerId) return;\n cleanup();\n this.clearPendingTabDragMetrics();\n };\n\n const longPressTimeout = win.setTimeout(() => {\n if (resolved) return;\n cleanup();\n try {\n this.setPointerCapture(pointerId);\n } catch {\n // setPointerCapture throws if the pointer is no longer active\n // (e.g. timer raced a pointerup we didn't see). Drag will abort\n // naturally on the next event.\n }\n if (typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function') {\n try {\n navigator.vibrate(10);\n } catch {\n // ignore\n }\n }\n const synthEvent = new PointerEvent('pointermove', {\n pointerId,\n pointerType: 'touch',\n isPrimary: true,\n clientX: latestX,\n clientY: latestY,\n bubbles: false,\n cancelable: false,\n });\n this.beginPaneDrag(synthEvent, path, pane, stackEl);\n }, MintDockManagerElement.TOUCH_LONG_PRESS_MS);\n\n const pressFeedbackTimeout = win.setTimeout(() => {\n if (resolved || !tabSpan) return;\n pressFeedbackApplied = true;\n tabSpan.setAttribute('data-pressing', 'true');\n }, MintDockManagerElement.TOUCH_PRESS_FEEDBACK_DELAY_MS);\n\n win.addEventListener('pointermove', onMove, true);\n win.addEventListener('pointerup', onRelease, true);\n win.addEventListener('pointercancel', onCancel, true);\n }\n\n private beginPaneDrag(\n event: PointerEvent,\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n ): void {\n const {\n path: sourcePath,\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n } = this.preparePaneDragSource(path, pane, stackEl, event);\n\n // Capture header bounds for detecting when to convert to floating.\n // The strip lives inside the mp-tab-control's shadow as `.tsc`.\n const headerEl = stackEl ? this.getStackStripEl(stackEl) : null;\n const headerRect = headerEl ? headerEl.getBoundingClientRect() : null;\n const headerBounds = headerRect\n ? { left: headerRect.left, top: headerRect.top, right: headerRect.right, bottom: headerRect.bottom }\n : null;\n const metrics = this.pendingTabDragMetrics;\n\n this.dragState = {\n pane,\n sourcePath: this.clonePath(sourcePath),\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n dropHandled: false,\n sourceStackEl: stackEl,\n sourceHeaderBounds: headerBounds,\n startClientX:\n metrics && Number.isFinite(metrics.startClientX)\n ? metrics.startClientX\n : event.clientX,\n startClientY:\n metrics && Number.isFinite(metrics.startClientY)\n ? metrics.startClientY\n : event.clientY,\n };\n this.lastDragPointerPosition = {\n x: this.dragState.startClientX as number,\n y: this.dragState.startClientY as number,\n };\n // pointerOffsetX/Y from preparePaneDragSource is the offset within the\n // source stack rect captured at pointerdown by captureTabDragMetrics.\n // Don't overwrite with event.offsetX/Y here — the threshold-trigger\n // pointermove fired on window, so its offset is in window-local coords\n // (≈ clientX/Y) which would crash the conversion math to ~(0,0).\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n this.startDragPointerTracking();\n // Mark the source floating wrapper (if any) so its CSS rule kicks in and\n // pointer-events:none lets findStackAtPoint see through to the docked\n // stack underneath, enabling drop zones over the dock during the drag.\n this.markDraggedFloatingWrapper();\n\n // Preferred UX: if the dragged tab is the only one in its stack,\n // immediately convert to a floating window unless it is already the\n // only pane in a floating window (this case is handled by reuse logic).\n if (this.dragState && this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const loc = this.resolveStackLocation(this.dragState.sourcePath);\n if (loc && Array.isArray(loc.node.panes) && loc.node.panes.length === 1) {\n let shouldConvert = false;\n if (loc.context === 'docked') {\n shouldConvert = true;\n } else if (loc.context === 'floating') {\n const floating = this.floatingLayouts[loc.index];\n const totalPanes = floating && floating.root ? this.countPanesInTree(floating.root) : 0;\n shouldConvert = totalPanes > 1;\n }\n if (shouldConvert) {\n this.convertPendingTabDragToFloating(event.clientX, event.clientY);\n }\n }\n }\n }\n\n private preparePaneDragSource(\n path: DockPath,\n pane: string,\n stackEl: HTMLElement | null,\n event: PointerEvent,\n ): { path: DockPath; floatingIndex: number | null; pointerOffsetX: number; pointerOffsetY: number } {\n const location = this.resolveStackLocation(path);\n if (!location || !location.node.panes.includes(pane)) {\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n const metrics = this.pendingTabDragMetrics;\n\n const domHasSibling =\n !!stackEl &&\n Array.from(stackEl.querySelectorAll<HTMLElement>('.dock-tab')).some(\n (button) => button.dataset['pane'] && button.dataset['pane'] !== pane,\n );\n\n const hasSiblingInStack = location.node.panes.some((existing) => existing !== pane);\n const floating = location.context === 'floating' ? this.floatingLayouts[location.index] : null;\n const floatingPaneCount =\n floating && floating.root ? this.countPanesInTree(floating.root) : hasSiblingInStack ? 2 : 1;\n const shouldReuseExistingWindow =\n location.context === 'floating' &&\n !!floating &&\n !hasSiblingInStack &&\n !domHasSibling &&\n floatingPaneCount <= 1;\n\n if (shouldReuseExistingWindow) {\n if (floating) {\n floating.activePane = pane;\n this.updateFloatingWindowTitle(location.index);\n const wrapper = this.getFloatingWrapper(location.index);\n if (wrapper) {\n this.promoteFloatingPane(location.index, wrapper);\n }\n const hostRect = this.getBoundingClientRect();\n const pointerOffsetX =\n metrics &&\n Number.isFinite(metrics.pointerOffsetX) &&\n Number.isFinite(metrics.left) &&\n Number.isFinite(floating.bounds.left)\n ? metrics.pointerOffsetX + (metrics.left - floating.bounds.left)\n : Number.isFinite(event.clientX) && Number.isFinite(floating.bounds.left)\n ? event.clientX - hostRect.left - floating.bounds.left\n : floating.bounds.width / 2;\n const pointerOffsetY =\n metrics &&\n Number.isFinite(metrics.pointerOffsetY) &&\n Number.isFinite(metrics.top) &&\n Number.isFinite(floating.bounds.top)\n ? metrics.pointerOffsetY + (metrics.top - floating.bounds.top)\n : Number.isFinite(event.clientY) && Number.isFinite(floating.bounds.top)\n ? event.clientY - hostRect.top - floating.bounds.top\n : floating.bounds.height / 2;\n return {\n path,\n floatingIndex: location.index,\n pointerOffsetX,\n pointerOffsetY,\n };\n }\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n // Do not convert to floating yet; allow in-header reordering first.\n // We return placeholder values and will convert once the pointer leaves the tab header.\n const pointerOffsetXVal =\n metrics && Number.isFinite(metrics.pointerOffsetX)\n ? metrics.pointerOffsetX\n : 0;\n const pointerOffsetYVal =\n metrics && Number.isFinite(metrics.pointerOffsetY)\n ? metrics.pointerOffsetY\n : 0;\n\n return {\n path,\n floatingIndex: -1,\n pointerOffsetX: pointerOffsetXVal,\n pointerOffsetY: pointerOffsetYVal,\n };\n }\n\n private endPaneDrag(): void {\n this.clearPendingDragEndTimeout();\n // Restore the dragged tab's `data-hidden` and remove the placeholder span\n // BEFORE we null out dragState — clearHeaderDragPlaceholder reads\n // `dragState.placeholderEl`, `dragState.placeholderHeader`, and\n // `dragState.pane` to know what to restore. If dragState is nulled first,\n // this becomes a silent no-op and the dragged pane stays hidden in its\n // source stack while the placeholder span lingers in the strip — which\n // is exactly the \"Panel disappears, only a small tab-thumb remains\"\n // regression the multi-pane drag-out path can otherwise trigger when\n // no renderLayout() runs between conversion and end (e.g. user releases\n // outside any drop zone, or HTML5 dragend fires without a drop).\n this.clearHeaderDragPlaceholder();\n this.clearDraggedFloatingWrapperMarkers();\n const state = this.dragState;\n this.dragState = null;\n this.hideDropIndicator();\n this.stopDragPointerTracking();\n this.lastDragPointerPosition = null;\n if (state && state.floatingIndex !== null && !state.dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n\n private updateDraggedFloatingPositionFromPoint(\n clientX: number,\n clientY: number,\n ): void {\n if (!this.dragState) {\n return;\n }\n\n if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) {\n return;\n }\n\n // If still dragging a tab inside its header, only convert to floating once we leave the header.\n if (this.dragState.floatingIndex !== null && this.dragState.floatingIndex < 0) {\n const b = this.dragState.sourceHeaderBounds;\n const sx = this.dragState.startClientX ?? clientX;\n const sy = this.dragState.startClientY ?? clientY;\n const dist = Math.hypot(clientX - sx, clientY - sy);\n const threshold = 8; // pixels to move before converting (tuned up)\n // Default to inside while bounds are unknown to avoid premature floating\n let insideHeader = true;\n const insideByBounds = b ? this.isPointWithinBounds(b, clientX, clientY) : true;\n const insideByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n insideHeader = insideByBounds || insideByHitTest;\n if (!insideHeader && dist > threshold) {\n // Convert to floating now using current pointer position\n this.convertPendingTabDragToFloating(clientX, clientY);\n }\n }\n\n this.updatePaneDragDropTargetFromPoint(clientX, clientY);\n\n const { floatingIndex, pointerOffsetX, pointerOffsetY } = this.dragState;\n if (floatingIndex === null || floatingIndex < 0) {\n return;\n }\n\n const floating = this.floatingLayouts[floatingIndex];\n if (!floating) {\n return;\n }\n\n const hostRect = this.getBoundingClientRect();\n const newLeft = clientX - hostRect.left - pointerOffsetX;\n const newTop = clientY - hostRect.top - pointerOffsetY;\n\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n\n const wrapper = this.getFloatingWrapper(floatingIndex);\n if (wrapper) {\n wrapper.style.left = `${newLeft}px`;\n wrapper.style.top = `${newTop}px`;\n }\n }\n\n private updatePaneDragDropTargetFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n\n const stack = this.findStackAtPoint(clientX, clientY);\n const path = stack ? this.parsePath(stack.dataset['path']) : null;\n if (!stack || !path) {\n // While actively dragging, avoid hiding the indicator if it is visible.\n // Transient misses from hit-testing are common near the joystick.\n if (this.dropJoystick.dataset['visible'] !== 'true') {\n this.hideDropIndicator();\n }\n // Also ensure any in-header placeholder is cleared when not over a stack\n this.clearHeaderDragPlaceholder();\n return;\n }\n\n // If we moved to a different target stack, reset any sticky zone so\n // the new drop area doesn't inherit the previous side selection.\n if (this.dropJoystickTarget && this.dropJoystickTarget !== stack) {\n delete this.dropJoystick.dataset['zone'];\n this.updateDropJoystickActiveZone(null);\n }\n\n // Previous behavior hid the indicator and returned early here; instead,\n // allow the live-reorder branch below to handle in-header drags.\n\n // While dragging within the same header, show a placeholder and suppress joystick/indicator\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n path &&\n this.pathsEqual(path, this.dragState.sourcePath)\n ) {\n const inHeaderByBounds = !!this.dragState.sourceHeaderBounds && this.isPointWithinBounds(this.dragState.sourceHeaderBounds, clientX, clientY);\n const inHeaderByHitTest = this.isPointerOverSourceHeader(clientX, clientY);\n if (inHeaderByBounds || inHeaderByHitTest) {\n // Ensure placeholder exists and move it as the pointer moves.\n // Placeholder management mutates the slotted children of the\n // mp-tab-control stack; the WC re-renders the strip on slotchange.\n this.ensureHeaderDragPlaceholder(stack, this.dragState.pane);\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n if (this.dragState.liveReorderIndex !== idx) {\n this.updateHeaderDragPlaceholderPosition(stack, idx);\n // Keep model reordering until drop; only move the placeholder now\n this.dragState.liveReorderIndex = idx;\n }\n this.hideDropIndicator();\n return;\n }\n }\n\n // Leaving the header: ensure any placeholder is removed immediately\n this.clearHeaderDragPlaceholder();\n\n const zoneHint = this.findDropZoneByPoint(clientX, clientY);\n const zone = this.computeDropZone(stack, { clientX, clientY }, zoneHint);\n this.showDropIndicator(stack, zone);\n }\n\n // Returns true when the pointer is currently over the source stack's header (tab strip).\n // The strip lives inside the mp-tab-control's shadow as `.tsc`, so we test\n // bounds directly rather than using elementsFromPoint(/contains) which won't\n // pierce the shadow boundary cleanly.\n private isPointerOverSourceHeader(clientX: number, clientY: number): boolean {\n const state = this.dragState;\n if (!state) {\n return false;\n }\n const stackEl = state.sourceStackEl ?? null;\n const strip = stackEl ? this.getStackStripEl(stackEl) : null;\n if (!strip) {\n // Be conservative: if we cannot resolve the strip, treat as inside\n return true;\n }\n const r = strip.getBoundingClientRect();\n return clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom;\n }\n\n private isPointWithinBounds(\n bounds: { left: number; right: number; top: number; bottom: number },\n x: number,\n y: number,\n ): boolean {\n return x >= bounds.left && x <= bounds.right && y >= bounds.top && y <= bounds.bottom;\n }\n\n // Ensure a placeholder tab exists during in-header drag and hide the real dragged tab visually.\n // Operates on the mp-tab-control stack: the dragged content div gets `data-hidden`\n // (mp-tab-control then skips its tab in the strip), and a placeholder header+content\n // pair is appended as light-DOM children of the stack. mp-tab-control's mutation\n // observer picks up the change and renders the placeholder as a tab.\n private ensureHeaderDragPlaceholder(stack: HTMLElement, pane: string): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n if (this.dragState?.placeholderHeader === stack && this.dragState.placeholderEl) {\n return;\n }\n const draggedHeader = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(pane)}\"]`,\n );\n if (!draggedHeader || !draggedContent) return;\n\n // Measure the dragged tab's text-only width BEFORE hiding it. The\n // `.dock-tab` rule applies padding (matching the strip button's padding so\n // the span fills the button as a drag handle), so `offsetWidth` is\n // text + padding — we subtract the span's own padding to get just the\n // text width. That's the natural slot content width we want the\n // placeholder to reserve; the placeholder span will re-apply the same\n // padding on top, mirroring the original tab's geometry exactly.\n const draggedCS = this.windowRef\n ? this.windowRef.getComputedStyle(draggedHeader)\n : globalThis.getComputedStyle(draggedHeader);\n const draggedHorizontalPadding =\n parseFloat(draggedCS.paddingLeft) + parseFloat(draggedCS.paddingRight);\n const slotContentWidth = Math.max(\n 0,\n draggedHeader.offsetWidth - draggedHorizontalPadding,\n );\n\n // Hide the dragged tab from mp-tab-control's strip (frees up the slot).\n draggedContent.setAttribute('data-hidden', '');\n\n // Build placeholder header + content. The placeholder uses a unique tabId\n // (`__dock-placeholder__`) so its slot names don't collide with real panes.\n // We mirror the dragged tab's text into the placeholder (dimmed via opacity)\n // so the strip reads as \"this tab is being dragged\" rather than \"empty slot\".\n const placeholderTabId = '__dock-placeholder__';\n const phHeader = this.documentRef.createElement('span');\n phHeader.setAttribute('slot', `${placeholderTabId}-header`);\n phHeader.classList.add('dock-tab');\n phHeader.dataset['placeholder'] = 'true';\n phHeader.dataset['tabId'] = placeholderTabId;\n phHeader.setAttribute('aria-hidden', 'true');\n phHeader.textContent = draggedHeader.textContent;\n // `display: inline-block` is required for `min-width` to take effect on the\n // span. Without it, an inline element ignores min-width and the placeholder\n // collapses to its content width (or 0 if textContent is also empty),\n // leaving a \"mini-thumb\" in the strip.\n phHeader.style.display = 'inline-block';\n phHeader.style.minWidth = `${slotContentWidth}px`;\n phHeader.style.opacity = '0.5';\n\n const phContent = this.documentRef.createElement('div');\n phContent.setAttribute('slot', `${placeholderTabId}-content`);\n phContent.classList.add('dock-stack__pane');\n phContent.dataset['placeholder'] = 'true';\n\n // Insert before the dragged header span so the placeholder appears in\n // the dragged tab's original strip position. The mutation observer in\n // mp-tab-control will refresh the tab list automatically.\n stack.insertBefore(phHeader, draggedHeader);\n stack.insertBefore(phContent, draggedContent);\n\n if (this.dragState) {\n this.dragState.placeholderHeader = stack;\n this.dragState.placeholderEl = phHeader;\n }\n }\n\n // Move the placeholder to the computed target index within the strip.\n // We reorder light-DOM children (header span + matching content div); the\n // mp-tab-control then re-renders the strip in the new order on slotchange.\n private updateHeaderDragPlaceholderPosition(stack: HTMLElement, targetIndex: number): void {\n if (stack.tagName !== 'MP-TAB-CONTROL') return;\n const phHeader = this.dragState?.placeholderEl ?? null;\n if (!phHeader) return;\n\n const draggedPane = this.dragState?.pane ?? null;\n // Find all real header spans (excluding the placeholder + the hidden dragged one).\n const realHeaders = Array.from(\n stack.querySelectorAll<HTMLElement>(':scope > .dock-tab'),\n ).filter(\n (h) =>\n h !== phHeader &&\n (!draggedPane || h.dataset['pane'] !== draggedPane),\n );\n const clampedTarget = Math.max(0, Math.min(targetIndex, realHeaders.length));\n const ref = realHeaders[clampedTarget] ?? null;\n stack.insertBefore(phHeader, ref);\n\n // Keep the placeholder content adjacent to its header so child-order\n // remains predictable for slotchange-driven re-renders.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n if (phContent && phHeader.nextElementSibling !== phContent) {\n stack.insertBefore(phContent, phHeader.nextElementSibling);\n }\n }\n\n // Remove placeholder and restore the dragged tab's visibility.\n private clearHeaderDragPlaceholder(): void {\n const ph = this.dragState?.placeholderEl ?? null;\n const stack = this.dragState?.placeholderHeader ?? null;\n if (stack) {\n // Restore the dragged content div's visibility so its strip tab returns.\n if (this.dragState?.pane) {\n const draggedContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-pane=\"${CSS.escape(this.dragState.pane)}\"]`,\n );\n draggedContent?.removeAttribute('data-hidden');\n }\n // Remove the placeholder content div sibling.\n const phContent = stack.querySelector<HTMLElement>(\n `:scope > .dock-stack__pane[data-placeholder=\"true\"]`,\n );\n phContent?.remove();\n }\n if (ph && ph.parentElement) {\n ph.parentElement.removeChild(ph);\n }\n if (this.dragState) {\n this.dragState.placeholderEl = null;\n this.dragState.placeholderHeader = null;\n }\n }\n\n private startDragPointerTracking(): void {\n if (this.dragPointerTrackingActive) {\n return;\n }\n this.lastDragPointerPosition = null;\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onDragPointerMove, true);\n win?.addEventListener('pointerup', this.onDragPointerUp, true);\n win?.addEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = true;\n }\n\n private stopDragPointerTracking(): void {\n if (!this.dragPointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onDragPointerMove, true);\n win?.removeEventListener('pointerup', this.onDragPointerUp, true);\n win?.removeEventListener('pointercancel', this.onDragPointerCancel, true);\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.clearPendingDragEndTimeout();\n }\n\n private onDragPointerMove(event: PointerEvent): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.lastDragPointerPosition = { x: event.clientX, y: event.clientY };\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n }\n\n private onDragPointerUp(event: PointerEvent): void {\n // Commit the drop from pointer release; the pointer-up coordinates are\n // authoritative for which stack/zone the user dropped into.\n if (this.dragState) {\n const x = Number.isFinite(event.clientX) ? event.clientX : this.lastDragPointerPosition?.x;\n const y = Number.isFinite(event.clientY) ? event.clientY : this.lastDragPointerPosition?.y;\n if (x !== undefined && y !== undefined) {\n this.finalizeDropFromPoint(x, y);\n }\n }\n this.handleDragPointerUpCommon();\n }\n\n private onDragPointerCancel(): void {\n // OS-level cancel (e.g. pointer capture lost): end the drag without\n // committing a drop.\n this.handleDragPointerUpCommon();\n }\n\n // Convert a currently in-header tab drag into a floating window\n private convertPendingTabDragToFloating(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const state = this.dragState;\n if (state.floatingIndex !== null && state.floatingIndex >= 0) {\n return; // already floating\n }\n // Clean up any placeholder before converting\n this.clearHeaderDragPlaceholder();\n const location = this.resolveStackLocation(state.sourcePath);\n if (!location) {\n return;\n }\n\n const pane = state.pane;\n const stackEl = state.sourceStackEl ?? null;\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl?.getBoundingClientRect() ?? null;\n const metrics = this.pendingTabDragMetrics;\n\n const fallbackWidth = 320;\n const fallbackHeight = 240;\n const width =\n metrics && Number.isFinite(metrics.width) && metrics.width > 0\n ? metrics.width\n : stackRect && Number.isFinite(stackRect.width)\n ? stackRect.width\n : fallbackWidth;\n const height =\n metrics && Number.isFinite(metrics.height) && metrics.height > 0\n ? metrics.height\n : stackRect && Number.isFinite(stackRect.height)\n ? stackRect.height\n : fallbackHeight;\n\n // Place the floating wrapper exactly where the docked stack was, so the\n // pane appears in-place at the moment of detach instead of jumping under\n // the cursor. metrics.left/top are host-relative (captured at pointerdown\n // in captureTabDragMetrics). Compensate for the floating wrapper's 1px\n // border so the visible content edge lines up with the original stack's\n // visible content edge (the docked .dock-stack also has a 1px border, so\n // the inner content rectangles match after this offset).\n const FLOATING_BORDER = 1;\n const initialLeft =\n metrics && Number.isFinite(metrics.left)\n ? metrics.left - FLOATING_BORDER\n : Number.isFinite(clientX)\n ? clientX - hostRect.left - width / 2\n : 0;\n const initialTop =\n metrics && Number.isFinite(metrics.top)\n ? metrics.top - FLOATING_BORDER\n : Number.isFinite(clientY)\n ? clientY - hostRect.top - height / 2\n : 0;\n\n // Derive pointerOffset from the cursor's actual position relative to the\n // freshly-placed wrapper (not from pointerdown metrics) so the very next\n // pointermove translates into a wrapper move of exactly the cursor delta\n // — no jump, no drift.\n const pointerOffsetX = Number.isFinite(clientX)\n ? clientX - hostRect.left - initialLeft\n : width / 2;\n const pointerOffsetY = Number.isFinite(clientY)\n ? clientY - hostRect.top - initialTop\n : height / 2;\n\n // Remove pane from its current stack and create a new floating entry\n this.removePaneFromLocation(location, pane);\n const floatingStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n const floatingLayout: DockFloatingStackLayout = {\n bounds: {\n left: initialLeft,\n top: initialTop,\n width,\n height,\n },\n root: floatingStack,\n activePane: pane,\n };\n\n this.floatingLayouts.push(floatingLayout);\n const newIndex = this.floatingLayouts.length - 1;\n this.renderLayout();\n const wrapper = this.getFloatingWrapper(newIndex);\n if (wrapper) {\n this.promoteFloatingPane(newIndex, wrapper);\n }\n this.liveAnnouncer.announce(`Pane ${this.titles[pane] ?? pane} torn off into a floating window.`);\n // Update drag state so subsequent moves reposition the floating window\n state.sourcePath = { type: 'floating', index: newIndex, segments: [] };\n state.floatingIndex = newIndex;\n state.pointerOffsetX = pointerOffsetX;\n state.pointerOffsetY = pointerOffsetY;\n // Now that the wrapper exists, mark it so pointer-events:none kicks in\n // and findStackAtPoint can see through to docked stacks underneath.\n this.markDraggedFloatingWrapper();\n this.dispatchLayoutChanged();\n }\n\n // Toggle data-dragging on the floating wrapper currently associated with\n // the active pane drag (dragState.floatingIndex), if any. Used to make the\n // wrapper transparent to elementsFromPoint so drop zones can be shown on\n // stacks underneath. clearDraggedFloatingWrapper() is the inverse.\n private markDraggedFloatingWrapper(): void {\n const fi = this.dragState?.floatingIndex;\n if (fi === null || fi === undefined || fi < 0) return;\n const wrapper = this.getFloatingWrapper(fi);\n if (wrapper) wrapper.dataset['dragging'] = 'true';\n }\n\n private clearDraggedFloatingWrapperMarkers(): void {\n const layer = this.floatingLayerEl;\n if (!layer) return;\n layer.querySelectorAll<HTMLElement>('.dock-floating[data-dragging=\"true\"]').forEach((el) => {\n delete el.dataset['dragging'];\n });\n }\n\n // Compute the intended tab insert index within a stack's strip based on pointer X.\n // Uses the rendered tab buttons inside mp-tab-control's shadow strip for geometry;\n // the dragged tab is hidden during drag (its content has data-hidden), and the\n // placeholder button (if present) gives us the dragged-position reference.\n private computeHeaderInsertIndex(stack: HTMLElement, clientX: number): number {\n if (stack.tagName !== 'MP-TAB-CONTROL') return 0;\n const allTabButtons = this.getStackTabButtons(stack);\n if (allTabButtons.length === 0) {\n return 0;\n }\n\n const placeholderHeader = stack.querySelector<HTMLElement>(\n ':scope > .dock-tab[data-placeholder=\"true\"]',\n );\n const placeholderTabId = placeholderHeader?.dataset['tabId'];\n const placeholderButton = placeholderTabId\n ? allTabButtons.find((b) => b.id === `${placeholderTabId}-header-button`) ?? null\n : null;\n\n // The dragged pane's content is `data-hidden`, but mp-tab-control's strip\n // re-render is async (its MutationObserver schedules a Lit microtask). When\n // beginPaneDrag calls updateDraggedFloatingPositionFromPoint synchronously\n // right after preparePaneDragSource, this runs before that re-render — so\n // the dragged button is still in the strip's shadow. We must exclude it\n // explicitly, otherwise the loop counts it as a real target and the\n // placeholder gets appended past the live tabs (visible on touch\n // long-press, where the finger doesn't move and the user sees the\n // mis-positioned placeholder for the duration of the hold).\n const draggedPane = this.dragState?.pane ?? null;\n let draggedTabId: string | null = null;\n if (draggedPane) {\n for (const child of Array.from(stack.children)) {\n if (\n child instanceof HTMLElement &&\n child.classList.contains('dock-tab') &&\n !child.hasAttribute('data-placeholder') &&\n child.dataset['pane'] === draggedPane\n ) {\n draggedTabId = child.dataset['tabId'] ?? null;\n break;\n }\n }\n }\n const draggedButton = draggedTabId\n ? allTabButtons.find((b) => b.id === `${draggedTabId}-header-button`) ?? null\n : null;\n\n const targets = allTabButtons.filter(\n (b) => b !== placeholderButton && b !== draggedButton,\n );\n if (targets.length === 0) {\n return 0;\n }\n\n const rightBias = 12;\n const leftBias = 0;\n\n const baseRect = placeholderButton ? placeholderButton.getBoundingClientRect() : null;\n const rectValid = !!baseRect && Number.isFinite(baseRect.width) && baseRect.width > 0;\n const draggedCenter = rectValid && baseRect ? baseRect.left + baseRect.width / 2 : null;\n\n for (let i = 0; i < targets.length; i += 1) {\n const rect = targets[i].getBoundingClientRect();\n const baseMid = rect.left + rect.width / 2;\n const isRightOfDragged = draggedCenter !== null ? baseMid >= draggedCenter : false;\n const mid = isRightOfDragged ? baseMid + rightBias : baseMid - leftBias;\n if (clientX < mid) {\n return i;\n }\n }\n return targets.length;\n }\n\n private reorderPaneInLocationAtIndex(location: ResolvedLocation, pane: string, targetIndex: number): void {\n const panes = location.node.panes;\n const currentIndex = panes.indexOf(pane);\n if (currentIndex === -1) {\n return;\n }\n const clampedTarget = Math.max(0, Math.min(targetIndex, panes.length - 1));\n if (clampedTarget === currentIndex) {\n return;\n }\n panes.splice(currentIndex, 1);\n panes.splice(clampedTarget, 0, pane);\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n // Commit a drop using current pointer coordinates and joystick state\n private finalizeDropFromPoint(clientX: number, clientY: number): void {\n if (!this.dragState) {\n return;\n }\n const stack = this.findStackAtPoint(clientX, clientY);\n const stackPath = stack ? this.parsePath(stack.dataset['path']) : null;\n const joystickVisible = this.dropJoystick.dataset['visible'] === 'true';\n const joystickStoredPath = this.parsePath(this.dropJoystick.dataset['path']);\n const joystickTarget = this.dropJoystickTarget;\n const joystickTargetPath = joystickTarget ? this.parsePath(joystickTarget.dataset['path']) : null;\n const path = (joystickVisible ? (joystickStoredPath ?? joystickTargetPath) : null) ?? stackPath;\n\n const joystickZone = this.dropJoystick.dataset['zone'] as DropZone | undefined;\n const zone: DropZone | null = this.isDropZone(joystickZone)\n ? joystickZone\n : (stack ? this.computeDropZone(stack, { clientX, clientY }, null) : null);\n\n // Same-header reorder case when no side zone is chosen\n if (\n this.dragState &&\n this.dragState.floatingIndex !== null &&\n this.dragState.floatingIndex < 0 &&\n stack &&\n path &&\n stackPath &&\n this.pathsEqual(stackPath, this.dragState.sourcePath) &&\n (!zone || zone === 'center')\n ) {\n const location = this.resolveStackLocation(path);\n if (location) {\n const idx = this.computeHeaderInsertIndex(stack, clientX);\n this.reorderPaneInLocationAtIndex(location, this.dragState.pane, idx);\n this.renderLayout();\n this.dispatchLayoutChanged();\n this.dragState.dropHandled = true;\n return;\n }\n }\n\n if (path && this.isDropZone(zone)) {\n this.handleDrop(path, zone!);\n this.dragState.dropHandled = true;\n }\n }\n\n private clearPendingDragEndTimeout(): void {\n if (this.pendingDragEndTimeout !== null) {\n const win = this.windowRef;\n if (win && typeof this.pendingDragEndTimeout === 'number') {\n win.clearTimeout(this.pendingDragEndTimeout);\n } else {\n globalThis.clearTimeout(this.pendingDragEndTimeout);\n }\n this.pendingDragEndTimeout = null;\n }\n }\n\n private scheduleDeferredDragEnd(): void {\n if (this.pendingDragEndTimeout !== null) {\n return;\n }\n\n const completeDrag = () => {\n this.pendingDragEndTimeout = null;\n this.hideDropIndicator();\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n };\n\n const win = this.windowRef;\n this.pendingDragEndTimeout = win\n ? win.setTimeout(completeDrag, 0)\n : setTimeout(completeDrag, 0);\n }\n\n private handleDrop(targetPath: DockPath | null, zone: DropZone): void {\n if (!this.dragState || !targetPath) {\n return;\n }\n\n const { pane, sourcePath } = this.dragState;\n \n const source = this.resolveStackLocation(sourcePath);\n const target = this.resolveStackLocation(targetPath);\n\n // Special case: allow dropping onto an empty main dock area (no root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n if (!source) {\n return;\n }\n this.removePaneFromLocation(source, pane, true);\n const newRoot: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n this.rootLayout = newRoot;\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n if (!source || !target) {\n return;\n }\n\n if (zone === 'center' && this.pathsEqual(sourcePath, targetPath)) {\n if (!source.node.panes.includes(pane)) {\n return;\n }\n this.reorderPaneInLocation(source, pane);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n this.removePaneFromLocation(source, pane, true);\n\n if (zone === 'center') {\n this.addPaneToLocation(target, pane);\n this.setActivePaneForLocation(target, pane);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n\n const newStack: DockStackNode = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n\n if (target.context === 'docked') {\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, newStack, zone);\n } else {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, newStack, zone);\n floating.activePane = pane;\n }\n\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n \n }\n\n private handleFloatingStackDrop(sourceIndex: number, targetPath: DockPath, zone: DropZone): boolean {\n const source = this.floatingLayouts[sourceIndex];\n if (!source || !source.root) {\n return false;\n }\n\n const target = this.resolveStackLocation(targetPath);\n // Allow dropping an entire floating stack onto an empty main dock area\n // (no existing root).\n if (!target && targetPath.type === 'docked' && !this.rootLayout) {\n this.rootLayout = this.cloneLayoutNode(source.root);\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n if (!target) {\n return false;\n }\n\n if (target.context === 'floating' && target.index === sourceIndex) {\n return false;\n }\n\n if (zone === 'center') {\n const panes = this.collectPaneNames(source.root);\n if (panes.length === 0) {\n return false;\n }\n\n panes.forEach((pane) => {\n this.addPaneToLocation(target, pane);\n });\n\n const activePane =\n source.activePane && panes.includes(source.activePane)\n ? source.activePane\n : this.findFirstPaneName(source.root) ?? panes[0];\n\n if (activePane) {\n this.setActivePaneForLocation(target, activePane);\n }\n\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n if (target.context === 'floating') {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n return false;\n }\n\n floating.root = this.dockNodeBeside(floating.root, target.node, source.root, zone);\n floating.activePane = source.activePane ?? this.findFirstPaneName(source.root) ?? undefined;\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, source.root, zone);\n this.removeFloatingAt(sourceIndex);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n return true;\n }\n\n private insertWeight(sizes: number[] | undefined, index: number, totalChildren: number): number[] {\n const existingCount = totalChildren - 1;\n const normalized = this.normalizeSizesArray(sizes, existingCount);\n const newWeight = 1 / totalChildren;\n const remaining = 1 - newWeight;\n const result: number[] = [];\n for (let i = 0; i < totalChildren; i += 1) {\n if (i === index) {\n result.push(newWeight);\n } else {\n const sourceIndex = i < index ? i : i - 1;\n result.push(normalized[sourceIndex] * remaining);\n }\n }\n return result;\n }\n\n private removePaneFromStack(stack: DockStackNode, pane: string, skipCleanup = false): boolean {\n stack.panes = stack.panes.filter((p) => p !== pane);\n if (!stack.panes.includes(stack.activePane ?? '')) {\n if (stack.panes.length > 0) {\n stack.activePane = stack.panes[0];\n } else {\n delete stack.activePane;\n }\n }\n\n if (stack.panes.length > 0) {\n return false;\n }\n\n if (skipCleanup) {\n return true;\n }\n\n this.normalizeAllLayouts();\n return true;\n }\n\n private findParentSplit(\n node: DockLayoutNode | null,\n child: DockLayoutNode,\n ): { parent: DockSplitNode; index: number } | null {\n if (!node || node === child) {\n return null;\n }\n\n if (node.kind !== 'split') {\n return null;\n }\n\n const index = node.children.indexOf(child);\n if (index !== -1) {\n return { parent: node, index };\n }\n\n for (let i = 0; i < node.children.length; i += 1) {\n const result = this.findParentSplit(node.children[i], child);\n if (result) {\n return result;\n }\n }\n\n return null;\n }\n\n private computeDropZone(\n stack: HTMLElement,\n point: { clientX: number; clientY: number } | null,\n zoneHint?: DropZone | null,\n ): DropZone | null {\n // Do not force a zone: even when the main area is empty we only\n // activate a zone when the pointer is actually over a joystick button.\n const hintedZone = this.isDropZone(zoneHint) ? zoneHint : null;\n if (hintedZone) {\n this.updateDropJoystickActiveZone(hintedZone);\n return hintedZone;\n }\n\n const pointZone =\n point &&\n Number.isFinite(point.clientX) &&\n Number.isFinite(point.clientY)\n ? this.findDropZoneByPoint(point.clientX, point.clientY)\n : null;\n\n if (pointZone) {\n this.updateDropJoystickActiveZone(pointZone);\n return pointZone;\n }\n\n if (this.dropJoystickTarget === stack) {\n // Be sticky while hovering the joystick: if we recently had a zone\n // selected, prefer keeping it instead of briefly clearing to null\n // when the browser reports transient coordinates/targets during drag.\n const sticky = this.dropJoystick.dataset['zone'];\n if (this.isDropZone(sticky)) {\n this.updateDropJoystickActiveZone(sticky);\n return sticky;\n }\n this.updateDropJoystickActiveZone(null);\n }\n\n return null;\n }\n\n private extractDropZoneFromEvent(event: Event): DropZone | null {\n if (!event) {\n return null;\n }\n\n if (typeof event.composedPath === 'function') {\n const path = event.composedPath();\n const zone = this.findDropZoneInTargets(path);\n if (zone) {\n return zone;\n }\n }\n\n if ('clientX' in event && 'clientY' in event) {\n const pointEvent = event as MouseEvent;\n const zoneFromPoint = this.findDropZoneByPoint(pointEvent.clientX, pointEvent.clientY);\n if (zoneFromPoint) {\n return zoneFromPoint;\n }\n }\n\n return null;\n }\n\n private handleDragPointerUpCommon(): void {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.scheduleDeferredDragEnd();\n }\n\n private findDropZoneInTargets(targets: Iterable<EventTarget>): DropZone | null {\n for (const target of targets) {\n if (\n target instanceof HTMLElement &&\n target.classList.contains('dock-drop-joystick__button')\n ) {\n const zone = target.dataset?.['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n return null;\n }\n\n private findDropZoneByPoint(clientX: number, clientY: number): DropZone | null {\n if (\n !this.dropJoystickButtons ||\n this.dropJoystick.dataset['visible'] !== 'true' ||\n !this.dropJoystickTarget\n ) {\n return null;\n }\n\n for (const button of this.dropJoystickButtons) {\n // Skip hidden/inactive buttons (used in center-only mode)\n if ((button.dataset['hidden'] === 'true') || button.style.visibility === 'hidden' || button.style.display === 'none') {\n continue;\n }\n const rect = button.getBoundingClientRect();\n if (\n clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom\n ) {\n const zone = button.dataset['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n\n return null;\n }\n\n private updateDropJoystickActiveZone(zone: DropZone | null): void {\n // If no zone is computed but the joystick is visible, keep the last\n // known active zone to avoid visual jitter while dragging across\n // small gaps where hit‑testing momentarily fails.\n const visible = this.dropJoystick.dataset['visible'] === 'true';\n const sticky = visible ? this.dropJoystick.dataset['zone'] : undefined;\n const effectiveZone: DropZone | null = zone ?? (this.isDropZone(sticky) ? sticky : null);\n\n this.dropJoystickButtons.forEach((button) => {\n const isActive = effectiveZone !== null && button.dataset['zone'] === effectiveZone;\n if (isActive) {\n button.dataset['active'] = 'true';\n } else {\n delete button.dataset['active'];\n }\n });\n if (effectiveZone) {\n this.dropJoystick.dataset['zone'] = effectiveZone;\n } else {\n delete this.dropJoystick.dataset['zone'];\n }\n }\n\n private isDropZone(value: string | null | undefined): value is DropZone {\n return value === 'left' || value === 'right' || value === 'top' || value === 'bottom' || value === 'center';\n }\n\n private showDropIndicator(stack: HTMLElement, zone: DropZone | null): void {\n const targetPath = this.parsePath(stack.dataset['path']);\n const sourcePath = this.dragState?.sourcePath ?? null;\n if (targetPath && sourcePath && this.isOrIsAncestorOf(targetPath, sourcePath)) {\n // Don't show any drop indicators on the pane being dragged.\n return;\n }\n\n const rect = stack.getBoundingClientRect();\n const hostRect = this.getBoundingClientRect();\n const indicator = this.dropIndicator;\n const joystick = this.dropJoystick;\n\n joystick.hidden = false;\n\n const path = this.parsePath(stack.dataset['path']);\n let overlayZ = 100;\n if (path && path.type === 'floating') {\n overlayZ = this.getFloatingPaneZIndex(path.index) + 100;\n }\n indicator.style.zIndex = String(overlayZ);\n joystick.style.zIndex = String(overlayZ + 1);\n\n let left = rect.left - hostRect.left;\n let top = rect.top - hostRect.top;\n let width = rect.width;\n let height = rect.height;\n\n const portion = 0.5;\n\n if (zone) {\n switch (zone) {\n case 'left':\n width = rect.width * portion;\n break;\n case 'right':\n width = rect.width * portion;\n left += rect.width * (1 - portion);\n break;\n case 'top':\n height = rect.height * portion;\n break;\n case 'bottom':\n height = rect.height * portion;\n top += rect.height * (1 - portion);\n break;\n default:\n break;\n }\n\n indicator.style.left = `${left}px`;\n indicator.style.top = `${top}px`;\n indicator.style.width = `${width}px`;\n indicator.style.height = `${height}px`;\n indicator.dataset['visible'] = 'true';\n } else {\n indicator.dataset['visible'] = 'false';\n }\n\n joystick.style.left = `${rect.left - hostRect.left + rect.width / 2}px`;\n joystick.style.top = `${rect.top - hostRect.top + rect.height / 2}px`;\n joystick.dataset['visible'] = 'true';\n this.dropJoystick.style.display = 'grid';\n joystick.dataset['path'] = stack.dataset['path'] ?? '';\n const changedTarget = this.dropJoystickTarget && this.dropJoystickTarget !== stack;\n this.dropJoystickTarget = stack;\n if (changedTarget) {\n // New target stack: forget any previously sticky zone.\n delete this.dropJoystick.dataset['zone'];\n }\n\n // If main dock area is empty, show only the center button and collapse the grid\n const isEmptyMainArea = !this.rootLayout && (stack === this.dockedEl || (targetPath && targetPath.type === 'docked' && targetPath.segments.length === 0));\n const spacers = Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer'));\n if (isEmptyMainArea) {\n // Keep spacers visible so the joystick keeps its circular footprint.\n spacers.forEach((s) => {\n s.style.display = '';\n });\n this.dropJoystickButtons.forEach((btn) => {\n const isCenter = btn.dataset['zone'] === 'center';\n if (isCenter) {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n } else {\n // Hide visually but keep layout space; also prevent interaction.\n btn.style.visibility = 'hidden';\n btn.style.pointerEvents = 'none';\n btn.dataset['hidden'] = 'true';\n btn.style.display = '';\n }\n });\n // Keep default 3x3 grid so the circular background size stays the same.\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n // Do not set an active zone automatically; users must hover the button.\n } else {\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n btn.style.display = '';\n });\n spacers.forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n this.updateDropJoystickActiveZone(zone);\n }\n\n private hideDropIndicator(): void {\n this.dropIndicator.dataset['visible'] = 'false';\n this.dropJoystick.dataset['visible'] = 'false';\n this.dropJoystick.style.display = 'none';\n delete this.dropJoystick.dataset['path'];\n this.dropJoystickTarget = null;\n this.updateDropJoystickActiveZone(null);\n // Restore joystick structure to default.\n this.dropJoystickButtons.forEach((btn) => {\n btn.style.display = '';\n btn.style.visibility = '';\n btn.style.pointerEvents = '';\n delete btn.dataset['hidden'];\n });\n Array.from(this.dropJoystick.querySelectorAll<HTMLElement>('.dock-drop-joystick__spacer')).forEach((s) => (s.style.display = ''));\n this.dropJoystick.style.gridTemplateColumns = '';\n this.dropJoystick.style.gridTemplateRows = '';\n }\n\n private findStackAtPoint(clientX: number, clientY: number): HTMLElement | null {\n const shadow = this.shadowRoot;\n if (!shadow) {\n return null;\n }\n\n const elements = shadow.elementsFromPoint(clientX, clientY);\n const stack = this.findStackInTargets(elements);\n if (stack) {\n return stack;\n }\n // If there are no docked stacks (all panes are floating), allow the\n // docked surface itself to serve as a drop target for the main zone.\n if (!this.rootLayout) {\n const dockRect = this.dockedEl.getBoundingClientRect();\n if (\n clientX >= dockRect.left &&\n clientX <= dockRect.right &&\n clientY >= dockRect.top &&\n clientY <= dockRect.bottom\n ) {\n return this.dockedEl;\n }\n }\n\n return null;\n }\n\n private findStackInTargets(targets: Iterable<EventTarget>): HTMLElement | null {\n for (const element of targets) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element.classList.contains('dock-stack')) {\n return element;\n }\n if (\n this.dropJoystickTarget &&\n (element.classList.contains('dock-drop-joystick') ||\n element.classList.contains('dock-drop-joystick__button') ||\n element.classList.contains('dock-drop-joystick__spacer'))\n ) {\n return this.dropJoystickTarget;\n }\n }\n return null;\n }\n\n private activatePane(stack: HTMLElement, paneName: string, path: DockPath): void {\n stack.dataset['activePane'] = paneName;\n\n // Reflect to mp-tab-control's `active-tab` attribute. The WC handles\n // strip button styling (active class, aria-selected) + body-slot\n // projection automatically via the named-slot pattern.\n if (stack.tagName === 'MP-TAB-CONTROL') {\n const headerSpan = stack.querySelector<HTMLElement>(\n `:scope > .dock-tab[data-pane=\"${CSS.escape(paneName)}\"]`,\n );\n const tabId = headerSpan?.dataset['tabId'];\n if (tabId) {\n stack.setAttribute('active-tab', tabId);\n }\n }\n\n const location = this.resolveStackLocation(path);\n if (!location) {\n return;\n }\n\n location.node.activePane = paneName;\n if (path.type === 'floating') {\n const floating = this.floatingLayouts[path.index];\n if (floating) {\n floating.activePane = paneName;\n }\n this.updateFloatingWindowTitle(path.index);\n }\n this.dispatchLayoutChanged();\n }\n\n private getNodeAtPath(root: DockLayoutNode | null, path: number[]): DockLayoutNode | null {\n if (!root) {\n return null;\n }\n\n let current: DockLayoutNode | null = root;\n if (path.length === 0) {\n return current;\n }\n\n for (const segment of path) {\n if (!current || current.kind !== 'split') {\n return null;\n }\n current = current.children[segment] ?? null;\n }\n\n return current;\n }\n\n private resolveSplitNode(path: DockPath): DockSplitNode | null {\n if (path.type === 'docked') {\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n const floating = this.floatingLayouts[path.index];\n if (!floating || !floating.root) {\n return null;\n }\n\n const node = this.getNodeAtPath(floating.root, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n\n private replaceNodeInTree(\n root: DockLayoutNode | null,\n target: DockLayoutNode,\n replacement: DockLayoutNode,\n ): DockLayoutNode | null {\n if (!root) {\n return replacement;\n }\n\n if (root === target) {\n return replacement;\n }\n\n const parentInfo = this.findParentSplit(root, target);\n if (!parentInfo) {\n return root;\n }\n\n parentInfo.parent.children[parentInfo.index] = replacement;\n this.normalizeSplitNode(parentInfo.parent);\n return root;\n }\n\n private dockNodeBeside(\n root: DockLayoutNode | null,\n targetNode: DockStackNode,\n newNode: DockLayoutNode,\n zone: DropZone,\n ): DockLayoutNode | null {\n const orientation = zone === 'left' || zone === 'right' ? 'horizontal' : 'vertical';\n const placeBefore = zone === 'left' || zone === 'top';\n const parentInfo = this.findParentSplit(root, targetNode);\n\n if (parentInfo && parentInfo.parent.direction === orientation) {\n const insertIndex = placeBefore ? parentInfo.index : parentInfo.index + 1;\n parentInfo.parent.children.splice(insertIndex, 0, newNode);\n parentInfo.parent.sizes = this.insertWeight(\n parentInfo.parent.sizes,\n insertIndex,\n parentInfo.parent.children.length,\n );\n return root ?? newNode;\n }\n\n const split: DockSplitNode = {\n kind: 'split',\n direction: orientation,\n children: placeBefore ? [newNode, targetNode] : [targetNode, newNode],\n sizes: [0.5, 0.5],\n };\n\n return this.replaceNodeInTree(root, targetNode, split);\n }\n\n private forEachStack(\n node: DockLayoutNode | null,\n visitor: (stack: DockStackNode, path: number[]) => void,\n path: number[] = [],\n ): void {\n if (!node) {\n return;\n }\n\n if (node.kind === 'stack') {\n visitor(node, path);\n return;\n }\n\n node.children.forEach((child, index) =>\n this.forEachStack(child, visitor, [...path, index]),\n );\n }\n\n private findStackContainingPane(\n node: DockLayoutNode | null,\n pane: string,\n ): DockStackNode | null {\n let result: DockStackNode | null = null;\n this.forEachStack(node, (stack) => {\n if (!result && stack.panes.includes(pane)) {\n result = stack;\n }\n });\n return result;\n }\n\n private findFirstPaneName(node: DockLayoutNode | null): string | null {\n let found: string | null = null;\n this.forEachStack(node, (stack) => {\n if (found || stack.panes.length === 0) {\n return;\n }\n if (stack.activePane && stack.panes.includes(stack.activePane)) {\n found = stack.activePane;\n } else {\n found = stack.panes[0];\n }\n });\n return found;\n }\n\n private collectFloatingPaneMetadata(\n node: DockLayoutNode | null,\n ): { panes: string[]; titles: Record<string, string> } {\n // Deprecated method retained temporarily for signature compatibility.\n // Use collectPaneNames instead.\n const panes = this.collectPaneNames(node);\n const titles: Record<string, string> = {};\n panes.forEach((p) => {\n const t = this.titles[p];\n if (t) {\n titles[p] = t;\n }\n });\n return { panes, titles };\n }\n\n private collectPaneNames(node: DockLayoutNode | null): string[] {\n const panes: string[] = [];\n this.forEachStack(node, (stack) => {\n stack.panes.forEach((pane) => panes.push(pane));\n });\n return panes;\n }\n\n private normalizeFloatingLayout(\n layout: DockFloatingStackLayout,\n ): DockFloatingStackLayout {\n const bounds = layout.bounds ?? { left: 0, top: 0, width: 320, height: 200 };\n const normalizedBounds = {\n left: Number.isFinite(bounds.left) ? bounds.left : 0,\n top: Number.isFinite(bounds.top) ? bounds.top : 0,\n width: Number.isFinite(bounds.width) ? Math.max(bounds.width, 160) : 320,\n height: Number.isFinite(bounds.height) ? Math.max(bounds.height, 120) : 200,\n };\n\n const root = layout.root ? this.cloneLayoutNode(layout.root) : null;\n\n return {\n id: layout.id,\n bounds: normalizedBounds,\n zIndex: layout.zIndex,\n root,\n activePane: layout.activePane,\n };\n }\n\n private formatPath(path: DockPath): string {\n if (path.type === 'floating') {\n const suffix =\n path.segments.length > 0\n ? `/${path.segments.map((segment) => segment.toString()).join('/')}`\n : '';\n return `f:${path.index}${suffix}`;\n }\n const suffix = path.segments.join('/');\n return suffix.length > 0 ? `d:${suffix}` : 'd:';\n }\n\n private clonePath(path: DockPath): DockPath {\n if (path.type === 'floating') {\n return { type: 'floating', index: path.index, segments: [...path.segments] };\n }\n return { type: 'docked', segments: [...path.segments] };\n }\n\n private parsePath(path: string | null | undefined): DockPath | null {\n // The root splitter is tagged with data-path=\"\" (raw segments-join of an\n // empty array) so empty string is a valid path representing root docked.\n // Only null/undefined is \"no path\".\n if (path == null) {\n return null;\n }\n\n if (path.startsWith('f:')) {\n const remainder = path.slice(2);\n const [indexPart, ...segmentParts] = remainder.split('/');\n const index = Number.parseInt(indexPart, 10);\n if (!Number.isFinite(index)) {\n return null;\n }\n const segments = segmentParts\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n return { type: 'floating', index, segments };\n }\n\n const normalized = path.startsWith('d:') ? path.slice(2) : path;\n if (normalized.length === 0) {\n return { type: 'docked', segments: [] };\n }\n\n const segments = normalized\n .split('/')\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n\n return { type: 'docked', segments };\n }\n\n private pathsEqual(a: DockPath, b: DockPath): boolean {\n if (a.type !== b.type) {\n return false;\n }\n\n if (a.type === 'floating') {\n const other = b as Extract<DockPath, { type: 'floating' }>;\n if (a.index !== other.index) {\n return false;\n }\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n const other = b as Extract<DockPath, { type: 'docked' }>;\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n\n private isOrIsAncestorOf(ancestor: DockPath, descendant: DockPath): boolean {\n if (ancestor.type !== descendant.type) {\n return false;\n }\n\n if (ancestor.type === 'floating') {\n if ((descendant as any).index !== ancestor.index) {\n return false;\n }\n }\n\n if (ancestor.segments.length > descendant.segments.length) {\n return false;\n }\n\n return ancestor.segments.every((segment, i) => segment === descendant.segments[i]);\n }\n\n private countPanesInTree(node: DockLayoutNode | null): number {\n if (!node) {\n return 0;\n }\n if (node.kind === 'stack') {\n return node.panes.length;\n }\n return node.children.reduce((total, child) => total + this.countPanesInTree(child), 0);\n }\n\n private resolveStackLocation(path: DockPath): ResolvedLocation | null {\n if (path.type === 'floating') {\n const layout = this.floatingLayouts[path.index];\n if (!layout || !layout.root) {\n return null;\n }\n const node = this.getNodeAtPath(layout.root, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n return { context: 'floating', index: path.index, path: [...path.segments], node };\n }\n\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n\n return { context: 'docked', path: [...path.segments], node };\n }\n\n private removePaneFromLocation(\n location: ResolvedLocation,\n pane: string,\n skipCleanup = false,\n ): boolean {\n if (location.context === 'docked') {\n return this.removePaneFromStack(location.node, pane, skipCleanup);\n }\n\n return this.removePaneFromFloating(location.index, location.path, pane, skipCleanup);\n }\n\n private addPaneToLocation(location: ResolvedLocation, pane: string): void {\n const panes = location.node.panes;\n const existingIndex = panes.indexOf(pane);\n if (existingIndex !== -1) {\n panes.splice(existingIndex, 1);\n }\n panes.push(pane);\n }\n\n private setActivePaneForLocation(location: ResolvedLocation, pane: string): void {\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n\n private 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 /**\n * Keyboard handler on the dock root, registered in capture phase so it\n * runs before mp-tab-control's shadow-internal handlers swallow Arrow /\n * Home / End / Enter. M opens move mode on a focused tab; subsequent\n * letter keys (T/R/B/L/F) commit the move; Escape cancels.\n */\n private onRootKeyDown(event: KeyboardEvent): void {\n if (this.paneMoveMode) {\n this.handlePaneMoveModeKey(event);\n return;\n }\n if (event.key !== 'm' && event.key !== 'M') return;\n const focused = this.findFocusedPaneOrigin();\n if (!focused) return;\n event.preventDefault();\n event.stopPropagation();\n this.paneMoveMode = focused;\n const title = this.titles[focused.paneName] ?? focused.paneName;\n this.liveAnnouncer.announce(\n `Move mode for pane ${title}. Press T, R, B, or L to dock to top, right, bottom, or left of the current stack. Press F to float. Escape to cancel.`,\n );\n }\n\n private handlePaneMoveModeKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.paneMoveMode = null;\n this.liveAnnouncer.announce('Move cancelled.');\n return;\n }\n const key = event.key.toLowerCase();\n const zoneByKey: Record<string, DropZone | 'float' | undefined> = {\n t: 'top', r: 'right', b: 'bottom', l: 'left', f: 'float',\n };\n const choice = zoneByKey[key];\n if (!choice) return;\n event.preventDefault();\n event.stopPropagation();\n if (choice === 'float') this.commitPaneMoveAsFloat();\n else this.commitPaneMoveToZone(choice);\n }\n\n /**\n * Walk the focused element through nested shadow roots to find a focused\n * tab button, then map it back to the dock's pane name + source path via\n * the data attributes on the slotted .dock-tab span.\n */\n private findFocusedPaneOrigin(): { paneName: string; sourcePath: DockPath } | null {\n if (!this.shadowRoot) return null;\n let active: Element | null = this.shadowRoot.activeElement;\n while (active && active.shadowRoot && active.shadowRoot.activeElement) {\n active = active.shadowRoot.activeElement;\n }\n if (!active || active.getAttribute('role') !== 'tab') return null;\n // mp-tab-control assigns the role=tab button id `${tabId}-header-button`,\n // while the dock's `.dock-tab` slot wrapper carries `data-tab-id=${tabId}`.\n // Strip the suffix so the lookup matches the slot wrapper.\n const tabId = active.id.replace(/-header-button$/, '');\n const headerSpan = this.shadowRoot.querySelector<HTMLElement>(\n `.dock-tab[data-tab-id=\"${tabId}\"]`,\n );\n if (!headerSpan) return null;\n const stack = headerSpan.closest<HTMLElement>('.dock-stack');\n if (!stack) return null;\n const path = this.parsePath(stack.dataset['path']);\n if (!path) return null;\n return { paneName: headerSpan.dataset['pane']!, sourcePath: path };\n }\n\n /**\n * Synthesise a minimal dragState so handleDrop's existing pipeline can\n * commit the keyboard-driven move. handleDrop reads {pane, sourcePath,\n * dropHandled} — the rest of dragState is pointer-drag bookkeeping that\n * doesn't apply here.\n */\n private synthesiseDragStateForKeyboardMove(): void {\n if (!this.paneMoveMode) return;\n this.dragState = {\n pane: this.paneMoveMode.paneName,\n sourcePath: this.clonePath(this.paneMoveMode.sourcePath),\n floatingIndex: this.paneMoveMode.sourcePath.type === 'floating'\n ? this.paneMoveMode.sourcePath.index\n : null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n dropHandled: false,\n sourceStackEl: null,\n sourceHeaderBounds: null,\n startClientX: 0,\n startClientY: 0,\n } as never;\n }\n\n private commitPaneMoveToZone(zone: DropZone): void {\n if (!this.paneMoveMode) return;\n const move = this.paneMoveMode;\n this.synthesiseDragStateForKeyboardMove();\n // Source stack is also the target stack — handleDrop creates a sibling\n // split with the moved pane on the chosen side.\n this.handleDrop(move.sourcePath, zone);\n this.dragState = null;\n this.paneMoveMode = null;\n const title = this.titles[move.paneName] ?? move.paneName;\n this.liveAnnouncer.announce(`Pane ${title} docked to ${zone}.`);\n }\n\n private commitPaneMoveAsFloat(): void {\n if (!this.paneMoveMode) return;\n const move = this.paneMoveMode;\n const source = this.resolveStackLocation(move.sourcePath);\n if (!source) {\n this.paneMoveMode = null;\n return;\n }\n this.removePaneFromLocation(source, move.paneName, true);\n const floatingLayout: DockFloatingStackLayout = {\n bounds: {\n left: 100 + this.floatingLayouts.length * 24,\n top: 100 + this.floatingLayouts.length * 24,\n width: 320,\n height: 200,\n },\n root: { kind: 'stack', panes: [move.paneName], activePane: move.paneName },\n activePane: move.paneName,\n };\n this.floatingLayouts.push(floatingLayout);\n this.normalizeAllLayouts();\n this.renderLayout();\n this.dispatchLayoutChanged();\n this.paneMoveMode = null;\n const title = this.titles[move.paneName] ?? move.paneName;\n this.liveAnnouncer.announce(`Pane ${title} torn off into a floating window.`);\n }\n\n /**\n * Close a floating pane via the chrome's close button (or any external\n * caller). Announces the close to SR users, redraws the dock, and emits a\n * layout-changed event. Phase 4 of the WC ARIA PRD — the floating chrome\n * had no close affordance before this; users had to programmatically pop\n * the pane out of `floatingLayouts`.\n */\n private closeFloatingPane(index: number): void {\n const floating = this.floatingLayouts[index];\n if (!floating) return;\n const title = this.getFloatingWindowTitle(floating);\n this.removeFloatingAt(index);\n this.renderLayout();\n this.dispatchLayoutChanged();\n this.liveAnnouncer.announce(`Closed floating pane ${title}.`);\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 this.normalizeAllLayouts();\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 /**\n * Bottom-up layout sanitizer. Returns a normalized version of `node` where:\n * - Empty stacks (panes.length === 0) are dropped (returned as null).\n * - A stack's `activePane` is repaired if it no longer references one of `panes`.\n * - Splits whose direction matches a child split are flattened, with sizes\n * combined multiplicatively so the resulting on-screen pixel layout is\n * identical to the pre-merge one.\n * - Splits with 0 children become null. Splits with 1 child are unwrapped.\n *\n * Idempotent: passing the result back through this method yields the same\n * structure. Mutates the input tree in place but only returns nodes that\n * remain part of the layout.\n */\n private normalizeLayoutNode(node: DockLayoutNode | null): DockLayoutNode | null {\n if (!node) return null;\n\n if (node.kind === 'stack') {\n if (node.panes.length === 0) return null;\n if (!node.activePane || !node.panes.includes(node.activePane)) {\n node.activePane = node.panes[0];\n }\n return node;\n }\n\n const slotSizes = this.normalizeSizesArray(node.sizes, node.children.length);\n\n // Pair each child with its slot weight, drop nulls, then expand any\n // same-direction child split into its grandchildren with sizes scaled\n // multiplicatively. A 0.4 slot containing [0.3, 0.7] becomes [0.12, 0.28].\n const survivors = node.children\n .map((child, i) => ({ child: this.normalizeLayoutNode(child), slot: slotSizes[i] }))\n .filter((p): p is { child: DockLayoutNode; slot: number } => p.child !== null)\n .flatMap(({ child, slot }) => {\n if (child.kind === 'split' && child.direction === node.direction) {\n const innerSizes = this.normalizeSizesArray(child.sizes, child.children.length);\n return child.children.map((grandchild, idx) => ({\n child: grandchild,\n slot: slot * innerSizes[idx],\n }));\n }\n return [{ child, slot }];\n });\n\n if (survivors.length === 0) return null;\n if (survivors.length === 1) return survivors[0].child;\n\n node.children = survivors.map((s) => s.child);\n node.sizes = this.normalizeSizesArray(\n survivors.map((s) => s.slot),\n survivors.length,\n );\n return node;\n }\n\n /**\n * Apply `normalizeLayoutNode` to `rootLayout` and every floating window's\n * root, drop floating windows whose root collapses to null, and repair\n * stale `activePane` references on each floating window. Run this at the\n * end of every public mutation entry point (drop handlers, layout setter,\n * pane removal) so the tree the renderer sees is always in canonical form.\n */\n private normalizeAllLayouts(): void {\n this.rootLayout = this.normalizeLayoutNode(this.rootLayout);\n\n this.floatingLayouts = this.floatingLayouts\n .map((floating) => {\n floating.root = this.normalizeLayoutNode(floating.root);\n if (!floating.root) return null;\n\n const panes = this.collectPaneNames(floating.root);\n if (!floating.activePane || !panes.includes(floating.activePane)) {\n const fallback = this.findFirstPaneName(floating.root);\n if (fallback) {\n floating.activePane = fallback;\n } else {\n delete floating.activePane;\n }\n }\n return floating;\n })\n .filter((f): f is DockFloatingStackLayout => f !== null);\n }\n\n /**\n * Dev-mode integrity guard: walks every pane referenced by the current\n * layout and asserts that the rendered shadow DOM contains a matching\n * `<slot name=\"${pane}\">`. A missing slot means the layout tree got into\n * a state the renderer can't display — typically a missed normalize() call\n * or a render bug. Opt in via the `debug-layout-integrity` attribute or\n * the `debugLayoutIntegrity` property; off by default.\n */\n private verifyProjectionSlots(): void {\n if (!this.debugLayoutIntegrity) return;\n const root = this.shadowRoot;\n if (!root) return;\n\n // Collect every slot the renderer produced. Walking the rendered DOM\n // (instead of building a CSS selector per pane) sidesteps environment\n // differences — e.g. jsdom does not expose `CSS.escape`, which would\n // crash the guard during unit tests before the assertion runs.\n const slotNames = new Set(\n Array.from(root.querySelectorAll('slot'))\n .map((slot) => slot.getAttribute('name'))\n .filter((name): name is string => !!name),\n );\n\n const panes = [\n ...this.collectPaneNames(this.rootLayout),\n ...this.floatingLayouts.flatMap((f) => this.collectPaneNames(f.root)),\n ];\n\n const missing = panes.find((pane) => !slotNames.has(pane));\n if (missing) {\n throw new Error(\n `mint-dock-manager: pane \"${missing}\" has no projection slot in the shadow DOM. ` +\n `The layout tree got into a state the renderer can't display — likely a ` +\n `missing normalize() call or a render bug.`,\n );\n }\n }\n\n private dispatchLayoutChanged(): void {\n this.dispatchEvent(\n new CustomEvent('dock-layout-changed', {\n detail: this.snapshot,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private cloneLayoutNode(layout: DockLayoutNode): DockLayoutNode;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null;\n private cloneLayoutNode(layout: DockLayoutNode | null): DockLayoutNode | null {\n if (!layout) {\n return null;\n }\n\n return JSON.parse(JSON.stringify(layout)) as DockLayoutNode;\n }\n\n private cloneFloatingArray(\n layouts: DockFloatingStackLayout[],\n ): DockFloatingStackLayout[] {\n return JSON.parse(JSON.stringify(layouts)) as DockFloatingStackLayout[];\n }\n}\n\nconst tagName = 'mint-dock-manager';\n\nif (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n customElements.define(tagName, MintDockManagerElement);\n}\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n inject,\n input,\n output,\n viewChild,\n signal,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n DockLayout,\n DockLayoutNode,\n DockLayoutSnapshot,\n} from '../types/dock-layout';\nimport { BsDockPaneComponent } from './dock-pane.component';\nimport { MintDockManagerElement } from '../web-components/mint-dock-manager.element';\n\n@Component({\n selector: 'bs-dock-manager',\n templateUrl: './dock-manager.component.html',\n styleUrls: ['./dock-manager.component.scss'],\n imports: [NgTemplateOutlet],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsDockManagerComponent implements AfterViewInit {\n readonly layout = input<DockLayoutNode | DockLayout | null>(null);\n /**\n * Dev-mode integrity guard. When `true`, the inner web component throws\n * after each render if any registered pane has no projection slot in the\n * shadow DOM — a signal that the layout tree got corrupted. Off by default;\n * enable in development to catch layout-logic bugs loudly.\n */\n readonly debugLayoutIntegrity = input<boolean>(false);\n protected readonly debugLayoutIntegrityAttr = computed(() =>\n this.debugLayoutIntegrity() ? '' : null,\n );\n\n get layoutSnapshot(): DockLayoutSnapshot | null {\n if (!this._layout.root && this._layout.floating.length === 0) {\n return null;\n }\n return this.cloneLayout(this._layout);\n }\n\n readonly layoutChange = output<DockLayoutSnapshot | null>();\n readonly layoutSnapshotChange = output<DockLayoutSnapshot>();\n\n layoutString = signal<string | null>(null);\n\n readonly panes = contentChildren(BsDockPaneComponent);\n readonly managerRef = viewChild<ElementRef<MintDockManagerElement>>('manager');\n\n protected readonly trackByPane = (_: number, pane: BsDockPaneComponent) => pane.name();\n\n private _layout: DockLayoutSnapshot = { root: null, floating: [] };\n\n constructor() {\n const documentRef = inject(DOCUMENT);\n if (documentRef) {\n MintDockManagerElement.configureDocument(documentRef);\n }\n\n effect(() => {\n const value = this.layout();\n const snapshot = this.cloneLayout(this.ensureSnapshot(value));\n this._layout = snapshot;\n this.layoutString.set(this.stringifyLayout(snapshot));\n this.applyLayout();\n });\n }\n\n ngAfterViewInit(): void {\n this.applyLayout();\n }\n\n captureLayout(): DockLayoutSnapshot {\n const element = this.managerRef()?.nativeElement;\n return element?.snapshot ?? { root: null, floating: [] };\n }\n\n onLayoutChanged(event: Event): void {\n const snapshot =\n (event as CustomEvent<DockLayoutSnapshot>).detail ?? {\n root: null,\n floating: [],\n };\n this._layout = this.cloneLayout(snapshot);\n this.layoutString.set(this.stringifyLayout(this._layout));\n this.layoutChange.emit(this.layoutSnapshot);\n this.layoutSnapshotChange.emit(this.cloneLayout(snapshot));\n }\n\n private applyLayout(): void {\n const ref = this.managerRef();\n if (!ref) {\n return;\n }\n\n const element = ref.nativeElement;\n const layout = this.layoutSnapshot;\n element.layout = layout ?? null;\n }\n\n private ensureSnapshot(\n value: DockLayoutNode | DockLayout | null,\n ): DockLayoutSnapshot {\n if (!value) {\n return { root: null, floating: [], titles: {} };\n }\n\n if ('kind' in value) {\n return { root: value, floating: [], titles: {} };\n }\n\n return {\n root: value.root ?? null,\n floating: Array.isArray(value.floating) ? [...value.floating] : [],\n titles: value.titles ? { ...value.titles } : {},\n };\n }\n\n private stringifyLayout(layout: DockLayoutSnapshot): string | null {\n if (!layout.root && layout.floating.length === 0) {\n return null;\n }\n return JSON.stringify(layout);\n }\n\n private cloneLayout(layout: DockLayoutSnapshot): DockLayoutSnapshot {\n return JSON.parse(JSON.stringify(layout)) as DockLayoutSnapshot;\n }\n}\n","<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n [attr.debug-layout-integrity]=\"debugLayoutIntegrityAttr()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|