dockview-react 1.14.1 → 1.15.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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-react
3
- * @version 1.14.1
3
+ * @version 1.15.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -34,7 +34,7 @@ function styleInject(css, ref) {
34
34
  }
35
35
  }
36
36
 
37
- var css_248z = ".dv-render-overlay {\n position: absolute;\n z-index: 1;\n height: 100%;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: 999;\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dockview-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-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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}\n\n.dockview-theme-vs {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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 .groupview.active-group > .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 .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .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 .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\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: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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 .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.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-replit {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-gap-size: 3px;\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .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.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .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.drop-target > .drop-target-dropzone > .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.drop-target > .drop-target-dropzone > .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.drop-target > .drop-target-dropzone > .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.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-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\n position: absolute;\n cursor: se-resize;\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.dv-dockview .split-view-container.horizontal > .view-container > .view:not(:last-child) .groupview {\n border-right: var(--dv-group-gap-size) solid transparent;\n}\n.dv-dockview .split-view-container.horizontal > .view-container > .view:not(:first-child) .groupview {\n border-left: var(--dv-group-gap-size) solid transparent;\n}\n.dv-dockview .split-view-container.vertical > .view-container > .view:not(:last-child) .groupview {\n border-bottom: var(--dv-group-gap-size) solid transparent;\n}\n.dv-dockview .split-view-container.vertical > .view-container > .view:not(:first-child) .groupview {\n border-top: var(--dv-group-gap-size) solid transparent;\n}\n\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.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.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.dv-root-wrapper {\n height: 100%;\n width: 100%;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .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.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within: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.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within: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-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.dv-splitview-disabled > .sash-container > .sash {\n pointer-events: none;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .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}\n.split-view-container .sash-container .sash:not(.disabled):active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .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-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.tab {\n flex-shrink: 0;\n}\n.tab:focus-within, .tab:focus {\n position: relative;\n}\n.tab:focus-within::after, .tab:focus::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.tab.dv-tab-dragging .dv-default-tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n}\n.tab.inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab .dv-default-tab:hover .dv-default-tab-action {\n visibility: visible;\n}\n.tab .dv-default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .dv-default-tab .dv-default-tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.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}\n.tab .dv-default-tab .dv-default-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.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.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .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 width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
37
+ var css_248z = ".dv-render-overlay {\n position: absolute;\n z-index: 1;\n height: 100%;\n}\n.dv-render-overlay.dv-render-overlay-float {\n z-index: 999;\n}\n\n.dv-debug .dv-render-overlay {\n outline: 1px solid red;\n outline-offset: -1;\n}\n.dockview-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-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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}\n\n.dockview-theme-vs {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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 .groupview.active-group > .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 .groupview.active-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-activegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.active-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-activegroup-hiddenpanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .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 .groupview.inactive-group > .tabs-and-actions-container .tab.active-tab {\n border-top: 2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color);\n}\n.dockview-theme-vs .groupview.inactive-group > .tabs-and-actions-container .tab.inactive-tab {\n border-top: 2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n}\n\n.dockview-theme-abyss {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #000c18;\n --dv-tabs-and-actions-container-background-color: #1c1c2a;\n --dv-activegroup-visiblepanel-tab-background-color: #000c18;\n --dv-activegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-inactivegroup-visiblepanel-tab-background-color: #000c18;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #10192c;\n --dv-tab-divider-color: #2b2b4a;\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: #2b2b4a;\n --dv-paneview-header-border-color: #2b2b4a;\n --dv-paneview-active-outline-color: #596f99;\n}\n\n.dockview-theme-dracula {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\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 .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab::after {\n position: absolute;\n left: 0px;\n top: 0px;\n content: \"\";\n width: 100%;\n height: 1px;\n background-color: #94527e;\n z-index: 999;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n position: relative;\n}\n.dockview-theme-dracula .groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.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-replit {\n --dv-background-color: black;\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: white;\n --dv-tabs-container-scrollbar-color: #888;\n --dv-icon-hover-background-color: rgba(90, 93, 94, 0.31);\n --dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, 0.5);\n --dv-group-view-background-color: #ebeced;\n --dv-tabs-and-actions-container-background-color: #fcfcfc;\n --dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-activegroup-hiddenpanel-tab-background-color: ##fcfcfc;\n --dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;\n --dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;\n --dv-tab-divider-color: transparent;\n --dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);\n --dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);\n --dv-separator-border: transparent;\n --dv-paneview-header-border-color: rgb(51, 51, 51);\n --dv-background-color: #ebeced;\n --dv-separator-handle-background-color: #cfd1d3;\n --dv-separator-handle-hover-background-color: #babbbb;\n}\n.dockview-theme-replit .dv-resize-container:has(> .groupview) {\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview {\n overflow: hidden;\n border-radius: 10px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container {\n border-bottom: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab {\n margin: 4px;\n border-radius: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab .dockview-svg {\n height: 8px;\n width: 8px;\n}\n.dockview-theme-replit .groupview .tabs-and-actions-container .tab:hover {\n background-color: #e4e5e6 !important;\n}\n.dockview-theme-replit .groupview .content-container {\n background-color: #fcfcfc;\n}\n.dockview-theme-replit .groupview.active-group {\n border: 1px solid rgba(128, 128, 128, 0.35);\n}\n.dockview-theme-replit .groupview.inactive-group {\n border: 1px solid transparent;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash::after {\n content: \"\";\n height: 4px;\n width: 40px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .vertical > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash::after {\n content: \"\";\n height: 40px;\n width: 4px;\n border-radius: 2px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--dv-separator-handle-background-color);\n position: absolute;\n}\n.dockview-theme-replit .horizontal > .sash-container > .sash:hover::after {\n background-color: var(--dv-separator-handle-hover-background-color);\n}\n.drop-target {\n position: relative;\n}\n.drop-target > .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.drop-target > .drop-target-dropzone > .drop-target-selection {\n position: relative;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n background-color: var(--dv-drag-over-background-color);\n transition: top 70ms ease-out, left 70ms ease-out, width 70ms ease-out, height 70ms ease-out, opacity 0.15s ease-out;\n will-change: transform;\n pointer-events: none;\n}\n.drop-target > .drop-target-dropzone > .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.drop-target > .drop-target-dropzone > .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.drop-target > .drop-target-dropzone > .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.drop-target > .drop-target-dropzone > .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.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-resize-container {\n position: absolute;\n z-index: 997;\n border: 1px solid var(--dv-tab-divider-color);\n box-shadow: var(--dv-floating-box-shadow);\n}\n.dv-resize-container.dv-bring-to-front {\n z-index: 998;\n}\n.dv-resize-container.dv-resize-container-dragging {\n opacity: 0.5;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\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: 999;\n position: absolute;\n cursor: se-resize;\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.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview.active-group > .tabs-and-actions-container > .tabs-container > .tab.inactive-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.active-tab {\n background-color: var(--dv-inactivegroup-visiblepanel-tab-background-color);\n color: var(--dv-inactivegroup-visiblepanel-tab-color);\n}\n.groupview.inactive-group > .tabs-and-actions-container > .tabs-container > .tab.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.tab.dv-tab-dragging {\n background-color: var(--dv-activegroup-visiblepanel-tab-background-color);\n color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.groupview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--dv-group-view-background-color);\n overflow: hidden;\n}\n.groupview:focus {\n outline: none;\n}\n.groupview.empty > .tabs-and-actions-container {\n display: none;\n}\n.groupview > .content-container {\n flex-grow: 1;\n min-height: 0;\n outline: none;\n}\n.dv-root-wrapper {\n height: 100%;\n width: 100%;\n}\n.grid-view,\n.branch-node {\n height: 100%;\n width: 100%;\n}\n.pane-container {\n height: 100%;\n width: 100%;\n}\n.pane-container.animated .view {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.pane-container .view {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0px !important;\n}\n.pane-container .view:not(:first-child)::before {\n background-color: transparent !important;\n}\n.pane-container .view:not(:first-child) .pane > .pane-header {\n border-top: 1px solid var(--dv-paneview-header-border-color);\n}\n.pane-container .view .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.pane-container .view .default-header .dockview-pane-header-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.pane-container .view .default-header > span {\n padding-left: 8px;\n flex-grow: 1;\n}\n.pane-container:first-of-type > .pane > .pane-header {\n border-top: none !important;\n}\n.pane-container .pane {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n}\n.pane-container .pane .pane-header {\n box-sizing: border-box;\n user-select: none;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-header.pane-draggable {\n cursor: pointer;\n}\n.pane-container .pane .pane-header:focus:before, .pane-container .pane .pane-header:focus-within: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.pane-container .pane .pane-body {\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n position: relative;\n outline: none;\n}\n.pane-container .pane .pane-body:focus:before, .pane-container .pane .pane-body:focus-within: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-debug .split-view-container .sash-container .sash.enabled {\n background-color: black;\n}\n.dv-debug .split-view-container .sash-container .sash.disabled {\n background-color: orange;\n}\n.dv-debug .split-view-container .sash-container .sash.maximum {\n background-color: green;\n}\n.dv-debug .split-view-container .sash-container .sash.minimum {\n background-color: red;\n}\n\n.split-view-container {\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n}\n.split-view-container.dv-splitview-disabled > .sash-container > .sash {\n pointer-events: none;\n}\n.split-view-container.animation .view,\n.split-view-container.animation .sash {\n transition-duration: 0.15s;\n transition-timing-function: ease-out;\n}\n.split-view-container.horizontal {\n height: 100%;\n}\n.split-view-container.horizontal > .sash-container > .sash {\n height: 100%;\n width: 4px;\n}\n.split-view-container.horizontal > .sash-container > .sash.enabled {\n cursor: ew-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.horizontal > .sash-container > .sash.maximum {\n cursor: w-resize;\n}\n.split-view-container.horizontal > .sash-container > .sash.minimum {\n cursor: e-resize;\n}\n.split-view-container.horizontal > .view-container > .view:not(:first-child)::before {\n height: 100%;\n width: 1px;\n}\n.split-view-container.vertical {\n width: 100%;\n}\n.split-view-container.vertical > .sash-container > .sash {\n width: 100%;\n height: 4px;\n}\n.split-view-container.vertical > .sash-container > .sash.enabled {\n cursor: ns-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.disabled {\n cursor: default;\n}\n.split-view-container.vertical > .sash-container > .sash.maximum {\n cursor: n-resize;\n}\n.split-view-container.vertical > .sash-container > .sash.minimum {\n cursor: s-resize;\n}\n.split-view-container.vertical > .view-container > .view {\n width: 100%;\n}\n.split-view-container.vertical > .view-container > .view:not(:first-child)::before {\n height: 1px;\n width: 100%;\n}\n.split-view-container .sash-container {\n height: 100%;\n width: 100%;\n position: absolute;\n}\n.split-view-container .sash-container .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}\n.split-view-container .sash-container .sash:not(.disabled):active {\n transition: background-color 0.1s ease-in-out;\n background-color: var(--dv-active-sash-color, transparent);\n}\n.split-view-container .sash-container .sash:not(.disabled):hover {\n background-color: var(--dv-active-sash-color, transparent);\n transition: background-color 0.1s ease-in-out;\n transition-delay: 0.5s;\n}\n.split-view-container .view-container {\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--dv-background-color);\n}\n.split-view-container .view-container .view {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n position: absolute;\n}\n.split-view-container.separator-border .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-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.tab {\n flex-shrink: 0;\n}\n.tab:focus-within, .tab:focus {\n position: relative;\n}\n.tab:focus-within::after, .tab:focus::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.tab.dv-tab-dragging .dv-default-tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab .dv-default-tab .dv-default-tab-action {\n visibility: visible;\n}\n.tab.inactive-tab .dv-default-tab .dv-default-tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab .dv-default-tab:hover .dv-default-tab-action {\n visibility: visible;\n}\n.tab .dv-default-tab {\n position: relative;\n height: 100%;\n display: flex;\n min-width: 80px;\n align-items: center;\n padding: 0px 8px;\n white-space: nowrap;\n text-overflow: elipsis;\n}\n.tab .dv-default-tab .dv-default-tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.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}\n.tab .dv-default-tab .dv-default-tab-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}\n.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.tabs-and-actions-container.hidden {\n display: none;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .tabs-container .tab {\n flex-grow: 1;\n}\n.tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .void-container {\n flex-grow: 0;\n}\n.tabs-and-actions-container .void-container {\n display: flex;\n flex-grow: 1;\n cursor: grab;\n}\n.tabs-and-actions-container .tabs-container {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n scrollbar-width: thin;\n /* Track */\n /* Handle */\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar {\n height: 3px;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tabs-and-actions-container .tabs-container::-webkit-scrollbar-thumb {\n background: var(--dv-tabs-container-scrollbar-color);\n}\n.tabs-and-actions-container .tabs-container .tab {\n -webkit-user-drag: element;\n outline: none;\n min-width: 75px;\n cursor: pointer;\n position: relative;\n box-sizing: border-box;\n}\n.tabs-and-actions-container .tabs-container .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 width: 1px;\n height: 100%;\n}\n.watermark {\n display: flex;\n width: 100%;\n}\n.watermark.has-actions .watermark-title .actions-container {\n display: none;\n}\n.watermark .watermark-title {\n height: 35px;\n width: 100%;\n display: flex;\n}\n.watermark .watermark-content {\n flex-grow: 1;\n}\n.watermark .actions-container {\n display: flex;\n align-items: center;\n padding: 0px 8px;\n}\n.watermark .actions-container .close-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n cursor: pointer;\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.watermark .actions-container .close-action:hover {\n border-radius: 2px;\n background-color: var(--dv-icon-hover-background-color);\n}";
38
38
  styleInject(css_248z);
