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
  */
@@ -36,7 +36,7 @@ function styleInject(css, ref) {
36
36
  }
37
37
  }
38
38
 
39
- 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}";
39
+ 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}";
40
40
  styleInject(css_248z);
41
41
 
42
42
  class TransferObject {
@@ -561,6 +561,9 @@ function isInDocument(element) {
561
561
  }
562
562
  return false;
563
563
  }
564
+ function addTestId(element, id) {
565
+ element.setAttribute('data-testid', id);
566
+ }
564
567
 
565
568
  function tail(arr) {
566
569
  if (arr.length === 0) {
@@ -622,7 +625,11 @@ function remove(array, value) {
622
625
 
623
626
  const clamp = (value, min, max) => {
624
627
  if (min > max) {
625
- throw new Error(`${min} > ${max} is an invalid condition`);
628
+ /**
629
+ * caveat: an error should be thrown here if this was a proper `clamp` function but we need to handle
630
+ * cases where `min` > `max` and in those cases return `min`.
631
+ */
632
+ return min;
626
633
  }
627
634
  return Math.min(max, Math.max(value, min));
628
635
  };
@@ -827,7 +834,14 @@ class Splitview {
827
834
  this._disabled = value;
828
835
  toggleClass(this.element, 'dv-splitview-disabled', value);
829
836
  }
837
+ get margin() {
838
+ return this._margin;
839
+ }
840
+ set margin(value) {
841
+ this._margin = value;
842
+ }
830
843
  constructor(container, options) {
844
+ var _a;
831
845
  this.container = container;
832
846
  this.viewItems = [];
833
847
  this.sashes = [];
@@ -838,6 +852,7 @@ class Splitview {
838
852
  this._startSnappingEnabled = true;
839
853
  this._endSnappingEnabled = true;
840
854
  this._disabled = false;
855
+ this._margin = 0;
841
856
  this._onDidSashEnd = new Emitter();
842
857
  this.onDidSashEnd = this._onDidSashEnd.event;
843
858
  this._onDidAddView = new Emitter();
@@ -926,6 +941,7 @@ class Splitview {
926
941
  };
927
942
  this._orientation = options.orientation;
928
943
  this.element = this.createContainer();
944
+ this.margin = (_a = options.margin) !== null && _a !== void 0 ? _a : 0;
929
945
  this.proportionalLayout =
930
946
  options.proportionalLayout === undefined
931
947
  ? true
@@ -980,9 +996,7 @@ class Splitview {
980
996
  if (index < 0 || index >= this.viewItems.length) {
981
997
  throw new Error('Index out of bounds');
982
998
  }
983
- toggleClass(this.container, 'visible', visible);
984
999
  const viewItem = this.viewItems[index];
985
- toggleClass(this.container, 'visible', visible);
986
1000
  viewItem.setVisible(visible, viewItem.size);
987
1001
  this.distributeEmptySpace(index);
988
1002
  this.layoutViews();
@@ -1294,15 +1308,29 @@ class Splitview {
1294
1308
  this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
1295
1309
  }
1296
1310
  }
1311
+ /**
1312
+ * Margin explain:
1313
+ *
1314
+ * For `n` views in a splitview there will be `n-1` margins `m`.
1315
+ *
1316
+ * To fit the margins each view must reduce in size by `(m * (n - 1)) / n`.
1317
+ *
1318
+ * For each view `i` the offet must be adjusted by `m * i/(n - 1)`.
1319
+ */
1297
1320
  layoutViews() {
1298
1321
  this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1299
- let sum = 0;
1300
- const x = [];
1301
1322
  this.updateSashEnablement();
1323
+ if (this.viewItems.length === 0) {
1324
+ return;
1325
+ }
1326
+ const sashCount = this.viewItems.length - 1;
1327
+ const marginReducedSize = (this.margin * sashCount) / this.viewItems.length;
1328
+ let totalLeftOffset = 0;
1329
+ const viewLeftOffsets = [];
1302
1330
  for (let i = 0; i < this.viewItems.length - 1; i++) {
1303
- sum += this.viewItems[i].size;
1304
- x.push(sum);
1305
- const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
1331
+ totalLeftOffset += this.viewItems[i].size;
1332
+ viewLeftOffsets.push(totalLeftOffset);
1333
+ const offset = Math.min(Math.max(0, totalLeftOffset - 2), this.size - this.margin);
1306
1334
  if (this._orientation === exports.Orientation.HORIZONTAL) {
1307
1335
  this.sashes[i].container.style.left = `${offset}px`;
1308
1336
  this.sashes[i].container.style.top = `0px`;
@@ -1313,19 +1341,24 @@ class Splitview {
1313
1341
  }
1314
1342
  }
1315
1343
  this.viewItems.forEach((view, i) => {
1344
+ const size = view.size - marginReducedSize;
1345
+ const offset = i === 0
1346
+ ? 0
1347
+ : viewLeftOffsets[i - 1] +
1348
+ (i / sashCount) * marginReducedSize;
1316
1349
  if (this._orientation === exports.Orientation.HORIZONTAL) {
1317
- view.container.style.width = `${view.size}px`;
1318
- view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
1350
+ view.container.style.width = `${size}px`;
1351
+ view.container.style.left = `${offset}px`;
1319
1352
  view.container.style.top = '';
1320
1353
  view.container.style.height = '';
1321
1354
  }
1322
1355
  if (this._orientation === exports.Orientation.VERTICAL) {
1323
- view.container.style.height = `${view.size}px`;
1324
- view.container.style.top = i == 0 ? '0px' : `${x[i - 1]}px`;
1356
+ view.container.style.height = `${size}px`;
1357
+ view.container.style.top = `${offset}px`;
1325
1358
  view.container.style.width = '';
1326
1359
  view.container.style.left = '';
1327
1360
  }
1328
- view.view.layout(view.size, this._orthogonalSize);
1361
+ view.view.layout(view.size - marginReducedSize, this._orthogonalSize);
1329
1362
  });
1330
1363
  }
1331
1364
  findFirstSnapIndex(indexes) {
@@ -1774,7 +1807,18 @@ class BranchNode extends CompositeDisposable {
1774
1807
  set disabled(value) {
1775
1808
  this.splitview.disabled = value;
1776
1809
  }
1777
- constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, childDescriptors) {
1810
+ get margin() {
1811
+ return this.splitview.margin;
1812
+ }
1813
+ set margin(value) {
1814
+ this.splitview.margin = value;
1815
+ this.children.forEach((child) => {
1816
+ if (child instanceof BranchNode) {
1817
+ child.margin = value;
1818
+ }
1819
+ });
1820
+ }
1821
+ constructor(orientation, proportionalLayout, styles, size, orthogonalSize, disabled, margin, childDescriptors) {
1778
1822
  super();
1779
1823
  this.orientation = orientation;
1780
1824
  this.proportionalLayout = proportionalLayout;
@@ -1794,6 +1838,7 @@ class BranchNode extends CompositeDisposable {
1794
1838
  orientation: this.orientation,
1795
1839
  proportionalLayout,
1796
1840
  styles,
1841
+ margin,
1797
1842
  });
1798
1843
  this.splitview.layout(this.size, this.orthogonalSize);
1799
1844
  }
@@ -1817,6 +1862,7 @@ class BranchNode extends CompositeDisposable {
1817
1862
  descriptor,
1818
1863
  proportionalLayout,
1819
1864
  styles,
1865
+ margin,
1820
1866
  });
1821
1867
  }
1822
1868
  this.disabled = disabled;
@@ -1825,10 +1871,8 @@ class BranchNode extends CompositeDisposable {
1825
1871
  }));
1826
1872
  this.setupChildrenEvents();
1827
1873
  }
1828
- setVisible(visible) {
1829
- for (const child of this.children) {
1830
- child.setVisible(visible);
1831
- }
1874
+ setVisible(_visible) {
1875
+ // noop
1832
1876
  }
1833
1877
  isChildVisible(index) {
1834
1878
  if (index < 0 || index >= this.children.length) {
@@ -1845,12 +1889,13 @@ class BranchNode extends CompositeDisposable {
1845
1889
  }
1846
1890
  const wereAllChildrenHidden = this.splitview.contentSize === 0;
1847
1891
  this.splitview.setViewVisible(index, visible);
1892
+ // }
1848
1893
  const areAllChildrenHidden = this.splitview.contentSize === 0;
1849
1894
  // If all children are hidden then the parent should hide the entire splitview
1850
1895
  // If the entire splitview is hidden then the parent should show the splitview when a child is shown
1851
1896
  if ((visible && wereAllChildrenHidden) ||
1852
1897
  (!visible && areAllChildrenHidden)) {
1853
- this._onDidVisibilityChange.fire(visible);
1898
+ this._onDidVisibilityChange.fire({ visible });
1854
1899
  }
1855
1900
  }
1856
1901
  moveChild(from, to) {
@@ -1923,7 +1968,7 @@ class BranchNode extends CompositeDisposable {
1923
1968
  this._onDidChange.fire({ size: e.orthogonalSize });
1924
1969
  }), ...this.children.map((c, i) => {
1925
1970
  if (c instanceof BranchNode) {
1926
- return c.onDidVisibilityChange((visible) => {
1971
+ return c.onDidVisibilityChange(({ visible }) => {
1927
1972
  this.setChildVisible(i, visible);
1928
1973
  });
1929
1974
  }
@@ -1953,7 +1998,7 @@ function findLeaf(candiateNode, last) {
1953
1998
  }
1954
1999
  function flipNode(node, size, orthogonalSize) {
1955
2000
  if (node instanceof BranchNode) {
1956
- const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize, node.disabled);
2001
+ const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize, node.disabled, node.margin);
1957
2002
  let totalSize = 0;
1958
2003
  for (let i = node.children.length - 1; i >= 0; i--) {
1959
2004
  const child = node.children[i];
@@ -2108,6 +2153,13 @@ class Gridview {
2108
2153
  }
2109
2154
  }
2110
2155
  }
2156
+ get margin() {
2157
+ return this._margin;
2158
+ }
2159
+ set margin(value) {
2160
+ this._margin = value;
2161
+ this.root.margin = value;
2162
+ }
2111
2163
  maximizedView() {
2112
2164
  var _a;
2113
2165
  return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.leaf.view;
@@ -2193,13 +2245,14 @@ class Gridview {
2193
2245
  this.disposable.dispose();
2194
2246
  this._onDidChange.dispose();
2195
2247
  this._onDidMaximizedNodeChange.dispose();
2248
+ this._onDidViewVisibilityChange.dispose();
2196
2249
  this.root.dispose();
2197
2250
  this._maximizedNode = undefined;
2198
2251
  this.element.remove();
2199
2252
  }
2200
2253
  clear() {
2201
2254
  const orientation = this.root.orientation;
2202
- this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize, this._locked);
2255
+ this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize, this.locked, this.margin);
2203
2256
  }
2204
2257
  deserialize(json, deserializer) {
2205
2258
  const orientation = json.orientation;
@@ -2210,6 +2263,7 @@ class Gridview {
2210
2263
  this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
2211
2264
  }
2212
2265
  _deserializeNode(node, orientation, deserializer, orthogonalSize) {
2266
+ var _a;
2213
2267
  let result;
2214
2268
  if (node.type === 'branch') {
2215
2269
  const serializedChildren = node.data;
@@ -2221,10 +2275,14 @@ class Gridview {
2221
2275
  });
2222
2276
  result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
2223
2277
  orthogonalSize, // <- size - flips at each depth,
2224
- this._locked, children);
2278
+ this.locked, this.margin, children);
2225
2279
  }
2226
2280
  else {
2227
- result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
2281
+ const view = deserializer.fromJSON(node);
2282
+ if (typeof node.visible === 'boolean') {
2283
+ (_a = view.setVisible) === null || _a === void 0 ? void 0 : _a.call(view, node.visible);
2284
+ }
2285
+ result = new LeafNode(view, orientation, orthogonalSize, node.size);
2228
2286
  }
2229
2287
  return result;
2230
2288
  }
@@ -2254,7 +2312,7 @@ class Gridview {
2254
2312
  }
2255
2313
  const oldRoot = this.root;
2256
2314
  oldRoot.element.remove();
2257
- this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size, this._locked);
2315
+ this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size, this.locked, this.margin);
2258
2316
  if (oldRoot.children.length === 0) ;
2259
2317
  else if (oldRoot.children.length === 1) {
2260
2318
  // can remove one level of redundant branching if there is only a single child
@@ -2319,19 +2377,24 @@ class Gridview {
2319
2377
  }
2320
2378
  return findLeaf(this.root, reverse);
2321
2379
  }
2322
- constructor(proportionalLayout, styles, orientation) {
2380
+ constructor(proportionalLayout, styles, orientation, locked, margin) {
2323
2381
  this.proportionalLayout = proportionalLayout;
2324
2382
  this.styles = styles;
2325
2383
  this._locked = false;
2384
+ this._margin = 0;
2326
2385
  this._maximizedNode = undefined;
2327
2386
  this.disposable = new MutableDisposable();
2328
2387
  this._onDidChange = new Emitter();
2329
2388
  this.onDidChange = this._onDidChange.event;
2389
+ this._onDidViewVisibilityChange = new Emitter();
2390
+ this.onDidViewVisibilityChange = this._onDidViewVisibilityChange.event;
2330
2391
  this._onDidMaximizedNodeChange = new Emitter();
2331
2392
  this.onDidMaximizedNodeChange = this._onDidMaximizedNodeChange.event;
2332
2393
  this.element = document.createElement('div');
2333
2394
  this.element.className = 'grid-view';
2334
- this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0, this._locked);
2395
+ this._locked = locked !== null && locked !== void 0 ? locked : false;
2396
+ this._margin = margin !== null && margin !== void 0 ? margin : 0;
2397
+ this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0, this.locked, this.margin);
2335
2398
  }
2336
2399
  isViewVisible(location) {
2337
2400
  const [rest, index] = tail(location);
@@ -2350,6 +2413,7 @@ class Gridview {
2350
2413
  if (!(parent instanceof BranchNode)) {
2351
2414
  throw new Error('Invalid from location');
2352
2415
  }
2416
+ this._onDidViewVisibilityChange.fire();
2353
2417
  parent.setChildVisible(index, visible);
2354
2418
  }
2355
2419
  moveView(parentLocation, from, to) {
@@ -2382,7 +2446,7 @@ class Gridview {
2382
2446
  }
2383
2447
  const child = grandParent.removeChild(parentIndex);
2384
2448
  child.dispose();
2385
- const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize, this._locked);
2449
+ const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize, this.locked, this.margin);
2386
2450
  grandParent.addChild(newParent, parent.size, parentIndex);
2387
2451
  const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
2388
2452
  newParent.addChild(newSibling, newSiblingSize, 0);
@@ -2621,14 +2685,18 @@ class BaseGrid extends Resizable {
2621
2685
  this.onDidActiveChange = this._onDidActiveChange.event;
2622
2686
  this._bufferOnDidLayoutChange = new AsapEvent();
2623
2687
  this.onDidLayoutChange = this._bufferOnDidLayoutChange.onEvent;
2688
+ this._onDidViewVisibilityChangeMicroTaskQueue = new AsapEvent();
2689
+ this.onDidViewVisibilityChangeMicroTaskQueue = this._onDidViewVisibilityChangeMicroTaskQueue.onEvent;
2624
2690
  this.element.style.height = '100%';
2625
2691
  this.element.style.width = '100%';
2626
2692
  options.parentElement.appendChild(this.element);
2627
- this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
2693
+ this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation, options.locked, options.margin);
2628
2694
  this.gridview.locked = !!options.locked;
2629
2695
  this.element.appendChild(this.gridview.element);
2630
2696
  this.layout(0, 0, true); // set some elements height/widths
2631
- this.addDisposables(exports.DockviewDisposable.from(() => {
2697
+ this.addDisposables(this.gridview.onDidViewVisibilityChange(() => this._onDidViewVisibilityChangeMicroTaskQueue.fire()), this.onDidViewVisibilityChangeMicroTaskQueue(() => {
2698
+ this.layout(this.width, this.height, true);
2699
+ }), exports.DockviewDisposable.from(() => {
2632
2700
  var _a;
2633
2701
  (_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
2634
2702
  }), this.gridview.onDidChange(() => {
@@ -3242,6 +3310,9 @@ class DockviewApi {
3242
3310
  get onDidRemovePanel() {
3243
3311
  return this.component.onDidRemovePanel;
3244
3312
  }
3313
+ get onDidMovePanel() {
3314
+ return this.component.onDidMovePanel;
3315
+ }
3245
3316
  /**
3246
3317
  * Invoked after a layout is deserialzied using the `fromJSON` method.
3247
3318
  */
@@ -3382,8 +3453,8 @@ class DockviewApi {
3382
3453
  /**
3383
3454
  * Add a floating group
3384
3455
  */
3385
- addFloatingGroup(item, coord) {
3386
- return this.component.addFloatingGroup(item, coord);
3456
+ addFloatingGroup(item, options) {
3457
+ return this.component.addFloatingGroup(item, options);
3387
3458
  }
3388
3459
  /**
3389
3460
  * Create a component from a serialized object.
@@ -3433,6 +3504,9 @@ class DockviewApi {
3433
3504
  addPopoutGroup(item, options) {
3434
3505
  return this.component.addPopoutGroup(item, options);
3435
3506
  }
3507
+ setGap(gap) {
3508
+ this.component.updateOptions({ gap });
3509
+ }
3436
3510
  }
3437
3511
 
3438
3512
  class DragHandler extends CompositeDisposable {
@@ -4802,7 +4876,8 @@ class TabsContainer extends CompositeDisposable {
4802
4876
  this.accessor.addFloatingGroup(this.group, {
4803
4877
  x: left - rootLeft + 20,
4804
4878
  y: top - rootTop + 20,
4805
- }, { inDragMode: true });
4879
+ inDragMode: true,
4880
+ });
4806
4881
  }
4807
4882
  }), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
4808
4883
  if (event.defaultPrevented) {
@@ -4871,7 +4946,8 @@ class TabsContainer extends CompositeDisposable {
4871
4946
  this.accessor.addFloatingGroup(panel, {
4872
4947
  x: left - rootLeft,
4873
4948
  y: top - rootTop,
4874
- }, { inDragMode: true });
4949
+ inDragMode: true,
4950
+ });
4875
4951
  return;
4876
4952
  }
4877
4953
  const isLeftClick = event.button === 0;
@@ -4944,6 +5020,7 @@ const PROPERTY_KEYS = (() => {
4944
5020
  rootOverlayModel: undefined,
4945
5021
  locked: undefined,
4946
5022
  disableDnd: undefined,
5023
+ gap: undefined,
4947
5024
  };
4948
5025
  return Object.keys(properties);
4949
5026
  })();
@@ -5674,6 +5751,9 @@ class GridviewPanel extends BasePanelView {
5674
5751
  get isActive() {
5675
5752
  return this.api.isActive;
5676
5753
  }
5754
+ get isVisible() {
5755
+ return this.api.isVisible;
5756
+ }
5677
5757
  constructor(id, component, options, api) {
5678
5758
  super(id, component, api !== null && api !== void 0 ? api : new GridviewPanelApiImpl(id, component));
5679
5759
  this._evaluatedMinimumWidth = 0;
@@ -6210,52 +6290,40 @@ class DefaultTab extends CompositeDisposable {
6210
6290
  }
6211
6291
  constructor() {
6212
6292
  super();
6213
- //
6214
- this.params = {};
6215
6293
  this._element = document.createElement('div');
6216
6294
  this._element.className = 'dv-default-tab';
6217
- //
6218
6295
  this._content = document.createElement('div');
6219
6296
  this._content.className = 'dv-default-tab-content';
6220
6297
  this.action = document.createElement('div');
6221
6298
  this.action.className = 'dv-default-tab-action';
6222
6299
  this.action.appendChild(createCloseButton());
6223
- //
6224
6300
  this._element.appendChild(this._content);
6225
6301
  this._element.appendChild(this.action);
6226
- //
6227
6302
  this.addDisposables(addDisposableListener(this.action, 'mousedown', (ev) => {
6228
6303
  ev.preventDefault();
6229
6304
  }));
6230
6305
  this.render();
6231
6306
  }
6232
- update(event) {
6233
- this.params = Object.assign(Object.assign({}, this.params), event.params);
6234
- this.render();
6235
- }
6236
- focus() {
6237
- //noop
6238
- }
6239
6307
  init(params) {
6240
- this.params = params;
6241
- this._content.textContent = params.title;
6242
- addDisposableListener(this.action, 'click', (ev) => {
6243
- ev.preventDefault(); //
6244
- this.params.api.close();
6245
- });
6246
- }
6247
- onGroupChange(_group) {
6248
- this.render();
6249
- }
6250
- onPanelVisibleChange(_isPanelVisible) {
6308
+ this._title = params.title;
6309
+ this.addDisposables(params.api.onDidTitleChange((event) => {
6310
+ this._title = event.title;
6311
+ this.render();
6312
+ }), addDisposableListener(this.action, 'mousedown', (ev) => {
6313
+ ev.preventDefault();
6314
+ }), addDisposableListener(this.action, 'click', (ev) => {
6315
+ if (ev.defaultPrevented) {
6316
+ return;
6317
+ }
6318
+ ev.preventDefault();
6319
+ params.api.close();
6320
+ }));
6251
6321
  this.render();
6252
6322
  }
6253
- layout(_width, _height) {
6254
- // noop
6255
- }
6256
6323
  render() {
6257
- if (this._content.textContent !== this.params.title) {
6258
- this._content.textContent = this.params.title;
6324
+ var _a;
6325
+ if (this._content.textContent !== this._title) {
6326
+ this._content.textContent = (_a = this._title) !== null && _a !== void 0 ? _a : '';
6259
6327
  }
6260
6328
  }
6261
6329
  }
@@ -6448,12 +6516,7 @@ class Overlay extends CompositeDisposable {
6448
6516
  this._element.appendChild(this.options.content);
6449
6517
  this.options.container.appendChild(this._element);
6450
6518
  // if input bad resize within acceptable boundaries
6451
- this.setBounds({
6452
- height: this.options.height,
6453
- width: this.options.width,
6454
- top: this.options.top,
6455
- left: this.options.left,
6456
- });
6519
+ 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 })));
6457
6520
  }
6458
6521
  setBounds(bounds = {}) {
6459
6522
  if (typeof bounds.height === 'number') {
@@ -6462,11 +6525,25 @@ class Overlay extends CompositeDisposable {
6462
6525
  if (typeof bounds.width === 'number') {
6463
6526
  this._element.style.width = `${bounds.width}px`;
6464
6527
  }
6465
- if (typeof bounds.top === 'number') {
6528
+ if ('top' in bounds && typeof bounds.top === 'number') {
6466
6529
  this._element.style.top = `${bounds.top}px`;
6530
+ this._element.style.bottom = 'auto';
6531
+ this.verticalAlignment = 'top';
6532
+ }
6533
+ if ('bottom' in bounds && typeof bounds.bottom === 'number') {
6534
+ this._element.style.bottom = `${bounds.bottom}px`;
6535
+ this._element.style.top = 'auto';
6536
+ this.verticalAlignment = 'bottom';
6467
6537
  }
6468
- if (typeof bounds.left === 'number') {
6538
+ if ('left' in bounds && typeof bounds.left === 'number') {
6469
6539
  this._element.style.left = `${bounds.left}px`;
6540
+ this._element.style.right = 'auto';
6541
+ this.horiziontalAlignment = 'left';
6542
+ }
6543
+ if ('right' in bounds && typeof bounds.right === 'number') {
6544
+ this._element.style.right = `${bounds.right}px`;
6545
+ this._element.style.left = 'auto';
6546
+ this.horiziontalAlignment = 'right';
6470
6547
  }
6471
6548
  const containerRect = this.options.container.getBoundingClientRect();
6472
6549
  const overlayRect = this._element.getBoundingClientRect();
@@ -6474,24 +6551,54 @@ class Overlay extends CompositeDisposable {
6474
6551
  // a minimum width of minimumViewportWidth must be inside the viewport
6475
6552
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
6476
6553
  // a minimum height of minimumViewportHeight must be inside the viewport
6477
- const yOffset = typeof this.options.minimumInViewportHeight === 'number'
6478
- ? Math.max(0, this.getMinimumHeight(overlayRect.height))
6479
- : 0;
6480
- const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6481
- const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6482
- this._element.style.left = `${left}px`;
6483
- this._element.style.top = `${top}px`;
6554
+ const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
6555
+ if (this.verticalAlignment === 'top') {
6556
+ const top = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6557
+ this._element.style.top = `${top}px`;
6558
+ this._element.style.bottom = 'auto';
6559
+ }
6560
+ if (this.verticalAlignment === 'bottom') {
6561
+ const bottom = clamp(containerRect.bottom - overlayRect.bottom, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6562
+ this._element.style.bottom = `${bottom}px`;
6563
+ this._element.style.top = 'auto';
6564
+ }
6565
+ if (this.horiziontalAlignment === 'left') {
6566
+ const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6567
+ this._element.style.left = `${left}px`;
6568
+ this._element.style.right = 'auto';
6569
+ }
6570
+ if (this.horiziontalAlignment === 'right') {
6571
+ const right = clamp(containerRect.right - overlayRect.right, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6572
+ this._element.style.right = `${right}px`;
6573
+ this._element.style.left = 'auto';
6574
+ }
6484
6575
  this._onDidChange.fire();
6485
6576
  }
6486
6577
  toJSON() {
6487
6578
  const container = this.options.container.getBoundingClientRect();
6488
6579
  const element = this._element.getBoundingClientRect();
6489
- return {
6490
- top: element.top - container.top,
6491
- left: element.left - container.left,
6492
- width: element.width,
6493
- height: element.height,
6494
- };
6580
+ const result = {};
6581
+ if (this.verticalAlignment === 'top') {
6582
+ result.top = parseFloat(this._element.style.top);
6583
+ }
6584
+ else if (this.verticalAlignment === 'bottom') {
6585
+ result.bottom = parseFloat(this._element.style.bottom);
6586
+ }
6587
+ else {
6588
+ result.top = element.top - container.top;
6589
+ }
6590
+ if (this.horiziontalAlignment === 'left') {
6591
+ result.left = parseFloat(this._element.style.left);
6592
+ }
6593
+ else if (this.horiziontalAlignment === 'right') {
6594
+ result.right = parseFloat(this._element.style.right);
6595
+ }
6596
+ else {
6597
+ result.left = element.left - container.left;
6598
+ }
6599
+ result.width = element.width;
6600
+ result.height = element.height;
6601
+ return result;
6495
6602
  }
6496
6603
  setupDrag(dragTarget, options = { inDragMode: false }) {
6497
6604
  const move = new MutableDisposable();
@@ -6523,12 +6630,30 @@ class Overlay extends CompositeDisposable {
6523
6630
  };
6524
6631
  }
6525
6632
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
6526
- const yOffset = Math.max(0, this.options.minimumInViewportHeight
6527
- ? this.getMinimumHeight(overlayRect.height)
6528
- : 0);
6529
- const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6633
+ const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
6530
6634
  const top = clamp(y - offset.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6531
- this.setBounds({ top, left });
6635
+ const bottom = clamp(offset.y -
6636
+ y +
6637
+ containerRect.height -
6638
+ overlayRect.height, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
6639
+ const left = clamp(x - offset.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6640
+ const right = clamp(offset.x - x + containerRect.width - overlayRect.width, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
6641
+ const bounds = {};
6642
+ // Anchor to top or to bottom depending on which one is closer
6643
+ if (top <= bottom) {
6644
+ bounds.top = top;
6645
+ }
6646
+ else {
6647
+ bounds.bottom = bottom;
6648
+ }
6649
+ // Anchor to left or to right depending on which one is closer
6650
+ if (left <= right) {
6651
+ bounds.left = left;
6652
+ }
6653
+ else {
6654
+ bounds.right = right;
6655
+ }
6656
+ this.setBounds(bounds);
6532
6657
  }), addDisposableWindowListener(window, 'mouseup', () => {
6533
6658
  toggleClass(this._element, 'dv-resize-container-dragging', false);
6534
6659
  move.dispose();
@@ -6596,8 +6721,10 @@ class Overlay extends CompositeDisposable {
6596
6721
  };
6597
6722
  }
6598
6723
  let top = undefined;
6724
+ let bottom = undefined;
6599
6725
  let height = undefined;
6600
6726
  let left = undefined;
6727
+ let right = undefined;
6601
6728
  let width = undefined;
6602
6729
  const moveTop = () => {
6603
6730
  top = clamp(y, -Number.MAX_VALUE, startPosition.originalY +
@@ -6611,6 +6738,7 @@ class Overlay extends CompositeDisposable {
6611
6738
  startPosition.originalY +
6612
6739
  startPosition.originalHeight -
6613
6740
  top;
6741
+ bottom = containerRect.height - top - height;
6614
6742
  };
6615
6743
  const moveBottom = () => {
6616
6744
  top =
@@ -6622,6 +6750,7 @@ class Overlay extends CompositeDisposable {
6622
6750
  ? -top +
6623
6751
  this.options.minimumInViewportHeight
6624
6752
  : Overlay.MINIMUM_HEIGHT, Number.MAX_VALUE);
6753
+ bottom = containerRect.height - top - height;
6625
6754
  };
6626
6755
  const moveLeft = () => {
6627
6756
  left = clamp(x, -Number.MAX_VALUE, startPosition.originalX +
@@ -6635,6 +6764,7 @@ class Overlay extends CompositeDisposable {
6635
6764
  startPosition.originalX +
6636
6765
  startPosition.originalWidth -
6637
6766
  left;
6767
+ right = containerRect.width - left - width;
6638
6768
  };
6639
6769
  const moveRight = () => {
6640
6770
  left =
@@ -6646,6 +6776,7 @@ class Overlay extends CompositeDisposable {
6646
6776
  ? -left +
6647
6777
  this.options.minimumInViewportWidth
6648
6778
  : Overlay.MINIMUM_WIDTH, Number.MAX_VALUE);
6779
+ right = containerRect.width - left - width;
6649
6780
  };
6650
6781
  switch (direction) {
6651
6782
  case 'top':
@@ -6677,7 +6808,24 @@ class Overlay extends CompositeDisposable {
6677
6808
  moveRight();
6678
6809
  break;
6679
6810
  }
6680
- this.setBounds({ height, width, top, left });
6811
+ const bounds = {};
6812
+ // Anchor to top or to bottom depending on which one is closer
6813
+ if (top <= bottom) {
6814
+ bounds.top = top;
6815
+ }
6816
+ else {
6817
+ bounds.bottom = bottom;
6818
+ }
6819
+ // Anchor to left or to right depending on which one is closer
6820
+ if (left <= right) {
6821
+ bounds.left = left;
6822
+ }
6823
+ else {
6824
+ bounds.right = right;
6825
+ }
6826
+ bounds.height = height;
6827
+ bounds.width = width;
6828
+ this.setBounds(bounds);
6681
6829
  }), {
6682
6830
  dispose: () => {
6683
6831
  for (const iframe of iframes) {
@@ -6700,7 +6848,7 @@ class Overlay extends CompositeDisposable {
6700
6848
  if (typeof this.options.minimumInViewportHeight === 'number') {
6701
6849
  return height - this.options.minimumInViewportHeight;
6702
6850
  }
6703
- return height;
6851
+ return 0;
6704
6852
  }
6705
6853
  dispose() {
6706
6854
  this._element.remove();
@@ -6723,7 +6871,7 @@ class DockviewFloatingGroupPanel extends CompositeDisposable {
6723
6871
  }
6724
6872
 
6725
6873
  const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
6726
- const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
6874
+ const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100, width: 300, height: 300 };
6727
6875
 
6728
6876
  function createFocusableElement() {
6729
6877
  const element = document.createElement('div');
@@ -7066,6 +7214,7 @@ class DockviewComponent extends BaseGrid {
7066
7214
  parentElement: options.parentElement,
7067
7215
  disableAutoResizing: options.disableAutoResizing,
7068
7216
  locked: options.locked,
7217
+ margin: options.gap,
7069
7218
  });
7070
7219
  this.nextGroupId = sequentialNumberGenerator();
7071
7220
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -7091,9 +7240,9 @@ class DockviewComponent extends BaseGrid {
7091
7240
  this._onDidActivePanelChange = new Emitter();
7092
7241
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
7093
7242
  this._onDidMovePanel = new Emitter();
7243
+ this.onDidMovePanel = this._onDidMovePanel.event;
7094
7244
  this._floatingGroups = [];
7095
7245
  this._popoutGroups = [];
7096
- this._ignoreEvents = 0;
7097
7246
  this._onDidRemoveGroup = new Emitter();
7098
7247
  this.onDidRemoveGroup = this._onDidRemoveGroup.event;
7099
7248
  this._onDidAddGroup = new Emitter();
@@ -7107,7 +7256,9 @@ class DockviewComponent extends BaseGrid {
7107
7256
  this.overlayRenderContainer = new OverlayRenderContainer(gready);
7108
7257
  toggleClass(this.gridview.element, 'dv-dockview', true);
7109
7258
  toggleClass(this.element, 'dv-debug', !!options.debug);
7110
- 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) => {
7259
+ 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(() => {
7260
+ this.updateWatermark();
7261
+ }), this.onDidAdd((event) => {
7111
7262
  if (!this._moving) {
7112
7263
  this._onDidAddGroup.fire(event);
7113
7264
  }
@@ -7121,7 +7272,7 @@ class DockviewComponent extends BaseGrid {
7121
7272
  }
7122
7273
  }), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove)(() => {
7123
7274
  this.updateWatermark();
7124
- }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
7275
+ }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange)(() => {
7125
7276
  this._bufferOnDidLayoutChange.fire();
7126
7277
  }), exports.DockviewDisposable.from(() => {
7127
7278
  // iterate over a copy of the array since .dispose() mutates the original array
@@ -7372,8 +7523,8 @@ class DockviewComponent extends BaseGrid {
7372
7523
  console.error('dockview: failed to create popout window', err);
7373
7524
  });
7374
7525
  }
7375
- addFloatingGroup(item, coord, options) {
7376
- var _a, _b, _c, _d, _e, _f, _g;
7526
+ addFloatingGroup(item, options) {
7527
+ var _a, _b, _c, _d, _e;
7377
7528
  let group;
7378
7529
  if (item instanceof DockviewPanel) {
7379
7530
  group = this.createGroup();
@@ -7418,26 +7569,62 @@ class DockviewComponent extends BaseGrid {
7418
7569
  }
7419
7570
  }
7420
7571
  group.model.location = { type: 'floating' };
7421
- const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
7422
- ? Math.max(coord.x, 0)
7423
- : DEFAULT_FLOATING_GROUP_POSITION.left;
7424
- const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
7425
- ? Math.max(coord.y, 0)
7426
- : DEFAULT_FLOATING_GROUP_POSITION.top;
7427
- const overlay = new Overlay({
7428
- container: this.gridview.element,
7429
- content: group.element,
7430
- height: (_b = coord === null || coord === void 0 ? void 0 : coord.height) !== null && _b !== void 0 ? _b : 300,
7431
- width: (_c = coord === null || coord === void 0 ? void 0 : coord.width) !== null && _c !== void 0 ? _c : 300,
7432
- left: overlayLeft,
7433
- top: overlayTop,
7434
- minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
7572
+ function getAnchoredBox() {
7573
+ if (options === null || options === void 0 ? void 0 : options.position) {
7574
+ const result = {};
7575
+ if ('left' in options.position) {
7576
+ result.left = Math.max(options.position.left, 0);
7577
+ }
7578
+ else if ('right' in options.position) {
7579
+ result.right = Math.max(options.position.right, 0);
7580
+ }
7581
+ else {
7582
+ result.left = DEFAULT_FLOATING_GROUP_POSITION.left;
7583
+ }
7584
+ if ('top' in options.position) {
7585
+ result.top = Math.max(options.position.top, 0);
7586
+ }
7587
+ else if ('bottom' in options.position) {
7588
+ result.bottom = Math.max(options.position.bottom, 0);
7589
+ }
7590
+ else {
7591
+ result.top = DEFAULT_FLOATING_GROUP_POSITION.top;
7592
+ }
7593
+ if ('width' in options.position) {
7594
+ result.width = Math.max(options.position.width, 0);
7595
+ }
7596
+ else {
7597
+ result.width = DEFAULT_FLOATING_GROUP_POSITION.width;
7598
+ }
7599
+ if ('height' in options.position) {
7600
+ result.height = Math.max(options.position.height, 0);
7601
+ }
7602
+ else {
7603
+ result.height = DEFAULT_FLOATING_GROUP_POSITION.height;
7604
+ }
7605
+ return result;
7606
+ }
7607
+ return {
7608
+ left: typeof (options === null || options === void 0 ? void 0 : options.x) === 'number'
7609
+ ? Math.max(options.x, 0)
7610
+ : DEFAULT_FLOATING_GROUP_POSITION.left,
7611
+ top: typeof (options === null || options === void 0 ? void 0 : options.y) === 'number'
7612
+ ? Math.max(options.y, 0)
7613
+ : DEFAULT_FLOATING_GROUP_POSITION.top,
7614
+ width: typeof (options === null || options === void 0 ? void 0 : options.width) === 'number'
7615
+ ? Math.max(options.width, 0)
7616
+ : DEFAULT_FLOATING_GROUP_POSITION.width,
7617
+ height: typeof (options === null || options === void 0 ? void 0 : options.height) === 'number'
7618
+ ? Math.max(options.height, 0)
7619
+ : DEFAULT_FLOATING_GROUP_POSITION.height,
7620
+ };
7621
+ }
7622
+ const anchoredBox = getAnchoredBox();
7623
+ const overlay = new Overlay(Object.assign(Object.assign({ container: this.gridview.element, content: group.element }, anchoredBox), { minimumInViewportWidth: this.options.floatingGroupBounds === 'boundedWithinViewport'
7435
7624
  ? undefined
7436
- : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumWidthWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7437
- minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
7625
+ : (_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'
7438
7626
  ? undefined
7439
- : (_g = (_f = this.options.floatingGroupBounds) === null || _f === void 0 ? void 0 : _f.minimumHeightWithinViewport) !== null && _g !== void 0 ? _g : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE,
7440
- });
7627
+ : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
7441
7628
  const el = group.element.querySelector('.void-container');
7442
7629
  if (!el) {
7443
7630
  throw new Error('failed to find drag handle');
@@ -7535,12 +7722,18 @@ class DockviewComponent extends BaseGrid {
7535
7722
  group.overlay.minimumInViewportWidth =
7536
7723
  (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport;
7537
7724
  }
7538
- group.overlay.setBounds({});
7725
+ group.overlay.setBounds();
7539
7726
  }
7540
7727
  }
7541
7728
  if (changed_rootOverlayOptions) {
7542
7729
  this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
7543
7730
  }
7731
+ if (this.gridview.margin !== 0 && options.gap === undefined) {
7732
+ this.gridview.margin = 0;
7733
+ }
7734
+ if (typeof options.gap === 'number') {
7735
+ this.gridview.margin = options.gap;
7736
+ }
7544
7737
  this.layout(this.gridview.width, this.gridview.height, true);
7545
7738
  }
7546
7739
  layout(width, height, forceResize) {
@@ -7702,11 +7895,10 @@ class DockviewComponent extends BaseGrid {
7702
7895
  const { data, position } = serializedFloatingGroup;
7703
7896
  const group = createGroupFromSerializedState(data);
7704
7897
  this.addFloatingGroup(group, {
7705
- x: position.left,
7706
- y: position.top,
7707
- height: position.height,
7708
- width: position.width,
7709
- }, { skipRemoveGroup: true, inDragMode: false });
7898
+ position: position,
7899
+ skipRemoveGroup: true,
7900
+ inDragMode: false,
7901
+ });
7710
7902
  }
7711
7903
  const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
7712
7904
  for (const serializedPopoutGroup of serializedPopoutGroups) {
@@ -7841,11 +8033,7 @@ class DockviewComponent extends BaseGrid {
7841
8033
  options.floating !== null
7842
8034
  ? options.floating
7843
8035
  : {};
7844
- this.addFloatingGroup(group, o, {
7845
- inDragMode: false,
7846
- skipRemoveGroup: true,
7847
- skipActiveGroup: true,
7848
- });
8036
+ this.addFloatingGroup(group, Object.assign(Object.assign({}, o), { inDragMode: false, skipRemoveGroup: true, skipActiveGroup: true }));
7849
8037
  panel = this.createPanel(options, group);
7850
8038
  group.model.openPanel(panel, {
7851
8039
  skipSetActive: options.inactive,
@@ -7884,11 +8072,7 @@ class DockviewComponent extends BaseGrid {
7884
8072
  options.floating !== null
7885
8073
  ? options.floating
7886
8074
  : {};
7887
- this.addFloatingGroup(group, coordinates, {
7888
- inDragMode: false,
7889
- skipRemoveGroup: true,
7890
- skipActiveGroup: true,
7891
- });
8075
+ this.addFloatingGroup(group, Object.assign(Object.assign({}, coordinates), { inDragMode: false, skipRemoveGroup: true, skipActiveGroup: true }));
7892
8076
  panel = this.createPanel(options, group);
7893
8077
  group.model.openPanel(panel, {
7894
8078
  skipSetActive: options.inactive,
@@ -7943,6 +8127,7 @@ class DockviewComponent extends BaseGrid {
7943
8127
  });
7944
8128
  const watermarkContainer = document.createElement('div');
7945
8129
  watermarkContainer.className = 'dv-watermark-container';
8130
+ addTestId(watermarkContainer, 'watermark-component');
7946
8131
  watermarkContainer.appendChild(this.watermark.element);
7947
8132
  this.gridview.element.appendChild(watermarkContainer);
7948
8133
  }
@@ -8131,6 +8316,7 @@ class DockviewComponent extends BaseGrid {
8131
8316
  this.doSetGroupAndPanelActive(destinationGroup);
8132
8317
  this._onDidMovePanel.fire({
8133
8318
  panel: removedPanel,
8319
+ from: sourceGroup,
8134
8320
  });
8135
8321
  }
8136
8322
  else {
@@ -8154,6 +8340,10 @@ class DockviewComponent extends BaseGrid {
8154
8340
  // if a group has one tab - we are essentially moving the 'group'
8155
8341
  // which is equivalent to swapping two views in this case
8156
8342
  this.gridview.moveView(sourceParentLocation, from, to);
8343
+ this._onDidMovePanel.fire({
8344
+ panel: this.getGroupPanel(sourceItemId),
8345
+ from: sourceGroup,
8346
+ });
8157
8347
  return;
8158
8348
  }
8159
8349
  }
@@ -8167,6 +8357,10 @@ class DockviewComponent extends BaseGrid {
8167
8357
  const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
8168
8358
  this.movingLock(() => this.doAddGroup(targetGroup, location));
8169
8359
  this.doSetGroupAndPanelActive(targetGroup);
8360
+ this._onDidMovePanel.fire({
8361
+ panel: this.getGroupPanel(sourceItemId),
8362
+ from: sourceGroup,
8363
+ });
8170
8364
  }
8171
8365
  else {
8172
8366
  /**
@@ -8186,6 +8380,10 @@ class DockviewComponent extends BaseGrid {
8186
8380
  skipSetGroupActive: true,
8187
8381
  }));
8188
8382
  this.doSetGroupAndPanelActive(group);
8383
+ this._onDidMovePanel.fire({
8384
+ panel: removedPanel,
8385
+ from: sourceGroup,
8386
+ });
8189
8387
  }
8190
8388
  }
8191
8389
  }
@@ -8210,9 +8408,6 @@ class DockviewComponent extends BaseGrid {
8210
8408
  }
8211
8409
  });
8212
8410
  this.doSetGroupAndPanelActive(to);
8213
- panels.forEach((panel) => {
8214
- this._onDidMovePanel.fire({ panel });
8215
- });
8216
8411
  }
8217
8412
  else {
8218
8413
  switch (from.api.location.type) {
@@ -8238,10 +8433,10 @@ class DockviewComponent extends BaseGrid {
8238
8433
  const referenceLocation = getGridLocation(to.element);
8239
8434
  const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
8240
8435
  this.gridview.addView(from, exports.Sizing.Distribute, dropLocation);
8241
- from.panels.forEach((panel) => {
8242
- this._onDidMovePanel.fire({ panel });
8243
- });
8244
8436
  }
8437
+ from.panels.forEach((panel) => {
8438
+ this._onDidMovePanel.fire({ panel, from });
8439
+ });
8245
8440
  }
8246
8441
  doSetGroupActive(group) {
8247
8442
  super.doSetGroupActive(group);
@@ -9865,8 +10060,21 @@ var __rest = (undefined && undefined.__rest) || function (s, e) {
9865
10060
  }
9866
10061
  return t;
9867
10062
  };
10063
+ function useTitle(api) {
10064
+ const [title, setTitle] = React.useState(api.title);
10065
+ React.useEffect(() => {
10066
+ const disposable = api.onDidTitleChange((event) => {
10067
+ setTitle(event.title);
10068
+ });
10069
+ return () => {
10070
+ disposable.dispose();
10071
+ };
10072
+ }, [api]);
10073
+ return title;
10074
+ }
9868
10075
  const DockviewDefaultTab = (_a) => {
9869
10076
  var { api, containerApi: _containerApi, params: _params, hideClose, closeActionOverride } = _a, rest = __rest(_a, ["api", "containerApi", "params", "hideClose", "closeActionOverride"]);
10077
+ const title = useTitle(api);
9870
10078
  const onClose = React.useCallback((event) => {
9871
10079
  event.preventDefault();
9872
10080
  if (closeActionOverride) {
@@ -9889,7 +10097,7 @@ const DockviewDefaultTab = (_a) => {
9889
10097
  }
9890
10098
  }, [api, rest.onClick]);
9891
10099
  return (React.createElement("div", Object.assign({ "data-testid": "dockview-dv-default-tab" }, rest, { onClick: onClick, className: "dv-default-tab" }),
9892
- React.createElement("span", { className: "dv-default-tab-content" }, api.title),
10100
+ React.createElement("span", { className: "dv-default-tab-content" }, title),
9893
10101
  !hideClose && (React.createElement("div", { className: "dv-default-tab-action", onMouseDown: onMouseDown, onClick: onClose },
9894
10102
  React.createElement(CloseButton, null)))));
9895
10103
  };