dockview-core 8.3.0 → 8.4.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/dist/cjs/api/component.api.d.ts +26 -1
- package/dist/cjs/dismissableLayer.d.ts +19 -7
- package/dist/cjs/dnd/droptarget.d.ts +11 -0
- package/dist/cjs/dnd/ghost.d.ts +3 -0
- package/dist/cjs/dnd/pointer/pointerDragController.d.ts +1 -0
- package/dist/cjs/dnd/pointer/pointerDragSource.d.ts +1 -0
- package/dist/cjs/dnd/pointer/pointerDropTarget.d.ts +3 -0
- package/dist/cjs/dnd/pointer/pointerGhost.d.ts +6 -2
- package/dist/cjs/dnd/pointer/types.d.ts +5 -0
- package/dist/cjs/dockview/components/titlebar/tabGroups.d.ts +12 -3
- package/dist/cjs/dockview/components/titlebar/tabReorderController.d.ts +52 -21
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +4 -0
- package/dist/cjs/dockview/dndCapabilities.d.ts +3 -4
- package/dist/cjs/dockview/dockviewComponent.d.ts +31 -16
- package/dist/cjs/dockview/dockviewShell.d.ts +12 -0
- package/dist/cjs/dockview/options.d.ts +13 -0
- package/dist/cjs/dockview/popoutWindowService.d.ts +8 -2
- package/dist/cjs/dom.d.ts +61 -1
- package/dist/cjs/gridview/branchNode.d.ts +2 -1
- package/dist/cjs/gridview/gridview.d.ts +2 -1
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/popoutWindow.d.ts +57 -12
- package/dist/cjs/resizable.d.ts +12 -0
- package/dist/cjs/splitview/splitview.d.ts +3 -1
- package/dist/dockview-core.js +880 -390
- package/dist/dockview-core.min.js +29 -4
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.noStyle.js +879 -389
- package/dist/package/main.cjs.js +879 -389
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +878 -390
- package/package.json +1 -1
package/dist/dockview-core.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* dockview-core
|
|
3
|
-
* @version 8.
|
|
3
|
+
* @version 8.4.0
|
|
4
4
|
* @link https://github.com/dockview/dockview
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
@@ -14,7 +14,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
14
14
|
//#region \0cssinject:/home/runner/work/dockview/dockview/packages/dockview-core/dist/styles/dockview.css.mjs
|
|
15
15
|
if (typeof document !== "undefined") {
|
|
16
16
|
const s = document.createElement("style");
|
|
17
|
-
s.textContent = ".dv-drop-target-container {\n position: absolute;\n z-index: 9999;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n pointer-events: none;\n overflow: hidden;\n --dv-transition-duration: 300ms;\n}\n.dv-drop-target-container .dv-drop-target-anchor {\n position: relative;\n border: var(--dv-drag-over-border);\n background-color: var(--dv-drag-over-background-color);\n opacity: 1;\n /* GPU optimizations */\n will-change: transform, opacity;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n contain: layout paint;\n transition: opacity var(--dv-transition-duration) ease-in, top var(--dv-transition-duration) ease-out, left var(--dv-transition-duration) ease-out, width var(--dv-transition-duration) ease-out, height var(--dv-transition-duration) ease-out;\n}\n.dv-drop-target {\n position: relative;\n --dv-transition-duration: 70ms;\n}\n.dv-drop-target > .dv-drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n border: var(--dv-drag-over-border);\n background-color: var(--dv-drag-over-background-color);\n transition: top var(--dv-transition-duration) ease-out, left var(--dv-transition-duration) ease-out, width var(--dv-transition-duration) ease-out, height var(--dv-transition-duration) ease-out, opacity var(--dv-transition-duration) ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n\n.dv-dnd-compass {\n z-index: 1001;\n}\n\n.dv-dnd-compass-cell {\n box-sizing: border-box;\n border-radius: 2px;\n border: 1px solid var(--dv-dnd-compass-color, #1f9cf0);\n background-color: var(--dv-dnd-compass-cell-color, rgba(31, 156, 240, 0.25));\n}\n\n.dv-dnd-compass-cell-edge {\n border-style: dashed;\n background-color: var(--dv-dnd-compass-edge-cell-color, rgba(31, 156, 240, 0.12));\n}\n\n.dv-dnd-compass-cell-active {\n background-color: var(--dv-dnd-compass-active-cell-color, rgba(31, 156, 240, 0.5));\n border-style: solid;\n}\n\n.dv-dnd-compass-edge-preview {\n z-index: 1000;\n box-sizing: border-box;\n background-color: var(--dv-drag-over-background-color);\n border: var(--dv-drag-over-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n/* Applied to the ghost tab clone during drag so it shows the same border as a focused tab */\n.dv-tab-ghost-drag {\n position: relative;\n}\n.dv-tab-ghost-drag::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n\n.dv-tab {\n flex-shrink: 0;\n}\n.dv-tab:focus-visible, .dv-tab:has(:focus-visible) {\n position: relative;\n}\n.dv-tab:focus-visible::after, .dv-tab:has(:focus-visible)::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n.dv-tab.dv-tab-dragging .dv-default-tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-tab.dv-active-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n}\n.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: hidden;\n}\n.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action {\n visibility: visible;\n}\n@media (hover: none) {\n .dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n }\n}\n.dv-tab .dv-default-tab {\n position: relative;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.dv-tab .dv-default-tab .dv-default-tab-content {\n flex-grow: 1;\n margin-right: 4px;\n}\n.dv-tab .dv-default-tab .dv-default-tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n cursor: pointer;\n}\n.dv-tab .dv-default-tab .dv-default-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n@media (pointer: coarse) {\n .dv-tab .dv-default-tab .dv-default-tab-action {\n padding: 8px;\n }\n}\n.dv-tabs-overflow-dropdown-default {\n height: 100%;\n box-sizing: border-box;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n margin: var(--dv-tab-margin);\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n}\n.dv-tabs-overflow-dropdown-default > span {\n padding-left: 0.25rem;\n}\n.dv-tabs-overflow-dropdown-default > svg {\n transform: rotate(90deg);\n}\n.dv-tabs-overflow-dropdown-default:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-tabs-container {\n display: flex;\n position: relative;\n height: 100%;\n overflow: auto;\n scrollbar-width: thin;\n /**\n * Multi-row (wrapping) tabs. Inert until the `MultiRowTabsModule` toggles\n * `.dv-tabs-container--wrap` on this element (`overflow.mode: 'wrap'`):\n * tabs wrap onto multiple rows instead of clipping into the dropdown, and\n * the strip grows to fit (the header grows via the `:has()` rule in\n * tabsContainer.scss; the free header-aware content-sizing seam then shrinks\n * the content area to match). Restricted to horizontal headers in v1.\n */\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) {\n flex-wrap: wrap;\n height: auto;\n overflow: visible;\n align-content: flex-start;\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical).dv-tabs-container--wrap-capped {\n max-height: calc(var(--dv-tabs-and-actions-container-height) * var(--dv-max-tab-rows));\n overflow: hidden;\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-before::after,\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-after::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n z-index: 10;\n pointer-events: none;\n background-color: var(--dv-drag-over-border-color);\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-before::after {\n left: 0;\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-after::after {\n right: 0;\n}\n.dv-tabs-container {\n /**\n * Multi-column (wrapping) tabs for a vertical (edge-group) header: the\n * mirror of the horizontal rule above with the axes swapped. The main axis\n * is vertical (bounded by the header height, so overflowing tabs wrap) and\n * the cross axis is horizontal (grows into additional columns). The header\n * grows in width via the `:has()` rule in tabsContainer.scss.\n *\n * Column flow direction under `writing-mode: vertical-rl` differs\n * between left and right header positions; this needs visual verification\n * in a real browser (jsdom lays out neither writing-mode nor flex-wrap).\n */\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical {\n flex-wrap: wrap;\n width: auto;\n height: 100%;\n max-height: 100%;\n overflow: visible;\n align-content: flex-start;\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: var(--dv-tabs-and-actions-container-height);\n height: var(--dv-wrap-vertical-tab-height, auto);\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical.dv-tabs-container--wrap-capped {\n max-width: calc(var(--dv-tabs-and-actions-container-height) * var(--dv-max-tab-rows));\n overflow: hidden;\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-before::after,\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-after::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n z-index: 10;\n pointer-events: none;\n background-color: var(--dv-drag-over-border-color);\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-before::after {\n top: 0;\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-after::after {\n bottom: 0;\n}\n.dv-tabs-container {\n /* GPU optimizations for smooth scrolling */\n will-change: scroll-position;\n transform: translate3d(0, 0, 0);\n /**\n * Stop scroll-chaining at the tab strip so that wheel / trackpad\n * overscroll past the strip's edges doesn't trigger the browser's\n * swipe-to-go-back-or-forward gesture (and doesn't scroll the page\n * either). `contain` keeps the native bounce visuals; `none` would\n * also disable them.\n */\n overscroll-behavior: contain;\n /**\n * Empty space between tabs (and the scrollbar lane) keeps pan-x so a\n * flick on those areas produces native momentum scroll. The tab and\n * chip elements themselves opt out (`touch-action: none`) so the\n * pointer drag source owns the gesture from pointerdown - a flick on\n * a tab or chip always becomes a drag, regardless of direction.\n */\n touch-action: pan-x;\n}\n.dv-tabs-container.dv-tabs-container-vertical {\n width: 100%;\n height: fit-content;\n max-height: 100%;\n writing-mode: vertical-rl;\n touch-action: pan-y;\n}\n.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before, .dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n}\n.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before {\n width: 1px;\n height: 100%;\n}\n.dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {\n width: 100%;\n height: 1px;\n}\n.dv-tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.dv-tabs-container {\n /* Track */\n}\n.dv-tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.dv-tabs-container {\n /* Handle */\n}\n.dv-tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n\n.dv-scrollable > .dv-tabs-container {\n overflow: hidden;\n}\n\n.dv-tab {\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n outline: none;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n font-size: var(--dv-tab-font-size);\n margin: var(--dv-tab-margin);\n touch-action: none;\n}\n.dv-tab.dv-tab--shifting {\n will-change: transform, margin-left, margin-right, margin-top, margin-bottom;\n transition: transform var(--dv-transition-duration, 200ms) ease-out, margin-left var(--dv-transition-duration, 200ms) ease-out, margin-right var(--dv-transition-duration, 200ms) ease-out, margin-top var(--dv-transition-duration, 200ms) ease-out, margin-bottom var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab.dv-tab--dragging {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab.dv-tab--group-collapsed {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab.dv-tab--group-expanding {\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n\n.dv-tab.dv-tab--pinned:has(.dv-tab-pin) {\n display: flex;\n align-items: center;\n}\n.dv-tab.dv-tab--pinned .dv-tab-pin {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n margin-right: 4px;\n opacity: 0.7;\n pointer-events: none;\n}\n.dv-tab.dv-tab--pinned .dv-tab-pin .dv-svg {\n width: 11px;\n height: 11px;\n}\n.dv-tab.dv-tab--pinned .dv-default-tab {\n min-width: 0;\n}\n.dv-tab.dv-tab--pinned .dv-default-tab-action {\n display: none;\n}\n\n.dv-tab.dv-tab--pinned-compact .dv-default-tab-content {\n display: none;\n}\n.dv-tab.dv-tab--pinned-compact .dv-tab-pin {\n margin-right: 0;\n}\n\n.dv-tabs-container:not(.dv-tabs-container--wrap):not(.dv-tabs-container-vertical) > .dv-tab.dv-tab--pinned-sticky {\n position: sticky;\n left: var(--dv-pinned-sticky-left, 0);\n z-index: 2;\n}\n\n.dv-tabs-and-actions-container.dv-tabs-and-actions-container--pinned-row {\n flex-wrap: wrap;\n height: auto;\n min-height: var(--dv-tabs-and-actions-container-height);\n align-content: flex-start;\n}\n.dv-tabs-and-actions-container.dv-tabs-and-actions-container--pinned-row .dv-pinned-row {\n flex: 0 0 100%;\n order: -1;\n}\n.dv-tabs-and-actions-container.dv-tabs-and-actions-container--pinned-row .dv-tab.dv-tab--pinned {\n display: none;\n}\n\n.dv-pinned-row {\n display: flex;\n align-items: center;\n gap: 2px;\n box-sizing: border-box;\n width: 100%;\n min-height: var(--dv-tabs-and-actions-container-height);\n padding: 2px 4px;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom: 1px solid var(--dv-tab-divider-color);\n}\n\n.dv-pinned-tab {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n box-sizing: border-box;\n padding: 0.25rem 0.5rem;\n font-size: var(--dv-tab-font-size);\n cursor: pointer;\n user-select: none;\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-pinned-tab.dv-pinned-tab--active {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-pinned-tab .dv-pinned-tab-label {\n max-width: 120px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.dv-pinned-tab .dv-pinned-tab-unpin {\n flex-shrink: 0;\n opacity: 0.6;\n}\n.dv-pinned-tab .dv-pinned-tab-unpin:hover {\n opacity: 1;\n}\n.dv-pinned-tab.dv-pinned-tab--dragging {\n opacity: 0.5;\n}\n.dv-pinned-tab.dv-pinned-tab--drop-before, .dv-pinned-tab.dv-pinned-tab--drop-after {\n position: relative;\n}\n.dv-pinned-tab.dv-pinned-tab--drop-before::after, .dv-pinned-tab.dv-pinned-tab--drop-after::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n z-index: 10;\n pointer-events: none;\n background-color: var(--dv-drag-over-border-color);\n}\n.dv-pinned-tab.dv-pinned-tab--drop-before::after {\n left: 0;\n}\n.dv-pinned-tab.dv-pinned-tab--drop-after::after {\n right: 0;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .dv-tab {\n transition: none !important;\n }\n .dv-tab-group-chip {\n transition: none !important;\n }\n}\n.dv-tab-group-chip {\n display: inline-flex;\n align-items: center;\n align-self: center;\n padding: var(--dv-tab-group-chip-padding);\n margin: 0 8px 0 8px;\n border-radius: var(--dv-tab-group-chip-border-radius);\n font-size: var(--dv-tab-group-chip-font-size);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n box-sizing: border-box;\n line-height: 1;\n touch-action: none;\n background-color: var(--dv-tab-group-color);\n color: white;\n}\n.dv-tab-group-chip.dv-tab-group-chip--accent-off {\n background-color: transparent;\n color: inherit;\n}\n.dv-tab-group-chip.dv-tab-group-chip--shifting {\n will-change: margin-left;\n transition: margin-left var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab-group-chip.dv-tab-group-chip--dragging {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab-group-chip .dv-tab-group-chip-label--empty {\n display: none;\n}\n.dv-tab-group-chip:has(.dv-tab-group-chip-label--empty) {\n position: relative;\n width: 12px;\n height: 12px;\n padding: 0;\n border-radius: 50%;\n}\n.dv-tab-group-chip:has(.dv-tab-group-chip-label--empty)::before {\n content: \"\";\n position: absolute;\n inset: -8px;\n}\n\n.dv-tab-group-underline {\n position: absolute;\n bottom: 0;\n opacity: var(--dv-tab-group-line-opacity);\n pointer-events: none;\n z-index: 10;\n}\n\n.dv-tab-group-chip-continuation {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n opacity: var(--dv-tab-group-line-opacity);\n pointer-events: none;\n z-index: 10;\n}\n\n.dv-groupview-header-bottom .dv-tab-group-underline {\n bottom: auto;\n top: 0;\n}\n\n.dv-tabs-container-vertical .dv-tab-group-underline {\n bottom: auto;\n left: 0;\n}\n\n.dv-tabs-container-vertical .dv-tab-group-chip {\n margin: 8px 0 8px 0;\n}\n.dv-tabs-container-vertical .dv-tab {\n padding: 0.5rem 0.25rem;\n}\n.dv-tabs-container-vertical .dv-tab.dv-tab--group-collapsed {\n height: 0 !important;\n min-height: 0 !important;\n width: auto !important;\n min-width: initial !important;\n transition: height var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tabs-container-vertical .dv-tab.dv-tab--group-expanding {\n transition: height var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tabs-container-vertical .dv-tab.dv-tab--dragging {\n height: 0 !important;\n min-height: 0 !important;\n width: auto !important;\n min-width: initial !important;\n transition: height var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n\n.dv-tabs-overflow-container {\n flex-direction: column;\n height: unset;\n font-size: var(--dv-tabs-and-actions-container-font-size);\n max-height: min(50vh, 400px);\n overflow-y: auto;\n border: 1px solid var(--dv-tab-divider-color);\n background-color: var(--dv-group-view-background-color);\n /* Scrollbar styling for webkit browsers */\n}\n.dv-tabs-overflow-container::-webkit-scrollbar {\n width: 6px;\n}\n.dv-tabs-overflow-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.dv-tabs-overflow-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n border-radius: 3px;\n}\n.dv-tabs-overflow-container {\n /* Firefox scrollbar */\n scrollbar-width: thin;\n}\n.dv-tabs-overflow-container .dv-tab:not(:last-child) {\n border-bottom: 1px solid var(--dv-tab-divider-color);\n}\n.dv-tabs-overflow-container .dv-active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-tabs-overflow-container .dv-inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n font-size: 0.8em;\n font-weight: 600;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n cursor: pointer;\n border-bottom: 1px solid var(--dv-tab-divider-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-header:hover {\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-color {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: var(--dv-tab-group-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-label {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-collapsed-badge {\n font-size: 0.75em;\n font-weight: 400;\n opacity: 0.7;\n padding: 1px 4px;\n border-radius: 3px;\n background-color: var(--dv-tab-divider-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header {\n cursor: default;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header:hover {\n background-color: transparent;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header .dv-tabs-overflow-pinned-icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n opacity: 0.7;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header .dv-tabs-overflow-pinned-icon .dv-svg {\n width: 11px;\n height: 11px;\n}\n.dv-tabs-overflow-container .dv-tab.dv-tab--grouped {\n padding-left: 16px;\n}\n\n/*\n * Advanced overflow popover (AdvancedOverflowModule): the same container as the\n * free list, upgraded in place with a search input, a scrollable listbox, and a\n * keyboard-highlighted active row. Styles live in core so the module ships no\n * CSS; they are inert unless the module renders this body.\n */\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced {\n min-width: 220px;\n}\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced .dv-tabs-overflow-search {\n box-sizing: border-box;\n width: 100%;\n padding: 6px 8px;\n border: none;\n border-bottom: 1px solid var(--dv-tab-divider-color);\n outline: none;\n font-size: inherit;\n font-family: inherit;\n color: var(--dv-activegroup-visiblepanel-tab-color);\n background-color: var(--dv-group-view-background-color);\n}\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced .dv-tabs-overflow-list {\n display: flex;\n flex-direction: column;\n outline: none;\n}\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced .dv-tab.dv-tabs-overflow-option--focused {\n outline: 1px solid var(--dv-tab-divider-color);\n outline-offset: -1px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n /**\n * Multi-row (wrapping) tabs: when the tab list wraps onto multiple rows\n * (`.dv-tabs-container--wrap`, toggled by the `MultiRowTabsModule`), the\n * header grows to fit instead of clipping. Inert otherwise: the single-row\n * fixed height above is unchanged.\n */\n}\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) {\n height: auto;\n min-height: var(--dv-tabs-and-actions-container-height);\n align-items: flex-start;\n}\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-pre-actions-container,\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-left-actions-container,\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-right-actions-container,\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-void-container {\n height: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-scrollable {\n flex-grow: 1;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container {\n flex-grow: 1;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab {\n flex-grow: 1;\n padding: 0px;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-void-container {\n flex-grow: 0;\n}\n.dv-tabs-and-actions-container .dv-void-container {\n display: flex;\n flex-grow: 1;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.dv-tabs-and-actions-container .dv-void-container.dv-draggable {\n cursor: grab;\n}\n.dv-tabs-and-actions-container .dv-right-actions-container {\n display: flex;\n}\n.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical {\n flex-direction: column;\n}\n.dv-tabs-and-actions-container.dv-groupview-header-vertical {\n flex-direction: column;\n height: auto;\n width: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-and-actions-container.dv-groupview-header-vertical:has(.dv-tabs-container--wrap) {\n width: auto;\n min-width: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-and-actions-container.dv-groupview-header-vertical:has(.dv-tabs-container--wrap) > .dv-scrollable {\n align-self: stretch;\n}\n.dv-watermark {\n display: flex;\n height: 100%;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n.dv-dockview .dv-overlay-render-container {\n position: relative;\n}\n\n.dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.dv-tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n\n.dv-keyboard-docking-hint {\n position: absolute;\n left: 50%;\n bottom: 8px;\n transform: translateX(-50%);\n z-index: 100;\n max-width: 90%;\n padding: 4px 10px;\n border-radius: 4px;\n font-size: 12px;\n line-height: 1.4;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n background-color: var(--dv-context-menu-background-color, var(--dv-group-view-background-color));\n color: var(--dv-activegroup-visiblepanel-tab-color);\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);\n}\n.dv-groupview {\n display: flex;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n flex-direction: column;\n}\n.dv-groupview:focus {\n outline: none;\n}\n.dv-groupview > .dv-content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.dv-groupview.dv-groupview-header-bottom {\n flex-direction: column-reverse;\n}\n.dv-groupview.dv-groupview-header-left {\n flex-direction: row;\n}\n.dv-groupview.dv-groupview-header-right {\n flex-direction: row-reverse;\n}\n.dv-groupview.dv-groupview-edge.dv-edge-collapsed > .dv-content-container {\n display: none;\n}\n.dv-root-wrapper {\n height: 100%;\n width: 100%;\n}\n.dv-grid-view,\n.dv-branch-node {\n height: 100%;\n width: 100%;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-floating-overlay-host {\n position: absolute;\n pointer-events: none;\n}\n.dv-floating-overlay-host > .dv-resize-container {\n pointer-events: auto;\n}\n\n.dv-edge-peek {\n background-color: var(--dv-group-view-background-color);\n border: 1px solid var(--dv-separator-border);\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);\n}\n.dv-edge-peek > * {\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n.dv-auto-edge-band {\n position: absolute;\n pointer-events: none;\n z-index: var(--dv-overlay-z-index, 999);\n background-color: var(--dv-edge-dock-indicator-color);\n box-shadow: 0 0 6px var(--dv-edge-dock-indicator-color);\n}\n\n.dv-edge-peek-header {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 0 4px 0 8px;\n box-sizing: border-box;\n background-color: var(--dv-group-view-background-color);\n border: 1px solid var(--dv-separator-border);\n border-bottom: none;\n color: var(--dv-activegroup-visiblepanel-tab-color);\n font-size: 12px;\n}\n.dv-edge-peek-header .dv-edge-peek-pin,\n.dv-edge-peek-header .dv-edge-peek-close {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n border: none;\n padding: 4px;\n color: inherit;\n background: transparent;\n outline: none;\n}\n.dv-edge-peek-header .dv-edge-peek-pin:hover,\n.dv-edge-peek-header .dv-edge-peek-close:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-edge-peek-header .dv-edge-peek-pin:focus-visible,\n.dv-edge-peek-header .dv-edge-peek-close:focus-visible {\n border-radius: 2px;\n outline: 1px solid var(--dv-tab-divider-color);\n outline-offset: -1px;\n}\n\n.dv-edge-peek-title {\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.dv-resize-container > .dv-grid-view {\n width: 100%;\n height: 100%;\n}\n\n.dv-resize-container-with-titlebar {\n display: flex;\n flex-direction: column;\n}\n.dv-resize-container-with-titlebar > .dv-floating-titlebar {\n flex: 0 0 auto;\n}\n.dv-resize-container-with-titlebar > .dv-grid-view {\n height: auto;\n flex: 1 1 0;\n min-height: 0;\n}\n\n.dv-floating-titlebar {\n box-sizing: border-box;\n flex-shrink: 0;\n height: var(--dv-floating-titlebar-height, 22px);\n background-color: var(--dv-floating-titlebar-background-color);\n border-bottom: var(--dv-floating-titlebar-border-bottom, none);\n user-select: none;\n touch-action: none;\n}\n.dv-floating-titlebar.dv-draggable {\n cursor: grab;\n}\n\n.dv-resize-container {\n --dv-overlay-z-index: var(--dv-overlay-z-index, 999);\n position: absolute;\n z-index: calc(var(--dv-overlay-z-index) - 2);\n background-color: var(--dv-group-view-background-color);\n border: var(--dv-floating-border);\n box-shadow: var(--dv-floating-box-shadow);\n /* GPU optimizations for floating group movement */\n will-change: transform, opacity;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n}\n.dv-resize-container.dv-hidden {\n display: none;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: var(--dv-floating-group-dragging-opacity);\n /* Enhanced GPU acceleration during drag */\n will-change: transform, opacity;\n}\n.dv-resize-container .dv-resize-handle-top,\n.dv-resize-container .dv-resize-handle-bottom,\n.dv-resize-container .dv-resize-handle-left,\n.dv-resize-container .dv-resize-handle-right,\n.dv-resize-container .dv-resize-handle-topleft,\n.dv-resize-container .dv-resize-handle-topright,\n.dv-resize-container .dv-resize-handle-bottomleft,\n.dv-resize-container .dv-resize-handle-bottomright {\n touch-action: none;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: se-resize;\n}\n@media (pointer: coarse) {\n .dv-resize-container .dv-resize-handle-top,\n .dv-resize-container .dv-resize-handle-bottom {\n height: 16px;\n width: calc(100% - 48px);\n left: 24px;\n }\n .dv-resize-container .dv-resize-handle-top {\n top: -10px;\n }\n .dv-resize-container .dv-resize-handle-bottom {\n bottom: -10px;\n }\n .dv-resize-container .dv-resize-handle-left,\n .dv-resize-container .dv-resize-handle-right {\n width: 16px;\n height: calc(100% - 48px);\n top: 24px;\n }\n .dv-resize-container .dv-resize-handle-left {\n left: -10px;\n }\n .dv-resize-container .dv-resize-handle-right {\n right: -10px;\n }\n .dv-resize-container .dv-resize-handle-topleft,\n .dv-resize-container .dv-resize-handle-topright,\n .dv-resize-container .dv-resize-handle-bottomleft,\n .dv-resize-container .dv-resize-handle-bottomright {\n height: 24px;\n width: 24px;\n }\n .dv-resize-container .dv-resize-handle-topleft {\n top: -12px;\n left: -12px;\n }\n .dv-resize-container .dv-resize-handle-topright {\n top: -12px;\n right: -12px;\n }\n .dv-resize-container .dv-resize-handle-bottomleft {\n bottom: -12px;\n left: -12px;\n }\n .dv-resize-container .dv-resize-handle-bottomright {\n bottom: -12px;\n right: -12px;\n }\n}\n\n.dv-smart-guides {\n pointer-events: none;\n z-index: calc(var(--dv-overlay-z-index, 999) + 100);\n}\n\n.dv-smart-guide {\n background-color: var(--dv-smart-guides-color, #1f9cf0);\n}\n\n.dv-smart-guide-preview {\n box-sizing: border-box;\n background-color: var(--dv-smart-guides-preview-color, rgba(31, 156, 240, 0.18));\n border: 1px solid var(--dv-smart-guides-color, #1f9cf0);\n}\n.dv-render-overlay {\n --dv-overlay-z-index: var(--dv-overlay-z-index, 999);\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n contain: layout paint;\n isolation: isolate;\n /* GPU optimizations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: calc(var(--dv-overlay-z-index) - 1);\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dv-pane-container {\n height: 100%;\n width: 100%;\n}\n.dv-pane-container.dv-animated .dv-view {\n /* GPU optimizations for smooth pane animations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition: transform 0.15s ease-out;\n}\n.dv-pane-container .dv-view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.dv-pane-container .dv-view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.dv-pane-container .dv-view:not(:first-child) .dv-pane > .dv-pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.dv-pane-container .dv-view .dv-default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.dv-pane-container .dv-view .dv-default-header .dv-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.dv-pane-container .dv-view .dv-default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.dv-pane-container:first-of-type > .dv-pane > .dv-pane-header {\n border-top: none !important;\n}\n.dv-pane-container .dv-pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.dv-pane-container .dv-pane .dv-pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.dv-pane-container .dv-pane .dv-pane-header.dv-pane-draggable {\n cursor: pointer;\n}\n.dv-pane-container .dv-pane .dv-pane-header:focus-visible:before, .dv-pane-container .dv-pane .dv-pane-header:has(:focus-visible):before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-pane-container .dv-pane .dv-pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.dv-pane-container .dv-pane .dv-pane-body:focus-visible:before, .dv-pane-container .dv-pane .dv-pane-body:has(:focus-visible):before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-scrollable {\n position: relative;\n overflow: hidden;\n}\n.dv-scrollable .dv-scrollbar {\n position: absolute;\n border-radius: 2px;\n background-color: transparent;\n /* GPU optimizations */\n will-change: background-color, transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition-property: background-color;\n transition-timing-function: ease-in-out;\n transition-duration: 1s;\n transition-delay: 0s;\n}\n.dv-scrollable .dv-scrollbar-horizontal {\n bottom: 0px;\n left: 0px;\n height: 4px;\n}\n.dv-scrollable .dv-scrollbar-vertical {\n right: 0px;\n top: 0px;\n width: 4px;\n}\n.dv-scrollable:hover .dv-scrollbar, .dv-scrollable.dv-scrollable-resizing .dv-scrollbar, .dv-scrollable.dv-scrollable-scrolling .dv-scrollbar {\n background-color: var(--dv-scrollbar-background-color, rgba(255, 255, 255, 0.25));\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-enabled {\n background-color: black;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-disabled {\n background-color: orange;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-maximum {\n background-color: green;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-minimum {\n background-color: red;\n}\n\n.dv-split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.dv-split-view-container.dv-splitview-disabled > .dv-sash-container > .dv-sash {\n pointer-events: none;\n}\n.dv-split-view-container.dv-animation .dv-view,\n.dv-split-view-container.dv-animation .dv-sash {\n /* GPU optimizations for smooth animations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition: transform 0.15s ease-out;\n}\n.dv-split-view-container.dv-horizontal {\n height: 100%;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash {\n height: 100%;\n width: 4px;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-enabled {\n cursor: ew-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-disabled {\n cursor: default;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-maximum {\n cursor: w-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-minimum {\n cursor: e-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-view-container > .dv-view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.dv-split-view-container.dv-vertical {\n width: 100%;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash {\n width: 100%;\n height: 4px;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-enabled {\n cursor: ns-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-disabled {\n cursor: default;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-maximum {\n cursor: n-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-minimum {\n cursor: s-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-view-container > .dv-view {\n width: 100%;\n}\n.dv-split-view-container.dv-vertical > .dv-view-container > .dv-view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.dv-split-view-container .dv-sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.dv-split-view-container .dv-sash-container .dv-sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n background-color: var(--dv-sash-color, transparent);\n}\n.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):active, .dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition-property: background-color;\n transition-timing-function: ease-in-out;\n transition-duration: var(--dv-active-sash-transition-duration, 0.1s);\n transition-delay: var(--dv-active-sash-transition-delay, 0.5s);\n}\n@media (pointer: coarse) {\n .dv-split-view-container .dv-sash-container > .dv-sash:not(.dv-disabled)::before {\n content: \"\";\n position: absolute;\n background: transparent;\n }\n .dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {\n top: 0;\n bottom: 0;\n left: -10px;\n right: -10px;\n }\n .dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {\n left: 0;\n right: 0;\n top: -10px;\n bottom: -10px;\n }\n}\n.dv-split-view-container .dv-view-container {\n position: relative;\n height: 100%;\n width: 100%;\n}\n.dv-split-view-container .dv-view-container .dv-view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.dv-split-view-container.dv-separator-border .dv-view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-dark {\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-light {\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-scrollbar-background-color: rgba(0, 0, 0, 0.25);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.dockview-theme-vs {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-vs .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-vs {\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tab.dv-active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tab.dv-inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tab.dv-active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tab.dv-inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-abyss .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-abyss {\n --dv-color-abyss-dark: #000c18;\n --dv-color-abyss: #10192c;\n --dv-color-abyss-light: #1c1c2a;\n --dv-color-abyss-lighter: #2b2b4a;\n --dv-color-abyss-accent: rgb(91, 30, 207);\n --dv-color-abyss-primary-text: white;\n --dv-color-abyss-secondary-text: rgb(148, 151, 169);\n --dv-group-view-background-color: var(--dv-color-abyss-dark);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-abyss-light\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-dark\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-dark\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);\n --dv-tab-divider-color: var(--dv-color-abyss-lighter);\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: var(--dv-color-abyss-lighter);\n --dv-paneview-header-border-color: var(--dv-color-abyss-lighter);\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-dracula .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-dracula {\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-dracula .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-dracula .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-nord {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-nord .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-nord {\n --dv-color-nord-polar-0: #2e3440;\n --dv-color-nord-polar-1: #3b4252;\n --dv-color-nord-polar-2: #434c5e;\n --dv-color-nord-polar-3: #4c566a;\n --dv-color-nord-frost: #88c0d0;\n --dv-color-nord-frost-2: #81a1c1;\n --dv-color-nord-snow-0: #eceff4;\n --dv-color-nord-snow-1: #d8dee9;\n --dv-group-view-background-color: var(--dv-color-nord-polar-0);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-0\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-nord-snow-0);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-nord-snow-1);\n --dv-inactivegroup-visiblepanel-tab-color: #8a9bbf;\n --dv-inactivegroup-hiddenpanel-tab-color: #5e6f8e;\n --dv-separator-border: var(--dv-color-nord-polar-3);\n --dv-paneview-active-outline-color: var(--dv-color-nord-frost);\n --dv-active-sash-color: var(--dv-color-nord-frost);\n --dv-scrollbar-background-color: rgba(76, 86, 106, 0.5);\n}\n.dockview-theme-nord .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-nord .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-nord-frost);\n z-index: 999;\n}\n.dockview-theme-nord .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-nord .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-nord-frost-2);\n z-index: 999;\n}\n\n.dockview-theme-nord-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-nord-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-nord-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-nord-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-nord-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-nord-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-nord-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-nord-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-nord-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-nord-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-tabs-overflow-container,\n.dockview-theme-nord-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-nord-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-nord-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-nord-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-nord-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-nord-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-nord-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-nord-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-nord-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced {\n --dv-color-nord-polar-0: #2e3440;\n --dv-color-nord-polar-1: #3b4252;\n --dv-color-nord-polar-2: #434c5e;\n --dv-color-nord-polar-3: #4c566a;\n --dv-color-nord-frost: #88c0d0;\n --dv-color-nord-frost-2: #81a1c1;\n --dv-color-nord-snow-0: #eceff4;\n --dv-color-nord-snow-1: #d8dee9;\n --dv-group-view-background-color: var(--dv-color-nord-polar-0);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-nord-snow-0);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-nord-snow-1);\n --dv-inactivegroup-visiblepanel-tab-color: #8a9bbf;\n --dv-inactivegroup-hiddenpanel-tab-color: #5e6f8e;\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-nord-frost);\n --dv-active-sash-color: var(--dv-color-nord-frost);\n --dv-scrollbar-background-color: rgba(76, 86, 106, 0.5);\n --dv-floating-group-border: 2px solid var(--dv-color-nord-polar-0);\n}\n\n.dockview-theme-catppuccin-mocha {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-catppuccin-mocha .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-catppuccin-mocha {\n --dv-color-mocha-crust: #11111b;\n --dv-color-mocha-mantle: #181825;\n --dv-color-mocha-base: #1e1e2e;\n --dv-color-mocha-surface0: #313244;\n --dv-color-mocha-surface1: #45475a;\n --dv-color-mocha-text: #cdd6f4;\n --dv-color-mocha-subtext1: #bac2de;\n --dv-color-mocha-subtext0: #a6adc8;\n --dv-color-mocha-mauve: #cba6f7;\n --dv-color-mocha-lavender: #b4befe;\n --dv-group-view-background-color: var(--dv-color-mocha-base);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-base\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-surface0\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-crust\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-mocha-text);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-mocha-subtext1);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-mocha-subtext0);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(166, 173, 200, 0.5);\n --dv-separator-border: var(--dv-color-mocha-surface1);\n --dv-paneview-active-outline-color: var(--dv-color-mocha-mauve);\n --dv-active-sash-color: var(--dv-color-mocha-mauve);\n --dv-scrollbar-background-color: rgba(49, 50, 68, 0.8);\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-mocha-mauve);\n z-index: 999;\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: rgba(180, 190, 254, 0.4);\n z-index: 999;\n}\n\n.dockview-theme-catppuccin-mocha-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-overflow-container,\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced {\n --dv-color-mocha-crust: #11111b;\n --dv-color-mocha-mantle: #181825;\n --dv-color-mocha-base: #1e1e2e;\n --dv-color-mocha-surface0: #313244;\n --dv-color-mocha-surface1: #45475a;\n --dv-color-mocha-text: #cdd6f4;\n --dv-color-mocha-subtext1: #bac2de;\n --dv-color-mocha-subtext0: #a6adc8;\n --dv-color-mocha-mauve: #cba6f7;\n --dv-color-mocha-lavender: #b4befe;\n --dv-group-view-background-color: var(--dv-color-mocha-crust);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-surface0\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-surface0\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-mocha-text);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-mocha-subtext1);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-mocha-subtext0);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(166, 173, 200, 0.5);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-mocha-mauve);\n --dv-active-sash-color: var(--dv-color-mocha-mauve);\n --dv-scrollbar-background-color: rgba(49, 50, 68, 0.8);\n --dv-floating-group-border: 2px solid var(--dv-color-mocha-crust);\n}\n\n.dockview-theme-monokai {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-monokai .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-monokai {\n --dv-color-monokai-bg: #272822;\n --dv-color-monokai-bg-light: #3e3d32;\n --dv-color-monokai-comment: #75715e;\n --dv-color-monokai-fg: #f8f8f2;\n --dv-color-monokai-green: #a6e22e;\n --dv-group-view-background-color: var(--dv-color-monokai-bg);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-monokai-bg-light\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-monokai-bg\n );\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2c25;\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-monokai-bg\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2c25;\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-monokai-fg);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-monokai-comment);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(117, 113, 94, 0.5);\n --dv-separator-border: var(--dv-color-monokai-bg-light);\n --dv-paneview-active-outline-color: var(--dv-color-monokai-green);\n --dv-active-sash-color: var(--dv-color-monokai-green);\n --dv-scrollbar-background-color: rgba(117, 113, 94, 0.5);\n}\n.dockview-theme-monokai .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-monokai .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-monokai-green);\n z-index: 999;\n}\n.dockview-theme-monokai .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-monokai .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: rgba(166, 226, 46, 0.35);\n z-index: 999;\n}\n\n.dockview-theme-solarized-light {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-solarized-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-solarized-light {\n --dv-color-sol-base3: #fdf6e3;\n --dv-color-sol-base2: #eee8d5;\n --dv-color-sol-base1: #93a1a1;\n --dv-color-sol-base00: #657b83;\n --dv-color-sol-base01: #586e75;\n --dv-color-sol-blue: #268bd2;\n --dv-group-view-background-color: var(--dv-color-sol-base3);\n --dv-tabs-and-actions-container-background-color: var(--dv-color-sol-base2);\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-activegroup-hiddenpanel-tab-background-color: #e8e2d0;\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: #e8e2d0;\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-sol-base01);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-sol-base00);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-sol-base1);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(147, 161, 161, 0.6);\n --dv-separator-border: var(--dv-color-sol-base2);\n --dv-paneview-active-outline-color: var(--dv-color-sol-blue);\n --dv-active-sash-color: var(--dv-color-sol-blue);\n --dv-scrollbar-background-color: rgba(101, 123, 131, 0.25);\n --dv-drag-over-background-color: rgba(38, 139, 210, 0.15);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.dockview-theme-solarized-light-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-solarized-light-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-solarized-light-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-solarized-light-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-overflow-container,\n.dockview-theme-solarized-light-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-solarized-light-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-solarized-light-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-solarized-light-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-solarized-light-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced {\n --dv-color-sol-base3: #fdf6e3;\n --dv-color-sol-base2: #eee8d5;\n --dv-color-sol-base1: #93a1a1;\n --dv-color-sol-base00: #657b83;\n --dv-color-sol-base01: #586e75;\n --dv-color-sol-blue: #268bd2;\n --dv-drag-over-background-color: rgba(38, 139, 210, 0.1);\n --dv-group-view-background-color: var(--dv-color-sol-base2);\n --dv-tabs-and-actions-container-background-color: var(--dv-color-sol-base3);\n --dv-activegroup-visiblepanel-tab-background-color: #e8e2d0;\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: #e8e2d0;\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-sol-base01);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-sol-base00);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-sol-base1);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(147, 161, 161, 0.6);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-sol-blue);\n --dv-active-sash-color: var(--dv-color-sol-blue);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n --dv-scrollbar-background-color: rgba(101, 123, 131, 0.25);\n --dv-floating-group-border: 2px solid rgba(238, 232, 213, 0.5);\n}\n\n.dockview-theme-github-dark {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-github-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-github-dark {\n --dv-color-gh-canvas-default: #0d1117;\n --dv-color-gh-canvas-subtle: #161b22;\n --dv-color-gh-canvas-inset: #010409;\n --dv-color-gh-border: #30363d;\n --dv-color-gh-border-muted: #21262d;\n --dv-color-gh-fg-default: #e6edf3;\n --dv-color-gh-fg-muted: #8b949e;\n --dv-color-gh-fg-subtle: #6e7681;\n --dv-color-gh-accent: #58a6ff;\n --dv-group-view-background-color: var(--dv-color-gh-canvas-default);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-canvas-default\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-canvas-default\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-default);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-subtle);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.5);\n --dv-separator-border: var(--dv-color-gh-border);\n --dv-paneview-active-outline-color: var(--dv-color-gh-accent);\n --dv-active-sash-color: var(--dv-color-gh-accent);\n --dv-scrollbar-background-color: rgba(48, 54, 61, 0.7);\n --dv-drag-over-background-color: rgba(88, 166, 255, 0.15);\n}\n\n.dockview-theme-github-dark-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-github-dark-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-github-dark-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-github-dark-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-github-dark-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-github-dark-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-github-dark-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-github-dark-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-github-dark-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-tabs-overflow-container,\n.dockview-theme-github-dark-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-github-dark-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-github-dark-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-dark-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-github-dark-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-dark-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-github-dark-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-github-dark-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced {\n --dv-color-gh-canvas-default: #0d1117;\n --dv-color-gh-canvas-subtle: #161b22;\n --dv-color-gh-canvas-inset: #010409;\n --dv-color-gh-border: #30363d;\n --dv-color-gh-border-muted: #21262d;\n --dv-color-gh-fg-default: #e6edf3;\n --dv-color-gh-fg-muted: #8b949e;\n --dv-color-gh-fg-subtle: #6e7681;\n --dv-color-gh-accent: #58a6ff;\n --dv-drag-over-background-color: rgba(88, 166, 255, 0.1);\n --dv-group-view-background-color: var(--dv-color-gh-canvas-inset);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-border\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-border\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-default);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-subtle);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.5);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-gh-accent);\n --dv-active-sash-color: var(--dv-color-gh-accent);\n --dv-scrollbar-background-color: rgba(48, 54, 61, 0.7);\n --dv-floating-group-border: 2px solid var(--dv-color-gh-canvas-inset);\n}\n\n.dockview-theme-github-light {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-github-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-github-light {\n --dv-color-gh-light-canvas-default: #ffffff;\n --dv-color-gh-light-canvas-subtle: #f6f8fa;\n --dv-color-gh-light-canvas-inset: #f0f6ff;\n --dv-color-gh-light-border: #d0d7de;\n --dv-color-gh-light-fg-default: #1f2328;\n --dv-color-gh-light-fg-muted: #656d76;\n --dv-color-gh-light-fg-subtle: #6e7781;\n --dv-color-gh-light-accent: #0969da;\n --dv-group-view-background-color: var(--dv-color-gh-light-canvas-default);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-light-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-subtle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-default\n );\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-light-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-subtle\n );\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.4);\n --dv-separator-border: var(--dv-color-gh-light-border);\n --dv-paneview-active-outline-color: var(--dv-color-gh-light-accent);\n --dv-active-sash-color: var(--dv-color-gh-light-accent);\n --dv-scrollbar-background-color: rgba(208, 215, 222, 0.5);\n --dv-drag-over-background-color: rgba(9, 105, 218, 0.1);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.dockview-theme-github-light-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-github-light-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-github-light-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-github-light-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-github-light-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-github-light-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-github-light-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-github-light-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-github-light-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-tabs-overflow-container,\n.dockview-theme-github-light-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-github-light-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-github-light-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-light-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-github-light-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-light-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-github-light-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-github-light-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced {\n --dv-color-gh-light-canvas-default: #ffffff;\n --dv-color-gh-light-canvas-subtle: #f6f8fa;\n --dv-color-gh-light-border: #d0d7de;\n --dv-color-gh-light-fg-default: #1f2328;\n --dv-color-gh-light-fg-muted: #656d76;\n --dv-color-gh-light-fg-subtle: #6e7781;\n --dv-color-gh-light-accent: #0969da;\n --dv-drag-over-background-color: rgba(9, 105, 218, 0.08);\n --dv-group-view-background-color: var(--dv-color-gh-light-canvas-subtle);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-border\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-border\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-activegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-default\n );\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-light-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-subtle\n );\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.4);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-gh-light-accent);\n --dv-active-sash-color: var(--dv-color-gh-light-accent);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n --dv-scrollbar-background-color: rgba(208, 215, 222, 0.5);\n --dv-floating-group-border: 2px solid rgba(208, 215, 222, 0.5);\n}\n\n.dockview-theme-abyss-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-abyss-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-abyss-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-abyss-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-abyss-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-abyss-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-abyss-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-abyss-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-abyss-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-tabs-overflow-container,\n.dockview-theme-abyss-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-abyss-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-abyss-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-abyss-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-abyss-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-abyss-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-abyss-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced {\n --dv-color-abyss-dark: rgb(11, 6, 17);\n --dv-color-abyss: #16121f;\n --dv-color-abyss-light: #201d2b;\n --dv-color-abyss-lighter: #2a2837;\n --dv-color-abyss-accent: rgb(91, 30, 207);\n --dv-color-abyss-primary-text: white;\n --dv-color-abyss-secondary-text: rgb(148, 151, 169);\n --dv-drag-over-background-color: '';\n --dv-group-view-background-color: var(--dv-color-abyss-dark);\n --dv-tabs-and-actions-container-background-color: var(--dv-color-abyss);\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-lighter\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-abyss-light\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-lighter\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-abyss-light\n );\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-abyss-primary-text);\n --dv-activegroup-hiddenpanel-tab-color: var(\n --dv-color-abyss-secondary-text\n );\n --dv-inactivegroup-visiblepanel-tab-color: var(\n --dv-color-abyss-primary-text\n );\n --dv-inactivegroup-hiddenpanel-tab-color: var(\n --dv-color-abyss-secondary-text\n );\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-active-sash-color: var(--dv-color-abyss-accent);\n --dv-floating-group-border: 2px solid var(--dv-color-abyss-dark);\n}\n\n.dockview-theme-light-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-light-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-light-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-light-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-light-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-light-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-light-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-light-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-light-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-light-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-tabs-overflow-container,\n.dockview-theme-light-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-light-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-light-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-light-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-light-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-light-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-light-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-light-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-light-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced {\n --dv-drag-over-background-color: '';\n --dv-group-view-background-color: #f6f5f9;\n --dv-tabs-and-actions-container-background-color: white;\n --dv-activegroup-visiblepanel-tab-background-color: #ededf0;\n --dv-activegroup-hiddenpanel-tab-background-color: #f9f9fa;\n --dv-inactivegroup-visiblepanel-tab-background-color: #ededf0;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #f9f9fa;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(104, 107, 130);\n --dv-activegroup-hiddenpanel-tab-color: rgb(148, 151, 169);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(104, 107, 130);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(148, 151, 169);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-active-sash-color: rgb(91, 30, 207);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n --dv-scrollbar-background-color: rgba(0, 0, 0, 0.25);\n --dv-floating-group-border: 2px solid rgba(255, 255, 255, 0.1);\n}\n\n.dockview-spaced {\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-tabs-overflow-container,\n.dockview-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n\n.dv-context-menu {\n min-width: 160px;\n overflow: hidden;\n background: var(--dv-context-menu-background-color, var(--dv-activegroup-hiddenpanel-tab-background-color));\n color: var(--dv-context-menu-color, var(--dv-activegroup-hiddenpanel-tab-color));\n border: 1px solid var(--dv-tab-divider-color);\n border-radius: var(--dv-border-radius);\n box-shadow: var(--dv-floating-box-shadow);\n padding: 4px 0;\n}\n\n.dv-context-menu-item {\n height: 25px;\n padding: 0 12px;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-size: var(--dv-tabs-and-actions-container-font-size);\n white-space: nowrap;\n user-select: none;\n}\n.dv-context-menu-item:hover {\n background: var(--dv-icon-hover-background-color);\n}\n.dv-context-menu-item.dv-context-menu-item--disabled {\n opacity: 0.4;\n cursor: default;\n pointer-events: none;\n}\n\n.dv-context-menu-separator {\n height: 1px;\n background: var(--dv-tab-divider-color);\n margin: 4px 0;\n}\n\n.dv-context-menu-rename {\n padding: 8px 12px 4px;\n}\n\n.dv-context-menu-rename-input {\n width: 100%;\n box-sizing: border-box;\n padding: 8px 10px;\n border: 1px solid var(--dv-tab-divider-color);\n border-radius: var(--dv-border-radius);\n background: inherit;\n color: var(--dv-activegroup-visiblepanel-tab-color);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n outline: none;\n}\n.dv-context-menu-rename-input:focus {\n border-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-context-menu-rename-input::placeholder {\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n\n.dv-context-menu-color-picker {\n display: flex;\n flex-direction: row;\n gap: 6px;\n padding: 8px 12px;\n align-items: center;\n}\n\n.dv-context-menu-color-swatch {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n cursor: pointer;\n border: 2px solid transparent;\n flex-shrink: 0;\n background-color: var(--dv-tab-group-color);\n}\n.dv-context-menu-color-swatch:hover {\n opacity: 0.85;\n}\n.dv-context-menu-color-swatch.dv-context-menu-color-swatch--selected {\n outline: 2px solid var(--dv-tab-divider-color);\n outline-offset: 2px;\n}\n\n.dv-tab-group-indicator-none .dv-groupview-header-bottom .dv-tab-group-underline {\n top: auto;\n bottom: 0;\n}\n\n.dv-groupview.dv-groupview-header-bottom.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after, .dv-groupview.dv-groupview-header-bottom.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n top: 0px;\n bottom: auto;\n}";
|
|
17
|
+
s.textContent = ".dv-drop-target-container {\n position: absolute;\n z-index: 9999;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n pointer-events: none;\n overflow: hidden;\n --dv-transition-duration: 300ms;\n}\n.dv-drop-target-container .dv-drop-target-anchor {\n position: relative;\n border: var(--dv-drag-over-border);\n background-color: var(--dv-drag-over-background-color);\n opacity: 1;\n /* GPU optimizations */\n will-change: transform, opacity;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n contain: layout paint;\n transition: opacity var(--dv-transition-duration) ease-in, top var(--dv-transition-duration) ease-out, left var(--dv-transition-duration) ease-out, width var(--dv-transition-duration) ease-out, height var(--dv-transition-duration) ease-out;\n}\n.dv-drop-target {\n position: relative;\n --dv-transition-duration: 70ms;\n}\n.dv-drop-target > .dv-drop-target-dropzone {\n position: absolute;\n left: 0px;\n top: 0px;\n height: 100%;\n width: 100%;\n z-index: 1000;\n pointer-events: none;\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n border: var(--dv-drag-over-border);\n background-color: var(--dv-drag-over-background-color);\n transition: top var(--dv-transition-duration) ease-out, left var(--dv-transition-duration) ease-out, width var(--dv-transition-duration) ease-out, height var(--dv-transition-duration) ease-out, opacity var(--dv-transition-duration) ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.dv-drop-target > .dv-drop-target-dropzone > .dv-drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal {\n border-right: 1px solid var(--dv-drag-over-border-color);\n}\n\n.dv-dnd-compass {\n z-index: 1001;\n}\n\n.dv-dnd-compass-cell {\n box-sizing: border-box;\n border-radius: 2px;\n border: 1px solid var(--dv-dnd-compass-color, #1f9cf0);\n background-color: var(--dv-dnd-compass-cell-color, rgba(31, 156, 240, 0.25));\n}\n\n.dv-dnd-compass-cell-edge {\n border-style: dashed;\n background-color: var(--dv-dnd-compass-edge-cell-color, rgba(31, 156, 240, 0.12));\n}\n\n.dv-dnd-compass-cell-active {\n background-color: var(--dv-dnd-compass-active-cell-color, rgba(31, 156, 240, 0.5));\n border-style: solid;\n}\n\n.dv-dnd-compass-edge-preview {\n z-index: 1000;\n box-sizing: border-box;\n background-color: var(--dv-drag-over-background-color);\n border: var(--dv-drag-over-border);\n}\n.dv-dragged {\n transform: translate3d(0px, 0px, 0px); /* forces tab to be drawn on a separate layer (see https://github.com/microsoft/vscode/issues/18733) */\n}\n\n/* Applied to the ghost tab clone during drag so it shows the same border as a focused tab */\n.dv-tab-ghost-drag {\n position: relative;\n}\n.dv-tab-ghost-drag::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n\n.dv-tab {\n flex-shrink: 0;\n}\n.dv-tab:focus-visible, .dv-tab:has(:focus-visible) {\n position: relative;\n}\n.dv-tab:focus-visible::after, .dv-tab:has(:focus-visible)::after {\n position: absolute;\n content: \"\";\n height: 100%;\n width: 100%;\n top: 0px;\n left: 0px;\n pointer-events: none;\n outline: 1px solid var(--dv-tab-divider-color) !important;\n outline-offset: -1px;\n z-index: 5;\n}\n.dv-tab.dv-tab-dragging .dv-default-tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-tab.dv-active-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n}\n.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: hidden;\n}\n.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action {\n visibility: visible;\n}\n@media (hover: none) {\n .dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n }\n}\n.dv-tab .dv-default-tab {\n position: relative;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.dv-tab .dv-default-tab .dv-default-tab-content {\n flex-grow: 1;\n margin-right: 4px;\n}\n.dv-tab .dv-default-tab .dv-default-tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n cursor: pointer;\n}\n.dv-tab .dv-default-tab .dv-default-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n@media (pointer: coarse) {\n .dv-tab .dv-default-tab .dv-default-tab-action {\n padding: 8px;\n }\n}\n.dv-tabs-overflow-dropdown-default {\n height: 100%;\n box-sizing: border-box;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n margin: var(--dv-tab-margin);\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n}\n.dv-tabs-overflow-dropdown-default > span {\n padding-left: 0.25rem;\n}\n.dv-tabs-overflow-dropdown-default > svg {\n transform: rotate(90deg);\n}\n.dv-tabs-overflow-dropdown-default:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-tabs-container {\n display: flex;\n position: relative;\n height: 100%;\n overflow: auto;\n scrollbar-width: thin;\n /**\n * Multi-row (wrapping) tabs. Inert until the `MultiRowTabsModule` toggles\n * `.dv-tabs-container--wrap` on this element (`overflow.mode: 'wrap'`):\n * tabs wrap onto multiple rows instead of clipping into the dropdown, and\n * the strip grows to fit (the header grows via the `:has()` rule in\n * tabsContainer.scss; the free header-aware content-sizing seam then shrinks\n * the content area to match). Restricted to horizontal headers in v1.\n */\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) {\n flex-wrap: wrap;\n height: auto;\n overflow: visible;\n align-content: flex-start;\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical).dv-tabs-container--wrap-capped {\n max-height: calc(var(--dv-tabs-and-actions-container-height) * var(--dv-max-tab-rows));\n overflow: hidden;\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-before::after,\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-after::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n z-index: 10;\n pointer-events: none;\n background-color: var(--dv-drag-over-border-color);\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-before::after {\n left: 0;\n}\n.dv-tabs-container.dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab--reorder-after::after {\n right: 0;\n}\n.dv-tabs-container {\n /**\n * Multi-column (wrapping) tabs for a vertical (edge-group) header: the\n * mirror of the horizontal rule above with the axes swapped. The main axis\n * is vertical (bounded by the header height, so overflowing tabs wrap) and\n * the cross axis is horizontal (grows into additional columns). The header\n * grows in width via the `:has()` rule in tabsContainer.scss.\n *\n * Column flow direction under `writing-mode: vertical-rl` differs\n * between left and right header positions; this needs visual verification\n * in a real browser (jsdom lays out neither writing-mode nor flex-wrap).\n */\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical {\n flex-wrap: wrap;\n width: auto;\n height: 100%;\n max-height: 100%;\n overflow: visible;\n align-content: flex-start;\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: var(--dv-tabs-and-actions-container-height);\n height: var(--dv-wrap-vertical-tab-height, auto);\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical.dv-tabs-container--wrap-capped {\n max-width: calc(var(--dv-tabs-and-actions-container-height) * var(--dv-max-tab-rows));\n overflow: hidden;\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-before::after,\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-after::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n z-index: 10;\n pointer-events: none;\n background-color: var(--dv-drag-over-border-color);\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-before::after {\n top: 0;\n}\n.dv-tabs-container.dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab--reorder-after::after {\n bottom: 0;\n}\n.dv-tabs-container {\n /* GPU optimizations for smooth scrolling */\n will-change: scroll-position;\n transform: translate3d(0, 0, 0);\n /**\n * Stop scroll-chaining at the tab strip so that wheel / trackpad\n * overscroll past the strip's edges doesn't trigger the browser's\n * swipe-to-go-back-or-forward gesture (and doesn't scroll the page\n * either). `contain` keeps the native bounce visuals; `none` would\n * also disable them.\n */\n overscroll-behavior: contain;\n /**\n * Empty space between tabs (and the scrollbar lane) keeps pan-x so a\n * flick on those areas produces native momentum scroll. The tab and\n * chip elements themselves opt out (`touch-action: none`) so the\n * pointer drag source owns the gesture from pointerdown - a flick on\n * a tab or chip always becomes a drag, regardless of direction.\n */\n touch-action: pan-x;\n}\n.dv-tabs-container.dv-tabs-container-vertical {\n width: 100%;\n height: fit-content;\n max-height: 100%;\n writing-mode: vertical-rl;\n touch-action: pan-y;\n}\n.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before, .dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-tab-divider-color);\n}\n.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before {\n width: 1px;\n height: 100%;\n}\n.dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {\n width: 100%;\n height: 1px;\n}\n.dv-tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.dv-tabs-container {\n /* Track */\n}\n.dv-tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.dv-tabs-container {\n /* Handle */\n}\n.dv-tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n\n.dv-scrollable > .dv-tabs-container {\n overflow: hidden;\n}\n\n.dv-tab {\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n outline: none;\n padding: 0.25rem 0.5rem;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n font-size: var(--dv-tab-font-size);\n margin: var(--dv-tab-margin);\n touch-action: none;\n}\n.dv-tab.dv-tab--shifting {\n will-change: transform, margin-left, margin-right, margin-top, margin-bottom;\n transition: transform var(--dv-transition-duration, 200ms) ease-out, margin-left var(--dv-transition-duration, 200ms) ease-out, margin-right var(--dv-transition-duration, 200ms) ease-out, margin-top var(--dv-transition-duration, 200ms) ease-out, margin-bottom var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab.dv-tab--dragging {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab.dv-tab--group-collapsed {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab.dv-tab--group-expanding {\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n\n.dv-tab.dv-tab--pinned:has(.dv-tab-pin) {\n display: flex;\n align-items: center;\n}\n.dv-tab.dv-tab--pinned .dv-tab-pin {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n margin-right: 4px;\n opacity: 0.7;\n pointer-events: none;\n}\n.dv-tab.dv-tab--pinned .dv-tab-pin .dv-svg {\n width: 11px;\n height: 11px;\n}\n.dv-tab.dv-tab--pinned .dv-default-tab {\n min-width: 0;\n}\n.dv-tab.dv-tab--pinned .dv-default-tab-action {\n display: none;\n}\n\n.dv-tab.dv-tab--pinned-compact .dv-default-tab-content {\n display: none;\n}\n.dv-tab.dv-tab--pinned-compact .dv-tab-pin {\n margin-right: 0;\n}\n\n.dv-tabs-container:not(.dv-tabs-container--wrap):not(.dv-tabs-container-vertical) > .dv-tab.dv-tab--pinned-sticky {\n position: sticky;\n left: var(--dv-pinned-sticky-left, 0);\n z-index: 2;\n}\n\n.dv-tabs-and-actions-container.dv-tabs-and-actions-container--pinned-row {\n flex-wrap: wrap;\n height: auto;\n min-height: var(--dv-tabs-and-actions-container-height);\n align-content: flex-start;\n}\n.dv-tabs-and-actions-container.dv-tabs-and-actions-container--pinned-row .dv-pinned-row {\n flex: 0 0 100%;\n order: -1;\n}\n.dv-tabs-and-actions-container.dv-tabs-and-actions-container--pinned-row .dv-tab.dv-tab--pinned {\n display: none;\n}\n\n.dv-pinned-row {\n display: flex;\n align-items: center;\n gap: 2px;\n box-sizing: border-box;\n width: 100%;\n min-height: var(--dv-tabs-and-actions-container-height);\n padding: 2px 4px;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom: 1px solid var(--dv-tab-divider-color);\n}\n\n.dv-pinned-tab {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n box-sizing: border-box;\n padding: 0.25rem 0.5rem;\n font-size: var(--dv-tab-font-size);\n cursor: pointer;\n user-select: none;\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-pinned-tab.dv-pinned-tab--active {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-pinned-tab .dv-pinned-tab-label {\n max-width: 120px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.dv-pinned-tab .dv-pinned-tab-unpin {\n flex-shrink: 0;\n opacity: 0.6;\n}\n.dv-pinned-tab .dv-pinned-tab-unpin:hover {\n opacity: 1;\n}\n.dv-pinned-tab.dv-pinned-tab--dragging {\n opacity: 0.5;\n}\n.dv-pinned-tab.dv-pinned-tab--drop-before, .dv-pinned-tab.dv-pinned-tab--drop-after {\n position: relative;\n}\n.dv-pinned-tab.dv-pinned-tab--drop-before::after, .dv-pinned-tab.dv-pinned-tab--drop-after::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n z-index: 10;\n pointer-events: none;\n background-color: var(--dv-drag-over-border-color);\n}\n.dv-pinned-tab.dv-pinned-tab--drop-before::after {\n left: 0;\n}\n.dv-pinned-tab.dv-pinned-tab--drop-after::after {\n right: 0;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .dv-tab {\n transition: none !important;\n }\n .dv-tab-group-chip {\n transition: none !important;\n }\n}\n.dv-tab-group-chip {\n display: inline-flex;\n align-items: center;\n align-self: center;\n padding: var(--dv-tab-group-chip-padding);\n margin: 0 8px 0 8px;\n border-radius: var(--dv-tab-group-chip-border-radius);\n font-size: var(--dv-tab-group-chip-font-size);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n box-sizing: border-box;\n line-height: 1;\n touch-action: none;\n background-color: var(--dv-tab-group-color);\n color: white;\n}\n.dv-tab-group-chip.dv-tab-group-chip--accent-off {\n background-color: transparent;\n color: inherit;\n}\n.dv-tab-group-chip.dv-tab-group-chip--shifting {\n will-change: margin-left, margin-top;\n transition: margin-left var(--dv-transition-duration, 200ms) ease-out, margin-top var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab-group-chip.dv-tab-group-chip--dragging {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition: width var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tab-group-chip .dv-tab-group-chip-label--empty {\n display: none;\n}\n.dv-tab-group-chip:has(.dv-tab-group-chip-label--empty) {\n position: relative;\n width: 12px;\n height: 12px;\n padding: 0;\n border-radius: 50%;\n}\n.dv-tab-group-chip:has(.dv-tab-group-chip-label--empty)::before {\n content: \"\";\n position: absolute;\n inset: -8px;\n}\n\n.dv-tab-group-underline {\n position: absolute;\n bottom: 0;\n opacity: var(--dv-tab-group-line-opacity);\n pointer-events: none;\n z-index: 10;\n}\n\n.dv-tab-group-chip-continuation {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n opacity: var(--dv-tab-group-line-opacity);\n pointer-events: none;\n z-index: 10;\n}\n\n.dv-groupview-header-bottom .dv-tab-group-underline {\n bottom: auto;\n top: 0;\n}\n\n.dv-tabs-container-vertical .dv-tab-group-underline {\n bottom: auto;\n left: 0;\n}\n\n.dv-tabs-container-vertical .dv-tab-group-chip {\n margin: 8px 0 8px 0;\n}\n.dv-tabs-container-vertical .dv-tab-group-chip.dv-tab-group-chip--dragging {\n height: 0 !important;\n min-height: 0 !important;\n width: auto !important;\n min-width: initial !important;\n transition: height var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tabs-container-vertical .dv-tab {\n padding: 0.5rem 0.25rem;\n}\n.dv-tabs-container-vertical .dv-tab.dv-tab--group-collapsed {\n height: 0 !important;\n min-height: 0 !important;\n width: auto !important;\n min-width: initial !important;\n transition: height var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tabs-container-vertical .dv-tab.dv-tab--group-expanding {\n transition: height var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n.dv-tabs-container-vertical .dv-tab.dv-tab--dragging {\n height: 0 !important;\n min-height: 0 !important;\n width: auto !important;\n min-width: initial !important;\n transition: height var(--dv-transition-duration, 200ms) ease-out, padding var(--dv-transition-duration, 200ms) ease-out, margin var(--dv-transition-duration, 200ms) ease-out, opacity var(--dv-transition-duration, 200ms) ease-out;\n}\n\n.dv-tabs-overflow-container {\n flex-direction: column;\n height: unset;\n font-size: var(--dv-tabs-and-actions-container-font-size);\n max-height: min(50vh, 400px);\n overflow-y: auto;\n border: 1px solid var(--dv-tab-divider-color);\n background-color: var(--dv-group-view-background-color);\n /* Scrollbar styling for webkit browsers */\n}\n.dv-tabs-overflow-container::-webkit-scrollbar {\n width: 6px;\n}\n.dv-tabs-overflow-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.dv-tabs-overflow-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n border-radius: 3px;\n}\n.dv-tabs-overflow-container {\n /* Firefox scrollbar */\n scrollbar-width: thin;\n}\n.dv-tabs-overflow-container .dv-tab:not(:last-child) {\n border-bottom: 1px solid var(--dv-tab-divider-color);\n}\n.dv-tabs-overflow-container .dv-active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-tabs-overflow-container .dv-inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n font-size: 0.8em;\n font-weight: 600;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n cursor: pointer;\n border-bottom: 1px solid var(--dv-tab-divider-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-header:hover {\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-color {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: var(--dv-tab-group-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-label {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-group-collapsed-badge {\n font-size: 0.75em;\n font-weight: 400;\n opacity: 0.7;\n padding: 1px 4px;\n border-radius: 3px;\n background-color: var(--dv-tab-divider-color);\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header {\n cursor: default;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header:hover {\n background-color: transparent;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header .dv-tabs-overflow-pinned-icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n opacity: 0.7;\n}\n.dv-tabs-overflow-container .dv-tabs-overflow-pinned-header .dv-tabs-overflow-pinned-icon .dv-svg {\n width: 11px;\n height: 11px;\n}\n.dv-tabs-overflow-container .dv-tab.dv-tab--grouped {\n padding-left: 16px;\n}\n\n/*\n * Advanced overflow popover (AdvancedOverflowModule): the same container as the\n * free list, upgraded in place with a search input, a scrollable listbox, and a\n * keyboard-highlighted active row. Styles live in core so the module ships no\n * CSS; they are inert unless the module renders this body.\n */\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced {\n min-width: 220px;\n}\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced .dv-tabs-overflow-search {\n box-sizing: border-box;\n width: 100%;\n padding: 6px 8px;\n border: none;\n border-bottom: 1px solid var(--dv-tab-divider-color);\n outline: none;\n font-size: inherit;\n font-family: inherit;\n color: var(--dv-activegroup-visiblepanel-tab-color);\n background-color: var(--dv-group-view-background-color);\n}\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced .dv-tabs-overflow-list {\n display: flex;\n flex-direction: column;\n outline: none;\n}\n.dv-tabs-overflow-container.dv-tabs-overflow-advanced .dv-tab.dv-tabs-overflow-option--focused {\n outline: 1px solid var(--dv-tab-divider-color);\n outline-offset: -1px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-tabs-and-actions-container {\n display: flex;\n background-color: var(--dv-tabs-and-actions-container-background-color);\n flex-shrink: 0;\n box-sizing: border-box;\n height: var(--dv-tabs-and-actions-container-height);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n /**\n * Multi-row (wrapping) tabs: when the tab list wraps onto multiple rows\n * (`.dv-tabs-container--wrap`, toggled by the `MultiRowTabsModule`), the\n * header grows to fit instead of clipping. Inert otherwise: the single-row\n * fixed height above is unchanged.\n */\n}\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) {\n height: auto;\n min-height: var(--dv-tabs-and-actions-container-height);\n align-items: flex-start;\n}\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-pre-actions-container,\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-left-actions-container,\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-right-actions-container,\n.dv-tabs-and-actions-container:has(.dv-tabs-container--wrap) > .dv-void-container {\n height: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-scrollable {\n flex-grow: 1;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container {\n flex-grow: 1;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab {\n flex-grow: 1;\n padding: 0px;\n}\n.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-void-container {\n flex-grow: 0;\n}\n.dv-tabs-and-actions-container .dv-void-container {\n display: flex;\n flex-grow: 1;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n}\n.dv-tabs-and-actions-container .dv-void-container.dv-draggable {\n cursor: grab;\n}\n.dv-tabs-and-actions-container .dv-right-actions-container {\n display: flex;\n}\n.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical {\n flex-direction: column;\n}\n.dv-tabs-and-actions-container.dv-groupview-header-vertical {\n flex-direction: column;\n height: auto;\n width: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-and-actions-container.dv-groupview-header-vertical:has(.dv-tabs-container--wrap) {\n width: auto;\n min-width: var(--dv-tabs-and-actions-container-height);\n}\n.dv-tabs-and-actions-container.dv-groupview-header-vertical:has(.dv-tabs-container--wrap) > .dv-scrollable {\n align-self: stretch;\n}\n.dv-watermark {\n display: flex;\n height: 100%;\n}\n.dv-dockview {\n position: relative;\n background-color: var(--dv-group-view-background-color);\n}\n.dv-dockview .dv-watermark-container {\n position: absolute;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n z-index: 1;\n}\n.dv-dockview .dv-overlay-render-container {\n position: relative;\n}\n\n.dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-inactive-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n\n/**\n * when a tab is dragged we lose the above stylings because they are conditional on parent elements\n * therefore we also set some stylings for the dragging event\n **/\n.dv-tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n\n.dv-keyboard-docking-hint {\n position: absolute;\n left: 50%;\n bottom: 8px;\n transform: translateX(-50%);\n z-index: 100;\n max-width: 90%;\n padding: 4px 10px;\n border-radius: 4px;\n font-size: 12px;\n line-height: 1.4;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n background-color: var(--dv-context-menu-background-color, var(--dv-group-view-background-color));\n color: var(--dv-activegroup-visiblepanel-tab-color);\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);\n}\n.dv-groupview {\n display: flex;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n flex-direction: column;\n}\n.dv-groupview:focus {\n outline: none;\n}\n.dv-groupview > .dv-content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.dv-groupview.dv-groupview-header-bottom {\n flex-direction: column-reverse;\n}\n.dv-groupview.dv-groupview-header-left {\n flex-direction: row;\n}\n.dv-groupview.dv-groupview-header-right {\n flex-direction: row-reverse;\n}\n.dv-groupview.dv-groupview-edge.dv-edge-collapsed > .dv-content-container {\n display: none;\n}\n.dv-root-wrapper {\n height: 100%;\n width: 100%;\n}\n.dv-grid-view,\n.dv-branch-node {\n height: 100%;\n width: 100%;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-top {\n background-color: red;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-bottom {\n background-color: green;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-left {\n background-color: yellow;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-right {\n background-color: blue;\n}\n.dv-debug .dv-resize-container .dv-resize-handle-topleft,\n.dv-debug .dv-resize-container .dv-resize-handle-topright,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,\n.dv-debug .dv-resize-container .dv-resize-handle-bottomright {\n background-color: cyan;\n}\n\n.dv-floating-overlay-host {\n position: absolute;\n pointer-events: none;\n}\n.dv-floating-overlay-host > .dv-resize-container {\n pointer-events: auto;\n}\n\n.dv-edge-peek {\n background-color: var(--dv-group-view-background-color);\n border: 1px solid var(--dv-separator-border);\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);\n}\n.dv-edge-peek > * {\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n.dv-auto-edge-band {\n position: absolute;\n pointer-events: none;\n z-index: var(--dv-overlay-z-index, 999);\n background-color: var(--dv-edge-dock-indicator-color);\n box-shadow: 0 0 6px var(--dv-edge-dock-indicator-color);\n}\n\n.dv-edge-peek-header {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 0 4px 0 8px;\n box-sizing: border-box;\n background-color: var(--dv-group-view-background-color);\n border: 1px solid var(--dv-separator-border);\n border-bottom: none;\n color: var(--dv-activegroup-visiblepanel-tab-color);\n font-size: 12px;\n}\n.dv-edge-peek-header .dv-edge-peek-pin,\n.dv-edge-peek-header .dv-edge-peek-close {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n border: none;\n padding: 4px;\n color: inherit;\n background: transparent;\n outline: none;\n}\n.dv-edge-peek-header .dv-edge-peek-pin:hover,\n.dv-edge-peek-header .dv-edge-peek-close:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.dv-edge-peek-header .dv-edge-peek-pin:focus-visible,\n.dv-edge-peek-header .dv-edge-peek-close:focus-visible {\n border-radius: 2px;\n outline: 1px solid var(--dv-tab-divider-color);\n outline-offset: -1px;\n}\n\n.dv-edge-peek-title {\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.dv-resize-container > .dv-grid-view {\n width: 100%;\n height: 100%;\n}\n\n.dv-resize-container-with-titlebar {\n display: flex;\n flex-direction: column;\n}\n.dv-resize-container-with-titlebar > .dv-floating-titlebar {\n flex: 0 0 auto;\n}\n.dv-resize-container-with-titlebar > .dv-grid-view {\n height: auto;\n flex: 1 1 0;\n min-height: 0;\n}\n\n.dv-floating-titlebar {\n box-sizing: border-box;\n flex-shrink: 0;\n height: var(--dv-floating-titlebar-height, 22px);\n background-color: var(--dv-floating-titlebar-background-color);\n border-bottom: var(--dv-floating-titlebar-border-bottom, none);\n user-select: none;\n touch-action: none;\n}\n.dv-floating-titlebar.dv-draggable {\n cursor: grab;\n}\n\n.dv-resize-container {\n --dv-overlay-z-index: var(--dv-overlay-z-index, 999);\n position: absolute;\n z-index: calc(var(--dv-overlay-z-index) - 2);\n background-color: var(--dv-group-view-background-color);\n border: var(--dv-floating-border);\n box-shadow: var(--dv-floating-box-shadow);\n /* GPU optimizations for floating group movement */\n will-change: transform, opacity;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n}\n.dv-resize-container.dv-hidden {\n display: none;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: var(--dv-floating-group-dragging-opacity);\n /* Enhanced GPU acceleration during drag */\n will-change: transform, opacity;\n}\n.dv-resize-container .dv-resize-handle-top,\n.dv-resize-container .dv-resize-handle-bottom,\n.dv-resize-container .dv-resize-handle-left,\n.dv-resize-container .dv-resize-handle-right,\n.dv-resize-container .dv-resize-handle-topleft,\n.dv-resize-container .dv-resize-handle-topright,\n.dv-resize-container .dv-resize-handle-bottomleft,\n.dv-resize-container .dv-resize-handle-bottomright {\n touch-action: none;\n}\n.dv-resize-container .dv-resize-handle-top {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n top: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-bottom {\n height: 4px;\n width: calc(100% - 8px);\n left: 4px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ns-resize;\n}\n.dv-resize-container .dv-resize-handle-left {\n height: calc(100% - 8px);\n width: 4px;\n left: -2px;\n top: 4px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-right {\n height: calc(100% - 8px);\n width: 4px;\n right: -2px;\n top: 4px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ew-resize;\n}\n.dv-resize-container .dv-resize-handle-topleft {\n height: 4px;\n width: 4px;\n top: -2px;\n left: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: nw-resize;\n}\n.dv-resize-container .dv-resize-handle-topright {\n height: 4px;\n width: 4px;\n right: -2px;\n top: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: ne-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomleft {\n height: 4px;\n width: 4px;\n left: -2px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: sw-resize;\n}\n.dv-resize-container .dv-resize-handle-bottomright {\n height: 4px;\n width: 4px;\n right: -2px;\n bottom: -2px;\n z-index: var(--dv-overlay-z-index);\n position: absolute;\n cursor: se-resize;\n}\n@media (pointer: coarse) {\n .dv-resize-container .dv-resize-handle-top,\n .dv-resize-container .dv-resize-handle-bottom {\n height: 16px;\n width: calc(100% - 48px);\n left: 24px;\n }\n .dv-resize-container .dv-resize-handle-top {\n top: -10px;\n }\n .dv-resize-container .dv-resize-handle-bottom {\n bottom: -10px;\n }\n .dv-resize-container .dv-resize-handle-left,\n .dv-resize-container .dv-resize-handle-right {\n width: 16px;\n height: calc(100% - 48px);\n top: 24px;\n }\n .dv-resize-container .dv-resize-handle-left {\n left: -10px;\n }\n .dv-resize-container .dv-resize-handle-right {\n right: -10px;\n }\n .dv-resize-container .dv-resize-handle-topleft,\n .dv-resize-container .dv-resize-handle-topright,\n .dv-resize-container .dv-resize-handle-bottomleft,\n .dv-resize-container .dv-resize-handle-bottomright {\n height: 24px;\n width: 24px;\n }\n .dv-resize-container .dv-resize-handle-topleft {\n top: -12px;\n left: -12px;\n }\n .dv-resize-container .dv-resize-handle-topright {\n top: -12px;\n right: -12px;\n }\n .dv-resize-container .dv-resize-handle-bottomleft {\n bottom: -12px;\n left: -12px;\n }\n .dv-resize-container .dv-resize-handle-bottomright {\n bottom: -12px;\n right: -12px;\n }\n}\n\n.dv-smart-guides {\n pointer-events: none;\n z-index: calc(var(--dv-overlay-z-index, 999) + 100);\n}\n\n.dv-smart-guide {\n background-color: var(--dv-smart-guides-color, #1f9cf0);\n}\n\n.dv-smart-guide-preview {\n box-sizing: border-box;\n background-color: var(--dv-smart-guides-preview-color, rgba(31, 156, 240, 0.18));\n border: 1px solid var(--dv-smart-guides-color, #1f9cf0);\n}\n.dv-render-overlay {\n --dv-overlay-z-index: var(--dv-overlay-z-index, 999);\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n contain: layout paint;\n isolation: isolate;\n /* GPU optimizations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: calc(var(--dv-overlay-z-index) - 1);\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dv-pane-container {\n height: 100%;\n width: 100%;\n}\n.dv-pane-container.dv-animated .dv-view {\n /* GPU optimizations for smooth pane animations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition: transform 0.15s ease-out;\n}\n.dv-pane-container .dv-view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.dv-pane-container .dv-view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.dv-pane-container .dv-view:not(:first-child) .dv-pane > .dv-pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.dv-pane-container .dv-view .dv-default-header {\n background-color: var(--dv-group-view-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n display: flex;\n padding: 0px 8px;\n cursor: pointer;\n}\n.dv-pane-container .dv-view .dv-default-header .dv-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.dv-pane-container .dv-view .dv-default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.dv-pane-container:first-of-type > .dv-pane > .dv-pane-header {\n border-top: none !important;\n}\n.dv-pane-container .dv-pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.dv-pane-container .dv-pane .dv-pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.dv-pane-container .dv-pane .dv-pane-header.dv-pane-draggable {\n cursor: pointer;\n}\n.dv-pane-container .dv-pane .dv-pane-header:focus-visible:before, .dv-pane-container .dv-pane .dv-pane-header:has(:focus-visible):before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-pane-container .dv-pane .dv-pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.dv-pane-container .dv-pane .dv-pane-body:focus-visible:before, .dv-pane-container .dv-pane .dv-pane-body:has(:focus-visible):before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 5;\n content: \"\";\n pointer-events: none;\n outline: 1px solid;\n outline-width: -1px;\n outline-style: solid;\n outline-offset: -1px;\n outline-color: var(--dv-paneview-active-outline-color);\n}\n.dv-scrollable {\n position: relative;\n overflow: hidden;\n}\n.dv-scrollable .dv-scrollbar {\n position: absolute;\n border-radius: 2px;\n background-color: transparent;\n /* GPU optimizations */\n will-change: background-color, transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition-property: background-color;\n transition-timing-function: ease-in-out;\n transition-duration: 1s;\n transition-delay: 0s;\n}\n.dv-scrollable .dv-scrollbar-horizontal {\n bottom: 0px;\n left: 0px;\n height: 4px;\n}\n.dv-scrollable .dv-scrollbar-vertical {\n right: 0px;\n top: 0px;\n width: 4px;\n}\n.dv-scrollable:hover .dv-scrollbar, .dv-scrollable.dv-scrollable-resizing .dv-scrollbar, .dv-scrollable.dv-scrollable-scrolling .dv-scrollbar {\n background-color: var(--dv-scrollbar-background-color, rgba(255, 255, 255, 0.25));\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-enabled {\n background-color: black;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-disabled {\n background-color: orange;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-maximum {\n background-color: green;\n}\n.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-minimum {\n background-color: red;\n}\n\n.dv-split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.dv-split-view-container.dv-splitview-disabled > .dv-sash-container > .dv-sash {\n pointer-events: none;\n}\n.dv-split-view-container.dv-animation .dv-view,\n.dv-split-view-container.dv-animation .dv-sash {\n /* GPU optimizations for smooth animations */\n will-change: transform;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n transition: transform 0.15s ease-out;\n}\n.dv-split-view-container.dv-horizontal {\n height: 100%;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash {\n height: 100%;\n width: 4px;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-enabled {\n cursor: ew-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-disabled {\n cursor: default;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-maximum {\n cursor: w-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash.dv-minimum {\n cursor: e-resize;\n}\n.dv-split-view-container.dv-horizontal > .dv-view-container > .dv-view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.dv-split-view-container.dv-vertical {\n width: 100%;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash {\n width: 100%;\n height: 4px;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-enabled {\n cursor: ns-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-disabled {\n cursor: default;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-maximum {\n cursor: n-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash.dv-minimum {\n cursor: s-resize;\n}\n.dv-split-view-container.dv-vertical > .dv-view-container > .dv-view {\n width: 100%;\n}\n.dv-split-view-container.dv-vertical > .dv-view-container > .dv-view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.dv-split-view-container .dv-sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.dv-split-view-container .dv-sash-container .dv-sash {\n position: absolute;\n z-index: 99;\n outline: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: none;\n background-color: var(--dv-sash-color, transparent);\n}\n.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):active, .dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition-property: background-color;\n transition-timing-function: ease-in-out;\n transition-duration: var(--dv-active-sash-transition-duration, 0.1s);\n transition-delay: var(--dv-active-sash-transition-delay, 0.5s);\n}\n@media (pointer: coarse) {\n .dv-split-view-container .dv-sash-container > .dv-sash:not(.dv-disabled)::before {\n content: \"\";\n position: absolute;\n background: transparent;\n }\n .dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {\n top: 0;\n bottom: 0;\n left: -10px;\n right: -10px;\n }\n .dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {\n left: 0;\n right: 0;\n top: -10px;\n bottom: -10px;\n }\n}\n.dv-split-view-container .dv-view-container {\n position: relative;\n height: 100%;\n width: 100%;\n}\n.dv-split-view-container .dv-view-container .dv-view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.dv-split-view-container.dv-separator-border .dv-view:not(:first-child)::before {\n content: \" \";\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n background-color: var(--dv-separator-border);\n}\n.dv-svg {\n display: inline-block;\n fill: currentcolor;\n line-height: 1;\n stroke: currentcolor;\n stroke-width: 0;\n}\n.dockview-theme-dark {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-dark {\n color-scheme: dark;\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n}\n\n.dockview-theme-light {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-light {\n color-scheme: light;\n --dv-group-view-background-color: white;\n --dv-tabs-and-actions-container-background-color: #f3f3f3;\n --dv-activegroup-visiblepanel-tab-background-color: white;\n --dv-activegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-inactivegroup-visiblepanel-tab-background-color: white;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;\n --dv-tab-divider-color: white;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, 0.7);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, 0.35);\n --dv-separator-border: rgba(128, 128, 128, 0.35);\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-scrollbar-background-color: rgba(0, 0, 0, 0.25);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.dockview-theme-vs {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-vs .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-vs {\n color-scheme: dark;\n --dv-group-view-background-color: #1e1e1e;\n --dv-tabs-and-actions-container-background-color: #252526;\n --dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;\n --dv-tab-divider-color: #1e1e1e;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: #969696;\n --dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;\n --dv-inactivegroup-hiddenpanel-tab-color: #626262;\n --dv-separator-border: rgb(68, 68, 68);\n --dv-paneview-header-border-color: rgba(204, 204, 204, 0.2);\n --dv-tabs-and-actions-container-background-color: #2d2d30;\n --dv-tabs-and-actions-container-height: 20px;\n --dv-tabs-and-actions-container-font-size: 11px;\n --dv-activegroup-visiblepanel-tab-background-color: #007acc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: white;\n --dv-inactivegroup-visiblepanel-tab-color: white;\n --dv-inactivegroup-hiddenpanel-tab-color: white;\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tab.dv-active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tab.dv-inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container {\n box-sizing: content-box;\n border-bottom: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tab.dv-active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tab.dv-inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-abyss .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-abyss {\n color-scheme: dark;\n --dv-color-abyss-dark: #000c18;\n --dv-color-abyss: #10192c;\n --dv-color-abyss-light: #1c1c2a;\n --dv-color-abyss-lighter: #2b2b4a;\n --dv-color-abyss-accent: rgb(91, 30, 207);\n --dv-color-abyss-primary-text: white;\n --dv-color-abyss-secondary-text: rgb(148, 151, 169);\n --dv-group-view-background-color: var(--dv-color-abyss-dark);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-abyss-light\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-dark\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-dark\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);\n --dv-tab-divider-color: var(--dv-color-abyss-lighter);\n --dv-activegroup-visiblepanel-tab-color: white;\n --dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, 0.25);\n --dv-separator-border: var(--dv-color-abyss-lighter);\n --dv-paneview-header-border-color: var(--dv-color-abyss-lighter);\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-dracula .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-dracula {\n color-scheme: dark;\n --dv-group-view-background-color: #282a36;\n --dv-tabs-and-actions-container-background-color: #191a21;\n --dv-activegroup-visiblepanel-tab-background-color: #282a36;\n --dv-activegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #282a36;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;\n --dv-tab-divider-color: #191a21;\n --dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);\n --dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, 0.5);\n --dv-separator-border: #bd93f9;\n --dv-paneview-header-border-color: #bd93f9;\n --dv-paneview-active-outline-color: #6272a4;\n}\n.dockview-theme-dracula .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-dracula .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-dracula .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #5e3d5a;\n z-index: 999;\n}\n\n.dockview-theme-nord {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-nord .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-nord {\n color-scheme: dark;\n --dv-color-nord-polar-0: #2e3440;\n --dv-color-nord-polar-1: #3b4252;\n --dv-color-nord-polar-2: #434c5e;\n --dv-color-nord-polar-3: #4c566a;\n --dv-color-nord-frost: #88c0d0;\n --dv-color-nord-frost-2: #81a1c1;\n --dv-color-nord-snow-0: #eceff4;\n --dv-color-nord-snow-1: #d8dee9;\n --dv-group-view-background-color: var(--dv-color-nord-polar-0);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-0\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-nord-snow-0);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-nord-snow-1);\n --dv-inactivegroup-visiblepanel-tab-color: #8a9bbf;\n --dv-inactivegroup-hiddenpanel-tab-color: #5e6f8e;\n --dv-separator-border: var(--dv-color-nord-polar-3);\n --dv-paneview-active-outline-color: var(--dv-color-nord-frost);\n --dv-active-sash-color: var(--dv-color-nord-frost);\n --dv-scrollbar-background-color: rgba(76, 86, 106, 0.5);\n}\n.dockview-theme-nord .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-nord .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-nord-frost);\n z-index: 999;\n}\n.dockview-theme-nord .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-nord .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-nord-frost-2);\n z-index: 999;\n}\n\n.dockview-theme-nord-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-nord-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-nord-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-nord-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-nord-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-nord-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-nord-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-nord-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-nord-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-nord-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-tabs-overflow-container,\n.dockview-theme-nord-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-nord-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-nord-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-nord-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-nord-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-nord-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-nord-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-nord-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-nord-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-nord-spaced {\n color-scheme: dark;\n --dv-color-nord-polar-0: #2e3440;\n --dv-color-nord-polar-1: #3b4252;\n --dv-color-nord-polar-2: #434c5e;\n --dv-color-nord-polar-3: #4c566a;\n --dv-color-nord-frost: #88c0d0;\n --dv-color-nord-frost-2: #81a1c1;\n --dv-color-nord-snow-0: #eceff4;\n --dv-color-nord-snow-1: #d8dee9;\n --dv-group-view-background-color: var(--dv-color-nord-polar-0);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-nord-polar-2\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-nord-polar-1\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-nord-snow-0);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-nord-snow-1);\n --dv-inactivegroup-visiblepanel-tab-color: #8a9bbf;\n --dv-inactivegroup-hiddenpanel-tab-color: #5e6f8e;\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-nord-frost);\n --dv-active-sash-color: var(--dv-color-nord-frost);\n --dv-scrollbar-background-color: rgba(76, 86, 106, 0.5);\n --dv-floating-group-border: 2px solid var(--dv-color-nord-polar-0);\n}\n\n.dockview-theme-catppuccin-mocha {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-catppuccin-mocha .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-catppuccin-mocha {\n color-scheme: dark;\n --dv-color-mocha-crust: #11111b;\n --dv-color-mocha-mantle: #181825;\n --dv-color-mocha-base: #1e1e2e;\n --dv-color-mocha-surface0: #313244;\n --dv-color-mocha-surface1: #45475a;\n --dv-color-mocha-text: #cdd6f4;\n --dv-color-mocha-subtext1: #bac2de;\n --dv-color-mocha-subtext0: #a6adc8;\n --dv-color-mocha-mauve: #cba6f7;\n --dv-color-mocha-lavender: #b4befe;\n --dv-group-view-background-color: var(--dv-color-mocha-base);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-base\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-surface0\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-crust\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-mocha-text);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-mocha-subtext1);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-mocha-subtext0);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(166, 173, 200, 0.5);\n --dv-separator-border: var(--dv-color-mocha-surface1);\n --dv-paneview-active-outline-color: var(--dv-color-mocha-mauve);\n --dv-active-sash-color: var(--dv-color-mocha-mauve);\n --dv-scrollbar-background-color: rgba(49, 50, 68, 0.8);\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-mocha-mauve);\n z-index: 999;\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-catppuccin-mocha .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: rgba(180, 190, 254, 0.4);\n z-index: 999;\n}\n\n.dockview-theme-catppuccin-mocha-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-overflow-container,\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-catppuccin-mocha-spaced {\n color-scheme: dark;\n --dv-color-mocha-crust: #11111b;\n --dv-color-mocha-mantle: #181825;\n --dv-color-mocha-base: #1e1e2e;\n --dv-color-mocha-surface0: #313244;\n --dv-color-mocha-surface1: #45475a;\n --dv-color-mocha-text: #cdd6f4;\n --dv-color-mocha-subtext1: #bac2de;\n --dv-color-mocha-subtext0: #a6adc8;\n --dv-color-mocha-mauve: #cba6f7;\n --dv-color-mocha-lavender: #b4befe;\n --dv-group-view-background-color: var(--dv-color-mocha-crust);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-surface0\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-mocha-surface0\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-mocha-mantle\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-mocha-text);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-mocha-subtext1);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-mocha-subtext0);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(166, 173, 200, 0.5);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-mocha-mauve);\n --dv-active-sash-color: var(--dv-color-mocha-mauve);\n --dv-scrollbar-background-color: rgba(49, 50, 68, 0.8);\n --dv-floating-group-border: 2px solid var(--dv-color-mocha-crust);\n}\n\n.dockview-theme-monokai {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-monokai .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-monokai {\n color-scheme: dark;\n --dv-color-monokai-bg: #272822;\n --dv-color-monokai-bg-light: #3e3d32;\n --dv-color-monokai-comment: #75715e;\n --dv-color-monokai-fg: #f8f8f2;\n --dv-color-monokai-green: #a6e22e;\n --dv-group-view-background-color: var(--dv-color-monokai-bg);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-monokai-bg-light\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-monokai-bg\n );\n --dv-activegroup-hiddenpanel-tab-background-color: #2d2c25;\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-monokai-bg\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: #2d2c25;\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-monokai-fg);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-monokai-comment);\n --dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, 0.5);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(117, 113, 94, 0.5);\n --dv-separator-border: var(--dv-color-monokai-bg-light);\n --dv-paneview-active-outline-color: var(--dv-color-monokai-green);\n --dv-active-sash-color: var(--dv-color-monokai-green);\n --dv-scrollbar-background-color: rgba(117, 113, 94, 0.5);\n}\n.dockview-theme-monokai .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-monokai .dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: var(--dv-color-monokai-green);\n z-index: 999;\n}\n.dockview-theme-monokai .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.dockview-theme-monokai .dv-groupview.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n position: absolute;\n left: 0px;\n bottom: 0px;\n content: \"\";\n width: 100%;\n height: 2px;\n background-color: rgba(166, 226, 46, 0.35);\n z-index: 999;\n}\n\n.dockview-theme-solarized-light {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-solarized-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-solarized-light {\n color-scheme: light;\n --dv-color-sol-base3: #fdf6e3;\n --dv-color-sol-base2: #eee8d5;\n --dv-color-sol-base1: #93a1a1;\n --dv-color-sol-base00: #657b83;\n --dv-color-sol-base01: #586e75;\n --dv-color-sol-blue: #268bd2;\n --dv-group-view-background-color: var(--dv-color-sol-base3);\n --dv-tabs-and-actions-container-background-color: var(--dv-color-sol-base2);\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-activegroup-hiddenpanel-tab-background-color: #e8e2d0;\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: #e8e2d0;\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-sol-base01);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-sol-base00);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-sol-base1);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(147, 161, 161, 0.6);\n --dv-separator-border: var(--dv-color-sol-base2);\n --dv-paneview-active-outline-color: var(--dv-color-sol-blue);\n --dv-active-sash-color: var(--dv-color-sol-blue);\n --dv-scrollbar-background-color: rgba(101, 123, 131, 0.25);\n --dv-drag-over-background-color: rgba(38, 139, 210, 0.15);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.dockview-theme-solarized-light-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-solarized-light-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-solarized-light-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-solarized-light-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-solarized-light-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-overflow-container,\n.dockview-theme-solarized-light-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-solarized-light-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-solarized-light-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-solarized-light-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-solarized-light-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-solarized-light-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-solarized-light-spaced {\n color-scheme: light;\n --dv-color-sol-base3: #fdf6e3;\n --dv-color-sol-base2: #eee8d5;\n --dv-color-sol-base1: #93a1a1;\n --dv-color-sol-base00: #657b83;\n --dv-color-sol-base01: #586e75;\n --dv-color-sol-blue: #268bd2;\n --dv-drag-over-background-color: rgba(38, 139, 210, 0.1);\n --dv-group-view-background-color: var(--dv-color-sol-base2);\n --dv-tabs-and-actions-container-background-color: var(--dv-color-sol-base3);\n --dv-activegroup-visiblepanel-tab-background-color: #e8e2d0;\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: #e8e2d0;\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-sol-base3\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-sol-base01);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-sol-base00);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-sol-base1);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(147, 161, 161, 0.6);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-sol-blue);\n --dv-active-sash-color: var(--dv-color-sol-blue);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n --dv-scrollbar-background-color: rgba(101, 123, 131, 0.25);\n --dv-floating-group-border: 2px solid rgba(238, 232, 213, 0.5);\n}\n\n.dockview-theme-github-dark {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-github-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-github-dark {\n color-scheme: dark;\n --dv-color-gh-canvas-default: #0d1117;\n --dv-color-gh-canvas-subtle: #161b22;\n --dv-color-gh-canvas-inset: #010409;\n --dv-color-gh-border: #30363d;\n --dv-color-gh-border-muted: #21262d;\n --dv-color-gh-fg-default: #e6edf3;\n --dv-color-gh-fg-muted: #8b949e;\n --dv-color-gh-fg-subtle: #6e7681;\n --dv-color-gh-accent: #58a6ff;\n --dv-group-view-background-color: var(--dv-color-gh-canvas-default);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-canvas-default\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-canvas-default\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-default);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-subtle);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.5);\n --dv-separator-border: var(--dv-color-gh-border);\n --dv-paneview-active-outline-color: var(--dv-color-gh-accent);\n --dv-active-sash-color: var(--dv-color-gh-accent);\n --dv-scrollbar-background-color: rgba(48, 54, 61, 0.7);\n --dv-drag-over-background-color: rgba(88, 166, 255, 0.15);\n}\n\n.dockview-theme-github-dark-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-github-dark-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-github-dark-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-github-dark-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-github-dark-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-github-dark-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-github-dark-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-github-dark-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-github-dark-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-tabs-overflow-container,\n.dockview-theme-github-dark-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-github-dark-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-github-dark-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-dark-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-github-dark-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-dark-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-github-dark-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-github-dark-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-dark-spaced {\n color-scheme: dark;\n --dv-color-gh-canvas-default: #0d1117;\n --dv-color-gh-canvas-subtle: #161b22;\n --dv-color-gh-canvas-inset: #010409;\n --dv-color-gh-border: #30363d;\n --dv-color-gh-border-muted: #21262d;\n --dv-color-gh-fg-default: #e6edf3;\n --dv-color-gh-fg-muted: #8b949e;\n --dv-color-gh-fg-subtle: #6e7681;\n --dv-color-gh-accent: #58a6ff;\n --dv-drag-over-background-color: rgba(88, 166, 255, 0.1);\n --dv-group-view-background-color: var(--dv-color-gh-canvas-inset);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-border\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-border\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-default);\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-subtle);\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.5);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-gh-accent);\n --dv-active-sash-color: var(--dv-color-gh-accent);\n --dv-scrollbar-background-color: rgba(48, 54, 61, 0.7);\n --dv-floating-group-border: 2px solid var(--dv-color-gh-canvas-inset);\n}\n\n.dockview-theme-github-light {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n}\n.dockview-theme-github-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed {\n opacity: 0;\n transition: none;\n}\n.dockview-theme-github-light {\n color-scheme: light;\n --dv-color-gh-light-canvas-default: #ffffff;\n --dv-color-gh-light-canvas-subtle: #f6f8fa;\n --dv-color-gh-light-canvas-inset: #f0f6ff;\n --dv-color-gh-light-border: #d0d7de;\n --dv-color-gh-light-fg-default: #1f2328;\n --dv-color-gh-light-fg-muted: #656d76;\n --dv-color-gh-light-fg-subtle: #6e7781;\n --dv-color-gh-light-accent: #0969da;\n --dv-group-view-background-color: var(--dv-color-gh-light-canvas-default);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-light-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-subtle\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-subtle\n );\n --dv-activegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-default\n );\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-light-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-subtle\n );\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.4);\n --dv-separator-border: var(--dv-color-gh-light-border);\n --dv-paneview-active-outline-color: var(--dv-color-gh-light-accent);\n --dv-active-sash-color: var(--dv-color-gh-light-accent);\n --dv-scrollbar-background-color: rgba(208, 215, 222, 0.5);\n --dv-drag-over-background-color: rgba(9, 105, 218, 0.1);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.dockview-theme-github-light-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-github-light-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-github-light-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-github-light-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-github-light-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-github-light-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-github-light-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-github-light-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-github-light-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-tabs-overflow-container,\n.dockview-theme-github-light-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-github-light-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-github-light-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-light-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-github-light-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-github-light-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-github-light-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-github-light-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-github-light-spaced {\n color-scheme: light;\n --dv-color-gh-light-canvas-default: #ffffff;\n --dv-color-gh-light-canvas-subtle: #f6f8fa;\n --dv-color-gh-light-border: #d0d7de;\n --dv-color-gh-light-fg-default: #1f2328;\n --dv-color-gh-light-fg-muted: #656d76;\n --dv-color-gh-light-fg-subtle: #6e7781;\n --dv-color-gh-light-accent: #0969da;\n --dv-drag-over-background-color: rgba(9, 105, 218, 0.08);\n --dv-group-view-background-color: var(--dv-color-gh-light-canvas-subtle);\n --dv-tabs-and-actions-container-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-border\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-gh-light-border\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-gh-light-canvas-default\n );\n --dv-activegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-default\n );\n --dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-light-fg-muted);\n --dv-inactivegroup-visiblepanel-tab-color: var(\n --dv-color-gh-light-fg-subtle\n );\n --dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, 0.4);\n --dv-separator-border: transparent;\n --dv-paneview-active-outline-color: var(--dv-color-gh-light-accent);\n --dv-active-sash-color: var(--dv-color-gh-light-accent);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n --dv-scrollbar-background-color: rgba(208, 215, 222, 0.5);\n --dv-floating-group-border: 2px solid rgba(208, 215, 222, 0.5);\n}\n\n.dockview-theme-abyss-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-abyss-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-abyss-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-abyss-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-abyss-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-abyss-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-abyss-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-abyss-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-abyss-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-tabs-overflow-container,\n.dockview-theme-abyss-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-abyss-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-abyss-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-abyss-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-abyss-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-abyss-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-abyss-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-abyss-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-abyss-spaced {\n color-scheme: dark;\n --dv-color-abyss-dark: rgb(11, 6, 17);\n --dv-color-abyss: #16121f;\n --dv-color-abyss-light: #201d2b;\n --dv-color-abyss-lighter: #2a2837;\n --dv-color-abyss-accent: rgb(91, 30, 207);\n --dv-color-abyss-primary-text: white;\n --dv-color-abyss-secondary-text: rgb(148, 151, 169);\n --dv-drag-over-background-color: '';\n --dv-group-view-background-color: var(--dv-color-abyss-dark);\n --dv-tabs-and-actions-container-background-color: var(--dv-color-abyss);\n --dv-activegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-lighter\n );\n --dv-activegroup-hiddenpanel-tab-background-color: var(\n --dv-color-abyss-light\n );\n --dv-inactivegroup-visiblepanel-tab-background-color: var(\n --dv-color-abyss-lighter\n );\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(\n --dv-color-abyss-light\n );\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: var(--dv-color-abyss-primary-text);\n --dv-activegroup-hiddenpanel-tab-color: var(\n --dv-color-abyss-secondary-text\n );\n --dv-inactivegroup-visiblepanel-tab-color: var(\n --dv-color-abyss-primary-text\n );\n --dv-inactivegroup-hiddenpanel-tab-color: var(\n --dv-color-abyss-secondary-text\n );\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-active-sash-color: var(--dv-color-abyss-accent);\n --dv-floating-group-border: 2px solid var(--dv-color-abyss-dark);\n}\n\n.dockview-theme-light-spaced {\n --dv-paneview-active-outline-color: dodgerblue;\n --dv-tabs-and-actions-container-font-size: 13px;\n --dv-tabs-and-actions-container-height: 35px;\n --dv-drag-over-background-color: rgba(83, 89, 93, 0.5);\n --dv-drag-over-border-color: transparent;\n --dv-edge-dock-indicator-color: rgba(56, 139, 253, 0.9);\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.25);\n --dv-floating-border: 1px solid rgba(255, 255, 255, 0.1);\n --dv-overlay-z-index: 999;\n --dv-tab-font-size: inherit;\n --dv-border-radius: 0px;\n --dv-tab-margin: 0;\n --dv-sash-color: transparent;\n --dv-active-sash-color: transparent;\n --dv-active-sash-transition-duration: 0.1s;\n --dv-active-sash-transition-delay: 0.5s;\n --dv-spacing-padding: 0px;\n --dv-tab-border-radius: 0px;\n --dv-sash-border-radius: 0px;\n --dv-dropdown-border-radius: 0px;\n --dv-tab-close-icon-size: inherit;\n --dv-floating-group-border: none;\n --dv-drag-over-border: none;\n --dv-floating-group-dragging-opacity: 0.5;\n --dv-floating-titlebar-height: 22px;\n --dv-floating-titlebar-background-color: var(\n --dv-tabs-and-actions-container-background-color\n );\n --dv-floating-titlebar-border-bottom: var(--dv-floating-border);\n --dv-tab-group-color-grey: #5f6368;\n --dv-tab-group-color-blue: #1a73e8;\n --dv-tab-group-color-red: #d93025;\n --dv-tab-group-color-yellow: #f9ab00;\n --dv-tab-group-color-green: #188038;\n --dv-tab-group-color-pink: #d01884;\n --dv-tab-group-color-purple: #a142f4;\n --dv-tab-group-color-cyan: #007b83;\n --dv-tab-group-color-orange: #e8710a;\n --dv-tab-group-chip-padding: 4px 8px;\n --dv-tab-group-chip-border-radius: 6px;\n --dv-tab-group-chip-font-size: 11px;\n --dv-tab-group-line-height: 2px;\n --dv-tab-group-line-opacity: 0.6;\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-theme-light-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-theme-light-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-theme-light-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-theme-light-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-theme-light-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-theme-light-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-theme-light-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-theme-light-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-theme-light-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-tabs-overflow-container,\n.dockview-theme-light-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-theme-light-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-theme-light-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-theme-light-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-light-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-theme-light-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-theme-light-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-theme-light-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-theme-light-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-theme-light-spaced {\n color-scheme: light;\n --dv-drag-over-background-color: '';\n --dv-group-view-background-color: #f6f5f9;\n --dv-tabs-and-actions-container-background-color: white;\n --dv-activegroup-visiblepanel-tab-background-color: #ededf0;\n --dv-activegroup-hiddenpanel-tab-background-color: #f9f9fa;\n --dv-inactivegroup-visiblepanel-tab-background-color: #ededf0;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #f9f9fa;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(104, 107, 130);\n --dv-activegroup-hiddenpanel-tab-color: rgb(148, 151, 169);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(104, 107, 130);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(148, 151, 169);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-active-sash-color: rgb(91, 30, 207);\n --dv-floating-box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);\n --dv-floating-border: 1px solid rgba(0, 0, 0, 0.1);\n --dv-scrollbar-background-color: rgba(0, 0, 0, 0.25);\n --dv-floating-group-border: 2px solid rgba(255, 255, 255, 0.1);\n}\n\n.dockview-spaced {\n --dv-spacing-padding: 10px;\n --dv-tab-font-size: 12px;\n --dv-border-radius: 12px;\n --dv-tab-margin-block: 0.5rem;\n --dv-tab-margin-inline: 0.25rem;\n --dv-tab-margin: var(--dv-tab-margin-block) var(--dv-tab-margin-inline);\n --dv-tabs-and-actions-container-height: 44px;\n --dv-tab-border-radius: 8px;\n --dv-sash-border-radius: 4px;\n --dv-dropdown-border-radius: 8px;\n --dv-tab-close-icon-size: 8px;\n --dv-floating-group-border: 2px solid var(--dv-group-view-background-color);\n --dv-floating-titlebar-background-color: var(\n --dv-group-view-background-color\n );\n --dv-floating-titlebar-border-bottom: none;\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n background-color: var(--dv-group-view-background-color);\n}\n.dockview-spaced .dv-dockview {\n padding: 0;\n}\n.dockview-spaced .dv-resize-container:has(> .dv-groupview) {\n border-radius: 8px;\n}\n.dockview-spaced .dv-sash {\n border-radius: var(--dv-sash-border-radius);\n}\n.dockview-spaced .dv-drop-target-anchor {\n border-radius: calc(var(--dv-border-radius) / 4);\n}\n.dockview-spaced .dv-drop-target-anchor.dv-drop-target-content {\n border-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-resize-container {\n border-radius: var(--dv-border-radius) !important;\n border: none;\n}\n.dockview-spaced .dv-resize-container .dv-groupview {\n border: var(--dv-floating-group-border);\n}\n.dockview-spaced .dv-resize-container > .dv-grid-view {\n box-sizing: border-box;\n padding: var(--dv-spacing-padding);\n}\n.dockview-spaced .dv-resize-container-with-titlebar > .dv-grid-view {\n padding-top: 0;\n}\n.dockview-spaced .dv-resize-container-with-titlebar > .dv-floating-titlebar {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-tabs-overflow-container,\n.dockview-spaced .dv-tabs-overflow-dropdown-default {\n border-radius: var(--dv-dropdown-border-radius);\n height: unset !important;\n}\n.dockview-spaced .dv-render-overlay {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-tab {\n border-radius: var(--dv-tab-border-radius);\n}\n.dockview-spaced .dv-tab .dv-svg {\n height: var(--dv-tab-close-icon-size);\n width: var(--dv-tab-close-icon-size);\n}\n.dockview-spaced .dv-tabs-container--wrap:not(.dv-tabs-container-vertical) .dv-tab {\n height: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-spaced .dv-tabs-container-vertical .dv-tab {\n margin: var(--dv-tab-margin-inline) var(--dv-tab-margin-block);\n}\n.dockview-spaced .dv-tabs-container--wrap.dv-tabs-container-vertical .dv-tab {\n width: calc(var(--dv-tabs-and-actions-container-height) - 2 * var(--dv-tab-margin-block));\n}\n.dockview-spaced .dv-groupview {\n border-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview .dv-tabs-and-actions-container {\n padding: 0px calc(var(--dv-border-radius) / 2);\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical {\n padding: calc(var(--dv-border-radius) / 2) 0;\n}\n.dockview-spaced .dv-groupview .dv-content-container {\n background-color: var(--dv-tabs-and-actions-container-background-color);\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview.dv-edge-tool-window .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-groupview.dv-edge-tool-window .dv-content-container {\n border-radius: 0;\n}\n.dockview-spaced .dv-groupview.dv-edge-tool-window .dv-tabs-and-actions-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-edge-peek {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-edge-peek-clip {\n border-bottom-left-radius: var(--dv-border-radius);\n border-bottom-right-radius: var(--dv-border-radius);\n}\n.dockview-spaced .dv-edge-peek-header {\n border-top-left-radius: var(--dv-border-radius);\n border-top-right-radius: var(--dv-border-radius);\n}\n\n.dv-context-menu {\n min-width: 160px;\n overflow: hidden;\n background: var(--dv-context-menu-background-color, var(--dv-activegroup-hiddenpanel-tab-background-color));\n color: var(--dv-context-menu-color, var(--dv-activegroup-hiddenpanel-tab-color));\n border: 1px solid var(--dv-tab-divider-color);\n border-radius: var(--dv-border-radius);\n box-shadow: var(--dv-floating-box-shadow);\n padding: 4px 0;\n}\n\n.dv-context-menu-item {\n height: 25px;\n padding: 0 12px;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-size: var(--dv-tabs-and-actions-container-font-size);\n white-space: nowrap;\n user-select: none;\n}\n.dv-context-menu-item:hover {\n background: var(--dv-icon-hover-background-color);\n}\n.dv-context-menu-item.dv-context-menu-item--disabled {\n opacity: 0.4;\n cursor: default;\n pointer-events: none;\n}\n\n.dv-context-menu-separator {\n height: 1px;\n background: var(--dv-tab-divider-color);\n margin: 4px 0;\n}\n\n.dv-context-menu-rename {\n padding: 8px 12px 4px;\n}\n\n.dv-context-menu-rename-input {\n width: 100%;\n box-sizing: border-box;\n padding: 8px 10px;\n border: 1px solid var(--dv-tab-divider-color);\n border-radius: var(--dv-border-radius);\n background: inherit;\n color: var(--dv-activegroup-visiblepanel-tab-color);\n font-size: var(--dv-tabs-and-actions-container-font-size);\n outline: none;\n}\n.dv-context-menu-rename-input:focus {\n border-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.dv-context-menu-rename-input::placeholder {\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n\n.dv-context-menu-color-picker {\n display: flex;\n flex-direction: row;\n gap: 6px;\n padding: 8px 12px;\n align-items: center;\n}\n\n.dv-context-menu-color-swatch {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n cursor: pointer;\n border: 2px solid transparent;\n flex-shrink: 0;\n background-color: var(--dv-tab-group-color);\n}\n.dv-context-menu-color-swatch:hover {\n opacity: 0.85;\n}\n.dv-context-menu-color-swatch.dv-context-menu-color-swatch--selected {\n outline: 2px solid var(--dv-tab-divider-color);\n outline-offset: 2px;\n}\n\n.dv-tab-group-indicator-none .dv-groupview-header-bottom .dv-tab-group-underline {\n top: auto;\n bottom: 0;\n}\n\n.dv-groupview.dv-groupview-header-bottom.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after, .dv-groupview.dv-groupview-header-bottom.dv-inactive-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::after {\n top: 0px;\n bottom: auto;\n}";
|
|
18
18
|
document.head.appendChild(s);
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -395,7 +395,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
395
395
|
this._onDidBlur = new Emitter();
|
|
396
396
|
this.onDidBlur = this._onDidBlur.event;
|
|
397
397
|
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
398
|
-
let hasFocus = isAncestor(
|
|
398
|
+
let hasFocus = isAncestor(getActiveElement(element), element);
|
|
399
399
|
let loosingFocus = false;
|
|
400
400
|
const onFocus = () => {
|
|
401
401
|
loosingFocus = false;
|
|
@@ -417,7 +417,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
417
417
|
}
|
|
418
418
|
};
|
|
419
419
|
this._refreshStateHandler = () => {
|
|
420
|
-
if (isAncestor(
|
|
420
|
+
if (isAncestor(getActiveElement(element), element) !== hasFocus) if (hasFocus) onBlur();
|
|
421
421
|
else onFocus();
|
|
422
422
|
};
|
|
423
423
|
this.addDisposables(addDisposableListener(element, "focus", onFocus, true));
|
|
@@ -434,6 +434,49 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
434
434
|
function quasiDefaultPrevented(event) {
|
|
435
435
|
return event[QUASI_PREVENT_DEFAULT_KEY];
|
|
436
436
|
}
|
|
437
|
+
/** Whether the event originated within any of `elements`. Checks the
|
|
438
|
+
* composed path, so it also holds for elements inside a shadow root, which a
|
|
439
|
+
* window or document listener sees retargeted to the shadow host. */
|
|
440
|
+
function isEventWithin(event, elements) {
|
|
441
|
+
var _event$composedPath, _event$composedPath2;
|
|
442
|
+
const path = (_event$composedPath = (_event$composedPath2 = event.composedPath) === null || _event$composedPath2 === void 0 ? void 0 : _event$composedPath2.call(event)) !== null && _event$composedPath !== void 0 ? _event$composedPath : [];
|
|
443
|
+
if (path.length > 0) return elements.some((el) => path.includes(el));
|
|
444
|
+
const target = event.target;
|
|
445
|
+
return target instanceof Node && elements.some((el) => el.contains(target));
|
|
446
|
+
}
|
|
447
|
+
/** Every shadow root between `element` and its document, innermost first. An
|
|
448
|
+
* element in a component nested inside another component sits in more than
|
|
449
|
+
* one, and an event is cut at each boundary. */
|
|
450
|
+
function shadowRootsOf(node) {
|
|
451
|
+
const roots = [];
|
|
452
|
+
let root = node.getRootNode();
|
|
453
|
+
while (isShadowRoot(root)) {
|
|
454
|
+
roots.push(root);
|
|
455
|
+
root = root.host.getRootNode();
|
|
456
|
+
}
|
|
457
|
+
return roots;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* `element` as a listener rooted in `scope`'s tree sees it. A node in a shadow
|
|
461
|
+
* root *below* that tree is retargeted to its host there, repeatedly for
|
|
462
|
+
* nested roots; a node already in the same tree is returned unchanged. Omit
|
|
463
|
+
* `scope` (or pass a node in the document) for the document-level view, which
|
|
464
|
+
* is what a window listener gets.
|
|
465
|
+
*
|
|
466
|
+
* The scope matters: a layer living inside a shadow root must be able to tell
|
|
467
|
+
* its own elements apart, and retargeting everything out to the document would
|
|
468
|
+
* collapse them all onto the one host.
|
|
469
|
+
*/
|
|
470
|
+
function retargetInto(element, scope) {
|
|
471
|
+
const scopeRoot = scope === null || scope === void 0 ? void 0 : scope.getRootNode();
|
|
472
|
+
let current = element;
|
|
473
|
+
let root = current.getRootNode();
|
|
474
|
+
while (root !== scopeRoot && isShadowRoot(root)) {
|
|
475
|
+
current = root.host;
|
|
476
|
+
root = current.getRootNode();
|
|
477
|
+
}
|
|
478
|
+
return current;
|
|
479
|
+
}
|
|
437
480
|
function addStyles(document, styleSheetList, options = {}) {
|
|
438
481
|
const styleSheets = Array.from(styleSheetList);
|
|
439
482
|
const { nonce } = options;
|
|
@@ -444,6 +487,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
444
487
|
link.href = styleSheet.href;
|
|
445
488
|
link.type = styleSheet.type;
|
|
446
489
|
link.rel = "stylesheet";
|
|
490
|
+
if (resolvedNonce) link.setAttribute("nonce", resolvedNonce);
|
|
447
491
|
document.head.appendChild(link);
|
|
448
492
|
continue;
|
|
449
493
|
}
|
|
@@ -483,6 +527,23 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
483
527
|
else currentElement = currentElement.parentNode;
|
|
484
528
|
return false;
|
|
485
529
|
}
|
|
530
|
+
/** Duck-typed so it holds for a shadow root from another window's realm. */
|
|
531
|
+
function isShadowRoot(node) {
|
|
532
|
+
return !!node && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && "host" in node && !!node.host;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* The document or shadow root to hit-test (`elementFromPoint` /
|
|
536
|
+
* `elementsFromPoint`) against for `node`. Hit-testing on the document stops
|
|
537
|
+
* at a shadow host, so when dockview is mounted in a shadow root it has to go
|
|
538
|
+
* through that root to reach its own elements. Falls back to the owning
|
|
539
|
+
* document (which may be a popout's) for a detached node.
|
|
540
|
+
*/
|
|
541
|
+
function getHitTestRoot(node) {
|
|
542
|
+
var _node$ownerDocument;
|
|
543
|
+
const root = node.getRootNode();
|
|
544
|
+
if (root !== node && typeof root.elementsFromPoint === "function") return root;
|
|
545
|
+
return (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 ? _node$ownerDocument : document;
|
|
546
|
+
}
|
|
486
547
|
function addTestId(element, id) {
|
|
487
548
|
element.dataset.testid = id;
|
|
488
549
|
}
|
|
@@ -517,6 +578,38 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
517
578
|
iframes.splice(0, iframes.length);
|
|
518
579
|
} };
|
|
519
580
|
}
|
|
581
|
+
/**
|
|
582
|
+
* Suppress text selection for the duration of a pointer drag.
|
|
583
|
+
*
|
|
584
|
+
* A pointer drag is just a held button as far as the browser is concerned, so
|
|
585
|
+
* it selects text under the cursor as it travels. HTML5 drag-and-drop is
|
|
586
|
+
* exempt - the browser owns the gesture - which is why this is only needed on
|
|
587
|
+
* the pointer backend.
|
|
588
|
+
*
|
|
589
|
+
* `user-select: none` alone is not enough on WebKit: it starts the selection
|
|
590
|
+
* gesture from a mousedown on a `user-select: none` element unless that
|
|
591
|
+
* element is also natively draggable, then extends it into whatever the
|
|
592
|
+
* pointer crosses. Cancelling `selectstart` refuses that first extension,
|
|
593
|
+
* which ends the gesture for the rest of the drag.
|
|
594
|
+
*
|
|
595
|
+
* An existing selection is left alone: a mousedown on a `user-select: none`
|
|
596
|
+
* element does not clear one natively, and a pointer drag should not either.
|
|
597
|
+
*/
|
|
598
|
+
function disableTextSelection(rootNode = document) {
|
|
599
|
+
const doc = rootNode instanceof Document ? rootNode : rootNode.ownerDocument;
|
|
600
|
+
const root = doc === null || doc === void 0 ? void 0 : doc.documentElement;
|
|
601
|
+
if (!doc || !root) return { release: () => void 0 };
|
|
602
|
+
const properties = ["user-select", "-webkit-user-select"];
|
|
603
|
+
const previous = properties.map((name) => [name, root.style.getPropertyValue(name)]);
|
|
604
|
+
for (const name of properties) root.style.setProperty(name, "none");
|
|
605
|
+
const onSelectStart = (event) => event.preventDefault();
|
|
606
|
+
doc.addEventListener("selectstart", onSelectStart);
|
|
607
|
+
return { release: () => {
|
|
608
|
+
doc.removeEventListener("selectstart", onSelectStart);
|
|
609
|
+
for (const [name, value] of previous) if (value) root.style.setProperty(name, value);
|
|
610
|
+
else root.style.removeProperty(name);
|
|
611
|
+
} };
|
|
612
|
+
}
|
|
520
613
|
function getDockviewTheme(element) {
|
|
521
614
|
function toClassList(element) {
|
|
522
615
|
const list = [];
|
|
@@ -528,6 +621,11 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
528
621
|
while (parent !== null) {
|
|
529
622
|
theme = toClassList(parent).find((cls) => cls.startsWith("dockview-theme-"));
|
|
530
623
|
if (typeof theme === "string") break;
|
|
624
|
+
if (parent.parentElement === null) {
|
|
625
|
+
const root = parent.getRootNode();
|
|
626
|
+
parent = isShadowRoot(root) ? root.host : null;
|
|
627
|
+
continue;
|
|
628
|
+
}
|
|
531
629
|
parent = parent.parentElement;
|
|
532
630
|
}
|
|
533
631
|
return theme;
|
|
@@ -639,6 +737,285 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
639
737
|
}
|
|
640
738
|
return "";
|
|
641
739
|
}
|
|
740
|
+
/** The focused element as seen from `node`'s own tree. Unlike
|
|
741
|
+
* `document.activeElement`, which is the shadow host when focus is inside a
|
|
742
|
+
* shadow root, this reaches into the root `node` lives in (and a popout's
|
|
743
|
+
* own document), while a web component nested inside that tree still
|
|
744
|
+
* resolves to its host there. */
|
|
745
|
+
function getActiveElement(node) {
|
|
746
|
+
var _root$activeElement;
|
|
747
|
+
const root = node.getRootNode();
|
|
748
|
+
const doc = root.nodeType === Node.DOCUMENT_NODE ? root : node.ownerDocument;
|
|
749
|
+
if (doc && typeof doc.hasFocus === "function" && !doc.hasFocus()) return null;
|
|
750
|
+
return (_root$activeElement = root.activeElement) !== null && _root$activeElement !== void 0 ? _root$activeElement : null;
|
|
751
|
+
}
|
|
752
|
+
/** Where to append a floating element (e.g. a drag ghost) for `node`: its
|
|
753
|
+
* shadow root when it lives in one, so styles scoped there still apply,
|
|
754
|
+
* otherwise the body of its own document (which may be a popout's). */
|
|
755
|
+
function getOverlayParent(node) {
|
|
756
|
+
var _node$ownerDocument2;
|
|
757
|
+
const root = node.getRootNode();
|
|
758
|
+
if (isShadowRoot(root)) return root;
|
|
759
|
+
return ((_node$ownerDocument2 = node.ownerDocument) !== null && _node$ownerDocument2 !== void 0 ? _node$ownerDocument2 : document).body;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
//#endregion
|
|
763
|
+
//#region \0@oxc-project+runtime@0.139.0/helpers/esm/asyncToGenerator.js
|
|
764
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) {
|
|
765
|
+
try {
|
|
766
|
+
var i = n[a](c), u = i.value;
|
|
767
|
+
} catch (n) {
|
|
768
|
+
e(n);
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
i.done ? t(u) : Promise.resolve(u).then(r, o);
|
|
772
|
+
}
|
|
773
|
+
function _asyncToGenerator(n) {
|
|
774
|
+
return function() {
|
|
775
|
+
var t = this, e = arguments;
|
|
776
|
+
return new Promise(function(r, o) {
|
|
777
|
+
var a = n.apply(t, e);
|
|
778
|
+
function _next(n) {
|
|
779
|
+
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
|
|
780
|
+
}
|
|
781
|
+
function _throw(n) {
|
|
782
|
+
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
|
|
783
|
+
}
|
|
784
|
+
_next(void 0);
|
|
785
|
+
});
|
|
786
|
+
};
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
//#endregion
|
|
790
|
+
//#region src/popoutWindow.ts
|
|
791
|
+
/**
|
|
792
|
+
* Throwing form of {@link getPopoutUrlError}, for callers with no way to
|
|
793
|
+
* recover from a refused URL.
|
|
794
|
+
*/
|
|
795
|
+
function assertSameOriginPopoutUrl(url) {
|
|
796
|
+
const error = getPopoutUrlError(url);
|
|
797
|
+
if (error) throw error;
|
|
798
|
+
}
|
|
799
|
+
/**
|
|
800
|
+
* Schemes a popout must never open: each runs script in a context the browser
|
|
801
|
+
* still associates with the opener, or (for `file:`) has no origin to check.
|
|
802
|
+
*/
|
|
803
|
+
const UNSAFE_POPOUT_PROTOCOLS = /* @__PURE__ */ new Set([
|
|
804
|
+
"javascript:",
|
|
805
|
+
"data:",
|
|
806
|
+
"blob:",
|
|
807
|
+
"vbscript:",
|
|
808
|
+
"file:"
|
|
809
|
+
]);
|
|
810
|
+
/** How often an open popout window's `closed` flag is checked. */
|
|
811
|
+
const CLOSED_POLL_INTERVAL_MS = 250;
|
|
812
|
+
/**
|
|
813
|
+
* The reason `url` is unusable as a popout target, or `undefined` if it is
|
|
814
|
+
* allowed. Rejects anything that isn't same-origin with the page (scheme and
|
|
815
|
+
* host, so a packaged webview's own scheme such as `tauri://` qualifies), and
|
|
816
|
+
* the `javascript:`, `data:`, `blob:`, `vbscript:` and `file:` schemes that
|
|
817
|
+
* would otherwise execute in a context the browser still associates with the
|
|
818
|
+
* opener via `window.opener`.
|
|
819
|
+
*
|
|
820
|
+
* Callers that can recover from a refusal use this rather than catching, so it
|
|
821
|
+
* can be handled without a rejected promise. `page` is what the URL resolves
|
|
822
|
+
* against, and defaults to this page.
|
|
823
|
+
*/
|
|
824
|
+
function getPopoutUrlError(url, page = globalThis.location) {
|
|
825
|
+
let resolved;
|
|
826
|
+
try {
|
|
827
|
+
resolved = new URL(url, page.href);
|
|
828
|
+
} catch (_unused) {
|
|
829
|
+
return /* @__PURE__ */ new Error(`dockview: invalid popout URL: ${url}`);
|
|
830
|
+
}
|
|
831
|
+
if (UNSAFE_POPOUT_PROTOCOLS.has(resolved.protocol)) return /* @__PURE__ */ new Error(`dockview: popout URL must not use the "${resolved.protocol}" protocol, which would run in the opener's context; got: ${url}`);
|
|
832
|
+
if (!(resolved.protocol === page.protocol && resolved.host === page.host)) return /* @__PURE__ */ new Error(`dockview: popout URL must be same-origin with the page (${page.protocol}//${page.host}); got: ${url}`);
|
|
833
|
+
}
|
|
834
|
+
var PopoutWindow = class extends CompositeDisposable {
|
|
835
|
+
get window() {
|
|
836
|
+
var _this$_window$value, _this$_window;
|
|
837
|
+
return (_this$_window$value = (_this$_window = this._window) === null || _this$_window === void 0 ? void 0 : _this$_window.value) !== null && _this$_window$value !== void 0 ? _this$_window$value : null;
|
|
838
|
+
}
|
|
839
|
+
/** Set when {@link open} resolved `null`, saying which way it failed. */
|
|
840
|
+
get failure() {
|
|
841
|
+
return this._failure;
|
|
842
|
+
}
|
|
843
|
+
constructor(target, className, options) {
|
|
844
|
+
super();
|
|
845
|
+
this.target = target;
|
|
846
|
+
this.className = className;
|
|
847
|
+
this.options = options;
|
|
848
|
+
this._onWillClose = new Emitter();
|
|
849
|
+
this.onWillClose = this._onWillClose.event;
|
|
850
|
+
this._onDidClose = new Emitter();
|
|
851
|
+
this.onDidClose = this._onDidClose.event;
|
|
852
|
+
this._window = null;
|
|
853
|
+
this.addDisposables(this._onWillClose, this._onDidClose, { dispose: () => {
|
|
854
|
+
this.close();
|
|
855
|
+
} });
|
|
856
|
+
}
|
|
857
|
+
dimensions() {
|
|
858
|
+
if (!this._window) return null;
|
|
859
|
+
const left = this._window.value.screenX;
|
|
860
|
+
return {
|
|
861
|
+
top: this._window.value.screenY,
|
|
862
|
+
left,
|
|
863
|
+
width: this._window.value.innerWidth,
|
|
864
|
+
height: this._window.value.innerHeight
|
|
865
|
+
};
|
|
866
|
+
}
|
|
867
|
+
close() {
|
|
868
|
+
var _this$options$onWillC, _this$options;
|
|
869
|
+
const current = this._window;
|
|
870
|
+
if (!current) return;
|
|
871
|
+
this._window = null;
|
|
872
|
+
this._onWillClose.fire();
|
|
873
|
+
(_this$options$onWillC = (_this$options = this.options).onWillClose) === null || _this$options$onWillC === void 0 || _this$options$onWillC.call(_this$options, {
|
|
874
|
+
id: this.target,
|
|
875
|
+
window: current.value
|
|
876
|
+
});
|
|
877
|
+
current.disposable.dispose();
|
|
878
|
+
this._onDidClose.fire();
|
|
879
|
+
}
|
|
880
|
+
open() {
|
|
881
|
+
var _this = this;
|
|
882
|
+
return _asyncToGenerator(function* () {
|
|
883
|
+
var _this$options$onDidOp, _this$options2;
|
|
884
|
+
if (_this._window) throw new Error("instance of popout window is already open");
|
|
885
|
+
const url = `${_this.options.url}`;
|
|
886
|
+
assertSameOriginPopoutUrl(url);
|
|
887
|
+
const features = Object.entries({
|
|
888
|
+
top: _this.options.top,
|
|
889
|
+
left: _this.options.left,
|
|
890
|
+
width: _this.options.width,
|
|
891
|
+
height: _this.options.height
|
|
892
|
+
}).map(([key, value]) => `${key}=${value}`).join(",");
|
|
893
|
+
/**
|
|
894
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/open
|
|
895
|
+
*/
|
|
896
|
+
const externalWindow = window.open(url, _this.target, features);
|
|
897
|
+
if (!externalWindow) {
|
|
898
|
+
_this._failure = { reason: "blocked" };
|
|
899
|
+
return null;
|
|
900
|
+
}
|
|
901
|
+
const disposable = new CompositeDisposable();
|
|
902
|
+
_this._window = {
|
|
903
|
+
value: externalWindow,
|
|
904
|
+
disposable
|
|
905
|
+
};
|
|
906
|
+
disposable.addDisposables(Disposable.from(() => {
|
|
907
|
+
externalWindow.close();
|
|
908
|
+
}), _this.watchForClose(externalWindow), addDisposableListener(globalThis.window, "beforeunload", () => {
|
|
909
|
+
/**
|
|
910
|
+
* before the main window closes we should close this popup too
|
|
911
|
+
* to be good citizens
|
|
912
|
+
*
|
|
913
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
|
914
|
+
*/
|
|
915
|
+
_this.close();
|
|
916
|
+
}));
|
|
917
|
+
const container = _this.createPopoutWindowContainer();
|
|
918
|
+
if (_this.className) container.classList.add(_this.className);
|
|
919
|
+
(_this$options$onDidOp = (_this$options2 = _this.options).onDidOpen) === null || _this$options$onDidOp === void 0 || _this$options$onDidOp.call(_this$options2, {
|
|
920
|
+
id: _this.target,
|
|
921
|
+
window: externalWindow
|
|
922
|
+
});
|
|
923
|
+
return new Promise((resolve) => {
|
|
924
|
+
/**
|
|
925
|
+
* A host can answer `window.open` with a window in its own
|
|
926
|
+
* JavaScript context, which throws on first touch and cannot be
|
|
927
|
+
* filled with panel DOM. Settle as a blocked popup does, so the
|
|
928
|
+
* caller's fallback returns the group to the grid.
|
|
929
|
+
*/
|
|
930
|
+
const abandon = (err) => {
|
|
931
|
+
_this._failure = {
|
|
932
|
+
reason: "unscriptable",
|
|
933
|
+
error: err instanceof Error ? err : new Error(String(err))
|
|
934
|
+
};
|
|
935
|
+
_this.close();
|
|
936
|
+
resolve(null);
|
|
937
|
+
};
|
|
938
|
+
try {
|
|
939
|
+
externalWindow.addEventListener("unload", () => {});
|
|
940
|
+
} catch (err) {
|
|
941
|
+
abandon(err);
|
|
942
|
+
return;
|
|
943
|
+
}
|
|
944
|
+
/**
|
|
945
|
+
* `load` is the only event that resolves this promise with a
|
|
946
|
+
* container, so a window that goes away first would leave the
|
|
947
|
+
* caller awaiting a promise that never settles - and
|
|
948
|
+
* `addPopoutGroup` holds its layout transaction open until it does.
|
|
949
|
+
* Settle with `null` on close, the same signal a blocked popup
|
|
950
|
+
* gives and one the caller already handles. `resolve` after the
|
|
951
|
+
* fact is a no-op, so a `load` that arrived first still wins.
|
|
952
|
+
*/
|
|
953
|
+
disposable.addDisposables(_this.onWillClose(() => {
|
|
954
|
+
var _this$_failure;
|
|
955
|
+
(_this$_failure = _this._failure) !== null && _this$_failure !== void 0 || (_this._failure = { reason: "closed" });
|
|
956
|
+
resolve(null);
|
|
957
|
+
}));
|
|
958
|
+
externalWindow.addEventListener("load", () => {
|
|
959
|
+
/**
|
|
960
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event
|
|
961
|
+
*/
|
|
962
|
+
try {
|
|
963
|
+
var _globalThis$document$, _this$options$styleRo, _this$options3;
|
|
964
|
+
const externalDocument = externalWindow.document;
|
|
965
|
+
externalDocument.title = document.title;
|
|
966
|
+
externalDocument.body.appendChild(container);
|
|
967
|
+
addStyles(externalDocument, [...Array.from(globalThis.document.styleSheets), ...(_globalThis$document$ = globalThis.document.adoptedStyleSheets) !== null && _globalThis$document$ !== void 0 ? _globalThis$document$ : []], { nonce: _this.options.nonce });
|
|
968
|
+
const sheets = [];
|
|
969
|
+
for (let root = (_this$options$styleRo = (_this$options3 = _this.options).styleRoot) === null || _this$options$styleRo === void 0 ? void 0 : _this$options$styleRo.call(_this$options3); isShadowRoot(root); root = root.host.getRootNode()) {
|
|
970
|
+
var _root$styleSheets, _root$adoptedStyleShe;
|
|
971
|
+
sheets.push(...Array.from((_root$styleSheets = root.styleSheets) !== null && _root$styleSheets !== void 0 ? _root$styleSheets : []), ...(_root$adoptedStyleShe = root.adoptedStyleSheets) !== null && _root$adoptedStyleShe !== void 0 ? _root$adoptedStyleShe : []);
|
|
972
|
+
}
|
|
973
|
+
if (sheets.length > 0) addStyles(externalDocument, sheets, { nonce: _this.options.nonce });
|
|
974
|
+
/**
|
|
975
|
+
* beforeunload must be registered after load for reasons I could not determine
|
|
976
|
+
* otherwise the beforeunload event will not fire when the window is closed
|
|
977
|
+
*/
|
|
978
|
+
addDisposableListener(externalWindow, "beforeunload", () => {
|
|
979
|
+
/**
|
|
980
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
|
981
|
+
*/
|
|
982
|
+
_this.close();
|
|
983
|
+
});
|
|
984
|
+
resolve(container);
|
|
985
|
+
} catch (err) {
|
|
986
|
+
abandon(err);
|
|
987
|
+
}
|
|
988
|
+
});
|
|
989
|
+
});
|
|
990
|
+
})();
|
|
991
|
+
}
|
|
992
|
+
/**
|
|
993
|
+
* Backstop for the `beforeunload` signal, which a window torn down without
|
|
994
|
+
* running its unload handlers never sends: a native shell destroying the
|
|
995
|
+
* webview, or a browser discarding the page. `closed` is readable on any
|
|
996
|
+
* handle, cross-origin included. Whichever signal arrives first wins.
|
|
997
|
+
*/
|
|
998
|
+
watchForClose(externalWindow) {
|
|
999
|
+
if (typeof externalWindow.closed !== "boolean") return Disposable.NONE;
|
|
1000
|
+
const handle = setInterval(() => {
|
|
1001
|
+
if (externalWindow.closed) this.close();
|
|
1002
|
+
}, CLOSED_POLL_INTERVAL_MS);
|
|
1003
|
+
return Disposable.from(() => {
|
|
1004
|
+
clearInterval(handle);
|
|
1005
|
+
});
|
|
1006
|
+
}
|
|
1007
|
+
createPopoutWindowContainer() {
|
|
1008
|
+
const el = document.createElement("div");
|
|
1009
|
+
el.classList.add("dv-popout-window");
|
|
1010
|
+
el.id = "dv-popout-window";
|
|
1011
|
+
el.style.position = "absolute";
|
|
1012
|
+
el.style.width = "100%";
|
|
1013
|
+
el.style.height = "100%";
|
|
1014
|
+
el.style.top = "0px";
|
|
1015
|
+
el.style.left = "0px";
|
|
1016
|
+
return el;
|
|
1017
|
+
}
|
|
1018
|
+
};
|
|
642
1019
|
|
|
643
1020
|
//#endregion
|
|
644
1021
|
//#region src/array.ts
|
|
@@ -858,6 +1235,15 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
858
1235
|
get proportions() {
|
|
859
1236
|
return this._proportions ? [...this._proportions] : void 0;
|
|
860
1237
|
}
|
|
1238
|
+
get proportionalLayout() {
|
|
1239
|
+
return this._proportionalLayout;
|
|
1240
|
+
}
|
|
1241
|
+
set proportionalLayout(value) {
|
|
1242
|
+
if (this._proportionalLayout === value) return;
|
|
1243
|
+
this._proportionalLayout = value;
|
|
1244
|
+
if (value) this.saveProportions();
|
|
1245
|
+
else this._proportions = void 0;
|
|
1246
|
+
}
|
|
861
1247
|
get orientation() {
|
|
862
1248
|
return this._orientation;
|
|
863
1249
|
}
|
|
@@ -982,7 +1368,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
982
1368
|
this._orientation = (_options$orientation = options.orientation) !== null && _options$orientation !== void 0 ? _options$orientation : "VERTICAL";
|
|
983
1369
|
this.element = this.createContainer();
|
|
984
1370
|
this.margin = (_options$margin = options.margin) !== null && _options$margin !== void 0 ? _options$margin : 0;
|
|
985
|
-
this.
|
|
1371
|
+
this._proportionalLayout = options.proportionalLayout === void 0 ? true : !!options.proportionalLayout;
|
|
986
1372
|
this.viewContainer = this.createViewContainer();
|
|
987
1373
|
this.sashContainer = this.createSashContainer();
|
|
988
1374
|
this.element.appendChild(this.sashContainer);
|
|
@@ -1706,10 +2092,18 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
1706
2092
|
if (child instanceof BranchNode) child.margin = value;
|
|
1707
2093
|
});
|
|
1708
2094
|
}
|
|
2095
|
+
get proportionalLayout() {
|
|
2096
|
+
return this.splitview.proportionalLayout;
|
|
2097
|
+
}
|
|
2098
|
+
set proportionalLayout(value) {
|
|
2099
|
+
this.splitview.proportionalLayout = value;
|
|
2100
|
+
this.children.forEach((child) => {
|
|
2101
|
+
if (child instanceof BranchNode) child.proportionalLayout = value;
|
|
2102
|
+
});
|
|
2103
|
+
}
|
|
1709
2104
|
constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, margin, childDescriptors) {
|
|
1710
2105
|
super();
|
|
1711
2106
|
this.orientation = orientation;
|
|
1712
|
-
this.proportionalLayout = proportionalLayout;
|
|
1713
2107
|
this.styles = styles;
|
|
1714
2108
|
this._childrenDisposable = Disposable.NONE;
|
|
1715
2109
|
this.children = [];
|
|
@@ -2251,8 +2645,13 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
2251
2645
|
}
|
|
2252
2646
|
return findLeaf(this.root, reverse);
|
|
2253
2647
|
}
|
|
2648
|
+
get proportionalLayout() {
|
|
2649
|
+
return this.root.proportionalLayout;
|
|
2650
|
+
}
|
|
2651
|
+
set proportionalLayout(value) {
|
|
2652
|
+
this.root.proportionalLayout = value;
|
|
2653
|
+
}
|
|
2254
2654
|
constructor(proportionalLayout, styles, orientation, locked, margin) {
|
|
2255
|
-
this.proportionalLayout = proportionalLayout;
|
|
2256
2655
|
this.styles = styles;
|
|
2257
2656
|
this._locked = false;
|
|
2258
2657
|
this._margin = 0;
|
|
@@ -2446,6 +2845,25 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
2446
2845
|
this.layout(width, height);
|
|
2447
2846
|
}));
|
|
2448
2847
|
}
|
|
2848
|
+
/**
|
|
2849
|
+
* Lay out from the element's current size.
|
|
2850
|
+
*
|
|
2851
|
+
* The ResizeObserver above only reports asynchronously, so between
|
|
2852
|
+
* construction and its first callback the component believes it has no
|
|
2853
|
+
* size - and anything built in that window (panels added right after
|
|
2854
|
+
* `createDockview`, say) resolves its sizes against zero and collapses to
|
|
2855
|
+
* minimums. Concrete components call this once they are fully constructed
|
|
2856
|
+
* so that work sees the real size. The same guards as the observer apply:
|
|
2857
|
+
* a detached or hidden element has no size worth propagating.
|
|
2858
|
+
*/
|
|
2859
|
+
layoutFromElement() {
|
|
2860
|
+
if (this.disableResizing || !this._element.offsetParent) return;
|
|
2861
|
+
if (!isInDocument(this._element)) return;
|
|
2862
|
+
const width = Math.round(this._element.clientWidth);
|
|
2863
|
+
const height = Math.round(this._element.clientHeight);
|
|
2864
|
+
if (width === 0 || height === 0) return;
|
|
2865
|
+
this.layout(width, height);
|
|
2866
|
+
}
|
|
2449
2867
|
};
|
|
2450
2868
|
|
|
2451
2869
|
//#endregion
|
|
@@ -2546,7 +2964,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
2546
2964
|
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
2547
2965
|
}
|
|
2548
2966
|
updateOptions(options) {
|
|
2549
|
-
if (
|
|
2967
|
+
if ("proportionalLayout" in options) {
|
|
2968
|
+
var _options$proportional;
|
|
2969
|
+
this.gridview.proportionalLayout = (_options$proportional = options.proportionalLayout) !== null && _options$proportional !== void 0 ? _options$proportional : true;
|
|
2970
|
+
}
|
|
2550
2971
|
if (options.orientation) this.gridview.orientation = options.orientation;
|
|
2551
2972
|
if ("styles" in options) {}
|
|
2552
2973
|
if ("disableAutoResizing" in options) {
|
|
@@ -3355,6 +3776,15 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3355
3776
|
get onUnhandledDragOver() {
|
|
3356
3777
|
return this.component.onUnhandledDragOver;
|
|
3357
3778
|
}
|
|
3779
|
+
/**
|
|
3780
|
+
* The drag-and-drop backends currently live: `dndStrategy` resolved against
|
|
3781
|
+
* this device, which `'auto'` reads from the primary input device. Only an
|
|
3782
|
+
* HTML5 drag can leave the window it started in, so check `html5` before
|
|
3783
|
+
* relying on a drag between a popout window and the main window.
|
|
3784
|
+
*/
|
|
3785
|
+
get dndCapabilities() {
|
|
3786
|
+
return this.component.dndCapabilities;
|
|
3787
|
+
}
|
|
3358
3788
|
get onDidPopoutGroupSizeChange() {
|
|
3359
3789
|
return this.component.onDidPopoutGroupSizeChange;
|
|
3360
3790
|
}
|
|
@@ -3377,9 +3807,27 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3377
3807
|
get onDidRemovePopoutGroup() {
|
|
3378
3808
|
return this.component.onDidRemovePopoutGroup;
|
|
3379
3809
|
}
|
|
3810
|
+
/**
|
|
3811
|
+
* Fires when a popout window could not be used, carrying which way it
|
|
3812
|
+
* failed: the URL was refused, the browser blocked the window, the host
|
|
3813
|
+
* returned a window whose document the opener cannot reach, or it closed
|
|
3814
|
+
* before loading. The group stays in (or returns to) the main grid.
|
|
3815
|
+
*/
|
|
3380
3816
|
get onDidOpenPopoutWindowFail() {
|
|
3381
3817
|
return this.component.onDidOpenPopoutWindowFail;
|
|
3382
3818
|
}
|
|
3819
|
+
/**
|
|
3820
|
+
* Fires as dockview lets go of a popout window, while that window is still
|
|
3821
|
+
* open, carrying its live `Window` handle. Covers every popout the component
|
|
3822
|
+
* opened and every reason for closing one, disposal included;
|
|
3823
|
+
* {@link onDidAddPopoutGroup} is the opening half.
|
|
3824
|
+
*
|
|
3825
|
+
* For hosts that own their windows: in a desktop webview the page's own
|
|
3826
|
+
* `close()` can be a no-op, so the shell has to be told.
|
|
3827
|
+
*/
|
|
3828
|
+
get onWillClosePopoutWindow() {
|
|
3829
|
+
return this.component.onWillClosePopoutWindow;
|
|
3830
|
+
}
|
|
3383
3831
|
/** Enumerate the popout groups currently open in their own windows. */
|
|
3384
3832
|
getPopouts() {
|
|
3385
3833
|
return this.component.getPopouts();
|
|
@@ -4346,7 +4794,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4346
4794
|
var _options$ownerDocumen, _options$x, _options$y;
|
|
4347
4795
|
addClasses(ghostElement, "dv-dragged");
|
|
4348
4796
|
ghostElement.style.top = "-9999px";
|
|
4349
|
-
|
|
4797
|
+
ghostElement.style.position = "absolute";
|
|
4798
|
+
((options === null || options === void 0 ? void 0 : options.owner) ? getOverlayParent(options.owner) : ((_options$ownerDocumen = options === null || options === void 0 ? void 0 : options.ownerDocument) !== null && _options$ownerDocumen !== void 0 ? _options$ownerDocumen : document).body).appendChild(ghostElement);
|
|
4350
4799
|
dataTransfer.setDragImage(ghostElement, (_options$x = options === null || options === void 0 ? void 0 : options.x) !== null && _options$x !== void 0 ? _options$x : 0, (_options$y = options === null || options === void 0 ? void 0 : options.y) !== null && _options$y !== void 0 ? _options$y : 0);
|
|
4351
4800
|
setTimeout(() => {
|
|
4352
4801
|
removeClasses(ghostElement, "dv-dragged");
|
|
@@ -4398,7 +4847,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4398
4847
|
} };
|
|
4399
4848
|
}
|
|
4400
4849
|
beginDrag(args) {
|
|
4401
|
-
var _source$ownerDocument, _source$ownerDocument2, _source$ownerDocument3;
|
|
4850
|
+
var _source$ownerDocument, _source$ownerDocument2, _source$ownerDocument3, _source$ownerDocument4;
|
|
4402
4851
|
if (this._active) this.cancel();
|
|
4403
4852
|
const { pointerEvent, source } = args;
|
|
4404
4853
|
const dataDisposable = args.getData();
|
|
@@ -4414,13 +4863,14 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4414
4863
|
this._dataDisposable = dataDisposable;
|
|
4415
4864
|
this._ghost = args.ghost;
|
|
4416
4865
|
this._iframeShield = disableIframePointEvents((_source$ownerDocument = source.ownerDocument) !== null && _source$ownerDocument !== void 0 ? _source$ownerDocument : document);
|
|
4866
|
+
this._selectionShield = disableTextSelection((_source$ownerDocument2 = source.ownerDocument) !== null && _source$ownerDocument2 !== void 0 ? _source$ownerDocument2 : document);
|
|
4417
4867
|
const startEvent = {
|
|
4418
4868
|
clientX: pointerEvent.clientX,
|
|
4419
4869
|
clientY: pointerEvent.clientY,
|
|
4420
4870
|
pointerEvent
|
|
4421
4871
|
};
|
|
4422
4872
|
this._onDragStart.fire(startEvent);
|
|
4423
|
-
const targetWindow = (_source$
|
|
4873
|
+
const targetWindow = (_source$ownerDocument3 = (_source$ownerDocument4 = source.ownerDocument) === null || _source$ownerDocument4 === void 0 ? void 0 : _source$ownerDocument4.defaultView) !== null && _source$ownerDocument3 !== void 0 ? _source$ownerDocument3 : globalThis.window;
|
|
4424
4874
|
this._moveListener = addDisposableListener(targetWindow, "pointermove", (e) => {
|
|
4425
4875
|
var _this$_active;
|
|
4426
4876
|
if (e.pointerId !== ((_this$_active = this._active) === null || _this$_active === void 0 ? void 0 : _this$_active.pointerId)) return;
|
|
@@ -4457,13 +4907,13 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4457
4907
|
}
|
|
4458
4908
|
}
|
|
4459
4909
|
_findTargetUnder(x, y) {
|
|
4460
|
-
|
|
4461
|
-
const elements = ((_this$_active$source$ = (_this$_active4 = this._active) === null || _this$_active4 === void 0 ? void 0 : _this$_active4.source.ownerDocument) !== null && _this$_active$source$ !== void 0 ? _this$_active$source$ : document).elementsFromPoint(x, y);
|
|
4910
|
+
const elements = (this._active ? getHitTestRoot(this._active.source) : document).elementsFromPoint(x, y);
|
|
4462
4911
|
for (const el of elements) {
|
|
4463
4912
|
let current = el;
|
|
4464
4913
|
while (current) {
|
|
4914
|
+
var _target$isHitTestTran;
|
|
4465
4915
|
const target = this._targetByElement.get(current);
|
|
4466
|
-
if (target) return target;
|
|
4916
|
+
if (target && !((_target$isHitTestTran = target.isHitTestTransparent) === null || _target$isHitTestTran === void 0 ? void 0 : _target$isHitTestTran.call(target))) return target;
|
|
4467
4917
|
current = current.parentElement;
|
|
4468
4918
|
}
|
|
4469
4919
|
}
|
|
@@ -4507,7 +4957,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4507
4957
|
this._onDragEnd.fire(dragEvent);
|
|
4508
4958
|
}
|
|
4509
4959
|
_teardown() {
|
|
4510
|
-
var _this$_ghost2, _this$_iframeShield, _this$_moveListener, _this$_upListener, _this$_cancelListener;
|
|
4960
|
+
var _this$_ghost2, _this$_iframeShield, _this$_selectionShiel, _this$_moveListener, _this$_upListener, _this$_cancelListener;
|
|
4511
4961
|
this._currentTarget = void 0;
|
|
4512
4962
|
this._active = void 0;
|
|
4513
4963
|
this._lastPointerEvent = void 0;
|
|
@@ -4517,6 +4967,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4517
4967
|
this._ghost = void 0;
|
|
4518
4968
|
(_this$_iframeShield = this._iframeShield) === null || _this$_iframeShield === void 0 || _this$_iframeShield.release();
|
|
4519
4969
|
this._iframeShield = void 0;
|
|
4970
|
+
(_this$_selectionShiel = this._selectionShield) === null || _this$_selectionShiel === void 0 || _this$_selectionShiel.release();
|
|
4971
|
+
this._selectionShield = void 0;
|
|
4520
4972
|
(_this$_moveListener = this._moveListener) === null || _this$_moveListener === void 0 || _this$_moveListener.dispose();
|
|
4521
4973
|
(_this$_upListener = this._upListener) === null || _this$_upListener === void 0 || _this$_upListener.dispose();
|
|
4522
4974
|
(_this$_cancelListener = this._cancelListener) === null || _this$_cancelListener === void 0 || _this$_cancelListener.dispose();
|
|
@@ -4559,10 +5011,14 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4559
5011
|
element: this.element,
|
|
4560
5012
|
handleDragOver: (e) => this._onDragOver(e),
|
|
4561
5013
|
handleDragLeave: () => this._onDragLeave(),
|
|
4562
|
-
handleDrop: (e) => this._onDropEvent(e)
|
|
5014
|
+
handleDrop: (e) => this._onDropEvent(e),
|
|
5015
|
+
isHitTestTransparent: options.isHitTestTransparent
|
|
4563
5016
|
};
|
|
4564
5017
|
this.addDisposables(this._onDrop, this._onWillShowOverlay, PointerDragController.getInstance().registerTarget(handle));
|
|
4565
5018
|
}
|
|
5019
|
+
clearOverlay() {
|
|
5020
|
+
this._clearOwnOverlay();
|
|
5021
|
+
}
|
|
4566
5022
|
setTargetZones(zones) {
|
|
4567
5023
|
this._acceptedTargetZonesSet = new Set(zones);
|
|
4568
5024
|
}
|
|
@@ -4781,9 +5237,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4781
5237
|
return true;
|
|
4782
5238
|
}
|
|
4783
5239
|
_onPointerDown(event) {
|
|
4784
|
-
var _ref, _this$options$thresho, _ref2, _this$element$
|
|
5240
|
+
var _this$element$ownerDo, _ref, _this$options$thresho, _ref2, _this$element$ownerDo2, _this$element$ownerDo3;
|
|
4785
5241
|
if (!this._shouldHandle(event)) return;
|
|
4786
5242
|
this._cancelPending();
|
|
5243
|
+
this._selectionShield = disableTextSelection((_this$element$ownerDo = this.element.ownerDocument) !== null && _this$element$ownerDo !== void 0 ? _this$element$ownerDo : document);
|
|
4787
5244
|
this._pendingPointerId = event.pointerId;
|
|
4788
5245
|
this._startX = event.clientX;
|
|
4789
5246
|
this._startY = event.clientY;
|
|
@@ -4799,7 +5256,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4799
5256
|
const threshold = (_this$options$thresho = this.options.threshold) !== null && _this$options$thresho !== void 0 ? _this$options$thresho : DEFAULT_THRESHOLD;
|
|
4800
5257
|
const pressToleranceOpt = this.options.pressTolerance;
|
|
4801
5258
|
const pressTolerance = (_ref2 = typeof pressToleranceOpt === "function" ? pressToleranceOpt() : pressToleranceOpt) !== null && _ref2 !== void 0 ? _ref2 : DEFAULT_PRESS_TOLERANCE;
|
|
4802
|
-
const targetWindow = (_this$element$
|
|
5259
|
+
const targetWindow = (_this$element$ownerDo2 = (_this$element$ownerDo3 = this.element.ownerDocument) === null || _this$element$ownerDo3 === void 0 ? void 0 : _this$element$ownerDo3.defaultView) !== null && _this$element$ownerDo2 !== void 0 ? _this$element$ownerDo2 : globalThis.window;
|
|
4803
5260
|
this._pendingMoveListener = addDisposableListener(targetWindow, "pointermove", (moveEvent) => {
|
|
4804
5261
|
if (moveEvent.pointerId !== this._pendingPointerId) return;
|
|
4805
5262
|
const dx = moveEvent.clientX - this._startX;
|
|
@@ -4825,7 +5282,9 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4825
5282
|
this._cancelPending();
|
|
4826
5283
|
}
|
|
4827
5284
|
_cancelPending() {
|
|
4828
|
-
var _this$_pendingMoveLis, _this$_pendingUpListe, _this$_pendingCancelL;
|
|
5285
|
+
var _this$_selectionShiel, _this$_pendingMoveLis, _this$_pendingUpListe, _this$_pendingCancelL;
|
|
5286
|
+
(_this$_selectionShiel = this._selectionShield) === null || _this$_selectionShiel === void 0 || _this$_selectionShiel.release();
|
|
5287
|
+
this._selectionShield = void 0;
|
|
4829
5288
|
this._pendingPointerId = void 0;
|
|
4830
5289
|
if (this._armTimer !== void 0) {
|
|
4831
5290
|
clearTimeout(this._armTimer);
|
|
@@ -4870,29 +5329,51 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4870
5329
|
*/
|
|
4871
5330
|
var PointerGhost = class {
|
|
4872
5331
|
constructor(opts) {
|
|
4873
|
-
var _opts$offsetX, _opts$offsetY,
|
|
5332
|
+
var _opts$offsetX, _opts$offsetY, _popover, _opts$opacity;
|
|
4874
5333
|
this._disposed = false;
|
|
4875
5334
|
this.element = opts.element;
|
|
4876
5335
|
this.offsetX = (_opts$offsetX = opts.offsetX) !== null && _opts$offsetX !== void 0 ? _opts$offsetX : 0;
|
|
4877
5336
|
this.offsetY = (_opts$offsetY = opts.offsetY) !== null && _opts$offsetY !== void 0 ? _opts$offsetY : 0;
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
this.element.
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
5337
|
+
const parent = opts.owner ? getOverlayParent(opts.owner) : document.body;
|
|
5338
|
+
let popover;
|
|
5339
|
+
if (isShadowRoot(parent) && typeof this.element.showPopover === "function") {
|
|
5340
|
+
popover = this.element.ownerDocument.createElement("div");
|
|
5341
|
+
popover.popover = "manual";
|
|
5342
|
+
Object.assign(popover.style, {
|
|
5343
|
+
inset: "auto",
|
|
5344
|
+
margin: "0",
|
|
5345
|
+
padding: "0",
|
|
5346
|
+
border: "0",
|
|
5347
|
+
background: "transparent",
|
|
5348
|
+
color: "inherit",
|
|
5349
|
+
overflow: "visible"
|
|
5350
|
+
});
|
|
5351
|
+
popover.appendChild(this.element);
|
|
5352
|
+
this.element.style.pointerEvents = "none";
|
|
5353
|
+
this.element.style.transform = "none";
|
|
5354
|
+
}
|
|
5355
|
+
this.container = (_popover = popover) !== null && _popover !== void 0 ? _popover : this.element;
|
|
5356
|
+
const style = this.container.style;
|
|
5357
|
+
style.position = "fixed";
|
|
5358
|
+
style.left = "0px";
|
|
5359
|
+
style.top = "0px";
|
|
5360
|
+
style.pointerEvents = "none";
|
|
5361
|
+
style.zIndex = "99999";
|
|
5362
|
+
style.opacity = String((_opts$opacity = opts.opacity) !== null && _opts$opacity !== void 0 ? _opts$opacity : .8);
|
|
5363
|
+
style.willChange = "transform";
|
|
5364
|
+
style.transform = `translate3d(${opts.initialX - this.offsetX}px, ${opts.initialY - this.offsetY}px, 0)`;
|
|
5365
|
+
parent.appendChild(this.container);
|
|
5366
|
+
popover === null || popover === void 0 || popover.showPopover();
|
|
4887
5367
|
}
|
|
4888
5368
|
update(clientX, clientY) {
|
|
4889
5369
|
if (this._disposed) return;
|
|
4890
|
-
this.
|
|
5370
|
+
this.container.style.transform = `translate3d(${clientX - this.offsetX}px, ${clientY - this.offsetY}px, 0)`;
|
|
4891
5371
|
}
|
|
4892
5372
|
dispose() {
|
|
4893
5373
|
if (this._disposed) return;
|
|
4894
5374
|
this._disposed = true;
|
|
4895
5375
|
this.element.remove();
|
|
5376
|
+
if (this.container !== this.element) this.container.remove();
|
|
4896
5377
|
}
|
|
4897
5378
|
};
|
|
4898
5379
|
|
|
@@ -4929,7 +5410,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
4929
5410
|
addGhostImage(event.dataTransfer, ghost.element, {
|
|
4930
5411
|
x: (_ghost$offsetX = ghost.offsetX) !== null && _ghost$offsetX !== void 0 ? _ghost$offsetX : 0,
|
|
4931
5412
|
y: (_ghost$offsetY = ghost.offsetY) !== null && _ghost$offsetY !== void 0 ? _ghost$offsetY : 0,
|
|
4932
|
-
ownerDocument: (_this$el$ownerDocumen2 = this.el.ownerDocument) !== null && _this$el$ownerDocumen2 !== void 0 ? _this$el$ownerDocumen2 : void 0
|
|
5413
|
+
ownerDocument: (_this$el$ownerDocumen2 = this.el.ownerDocument) !== null && _this$el$ownerDocumen2 !== void 0 ? _this$el$ownerDocumen2 : void 0,
|
|
5414
|
+
owner: this.el
|
|
4933
5415
|
});
|
|
4934
5416
|
if (ghost.dispose) {
|
|
4935
5417
|
const disposeGhost = ghost.dispose;
|
|
@@ -5765,8 +6247,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
5765
6247
|
let guard;
|
|
5766
6248
|
const timeout = setTimeout(() => guard === null || guard === void 0 ? void 0 : guard.dispose(), 500);
|
|
5767
6249
|
guard = addDisposableListener(targetWindow, "click", (event) => {
|
|
5768
|
-
|
|
5769
|
-
if (target && this.element.contains(target)) {
|
|
6250
|
+
if (isEventWithin(event, [this.element])) {
|
|
5770
6251
|
event.preventDefault();
|
|
5771
6252
|
event.stopPropagation();
|
|
5772
6253
|
}
|
|
@@ -5882,6 +6363,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
5882
6363
|
if (this.accessor.id === (data === null || data === void 0 ? void 0 : data.viewId)) {
|
|
5883
6364
|
var _this$accessor$option;
|
|
5884
6365
|
if (((_this$accessor$option = this.accessor.options.theme) === null || _this$accessor$option === void 0 ? void 0 : _this$accessor$option.tabAnimation) === "smooth") return false;
|
|
6366
|
+
if (data.tabGroupId && data.groupId === this.group.id && this.group.model.getTabGroupForPanel(this.panel.id)) return false;
|
|
5885
6367
|
return true;
|
|
5886
6368
|
}
|
|
5887
6369
|
return this.group.model.canDisplayOverlay(event, position, "tab");
|
|
@@ -6494,6 +6976,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
6494
6976
|
const PROPERTY_KEYS_DOCKVIEW = (() => {
|
|
6495
6977
|
return Object.keys({
|
|
6496
6978
|
disableAutoResizing: void 0,
|
|
6979
|
+
proportionalLayout: void 0,
|
|
6497
6980
|
hideBorders: void 0,
|
|
6498
6981
|
singleTabMode: void 0,
|
|
6499
6982
|
disableFloatingGroups: void 0,
|
|
@@ -7329,12 +7812,34 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7329
7812
|
}
|
|
7330
7813
|
updateDirection() {
|
|
7331
7814
|
const isVertical = this._ctx.getDirection() === "vertical";
|
|
7332
|
-
for (const [, entry] of this._chipRenderers)
|
|
7815
|
+
for (const [, entry] of this._chipRenderers) {
|
|
7816
|
+
const zones = isVertical ? ["top"] : ["left"];
|
|
7817
|
+
entry.dropTarget.setTargetZones(zones);
|
|
7818
|
+
entry.pointerDropTarget.setTargetZones(zones);
|
|
7819
|
+
}
|
|
7333
7820
|
}
|
|
7334
|
-
|
|
7335
|
-
|
|
7336
|
-
|
|
7337
|
-
|
|
7821
|
+
/**
|
|
7822
|
+
* Drop any overlay the chips are showing. A group move is committed by a
|
|
7823
|
+
* capturing listener on the tabs list that stops the event, so the chip
|
|
7824
|
+
* target under the cursor never sees the drop that would clear its own.
|
|
7825
|
+
*/
|
|
7826
|
+
clearChipDropOverlays() {
|
|
7827
|
+
for (const [, entry] of this._chipRenderers) {
|
|
7828
|
+
var _entry$dropTarget, _entry$pointerDropTar;
|
|
7829
|
+
(_entry$dropTarget = entry.dropTarget) === null || _entry$dropTarget === void 0 || _entry$dropTarget.clearOverlay();
|
|
7830
|
+
(_entry$pointerDropTar = entry.pointerDropTarget) === null || _entry$pointerDropTar === void 0 || _entry$pointerDropTar.clearOverlay();
|
|
7831
|
+
}
|
|
7832
|
+
}
|
|
7833
|
+
/** Each chip's extent along the strip's main axis: width for a horizontal
|
|
7834
|
+
* header, height for a vertical one. */
|
|
7835
|
+
snapshotChipSizes() {
|
|
7836
|
+
const isVertical = this._ctx.getDirection() === "vertical";
|
|
7837
|
+
const sizes = /* @__PURE__ */ new Map();
|
|
7838
|
+
for (const [groupId, entry] of this._chipRenderers) {
|
|
7839
|
+
const rect = entry.chip.element.getBoundingClientRect();
|
|
7840
|
+
sizes.set(groupId, isVertical ? rect.height : rect.width);
|
|
7841
|
+
}
|
|
7842
|
+
return sizes;
|
|
7338
7843
|
}
|
|
7339
7844
|
positionUnderlines() {
|
|
7340
7845
|
var _this$_indicator2;
|
|
@@ -7578,9 +8083,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7578
8083
|
};
|
|
7579
8084
|
if (chip instanceof TabGroupChip) disposables.push(chip.onContextMenu(onContextMenu));
|
|
7580
8085
|
else disposables.push(new LongPressDetector(chip.element, { onLongPress: onContextMenu }), addDisposableListener(chip.element, "contextmenu", onContextMenu));
|
|
7581
|
-
const
|
|
7582
|
-
|
|
7583
|
-
acceptedTargetZones: isVertical ? ["top"] : ["left"],
|
|
8086
|
+
const dropTargetOptions = {
|
|
8087
|
+
acceptedTargetZones: this._ctx.getDirection() === "vertical" ? ["top"] : ["left"],
|
|
7584
8088
|
overlayModel: { activationSize: {
|
|
7585
8089
|
value: 100,
|
|
7586
8090
|
type: "percentage"
|
|
@@ -7591,15 +8095,18 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7591
8095
|
const data = getPanelData();
|
|
7592
8096
|
if (this._ctx.accessor.id === (data === null || data === void 0 ? void 0 : data.viewId)) {
|
|
7593
8097
|
var _this$_ctx$accessor$o3;
|
|
7594
|
-
if (((_this$_ctx$accessor$o3 = this._ctx.accessor.options.theme) === null || _this$_ctx$accessor$o3 === void 0 ? void 0 : _this$_ctx$accessor$o3.tabAnimation) === "smooth") return false;
|
|
8098
|
+
if (((_this$_ctx$accessor$o3 = this._ctx.accessor.options.theme) === null || _this$_ctx$accessor$o3 === void 0 ? void 0 : _this$_ctx$accessor$o3.tabAnimation) === "smooth" && !data.tabGroupId) return false;
|
|
7595
8099
|
return true;
|
|
7596
8100
|
}
|
|
7597
8101
|
return this._ctx.group.model.canDisplayOverlay(event, position, "tab");
|
|
7598
8102
|
}
|
|
7599
|
-
}
|
|
7600
|
-
|
|
8103
|
+
};
|
|
8104
|
+
const dropTarget = html5Backend.createDropTarget(chip.element, dropTargetOptions);
|
|
8105
|
+
const pointerDropTarget = pointerBackend.createDropTarget(chip.element, dropTargetOptions);
|
|
8106
|
+
const onDrop = (event) => {
|
|
7601
8107
|
this._callbacks.onChipDrop(tabGroup, event);
|
|
7602
|
-
}
|
|
8108
|
+
};
|
|
8109
|
+
disposables.push(dropTarget, dropTarget.onDrop(onDrop), pointerDropTarget, pointerDropTarget.onDrop(onDrop));
|
|
7603
8110
|
const disposable = new CompositeDisposable(...disposables);
|
|
7604
8111
|
this._chipRenderers.set(tabGroup.id, {
|
|
7605
8112
|
chip,
|
|
@@ -7607,7 +8114,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7607
8114
|
pointerDragSource: dragSources.pointerDragSource,
|
|
7608
8115
|
dragSourcesDisposable: dragSources.disposable,
|
|
7609
8116
|
disposable,
|
|
7610
|
-
dropTarget
|
|
8117
|
+
dropTarget,
|
|
8118
|
+
pointerDropTarget
|
|
7611
8119
|
});
|
|
7612
8120
|
if (tabGroup.collapsed) this._skipNextCollapseAnimation = true;
|
|
7613
8121
|
}
|
|
@@ -7723,6 +8231,22 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7723
8231
|
//#endregion
|
|
7724
8232
|
//#region src/dockview/components/titlebar/tabReorderController.ts
|
|
7725
8233
|
/**
|
|
8234
|
+
* Main-axis extent of a rect. Tabs flow along x in a horizontal header
|
|
8235
|
+
* (top/bottom) and along y in a vertical one (the left/right edge groups),
|
|
8236
|
+
* so the reorder math reads every size through this.
|
|
8237
|
+
*/
|
|
8238
|
+
function mainAxisSize(rect, direction) {
|
|
8239
|
+
return direction === "vertical" ? rect.height : rect.width;
|
|
8240
|
+
}
|
|
8241
|
+
/** Leading edge of a rect along the main axis. */
|
|
8242
|
+
function mainAxisStart(rect, direction) {
|
|
8243
|
+
return direction === "vertical" ? rect.top : rect.left;
|
|
8244
|
+
}
|
|
8245
|
+
/** A cursor position projected onto the main axis. */
|
|
8246
|
+
function mainAxisCursor(event, direction) {
|
|
8247
|
+
return direction === "vertical" ? event.clientY : event.clientX;
|
|
8248
|
+
}
|
|
8249
|
+
/**
|
|
7726
8250
|
* Tab drag-reorder + FLIP animation subsystem extracted from `Tabs`. The DOM
|
|
7727
8251
|
* event wiring remains in `Tabs` and delegates the reorder/animation logic to
|
|
7728
8252
|
* this controller. All access back into `Tabs` goes through
|
|
@@ -7817,14 +8341,30 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7817
8341
|
for (const tab of this._tabs) positions.set(tab.value.panel.id, tab.value.element.getBoundingClientRect());
|
|
7818
8342
|
return positions;
|
|
7819
8343
|
}
|
|
7820
|
-
|
|
8344
|
+
/** Main-axis extent of a rect for this header's orientation. */
|
|
8345
|
+
_mainAxisSize(rect) {
|
|
8346
|
+
return mainAxisSize(rect, this._direction);
|
|
8347
|
+
}
|
|
8348
|
+
/** Main-axis leading edge of a rect for this header's orientation. */
|
|
8349
|
+
_mainAxisStart(rect) {
|
|
8350
|
+
return mainAxisStart(rect, this._direction);
|
|
8351
|
+
}
|
|
8352
|
+
/** The cursor coordinate along the main axis. */
|
|
8353
|
+
_mainAxisCoord(clientX, clientY) {
|
|
8354
|
+
return mainAxisCursor({
|
|
8355
|
+
clientX,
|
|
8356
|
+
clientY
|
|
8357
|
+
}, this._direction);
|
|
8358
|
+
}
|
|
8359
|
+
/** The margin that opens the insertion gap. It must run along the main
|
|
8360
|
+
* axis, so a vertical header pushes tabs down rather than sideways. */
|
|
8361
|
+
get _gapMarginProperty() {
|
|
8362
|
+
return this._direction === "vertical" ? "margin-top" : "margin-left";
|
|
8363
|
+
}
|
|
8364
|
+
getAverageTabSize() {
|
|
7821
8365
|
if (this._tabs.length === 0) return 0;
|
|
7822
|
-
const isVertical = this._direction === "vertical";
|
|
7823
8366
|
let total = 0;
|
|
7824
|
-
for (const tab of this._tabs)
|
|
7825
|
-
const rect = tab.value.element.getBoundingClientRect();
|
|
7826
|
-
total += isVertical ? rect.height : rect.width;
|
|
7827
|
-
}
|
|
8367
|
+
for (const tab of this._tabs) total += this._mainAxisSize(tab.value.element.getBoundingClientRect());
|
|
7828
8368
|
return total / this._tabs.length;
|
|
7829
8369
|
}
|
|
7830
8370
|
/**
|
|
@@ -7834,8 +8374,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7834
8374
|
* `processDragOver` / `processDragLeave` helpers.
|
|
7835
8375
|
*/
|
|
7836
8376
|
handlePointerDragMove(clientX, clientY) {
|
|
7837
|
-
|
|
7838
|
-
const elAtPoint = ((_this$_tabsList$owner = this._tabsList.ownerDocument) !== null && _this$_tabsList$owner !== void 0 ? _this$_tabsList$owner : document).elementFromPoint(clientX, clientY);
|
|
8377
|
+
const elAtPoint = getHitTestRoot(this._tabsList).elementFromPoint(clientX, clientY);
|
|
7839
8378
|
if (!(!!elAtPoint && (this._tabsList.contains(elAtPoint) || !!this._extendedDropZone && this._extendedDropZone.contains(elAtPoint)))) {
|
|
7840
8379
|
if (this._pointerInsideTabsList) {
|
|
7841
8380
|
this._pointerInsideTabsList = false;
|
|
@@ -7852,13 +8391,19 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7852
8391
|
* dragover bridge may have installed.
|
|
7853
8392
|
*/
|
|
7854
8393
|
handlePointerDragEnd(e) {
|
|
7855
|
-
if (e && this._animState && this._animState.sourceIndex !== -1 &&
|
|
8394
|
+
if (e && this._animState && this._animState.sourceIndex !== -1 && this._animState.currentInsertionIndex !== null && this.isPointInsideTabsList(e.clientX, e.clientY)) {
|
|
8395
|
+
const sourceTabGroupId = this._animState.sourceTabGroupId;
|
|
8396
|
+
if (sourceTabGroupId) {
|
|
8397
|
+
const insertionIndex = this._animState.currentInsertionIndex;
|
|
8398
|
+
this._animState = null;
|
|
8399
|
+
this.commitGroupMove(sourceTabGroupId, insertionIndex);
|
|
8400
|
+
} else this.commitPointerReorder(e.pointerEvent);
|
|
8401
|
+
}
|
|
7856
8402
|
this._pointerInsideTabsList = false;
|
|
7857
8403
|
this.resetDragAnimation();
|
|
7858
8404
|
}
|
|
7859
8405
|
isPointInsideTabsList(clientX, clientY) {
|
|
7860
|
-
|
|
7861
|
-
const el = ((_this$_tabsList$owner2 = this._tabsList.ownerDocument) !== null && _this$_tabsList$owner2 !== void 0 ? _this$_tabsList$owner2 : document).elementFromPoint(clientX, clientY);
|
|
8406
|
+
const el = getHitTestRoot(this._tabsList).elementFromPoint(clientX, clientY);
|
|
7862
8407
|
return !!el && this._tabsList.contains(el);
|
|
7863
8408
|
}
|
|
7864
8409
|
/** Commit a smooth-mode intra-group reorder from the current insertion
|
|
@@ -7922,46 +8467,46 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
7922
8467
|
const data = getPanelData();
|
|
7923
8468
|
if (((_this$accessor$option = this.accessor.options.theme) === null || _this$accessor$option === void 0 ? void 0 : _this$accessor$option.tabAnimation) === "default" && !(data === null || data === void 0 ? void 0 : data.tabGroupId)) return false;
|
|
7924
8469
|
if (!data || !(data.panelId || data.tabGroupId) || data.groupId === this.group.id) return false;
|
|
7925
|
-
const
|
|
7926
|
-
this._animState = data.tabGroupId ? this._makeGroupDragAnimState(data,
|
|
8470
|
+
const avgSize = this.getAverageTabSize();
|
|
8471
|
+
this._animState = data.tabGroupId ? this._makeGroupDragAnimState(data, avgSize) : this._makeTabDragAnimState(data, avgSize);
|
|
7927
8472
|
return true;
|
|
7928
8473
|
}
|
|
7929
8474
|
/** Anim state for an external group-chip drag (gap sized to the group). */
|
|
7930
|
-
_makeGroupDragAnimState(data,
|
|
8475
|
+
_makeGroupDragAnimState(data, avgSize) {
|
|
7931
8476
|
var _sourceTg$panelIds$le;
|
|
7932
8477
|
const sourceGroup = this.accessor.getPanel(data.groupId);
|
|
7933
8478
|
const sourceTg = sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.getTabGroups().find((tg) => tg.id === data.tabGroupId);
|
|
7934
|
-
const
|
|
8479
|
+
const groupGapSize = avgSize * ((_sourceTg$panelIds$le = sourceTg === null || sourceTg === void 0 ? void 0 : sourceTg.panelIds.length) !== null && _sourceTg$panelIds$le !== void 0 ? _sourceTg$panelIds$le : 1) + avgSize;
|
|
7935
8480
|
return {
|
|
7936
8481
|
sourceTabId: "",
|
|
7937
8482
|
sourceIndex: -1,
|
|
7938
8483
|
tabPositions: this.snapshotTabPositions(),
|
|
7939
|
-
|
|
8484
|
+
chipSizes: this._tabGroupManager.snapshotChipSizes(),
|
|
7940
8485
|
currentInsertionIndex: null,
|
|
7941
8486
|
targetTabGroupId: null,
|
|
7942
8487
|
sourceTabGroupId: data.tabGroupId,
|
|
7943
8488
|
sourceGroupPanelIds: sourceTg ? new Set(sourceTg.panelIds) : /* @__PURE__ */ new Set(),
|
|
7944
|
-
|
|
7945
|
-
|
|
7946
|
-
|
|
7947
|
-
|
|
8489
|
+
sourceChipSize: avgSize,
|
|
8490
|
+
cursorOffsetFromDragStart: groupGapSize / 2,
|
|
8491
|
+
sourceGapSize: groupGapSize,
|
|
8492
|
+
containerStart: this._mainAxisStart(this._tabsList.getBoundingClientRect())
|
|
7948
8493
|
};
|
|
7949
8494
|
}
|
|
7950
8495
|
/** Anim state for an external single-tab drag. */
|
|
7951
|
-
_makeTabDragAnimState(data,
|
|
8496
|
+
_makeTabDragAnimState(data, avgSize) {
|
|
7952
8497
|
return {
|
|
7953
8498
|
sourceTabId: data.panelId,
|
|
7954
8499
|
sourceIndex: -1,
|
|
7955
8500
|
tabPositions: this.snapshotTabPositions(),
|
|
7956
|
-
|
|
8501
|
+
chipSizes: this._tabGroupManager.snapshotChipSizes(),
|
|
7957
8502
|
currentInsertionIndex: null,
|
|
7958
8503
|
targetTabGroupId: null,
|
|
7959
8504
|
sourceTabGroupId: null,
|
|
7960
8505
|
sourceGroupPanelIds: null,
|
|
7961
|
-
|
|
7962
|
-
|
|
7963
|
-
|
|
7964
|
-
|
|
8506
|
+
sourceChipSize: 0,
|
|
8507
|
+
cursorOffsetFromDragStart: avgSize / 2,
|
|
8508
|
+
sourceGapSize: avgSize,
|
|
8509
|
+
containerStart: this._mainAxisStart(this._tabsList.getBoundingClientRect())
|
|
7965
8510
|
};
|
|
7966
8511
|
}
|
|
7967
8512
|
/**
|
|
@@ -8004,19 +8549,19 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8004
8549
|
container === null || container === void 0 || (_container$model = container.model) === null || _container$model === void 0 || _container$model.clear();
|
|
8005
8550
|
}
|
|
8006
8551
|
handleDragOver(event) {
|
|
8007
|
-
var _this$accessor$option2;
|
|
8552
|
+
var _event$clientY2, _this$accessor$option2;
|
|
8008
8553
|
if (!this._animState) return;
|
|
8009
8554
|
if (this._wrapMode && !this._animState.sourceTabGroupId) {
|
|
8010
8555
|
var _event$clientY;
|
|
8011
8556
|
this.handleWrappedDragOver(event.clientX, (_event$clientY = event.clientY) !== null && _event$clientY !== void 0 ? _event$clientY : 0);
|
|
8012
8557
|
return;
|
|
8013
8558
|
}
|
|
8014
|
-
const
|
|
8559
|
+
const mousePos = this._mainAxisCoord(event.clientX, (_event$clientY2 = event.clientY) !== null && _event$clientY2 !== void 0 ? _event$clientY2 : 0);
|
|
8015
8560
|
const firstPanelToGroup = this._buildFirstPanelToGroupMap();
|
|
8016
|
-
let insertionIndex = this._computeDragOverInsertionIndex(
|
|
8561
|
+
let insertionIndex = this._computeDragOverInsertionIndex(mousePos, firstPanelToGroup);
|
|
8017
8562
|
let targetTabGroupId = null;
|
|
8018
8563
|
if (insertionIndex !== null && this._tabGroupManager.chipRenderers.size > 0) {
|
|
8019
|
-
const resolved = this._resolveInsertionAgainstTabGroups(
|
|
8564
|
+
const resolved = this._resolveInsertionAgainstTabGroups(mousePos, insertionIndex, firstPanelToGroup);
|
|
8020
8565
|
insertionIndex = resolved.insertionIndex;
|
|
8021
8566
|
targetTabGroupId = resolved.targetTabGroupId;
|
|
8022
8567
|
}
|
|
@@ -8040,14 +8585,15 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8040
8585
|
return firstPanelToGroup;
|
|
8041
8586
|
}
|
|
8042
8587
|
/**
|
|
8043
|
-
* Walk the tabs
|
|
8044
|
-
* insertion slot for the drag image's
|
|
8588
|
+
* Walk the tabs in flow order by their original main-axis sizes and return
|
|
8589
|
+
* the insertion slot for the drag image's leading edge (null if no slot
|
|
8590
|
+
* fits).
|
|
8045
8591
|
*/
|
|
8046
|
-
_computeDragOverInsertionIndex(
|
|
8592
|
+
_computeDragOverInsertionIndex(mousePos, firstPanelToGroup) {
|
|
8047
8593
|
const animState = this._animState;
|
|
8048
8594
|
const sourceGroupPanelIds = animState.sourceGroupPanelIds;
|
|
8049
|
-
const availableSpace =
|
|
8050
|
-
let
|
|
8595
|
+
const availableSpace = mousePos - animState.cursorOffsetFromDragStart - animState.containerStart;
|
|
8596
|
+
let accSize = 0;
|
|
8051
8597
|
let insertionIndex = null;
|
|
8052
8598
|
for (let i = 0; i < this._tabs.length; i++) {
|
|
8053
8599
|
const tab = this._tabs[i].value;
|
|
@@ -8055,19 +8601,19 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8055
8601
|
if (sourceGroupPanelIds === null || sourceGroupPanelIds === void 0 ? void 0 : sourceGroupPanelIds.has(tab.panel.id)) continue;
|
|
8056
8602
|
const groupId = firstPanelToGroup.get(tab.panel.id);
|
|
8057
8603
|
if (groupId) {
|
|
8058
|
-
var _animState$
|
|
8059
|
-
const
|
|
8060
|
-
if (
|
|
8604
|
+
var _animState$chipSizes$;
|
|
8605
|
+
const chipSize = (_animState$chipSizes$ = animState.chipSizes.get(groupId)) !== null && _animState$chipSizes$ !== void 0 ? _animState$chipSizes$ : 0;
|
|
8606
|
+
if (accSize + chipSize > availableSpace) {
|
|
8061
8607
|
var _insertionIndex;
|
|
8062
8608
|
(_insertionIndex = insertionIndex) !== null && _insertionIndex !== void 0 || (insertionIndex = i);
|
|
8063
8609
|
break;
|
|
8064
8610
|
}
|
|
8065
|
-
|
|
8611
|
+
accSize += chipSize;
|
|
8066
8612
|
}
|
|
8067
8613
|
const origRect = animState.tabPositions.get(tab.panel.id);
|
|
8068
|
-
const
|
|
8069
|
-
if (
|
|
8070
|
-
|
|
8614
|
+
const tabSize = this._mainAxisSize(origRect !== null && origRect !== void 0 ? origRect : tab.element.getBoundingClientRect());
|
|
8615
|
+
if (accSize + tabSize / 2 <= availableSpace) {
|
|
8616
|
+
accSize += tabSize;
|
|
8071
8617
|
insertionIndex = i + 1;
|
|
8072
8618
|
} else {
|
|
8073
8619
|
var _insertionIndex2;
|
|
@@ -8078,11 +8624,12 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8078
8624
|
return insertionIndex;
|
|
8079
8625
|
}
|
|
8080
8626
|
/**
|
|
8081
|
-
* Rebuild the accumulated original
|
|
8082
|
-
* tabs exactly the way the accumulation loop does, so callers
|
|
8083
|
-
* original
|
|
8627
|
+
* Rebuild the accumulated original main-axis size up to `insertionIndex`,
|
|
8628
|
+
* walking the tabs exactly the way the accumulation loop does, so callers
|
|
8629
|
+
* know the original trailing edge of the chip (if any) that precedes the
|
|
8630
|
+
* insertion slot.
|
|
8084
8631
|
*/
|
|
8085
|
-
|
|
8632
|
+
_accumulatedSizeUpTo(insertionIndex, firstPanelToGroup) {
|
|
8086
8633
|
const animState = this._animState;
|
|
8087
8634
|
const sourceGroupPanelIds = animState.sourceGroupPanelIds;
|
|
8088
8635
|
let accUpTo = 0;
|
|
@@ -8093,11 +8640,11 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8093
8640
|
if (i >= insertionIndex) break;
|
|
8094
8641
|
const gid = firstPanelToGroup.get(tab.panel.id);
|
|
8095
8642
|
if (gid) {
|
|
8096
|
-
var _animState$
|
|
8097
|
-
accUpTo += (_animState$
|
|
8643
|
+
var _animState$chipSizes$2;
|
|
8644
|
+
accUpTo += (_animState$chipSizes$2 = animState.chipSizes.get(gid)) !== null && _animState$chipSizes$2 !== void 0 ? _animState$chipSizes$2 : 0;
|
|
8098
8645
|
}
|
|
8099
8646
|
const origRect = animState.tabPositions.get(tab.panel.id);
|
|
8100
|
-
accUpTo += origRect ? origRect
|
|
8647
|
+
accUpTo += this._mainAxisSize(origRect !== null && origRect !== void 0 ? origRect : tab.element.getBoundingClientRect());
|
|
8101
8648
|
}
|
|
8102
8649
|
return accUpTo;
|
|
8103
8650
|
}
|
|
@@ -8105,11 +8652,11 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8105
8652
|
* Given a raw insertion index, snap it out of / into any tab group it falls
|
|
8106
8653
|
* within and resolve the target group (if the drop should merge into one).
|
|
8107
8654
|
*/
|
|
8108
|
-
_resolveInsertionAgainstTabGroups(
|
|
8655
|
+
_resolveInsertionAgainstTabGroups(mousePos, insertionIndex, firstPanelToGroup) {
|
|
8109
8656
|
const isGroupDrag = !!this._animState.sourceTabGroupId;
|
|
8110
|
-
const accUpTo = this.
|
|
8657
|
+
const accUpTo = this._accumulatedSizeUpTo(insertionIndex, firstPanelToGroup);
|
|
8111
8658
|
for (const tg of this.group.model.getTabGroups()) {
|
|
8112
|
-
const resolved = this._evaluateTabGroupForInsertion(tg,
|
|
8659
|
+
const resolved = this._evaluateTabGroupForInsertion(tg, mousePos, insertionIndex, accUpTo, isGroupDrag);
|
|
8113
8660
|
if (resolved) return resolved;
|
|
8114
8661
|
}
|
|
8115
8662
|
return {
|
|
@@ -8123,7 +8670,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8123
8670
|
* group governs the slot (the caller stops iterating), or `null` when the
|
|
8124
8671
|
* group is irrelevant and the caller should keep looking.
|
|
8125
8672
|
*/
|
|
8126
|
-
_evaluateTabGroupForInsertion(tg,
|
|
8673
|
+
_evaluateTabGroupForInsertion(tg, mousePos, insertionIndex, accUpTo, isGroupDrag) {
|
|
8127
8674
|
const range = this._resolveGroupRange(tg);
|
|
8128
8675
|
if (!range) return null;
|
|
8129
8676
|
const { firstIdx, lastIdx } = range;
|
|
@@ -8131,7 +8678,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8131
8678
|
const isJustBeforeGroup = !isInsideRange && insertionIndex === firstIdx - 1;
|
|
8132
8679
|
if (!isInsideRange && !isJustBeforeGroup) return null;
|
|
8133
8680
|
if (isGroupDrag) return this._resolveGroupDragTarget(insertionIndex, firstIdx, lastIdx, isInsideRange);
|
|
8134
|
-
return this._resolveTabDragTarget(tg,
|
|
8681
|
+
return this._resolveTabDragTarget(tg, mousePos, insertionIndex, accUpTo, firstIdx, isJustBeforeGroup);
|
|
8135
8682
|
}
|
|
8136
8683
|
/**
|
|
8137
8684
|
* The index range this group occupies in the live tab list, excluding the
|
|
@@ -8166,13 +8713,13 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8166
8713
|
}
|
|
8167
8714
|
/** Insertion target for a single-tab drag against a group: decide whether
|
|
8168
8715
|
* the drop merges into the group based on the cursor vs the chip edge. */
|
|
8169
|
-
_resolveTabDragTarget(tg,
|
|
8170
|
-
var _animState$
|
|
8716
|
+
_resolveTabDragTarget(tg, mousePos, insertionIndex, accUpTo, firstIdx, isJustBeforeGroup) {
|
|
8717
|
+
var _animState$chipSizes$3;
|
|
8171
8718
|
const animState = this._animState;
|
|
8172
|
-
const
|
|
8719
|
+
const chipSize = (_animState$chipSizes$3 = animState.chipSizes.get(tg.id)) !== null && _animState$chipSizes$3 !== void 0 ? _animState$chipSizes$3 : 0;
|
|
8173
8720
|
if (isJustBeforeGroup) {
|
|
8174
8721
|
if (!this._onlySourceBetween(insertionIndex, firstIdx)) return null;
|
|
8175
|
-
if (
|
|
8722
|
+
if (mousePos >= (tg.collapsed ? animState.containerStart + accUpTo + chipSize / 2 : animState.containerStart + accUpTo + chipSize)) return {
|
|
8176
8723
|
insertionIndex: firstIdx,
|
|
8177
8724
|
targetTabGroupId: tg.id
|
|
8178
8725
|
};
|
|
@@ -8181,10 +8728,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8181
8728
|
targetTabGroupId: null
|
|
8182
8729
|
};
|
|
8183
8730
|
}
|
|
8184
|
-
const
|
|
8731
|
+
const chipOriginalEnd = animState.containerStart + accUpTo + chipSize;
|
|
8185
8732
|
if (insertionIndex === firstIdx) return {
|
|
8186
8733
|
insertionIndex,
|
|
8187
|
-
targetTabGroupId:
|
|
8734
|
+
targetTabGroupId: mousePos >= chipOriginalEnd ? tg.id : null
|
|
8188
8735
|
};
|
|
8189
8736
|
return {
|
|
8190
8737
|
insertionIndex,
|
|
@@ -8347,17 +8894,17 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8347
8894
|
}
|
|
8348
8895
|
if (this._pendingCollapse) return;
|
|
8349
8896
|
const insertionIndex = this._animState.currentInsertionIndex;
|
|
8350
|
-
const
|
|
8897
|
+
const gapSize = this._computeGapSize();
|
|
8351
8898
|
const chipToShift = this._computeChipToShift(insertionIndex);
|
|
8352
|
-
this._applyGapMargins(insertionIndex,
|
|
8899
|
+
this._applyGapMargins(insertionIndex, gapSize, chipToShift, skipTransition);
|
|
8353
8900
|
}
|
|
8354
|
-
/** Gap
|
|
8355
|
-
* drag, otherwise the source tab's own
|
|
8356
|
-
|
|
8901
|
+
/** Gap size for the current drag: the whole group's span for a group
|
|
8902
|
+
* drag, otherwise the source tab's own main-axis size. */
|
|
8903
|
+
_computeGapSize() {
|
|
8357
8904
|
const animState = this._animState;
|
|
8358
|
-
if (animState.sourceTabGroupId && animState.sourceGroupPanelIds) return animState.
|
|
8905
|
+
if (animState.sourceTabGroupId && animState.sourceGroupPanelIds) return animState.sourceGapSize;
|
|
8359
8906
|
const sourceRect = animState.tabPositions.get(animState.sourceTabId);
|
|
8360
|
-
return sourceRect ? sourceRect
|
|
8907
|
+
return sourceRect ? this._mainAxisSize(sourceRect) : this.getAverageTabSize();
|
|
8361
8908
|
}
|
|
8362
8909
|
/**
|
|
8363
8910
|
* When the insertion lands at or before a group's first tab, the chip is
|
|
@@ -8401,7 +8948,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8401
8948
|
}
|
|
8402
8949
|
/** Reset non-source chip margins, then apply the gap margin to the chip or
|
|
8403
8950
|
* the first tab at/after the insertion index. */
|
|
8404
|
-
_applyGapMargins(insertionIndex,
|
|
8951
|
+
_applyGapMargins(insertionIndex, gapSize, chipToShift, skipTransition) {
|
|
8405
8952
|
const animState = this._animState;
|
|
8406
8953
|
const sourceGroupPanelIds = animState.sourceGroupPanelIds;
|
|
8407
8954
|
let gapApplied = false;
|
|
@@ -8410,7 +8957,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8410
8957
|
this._clearMargin(entry.chip.element, skipTransition);
|
|
8411
8958
|
}
|
|
8412
8959
|
if (chipToShift) {
|
|
8413
|
-
this._setMargin(chipToShift, `${
|
|
8960
|
+
this._setMargin(chipToShift, `${gapSize}px`, skipTransition);
|
|
8414
8961
|
gapApplied = true;
|
|
8415
8962
|
}
|
|
8416
8963
|
for (let i = 0; i < this._tabs.length; i++) {
|
|
@@ -8418,7 +8965,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8418
8965
|
if (tab.panel.id === animState.sourceTabId) continue;
|
|
8419
8966
|
if (sourceGroupPanelIds === null || sourceGroupPanelIds === void 0 ? void 0 : sourceGroupPanelIds.has(tab.panel.id)) continue;
|
|
8420
8967
|
if (!gapApplied && i >= insertionIndex) {
|
|
8421
|
-
this._setMargin(tab.element, `${
|
|
8968
|
+
this._setMargin(tab.element, `${gapSize}px`, skipTransition);
|
|
8422
8969
|
gapApplied = true;
|
|
8423
8970
|
} else this._clearMargin(tab.element, skipTransition);
|
|
8424
8971
|
}
|
|
@@ -8428,31 +8975,33 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8428
8975
|
_shiftingClass(el) {
|
|
8429
8976
|
return el.classList.contains("dv-tab-group-chip") ? "dv-tab-group-chip--shifting" : "dv-tab--shifting";
|
|
8430
8977
|
}
|
|
8431
|
-
/** Apply
|
|
8978
|
+
/** Apply the main-axis gap margin to an element, optionally bypassing CSS
|
|
8432
8979
|
* transitions for instant positioning. */
|
|
8433
8980
|
_setMargin(el, value, skipTransition) {
|
|
8981
|
+
const property = this._gapMarginProperty;
|
|
8434
8982
|
if (skipTransition) {
|
|
8435
8983
|
el.style.transition = "none";
|
|
8436
|
-
el.style.
|
|
8984
|
+
el.style.setProperty(property, value);
|
|
8437
8985
|
el.getBoundingClientRect();
|
|
8438
8986
|
el.style.removeProperty("transition");
|
|
8439
|
-
} else el.style.
|
|
8987
|
+
} else el.style.setProperty(property, value);
|
|
8440
8988
|
toggleClass(el, this._shiftingClass(el), true);
|
|
8441
8989
|
}
|
|
8442
8990
|
/** Clear an element's gap margin, animating it back to zero unless
|
|
8443
8991
|
* transitions are skipped. */
|
|
8444
8992
|
_clearMargin(el, skipTransition) {
|
|
8445
8993
|
const cls = this._shiftingClass(el);
|
|
8994
|
+
const property = this._gapMarginProperty;
|
|
8446
8995
|
const prev = this._pendingMarginCleanups.get(el);
|
|
8447
8996
|
if (prev) prev();
|
|
8448
|
-
if (skipTransition || !el.style.
|
|
8449
|
-
el.style.removeProperty(
|
|
8997
|
+
if (skipTransition || !el.style.getPropertyValue(property)) {
|
|
8998
|
+
el.style.removeProperty(property);
|
|
8450
8999
|
toggleClass(el, cls, false);
|
|
8451
9000
|
} else {
|
|
8452
|
-
el.style.
|
|
9001
|
+
el.style.setProperty(property, "0px");
|
|
8453
9002
|
toggleClass(el, cls, true);
|
|
8454
9003
|
const onEnd = () => {
|
|
8455
|
-
el.style.removeProperty(
|
|
9004
|
+
el.style.removeProperty(property);
|
|
8456
9005
|
toggleClass(el, cls, false);
|
|
8457
9006
|
el.removeEventListener("transitionend", onEnd);
|
|
8458
9007
|
clearTimeout(fallbackTimer);
|
|
@@ -8477,6 +9026,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8477
9026
|
}
|
|
8478
9027
|
for (const [, entry] of this._tabGroupManager.chipRenderers) {
|
|
8479
9028
|
entry.chip.element.style.removeProperty("margin-left");
|
|
9029
|
+
entry.chip.element.style.removeProperty("margin-top");
|
|
8480
9030
|
toggleClass(entry.chip.element, "dv-tab-group-chip--shifting", false);
|
|
8481
9031
|
}
|
|
8482
9032
|
this._tabGroupManager.positionUnderlines();
|
|
@@ -8488,6 +9038,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8488
9038
|
commitGroupMove(sourceTabGroupId, insertionIndex) {
|
|
8489
9039
|
const data = getPanelData();
|
|
8490
9040
|
this._tabGroupManager.disposeChipDrag(sourceTabGroupId);
|
|
9041
|
+
this._tabGroupManager.clearChipDropOverlays();
|
|
8491
9042
|
if (this.group.model.getTabGroups().some((tg) => tg.id === sourceTabGroupId)) {
|
|
8492
9043
|
var _this$accessor$option3;
|
|
8493
9044
|
if (((_this$accessor$option3 = this.accessor.options.theme) === null || _this$accessor$option3 === void 0 ? void 0 : _this$accessor$option3.tabAnimation) === "smooth") {
|
|
@@ -8845,7 +9396,16 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
8845
9396
|
}
|
|
8846
9397
|
});
|
|
8847
9398
|
this._reorder = new TabReorderController(this);
|
|
8848
|
-
|
|
9399
|
+
const tabsListPointerTarget = pointerBackend.createDropTarget(this._tabsList, {
|
|
9400
|
+
acceptedTargetZones: ["center"],
|
|
9401
|
+
canDisplayOverlay: () => false,
|
|
9402
|
+
isHitTestTransparent: () => {
|
|
9403
|
+
const data = getPanelData();
|
|
9404
|
+
if ((data === null || data === void 0 ? void 0 : data.viewId) !== this.accessor.id || data.groupId !== this.group.id) return true;
|
|
9405
|
+
return data.panelId === null && !data.tabGroupId;
|
|
9406
|
+
}
|
|
9407
|
+
});
|
|
9408
|
+
this.addDisposables(tabsListPointerTarget, this._onOverflowTabsChange, this._observerDisposable, this._pointerActivation, this._onWillShowOverlay, this._onDrop, this._onTabDragStart, this._reorder, PointerDragController.getInstance().onDragEnd((e) => {
|
|
8849
9409
|
this._reorder.handlePointerDragEnd(e);
|
|
8850
9410
|
}), PointerDragController.getInstance().onDragMove((e) => {
|
|
8851
9411
|
this._reorder.handlePointerDragMove(e.clientX, e.clientY);
|
|
@@ -9061,21 +9621,21 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
9061
9621
|
panel
|
|
9062
9622
|
});
|
|
9063
9623
|
if (((_this$accessor$option2 = this.accessor.options.theme) === null || _this$accessor$option2 === void 0 ? void 0 : _this$accessor$option2.tabAnimation) === "smooth") {
|
|
9064
|
-
const
|
|
9624
|
+
const tabSize = mainAxisSize(tab.element.getBoundingClientRect(), this._direction);
|
|
9065
9625
|
const sourceIndex = this._tabs.findIndex((x) => x.value === tab);
|
|
9066
9626
|
this._animState = {
|
|
9067
9627
|
sourceTabId: panel.id,
|
|
9068
9628
|
sourceIndex,
|
|
9069
9629
|
tabPositions: this.snapshotTabPositions(),
|
|
9070
|
-
|
|
9630
|
+
chipSizes: this._tabGroupManager.snapshotChipSizes(),
|
|
9071
9631
|
currentInsertionIndex: null,
|
|
9072
9632
|
targetTabGroupId: null,
|
|
9073
9633
|
sourceTabGroupId: null,
|
|
9074
9634
|
sourceGroupPanelIds: null,
|
|
9075
|
-
|
|
9076
|
-
|
|
9077
|
-
|
|
9078
|
-
|
|
9635
|
+
sourceChipSize: 0,
|
|
9636
|
+
cursorOffsetFromDragStart: tabSize / 2,
|
|
9637
|
+
sourceGapSize: tabSize,
|
|
9638
|
+
containerStart: mainAxisStart(this._tabsList.getBoundingClientRect(), this._direction)
|
|
9079
9639
|
};
|
|
9080
9640
|
this._pendingCollapse = true;
|
|
9081
9641
|
requestAnimationFrame(() => {
|
|
@@ -9171,7 +9731,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
9171
9731
|
this._tabGroupManager.positionAllChips();
|
|
9172
9732
|
if (this._animState) {
|
|
9173
9733
|
this._animState.tabPositions = this.snapshotTabPositions();
|
|
9174
|
-
this._animState.
|
|
9734
|
+
this._animState.chipSizes = this._tabGroupManager.snapshotChipSizes();
|
|
9175
9735
|
this.applyDragOverTransforms();
|
|
9176
9736
|
}
|
|
9177
9737
|
}
|
|
@@ -9193,7 +9753,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
9193
9753
|
}
|
|
9194
9754
|
if (this._animState) {
|
|
9195
9755
|
this._animState.tabPositions = this.snapshotTabPositions();
|
|
9196
|
-
this._animState.
|
|
9756
|
+
this._animState.chipSizes = this._tabGroupManager.snapshotChipSizes();
|
|
9197
9757
|
this.applyDragOverTransforms();
|
|
9198
9758
|
}
|
|
9199
9759
|
}
|
|
@@ -9271,24 +9831,24 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
9271
9831
|
const firstPanelId = tabGroup.panelIds[0];
|
|
9272
9832
|
const firstIdx = firstPanelId ? this._tabs.findIndex((t) => t.value.panel.id === firstPanelId) : -1;
|
|
9273
9833
|
const chipRect = chip.element.getBoundingClientRect();
|
|
9274
|
-
let
|
|
9834
|
+
let groupGapSize = mainAxisSize(chipRect, this._direction);
|
|
9275
9835
|
for (const pid of tabGroup.panelIds) {
|
|
9276
9836
|
const tabEntry = this._tabMap.get(pid);
|
|
9277
|
-
if (tabEntry)
|
|
9837
|
+
if (tabEntry) groupGapSize += mainAxisSize(tabEntry.value.element.getBoundingClientRect(), this._direction);
|
|
9278
9838
|
}
|
|
9279
9839
|
this._animState = {
|
|
9280
9840
|
sourceTabId: "",
|
|
9281
9841
|
sourceIndex: firstIdx,
|
|
9282
9842
|
tabPositions: this.snapshotTabPositions(),
|
|
9283
|
-
|
|
9843
|
+
chipSizes: this._tabGroupManager.snapshotChipSizes(),
|
|
9284
9844
|
currentInsertionIndex: null,
|
|
9285
9845
|
targetTabGroupId: null,
|
|
9286
9846
|
sourceTabGroupId: tabGroup.id,
|
|
9287
9847
|
sourceGroupPanelIds: new Set(tabGroup.panelIds),
|
|
9288
|
-
|
|
9289
|
-
|
|
9290
|
-
|
|
9291
|
-
|
|
9848
|
+
sourceChipSize: mainAxisSize(chipRect, this._direction),
|
|
9849
|
+
cursorOffsetFromDragStart: mainAxisCursor(event, this._direction) - mainAxisStart(chipRect, this._direction),
|
|
9850
|
+
sourceGapSize: groupGapSize,
|
|
9851
|
+
containerStart: mainAxisStart(this._tabsList.getBoundingClientRect(), this._direction)
|
|
9292
9852
|
};
|
|
9293
9853
|
if (((_this$accessor$option4 = this.accessor.options.theme) === null || _this$accessor$option4 === void 0 ? void 0 : _this$accessor$option4.tabAnimation) !== "smooth") return;
|
|
9294
9854
|
const groupPanelIds = new Set(tabGroup.panelIds);
|
|
@@ -9321,6 +9881,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
9321
9881
|
* (when the source tab is currently to the left of the target slot, its
|
|
9322
9882
|
* removal shifts the insertion index down by one). Always clears
|
|
9323
9883
|
* `targetTabGroupId` so the dropped tab lands outside the group.
|
|
9884
|
+
*
|
|
9885
|
+
* A chip dropped on a chip is a group move: the panel path would route it
|
|
9886
|
+
* through the cross-group machinery, which rebuilds the tab group under a
|
|
9887
|
+
* new id.
|
|
9324
9888
|
*/
|
|
9325
9889
|
_handleChipDrop(tabGroup, event) {
|
|
9326
9890
|
const firstPanelId = tabGroup.panelIds[0];
|
|
@@ -9328,6 +9892,14 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
9328
9892
|
const insertionIndex = this._tabs.findIndex((x) => x.value.panel.id === firstPanelId);
|
|
9329
9893
|
if (insertionIndex === -1) return;
|
|
9330
9894
|
const data = getPanelData();
|
|
9895
|
+
if (data === null || data === void 0 ? void 0 : data.tabGroupId) {
|
|
9896
|
+
var _animState$currentIns2;
|
|
9897
|
+
const animState = this._animState;
|
|
9898
|
+
this._animState = null;
|
|
9899
|
+
this._pendingCollapse = false;
|
|
9900
|
+
this._commitGroupMove(data.tabGroupId, (_animState$currentIns2 = animState === null || animState === void 0 ? void 0 : animState.currentInsertionIndex) !== null && _animState$currentIns2 !== void 0 ? _animState$currentIns2 : insertionIndex);
|
|
9901
|
+
return;
|
|
9902
|
+
}
|
|
9331
9903
|
const sourceIndex = (data === null || data === void 0 ? void 0 : data.groupId) === this.group.id && (data === null || data === void 0 ? void 0 : data.panelId) ? this._tabs.findIndex((x) => x.value.panel.id === data.panelId) : -1;
|
|
9332
9904
|
const adjustedIndex = insertionIndex - (sourceIndex !== -1 && sourceIndex < insertionIndex ? 1 : 0);
|
|
9333
9905
|
this._onDrop.fire({
|
|
@@ -10034,8 +10606,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
10034
10606
|
return this.tabsContainer.getPanelForTab(element);
|
|
10035
10607
|
}
|
|
10036
10608
|
get isContentFocused() {
|
|
10037
|
-
|
|
10038
|
-
|
|
10609
|
+
const element = this.contentContainer.element;
|
|
10610
|
+
const activeElement = getActiveElement(element);
|
|
10611
|
+
if (!activeElement) return false;
|
|
10612
|
+
return isAncestor(activeElement, element);
|
|
10039
10613
|
}
|
|
10040
10614
|
get headerPosition() {
|
|
10041
10615
|
var _this$_headerPosition;
|
|
@@ -12946,6 +13520,12 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
12946
13520
|
observer.observe(gridview.element);
|
|
12947
13521
|
return { dispose: () => observer.disconnect() };
|
|
12948
13522
|
}
|
|
13523
|
+
/**
|
|
13524
|
+
* Runs `work` after `delayMs`, resolving once it has finished. Work that
|
|
13525
|
+
* returns a promise is awaited, so a caller holding
|
|
13526
|
+
* `restorationPromise` waits for the popout window itself rather than
|
|
13527
|
+
* only for the timer that starts it.
|
|
13528
|
+
*/
|
|
12949
13529
|
scheduleRestoration(delayMs, work, onCancel) {
|
|
12950
13530
|
return new Promise((resolve) => {
|
|
12951
13531
|
const cleanup = () => {
|
|
@@ -12960,8 +13540,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
12960
13540
|
resolve();
|
|
12961
13541
|
return;
|
|
12962
13542
|
}
|
|
12963
|
-
work();
|
|
12964
|
-
resolve();
|
|
13543
|
+
Promise.resolve(work()).then(() => resolve(), () => resolve());
|
|
12965
13544
|
}, delayMs);
|
|
12966
13545
|
this._restorationCleanups.add(cleanup);
|
|
12967
13546
|
});
|
|
@@ -14219,188 +14798,6 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
14219
14798
|
}
|
|
14220
14799
|
};
|
|
14221
14800
|
|
|
14222
|
-
//#endregion
|
|
14223
|
-
//#region \0@oxc-project+runtime@0.139.0/helpers/esm/asyncToGenerator.js
|
|
14224
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) {
|
|
14225
|
-
try {
|
|
14226
|
-
var i = n[a](c), u = i.value;
|
|
14227
|
-
} catch (n) {
|
|
14228
|
-
e(n);
|
|
14229
|
-
return;
|
|
14230
|
-
}
|
|
14231
|
-
i.done ? t(u) : Promise.resolve(u).then(r, o);
|
|
14232
|
-
}
|
|
14233
|
-
function _asyncToGenerator(n) {
|
|
14234
|
-
return function() {
|
|
14235
|
-
var t = this, e = arguments;
|
|
14236
|
-
return new Promise(function(r, o) {
|
|
14237
|
-
var a = n.apply(t, e);
|
|
14238
|
-
function _next(n) {
|
|
14239
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
|
|
14240
|
-
}
|
|
14241
|
-
function _throw(n) {
|
|
14242
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
|
|
14243
|
-
}
|
|
14244
|
-
_next(void 0);
|
|
14245
|
-
});
|
|
14246
|
-
};
|
|
14247
|
-
}
|
|
14248
|
-
|
|
14249
|
-
//#endregion
|
|
14250
|
-
//#region src/popoutWindow.ts
|
|
14251
|
-
/**
|
|
14252
|
-
* Reject popout URLs that aren't same-origin http(s). Blocks `javascript:`,
|
|
14253
|
-
* `data:`, `blob:`, `vbscript:`, and cross-origin URLs that would otherwise
|
|
14254
|
-
* execute in a context the browser still associates with the opener via
|
|
14255
|
-
* `window.opener`.
|
|
14256
|
-
*/
|
|
14257
|
-
function assertSameOriginPopoutUrl(url) {
|
|
14258
|
-
let resolved;
|
|
14259
|
-
try {
|
|
14260
|
-
resolved = new URL(url, globalThis.location.href);
|
|
14261
|
-
} catch (_unused) {
|
|
14262
|
-
throw new Error(`dockview: invalid popout URL: ${url}`);
|
|
14263
|
-
}
|
|
14264
|
-
if (!(resolved.protocol === "http:" || resolved.protocol === "https:") || resolved.origin !== globalThis.location.origin) throw new Error(`dockview: popout URL must be same-origin http(s); got: ${url}`);
|
|
14265
|
-
}
|
|
14266
|
-
var PopoutWindow = class extends CompositeDisposable {
|
|
14267
|
-
get window() {
|
|
14268
|
-
var _this$_window$value, _this$_window;
|
|
14269
|
-
return (_this$_window$value = (_this$_window = this._window) === null || _this$_window === void 0 ? void 0 : _this$_window.value) !== null && _this$_window$value !== void 0 ? _this$_window$value : null;
|
|
14270
|
-
}
|
|
14271
|
-
constructor(target, className, options) {
|
|
14272
|
-
super();
|
|
14273
|
-
this.target = target;
|
|
14274
|
-
this.className = className;
|
|
14275
|
-
this.options = options;
|
|
14276
|
-
this._onWillClose = new Emitter();
|
|
14277
|
-
this.onWillClose = this._onWillClose.event;
|
|
14278
|
-
this._onDidClose = new Emitter();
|
|
14279
|
-
this.onDidClose = this._onDidClose.event;
|
|
14280
|
-
this._window = null;
|
|
14281
|
-
this.addDisposables(this._onWillClose, this._onDidClose, { dispose: () => {
|
|
14282
|
-
this.close();
|
|
14283
|
-
} });
|
|
14284
|
-
}
|
|
14285
|
-
dimensions() {
|
|
14286
|
-
if (!this._window) return null;
|
|
14287
|
-
const left = this._window.value.screenX;
|
|
14288
|
-
return {
|
|
14289
|
-
top: this._window.value.screenY,
|
|
14290
|
-
left,
|
|
14291
|
-
width: this._window.value.innerWidth,
|
|
14292
|
-
height: this._window.value.innerHeight
|
|
14293
|
-
};
|
|
14294
|
-
}
|
|
14295
|
-
close() {
|
|
14296
|
-
if (this._window) {
|
|
14297
|
-
var _this$options$onWillC, _this$options;
|
|
14298
|
-
this._onWillClose.fire();
|
|
14299
|
-
(_this$options$onWillC = (_this$options = this.options).onWillClose) === null || _this$options$onWillC === void 0 || _this$options$onWillC.call(_this$options, {
|
|
14300
|
-
id: this.target,
|
|
14301
|
-
window: this._window.value
|
|
14302
|
-
});
|
|
14303
|
-
this._window.disposable.dispose();
|
|
14304
|
-
this._window = null;
|
|
14305
|
-
this._onDidClose.fire();
|
|
14306
|
-
}
|
|
14307
|
-
}
|
|
14308
|
-
open() {
|
|
14309
|
-
var _this = this;
|
|
14310
|
-
return _asyncToGenerator(function* () {
|
|
14311
|
-
var _this$options$onDidOp, _this$options2;
|
|
14312
|
-
if (_this._window) throw new Error("instance of popout window is already open");
|
|
14313
|
-
const url = `${_this.options.url}`;
|
|
14314
|
-
assertSameOriginPopoutUrl(url);
|
|
14315
|
-
const features = Object.entries({
|
|
14316
|
-
top: _this.options.top,
|
|
14317
|
-
left: _this.options.left,
|
|
14318
|
-
width: _this.options.width,
|
|
14319
|
-
height: _this.options.height
|
|
14320
|
-
}).map(([key, value]) => `${key}=${value}`).join(",");
|
|
14321
|
-
/**
|
|
14322
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/open
|
|
14323
|
-
*/
|
|
14324
|
-
const externalWindow = window.open(url, _this.target, features);
|
|
14325
|
-
if (!externalWindow)
|
|
14326
|
-
/**
|
|
14327
|
-
* Popup blocked
|
|
14328
|
-
*/
|
|
14329
|
-
return null;
|
|
14330
|
-
const disposable = new CompositeDisposable();
|
|
14331
|
-
_this._window = {
|
|
14332
|
-
value: externalWindow,
|
|
14333
|
-
disposable
|
|
14334
|
-
};
|
|
14335
|
-
disposable.addDisposables(Disposable.from(() => {
|
|
14336
|
-
externalWindow.close();
|
|
14337
|
-
}), addDisposableListener(globalThis.window, "beforeunload", () => {
|
|
14338
|
-
/**
|
|
14339
|
-
* before the main window closes we should close this popup too
|
|
14340
|
-
* to be good citizens
|
|
14341
|
-
*
|
|
14342
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
|
14343
|
-
*/
|
|
14344
|
-
_this.close();
|
|
14345
|
-
}));
|
|
14346
|
-
const container = _this.createPopoutWindowContainer();
|
|
14347
|
-
if (_this.className) container.classList.add(_this.className);
|
|
14348
|
-
(_this$options$onDidOp = (_this$options2 = _this.options).onDidOpen) === null || _this$options$onDidOp === void 0 || _this$options$onDidOp.call(_this$options2, {
|
|
14349
|
-
id: _this.target,
|
|
14350
|
-
window: externalWindow
|
|
14351
|
-
});
|
|
14352
|
-
return new Promise((resolve, reject) => {
|
|
14353
|
-
externalWindow.addEventListener("unload", () => {});
|
|
14354
|
-
/**
|
|
14355
|
-
* `load` is the only event that resolves this promise with a
|
|
14356
|
-
* container, so a window that goes away first would leave the
|
|
14357
|
-
* caller awaiting a promise that never settles - and
|
|
14358
|
-
* `addPopoutGroup` holds its layout transaction open until it does.
|
|
14359
|
-
* Settle with `null` on close, the same signal a blocked popup
|
|
14360
|
-
* gives and one the caller already handles. `resolve` after the
|
|
14361
|
-
* fact is a no-op, so a `load` that arrived first still wins.
|
|
14362
|
-
*/
|
|
14363
|
-
disposable.addDisposables(_this.onWillClose(() => resolve(null)));
|
|
14364
|
-
externalWindow.addEventListener("load", () => {
|
|
14365
|
-
/**
|
|
14366
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event
|
|
14367
|
-
*/
|
|
14368
|
-
try {
|
|
14369
|
-
const externalDocument = externalWindow.document;
|
|
14370
|
-
externalDocument.title = document.title;
|
|
14371
|
-
externalDocument.body.appendChild(container);
|
|
14372
|
-
addStyles(externalDocument, globalThis.document.styleSheets, { nonce: _this.options.nonce });
|
|
14373
|
-
/**
|
|
14374
|
-
* beforeunload must be registered after load for reasons I could not determine
|
|
14375
|
-
* otherwise the beforeunload event will not fire when the window is closed
|
|
14376
|
-
*/
|
|
14377
|
-
addDisposableListener(externalWindow, "beforeunload", () => {
|
|
14378
|
-
/**
|
|
14379
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
|
14380
|
-
*/
|
|
14381
|
-
_this.close();
|
|
14382
|
-
});
|
|
14383
|
-
resolve(container);
|
|
14384
|
-
} catch (err) {
|
|
14385
|
-
reject(err);
|
|
14386
|
-
}
|
|
14387
|
-
});
|
|
14388
|
-
});
|
|
14389
|
-
})();
|
|
14390
|
-
}
|
|
14391
|
-
createPopoutWindowContainer() {
|
|
14392
|
-
const el = document.createElement("div");
|
|
14393
|
-
el.classList.add("dv-popout-window");
|
|
14394
|
-
el.id = "dv-popout-window";
|
|
14395
|
-
el.style.position = "absolute";
|
|
14396
|
-
el.style.width = "100%";
|
|
14397
|
-
el.style.height = "100%";
|
|
14398
|
-
el.style.top = "0px";
|
|
14399
|
-
el.style.left = "0px";
|
|
14400
|
-
return el;
|
|
14401
|
-
}
|
|
14402
|
-
};
|
|
14403
|
-
|
|
14404
14801
|
//#endregion
|
|
14405
14802
|
//#region src/dockview/strictEventsSequencing.ts
|
|
14406
14803
|
var StrictEventsSequencing = class extends CompositeDisposable {
|
|
@@ -14444,8 +14841,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
14444
14841
|
* peeks): while it lives it watches a configurable set of dismiss signals
|
|
14445
14842
|
* (Escape / extra keys, outside-pointerdown with an optional grace window,
|
|
14446
14843
|
* window resize, focus moving outside) and calls `onDismiss`. Inside/outside is
|
|
14447
|
-
* decided by an `isInside` predicate (geometry) or
|
|
14448
|
-
* `elements`. Dispose to detach every listener.
|
|
14844
|
+
* decided by an `isInside` predicate (geometry) or by checking the event's
|
|
14845
|
+
* composed path against `elements`. Dispose to detach every listener.
|
|
14449
14846
|
*
|
|
14450
14847
|
* It owns only the *signals*, not the surface element, its position, or any
|
|
14451
14848
|
* hover/keep-open policy, so callers keep their own element lifecycle and
|
|
@@ -14465,9 +14862,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
14465
14862
|
const isInside = (event) => {
|
|
14466
14863
|
var _options$elements, _options$elements2;
|
|
14467
14864
|
if (options.isInside) return options.isInside(event);
|
|
14468
|
-
|
|
14469
|
-
if (!(target instanceof Node)) return false;
|
|
14470
|
-
return ((_options$elements = (_options$elements2 = options.elements) === null || _options$elements2 === void 0 ? void 0 : _options$elements2.call(options)) !== null && _options$elements !== void 0 ? _options$elements : []).some((el) => el.contains(target));
|
|
14865
|
+
return isEventWithin(event, (_options$elements = (_options$elements2 = options.elements) === null || _options$elements2 === void 0 ? void 0 : _options$elements2.call(options)) !== null && _options$elements !== void 0 ? _options$elements : []);
|
|
14471
14866
|
};
|
|
14472
14867
|
if (escape || keys.length > 0) disposables.addDisposables(addDisposableListener(win, "keydown", (event) => {
|
|
14473
14868
|
if (escape && event.key === "Escape" || keys.includes(event.key)) options.onDismiss();
|
|
@@ -14486,17 +14881,45 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
14486
14881
|
options.onDismiss();
|
|
14487
14882
|
}));
|
|
14488
14883
|
if (options.focusOut) {
|
|
14489
|
-
|
|
14490
|
-
|
|
14491
|
-
|
|
14492
|
-
|
|
14884
|
+
/** A node in the layer's own tree, to scope retargeting and to locate
|
|
14885
|
+
* the shadow roots to listen on. */
|
|
14886
|
+
const layerScope = () => {
|
|
14887
|
+
var _options$anchor, _options$anchor2, _options$elements3;
|
|
14888
|
+
return (_options$anchor = (_options$anchor2 = options.anchor) === null || _options$anchor2 === void 0 ? void 0 : _options$anchor2.call(options)) !== null && _options$anchor !== void 0 ? _options$anchor : (_options$elements3 = options.elements) === null || _options$elements3 === void 0 ? void 0 : _options$elements3.call(options)[0];
|
|
14493
14889
|
};
|
|
14890
|
+
const seen = /* @__PURE__ */ new WeakSet();
|
|
14494
14891
|
const onFocusIn = (event) => {
|
|
14892
|
+
var _options$elements4, _options$elements5;
|
|
14893
|
+
if (seen.has(event)) return;
|
|
14894
|
+
seen.add(event);
|
|
14495
14895
|
const target = event.target;
|
|
14496
|
-
if (target instanceof Element
|
|
14896
|
+
if (!(target instanceof Element)) return;
|
|
14897
|
+
if (!(options.isFocusInside ? options.isFocusInside(retargetInto(target, layerScope())) : isEventWithin(event, (_options$elements4 = (_options$elements5 = options.elements) === null || _options$elements5 === void 0 ? void 0 : _options$elements5.call(options)) !== null && _options$elements4 !== void 0 ? _options$elements4 : []))) options.onDismiss();
|
|
14497
14898
|
};
|
|
14498
|
-
|
|
14499
|
-
|
|
14899
|
+
const bound = /* @__PURE__ */ new Map();
|
|
14900
|
+
const syncShadowRoots = () => {
|
|
14901
|
+
var _options$anchor3, _options$elements6, _options$elements7;
|
|
14902
|
+
const wanted = /* @__PURE__ */ new Set();
|
|
14903
|
+
const anchor = (_options$anchor3 = options.anchor) === null || _options$anchor3 === void 0 ? void 0 : _options$anchor3.call(options);
|
|
14904
|
+
const sources = [...(_options$elements6 = (_options$elements7 = options.elements) === null || _options$elements7 === void 0 ? void 0 : _options$elements7.call(options)) !== null && _options$elements6 !== void 0 ? _options$elements6 : [], ...anchor ? [anchor] : []];
|
|
14905
|
+
for (const node of sources) for (const root of shadowRootsOf(node)) wanted.add(root);
|
|
14906
|
+
for (const [root, listener] of bound) if (!wanted.has(root)) {
|
|
14907
|
+
listener.dispose();
|
|
14908
|
+
bound.delete(root);
|
|
14909
|
+
}
|
|
14910
|
+
for (const root of wanted) {
|
|
14911
|
+
if (bound.has(root)) continue;
|
|
14912
|
+
bound.set(root, addDisposableListener(root, "focusin", onFocusIn, capture));
|
|
14913
|
+
}
|
|
14914
|
+
};
|
|
14915
|
+
disposables.addDisposables(addDisposableListener(win, "focusin", (event) => {
|
|
14916
|
+
syncShadowRoots();
|
|
14917
|
+
onFocusIn(event);
|
|
14918
|
+
}, capture), { dispose: () => {
|
|
14919
|
+
for (const [, listener] of bound) listener.dispose();
|
|
14920
|
+
bound.clear();
|
|
14921
|
+
} });
|
|
14922
|
+
syncShadowRoots();
|
|
14500
14923
|
}
|
|
14501
14924
|
return disposables;
|
|
14502
14925
|
}
|
|
@@ -14989,6 +15412,24 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
14989
15412
|
this.updateTheme(this._gap, this._defaultCollapsedSize);
|
|
14990
15413
|
return view;
|
|
14991
15414
|
}
|
|
15415
|
+
/**
|
|
15416
|
+
* Lay out from the shell's current size.
|
|
15417
|
+
*
|
|
15418
|
+
* The ResizeObserver above only reports asynchronously, so between
|
|
15419
|
+
* construction and its first callback the shell believes it has no size -
|
|
15420
|
+
* and any layout built in that window (panels added straight after
|
|
15421
|
+
* `createDockview`, say) resolves its sizes against zero and collapses to
|
|
15422
|
+
* minimums, permanently. Seeding the size synchronously gives that work
|
|
15423
|
+
* the real dimensions. Same guards as the observer: a detached or hidden
|
|
15424
|
+
* shell has no size worth propagating.
|
|
15425
|
+
*/
|
|
15426
|
+
layoutFromElement() {
|
|
15427
|
+
if (!this._shellElement.offsetParent || !isInDocument(this._shellElement)) return;
|
|
15428
|
+
const width = Math.round(this._shellElement.clientWidth);
|
|
15429
|
+
const height = Math.round(this._shellElement.clientHeight);
|
|
15430
|
+
if (width === 0 || height === 0) return;
|
|
15431
|
+
this.layout(width, height);
|
|
15432
|
+
}
|
|
14992
15433
|
layout(width, height) {
|
|
14993
15434
|
this._outerSplitview.layout(width, height);
|
|
14994
15435
|
this._flushPendingSizes();
|
|
@@ -15248,6 +15689,15 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
15248
15689
|
|
|
15249
15690
|
//#endregion
|
|
15250
15691
|
//#region src/dockview/dockviewComponent.ts
|
|
15692
|
+
/**
|
|
15693
|
+
* An error says the most about why, so it wins; a blocked window has none, and
|
|
15694
|
+
* its usual cause is more useful than its name.
|
|
15695
|
+
*/
|
|
15696
|
+
function logFailedPopout(failure) {
|
|
15697
|
+
if (failure.error) console.error("dockview: failed to create popout.", failure.error);
|
|
15698
|
+
else if (failure.reason === "blocked") console.error("dockview: failed to create popout. perhaps you need to allow pop-ups for this website");
|
|
15699
|
+
else console.error(`dockview: failed to create popout (${failure.reason}).`);
|
|
15700
|
+
}
|
|
15251
15701
|
function buildTabGroupColorPalette(options) {
|
|
15252
15702
|
var _options$tabGroupColo;
|
|
15253
15703
|
return new TabGroupColorPalette((_options$tabGroupColo = options.tabGroupColors) !== null && _options$tabGroupColo !== void 0 ? _options$tabGroupColo : DEFAULT_TAB_GROUP_COLORS, options.tabGroupAccent !== "off");
|
|
@@ -15299,6 +15749,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
15299
15749
|
get panels() {
|
|
15300
15750
|
return this.groups.flatMap((group) => group.panels);
|
|
15301
15751
|
}
|
|
15752
|
+
/** `dndStrategy` resolved against this device; see `DockviewApi`. */
|
|
15753
|
+
get dndCapabilities() {
|
|
15754
|
+
return resolveDndCapabilities(this.options);
|
|
15755
|
+
}
|
|
15302
15756
|
get options() {
|
|
15303
15757
|
return this._options;
|
|
15304
15758
|
}
|
|
@@ -15808,9 +16262,9 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
15808
16262
|
return (_this$_popoutWindowSe = (_this$_popoutWindowSe2 = this._popoutWindowService) === null || _this$_popoutWindowSe2 === void 0 ? void 0 : _this$_popoutWindowSe2.restorationPromise) !== null && _this$_popoutWindowSe !== void 0 ? _this$_popoutWindowSe : Promise.resolve();
|
|
15809
16263
|
}
|
|
15810
16264
|
constructor(container, options) {
|
|
15811
|
-
var _options$theme$gap, _options$theme, _options$theme$gap2, _options$theme2, _options$theme3;
|
|
16265
|
+
var _options$proportional, _options$theme$gap, _options$theme, _options$theme$gap2, _options$theme2, _options$theme3;
|
|
15812
16266
|
super(container, {
|
|
15813
|
-
proportionalLayout: true,
|
|
16267
|
+
proportionalLayout: (_options$proportional = options.proportionalLayout) !== null && _options$proportional !== void 0 ? _options$proportional : true,
|
|
15814
16268
|
orientation: "HORIZONTAL",
|
|
15815
16269
|
styles: options.hideBorders ? { separatorBorder: "transparent" } : void 0,
|
|
15816
16270
|
disableAutoResizing: options.disableAutoResizing,
|
|
@@ -15857,6 +16311,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
15857
16311
|
this.onDidChangePopouts = this._onDidChangePopouts.event;
|
|
15858
16312
|
this._onDidOpenPopoutWindowFail = new Emitter();
|
|
15859
16313
|
this.onDidOpenPopoutWindowFail = this._onDidOpenPopoutWindowFail.event;
|
|
16314
|
+
this._onWillClosePopoutWindow = new Emitter();
|
|
16315
|
+
this.onWillClosePopoutWindow = this._onWillClosePopoutWindow.event;
|
|
15860
16316
|
this._onDidStartFloatingGroupDrag = new Emitter();
|
|
15861
16317
|
this.onDidStartFloatingGroupDrag = this._onDidStartFloatingGroupDrag.event;
|
|
15862
16318
|
this._onDidEndFloatingGroupDrag = new Emitter();
|
|
@@ -15958,7 +16414,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
15958
16414
|
var _this$_shellManager2;
|
|
15959
16415
|
this._moduleRegistry.dispose();
|
|
15960
16416
|
(_this$_shellManager2 = this._shellManager) === null || _this$_shellManager2 === void 0 || _this$_shellManager2.dispose();
|
|
15961
|
-
}));
|
|
16417
|
+
}), this._onWillClosePopoutWindow);
|
|
15962
16418
|
const rootDropTarget = this._rootDropTargetService;
|
|
15963
16419
|
if (rootDropTarget) this.addDisposables(rootDropTarget.onWillShowOverlay((event) => {
|
|
15964
16420
|
if (this.gridview.length > 0 && event.position === "center") return;
|
|
@@ -15971,6 +16427,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
15971
16427
|
}));
|
|
15972
16428
|
}), rootDropTarget.onDrop((event) => this.dockToLayoutEdge(event.nativeEvent, event.position)));
|
|
15973
16429
|
this._moduleRegistry.postConstruct(this);
|
|
16430
|
+
this._shellManager.layoutFromElement();
|
|
15974
16431
|
}
|
|
15975
16432
|
setVisible(panel, visible) {
|
|
15976
16433
|
switch (panel.api.location.type) {
|
|
@@ -16040,22 +16497,36 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16040
16497
|
const box = getBox();
|
|
16041
16498
|
const groupId = (_options$overridePopo = options === null || options === void 0 || (_options$overridePopo2 = options.overridePopoutGroup) === null || _options$overridePopo2 === void 0 ? void 0 : _options$overridePopo2.id) !== null && _options$overridePopo !== void 0 ? _options$overridePopo : this.getNextGroupId();
|
|
16042
16499
|
const resolvedPopoutUrl = (_options$popoutUrl = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _options$popoutUrl !== void 0 ? _options$popoutUrl : (_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.popoutUrl;
|
|
16500
|
+
const popoutUrl = resolvedPopoutUrl !== null && resolvedPopoutUrl !== void 0 ? resolvedPopoutUrl : "/popout.html";
|
|
16043
16501
|
const _window = new PopoutWindow(`${this.id}-${groupId}`, theme !== null && theme !== void 0 ? theme : "", {
|
|
16044
|
-
url:
|
|
16502
|
+
url: popoutUrl,
|
|
16045
16503
|
left: box.left,
|
|
16046
16504
|
top: box.top,
|
|
16047
16505
|
width: box.width,
|
|
16048
16506
|
height: box.height,
|
|
16049
16507
|
onDidOpen: options === null || options === void 0 ? void 0 : options.onDidOpen,
|
|
16050
|
-
onWillClose:
|
|
16051
|
-
|
|
16508
|
+
onWillClose: (event) => {
|
|
16509
|
+
var _options$onWillClose;
|
|
16510
|
+
options === null || options === void 0 || (_options$onWillClose = options.onWillClose) === null || _options$onWillClose === void 0 || _options$onWillClose.call(options, event);
|
|
16511
|
+
this._onWillClosePopoutWindow.fire(event);
|
|
16512
|
+
},
|
|
16513
|
+
nonce: (_this$options2 = this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.nonce,
|
|
16514
|
+
styleRoot: () => this.element.getRootNode()
|
|
16052
16515
|
});
|
|
16053
16516
|
const popoutWindowDisposable = new CompositeDisposable(_window, _window.onDidClose(() => {
|
|
16054
16517
|
popoutWindowDisposable.dispose();
|
|
16055
16518
|
}));
|
|
16056
|
-
|
|
16519
|
+
const openError = getPopoutUrlError(popoutUrl);
|
|
16520
|
+
return (openError ? Promise.resolve(null) : _window.open()).then((popoutContainer) => {
|
|
16057
16521
|
var _options$referenceGro, _options$overridePopo4;
|
|
16058
|
-
if (_window.isDisposed)
|
|
16522
|
+
if (_window.isDisposed) {
|
|
16523
|
+
const failure = _window.failure;
|
|
16524
|
+
if (failure && !this.isDisposed) {
|
|
16525
|
+
logFailedPopout(failure);
|
|
16526
|
+
this._onDidOpenPopoutWindowFail.fire(failure);
|
|
16527
|
+
}
|
|
16528
|
+
return false;
|
|
16529
|
+
}
|
|
16059
16530
|
const referenceGroup = (_options$referenceGro = options === null || options === void 0 ? void 0 : options.referenceGroup) !== null && _options$referenceGro !== void 0 ? _options$referenceGro : itemToPopout instanceof DockviewPanel ? itemToPopout.group : itemToPopout;
|
|
16060
16531
|
const referenceLocation = itemToPopout.api.location.type;
|
|
16061
16532
|
/**
|
|
@@ -16074,11 +16545,16 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16074
16545
|
if (popoutContainer) this._onDidAddGroup.fire(group);
|
|
16075
16546
|
}
|
|
16076
16547
|
if (popoutContainer === null) {
|
|
16548
|
+
var _window$failure;
|
|
16077
16549
|
this.handleBlockedPopout({
|
|
16078
16550
|
group,
|
|
16079
16551
|
referenceGroup,
|
|
16080
16552
|
options,
|
|
16081
|
-
popoutWindowDisposable
|
|
16553
|
+
popoutWindowDisposable,
|
|
16554
|
+
failure: openError ? {
|
|
16555
|
+
reason: "url-refused",
|
|
16556
|
+
error: openError
|
|
16557
|
+
} : (_window$failure = _window.failure) !== null && _window$failure !== void 0 ? _window$failure : { reason: "blocked" }
|
|
16082
16558
|
});
|
|
16083
16559
|
return false;
|
|
16084
16560
|
}
|
|
@@ -16241,16 +16717,17 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16241
16717
|
});
|
|
16242
16718
|
}
|
|
16243
16719
|
/**
|
|
16244
|
-
* The popout window
|
|
16245
|
-
* common when restoring popouts on load)
|
|
16246
|
-
*
|
|
16247
|
-
*
|
|
16720
|
+
* The popout window never opened - blocked by the browser's popup blocker
|
|
16721
|
+
* (common when restoring popouts on load), or refused outright because its
|
|
16722
|
+
* URL failed the same-origin guard. Fall back gracefully so the group(s)
|
|
16723
|
+
* end up valid and visible in the main grid rather than as orphans that
|
|
16724
|
+
* render nothing and later crash clear()/remove().
|
|
16248
16725
|
*/
|
|
16249
16726
|
handleBlockedPopout(params) {
|
|
16250
|
-
const { group, referenceGroup, options, popoutWindowDisposable } = params;
|
|
16251
|
-
|
|
16727
|
+
const { group, referenceGroup, options, popoutWindowDisposable, failure } = params;
|
|
16728
|
+
logFailedPopout(failure);
|
|
16252
16729
|
popoutWindowDisposable.dispose();
|
|
16253
|
-
this._onDidOpenPopoutWindowFail.fire();
|
|
16730
|
+
this._onDidOpenPopoutWindowFail.fire(failure);
|
|
16254
16731
|
if (options === null || options === void 0 ? void 0 : options.overridePopoutGridview) {
|
|
16255
16732
|
const blockedGridview = options.overridePopoutGridview;
|
|
16256
16733
|
const members = this.groups.filter((candidate) => blockedGridview.element.contains(candidate.element));
|
|
@@ -16405,10 +16882,11 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16405
16882
|
group = this.createGroup();
|
|
16406
16883
|
this._onDidAddGroup.fire(group);
|
|
16407
16884
|
this.movingLock(() => this.removePanel(item, {
|
|
16408
|
-
removeEmptyGroup:
|
|
16885
|
+
removeEmptyGroup: false,
|
|
16409
16886
|
skipDispose: true,
|
|
16410
16887
|
skipSetActiveGroup: true
|
|
16411
16888
|
}));
|
|
16889
|
+
this.removeGroupIfEmpty(sourceGroup);
|
|
16412
16890
|
this.movingLock(() => group.model.openPanel(item, { skipSetGroupActive: true }));
|
|
16413
16891
|
movedPanels = [{
|
|
16414
16892
|
panel: item,
|
|
@@ -16479,13 +16957,17 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16479
16957
|
});
|
|
16480
16958
|
for (const { panel, from } of movedPanels) this.fireDidMovePanel(panel, from);
|
|
16481
16959
|
}
|
|
16960
|
+
removeGroupIfEmpty(group) {
|
|
16961
|
+
if (group.model.size === 0) this.doRemoveGroup(group, { skipActive: true });
|
|
16962
|
+
}
|
|
16482
16963
|
/**
|
|
16483
|
-
* Build an empty gridview configured to match the main grid's styling
|
|
16484
|
-
* hosting a nested layout inside a floating or popout
|
|
16964
|
+
* Build an empty gridview configured to match the main grid's styling and
|
|
16965
|
+
* resize behaviour, for hosting a nested layout inside a floating or popout
|
|
16966
|
+
* window.
|
|
16485
16967
|
*/
|
|
16486
16968
|
createNestedGridview(orientation = "HORIZONTAL") {
|
|
16487
16969
|
var _this$options$theme$g, _this$options$theme2;
|
|
16488
|
-
return new Gridview(
|
|
16970
|
+
return new Gridview(this.gridview.proportionalLayout, this.options.hideBorders ? { separatorBorder: "transparent" } : void 0, orientation, false, (_this$options$theme$g = (_this$options$theme2 = this.options.theme) === null || _this$options$theme2 === void 0 ? void 0 : _this$options$theme2.gap) !== null && _this$options$theme$g !== void 0 ? _this$options$theme$g : 0);
|
|
16489
16971
|
}
|
|
16490
16972
|
/**
|
|
16491
16973
|
* Wrap a (populated) floating gridview in an overlay window: title bar /
|
|
@@ -16558,6 +17040,12 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16558
17040
|
const newDisableDnd = this.options.disableDnd;
|
|
16559
17041
|
const newDndStrategy = this.options.dndStrategy;
|
|
16560
17042
|
if (oldDisableDnd !== newDisableDnd || oldDndStrategy !== newDndStrategy) this.updateDragAndDropState();
|
|
17043
|
+
if ("proportionalLayout" in options) {
|
|
17044
|
+
var _this$_popoutWindowSe9, _this$_popoutWindowSe10;
|
|
17045
|
+
const proportionalLayout = this.gridview.proportionalLayout;
|
|
17046
|
+
for (const floating of this.floatingGroups) floating.gridview.proportionalLayout = proportionalLayout;
|
|
17047
|
+
for (const entry of (_this$_popoutWindowSe9 = (_this$_popoutWindowSe10 = this._popoutWindowService) === null || _this$_popoutWindowSe10 === void 0 ? void 0 : _this$_popoutWindowSe10.entries) !== null && _this$_popoutWindowSe9 !== void 0 ? _this$_popoutWindowSe9 : []) entry.gridview.proportionalLayout = proportionalLayout;
|
|
17048
|
+
}
|
|
16561
17049
|
if ("theme" in options) this.updateTheme();
|
|
16562
17050
|
if ("createRightHeaderActionComponent" in options || "createLeftHeaderActionComponent" in options || "createPrefixHeaderActionComponent" in options) {
|
|
16563
17051
|
var _this$headerActionsSe;
|
|
@@ -16865,14 +17353,14 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16865
17353
|
* @returns A JSON respresentation of the layout
|
|
16866
17354
|
*/
|
|
16867
17355
|
toJSON() {
|
|
16868
|
-
var _this$_floatingGroupS3, _this$_floatingGroupS4, _this$
|
|
17356
|
+
var _this$_floatingGroupS3, _this$_floatingGroupS4, _this$_popoutWindowSe11, _this$_popoutWindowSe12, _this$activeGroup2;
|
|
16869
17357
|
const data = this.gridview.serialize();
|
|
16870
17358
|
const panels = this.panels.reduce((collection, panel) => {
|
|
16871
17359
|
collection[panel.id] = panel.toJSON();
|
|
16872
17360
|
return collection;
|
|
16873
17361
|
}, {});
|
|
16874
17362
|
const floats = (_this$_floatingGroupS3 = (_this$_floatingGroupS4 = this._floatingGroupService) === null || _this$_floatingGroupS4 === void 0 ? void 0 : _this$_floatingGroupS4.serialize()) !== null && _this$_floatingGroupS3 !== void 0 ? _this$_floatingGroupS3 : [];
|
|
16875
|
-
const popoutGroups = (_this$
|
|
17363
|
+
const popoutGroups = (_this$_popoutWindowSe11 = (_this$_popoutWindowSe12 = this._popoutWindowService) === null || _this$_popoutWindowSe12 === void 0 ? void 0 : _this$_popoutWindowSe12.serialize()) !== null && _this$_popoutWindowSe11 !== void 0 ? _this$_popoutWindowSe11 : [];
|
|
16876
17364
|
const result = {
|
|
16877
17365
|
grid: data,
|
|
16878
17366
|
panels,
|
|
@@ -16911,8 +17399,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
16911
17399
|
this.mutation("load", () => this._doFromJSON(data, options));
|
|
16912
17400
|
}
|
|
16913
17401
|
_doFromJSON(data, options) {
|
|
16914
|
-
var _this$
|
|
16915
|
-
(_this$
|
|
17402
|
+
var _this$_popoutWindowSe13, _data$grid$root;
|
|
17403
|
+
(_this$_popoutWindowSe13 = this._popoutWindowService) === null || _this$_popoutWindowSe13 === void 0 || _this$_popoutWindowSe13.cancelPendingRestorations();
|
|
16916
17404
|
if (typeof data !== "object" || data === null) throw new Error("dockview: serialized layout must be a non-null object");
|
|
16917
17405
|
if (!data.grid || ((_data$grid$root = data.grid.root) === null || _data$grid$root === void 0 ? void 0 : _data$grid$root.type) !== "branch" || !Array.isArray(data.grid.root.data)) throw new Error("dockview: root must be of type branch");
|
|
16918
17406
|
const existingPanels = /* @__PURE__ */ new Map();
|
|
@@ -17031,7 +17519,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17031
17519
|
} else this.clear();
|
|
17032
17520
|
const { grid, panels, activeGroup } = data;
|
|
17033
17521
|
try {
|
|
17034
|
-
var _data$floatingGroups, _data$popoutGroups, _this$
|
|
17522
|
+
var _data$floatingGroups, _data$popoutGroups, _this$_popoutWindowSe14, _this$_floatingGroupS5, _this$_watermarkServi2;
|
|
17035
17523
|
const width = this.width;
|
|
17036
17524
|
const height = this.height;
|
|
17037
17525
|
const createGroupFromSerializedState = (data) => {
|
|
@@ -17096,7 +17584,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17096
17584
|
if (data.edgeGroups) this.deserializeEdgeGroups(data.edgeGroups, panels, existingPanels, temporaryGroups);
|
|
17097
17585
|
this.deserializeFloatingWindows((_data$floatingGroups = data.floatingGroups) !== null && _data$floatingGroups !== void 0 ? _data$floatingGroups : [], createGroupFromSerializedState);
|
|
17098
17586
|
const popoutPromises = this.deserializePopoutWindows((_data$popoutGroups = data.popoutGroups) !== null && _data$popoutGroups !== void 0 ? _data$popoutGroups : [], createGroupFromSerializedState);
|
|
17099
|
-
(_this$
|
|
17587
|
+
(_this$_popoutWindowSe14 = this._popoutWindowService) === null || _this$_popoutWindowSe14 === void 0 || _this$_popoutWindowSe14.finishRestoration(popoutPromises);
|
|
17100
17588
|
(_this$_floatingGroupS5 = this._floatingGroupService) === null || _this$_floatingGroupS5 === void 0 || _this$_floatingGroupS5.constrainBounds();
|
|
17101
17589
|
if (typeof activeGroup === "string") {
|
|
17102
17590
|
const panel = this.getPanel(activeGroup);
|
|
@@ -17264,15 +17752,13 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17264
17752
|
}
|
|
17265
17753
|
}
|
|
17266
17754
|
const group = grid ? members[0] : createGroup(data);
|
|
17267
|
-
return popoutService.scheduleRestoration(index * 100, () => {
|
|
17268
|
-
|
|
17269
|
-
|
|
17270
|
-
|
|
17271
|
-
|
|
17272
|
-
|
|
17273
|
-
|
|
17274
|
-
});
|
|
17275
|
-
}, () => {
|
|
17755
|
+
return popoutService.scheduleRestoration(index * 100, () => this.addPopoutGroup(group, {
|
|
17756
|
+
position: position !== null && position !== void 0 ? position : void 0,
|
|
17757
|
+
overridePopoutGroup: gridReferenceGroup ? group : void 0,
|
|
17758
|
+
overridePopoutGridview,
|
|
17759
|
+
referenceGroup: gridReferenceGroup ? this.getPanel(gridReferenceGroup) : void 0,
|
|
17760
|
+
popoutUrl: url
|
|
17761
|
+
}), () => {
|
|
17276
17762
|
for (const orphan of members.length > 0 ? members : [group]) if (!this.isDisposed && this._groups.has(orphan.id) && orphan.element.parentElement === null) {
|
|
17277
17763
|
for (const panel of [...orphan.panels]) this.removePanel(panel, { removeEmptyGroup: false });
|
|
17278
17764
|
orphan.dispose();
|
|
@@ -17507,7 +17993,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17507
17993
|
* window.
|
|
17508
17994
|
*/
|
|
17509
17995
|
detachFromNestedWindow(group) {
|
|
17510
|
-
var _this$_floatingGroupS7, _this$
|
|
17996
|
+
var _this$_floatingGroupS7, _this$_popoutWindowSe15;
|
|
17511
17997
|
const floating = (_this$_floatingGroupS7 = this._floatingGroupService) === null || _this$_floatingGroupS7 === void 0 ? void 0 : _this$_floatingGroupS7.findByGroup(group);
|
|
17512
17998
|
if (floating) {
|
|
17513
17999
|
const members = this.nestedWindowMembers(group);
|
|
@@ -17516,7 +18002,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17516
18002
|
if (floating.group === group) floating.setAnchorGroup(members.find((m) => m !== group));
|
|
17517
18003
|
return true;
|
|
17518
18004
|
}
|
|
17519
|
-
const popout = (_this$
|
|
18005
|
+
const popout = (_this$_popoutWindowSe15 = this._popoutWindowService) === null || _this$_popoutWindowSe15 === void 0 ? void 0 : _this$_popoutWindowSe15.findByGroup(group);
|
|
17520
18006
|
if (popout) {
|
|
17521
18007
|
const members = this.nestedWindowMembers(group);
|
|
17522
18008
|
if (members.length <= 1) return false;
|
|
@@ -17573,8 +18059,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17573
18059
|
return group;
|
|
17574
18060
|
}
|
|
17575
18061
|
if (group.api.location.type === "popout") {
|
|
17576
|
-
var _this$
|
|
17577
|
-
const selectedGroup = (_this$
|
|
18062
|
+
var _this$_popoutWindowSe16, _this$_popoutWindowSe17;
|
|
18063
|
+
const selectedGroup = (_this$_popoutWindowSe16 = this._popoutWindowService) === null || _this$_popoutWindowSe16 === void 0 ? void 0 : _this$_popoutWindowSe16.findByGroup(group);
|
|
17578
18064
|
if (!selectedGroup) throw new Error("dockview: failed to find popout group");
|
|
17579
18065
|
if (this.detachFromNestedWindow(group)) {
|
|
17580
18066
|
if (options === null || options === void 0 ? void 0 : options.skipDispose) group.model.location = { type: "grid" };
|
|
@@ -17591,7 +18077,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17591
18077
|
this._groups.delete(group.id);
|
|
17592
18078
|
this._onDidRemoveGroup.fire(group);
|
|
17593
18079
|
}
|
|
17594
|
-
(_this$
|
|
18080
|
+
(_this$_popoutWindowSe17 = this._popoutWindowService) === null || _this$_popoutWindowSe17 === void 0 || _this$_popoutWindowSe17.remove(selectedGroup);
|
|
17595
18081
|
const removedGroup = selectedGroup.disposable.dispose();
|
|
17596
18082
|
if (!(options === null || options === void 0 ? void 0 : options.skipPopoutReturn) && removedGroup) {
|
|
17597
18083
|
this.doAddGroup(removedGroup, [0]);
|
|
@@ -17618,10 +18104,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17618
18104
|
debouncedUpdateAllPositions() {
|
|
17619
18105
|
if (this._updatePositionsFrameId !== void 0) cancelAnimationFrame(this._updatePositionsFrameId);
|
|
17620
18106
|
this._updatePositionsFrameId = requestAnimationFrame(() => {
|
|
17621
|
-
var _this$
|
|
18107
|
+
var _this$_popoutWindowSe18, _this$_popoutWindowSe19;
|
|
17622
18108
|
this._updatePositionsFrameId = void 0;
|
|
17623
18109
|
this.overlayRenderContainer.updateAllPositions();
|
|
17624
|
-
for (const entry of (_this$
|
|
18110
|
+
for (const entry of (_this$_popoutWindowSe18 = (_this$_popoutWindowSe19 = this._popoutWindowService) === null || _this$_popoutWindowSe19 === void 0 ? void 0 : _this$_popoutWindowSe19.entries) !== null && _this$_popoutWindowSe18 !== void 0 ? _this$_popoutWindowSe18 : []) entry.overlayRenderContainer.updateAllPositions();
|
|
17625
18111
|
});
|
|
17626
18112
|
}
|
|
17627
18113
|
movingLock(func) {
|
|
@@ -17871,7 +18357,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17871
18357
|
}
|
|
17872
18358
|
}
|
|
17873
18359
|
if (sourceGroup.api.location.type === "popout" && this.nestedWindowMembers(sourceGroup).length <= 1) {
|
|
17874
|
-
var _this$
|
|
18360
|
+
var _this$_popoutWindowSe20;
|
|
17875
18361
|
/**
|
|
17876
18362
|
* the source group is the only group in a popout window and
|
|
17877
18363
|
* has a single panel
|
|
@@ -17886,7 +18372,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
17886
18372
|
* Multi-group popout windows fall through to the generic
|
|
17887
18373
|
* detach-and-re-add path so the window stays alive.
|
|
17888
18374
|
*/
|
|
17889
|
-
const popoutGroup = (_this$
|
|
18375
|
+
const popoutGroup = (_this$_popoutWindowSe20 = this._popoutWindowService) === null || _this$_popoutWindowSe20 === void 0 ? void 0 : _this$_popoutWindowSe20.findByGroup(sourceGroup);
|
|
17890
18376
|
if (!popoutGroup) return;
|
|
17891
18377
|
const removedPanel = this.movingLock(() => popoutGroup.popoutGroup.model.removePanel(popoutGroup.popoutGroup.panels[0], {
|
|
17892
18378
|
skipSetActive: true,
|
|
@@ -18095,11 +18581,11 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
18095
18581
|
break;
|
|
18096
18582
|
}
|
|
18097
18583
|
case "popout": {
|
|
18098
|
-
var _this$
|
|
18099
|
-
const selectedPopoutGroup = (_this$
|
|
18584
|
+
var _this$_popoutWindowSe21, _this$_popoutWindowSe22;
|
|
18585
|
+
const selectedPopoutGroup = (_this$_popoutWindowSe21 = this._popoutWindowService) === null || _this$_popoutWindowSe21 === void 0 ? void 0 : _this$_popoutWindowSe21.findByGroup(from);
|
|
18100
18586
|
if (!selectedPopoutGroup) throw new Error("dockview: failed to find popout group");
|
|
18101
18587
|
if (this.detachFromNestedWindow(from)) break;
|
|
18102
|
-
(_this$
|
|
18588
|
+
(_this$_popoutWindowSe22 = this._popoutWindowService) === null || _this$_popoutWindowSe22 === void 0 || _this$_popoutWindowSe22.remove(selectedPopoutGroup);
|
|
18103
18589
|
if (selectedPopoutGroup.referenceGroup) {
|
|
18104
18590
|
const referenceGroup = this.getPanel(selectedPopoutGroup.referenceGroup);
|
|
18105
18591
|
if (referenceGroup && !referenceGroup.api.isVisible) this.doRemoveGroup(referenceGroup, { skipActive: true });
|
|
@@ -18264,8 +18750,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
18264
18750
|
* window-local containers).
|
|
18265
18751
|
*/
|
|
18266
18752
|
setGroupLocationForRoot(group, gridview) {
|
|
18267
|
-
var _this$
|
|
18268
|
-
const popout = (_this$
|
|
18753
|
+
var _this$_popoutWindowSe23;
|
|
18754
|
+
const popout = (_this$_popoutWindowSe23 = this._popoutWindowService) === null || _this$_popoutWindowSe23 === void 0 ? void 0 : _this$_popoutWindowSe23.entries.find((entry) => entry.gridview === gridview);
|
|
18269
18755
|
if (popout) {
|
|
18270
18756
|
if (group.model.renderContainer !== popout.overlayRenderContainer) group.model.renderContainer = popout.overlayRenderContainer;
|
|
18271
18757
|
group.model.dropTargetContainer = popout.dropTargetContainer;
|
|
@@ -18285,10 +18771,10 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
18285
18771
|
* the nested gridview of the floating / popout window it lives in.
|
|
18286
18772
|
*/
|
|
18287
18773
|
getGridviewForGroup(group) {
|
|
18288
|
-
var _this$_floatingGroupS10, _this$
|
|
18774
|
+
var _this$_floatingGroupS10, _this$_popoutWindowSe24;
|
|
18289
18775
|
const floating = (_this$_floatingGroupS10 = this._floatingGroupService) === null || _this$_floatingGroupS10 === void 0 ? void 0 : _this$_floatingGroupS10.findByGroup(group);
|
|
18290
18776
|
if (floating) return floating.gridview;
|
|
18291
|
-
const popout = (_this$
|
|
18777
|
+
const popout = (_this$_popoutWindowSe24 = this._popoutWindowService) === null || _this$_popoutWindowSe24 === void 0 ? void 0 : _this$_popoutWindowSe24.findByGroup(group);
|
|
18292
18778
|
if (popout) return popout.gridview;
|
|
18293
18779
|
return this.gridview;
|
|
18294
18780
|
}
|
|
@@ -18310,13 +18796,13 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
18310
18796
|
return location.length % 2 == 1 ? rootOrientation : orthogonal(rootOrientation);
|
|
18311
18797
|
}
|
|
18312
18798
|
updateTheme() {
|
|
18313
|
-
var _this$_options$theme, _this$_shellThemeClas, _theme$gap, _this$
|
|
18799
|
+
var _this$_options$theme, _this$_shellThemeClas, _theme$gap, _this$_popoutWindowSe25, _this$_popoutWindowSe26, _this$_shellManager5, _theme$edgeGroupColla, _theme$tabGroupIndica;
|
|
18314
18800
|
const theme = (_this$_options$theme = this._options.theme) !== null && _this$_options$theme !== void 0 ? _this$_options$theme : themeAbyss;
|
|
18315
18801
|
(_this$_shellThemeClas = this._shellThemeClassnames) === null || _this$_shellThemeClas === void 0 || _this$_shellThemeClas.setClassNames(theme.className);
|
|
18316
18802
|
const gap = (_theme$gap = theme.gap) !== null && _theme$gap !== void 0 ? _theme$gap : 0;
|
|
18317
18803
|
this.gridview.margin = gap;
|
|
18318
18804
|
for (const floating of this.floatingGroups) floating.gridview.margin = gap;
|
|
18319
|
-
for (const entry of (_this$
|
|
18805
|
+
for (const entry of (_this$_popoutWindowSe25 = (_this$_popoutWindowSe26 = this._popoutWindowService) === null || _this$_popoutWindowSe26 === void 0 ? void 0 : _this$_popoutWindowSe26.entries) !== null && _this$_popoutWindowSe25 !== void 0 ? _this$_popoutWindowSe25 : []) entry.gridview.margin = gap;
|
|
18320
18806
|
(_this$_shellManager5 = this._shellManager) === null || _this$_shellManager5 === void 0 || _this$_shellManager5.updateTheme(gap, (_theme$edgeGroupColla = theme.edgeGroupCollapsedSize) !== null && _theme$edgeGroupColla !== void 0 ? _theme$edgeGroupColla : 35);
|
|
18321
18807
|
if (theme.dndOverlayBorder === void 0) {
|
|
18322
18808
|
var _this$_shellManager6;
|
|
@@ -18385,6 +18871,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
18385
18871
|
}), this.onDidActiveChange((event) => {
|
|
18386
18872
|
this._onDidActiveGroupChange.fire(event);
|
|
18387
18873
|
}));
|
|
18874
|
+
this.layoutFromElement();
|
|
18388
18875
|
}
|
|
18389
18876
|
updateOptions(options) {
|
|
18390
18877
|
super.updateOptions(options);
|
|
@@ -18630,6 +19117,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
18630
19117
|
this._options = options;
|
|
18631
19118
|
this.splitview = new Splitview(this.element, options);
|
|
18632
19119
|
this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
|
|
19120
|
+
this.layoutFromElement();
|
|
18633
19121
|
}
|
|
18634
19122
|
updateOptions(options) {
|
|
18635
19123
|
if ("className" in options) {
|
|
@@ -19311,11 +19799,13 @@ exports.createSplitview = createSplitview;
|
|
|
19311
19799
|
exports.defineModule = defineModule;
|
|
19312
19800
|
exports.directionToPosition = directionToPosition;
|
|
19313
19801
|
exports.findRelativeZIndexParent = findRelativeZIndexParent;
|
|
19802
|
+
exports.getActiveElement = getActiveElement;
|
|
19314
19803
|
exports.getDirectionOrientation = getDirectionOrientation;
|
|
19315
19804
|
exports.getGridLocation = getGridLocation;
|
|
19316
19805
|
exports.getLocationOrientation = getLocationOrientation;
|
|
19317
19806
|
exports.getPaneData = getPaneData;
|
|
19318
19807
|
exports.getPanelData = getPanelData;
|
|
19808
|
+
exports.getPopoutUrlError = getPopoutUrlError;
|
|
19319
19809
|
exports.getRegisteredModules = getRegisteredModules;
|
|
19320
19810
|
exports.getRelativeLocation = getRelativeLocation;
|
|
19321
19811
|
exports.indexInParent = indexInParent;
|