39
39
 
40
40
  class TransferObject {
@@ -559,6 +559,9 @@ function isInDocument(element) {
559
559
  }
560
560
  return false;
561
561
  }
562
+ function addTestId(element, id) {
563
+ element.setAttribute('data-testid', id);
564
+ }
562
565
 
563
566
  function tail(arr) {
564
567
  if (arr.length === 0) {
@@ -620,7 +623,11 @@ function remove(array, value) {
620
623
 
621
624
  const clamp = (value, min, max) => {
622
625
  if (min > max) {
623
- throw new Error(`${min} > ${max} is an invalid condition`);
626
+ /**
627
+ * caveat: an error should be thrown here if this was a proper `clamp` function but we need to handle
628
+ * cases where `min` > `max` and in those cases return `min`.
629
+ */
630
+ return min;
624
631
  }
625
632
  return Math.min(max, Math.max(value, min));
626
633
  };
@@ -825,7 +832,14 @@ class Splitview {
825
832
  this._disabled = value;
826
833
  toggleClass(this.element, 'dv-splitview-disabled', value);
827
834
  }
835
+ get margin() {
836
+ return this._margin;
837
+ }
838
+ set margin(value) {
839
+ this._margin = value;
840
+ }
828
841
  constructor(container, options) {
842
+ var _a;
829
843
  this.container = container;
830
844
  this.viewItems = [];
831
845
  this.sashes = [];
@@ -836,6 +850,7 @@ class Splitview {
836
850
  this._startSnappingEnabled = true;
837
851
  this._endSnappingEnabled = true;
838
852
  this._disabled = false;
853
+ this._margin = 0;
839
854
  this._onDidSashEnd = new Emitter();
840
855
  this.onDidSashEnd = this._onDidSashEnd.event;
841
856
  this._onDidAddView = new Emitter();
@@ -924,6 +939,7 @@ class Splitview {
924
939
  };
925
940
  this._orientation = options.orientation;
926
941
  this.element = this.createContainer();
942
+ this.margin = (_a = options.margin) !== null && _a !== void 0 ? _a : 0;
927
943
  this.proportionalLayout =
928
944
  options.proportionalLayout === undefined
929
945
  ? true
@@ -978,9 +994,7 @@ class Splitview {
978
994
  if (index < 0 || index >= this.viewItems.length) {
979
995
  throw new Error('Index out of bounds');
980
996
  }
981
- toggleClass(this.container, 'visible', visible);
982
997
  const viewItem = this.viewItems[index];
983
- toggleClass(this.container, 'visible', visible);
984
998
  viewItem.setVisible(visible, viewItem.size);
985
999
  this.distributeEmptySpace(index);
986
1000
  this.layoutViews();
@@ -1292,15 +1306,29 @@ class Splitview {
1292
1306
  this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1293
1307
  }
1294
1308
  }
1309
+ /**
1310
+ * Margin explain:
1311
+ *
1312
+ * For `n` views in a splitview there will be `n-1` margins `m`.
1313
+ *
1314
+ * To fit the margins each view must reduce in size by `(m * (n - 1)) / n`.
1315
+ *
1316
+ * For each view `i` the offet must be adjusted by `m * i/(n - 1)`.
1317
+ */
1295
1318
  layoutViews() {
1296
1319
  this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1297
- let sum = 0;
1298
- const x = [];
1299
1320
  this.updateSashEnablement();
1321
+ if (this.viewItems.length === 0) {
1322
+ return;
1323
+ }
1324
+ const sashCount = this.viewItems.length - 1;
1325
+ const marginReducedSize = (this.margin * sashCount) / this.viewItems.length;
1326
+ let totalLeftOffset = 0;
1327
+ const viewLeftOffsets = [];
1300
1328
  for (let i = 0; i < this.viewItems.length - 1; i++) {
1301
- sum += this.viewItems[i].size;
1302
- x.push(sum);
1303
- const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
1329
+ totalLeftOffset += this.viewItems[i].size;
1330
+ viewLeftOffsets.push(totalLeftOffset);
1331
+ const offset = Math.min(Math.max(0, totalLeftOffset - 2), this.size - this.margin);
1304
1332
  if (this._orientation === Orientation.HORIZONTAL) {
1305
1333
  this.sashes[i].container.style.left = `${offset}px`;
1306
1334
  this.sashes[i].container.style.top = `0px`;
@@ -1311,19 +1339,24 @@ class Splitview {
1311
1339
  }
1312
1340
  }
1313
1341
  this.viewItems.forEach((view, i) => {
1342
+ const size = view.size - marginReducedSize;
1343
+ const offset = i === 0
1344
+ ? 0
1345
+ : viewLeftOffsets[i - 1] +
1346
+ (i / sashCount) * marginReducedSize;
1314
1347
  if (this._orientation === Orientation.HORIZONTAL) {
1315
- view.container.style.width = `${view.size}px`;
1316
- view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
1348
+ view.container.style.width = `${size}px`;
1349
+ view.container.style.left = `${offset}px`;
1317
1350
  view.container.style.top = '';
1318
1351
  view.container.style.height = '';
1319
1352
  }
1320
1353
  if (this._orientation === Orientation.VERTICAL) {
1321
- view.container.style.height = `${view.size}px`;
1322
- view.container.style.top = i == 0 ? '0px' : `${x[i - 1]}px`;
1354
+ view.container.style.height = `${size}px`;
1355
+ view.container.style.top = `${offset}px`;
1323
1356
  view.container.style.width = '';
1324
1357
  view.container.style.left = '';
1325
1358
  }
1326
- view.view.layout(view.size, this._orthogonalSize);
1359
+ view.view.layout(view.size - marginReducedSize, this._orthogonalSize);
1327
1360
  });
1328
1361
  }
1329
1362
  findFirstSnapIndex(indexes) {
@@ -1772,7 +1805,18 @@ class BranchNode extends CompositeDisposable {
1772
1805
  set disabled(value) {
1773
1806
  this.splitview.disabled = value;
1774
1807
  }
1775
- constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, childDescriptors) {
1808
+ get margin() {
1809
+ return this.splitview.margin;
1810
+ }
1811
+ set margin(value) {
1812
+ this.splitview.margin = value;
1813
+ this.children.forEach((child) => {
1814
+ if (child instanceof BranchNode) {
1815
+ child.margin = value;
1816
+ }
1817
+ });
1818
+ }
1819
+ constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, margin, childDescriptors) {
1776
1820
  super();
1777
1821
  this.orientation = orientation;
1778
1822
  this.proportionalLayout = proportionalLayout;
@@ -1792,6 +1836,7 @@ class BranchNode extends CompositeDisposable {
1792
1836
  orientation: this.orientation,
1793
1837
  proportionalLayout,
1794
1838
  styles,
1839
+ margin,
1795
1840
  });
1796
1841
  this.splitview.layout(this.size, this.orthogonalSize);
1797
1842
  }
@@ -1815,6 +1860,7 @@ class BranchNode extends CompositeDisposable {
1815
1860
  descriptor,
1816
1861
  proportionalLayout,
1817
1862
  styles,
1863
+ margin,
1818
1864
  });
1819
1865
  }
1820
1866
  this.disabled = disabled;
@@ -1823,10 +1869,8 @@ class BranchNode extends CompositeDisposable {
1823
1869
  }));
1824
1870
  this.setupChildrenEvents();
1825
1871
  }
1826
- setVisible(visible) {
1827
- for (const child of this.children) {
1828
- child.setVisible(visible);
1829
- }
1872
+ setVisible(_visible) {
1873
+ // noop
1830
1874
  }
1831
1875
  isChildVisible(index) {
1832
1876
  if (index < 0 || index >= this.children.length) {
@@ -1843,12 +1887,13 @@ class BranchNode extends CompositeDisposable {
1843
1887
  }
1844
1888
  const wereAllChildrenHidden = this.splitview.contentSize === 0;
1845
1889
  this.splitview.setViewVisible(index, visible);
1890
+ // }
1846
1891
  const areAllChildrenHidden = this.splitview.contentSize === 0;
1847
1892
  // If all children are hidden then the parent should hide the entire splitview
1848
1893
  // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1849
1894
  if ((visible && wereAllChildrenHidden) ||
1850
1895
  (!visible && areAllChildrenHidden)) {
1851
- this._onDidVisibilityChange.fire(visible);
1896
+ this._onDidVisibilityChange.fire({ visible });
1852
1897
  }
1853
1898
  }
1854
1899
  moveChild(from, to) {
@@ -1921,7 +1966,7 @@ class BranchNode extends CompositeDisposable {
1921
1966
  this._onDidChange.fire({ size: e.orthogonalSize });
1922
1967
  }), ...this.children.map((c, i) => {
1923
1968
  if (c instanceof BranchNode) {
1924
- return c.onDidVisibilityChange((visible) => {
1969
+ return c.onDidVisibilityChange(({ visible }) => {
1925
1970
  this.setChildVisible(i, visible);
1926
1971
  });
1927
1972
  }
@@ -1951,7 +1996,7 @@ function findLeaf(candiateNode, last) {
1951
1996
  }
1952
1997
  function flipNode(node, size, orthogonalSize) {
1953
1998
  if (node instanceof BranchNode) {
1954
- const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize, node.disabled);
1999
+ const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize, node.disabled, node.margin);
1955
2000
  let totalSize = 0;
1956
2001
  for (let i = node.children.length - 1; i >= 0; i--) {
1957
2002
  const child = node.children[i];
@@ -2106,6 +2151,13 @@ class Gridview {
2106
2151
  }
2107
2152
  }
2108
2153
  }
2154
+ get margin() {
2155
+ return this._margin;
2156
+ }
2157
+ set margin(value) {
2158
+ this._margin = value;
2159
+ this.root.margin = value;
2160
+ }
2109
2161
  maximizedView() {
2110
2162
  var _a;
2111
2163
  return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.leaf.view;
@@ -2191,13 +2243,14 @@ class Gridview {
2191
2243
  this.disposable.dispose();
2192
2244
  this._onDidChange.dispose();
2193
2245
  this._onDidMaximizedNodeChange.dispose();
2246
+ this._onDidViewVisibilityChange.dispose();
2194
2247
  this.root.dispose();
2195
2248
  this._maximizedNode = undefined;
2196
2249
  this.element.remove();
2197
2250
  }
2198
2251
  clear() {
2199
2252
  const orientation = this.root.orientation;
2200
- this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize, this._locked);
2253
+ this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize, this.locked, this.margin);
2201
2254
  }
2202
2255
  deserialize(json, deserializer) {
2203
2256
  const orientation = json.orientation;
@@ -2208,6 +2261,7 @@ class Gridview {
2208
2261
  this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
2209
2262
  }
2210
2263
  _deserializeNode(node, orientation, deserializer, orthogonalSize) {
2264
+ var _a;
2211
2265
  let result;
2212
2266
  if (node.type === 'branch') {
2213
2267
  const serializedChildren = node.data;
@@ -2219,10 +2273,14 @@ class Gridview {
2219
2273
  });
2220
2274
  result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
2221
2275
  orthogonalSize, // <- size - flips at each depth,
2222
- this._locked, children);
2276
+ this.locked, this.margin, children);
2223
2277
  }
2224
2278
  else {
2225
- result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
2279
+ const view = deserializer.fromJSON(node);
2280
+ if (typeof node.visible === 'boolean') {
2281
+ (_a = view.setVisible) === null || _a === void 0 ? void 0 : _a.call(view, node.visible);
2282
+ }
2283
+ result = new LeafNode(view, orientation, orthogonalSize, node.size);
2226
2284
  }
2227
2285
  return result;
2228
2286
  }
@@ -2252,7 +2310,7 @@ class Gridview {
2252
2310
  }
2253
2311
  const oldRoot = this.root;
2254
2312
  oldRoot.element.remove();
2255
- this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size, this._locked);
2313
+ this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size, this.locked, this.margin);
2256
2314
  if (oldRoot.children.length === 0) ;
2257
2315
  else if (oldRoot.children.length === 1) {
2258
2316
  // can remove one level of redundant branching if there is only a single child
@@ -2317,19 +2375,24 @@ class Gridview {
2317
2375
  }
2318
2376
  return findLeaf(this.root, reverse);
2319
2377
  }
2320
- constructor(proportionalLayout, styles, orientation) {
2378
+ constructor(proportionalLayout, styles, orientation, locked, margin) {
2321
2379
  this.proportionalLayout = proportionalLayout;
2322
2380
  this.styles = styles;
2323
2381
  this._locked = false;
2382
+ this._margin = 0;
2324
2383
  this._maximizedNode = undefined;
2325
2384
  this.disposable = new MutableDisposable();
2326
2385
  this._onDidChange = new Emitter();
2327
2386
  this.onDidChange = this._onDidChange.event;
2387
+ this._onDidViewVisibilityChange = new Emitter();
2388
+ this.onDidViewVisibilityChange = this._onDidViewVisibilityChange.event;
2328
2389
  this._onDidMaximizedNodeChange = new Emitter();
2329
2390
  this.onDidMaximizedNodeChange = this._onDidMaximizedNodeChange.event;
2330
2391
  this.element = document.createElement('div');
2331
2392
  this.element.className = 'grid-view';
2332
- this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0, this._locked);
2393
+ this._locked = locked !== null && locked !== void 0 ? locked : false;
2394
+ this._margin = margin !== null && margin !== void 0 ? margin : 0;
2395
+ this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0, this.locked, this.margin);
2333
2396
  }
