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