2334
2397
  isViewVisible(location) {
2335
2398
  const [rest, index] = tail(location);
@@ -2348,6 +2411,7 @@ class Gridview {
2348
2411
  if (!(parent instanceof BranchNode)) {
2349
2412
  throw new Error('Invalid from location');
2350
2413
  }
2414
+ this._onDidViewVisibilityChange.fire();
2351
2415
  parent.setChildVisible(index, visible);
2352
2416
  }
2353
2417
  moveView(parentLocation, from, to) {
@@ -2380,7 +2444,7 @@ class Gridview {
2380
2444
  }
2381
2445
  const child = grandParent.removeChild(parentIndex);
2382
2446
  child.dispose();
2383
- const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize, this._locked);
2447
+ const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize, this.locked, this.margin);
2384
2448
  grandParent.addChild(newParent, parent.size, parentIndex);
2385
2449
  const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
2386
2450
  newParent.addChild(newSibling, newSiblingSize, 0);
@@ -2619,14 +2683,18 @@ class BaseGrid extends Resizable {
2619
2683
  this.onDidActiveChange = this._onDidActiveChange.event;
2620
2684
  this._bufferOnDidLayoutChange = new AsapEvent();
2621
2685
  this.onDidLayoutChange = this._bufferOnDidLayoutChange.onEvent;
2686
+ this._onDidViewVisibilityChangeMicroTaskQueue = new AsapEvent();
2687
+ this.onDidViewVisibilityChangeMicroTaskQueue = this._onDidViewVisibilityChangeMicroTaskQueue.onEvent;
2622
2688
  this.element.style.height = '100%';
2623
2689
  this.element.style.width = '100%';
2624
2690
  options.parentElement.appendChild(this.element);
2625
- this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
2691
+ this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation, options.locked, options.margin);
2626
2692
  this.gridview.locked = !!options.locked;
2627
2693
  this.element.appendChild(this.gridview.element);
2628
2694
  this.layout(0, 0, true); // set some elements height/widths
2629
- this.addDisposables(Disposable.from(() => {
2695
+ this.addDisposables(this.gridview.onDidViewVisibilityChange(() => this._onDidViewVisibilityChangeMicroTaskQueue.fire()), this.onDidViewVisibilityChangeMicroTaskQueue(() => {
2696
+ this.layout(this.width, this.height, true);
2697
+ }), Disposable.from(() => {
2630
2698
  var _a;
2631
2699
  (_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
2632
2700
  }), this.gridview.onDidChange(() => {
@@ -3240,6 +3308,9 @@ class DockviewApi {
3240
3308
  get onDidRemovePanel() {
3241
3309
  return this.component.onDidRemovePanel;
3242
3310
  }
3311
+ get onDidMovePanel() {
3312
+ return this.component.onDidMovePanel;
3313
+ }
3243
3314
  /**
3244
3315
  * Invoked after a layout is deserialzied using the `fromJSON` method.
3245
3316
  */
@@ -3380,8 +3451,8 @@ class DockviewApi {
3380
3451
  /**
3381
3452
  * Add a floating group
3382
3453
  */
3383
- addFloatingGroup(item, coord) {
3384
- return this.component.addFloatingGroup(item, coord);
3454
+ addFloatingGroup(item, options) {
3455
+ return this.component.addFloatingGroup(item, options);
3385
3456
  }
3386
3457
  /**
3387
3458
  * Create a component from a serialized object.
@@ -3431,6 +3502,9 @@ class DockviewApi {
3431
3502
  addPopoutGroup(item, options) {
3432
3503
  return this.component.addPopoutGroup(item, options);
3433
3504
  }
3505
+ setGap(gap) {
3506
+ this.component.updateOptions({ gap });
3507
+ }
3434
3508
  }
3435
3509
 
3436
3510
  class DragHandler extends CompositeDisposable {
@@ -4800,7 +4874,8 @@ class TabsContainer extends CompositeDisposable {
4800
4874
  this.accessor.addFloatingGroup(this.group, {
4801
4875
  x: left - rootLeft + 20,
4802
4876
  y: top - rootTop + 20,
4803
- }, { inDragMode: true });
4877
+ inDragMode: true,
4878
+ });
4804
4879
  }
4805
4880
  }), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
4806
4881
  if (event.defaultPrevented) {
@@ -4869,7 +4944,8 @@ class TabsContainer extends CompositeDisposable {
4869
4944
  this.accessor.addFloatingGroup(panel, {
4870
4945
  x: left - rootLeft,
4871
4946
  y: top - rootTop,
4872
- }, { inDragMode: true });
4947
+ inDragMode: true,
4948
+ });
4873
4949
  return;
4874
4950
  }
4875
4951
  const isLeftClick = event.button === 0;
@@ -4942,6 +5018,7 @@ const PROPERTY_KEYS = (() => {
4942
5018
  rootOverlayModel: undefined,
4943
5019
  locked: undefined,
4944
5020
  disableDnd: undefined,
5021
+ gap: undefined,
4945
5022
  };
4946
5023
  return Object.keys(properties);
4947
5024
  })();
@@ -5672,6 +5749,9 @@ class GridviewPanel extends BasePanelView {
5672
5749
  get isActive() {
5673
5750
  return this.api.isActive;
5674
5751
  }
5752
+ get isVisible() {
5753
+ return this.api.isVisible;
5754
+ }
5675
5755
  constructor(id, component, options, api) {
5676
5756
  super(id, component, api !== null && api !== void 0 ? api : new GridviewPanelApiImpl(id, component));
5677
5757
  this._evaluatedMinimumWidth = 0;
@@ -6208,52 +6288,40 @@ class DefaultTab extends CompositeDisposable {
6208
6288
  }
6209
6289
  constructor() {
6210
6290
  super();
6211
- //
6212
- this.params = {};
6213
6291
  this._element = document.createElement('div');
6214
6292
  this._element.className = 'dv-default-tab';
6215
- //
6216
6293
  this._content = document.createElement('div');
6217
6294
  this._content.className = 'dv-default-tab-content';
6218
6295
  this.action = document.createElement('div');
6219
6296
  this.action.className = 'dv-default-tab-action';
6220
6297
  this.action.appendChild(createCloseButton());
6221
- //
6222
6298
  this._element.appendChild(this._content);
6223
6299
  this._element.appendChild(this.action);
6224
- //
6225
6300
  this.addDisposables(addDisposableListener(this.action, 'mousedown', (ev) => {
6226
6301
  ev.preventDefault();
6227
6302
  }));
6228
6303
  this.render();
6229
6304
  }
6230
- update(event) {
6231
- this.params = Object.assign(Object.assign({}, this.params), event.params);
6232
- this.render();
6233
- }
6234
- focus() {
6235
- //noop
6236
- }
6237
6305
  init(params) {
6238
- this.params = params;
6239
- this._content.textContent = params.title;
6240
- addDisposableListener(this.action, 'click', (ev) => {
6241
- ev.preventDefault(); //
6242
- this.params.api.close();
6243
- });
6244
- }
6245
- onGroupChange(_group) {
6246
- this.render();
6247
- }
6248
- onPanelVisibleChange(_isPanelVisible) {
6306
+ this._title = params.title;
6307
+ this.addDisposables(params.api.onDidTitleChange((event) => {
6308
+ this._title = event.title;
6309
+ this.render();
6310
+ }), addDisposableListener(this.action, 'mousedown', (ev) => {
6311
+ ev.preventDefault();
6312
+ }), addDisposableListener(this.action, 'click', (ev) => {
6313
+ if (ev.defaultPrevented) {
6314
+ return;
6315
+ }
6316
+ ev.preventDefault();
6317
+ params.api.close();
6318
+ }));
6249
6319
  this.render();
6250
6320
  }
6251
- layout(_width, _height) {
6252
- // noop
6253
- }
6254
6321
  render() {
6255
- if (this._content.textContent !== this.params.title) {
6256
- this._content.textContent = this.params.title;
6322
+ var _a;
6323
+ if (this._content.textContent !== this._title) {
6324
+ this._content.textContent = (_a = this._title) !== null && _a !== void 0 ? _a : '';
6257
6325
  }
6258
6326
  }
6259
6327
  }
@@ -6446,12 +6514,7 @@ class Overlay extends CompositeDisposable {
6446
6514
  this._element.appendChild(this.options.content);
6447
6515
  this.options.container.appendChild(this._element);
6448
6516
  // if input bad resize within acceptable boundaries
6449
- this.setBounds({
6450
- height: this.options.height,
6451
- width: this.options.width,
6452
- top: this.options.top,
6453
- left: this.options.left,
6454
- });
6517
+ this.setBounds(Object.assign(Object.assign(Object.assign(Object.assign({ height: this.options.height, width: this.options.width }, ('top' in this.options && { top: this.options.top })), ('bottom' in this.options && { bottom: this.options.bottom })), ('left' in this.options && { left: this.options.left })), ('right' in this.options && { right: this.options.right })));
6455
6518
  }
6456
6519
  setBounds(bounds = {}) {
6457
6520
  if (typeof bounds.height === 'number') {
@@ -6460,11 +6523,25 @@ class Overlay extends CompositeDisposable {
6460
6523
  if (typeof bounds.width === 'number') {
6461
6524
  this._element.style.width = `${bounds.width}px`;
6462
6525
  }
6463
- if (typeof bounds.top === 'number') {
6526
+ if ('top' in bounds && typeof bounds.top === 'number') {
6464
6527
  this._element.style.top = `${bounds.top}px`;
6528
+ this._element.style.bottom = 'auto';
6529
+ this.verticalAlignment = 'top';
6530
+ }
6531
+ if ('bottom' in bounds && typeof bounds.bottom === 'number') {
6532
+ this._element.style.bottom = `${bounds.bottom}px`;
6533
+ this._element.style.top = 'auto';
6534
+ this.verticalAlignment = 'bottom';
6465
6535
  }
6466
- if (typeof bounds.left === 'number') {
6536
+ if ('left' in bounds && typeof bounds.left === 'number') {
6467
6537
  this._element.style.left = `${bounds.left}px`;
6538
+ this._element.style.right = 'auto';
6539
+ this.horiziontalAlignment = 'left';
6540
+ }
6541
+ if ('right' in bounds && typeof bounds.right === 'number') {
6542
+ this._element.style.right = `${bounds.right}px`;
6543
+ this._element.style.left = 'auto';
6544
+ this.horiziontalAlignment = 'right';
6468
6545
  }
6469
6546
  const containerRect = this.options.container.getBoundingClientRect();
6470
6547
  const overlayRect = this._element.getBoundingClientRect();
@@ -6472,24 +6549,54 @@ class Overlay extends CompositeDisposable {
6472
6549
  // a minimum width of minimumViewportWidth must be inside the viewport
6473
6550
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
6474
6551
  // a minimum height of minimumViewportHeight must be inside the viewport
6475
- const yOffset = typeof this.options.minimumInViewportHeight === 'number'
6476
- ? Math.max(0, this.getMinimumHeight(overlayRect.height))
6477
- : 0;
6478
- const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6479
- const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6480
- this._element.style.left = `${left}px`;
6481
- this._element.style.top = `${top}px`;
6552
+ const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
6553
+ if (this.verticalAlignment === 'top') {
6554
+ const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6555
+ this._element.style.top = `${top}px`;
6556
+ this._element.style.bottom = 'auto';
6557
+ }
6558
+ if (this.verticalAlignment === 'bottom') {
6559
+ const bottom = clamp(containerRect.bottom - overlayRect.bottom, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6560
+ this._element.style.bottom = `${bottom}px`;
6561
+ this._element.style.top = 'auto';
6562
+ }
6563
+ if (this.horiziontalAlignment === 'left') {
6564
+ const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6565
+ this._element.style.left = `${left}px`;
6566
+ this._element.style.right = 'auto';
6567
+ }
6568
+ if (this.horiziontalAlignment === 'right') {
6569
+ const right = clamp(containerRect.right - overlayRect.right, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6570
+ this._element.style.right = `${right}px`;
6571
+ this._element.style.left = 'auto';
6572
+ }
6482
6573
  this._onDidChange.fire();
6483
6574
  }
6484
6575
  toJSON() {
6485
6576
  const container = this.options.container.getBoundingClientRect();
6486
6577
  const element = this._element.getBoundingClientRect();
6487
- return {
6488
- top: element.top - container.top,
6489
- left: element.left - container.left,
6490
- width: element.width,
6491
- height: element.height,
6492
- };
6578
+ const result = {};
6579
+ if (this.verticalAlignment === 'top') {
6580
+ result.top = parseFloat(this._element.style.top);
6581
+ }
6582
+ else if (this.verticalAlignment === 'bottom') {
6583
+ result.bottom = parseFloat(this._element.style.bottom);
6584
+ }
6585
+ else {
6586
+ result.top = element.top - container.top;
6587
+ }
6588
+ if (this.horiziontalAlignment === 'left') {
6589
+ result.left = parseFloat(this._element.style.left);
6590
+ }
6591
+ else if (this.horiziontalAlignment === 'right') {
6592
+ result.right = parseFloat(this._element.style.right);
6593
+ }
6594
+ else {
6595
+ result.left = element.left - container.left;
6596
+ }
6597
+ result.width = element.width;
6598
+ result.height = element.height;
6599
+ return result;
6493
6600
  }
6494
6601
  setupDrag(dragTarget, options = { inDragMode: false }) {
6495
6602
  const move = new MutableDisposable();
@@ -6521,12 +6628,30 @@ class Overlay extends CompositeDisposable {
6521
6628
  };
6522
6629
  }
6523
6630
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
6524
- const yOffset = Math.max(0, this.options.minimumInViewportHeight
6525
- ? this.getMinimumHeight(overlayRect.height)
6526
- : 0);
6527
- const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6631
+ const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
6528
6632
  const top = clamp(y - offset.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6529
- this.setBounds({ top, left });
6633
+ const bottom = clamp(offset.y -
6634
+ y +
6635
+ containerRect.height -
6636
+ overlayRect.height, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6637
+ const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6638
+ const right = clamp(offset.x - x + containerRect.width - overlayRect.width, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6639
+ const bounds = {};
6640
+ // Anchor to top or to bottom depending on which one is closer
6641
+ if (top <= bottom) {
6642
+ bounds.top = top;
6643
+ }
6644
+ else {
6645
+ bounds.bottom = bottom;
6646
+ }
6647
+ // Anchor to left or to right depending on which one is closer
6648
+ if (left <= right) {
6649
+ bounds.left = left;
6650
+ }
6651
+ else {
6652
+ bounds.right = right;
6653
+ }
6654
+ this.setBounds(bounds);
6530
6655
  }), addDisposableWindowListener(window, 'mouseup', () => {
6531
6656
  toggleClass(this._element, 'dv-resize-container-dragging', false);
6532
6657
  move.dispose();
@@ -6594,8 +6719,10 @@ class Overlay extends CompositeDisposable {
6594
6719
  };
6595
6720
  }
6596
6721
  let top = undefined;
6722
+ let bottom = undefined;
6597
6723
  let height = undefined;
6598
6724
  let left = undefined;
6725
+ let right = undefined;
6599
6726
  let width = undefined;
6600
6727
  const moveTop = () => {
6601
6728
  top = clamp(y, -Number.MAX_VALUE, startPosition.originalY +
@@ -6609,6 +6736,7 @@ class Overlay extends CompositeDisposable {
6609
6736
  startPosition.originalY +
6610
6737
  startPosition.originalHeight -
6611
6738
  top;
6739
+ bottom = containerRect.height - top - height;
6612
6740
  };
6613
6741
  const moveBottom = () => {
6614
6742
  top =
@@ -6620,6 +6748,7 @@ class Overlay extends CompositeDisposable {
6620
6748
  ? -top +
6621
6749
  this.options.minimumInViewportHeight
6622
6750
  : Overlay.MINIMUM_HEIGHT, Number.MAX_VALUE);
6751
+ bottom = containerRect.height - top - height;
6623
6752
  };
6624
6753
  const moveLeft = () => {
6625
6754
  left = clamp(x, -Number.MAX_VALUE, startPosition.originalX +
@@ -6633,6 +6762,7 @@ class Overlay extends CompositeDisposable {
6633
6762
  startPosition.originalX +
6634
6763
  startPosition.originalWidth -
6635
6764
  left;
6765
+ right = containerRect.width - left - width;
6636
6766
  };
6637
6767
  const moveRight = () => {
6638
6768
  left =
@@ -6644,6 +6774,7 @@ class Overlay extends CompositeDisposable {
6644
6774
  ? -left +
6645
6775
  this.options.minimumInViewportWidth
6646
6776
  : Overlay.MINIMUM_WIDTH, Number.MAX_VALUE);
6777
+ right = containerRect.width - left - width;
6647
6778
  };
6648
6779
  switch (direction) {
6649
6780
  case 'top':
@@ -6675,7 +6806,24 @@ class Overlay extends CompositeDisposable {
6675
6806
  moveRight();
6676
6807
  break;
6677
6808
  }
6678
- this.setBounds({ height, width, top, left });
6809
+ const bounds = {};
6810
+ // Anchor to top or to bottom depending on which one is closer
6811
+ if (top <= bottom) {
6812
+ bounds.top = top;
6813
+ }
6814
+ else {
6815
+ bounds.bottom = bottom;
6816
+ }
6817
+ // Anchor to left or to right depending on which one is closer
6818
+ if (left <= right) {
6819
+ bounds.left = left;
6820
+ }
6821
+ else {
6822
+ bounds.right = right;
6823
+ }
6824
+ bounds.height = height;
6825
+ bounds.width = width;
6826
+ this.setBounds(bounds);
6679
6827
  }), {
6680
6828
  dispose: () => {
6681
6829
  for (const iframe of iframes) {
@@ -6698,7 +6846,7 @@ class Overlay extends CompositeDisposable {
6698
6846
  if (typeof this.options.minimumInViewportHeight === 'number') {
6699
6847
  return height - this.options.minimumInViewportHeight;
6700
6848
  }
6701
- return height;
6849
+ return 0;
6702
6850
  }
6703
6851
  dispose() {
6704
6852
  this._element.remove();
@@ -6721,7 +6869,7 @@ class DockviewFloatingGroupPanel extends CompositeDisposable {
6721
6869
  }
6722
6870
 
6723
6871
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6724
- const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6872
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100, width: 300, height: 300 };
6725
6873
 
6726
6874
  function createFocusableElement() {
6727
6875
  const element = document.createElement('div');
@@ -7064,6 +7212,7 @@ class DockviewComponent extends BaseGrid {
7064
7212
  parentElement: options.parentElement,
7065
7213
  disableAutoResizing: options.disableAutoResizing,
7066
7214
  locked: options.locked,
7215
+ margin: options.gap,
7067
7216
  });
7068
7217
  this.nextGroupId = sequentialNumberGenerator();
7069
7218
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -7089,9 +7238,9 @@ class DockviewComponent extends BaseGrid {
7089
7238
  this._onDidActivePanelChange = new Emitter();
7090
7239
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
7091
7240
  this._onDidMovePanel = new Emitter();
7241
+ this.onDidMovePanel = this._onDidMovePanel.event;
7092
7242
  this._floatingGroups = [];
7093
7243
  this._popoutGroups = [];
7094
- this._ignoreEvents = 0;
7095
7244
  this._onDidRemoveGroup = new Emitter();
7096
7245
  this.onDidRemoveGroup = this._onDidRemoveGroup.event;
7097
7246
  this._onDidAddGroup = new Emitter();
@@ -7105,7 +7254,9 @@ class DockviewComponent extends BaseGrid {
7105
7254
  this.overlayRenderContainer = new OverlayRenderContainer(gready);
7106
7255
  toggleClass(this.gridview.element, 'dv-dockview', true);
7107
7256
  toggleClass(this.element, 'dv-debug', !!options.debug);
7108
- this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this.onDidAdd((event) => {
7257
+ this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
7258
+ this.updateWatermark();
7259
+ }), this.onDidAdd((event) => {
7109
7260
  if (!this._moving) {
7110
7261
  this._onDidAddGroup.fire(event);
7111
7262
  }
@@ -7119,7 +7270,7 @@ class DockviewComponent extends BaseGrid {
7119
7270
  }
7120
7271
  }), Event.any(this.onDidAdd, this.onDidRemove)(() => {
7121
7272
  this.updateWatermark();
7122
- }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
7273
+ }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange)(() => {
7123
7274
  this._bufferOnDidLayoutChange.fire();
7124
7275
  }), Disposable.from(() => {
7125
7276
  // iterate over a copy of the array since .dispose() mutates the original array
@@ -7370,8 +7521,8 @@ class DockviewComponent extends BaseGrid {
7370
7521
  console.error('dockview: failed to create popout window', err);
7371
7522
  });
7372
7523
  }
7373
- addFloatingGroup(item, coord, options) {
7374
- var _a, _b, _c, _d, _e, _f, _g;
7524
+ addFloatingGroup(item, options) {
7525
+ var _a, _b, _c, _d, _e;
7375
7526
  let group;
7376
7527
  if (item instanceof DockviewPanel) {
7377
7528
  group = this.createGroup();
@@ -7416,26 +7567,62 @@ class DockviewComponent extends BaseGrid {
7416
7567
  }
7417
7568
  }
7418
7569
  group.model.location = { type: 'floating' };
7419
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
7420
- ? Math.max(coord.x, 0)
7421
- : DEFAULT_FLOATING_GROUP_POSITION.left;
7422
- const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
7423
- ? Math.max(coord.y, 0)
7424
- : DEFAULT_FLOATING_GROUP_POSITION.top;
7425
- const overlay = new Overlay({
7426
- container: this.gridview.element,
7427
- content: group.element,
7428
- height: (_b = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _b !== void 0 ? _b : 300,
7429
- width: (_c = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _c !== void 0 ? _c : 300,
7430
- left: overlayLeft,
7431
- top: overlayTop,
7432
- minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
7570
+ function getAnchoredBox() {
7571
+ if (options === null || options === void 0 ? void 0 : options.position) {
7572
+ const result = {};
7573
+ if ('left' in options.position) {
7574
+ result.left = Math.max(options.position.left, 0);
7575
+ }
7576
+ else if ('right' in options.position) {
7577
+ result.right = Math.max(options.position.right, 0);
7578
+ }
7579
+ else {
7580
+ result.left = DEFAULT_FLOATING_GROUP_POSITION.left;
7581
+ }
7582
+ if ('top' in options.position) {
7583
+ result.top = Math.max(options.position.top, 0);
7584
+ }
7585
+ else if ('bottom' in options.position) {
7586
+ result.bottom = Math.max(options.position.bottom, 0);
7587
+ }
7588
+ else {
7589
+ result.top = DEFAULT_FLOATING_GROUP_POSITION.top;
7590
+ }
7591
+ if ('width' in options.position) {
7592
+ result.width = Math.max(options.position.width, 0);
7593
+ }
7594
+ else {
7595
+ result.width = DEFAULT_FLOATING_GROUP_POSITION.width;
7596
+ }
7597
+ if ('height' in options.position) {
7598
+ result.height = Math.max(options.position.height, 0);
7599
+ }
7600
+ else {
7601
+ result.height = DEFAULT_FLOATING_GROUP_POSITION.height;
7602
+ }
7603
+ return result;
7604
+ }
7605
+ return {
7606
+ left: typeof (options === null || options === void 0 ? void 0 : options.x) === 'number'
7607
+ ? Math.max(options.x, 0)
7608
+ : DEFAULT_FLOATING_GROUP_POSITION.left,
7609
+ top: typeof (options === null || options === void 0 ? void 0 : options.y) === 'number'
7610
+ ? Math.max(options.y, 0)
7611
+ : DEFAULT_FLOATING_GROUP_POSITION.top,
7612
+ width: typeof (options === null || options === void 0 ? void 0 : options.width) === 'number'
7613
+ ? Math.max(options.width, 0)
7614
+ : DEFAULT_FLOATING_GROUP_POSITION.width,
7615
+ height: typeof (options === null || options === void 0 ? void 0 : options.height) === 'number'
7616
+ ? Math.max(options.height, 0)
7617
+ : DEFAULT_FLOATING_GROUP_POSITION.height,
7618
+ };
7619
+ }
7620
+ const anchoredBox = getAnchoredBox();
7621
+ const overlay = new Overlay(Object.assign(Object.assign({ container: this.gridview.element, content: group.element }, anchoredBox), { minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
7433
7622
  ? undefined
7434
- : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumWidthWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7435
- minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
7623
+ : (_c = (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport) !== null && _c !== void 0 ? _c : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
7436
7624
  ? undefined
7437
- : (_g = (_f = this.options.floatingGroupBounds) === null || _f === void 0 ? void 0 : _f.minimumHeightWithinViewport) !== null && _g !== void 0 ? _g : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7438
- });
7625
+ : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
7439
7626
  const el = group.element.querySelector('.void-container');
7440
7627
  if (!el) {
7441
7628
  throw new Error('failed to find drag handle');
@@ -7533,12 +7720,18 @@ class DockviewComponent extends BaseGrid {
7533
7720
  group.overlay.minimumInViewportWidth =
7534
7721
  (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport;
7535
7722
  }
7536
- group.overlay.setBounds({});
7723
+ group.overlay.setBounds();
7537
7724
  }
7538
7725
  }
7539
7726
  if (changed_rootOverlayOptions) {
7540
7727
  this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
7541
7728
  }
7729
+ if (this.gridview.margin !== 0 && options.gap === undefined) {
7730
+ this.gridview.margin = 0;
7731
+ }
7732
+ if (typeof options.gap === 'number') {
7733
+ this.gridview.margin = options.gap;
7734
+ }
7542
7735
  this.layout(this.gridview.width, this.gridview.height, true);
7543
7736
  }
7544
7737
  layout(width, height, forceResize) {
@@ -7700,11 +7893,10 @@ class DockviewComponent extends BaseGrid {
7700
7893
  const { data, position } = serializedFloatingGroup;
7701
7894
  const group = createGroupFromSerializedState(data);
7702
7895
  this.addFloatingGroup(group, {
7703
- x: position.left,
7704
- y: position.top,
7705
- height: position.height,
7706
- width: position.width,
7707
- }, { skipRemoveGroup: true, inDragMode: false });
7896
+ position: position,
7897
+ skipRemoveGroup: true,
7898
+ inDragMode: false,
7899
+ });
7708
7900
  }
7709
7901
  const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7710
7902
  for (const serializedPopoutGroup of serializedPopoutGroups) {
@@ -7839,11 +8031,7 @@ class DockviewComponent extends BaseGrid {
7839
8031
  options.floating !== null
7840
8032
  ? options.floating
7841
8033
  : {};
7842
- this.addFloatingGroup(group, o, {
7843
- inDragMode: false,
7844
- skipRemoveGroup: true,
7845
- skipActiveGroup: true,
7846
- });
8034
+ this.addFloatingGroup(group, Object.assign(Object.assign({}, o), { inDragMode: false, skipRemoveGroup: true, skipActiveGroup: true }));
7847
8035
  panel = this.createPanel(options, group);
7848
8036
  group.model.openPanel(panel, {
7849
8037
  skipSetActive: options.inactive,
@@ -7882,11 +8070,7 @@ class DockviewComponent extends BaseGrid {
7882
8070
  options.floating !== null
7883
8071
  ? options.floating
7884
8072
  : {};
7885
- this.addFloatingGroup(group, coordinates, {
7886
- inDragMode: false,
7887
- skipRemoveGroup: true,
7888
- skipActiveGroup: true,
7889
- });
8073
+ this.addFloatingGroup(group, Object.assign(Object.assign({}, coordinates), { inDragMode: false, skipRemoveGroup: true, skipActiveGroup: true }));
7890
8074
  panel = this.createPanel(options, group);
7891
8075
  group.model.openPanel(panel, {
7892
8076
  skipSetActive: options.inactive,
@@ -7941,6 +8125,7 @@ class DockviewComponent extends BaseGrid {
7941
8125
  });
7942
8126
  const watermarkContainer = document.createElement('div');
7943
8127
  watermarkContainer.className = 'dv-watermark-container';
8128
+ addTestId(watermarkContainer, 'watermark-component');
7944
8129
  watermarkContainer.appendChild(this.watermark.element);
7945
8130
  this.gridview.element.appendChild(watermarkContainer);
7946
8131
  }
@@ -8129,6 +8314,7 @@ class DockviewComponent extends BaseGrid {
8129
8314
  this.doSetGroupAndPanelActive(destinationGroup);
8130
8315
  this._onDidMovePanel.fire({
8131
8316
  panel: removedPanel,
8317
+ from: sourceGroup,
8132
8318
  });
8133
8319
  }
8134
8320
  else {
@@ -8152,6 +8338,10 @@ class DockviewComponent extends BaseGrid {
8152
8338
  // if a group has one tab - we are essentially moving the 'group'
8153
8339
  // which is equivalent to swapping two views in this case
8154
8340
  this.gridview.moveView(sourceParentLocation, from, to);
8341
+ this._onDidMovePanel.fire({
8342
+ panel: this.getGroupPanel(sourceItemId),
8343
+ from: sourceGroup,
8344
+ });
8155
8345
  return;
8156
8346
  }
8157
8347
  }
@@ -8165,6 +8355,10 @@ class DockviewComponent extends BaseGrid {
8165
8355
  const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
8166
8356
  this.movingLock(() => this.doAddGroup(targetGroup, location));
8167
8357
  this.doSetGroupAndPanelActive(targetGroup);
8358
+ this._onDidMovePanel.fire({
8359
+ panel: this.getGroupPanel(sourceItemId),
8360
+ from: sourceGroup,
8361
+ });
8168
8362
  }
8169
8363
  else {
8170
8364
  /**
@@ -8184,6 +8378,10 @@ class DockviewComponent extends BaseGrid {
8184
8378
  skipSetGroupActive: true,
8185
8379
  }));
8186
8380
  this.doSetGroupAndPanelActive(group);
8381
+ this._onDidMovePanel.fire({
8382
+ panel: removedPanel,
8383
+ from: sourceGroup,
8384
+ });
8187
8385
  }
8188
8386
  }
8189
8387
  }
@@ -8208,9 +8406,6 @@ class DockviewComponent extends BaseGrid {
8208
8406
  }
8209
8407
  });
8210
8408
  this.doSetGroupAndPanelActive(to);
8211
- panels.forEach((panel) => {
8212
- this._onDidMovePanel.fire({ panel });
8213
- });
8214
8409
  }
8215
8410
  else {
8216
8411
  switch (from.api.location.type) {
@@ -8236,10 +8431,10 @@ class DockviewComponent extends BaseGrid {
8236
8431
  const referenceLocation = getGridLocation(to.element);
8237
8432
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
8238
8433
  this.gridview.addView(from, Sizing.Distribute, dropLocation);
8239
- from.panels.forEach((panel) => {
8240
- this._onDidMovePanel.fire({ panel });
8241
- });
8242
8434
  }
8435
+ from.panels.forEach((panel) => {
8436
+ this._onDidMovePanel.fire({ panel, from });
8437
+ });
8243
8438
  }
8244
8439
  doSetGroupActive(group) {
8245
8440
  super.doSetGroupActive(group);
@@ -9863,8 +10058,21 @@ var __rest = (undefined && undefined.__rest) || function (s, e) {
9863
10058
  }
9864
10059
  return t;
9865
10060
  };
10061
+ function useTitle(api) {
10062
+ const [title, setTitle] = React.useState(api.title);
10063
+ React.useEffect(() => {
10064
+ const disposable = api.onDidTitleChange((event) => {
10065
+ setTitle(event.title);
10066
+ });
10067
+ return () => {
10068
+ disposable.dispose();
10069
+ };
10070
+ }, [api]);
10071
+ return title;
10072
+ }
9866
10073
  const DockviewDefaultTab = (_a) => {
9867
10074
  var { api, containerApi: _containerApi, params: _params, hideClose, closeActionOverride } = _a, rest = __rest(_a, ["api", "containerApi", "params", "hideClose", "closeActionOverride"]);
10075
+ const title = useTitle(api);
9868
10076
  const onClose = React.useCallback((event) => {
9869
10077
  event.preventDefault();
9870
10078
  if (closeActionOverride) {
@@ -9887,7 +10095,7 @@ const DockviewDefaultTab = (_a) => {
9887
10095
  }
9888
10096
  }, [api, rest.onClick]);
9889
10097
  return (React.createElement("div", Object.assign({ "data-testid": "dockview-dv-default-tab" }, rest, { onClick: onClick, className: "dv-default-tab" }),
9890
- React.createElement("span", { className: "dv-default-tab-content" }, api.title),
10098
+ React.createElement("span", { className: "dv-default-tab-content" }, title),
9891
10099
  !hideClose && (React.createElement("div", { className: "dv-default-tab-action", onMouseDown: onMouseDown, onClick: onClose },
9892
10100
  React.createElement(CloseButton, null)))));
9893
10101
  };