dockview-core 1.8.5 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -11
- package/dist/cjs/api/component.api.d.ts +12 -0
- package/dist/cjs/api/component.api.d.ts.map +1 -1
- package/dist/cjs/api/component.api.js +22 -0
- package/dist/cjs/api/component.api.js.map +1 -1
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +15 -8
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts.map +1 -1
- package/dist/cjs/api/dockviewGroupPanelApi.js +39 -9
- package/dist/cjs/api/dockviewGroupPanelApi.js.map +1 -1
- package/dist/cjs/api/dockviewPanelApi.d.ts +19 -2
- package/dist/cjs/api/dockviewPanelApi.d.ts.map +1 -1
- package/dist/cjs/api/dockviewPanelApi.js +23 -3
- package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
- package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
- package/dist/cjs/api/panelApi.js.map +1 -1
- package/dist/cjs/api/paneviewPanelApi.js.map +1 -1
- package/dist/cjs/api/splitviewPanelApi.js.map +1 -1
- package/dist/cjs/array.js.map +1 -1
- package/dist/cjs/constants.d.ts +6 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +6 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
- package/dist/cjs/dnd/dataTransfer.js.map +1 -1
- package/dist/cjs/dnd/dnd.d.ts +5 -0
- package/dist/cjs/dnd/dnd.d.ts.map +1 -1
- package/dist/cjs/dnd/dnd.js +28 -13
- package/dist/cjs/dnd/dnd.js.map +1 -1
- package/dist/cjs/dnd/droptarget.d.ts +13 -12
- package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
- package/dist/cjs/dnd/droptarget.js +40 -49
- package/dist/cjs/dnd/droptarget.js.map +1 -1
- package/dist/cjs/dnd/groupDragHandler.js +1 -1
- package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
- package/dist/cjs/dnd/overlay.d.ts +4 -17
- package/dist/cjs/dnd/overlay.d.ts.map +1 -1
- package/dist/cjs/dnd/overlay.js.map +1 -1
- package/dist/cjs/dockview/components/panel/content.d.ts +14 -1
- package/dist/cjs/dockview/components/panel/content.d.ts.map +1 -1
- package/dist/cjs/dockview/components/panel/content.js +85 -26
- package/dist/cjs/dockview/components/panel/content.js.map +1 -1
- package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
- package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +2 -2
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
- package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +1 -1
- package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
- package/dist/cjs/dockview/deserializer.d.ts +2 -2
- package/dist/cjs/dockview/deserializer.d.ts.map +1 -1
- package/dist/cjs/dockview/deserializer.js +6 -4
- package/dist/cjs/dockview/deserializer.js.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +23 -10
- package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.js +305 -115
- package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.js.map +1 -1
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewGroupPanel.js +4 -2
- package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +5 -4
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +37 -43
- package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
- package/dist/cjs/dockview/dockviewPanel.d.ts +8 -1
- package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewPanel.js +23 -1
- package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
- package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
- package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
- package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
- package/dist/cjs/dockview/dockviewPopoutGroupPanel.js +50 -0
- package/dist/cjs/dockview/dockviewPopoutGroupPanel.js.map +1 -0
- package/dist/cjs/dockview/options.d.ts +7 -1
- package/dist/cjs/dockview/options.d.ts.map +1 -1
- package/dist/cjs/dockview/options.js.map +1 -1
- package/dist/cjs/dockview/types.d.ts +2 -0
- package/dist/cjs/dockview/types.d.ts.map +1 -1
- package/dist/cjs/dockview/types.js.map +1 -1
- package/dist/cjs/dom.d.ts +12 -0
- package/dist/cjs/dom.d.ts.map +1 -1
- package/dist/cjs/dom.js +80 -1
- package/dist/cjs/dom.js.map +1 -1
- package/dist/cjs/events.js.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +10 -0
- package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.js +19 -0
- package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
- package/dist/cjs/gridview/basePanelView.js.map +1 -1
- package/dist/cjs/gridview/branchNode.d.ts +2 -0
- package/dist/cjs/gridview/branchNode.d.ts.map +1 -1
- package/dist/cjs/gridview/branchNode.js +37 -10
- package/dist/cjs/gridview/branchNode.js.map +1 -1
- package/dist/cjs/gridview/gridview.d.ts +10 -3
- package/dist/cjs/gridview/gridview.d.ts.map +1 -1
- package/dist/cjs/gridview/gridview.js +80 -0
- package/dist/cjs/gridview/gridview.js.map +1 -1
- package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
- package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
- package/dist/cjs/gridview/leafNode.d.ts.map +1 -1
- package/dist/cjs/gridview/leafNode.js +1 -2
- package/dist/cjs/gridview/leafNode.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lifecycle.d.ts +1 -0
- package/dist/cjs/lifecycle.d.ts.map +1 -1
- package/dist/cjs/lifecycle.js +8 -0
- package/dist/cjs/lifecycle.js.map +1 -1
- package/dist/cjs/math.js.map +1 -1
- package/dist/cjs/overlayRenderContainer.d.ts +19 -0
- package/dist/cjs/overlayRenderContainer.d.ts.map +1 -0
- package/dist/cjs/overlayRenderContainer.js +170 -0
- package/dist/cjs/overlayRenderContainer.js.map +1 -0
- package/dist/cjs/panel/componentFactory.js.map +1 -1
- package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
- package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
- package/dist/cjs/paneview/paneview.js.map +1 -1
- package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
- package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
- package/dist/cjs/popoutWindow.d.ts +18 -0
- package/dist/cjs/popoutWindow.d.ts.map +1 -0
- package/dist/cjs/popoutWindow.js +130 -0
- package/dist/cjs/popoutWindow.js.map +1 -0
- package/dist/cjs/resizable.d.ts.map +1 -1
- package/dist/cjs/resizable.js +16 -1
- package/dist/cjs/resizable.js.map +1 -1
- package/dist/cjs/splitview/splitview.d.ts +5 -4
- package/dist/cjs/splitview/splitview.d.ts.map +1 -1
- package/dist/cjs/splitview/splitview.js +31 -8
- package/dist/cjs/splitview/splitview.js.map +1 -1
- package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
- package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
- package/dist/cjs/splitview/viewItem.js.map +1 -1
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/dockview-core.amd.js +966 -229
- package/dist/dockview-core.amd.js.map +1 -1
- package/dist/dockview-core.amd.min.js +2 -2
- package/dist/dockview-core.amd.min.js.map +1 -1
- package/dist/dockview-core.amd.min.noStyle.js +2 -2
- package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
- package/dist/dockview-core.amd.noStyle.js +965 -228
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +966 -229
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +966 -229
- package/dist/dockview-core.esm.js.map +1 -1
- package/dist/dockview-core.esm.min.js +2 -2
- package/dist/dockview-core.esm.min.js.map +1 -1
- package/dist/dockview-core.js +966 -229
- package/dist/dockview-core.js.map +1 -1
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.js.map +1 -1
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.min.noStyle.js.map +1 -1
- package/dist/dockview-core.noStyle.js +965 -228
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +12 -0
- package/dist/esm/api/component.api.d.ts.map +1 -1
- package/dist/esm/api/component.api.js +18 -0
- package/dist/esm/api/component.api.js.map +1 -1
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +15 -8
- package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -1
- package/dist/esm/api/dockviewGroupPanelApi.js +39 -9
- package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -1
- package/dist/esm/api/dockviewPanelApi.d.ts +19 -2
- package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
- package/dist/esm/api/dockviewPanelApi.js +19 -3
- package/dist/esm/api/dockviewPanelApi.js.map +1 -1
- package/dist/esm/api/gridviewPanelApi.js.map +1 -1
- package/dist/esm/array.js.map +1 -1
- package/dist/esm/constants.d.ts +6 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +3 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
- package/dist/esm/dnd/dataTransfer.js.map +1 -1
- package/dist/esm/dnd/dnd.d.ts +5 -0
- package/dist/esm/dnd/dnd.d.ts.map +1 -1
- package/dist/esm/dnd/dnd.js +28 -13
- package/dist/esm/dnd/dnd.js.map +1 -1
- package/dist/esm/dnd/droptarget.d.ts +13 -12
- package/dist/esm/dnd/droptarget.d.ts.map +1 -1
- package/dist/esm/dnd/droptarget.js +40 -49
- package/dist/esm/dnd/droptarget.js.map +1 -1
- package/dist/esm/dnd/groupDragHandler.js +1 -1
- package/dist/esm/dnd/groupDragHandler.js.map +1 -1
- package/dist/esm/dnd/overlay.d.ts +4 -17
- package/dist/esm/dnd/overlay.d.ts.map +1 -1
- package/dist/esm/dnd/overlay.js.map +1 -1
- package/dist/esm/dockview/components/panel/content.d.ts +14 -1
- package/dist/esm/dockview/components/panel/content.d.ts.map +1 -1
- package/dist/esm/dockview/components/panel/content.js +84 -26
- package/dist/esm/dockview/components/panel/content.js.map +1 -1
- package/dist/esm/dockview/components/tab/defaultTab.js.map +1 -1
- package/dist/esm/dockview/components/tab/tab.js.map +1 -1
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +2 -2
- package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
- package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -1
- package/dist/esm/dockview/components/watermark/watermark.js.map +1 -1
- package/dist/esm/dockview/deserializer.d.ts +2 -2
- package/dist/esm/dockview/deserializer.d.ts.map +1 -1
- package/dist/esm/dockview/deserializer.js +6 -4
- package/dist/esm/dockview/deserializer.js.map +1 -1
- package/dist/esm/dockview/dockviewComponent.d.ts +23 -10
- package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewComponent.js +207 -55
- package/dist/esm/dockview/dockviewComponent.js.map +1 -1
- package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewGroupPanel.js +4 -2
- package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +5 -4
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.js +39 -45
- package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
- package/dist/esm/dockview/dockviewPanel.d.ts +8 -1
- package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewPanel.js +19 -1
- package/dist/esm/dockview/dockviewPanel.js.map +1 -1
- package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
- package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
- package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
- package/dist/esm/dockview/dockviewPopoutGroupPanel.js +28 -0
- package/dist/esm/dockview/dockviewPopoutGroupPanel.js.map +1 -0
- package/dist/esm/dockview/options.d.ts +7 -1
- package/dist/esm/dockview/options.d.ts.map +1 -1
- package/dist/esm/dockview/options.js.map +1 -1
- package/dist/esm/dockview/types.d.ts +2 -0
- package/dist/esm/dockview/types.d.ts.map +1 -1
- package/dist/esm/dockview/types.js.map +1 -1
- package/dist/esm/dom.d.ts +12 -0
- package/dist/esm/dom.d.ts.map +1 -1
- package/dist/esm/dom.js +55 -0
- package/dist/esm/dom.js.map +1 -1
- package/dist/esm/events.js.map +1 -1
- package/dist/esm/gridview/baseComponentGridview.d.ts +10 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
- package/dist/esm/gridview/baseComponentGridview.js +15 -0
- package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
- package/dist/esm/gridview/basePanelView.js.map +1 -1
- package/dist/esm/gridview/branchNode.d.ts +2 -0
- package/dist/esm/gridview/branchNode.d.ts.map +1 -1
- package/dist/esm/gridview/branchNode.js +26 -5
- package/dist/esm/gridview/branchNode.js.map +1 -1
- package/dist/esm/gridview/gridview.d.ts +10 -3
- package/dist/esm/gridview/gridview.d.ts.map +1 -1
- package/dist/esm/gridview/gridview.js +80 -0
- package/dist/esm/gridview/gridview.js.map +1 -1
- package/dist/esm/gridview/gridviewComponent.js.map +1 -1
- package/dist/esm/gridview/gridviewPanel.js.map +1 -1
- package/dist/esm/gridview/leafNode.d.ts.map +1 -1
- package/dist/esm/gridview/leafNode.js +0 -1
- package/dist/esm/gridview/leafNode.js.map +1 -1
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lifecycle.d.ts +1 -0
- package/dist/esm/lifecycle.d.ts.map +1 -1
- package/dist/esm/lifecycle.js +8 -0
- package/dist/esm/lifecycle.js.map +1 -1
- package/dist/esm/math.js.map +1 -1
- package/dist/esm/overlayRenderContainer.d.ts +19 -0
- package/dist/esm/overlayRenderContainer.d.ts.map +1 -0
- package/dist/esm/overlayRenderContainer.js +125 -0
- package/dist/esm/overlayRenderContainer.js.map +1 -0
- package/dist/esm/panel/componentFactory.js.map +1 -1
- package/dist/esm/paneview/defaultPaneviewHeader.js.map +1 -1
- package/dist/esm/paneview/draggablePaneviewPanel.js.map +1 -1
- package/dist/esm/paneview/paneview.js.map +1 -1
- package/dist/esm/paneview/paneviewComponent.js.map +1 -1
- package/dist/esm/paneview/paneviewPanel.js.map +1 -1
- package/dist/esm/popoutWindow.d.ts +18 -0
- package/dist/esm/popoutWindow.d.ts.map +1 -0
- package/dist/esm/popoutWindow.js +88 -0
- package/dist/esm/popoutWindow.js.map +1 -0
- package/dist/esm/resizable.d.ts.map +1 -1
- package/dist/esm/resizable.js +17 -2
- package/dist/esm/resizable.js.map +1 -1
- package/dist/esm/splitview/splitview.d.ts +5 -4
- package/dist/esm/splitview/splitview.d.ts.map +1 -1
- package/dist/esm/splitview/splitview.js +25 -8
- package/dist/esm/splitview/splitview.js.map +1 -1
- package/dist/esm/splitview/splitviewComponent.js.map +1 -1
- package/dist/esm/splitview/splitviewPanel.js.map +1 -1
- package/dist/esm/splitview/viewItem.js.map +1 -1
- package/dist/esm/types.d.ts +6 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/styles/dockview.css +38 -7
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* dockview-core
|
|
3
|
-
* @version 1.
|
|
3
|
+
* @version 1.9.1
|
|
4
4
|
* @link https://github.com/mathuo/dockview
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
@@ -31,7 +31,7 @@ function styleInject(css, ref) {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
var css_248z = ".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-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\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.small-top {\n border-top: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-bottom {\n border-bottom: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-left {\n border-left: 1px solid var(--dv-drag-over-border-color);\n}\n.drop-target > .drop-target-dropzone > .drop-target-selection.small-right {\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\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 overflow: hidden;\n outline: none;\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.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: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: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.dv-tab-dragging .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .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 .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .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}";
|
|
34
|
+
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-dockview {\n padding: 3px;\n}\n.dockview-theme-replit .view:has(> .groupview) {\n padding: 3px;\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.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.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 .tab-action {\n background-color: var(--dv-activegroup-visiblepanel-tab-color);\n}\n.tab.active-tab > .default-tab .tab-action {\n visibility: visible;\n}\n.tab.inactive-tab > .default-tab .tab-action {\n visibility: hidden;\n}\n.tab.inactive-tab > .default-tab:hover .tab-action {\n visibility: visible;\n}\n.tab .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 .default-tab .tab-content {\n padding: 0px 8px;\n flex-grow: 1;\n}\n.tab .default-tab .action-container {\n text-align: right;\n display: flex;\n}\n.tab .default-tab .action-container .tab-list {\n display: flex;\n padding: 0px;\n margin: 0px;\n justify-content: flex-end;\n}\n.tab .default-tab .action-container .tab-list .tab-action {\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n.tab .default-tab .action-container .tab-list .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}";
|
|
35
35
|
styleInject(css_248z);
|
|
36
36
|
|
|
37
37
|
class TransferObject {
|
|
@@ -260,6 +260,14 @@ var Disposable;
|
|
|
260
260
|
// noop
|
|
261
261
|
},
|
|
262
262
|
};
|
|
263
|
+
function from(func) {
|
|
264
|
+
return {
|
|
265
|
+
dispose: () => {
|
|
266
|
+
func();
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
Disposable.from = from;
|
|
263
271
|
})(Disposable || (Disposable = {}));
|
|
264
272
|
class CompositeDisposable {
|
|
265
273
|
get isDisposed() {
|
|
@@ -444,6 +452,61 @@ function quasiPreventDefault(event) {
|
|
|
444
452
|
function quasiDefaultPrevented(event) {
|
|
445
453
|
return event[QUASI_PREVENT_DEFAULT_KEY];
|
|
446
454
|
}
|
|
455
|
+
function addStyles(document, styleSheetList) {
|
|
456
|
+
const styleSheets = Array.from(styleSheetList);
|
|
457
|
+
for (const styleSheet of styleSheets) {
|
|
458
|
+
if (styleSheet.href) {
|
|
459
|
+
const link = document.createElement('link');
|
|
460
|
+
link.href = styleSheet.href;
|
|
461
|
+
link.type = styleSheet.type;
|
|
462
|
+
link.rel = 'stylesheet';
|
|
463
|
+
document.head.appendChild(link);
|
|
464
|
+
}
|
|
465
|
+
let cssTexts = [];
|
|
466
|
+
try {
|
|
467
|
+
if (styleSheet.cssRules) {
|
|
468
|
+
cssTexts = Array.from(styleSheet.cssRules).map((rule) => rule.cssText);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
catch (err) {
|
|
472
|
+
// security errors (lack of permissions), ignore
|
|
473
|
+
}
|
|
474
|
+
for (const rule of cssTexts) {
|
|
475
|
+
const style = document.createElement('style');
|
|
476
|
+
style.appendChild(document.createTextNode(rule));
|
|
477
|
+
document.head.appendChild(style);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
function getDomNodePagePosition(domNode) {
|
|
482
|
+
const { left, top, width, height } = domNode.getBoundingClientRect();
|
|
483
|
+
return {
|
|
484
|
+
left: left + window.scrollX,
|
|
485
|
+
top: top + window.scrollY,
|
|
486
|
+
width: width,
|
|
487
|
+
height: height,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Check whether an element is in the DOM (including the Shadow DOM)
|
|
492
|
+
* @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
|
|
493
|
+
*/
|
|
494
|
+
function isInDocument(element) {
|
|
495
|
+
let currentElement = element;
|
|
496
|
+
while (currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentNode) {
|
|
497
|
+
if (currentElement.parentNode === document) {
|
|
498
|
+
return true;
|
|
499
|
+
}
|
|
500
|
+
else if (currentElement.parentNode instanceof DocumentFragment) {
|
|
501
|
+
// handle shadow DOMs
|
|
502
|
+
currentElement = currentElement.parentNode.host;
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
currentElement = currentElement.parentNode;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return false;
|
|
509
|
+
}
|
|
447
510
|
|
|
448
511
|
function tail(arr) {
|
|
449
512
|
if (arr.length === 0) {
|
|
@@ -641,6 +704,9 @@ var Sizing;
|
|
|
641
704
|
Sizing.Invisible = Invisible;
|
|
642
705
|
})(Sizing || (Sizing = {}));
|
|
643
706
|
class Splitview {
|
|
707
|
+
get contentSize() {
|
|
708
|
+
return this._contentSize;
|
|
709
|
+
}
|
|
644
710
|
get size() {
|
|
645
711
|
return this._size;
|
|
646
712
|
}
|
|
@@ -706,7 +772,7 @@ class Splitview {
|
|
|
706
772
|
this.sashes = [];
|
|
707
773
|
this._size = 0;
|
|
708
774
|
this._orthogonalSize = 0;
|
|
709
|
-
this.
|
|
775
|
+
this._contentSize = 0;
|
|
710
776
|
this._proportions = undefined;
|
|
711
777
|
this._startSnappingEnabled = true;
|
|
712
778
|
this._endSnappingEnabled = true;
|
|
@@ -825,7 +891,7 @@ class Splitview {
|
|
|
825
891
|
);
|
|
826
892
|
});
|
|
827
893
|
// Initialize content size and proportions for first layout
|
|
828
|
-
this.
|
|
894
|
+
this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
829
895
|
this.saveProportions();
|
|
830
896
|
}
|
|
831
897
|
}
|
|
@@ -1099,7 +1165,7 @@ class Splitview {
|
|
|
1099
1165
|
this.addView(view, sizing, to);
|
|
1100
1166
|
}
|
|
1101
1167
|
layout(size, orthogonalSize) {
|
|
1102
|
-
const previousSize = Math.max(this.size, this.
|
|
1168
|
+
const previousSize = Math.max(this.size, this._contentSize);
|
|
1103
1169
|
this.size = size;
|
|
1104
1170
|
this.orthogonalSize = orthogonalSize;
|
|
1105
1171
|
if (!this.proportions) {
|
|
@@ -1109,9 +1175,23 @@ class Splitview {
|
|
|
1109
1175
|
this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
|
|
1110
1176
|
}
|
|
1111
1177
|
else {
|
|
1178
|
+
let total = 0;
|
|
1112
1179
|
for (let i = 0; i < this.viewItems.length; i++) {
|
|
1113
1180
|
const item = this.viewItems[i];
|
|
1114
|
-
|
|
1181
|
+
const proportion = this.proportions[i];
|
|
1182
|
+
if (typeof proportion === 'number') {
|
|
1183
|
+
total += proportion;
|
|
1184
|
+
}
|
|
1185
|
+
else {
|
|
1186
|
+
size -= item.size;
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
for (let i = 0; i < this.viewItems.length; i++) {
|
|
1190
|
+
const item = this.viewItems[i];
|
|
1191
|
+
const proportion = this.proportions[i];
|
|
1192
|
+
if (typeof proportion === 'number' && total > 0) {
|
|
1193
|
+
item.size = clamp(Math.round((proportion * size) / total), item.minimumSize, item.maximumSize);
|
|
1194
|
+
}
|
|
1115
1195
|
}
|
|
1116
1196
|
}
|
|
1117
1197
|
this.distributeEmptySpace();
|
|
@@ -1148,12 +1228,12 @@ class Splitview {
|
|
|
1148
1228
|
}
|
|
1149
1229
|
}
|
|
1150
1230
|
saveProportions() {
|
|
1151
|
-
if (this.proportionalLayout && this.
|
|
1152
|
-
this._proportions = this.viewItems.map((i) => i.size / this.
|
|
1231
|
+
if (this.proportionalLayout && this._contentSize > 0) {
|
|
1232
|
+
this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
|
|
1153
1233
|
}
|
|
1154
1234
|
}
|
|
1155
1235
|
layoutViews() {
|
|
1156
|
-
this.
|
|
1236
|
+
this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1157
1237
|
let sum = 0;
|
|
1158
1238
|
const x = [];
|
|
1159
1239
|
this.updateSashEnablement();
|
|
@@ -1247,7 +1327,7 @@ class Splitview {
|
|
|
1247
1327
|
}
|
|
1248
1328
|
else if (snappedAfter &&
|
|
1249
1329
|
collapsesDown[index] &&
|
|
1250
|
-
(position < this.
|
|
1330
|
+
(position < this._contentSize || this.endSnappingEnabled)) {
|
|
1251
1331
|
this.updateSash(sash, SashState.MAXIMUM);
|
|
1252
1332
|
}
|
|
1253
1333
|
else {
|
|
@@ -1536,7 +1616,6 @@ class LeafNode {
|
|
|
1536
1616
|
setVisible(visible) {
|
|
1537
1617
|
if (this.view.setVisible) {
|
|
1538
1618
|
this.view.setVisible(visible);
|
|
1539
|
-
this._onDidChange.fire({});
|
|
1540
1619
|
}
|
|
1541
1620
|
}
|
|
1542
1621
|
layout(size, orthogonalSize) {
|
|
@@ -1568,10 +1647,14 @@ class BranchNode extends CompositeDisposable {
|
|
|
1568
1647
|
get minimumSize() {
|
|
1569
1648
|
return this.children.length === 0
|
|
1570
1649
|
? 0
|
|
1571
|
-
: Math.max(...this.children.map((c) =>
|
|
1650
|
+
: Math.max(...this.children.map((c, index) => this.splitview.isViewVisible(index)
|
|
1651
|
+
? c.minimumOrthogonalSize
|
|
1652
|
+
: 0));
|
|
1572
1653
|
}
|
|
1573
1654
|
get maximumSize() {
|
|
1574
|
-
return Math.min(...this.children.map((c) =>
|
|
1655
|
+
return Math.min(...this.children.map((c, index) => this.splitview.isViewVisible(index)
|
|
1656
|
+
? c.maximumOrthogonalSize
|
|
1657
|
+
: Number.POSITIVE_INFINITY));
|
|
1575
1658
|
}
|
|
1576
1659
|
get minimumOrthogonalSize() {
|
|
1577
1660
|
return this.splitview.minimumSize;
|
|
@@ -1629,6 +1712,8 @@ class BranchNode extends CompositeDisposable {
|
|
|
1629
1712
|
this.children = [];
|
|
1630
1713
|
this._onDidChange = new Emitter();
|
|
1631
1714
|
this.onDidChange = this._onDidChange.event;
|
|
1715
|
+
this._onDidVisibilityChange = new Emitter();
|
|
1716
|
+
this.onDidVisibilityChange = this._onDidVisibilityChange.event;
|
|
1632
1717
|
this._orthogonalSize = orthogonalSize;
|
|
1633
1718
|
this._size = size;
|
|
1634
1719
|
this.element = document.createElement('div');
|
|
@@ -1663,7 +1748,7 @@ class BranchNode extends CompositeDisposable {
|
|
|
1663
1748
|
styles,
|
|
1664
1749
|
});
|
|
1665
1750
|
}
|
|
1666
|
-
this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
|
|
1751
|
+
this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
|
|
1667
1752
|
this._onDidChange.fire({});
|
|
1668
1753
|
}));
|
|
1669
1754
|
this.setupChildrenEvents();
|
|
@@ -1686,7 +1771,15 @@ class BranchNode extends CompositeDisposable {
|
|
|
1686
1771
|
if (this.splitview.isViewVisible(index) === visible) {
|
|
1687
1772
|
return;
|
|
1688
1773
|
}
|
|
1774
|
+
const wereAllChildrenHidden = this.splitview.contentSize === 0;
|
|
1689
1775
|
this.splitview.setViewVisible(index, visible);
|
|
1776
|
+
const areAllChildrenHidden = this.splitview.contentSize === 0;
|
|
1777
|
+
// If all children are hidden then the parent should hide the entire splitview
|
|
1778
|
+
// If the entire splitview is hidden then the parent should show the splitview when a child is shown
|
|
1779
|
+
if ((visible && wereAllChildrenHidden) ||
|
|
1780
|
+
(!visible && areAllChildrenHidden)) {
|
|
1781
|
+
this._onDidVisibilityChange.fire(visible);
|
|
1782
|
+
}
|
|
1690
1783
|
}
|
|
1691
1784
|
moveChild(from, to) {
|
|
1692
1785
|
if (from === to) {
|
|
@@ -1750,13 +1843,20 @@ class BranchNode extends CompositeDisposable {
|
|
|
1750
1843
|
}
|
|
1751
1844
|
setupChildrenEvents() {
|
|
1752
1845
|
this._childrenDisposable.dispose();
|
|
1753
|
-
this._childrenDisposable = Event.any(...this.children.map((c) => c.onDidChange))((e) => {
|
|
1846
|
+
this._childrenDisposable = new CompositeDisposable(Event.any(...this.children.map((c) => c.onDidChange))((e) => {
|
|
1754
1847
|
/**
|
|
1755
1848
|
* indicate a change has occured to allows any re-rendering but don't bubble
|
|
1756
1849
|
* event because that was specific to this branch
|
|
1757
1850
|
*/
|
|
1758
1851
|
this._onDidChange.fire({ size: e.orthogonalSize });
|
|
1759
|
-
})
|
|
1852
|
+
}), ...this.children.map((c, i) => {
|
|
1853
|
+
if (c instanceof BranchNode) {
|
|
1854
|
+
return c.onDidVisibilityChange((visible) => {
|
|
1855
|
+
this.setChildVisible(i, visible);
|
|
1856
|
+
});
|
|
1857
|
+
}
|
|
1858
|
+
return Disposable.NONE;
|
|
1859
|
+
}));
|
|
1760
1860
|
}
|
|
1761
1861
|
dispose() {
|
|
1762
1862
|
this._childrenDisposable.dispose();
|
|
@@ -1917,7 +2017,69 @@ class Gridview {
|
|
|
1917
2017
|
get maximumHeight() {
|
|
1918
2018
|
return this.root.maximumHeight;
|
|
1919
2019
|
}
|
|
2020
|
+
maximizedView() {
|
|
2021
|
+
var _a;
|
|
2022
|
+
return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
|
|
2023
|
+
}
|
|
2024
|
+
hasMaximizedView() {
|
|
2025
|
+
return this._maximizedNode !== undefined;
|
|
2026
|
+
}
|
|
2027
|
+
maximizeView(view) {
|
|
2028
|
+
const location = getGridLocation(view.element);
|
|
2029
|
+
const [_, node] = this.getNode(location);
|
|
2030
|
+
if (!(node instanceof LeafNode)) {
|
|
2031
|
+
return;
|
|
2032
|
+
}
|
|
2033
|
+
if (this._maximizedNode === node) {
|
|
2034
|
+
return;
|
|
2035
|
+
}
|
|
2036
|
+
if (this.hasMaximizedView()) {
|
|
2037
|
+
this.exitMaximizedView();
|
|
2038
|
+
}
|
|
2039
|
+
function hideAllViewsBut(parent, exclude) {
|
|
2040
|
+
for (let i = 0; i < parent.children.length; i++) {
|
|
2041
|
+
const child = parent.children[i];
|
|
2042
|
+
if (child instanceof LeafNode) {
|
|
2043
|
+
if (child !== exclude) {
|
|
2044
|
+
parent.setChildVisible(i, false);
|
|
2045
|
+
}
|
|
2046
|
+
}
|
|
2047
|
+
else {
|
|
2048
|
+
hideAllViewsBut(child, exclude);
|
|
2049
|
+
}
|
|
2050
|
+
}
|
|
2051
|
+
}
|
|
2052
|
+
hideAllViewsBut(this.root, node);
|
|
2053
|
+
this._maximizedNode = node;
|
|
2054
|
+
this._onDidMaxmizedNodeChange.fire();
|
|
2055
|
+
}
|
|
2056
|
+
exitMaximizedView() {
|
|
2057
|
+
if (!this._maximizedNode) {
|
|
2058
|
+
return;
|
|
2059
|
+
}
|
|
2060
|
+
function showViewsInReverseOrder(parent) {
|
|
2061
|
+
for (let index = parent.children.length - 1; index >= 0; index--) {
|
|
2062
|
+
const child = parent.children[index];
|
|
2063
|
+
if (child instanceof LeafNode) {
|
|
2064
|
+
parent.setChildVisible(index, true);
|
|
2065
|
+
}
|
|
2066
|
+
else {
|
|
2067
|
+
showViewsInReverseOrder(child);
|
|
2068
|
+
}
|
|
2069
|
+
}
|
|
2070
|
+
}
|
|
2071
|
+
showViewsInReverseOrder(this.root);
|
|
2072
|
+
this._maximizedNode = undefined;
|
|
2073
|
+
this._onDidMaxmizedNodeChange.fire();
|
|
2074
|
+
}
|
|
1920
2075
|
serialize() {
|
|
2076
|
+
if (this.hasMaximizedView()) {
|
|
2077
|
+
/**
|
|
2078
|
+
* do not persist maximized view state but we must first exit any maximized views
|
|
2079
|
+
* before serialization to ensure the correct dimensions are persisted
|
|
2080
|
+
*/
|
|
2081
|
+
this.exitMaximizedView();
|
|
2082
|
+
}
|
|
1921
2083
|
const root = serializeBranchNode(this.getView(), this.orientation);
|
|
1922
2084
|
return {
|
|
1923
2085
|
root,
|
|
@@ -1929,7 +2091,9 @@ class Gridview {
|
|
|
1929
2091
|
dispose() {
|
|
1930
2092
|
this.disposable.dispose();
|
|
1931
2093
|
this._onDidChange.dispose();
|
|
2094
|
+
this._onDidMaxmizedNodeChange.dispose();
|
|
1932
2095
|
this.root.dispose();
|
|
2096
|
+
this._maximizedNode = undefined;
|
|
1933
2097
|
this.element.remove();
|
|
1934
2098
|
}
|
|
1935
2099
|
clear() {
|
|
@@ -1970,6 +2134,7 @@ class Gridview {
|
|
|
1970
2134
|
const oldRoot = this._root;
|
|
1971
2135
|
if (oldRoot) {
|
|
1972
2136
|
oldRoot.dispose();
|
|
2137
|
+
this._maximizedNode = undefined;
|
|
1973
2138
|
this.element.removeChild(oldRoot.element);
|
|
1974
2139
|
}
|
|
1975
2140
|
this._root = root;
|
|
@@ -2056,9 +2221,12 @@ class Gridview {
|
|
|
2056
2221
|
constructor(proportionalLayout, styles, orientation) {
|
|
2057
2222
|
this.proportionalLayout = proportionalLayout;
|
|
2058
2223
|
this.styles = styles;
|
|
2224
|
+
this._maximizedNode = undefined;
|
|
2059
2225
|
this.disposable = new MutableDisposable();
|
|
2060
2226
|
this._onDidChange = new Emitter();
|
|
2061
2227
|
this.onDidChange = this._onDidChange.event;
|
|
2228
|
+
this._onDidMaxmizedNodeChange = new Emitter();
|
|
2229
|
+
this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
|
|
2062
2230
|
this.element = document.createElement('div');
|
|
2063
2231
|
this.element.className = 'grid-view';
|
|
2064
2232
|
this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
|
|
@@ -2072,6 +2240,9 @@ class Gridview {
|
|
|
2072
2240
|
return parent.isChildVisible(index);
|
|
2073
2241
|
}
|
|
2074
2242
|
setViewVisible(location, visible) {
|
|
2243
|
+
if (this.hasMaximizedView()) {
|
|
2244
|
+
this.exitMaximizedView();
|
|
2245
|
+
}
|
|
2075
2246
|
const [rest, index] = tail(location);
|
|
2076
2247
|
const [, parent] = this.getNode(rest);
|
|
2077
2248
|
if (!(parent instanceof BranchNode)) {
|
|
@@ -2080,6 +2251,9 @@ class Gridview {
|
|
|
2080
2251
|
parent.setChildVisible(index, visible);
|
|
2081
2252
|
}
|
|
2082
2253
|
moveView(parentLocation, from, to) {
|
|
2254
|
+
if (this.hasMaximizedView()) {
|
|
2255
|
+
this.exitMaximizedView();
|
|
2256
|
+
}
|
|
2083
2257
|
const [, parent] = this.getNode(parentLocation);
|
|
2084
2258
|
if (!(parent instanceof BranchNode)) {
|
|
2085
2259
|
throw new Error('Invalid location');
|
|
@@ -2087,6 +2261,9 @@ class Gridview {
|
|
|
2087
2261
|
parent.moveChild(from, to);
|
|
2088
2262
|
}
|
|
2089
2263
|
addView(view, size, location) {
|
|
2264
|
+
if (this.hasMaximizedView()) {
|
|
2265
|
+
this.exitMaximizedView();
|
|
2266
|
+
}
|
|
2090
2267
|
const [rest, index] = tail(location);
|
|
2091
2268
|
const [pathToParent, parent] = this.getNode(rest);
|
|
2092
2269
|
if (parent instanceof BranchNode) {
|
|
@@ -2119,6 +2296,9 @@ class Gridview {
|
|
|
2119
2296
|
return this.removeView(location, sizing);
|
|
2120
2297
|
}
|
|
2121
2298
|
removeView(location, sizing) {
|
|
2299
|
+
if (this.hasMaximizedView()) {
|
|
2300
|
+
this.exitMaximizedView();
|
|
2301
|
+
}
|
|
2122
2302
|
const [rest, index] = tail(location);
|
|
2123
2303
|
const [pathToParent, parent] = this.getNode(rest);
|
|
2124
2304
|
if (!(parent instanceof BranchNode)) {
|
|
@@ -2856,6 +3036,24 @@ class DockviewApi {
|
|
|
2856
3036
|
moveToPrevious(options) {
|
|
2857
3037
|
this.component.moveToPrevious(options);
|
|
2858
3038
|
}
|
|
3039
|
+
maximizeGroup(panel) {
|
|
3040
|
+
this.component.maximizeGroup(panel.group);
|
|
3041
|
+
}
|
|
3042
|
+
hasMaximizedGroup() {
|
|
3043
|
+
return this.component.hasMaximizedGroup();
|
|
3044
|
+
}
|
|
3045
|
+
exitMaxmizedGroup() {
|
|
3046
|
+
this.component.exitMaximizedGroup();
|
|
3047
|
+
}
|
|
3048
|
+
get onDidMaxmizedGroupChange() {
|
|
3049
|
+
return this.component.onDidMaxmizedGroupChange;
|
|
3050
|
+
}
|
|
3051
|
+
/**
|
|
3052
|
+
* Add a popout group in a new Window
|
|
3053
|
+
*/
|
|
3054
|
+
addPopoutGroup(item, options) {
|
|
3055
|
+
this.component.addPopoutGroup(item, options);
|
|
3056
|
+
}
|
|
2859
3057
|
}
|
|
2860
3058
|
|
|
2861
3059
|
class DragAndDropObserver extends CompositeDisposable {
|
|
@@ -2866,36 +3064,48 @@ class DragAndDropObserver extends CompositeDisposable {
|
|
|
2866
3064
|
this.target = null;
|
|
2867
3065
|
this.registerListeners();
|
|
2868
3066
|
}
|
|
3067
|
+
onDragEnter(e) {
|
|
3068
|
+
this.target = e.target;
|
|
3069
|
+
this.callbacks.onDragEnter(e);
|
|
3070
|
+
}
|
|
3071
|
+
onDragOver(e) {
|
|
3072
|
+
e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
|
|
3073
|
+
if (this.callbacks.onDragOver) {
|
|
3074
|
+
this.callbacks.onDragOver(e);
|
|
3075
|
+
}
|
|
3076
|
+
}
|
|
3077
|
+
onDragLeave(e) {
|
|
3078
|
+
if (this.target === e.target) {
|
|
3079
|
+
this.target = null;
|
|
3080
|
+
this.callbacks.onDragLeave(e);
|
|
3081
|
+
}
|
|
3082
|
+
}
|
|
3083
|
+
onDragEnd(e) {
|
|
3084
|
+
this.target = null;
|
|
3085
|
+
this.callbacks.onDragEnd(e);
|
|
3086
|
+
}
|
|
3087
|
+
onDrop(e) {
|
|
3088
|
+
this.callbacks.onDrop(e);
|
|
3089
|
+
}
|
|
2869
3090
|
registerListeners() {
|
|
2870
3091
|
this.addDisposables(addDisposableListener(this.element, 'dragenter', (e) => {
|
|
2871
|
-
this.
|
|
2872
|
-
this.callbacks.onDragEnter(e);
|
|
3092
|
+
this.onDragEnter(e);
|
|
2873
3093
|
}, true));
|
|
2874
3094
|
this.addDisposables(addDisposableListener(this.element, 'dragover', (e) => {
|
|
2875
|
-
|
|
2876
|
-
if (this.callbacks.onDragOver) {
|
|
2877
|
-
this.callbacks.onDragOver(e);
|
|
2878
|
-
}
|
|
3095
|
+
this.onDragOver(e);
|
|
2879
3096
|
}, true));
|
|
2880
3097
|
this.addDisposables(addDisposableListener(this.element, 'dragleave', (e) => {
|
|
2881
|
-
|
|
2882
|
-
this.target = null;
|
|
2883
|
-
this.callbacks.onDragLeave(e);
|
|
2884
|
-
}
|
|
3098
|
+
this.onDragLeave(e);
|
|
2885
3099
|
}));
|
|
2886
3100
|
this.addDisposables(addDisposableListener(this.element, 'dragend', (e) => {
|
|
2887
|
-
this.
|
|
2888
|
-
this.callbacks.onDragEnd(e);
|
|
3101
|
+
this.onDragEnd(e);
|
|
2889
3102
|
}));
|
|
2890
3103
|
this.addDisposables(addDisposableListener(this.element, 'drop', (e) => {
|
|
2891
|
-
this.
|
|
3104
|
+
this.onDrop(e);
|
|
2892
3105
|
}));
|
|
2893
3106
|
}
|
|
2894
3107
|
}
|
|
2895
3108
|
|
|
2896
|
-
function numberOrFallback(maybeNumber, fallback) {
|
|
2897
|
-
return typeof maybeNumber === 'number' ? maybeNumber : fallback;
|
|
2898
|
-
}
|
|
2899
3109
|
function directionToPosition(direction) {
|
|
2900
3110
|
switch (direction) {
|
|
2901
3111
|
case 'above':
|
|
@@ -2928,6 +3138,16 @@ function positionToDirection(position) {
|
|
|
2928
3138
|
throw new Error(`invalid position '${position}'`);
|
|
2929
3139
|
}
|
|
2930
3140
|
}
|
|
3141
|
+
const DEFAULT_ACTIVATION_SIZE = {
|
|
3142
|
+
value: 20,
|
|
3143
|
+
type: 'percentage',
|
|
3144
|
+
};
|
|
3145
|
+
const DEFAULT_SIZE = {
|
|
3146
|
+
value: 50,
|
|
3147
|
+
type: 'percentage',
|
|
3148
|
+
};
|
|
3149
|
+
const SMALL_WIDTH_BOUNDARY = 100;
|
|
3150
|
+
const SMALL_HEIGHT_BOUNDARY = 100;
|
|
2931
3151
|
class Droptarget extends CompositeDisposable {
|
|
2932
3152
|
get state() {
|
|
2933
3153
|
return this._state;
|
|
@@ -2940,7 +3160,7 @@ class Droptarget extends CompositeDisposable {
|
|
|
2940
3160
|
this.onDrop = this._onDrop.event;
|
|
2941
3161
|
// use a set to take advantage of #<set>.has
|
|
2942
3162
|
this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
|
|
2943
|
-
this.
|
|
3163
|
+
this.dnd = new DragAndDropObserver(this.element, {
|
|
2944
3164
|
onDragEnter: () => undefined,
|
|
2945
3165
|
onDragOver: (e) => {
|
|
2946
3166
|
if (this._acceptedTargetZonesSet.size === 0) {
|
|
@@ -2988,7 +3208,7 @@ class Droptarget extends CompositeDisposable {
|
|
|
2988
3208
|
this.element.append(this.targetElement);
|
|
2989
3209
|
}
|
|
2990
3210
|
this.toggleClasses(quadrant, width, height);
|
|
2991
|
-
this.
|
|
3211
|
+
this._state = quadrant;
|
|
2992
3212
|
},
|
|
2993
3213
|
onDragLeave: () => {
|
|
2994
3214
|
this.removeDropTarget();
|
|
@@ -3007,11 +3227,15 @@ class Droptarget extends CompositeDisposable {
|
|
|
3007
3227
|
this._onDrop.fire({ position: state, nativeEvent: e });
|
|
3008
3228
|
}
|
|
3009
3229
|
},
|
|
3010
|
-
})
|
|
3230
|
+
});
|
|
3231
|
+
this.addDisposables(this._onDrop, this.dnd);
|
|
3011
3232
|
}
|
|
3012
3233
|
setTargetZones(acceptedTargetZones) {
|
|
3013
3234
|
this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
|
|
3014
3235
|
}
|
|
3236
|
+
setOverlayModel(model) {
|
|
3237
|
+
this.options.overlayModel = model;
|
|
3238
|
+
}
|
|
3015
3239
|
dispose() {
|
|
3016
3240
|
this.removeDropTarget();
|
|
3017
3241
|
super.dispose();
|
|
@@ -3023,19 +3247,19 @@ class Droptarget extends CompositeDisposable {
|
|
|
3023
3247
|
event[Droptarget.USED_EVENT_ID] = true;
|
|
3024
3248
|
}
|
|
3025
3249
|
/**
|
|
3026
|
-
* Check is the event has already been used by another instance
|
|
3250
|
+
* Check is the event has already been used by another instance of DropTarget
|
|
3027
3251
|
*/
|
|
3028
3252
|
isAlreadyUsed(event) {
|
|
3029
3253
|
const value = event[Droptarget.USED_EVENT_ID];
|
|
3030
3254
|
return typeof value === 'boolean' && value;
|
|
3031
3255
|
}
|
|
3032
3256
|
toggleClasses(quadrant, width, height) {
|
|
3033
|
-
var _a, _b
|
|
3257
|
+
var _a, _b;
|
|
3034
3258
|
if (!this.overlayElement) {
|
|
3035
3259
|
return;
|
|
3036
3260
|
}
|
|
3037
|
-
const isSmallX = width <
|
|
3038
|
-
const isSmallY = height <
|
|
3261
|
+
const isSmallX = width < SMALL_WIDTH_BOUNDARY;
|
|
3262
|
+
const isSmallY = height < SMALL_HEIGHT_BOUNDARY;
|
|
3039
3263
|
const isLeft = quadrant === 'left';
|
|
3040
3264
|
const isRight = quadrant === 'right';
|
|
3041
3265
|
const isTop = quadrant === 'top';
|
|
@@ -3044,20 +3268,17 @@ class Droptarget extends CompositeDisposable {
|
|
|
3044
3268
|
const leftClass = !isSmallX && isLeft;
|
|
3045
3269
|
const topClass = !isSmallY && isTop;
|
|
3046
3270
|
const bottomClass = !isSmallY && isBottom;
|
|
3047
|
-
let size =
|
|
3048
|
-
|
|
3049
|
-
|
|
3271
|
+
let size = 1;
|
|
3272
|
+
const sizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : DEFAULT_SIZE;
|
|
3273
|
+
if (sizeOptions.type === 'percentage') {
|
|
3274
|
+
size = clamp(sizeOptions.value, 0, 100) / 100;
|
|
3050
3275
|
}
|
|
3051
|
-
|
|
3276
|
+
else {
|
|
3052
3277
|
if (rightClass || leftClass) {
|
|
3053
|
-
size =
|
|
3054
|
-
clamp(0, this.options.overlayModel.size.value, width) /
|
|
3055
|
-
width;
|
|
3278
|
+
size = clamp(0, sizeOptions.value, width) / width;
|
|
3056
3279
|
}
|
|
3057
3280
|
if (topClass || bottomClass) {
|
|
3058
|
-
size =
|
|
3059
|
-
clamp(0, this.options.overlayModel.size.value, height) /
|
|
3060
|
-
height;
|
|
3281
|
+
size = clamp(0, sizeOptions.value, height) / height;
|
|
3061
3282
|
}
|
|
3062
3283
|
}
|
|
3063
3284
|
const translate = (1 - size) / 2;
|
|
@@ -3079,39 +3300,22 @@ class Droptarget extends CompositeDisposable {
|
|
|
3079
3300
|
transform = '';
|
|
3080
3301
|
}
|
|
3081
3302
|
this.overlayElement.style.transform = transform;
|
|
3082
|
-
toggleClass(this.overlayElement, 'small-
|
|
3083
|
-
toggleClass(this.overlayElement, 'small-
|
|
3084
|
-
toggleClass(this.overlayElement, '
|
|
3085
|
-
toggleClass(this.overlayElement, '
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
case 'top':
|
|
3090
|
-
this._state = 'top';
|
|
3091
|
-
break;
|
|
3092
|
-
case 'left':
|
|
3093
|
-
this._state = 'left';
|
|
3094
|
-
break;
|
|
3095
|
-
case 'bottom':
|
|
3096
|
-
this._state = 'bottom';
|
|
3097
|
-
break;
|
|
3098
|
-
case 'right':
|
|
3099
|
-
this._state = 'right';
|
|
3100
|
-
break;
|
|
3101
|
-
case 'center':
|
|
3102
|
-
this._state = 'center';
|
|
3103
|
-
break;
|
|
3104
|
-
}
|
|
3303
|
+
toggleClass(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
|
|
3304
|
+
toggleClass(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
|
|
3305
|
+
toggleClass(this.overlayElement, 'dv-drop-target-left', isLeft);
|
|
3306
|
+
toggleClass(this.overlayElement, 'dv-drop-target-right', isRight);
|
|
3307
|
+
toggleClass(this.overlayElement, 'dv-drop-target-top', isTop);
|
|
3308
|
+
toggleClass(this.overlayElement, 'dv-drop-target-bottom', isBottom);
|
|
3309
|
+
toggleClass(this.overlayElement, 'dv-drop-target-center', quadrant === 'center');
|
|
3105
3310
|
}
|
|
3106
3311
|
calculateQuadrant(overlayType, x, y, width, height) {
|
|
3107
|
-
var _a, _b
|
|
3108
|
-
const
|
|
3109
|
-
|
|
3110
|
-
const value = numberOrFallback((_f = (_e = (_d = this.options) === null || _d === void 0 ? void 0 : _d.overlayModel) === null || _e === void 0 ? void 0 : _e.activationSize) === null || _f === void 0 ? void 0 : _f.value, 20);
|
|
3312
|
+
var _a, _b;
|
|
3313
|
+
const activationSizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) !== null && _b !== void 0 ? _b : DEFAULT_ACTIVATION_SIZE;
|
|
3314
|
+
const isPercentage = activationSizeOptions.type === 'percentage';
|
|
3111
3315
|
if (isPercentage) {
|
|
3112
|
-
return calculateQuadrantAsPercentage(overlayType, x, y, width, height, value);
|
|
3316
|
+
return calculateQuadrantAsPercentage(overlayType, x, y, width, height, activationSizeOptions.value);
|
|
3113
3317
|
}
|
|
3114
|
-
return calculateQuadrantAsPixels(overlayType, x, y, width, height, value);
|
|
3318
|
+
return calculateQuadrantAsPixels(overlayType, x, y, width, height, activationSizeOptions.value);
|
|
3115
3319
|
}
|
|
3116
3320
|
removeDropTarget() {
|
|
3117
3321
|
if (this.targetElement) {
|
|
@@ -3163,12 +3367,22 @@ function calculateQuadrantAsPixels(overlayType, x, y, width, height, threshold)
|
|
|
3163
3367
|
return 'center';
|
|
3164
3368
|
}
|
|
3165
3369
|
|
|
3370
|
+
var DockviewDropTargets;
|
|
3371
|
+
(function (DockviewDropTargets) {
|
|
3372
|
+
DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
|
|
3373
|
+
DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
|
|
3374
|
+
DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
|
|
3375
|
+
DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
|
|
3376
|
+
})(DockviewDropTargets || (DockviewDropTargets = {}));
|
|
3377
|
+
|
|
3166
3378
|
class ContentContainer extends CompositeDisposable {
|
|
3167
3379
|
get element() {
|
|
3168
3380
|
return this._element;
|
|
3169
3381
|
}
|
|
3170
|
-
constructor() {
|
|
3382
|
+
constructor(accessor, group) {
|
|
3171
3383
|
super();
|
|
3384
|
+
this.accessor = accessor;
|
|
3385
|
+
this.group = group;
|
|
3172
3386
|
this.disposable = new MutableDisposable();
|
|
3173
3387
|
this._onDidFocus = new Emitter();
|
|
3174
3388
|
this.onDidFocus = this._onDidFocus.event;
|
|
@@ -3178,11 +3392,38 @@ class ContentContainer extends CompositeDisposable {
|
|
|
3178
3392
|
this._element.className = 'content-container';
|
|
3179
3393
|
this._element.tabIndex = -1;
|
|
3180
3394
|
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3395
|
+
this.dropTarget = new Droptarget(this.element, {
|
|
3396
|
+
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
3397
|
+
canDisplayOverlay: (event, position) => {
|
|
3398
|
+
if (this.group.locked === 'no-drop-target' ||
|
|
3399
|
+
(this.group.locked && position === 'center')) {
|
|
3400
|
+
return false;
|
|
3401
|
+
}
|
|
3402
|
+
const data = getPanelData();
|
|
3403
|
+
if (!data &&
|
|
3404
|
+
event.shiftKey &&
|
|
3405
|
+
this.group.location !== 'floating') {
|
|
3406
|
+
return false;
|
|
3407
|
+
}
|
|
3408
|
+
if (data && data.viewId === this.accessor.id) {
|
|
3409
|
+
if (data.groupId === this.group.id) {
|
|
3410
|
+
if (position === 'center') {
|
|
3411
|
+
// don't allow to drop on self for center position
|
|
3412
|
+
return false;
|
|
3413
|
+
}
|
|
3414
|
+
if (data.panelId === null) {
|
|
3415
|
+
// don't allow group move to drop anywhere on self
|
|
3416
|
+
return false;
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3419
|
+
const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
|
|
3420
|
+
data.groupId === this.group.id;
|
|
3421
|
+
return !groupHasOnePanelAndIsActiveDragElement;
|
|
3422
|
+
}
|
|
3423
|
+
return this.group.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
|
|
3424
|
+
},
|
|
3425
|
+
});
|
|
3426
|
+
this.addDisposables(this.dropTarget);
|
|
3186
3427
|
}
|
|
3187
3428
|
show() {
|
|
3188
3429
|
this.element.style.display = '';
|
|
@@ -3190,23 +3431,43 @@ class ContentContainer extends CompositeDisposable {
|
|
|
3190
3431
|
hide() {
|
|
3191
3432
|
this.element.style.display = 'none';
|
|
3192
3433
|
}
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
this.panel = undefined;
|
|
3434
|
+
renderPanel(panel, options = { asActive: true }) {
|
|
3435
|
+
const doRender = options.asActive ||
|
|
3436
|
+
(this.panel && this.group.isPanelActive(this.panel));
|
|
3437
|
+
if (this.panel &&
|
|
3438
|
+
this.panel.view.content.element.parentElement === this._element) {
|
|
3439
|
+
/**
|
|
3440
|
+
* If the currently attached panel is mounted directly to the content then remove it
|
|
3441
|
+
*/
|
|
3442
|
+
this._element.removeChild(this.panel.view.content.element);
|
|
3203
3443
|
}
|
|
3204
3444
|
this.panel = panel;
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3209
|
-
|
|
3445
|
+
let container;
|
|
3446
|
+
switch (panel.api.renderer) {
|
|
3447
|
+
case 'onlyWhenVisibile':
|
|
3448
|
+
this.accessor.overlayRenderContainer.detatch(panel);
|
|
3449
|
+
if (this.panel) {
|
|
3450
|
+
if (doRender) {
|
|
3451
|
+
this._element.appendChild(this.panel.view.content.element);
|
|
3452
|
+
}
|
|
3453
|
+
}
|
|
3454
|
+
container = this._element;
|
|
3455
|
+
break;
|
|
3456
|
+
case 'always':
|
|
3457
|
+
if (panel.view.content.element.parentElement === this._element) {
|
|
3458
|
+
this._element.removeChild(panel.view.content.element);
|
|
3459
|
+
}
|
|
3460
|
+
container = this.accessor.overlayRenderContainer.attach({
|
|
3461
|
+
panel,
|
|
3462
|
+
referenceContainer: this,
|
|
3463
|
+
});
|
|
3464
|
+
break;
|
|
3465
|
+
}
|
|
3466
|
+
if (doRender) {
|
|
3467
|
+
const _onDidFocus = panel.view.content.onDidFocus;
|
|
3468
|
+
const _onDidBlur = panel.view.content.onDidBlur;
|
|
3469
|
+
const focusTracker = trackFocus(container);
|
|
3470
|
+
const disposable = new CompositeDisposable();
|
|
3210
3471
|
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
3211
3472
|
if (_onDidFocus) {
|
|
3212
3473
|
disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
|
|
@@ -3214,17 +3475,23 @@ class ContentContainer extends CompositeDisposable {
|
|
|
3214
3475
|
if (_onDidBlur) {
|
|
3215
3476
|
disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
|
|
3216
3477
|
}
|
|
3217
|
-
this.
|
|
3478
|
+
this.disposable.value = disposable;
|
|
3479
|
+
}
|
|
3480
|
+
}
|
|
3481
|
+
openPanel(panel) {
|
|
3482
|
+
if (this.panel === panel) {
|
|
3483
|
+
return;
|
|
3218
3484
|
}
|
|
3219
|
-
this.
|
|
3485
|
+
this.renderPanel(panel);
|
|
3220
3486
|
}
|
|
3221
3487
|
layout(_width, _height) {
|
|
3222
3488
|
// noop
|
|
3223
3489
|
}
|
|
3224
3490
|
closePanel() {
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
|
|
3491
|
+
if (this.panel) {
|
|
3492
|
+
if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
|
|
3493
|
+
this._element.removeChild(this.panel.view.content.element);
|
|
3494
|
+
}
|
|
3228
3495
|
this.panel = undefined;
|
|
3229
3496
|
}
|
|
3230
3497
|
}
|
|
@@ -3234,14 +3501,6 @@ class ContentContainer extends CompositeDisposable {
|
|
|
3234
3501
|
}
|
|
3235
3502
|
}
|
|
3236
3503
|
|
|
3237
|
-
var DockviewDropTargets;
|
|
3238
|
-
(function (DockviewDropTargets) {
|
|
3239
|
-
DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
|
|
3240
|
-
DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
|
|
3241
|
-
DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
|
|
3242
|
-
DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
|
|
3243
|
-
})(DockviewDropTargets || (DockviewDropTargets = {}));
|
|
3244
|
-
|
|
3245
3504
|
class DragHandler extends CompositeDisposable {
|
|
3246
3505
|
constructor(el) {
|
|
3247
3506
|
super();
|
|
@@ -3416,7 +3675,7 @@ class GroupDragHandler extends DragHandler {
|
|
|
3416
3675
|
}, true));
|
|
3417
3676
|
}
|
|
3418
3677
|
isCancelled(_event) {
|
|
3419
|
-
if (this.group.api.
|
|
3678
|
+
if (this.group.api.location === 'floating' && !_event.shiftKey) {
|
|
3420
3679
|
return true;
|
|
3421
3680
|
}
|
|
3422
3681
|
return false;
|
|
@@ -3618,7 +3877,7 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3618
3877
|
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
3619
3878
|
if (isFloatingGroupsEnabled &&
|
|
3620
3879
|
event.shiftKey &&
|
|
3621
|
-
|
|
3880
|
+
this.group.api.location !== 'floating') {
|
|
3622
3881
|
event.preventDefault();
|
|
3623
3882
|
const { top, left } = this.element.getBoundingClientRect();
|
|
3624
3883
|
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
@@ -3683,7 +3942,7 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3683
3942
|
}), tab.onChanged((event) => {
|
|
3684
3943
|
var _a;
|
|
3685
3944
|
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
3686
|
-
const isFloatingWithOnePanel = this.group.api.
|
|
3945
|
+
const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
|
|
3687
3946
|
if (isFloatingGroupsEnabled &&
|
|
3688
3947
|
!isFloatingWithOnePanel &&
|
|
3689
3948
|
event.shiftKey) {
|
|
@@ -3766,15 +4025,37 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3766
4025
|
}
|
|
3767
4026
|
return isAncestor(document.activeElement, this.contentContainer.element);
|
|
3768
4027
|
}
|
|
3769
|
-
get
|
|
3770
|
-
return this.
|
|
3771
|
-
}
|
|
3772
|
-
set
|
|
3773
|
-
this.
|
|
3774
|
-
this.
|
|
3775
|
-
toggleClass(this.container, 'dv-groupview-
|
|
3776
|
-
|
|
3777
|
-
|
|
4028
|
+
get location() {
|
|
4029
|
+
return this._location;
|
|
4030
|
+
}
|
|
4031
|
+
set location(value) {
|
|
4032
|
+
this._location = value;
|
|
4033
|
+
toggleClass(this.container, 'dv-groupview-floating', false);
|
|
4034
|
+
toggleClass(this.container, 'dv-groupview-popout', false);
|
|
4035
|
+
switch (value) {
|
|
4036
|
+
case 'grid':
|
|
4037
|
+
this.contentContainer.dropTarget.setTargetZones([
|
|
4038
|
+
'top',
|
|
4039
|
+
'bottom',
|
|
4040
|
+
'left',
|
|
4041
|
+
'right',
|
|
4042
|
+
'center',
|
|
4043
|
+
]);
|
|
4044
|
+
break;
|
|
4045
|
+
case 'floating':
|
|
4046
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4047
|
+
this.contentContainer.dropTarget.setTargetZones(value
|
|
4048
|
+
? ['center']
|
|
4049
|
+
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
4050
|
+
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
4051
|
+
break;
|
|
4052
|
+
case 'popout':
|
|
4053
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4054
|
+
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
4055
|
+
break;
|
|
4056
|
+
}
|
|
4057
|
+
this.groupPanel.api._onDidLocationChange.fire({
|
|
4058
|
+
location: this.location,
|
|
3778
4059
|
});
|
|
3779
4060
|
}
|
|
3780
4061
|
constructor(container, accessor, id, options, groupPanel) {
|
|
@@ -3787,7 +4068,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3787
4068
|
this.groupPanel = groupPanel;
|
|
3788
4069
|
this._isGroupActive = false;
|
|
3789
4070
|
this._locked = false;
|
|
3790
|
-
this.
|
|
4071
|
+
this._location = 'grid';
|
|
3791
4072
|
this.mostRecentlyUsed = [];
|
|
3792
4073
|
this._onDidChange = new Emitter();
|
|
3793
4074
|
this.onDidChange = this._onDidChange.event;
|
|
@@ -3810,35 +4091,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3810
4091
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
3811
4092
|
toggleClass(this.container, 'groupview', true);
|
|
3812
4093
|
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
3813
|
-
this.contentContainer = new ContentContainer();
|
|
3814
|
-
this.dropTarget = new Droptarget(this.contentContainer.element, {
|
|
3815
|
-
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
3816
|
-
canDisplayOverlay: (event, position) => {
|
|
3817
|
-
if (this.locked === 'no-drop-target' ||
|
|
3818
|
-
(this.locked && position === 'center')) {
|
|
3819
|
-
return false;
|
|
3820
|
-
}
|
|
3821
|
-
const data = getPanelData();
|
|
3822
|
-
if (!data && event.shiftKey && !this.isFloating) {
|
|
3823
|
-
return false;
|
|
3824
|
-
}
|
|
3825
|
-
if (data && data.viewId === this.accessor.id) {
|
|
3826
|
-
if (data.groupId === this.id) {
|
|
3827
|
-
if (position === 'center') {
|
|
3828
|
-
// don't allow to drop on self for center position
|
|
3829
|
-
return false;
|
|
3830
|
-
}
|
|
3831
|
-
if (data.panelId === null) {
|
|
3832
|
-
// don't allow group move to drop anywhere on self
|
|
3833
|
-
return false;
|
|
3834
|
-
}
|
|
3835
|
-
}
|
|
3836
|
-
const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
|
|
3837
|
-
return !groupHasOnePanelAndIsActiveDragElement;
|
|
3838
|
-
}
|
|
3839
|
-
return this.canDisplayOverlay(event, position, DockviewDropTargets.Panel);
|
|
3840
|
-
},
|
|
3841
|
-
});
|
|
4094
|
+
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
3842
4095
|
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
3843
4096
|
this.header.hidden = !!options.hideHeader;
|
|
3844
4097
|
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
@@ -3852,7 +4105,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3852
4105
|
this.accessor.doSetGroupActive(this.groupPanel, true);
|
|
3853
4106
|
}), this.contentContainer.onDidBlur(() => {
|
|
3854
4107
|
// noop
|
|
3855
|
-
}), this.dropTarget.onDrop((event) => {
|
|
4108
|
+
}), this.contentContainer.dropTarget.onDrop((event) => {
|
|
3856
4109
|
this.handleDropEvent(event.nativeEvent, event.position);
|
|
3857
4110
|
}), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
3858
4111
|
}
|
|
@@ -3901,6 +4154,9 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3901
4154
|
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
3902
4155
|
}
|
|
3903
4156
|
}
|
|
4157
|
+
rerender(panel) {
|
|
4158
|
+
this.contentContainer.renderPanel(panel, { asActive: false });
|
|
4159
|
+
}
|
|
3904
4160
|
indexOf(panel) {
|
|
3905
4161
|
return this.tabsContainer.indexOf(panel.id);
|
|
3906
4162
|
}
|
|
@@ -4092,12 +4348,12 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
4092
4348
|
doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
|
|
4093
4349
|
const existingPanel = this._panels.indexOf(panel);
|
|
4094
4350
|
const hasExistingPanel = existingPanel > -1;
|
|
4351
|
+
this.tabsContainer.show();
|
|
4352
|
+
this.contentContainer.show();
|
|
4095
4353
|
this.tabsContainer.openPanel(panel, index);
|
|
4096
4354
|
if (!skipSetActive) {
|
|
4097
4355
|
this.contentContainer.openPanel(panel);
|
|
4098
4356
|
}
|
|
4099
|
-
this.tabsContainer.show();
|
|
4100
|
-
this.contentContainer.show();
|
|
4101
4357
|
if (hasExistingPanel) {
|
|
4102
4358
|
// TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
|
|
4103
4359
|
return;
|
|
@@ -4213,7 +4469,6 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
4213
4469
|
for (const panel of this.panels) {
|
|
4214
4470
|
panel.dispose();
|
|
4215
4471
|
}
|
|
4216
|
-
this.dropTarget.dispose();
|
|
4217
4472
|
this.tabsContainer.dispose();
|
|
4218
4473
|
this.contentContainer.dispose();
|
|
4219
4474
|
}
|
|
@@ -4252,7 +4507,22 @@ class Resizable extends CompositeDisposable {
|
|
|
4252
4507
|
if (this.disableResizing) {
|
|
4253
4508
|
return;
|
|
4254
4509
|
}
|
|
4255
|
-
if (!
|
|
4510
|
+
if (!this._element.offsetParent) {
|
|
4511
|
+
/**
|
|
4512
|
+
* offsetParent === null is equivalent to display: none being set on the element or one
|
|
4513
|
+
* of it's parents. In the display: none case the size will become (0, 0) which we do
|
|
4514
|
+
* not want to propagate.
|
|
4515
|
+
*
|
|
4516
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
|
|
4517
|
+
*
|
|
4518
|
+
* You could use checkVisibility() but at the time of writing it's not supported across
|
|
4519
|
+
* all Browsers
|
|
4520
|
+
*
|
|
4521
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility
|
|
4522
|
+
*/
|
|
4523
|
+
return;
|
|
4524
|
+
}
|
|
4525
|
+
if (!isInDocument(this._element)) {
|
|
4256
4526
|
/**
|
|
4257
4527
|
* since the event is dispatched through requestAnimationFrame there is a small chance
|
|
4258
4528
|
* the component is no longer attached to the DOM, if that is the case the dimensions
|
|
@@ -4344,6 +4614,21 @@ class BaseGrid extends Resizable {
|
|
|
4344
4614
|
isVisible(panel) {
|
|
4345
4615
|
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
4346
4616
|
}
|
|
4617
|
+
maximizeGroup(panel) {
|
|
4618
|
+
this.gridview.maximizeView(panel);
|
|
4619
|
+
}
|
|
4620
|
+
isMaximizedGroup(panel) {
|
|
4621
|
+
return this.gridview.maximizedView() === panel;
|
|
4622
|
+
}
|
|
4623
|
+
exitMaximizedGroup() {
|
|
4624
|
+
this.gridview.exitMaximizedView();
|
|
4625
|
+
}
|
|
4626
|
+
hasMaximizedGroup() {
|
|
4627
|
+
return this.gridview.hasMaximizedView();
|
|
4628
|
+
}
|
|
4629
|
+
get onDidMaxmizedGroupChange() {
|
|
4630
|
+
return this.gridview.onDidMaxmizedNodeChange;
|
|
4631
|
+
}
|
|
4347
4632
|
doAddGroup(group, location = [0], size) {
|
|
4348
4633
|
this.gridview.addView(group, size !== null && size !== void 0 ? size : Sizing.Distribute, location);
|
|
4349
4634
|
this._onDidAddGroup.fire(group);
|
|
@@ -5120,32 +5405,63 @@ class GridviewPanel extends BasePanelView {
|
|
|
5120
5405
|
}
|
|
5121
5406
|
}
|
|
5122
5407
|
|
|
5408
|
+
// TODO find a better way to initialize and avoid needing null checks
|
|
5409
|
+
const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
|
|
5123
5410
|
class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
|
5124
|
-
get
|
|
5411
|
+
get location() {
|
|
5125
5412
|
if (!this._group) {
|
|
5126
|
-
throw new Error(
|
|
5413
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5127
5414
|
}
|
|
5128
|
-
return this._group.model.
|
|
5415
|
+
return this._group.model.location;
|
|
5129
5416
|
}
|
|
5130
5417
|
constructor(id, accessor) {
|
|
5131
5418
|
super(id);
|
|
5132
5419
|
this.accessor = accessor;
|
|
5133
|
-
this.
|
|
5134
|
-
this.
|
|
5135
|
-
this.addDisposables(this.
|
|
5420
|
+
this._onDidLocationChange = new Emitter();
|
|
5421
|
+
this.onDidLocationChange = this._onDidLocationChange.event;
|
|
5422
|
+
this.addDisposables(this._onDidLocationChange);
|
|
5136
5423
|
}
|
|
5137
5424
|
moveTo(options) {
|
|
5138
|
-
var _a;
|
|
5425
|
+
var _a, _b, _c;
|
|
5426
|
+
if (!this._group) {
|
|
5427
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5428
|
+
}
|
|
5429
|
+
const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
|
|
5430
|
+
direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
|
|
5431
|
+
});
|
|
5432
|
+
this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
|
|
5433
|
+
}
|
|
5434
|
+
maximize() {
|
|
5435
|
+
if (!this._group) {
|
|
5436
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5437
|
+
}
|
|
5438
|
+
if (this.location !== 'grid') {
|
|
5439
|
+
// only grid groups can be maximized
|
|
5440
|
+
return;
|
|
5441
|
+
}
|
|
5442
|
+
this.accessor.maximizeGroup(this._group);
|
|
5443
|
+
}
|
|
5444
|
+
isMaximized() {
|
|
5139
5445
|
if (!this._group) {
|
|
5140
|
-
throw new Error(
|
|
5446
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5447
|
+
}
|
|
5448
|
+
return this.accessor.isMaximizedGroup(this._group);
|
|
5449
|
+
}
|
|
5450
|
+
exitMaximized() {
|
|
5451
|
+
if (!this._group) {
|
|
5452
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5453
|
+
}
|
|
5454
|
+
if (this.isMaximized()) {
|
|
5455
|
+
this.accessor.exitMaximizedGroup();
|
|
5141
5456
|
}
|
|
5142
|
-
this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
|
|
5143
5457
|
}
|
|
5144
5458
|
initialize(group) {
|
|
5145
5459
|
this._group = group;
|
|
5146
5460
|
}
|
|
5147
5461
|
}
|
|
5148
5462
|
|
|
5463
|
+
const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
|
|
5464
|
+
const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
|
|
5149
5465
|
class DockviewGroupPanel extends GridviewPanel {
|
|
5150
5466
|
get panels() {
|
|
5151
5467
|
return this._model.panels;
|
|
@@ -5170,8 +5486,8 @@ class DockviewGroupPanel extends GridviewPanel {
|
|
|
5170
5486
|
}
|
|
5171
5487
|
constructor(accessor, id, options) {
|
|
5172
5488
|
super(id, 'groupview_default', {
|
|
5173
|
-
minimumHeight:
|
|
5174
|
-
minimumWidth:
|
|
5489
|
+
minimumHeight: MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
|
|
5490
|
+
minimumWidth: MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
|
|
5175
5491
|
}, new DockviewGroupPanelApiImpl(id, accessor));
|
|
5176
5492
|
this.api.initialize(this); // cannot use 'this' after after 'super' call
|
|
5177
5493
|
this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
|
|
@@ -5225,8 +5541,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
5225
5541
|
return this.panel.title;
|
|
5226
5542
|
}
|
|
5227
5543
|
get isGroupActive() {
|
|
5228
|
-
|
|
5229
|
-
|
|
5544
|
+
return this.group.isActive;
|
|
5545
|
+
}
|
|
5546
|
+
get renderer() {
|
|
5547
|
+
return this.panel.renderer;
|
|
5230
5548
|
}
|
|
5231
5549
|
set group(value) {
|
|
5232
5550
|
const isOldGroupActive = this.isGroupActive;
|
|
@@ -5254,10 +5572,12 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
5254
5572
|
this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
|
5255
5573
|
this._onDidGroupChange = new Emitter();
|
|
5256
5574
|
this.onDidGroupChange = this._onDidGroupChange.event;
|
|
5575
|
+
this._onDidRendererChange = new Emitter();
|
|
5576
|
+
this.onDidRendererChange = this._onDidRendererChange.event;
|
|
5257
5577
|
this.disposable = new MutableDisposable();
|
|
5258
5578
|
this.initialize(panel);
|
|
5259
5579
|
this._group = group;
|
|
5260
|
-
this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
|
|
5580
|
+
this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
|
|
5261
5581
|
}
|
|
5262
5582
|
moveTo(options) {
|
|
5263
5583
|
var _a;
|
|
@@ -5266,9 +5586,21 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
5266
5586
|
setTitle(title) {
|
|
5267
5587
|
this.panel.setTitle(title);
|
|
5268
5588
|
}
|
|
5589
|
+
setRenderer(renderer) {
|
|
5590
|
+
this.panel.setRenderer(renderer);
|
|
5591
|
+
}
|
|
5269
5592
|
close() {
|
|
5270
5593
|
this.group.model.closePanel(this.panel);
|
|
5271
5594
|
}
|
|
5595
|
+
maximize() {
|
|
5596
|
+
this.group.api.maximize();
|
|
5597
|
+
}
|
|
5598
|
+
isMaximized() {
|
|
5599
|
+
return this.group.api.isMaximized();
|
|
5600
|
+
}
|
|
5601
|
+
exitMaximized() {
|
|
5602
|
+
this.group.api.exitMaximized();
|
|
5603
|
+
}
|
|
5272
5604
|
}
|
|
5273
5605
|
|
|
5274
5606
|
class DockviewPanel extends CompositeDisposable {
|
|
@@ -5281,11 +5613,17 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
5281
5613
|
get group() {
|
|
5282
5614
|
return this._group;
|
|
5283
5615
|
}
|
|
5284
|
-
|
|
5616
|
+
get renderer() {
|
|
5617
|
+
var _a;
|
|
5618
|
+
return (_a = this._renderer) !== null && _a !== void 0 ? _a : this.accessor.renderer;
|
|
5619
|
+
}
|
|
5620
|
+
constructor(id, accessor, containerApi, group, view, options) {
|
|
5285
5621
|
super();
|
|
5286
5622
|
this.id = id;
|
|
5623
|
+
this.accessor = accessor;
|
|
5287
5624
|
this.containerApi = containerApi;
|
|
5288
5625
|
this.view = view;
|
|
5626
|
+
this._renderer = options.renderer;
|
|
5289
5627
|
this._group = group;
|
|
5290
5628
|
this.api = new DockviewPanelApiImpl(this, this._group, accessor);
|
|
5291
5629
|
this.addDisposables(this.api.onActiveChange(() => {
|
|
@@ -5294,6 +5632,8 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
5294
5632
|
// forward the resize event to the group since if you want to resize a panel
|
|
5295
5633
|
// you are actually just resizing the panels parent which is the group
|
|
5296
5634
|
this.group.api.setSize(event);
|
|
5635
|
+
}), this.api.onDidRendererChange((event) => {
|
|
5636
|
+
this.group.model.rerender(this);
|
|
5297
5637
|
}));
|
|
5298
5638
|
}
|
|
5299
5639
|
init(params) {
|
|
@@ -5313,6 +5653,7 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
5313
5653
|
? this._params
|
|
5314
5654
|
: undefined,
|
|
5315
5655
|
title: this.title,
|
|
5656
|
+
renderer: this._renderer,
|
|
5316
5657
|
};
|
|
5317
5658
|
}
|
|
5318
5659
|
setTitle(title) {
|
|
@@ -5328,6 +5669,15 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
5328
5669
|
this.api._onDidTitleChange.fire({ title });
|
|
5329
5670
|
}
|
|
5330
5671
|
}
|
|
5672
|
+
setRenderer(renderer) {
|
|
5673
|
+
const didChange = renderer !== this.renderer;
|
|
5674
|
+
if (didChange) {
|
|
5675
|
+
this._renderer = renderer;
|
|
5676
|
+
this.api._onDidRendererChange.fire({
|
|
5677
|
+
renderer: renderer,
|
|
5678
|
+
});
|
|
5679
|
+
}
|
|
5680
|
+
}
|
|
5331
5681
|
update(event) {
|
|
5332
5682
|
var _a;
|
|
5333
5683
|
// merge the new parameters with the existing parameters
|
|
@@ -5546,8 +5896,8 @@ class DockviewPanelModel {
|
|
|
5546
5896
|
}
|
|
5547
5897
|
|
|
5548
5898
|
class DefaultDockviewDeserialzier {
|
|
5549
|
-
constructor(
|
|
5550
|
-
this.
|
|
5899
|
+
constructor(accessor) {
|
|
5900
|
+
this.accessor = accessor;
|
|
5551
5901
|
}
|
|
5552
5902
|
fromJSON(panelData, group) {
|
|
5553
5903
|
var _a, _b;
|
|
@@ -5561,8 +5911,10 @@ class DefaultDockviewDeserialzier {
|
|
|
5561
5911
|
const tabComponent = viewData
|
|
5562
5912
|
? (_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id
|
|
5563
5913
|
: panelData.tabComponent;
|
|
5564
|
-
const view = new DockviewPanelModel(this.
|
|
5565
|
-
const panel = new DockviewPanel(panelId, this.
|
|
5914
|
+
const view = new DockviewPanelModel(this.accessor, panelId, contentComponent, tabComponent);
|
|
5915
|
+
const panel = new DockviewPanel(panelId, this.accessor, new DockviewApi(this.accessor), group, view, {
|
|
5916
|
+
renderer: panelData.renderer,
|
|
5917
|
+
});
|
|
5566
5918
|
panel.init({
|
|
5567
5919
|
title: title !== null && title !== void 0 ? title : panelId,
|
|
5568
5920
|
params: params !== null && params !== void 0 ? params : {},
|
|
@@ -5942,7 +6294,265 @@ class DockviewFloatingGroupPanel extends CompositeDisposable {
|
|
|
5942
6294
|
}
|
|
5943
6295
|
}
|
|
5944
6296
|
|
|
6297
|
+
class PopoutWindow extends CompositeDisposable {
|
|
6298
|
+
constructor(id, className, options) {
|
|
6299
|
+
super();
|
|
6300
|
+
this.id = id;
|
|
6301
|
+
this.className = className;
|
|
6302
|
+
this.options = options;
|
|
6303
|
+
this._onDidClose = new Emitter();
|
|
6304
|
+
this.onDidClose = this._onDidClose.event;
|
|
6305
|
+
this._window = null;
|
|
6306
|
+
this.addDisposables(this._onDidClose, {
|
|
6307
|
+
dispose: () => {
|
|
6308
|
+
this.close();
|
|
6309
|
+
},
|
|
6310
|
+
});
|
|
6311
|
+
}
|
|
6312
|
+
dimensions() {
|
|
6313
|
+
if (!this._window) {
|
|
6314
|
+
return null;
|
|
6315
|
+
}
|
|
6316
|
+
const left = this._window.value.screenX;
|
|
6317
|
+
const top = this._window.value.screenY;
|
|
6318
|
+
const width = this._window.value.innerWidth;
|
|
6319
|
+
const height = this._window.value.innerHeight;
|
|
6320
|
+
return { top, left, width, height };
|
|
6321
|
+
}
|
|
6322
|
+
close() {
|
|
6323
|
+
if (this._window) {
|
|
6324
|
+
this._window.disposable.dispose();
|
|
6325
|
+
this._window.value.close();
|
|
6326
|
+
this._window = null;
|
|
6327
|
+
}
|
|
6328
|
+
}
|
|
6329
|
+
open(content) {
|
|
6330
|
+
if (this._window) {
|
|
6331
|
+
throw new Error('instance of popout window is already open');
|
|
6332
|
+
}
|
|
6333
|
+
const url = `${this.options.url}`;
|
|
6334
|
+
const features = Object.entries({
|
|
6335
|
+
top: this.options.top,
|
|
6336
|
+
left: this.options.left,
|
|
6337
|
+
width: this.options.width,
|
|
6338
|
+
height: this.options.height,
|
|
6339
|
+
})
|
|
6340
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
6341
|
+
.join(',');
|
|
6342
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Window/open
|
|
6343
|
+
const externalWindow = window.open(url, this.id, features);
|
|
6344
|
+
if (!externalWindow) {
|
|
6345
|
+
return;
|
|
6346
|
+
}
|
|
6347
|
+
const disposable = new CompositeDisposable();
|
|
6348
|
+
this._window = { value: externalWindow, disposable };
|
|
6349
|
+
const cleanUp = () => {
|
|
6350
|
+
this._onDidClose.fire();
|
|
6351
|
+
this._window = null;
|
|
6352
|
+
};
|
|
6353
|
+
// prevent any default content from loading
|
|
6354
|
+
// externalWindow.document.body.replaceWith(document.createElement('div'));
|
|
6355
|
+
disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
|
|
6356
|
+
cleanUp();
|
|
6357
|
+
this.close();
|
|
6358
|
+
}));
|
|
6359
|
+
externalWindow.addEventListener('load', () => {
|
|
6360
|
+
const externalDocument = externalWindow.document;
|
|
6361
|
+
externalDocument.title = document.title;
|
|
6362
|
+
const div = document.createElement('div');
|
|
6363
|
+
div.classList.add('dv-popout-window');
|
|
6364
|
+
div.style.position = 'absolute';
|
|
6365
|
+
div.style.width = '100%';
|
|
6366
|
+
div.style.height = '100%';
|
|
6367
|
+
div.style.top = '0px';
|
|
6368
|
+
div.style.left = '0px';
|
|
6369
|
+
div.classList.add(this.className);
|
|
6370
|
+
div.appendChild(content);
|
|
6371
|
+
externalDocument.body.replaceChildren(div);
|
|
6372
|
+
externalDocument.body.classList.add(this.className);
|
|
6373
|
+
addStyles(externalDocument, window.document.styleSheets);
|
|
6374
|
+
externalWindow.addEventListener('beforeunload', () => {
|
|
6375
|
+
// TODO: indicate external window is closing
|
|
6376
|
+
cleanUp();
|
|
6377
|
+
});
|
|
6378
|
+
});
|
|
6379
|
+
}
|
|
6380
|
+
}
|
|
6381
|
+
|
|
6382
|
+
class DockviewPopoutGroupPanel extends CompositeDisposable {
|
|
6383
|
+
constructor(id, group, options) {
|
|
6384
|
+
var _a;
|
|
6385
|
+
super();
|
|
6386
|
+
this.id = id;
|
|
6387
|
+
this.group = group;
|
|
6388
|
+
this.options = options;
|
|
6389
|
+
this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
|
|
6390
|
+
url: this.options.popoutUrl,
|
|
6391
|
+
left: this.options.box.left,
|
|
6392
|
+
top: this.options.box.top,
|
|
6393
|
+
width: this.options.box.width,
|
|
6394
|
+
height: this.options.box.height,
|
|
6395
|
+
});
|
|
6396
|
+
group.model.location = 'popout';
|
|
6397
|
+
this.addDisposables(this.window, {
|
|
6398
|
+
dispose: () => {
|
|
6399
|
+
group.model.location = 'grid';
|
|
6400
|
+
},
|
|
6401
|
+
}, this.window.onDidClose(() => {
|
|
6402
|
+
this.dispose();
|
|
6403
|
+
}));
|
|
6404
|
+
this.window.open(group.element);
|
|
6405
|
+
}
|
|
6406
|
+
}
|
|
6407
|
+
|
|
5945
6408
|
const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
|
|
6409
|
+
const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
|
|
6410
|
+
|
|
6411
|
+
function createFocusableElement() {
|
|
6412
|
+
const element = document.createElement('div');
|
|
6413
|
+
element.tabIndex = -1;
|
|
6414
|
+
return element;
|
|
6415
|
+
}
|
|
6416
|
+
class OverlayRenderContainer extends CompositeDisposable {
|
|
6417
|
+
constructor(element) {
|
|
6418
|
+
super();
|
|
6419
|
+
this.element = element;
|
|
6420
|
+
this.map = {};
|
|
6421
|
+
this.addDisposables(Disposable.from(() => {
|
|
6422
|
+
for (const value of Object.values(this.map)) {
|
|
6423
|
+
value.disposable.dispose();
|
|
6424
|
+
value.destroy.dispose();
|
|
6425
|
+
}
|
|
6426
|
+
}));
|
|
6427
|
+
}
|
|
6428
|
+
detatch(panel) {
|
|
6429
|
+
if (this.map[panel.api.id]) {
|
|
6430
|
+
const { disposable, destroy } = this.map[panel.api.id];
|
|
6431
|
+
disposable.dispose();
|
|
6432
|
+
destroy.dispose();
|
|
6433
|
+
delete this.map[panel.api.id];
|
|
6434
|
+
return true;
|
|
6435
|
+
}
|
|
6436
|
+
return false;
|
|
6437
|
+
}
|
|
6438
|
+
attach(options) {
|
|
6439
|
+
const { panel, referenceContainer } = options;
|
|
6440
|
+
if (!this.map[panel.api.id]) {
|
|
6441
|
+
const element = createFocusableElement();
|
|
6442
|
+
element.className = 'dv-render-overlay';
|
|
6443
|
+
this.map[panel.api.id] = {
|
|
6444
|
+
panel,
|
|
6445
|
+
disposable: Disposable.NONE,
|
|
6446
|
+
destroy: Disposable.NONE,
|
|
6447
|
+
element,
|
|
6448
|
+
};
|
|
6449
|
+
}
|
|
6450
|
+
const focusContainer = this.map[panel.api.id].element;
|
|
6451
|
+
if (panel.view.content.element.parentElement !== focusContainer) {
|
|
6452
|
+
focusContainer.appendChild(panel.view.content.element);
|
|
6453
|
+
}
|
|
6454
|
+
if (focusContainer.parentElement !== this.element) {
|
|
6455
|
+
this.element.appendChild(focusContainer);
|
|
6456
|
+
}
|
|
6457
|
+
const resize = () => {
|
|
6458
|
+
// TODO propagate position to avoid getDomNodePagePosition calls, possible performance bottleneck?
|
|
6459
|
+
const box = getDomNodePagePosition(referenceContainer.element);
|
|
6460
|
+
const box2 = getDomNodePagePosition(this.element);
|
|
6461
|
+
focusContainer.style.left = `${box.left - box2.left}px`;
|
|
6462
|
+
focusContainer.style.top = `${box.top - box2.top}px`;
|
|
6463
|
+
focusContainer.style.width = `${box.width}px`;
|
|
6464
|
+
focusContainer.style.height = `${box.height}px`;
|
|
6465
|
+
toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
|
|
6466
|
+
};
|
|
6467
|
+
const visibilityChanged = () => {
|
|
6468
|
+
if (panel.api.isVisible) {
|
|
6469
|
+
resize();
|
|
6470
|
+
}
|
|
6471
|
+
focusContainer.style.display = panel.api.isVisible ? '' : 'none';
|
|
6472
|
+
};
|
|
6473
|
+
const disposable = new CompositeDisposable(
|
|
6474
|
+
/**
|
|
6475
|
+
* since container is positioned absoutely we must explicitly forward
|
|
6476
|
+
* the dnd events for the expect behaviours to continue to occur in terms of dnd
|
|
6477
|
+
*
|
|
6478
|
+
* the dnd observer does not need to be conditional on whether the panel is visible since
|
|
6479
|
+
* non-visible panels are 'display: none' and in such case the dnd observer will not fire.
|
|
6480
|
+
*/
|
|
6481
|
+
new DragAndDropObserver(focusContainer, {
|
|
6482
|
+
onDragEnd: (e) => {
|
|
6483
|
+
referenceContainer.dropTarget.dnd.onDragEnd(e);
|
|
6484
|
+
},
|
|
6485
|
+
onDragEnter: (e) => {
|
|
6486
|
+
referenceContainer.dropTarget.dnd.onDragEnter(e);
|
|
6487
|
+
},
|
|
6488
|
+
onDragLeave: (e) => {
|
|
6489
|
+
referenceContainer.dropTarget.dnd.onDragLeave(e);
|
|
6490
|
+
},
|
|
6491
|
+
onDrop: (e) => {
|
|
6492
|
+
referenceContainer.dropTarget.dnd.onDrop(e);
|
|
6493
|
+
},
|
|
6494
|
+
onDragOver: (e) => {
|
|
6495
|
+
referenceContainer.dropTarget.dnd.onDragOver(e);
|
|
6496
|
+
},
|
|
6497
|
+
}), panel.api.onDidVisibilityChange((event) => {
|
|
6498
|
+
/**
|
|
6499
|
+
* Control the visibility of the content, however even when not visible (display: none)
|
|
6500
|
+
* the content is still maintained within the DOM hence DOM specific attributes
|
|
6501
|
+
* such as scroll position are maintained when next made visible.
|
|
6502
|
+
*/
|
|
6503
|
+
visibilityChanged();
|
|
6504
|
+
}), panel.api.onDidDimensionsChange(() => {
|
|
6505
|
+
if (!panel.api.isVisible) {
|
|
6506
|
+
return;
|
|
6507
|
+
}
|
|
6508
|
+
resize();
|
|
6509
|
+
}));
|
|
6510
|
+
this.map[panel.api.id].destroy = Disposable.from(() => {
|
|
6511
|
+
focusContainer.removeChild(panel.view.content.element);
|
|
6512
|
+
this.element.removeChild(focusContainer);
|
|
6513
|
+
});
|
|
6514
|
+
queueMicrotask(() => {
|
|
6515
|
+
if (this.isDisposed) {
|
|
6516
|
+
return;
|
|
6517
|
+
}
|
|
6518
|
+
/**
|
|
6519
|
+
* wait until everything has finished in the current stack-frame call before
|
|
6520
|
+
* calling the first resize as other size-altering events may still occur before
|
|
6521
|
+
* the end of the stack-frame.
|
|
6522
|
+
*/
|
|
6523
|
+
visibilityChanged();
|
|
6524
|
+
});
|
|
6525
|
+
// dispose of logic asoccciated with previous reference-container
|
|
6526
|
+
this.map[panel.api.id].disposable.dispose();
|
|
6527
|
+
// and reset the disposable to the active reference-container
|
|
6528
|
+
this.map[panel.api.id].disposable = disposable;
|
|
6529
|
+
return focusContainer;
|
|
6530
|
+
}
|
|
6531
|
+
}
|
|
6532
|
+
|
|
6533
|
+
const DEFAULT_ROOT_OVERLAY_MODEL = {
|
|
6534
|
+
activationSize: { type: 'pixels', value: 10 },
|
|
6535
|
+
size: { type: 'pixels', value: 20 },
|
|
6536
|
+
};
|
|
6537
|
+
function getTheme(element) {
|
|
6538
|
+
function toClassList(element) {
|
|
6539
|
+
const list = [];
|
|
6540
|
+
for (let i = 0; i < element.classList.length; i++) {
|
|
6541
|
+
list.push(element.classList.item(i));
|
|
6542
|
+
}
|
|
6543
|
+
return list;
|
|
6544
|
+
}
|
|
6545
|
+
let theme = undefined;
|
|
6546
|
+
let parent = element;
|
|
6547
|
+
while (parent !== null) {
|
|
6548
|
+
theme = toClassList(parent).find((cls) => cls.startsWith('dockview-theme-'));
|
|
6549
|
+
if (typeof theme === 'string') {
|
|
6550
|
+
break;
|
|
6551
|
+
}
|
|
6552
|
+
parent = parent.parentElement;
|
|
6553
|
+
}
|
|
6554
|
+
return theme;
|
|
6555
|
+
}
|
|
5946
6556
|
class DockviewComponent extends BaseGrid {
|
|
5947
6557
|
get orientation() {
|
|
5948
6558
|
return this.gridview.orientation;
|
|
@@ -5963,8 +6573,12 @@ class DockviewComponent extends BaseGrid {
|
|
|
5963
6573
|
}
|
|
5964
6574
|
return activeGroup.activePanel;
|
|
5965
6575
|
}
|
|
5966
|
-
|
|
6576
|
+
get renderer() {
|
|
5967
6577
|
var _a;
|
|
6578
|
+
return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisibile';
|
|
6579
|
+
}
|
|
6580
|
+
constructor(options) {
|
|
6581
|
+
var _a, _b;
|
|
5968
6582
|
super({
|
|
5969
6583
|
proportionalLayout: true,
|
|
5970
6584
|
orientation: (_a = options.orientation) !== null && _a !== void 0 ? _a : Orientation.HORIZONTAL,
|
|
@@ -5989,12 +6603,27 @@ class DockviewComponent extends BaseGrid {
|
|
|
5989
6603
|
this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
|
|
5990
6604
|
this._onDidActivePanelChange = new Emitter();
|
|
5991
6605
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
5992
|
-
this.
|
|
6606
|
+
this._floatingGroups = [];
|
|
6607
|
+
this._popoutGroups = [];
|
|
6608
|
+
const gready = document.createElement('div');
|
|
6609
|
+
gready.className = 'dv-overlay-render-container';
|
|
6610
|
+
this.gridview.element.appendChild(gready);
|
|
6611
|
+
this.overlayRenderContainer = new OverlayRenderContainer(gready);
|
|
5993
6612
|
toggleClass(this.gridview.element, 'dv-dockview', true);
|
|
5994
|
-
|
|
6613
|
+
toggleClass(this.element, 'dv-debug', !!options.debug);
|
|
6614
|
+
this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
|
|
5995
6615
|
this.updateWatermark();
|
|
5996
6616
|
}), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
|
|
5997
6617
|
this._bufferOnDidLayoutChange.fire();
|
|
6618
|
+
}), Disposable.from(() => {
|
|
6619
|
+
// iterate over a copy of the array since .dispose() mutates the original array
|
|
6620
|
+
for (const group of [...this._floatingGroups]) {
|
|
6621
|
+
group.dispose();
|
|
6622
|
+
}
|
|
6623
|
+
// iterate over a copy of the array since .dispose() mutates the original array
|
|
6624
|
+
for (const group of [...this._popoutGroups]) {
|
|
6625
|
+
group.dispose();
|
|
6626
|
+
}
|
|
5998
6627
|
}));
|
|
5999
6628
|
this._options = options;
|
|
6000
6629
|
if (!this.options.components) {
|
|
@@ -6013,7 +6642,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
6013
6642
|
!this.options.watermarkFrameworkComponent) {
|
|
6014
6643
|
this.options.watermarkComponent = Watermark;
|
|
6015
6644
|
}
|
|
6016
|
-
|
|
6645
|
+
this._rootDropTarget = new Droptarget(this.element, {
|
|
6017
6646
|
canDisplayOverlay: (event, position) => {
|
|
6018
6647
|
const data = getPanelData();
|
|
6019
6648
|
if (data) {
|
|
@@ -6046,12 +6675,9 @@ class DockviewComponent extends BaseGrid {
|
|
|
6046
6675
|
return false;
|
|
6047
6676
|
},
|
|
6048
6677
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
6049
|
-
overlayModel:
|
|
6050
|
-
activationSize: { type: 'pixels', value: 10 },
|
|
6051
|
-
size: { type: 'pixels', value: 20 },
|
|
6052
|
-
},
|
|
6678
|
+
overlayModel: (_b = this.options.rootOverlayModel) !== null && _b !== void 0 ? _b : DEFAULT_ROOT_OVERLAY_MODEL,
|
|
6053
6679
|
});
|
|
6054
|
-
this.addDisposables(
|
|
6680
|
+
this.addDisposables(this._rootDropTarget.onDrop((event) => {
|
|
6055
6681
|
var _a;
|
|
6056
6682
|
const data = getPanelData();
|
|
6057
6683
|
if (data) {
|
|
@@ -6060,10 +6686,59 @@ class DockviewComponent extends BaseGrid {
|
|
|
6060
6686
|
else {
|
|
6061
6687
|
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
|
|
6062
6688
|
}
|
|
6063
|
-
}),
|
|
6689
|
+
}), this._rootDropTarget);
|
|
6064
6690
|
this._api = new DockviewApi(this);
|
|
6065
6691
|
this.updateWatermark();
|
|
6066
6692
|
}
|
|
6693
|
+
addPopoutGroup(item, options) {
|
|
6694
|
+
var _a;
|
|
6695
|
+
let group;
|
|
6696
|
+
let box = options === null || options === void 0 ? void 0 : options.position;
|
|
6697
|
+
if (item instanceof DockviewPanel) {
|
|
6698
|
+
group = this.createGroup();
|
|
6699
|
+
this.removePanel(item, {
|
|
6700
|
+
removeEmptyGroup: true,
|
|
6701
|
+
skipDispose: true,
|
|
6702
|
+
});
|
|
6703
|
+
group.model.openPanel(item);
|
|
6704
|
+
if (!box) {
|
|
6705
|
+
box = this.element.getBoundingClientRect();
|
|
6706
|
+
}
|
|
6707
|
+
}
|
|
6708
|
+
else {
|
|
6709
|
+
group = item;
|
|
6710
|
+
if (!box) {
|
|
6711
|
+
box = group.element.getBoundingClientRect();
|
|
6712
|
+
}
|
|
6713
|
+
const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
|
|
6714
|
+
options.skipRemoveGroup;
|
|
6715
|
+
if (!skip) {
|
|
6716
|
+
this.doRemoveGroup(item, { skipDispose: true });
|
|
6717
|
+
}
|
|
6718
|
+
}
|
|
6719
|
+
const theme = getTheme(this.gridview.element);
|
|
6720
|
+
const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
|
|
6721
|
+
group, {
|
|
6722
|
+
className: theme !== null && theme !== void 0 ? theme : '',
|
|
6723
|
+
popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
|
|
6724
|
+
box: {
|
|
6725
|
+
left: window.screenX + box.left,
|
|
6726
|
+
top: window.screenY + box.top,
|
|
6727
|
+
width: box.width,
|
|
6728
|
+
height: box.height,
|
|
6729
|
+
},
|
|
6730
|
+
});
|
|
6731
|
+
popoutWindow.addDisposables({
|
|
6732
|
+
dispose: () => {
|
|
6733
|
+
remove(this._popoutGroups, popoutWindow);
|
|
6734
|
+
this.updateWatermark();
|
|
6735
|
+
},
|
|
6736
|
+
}, popoutWindow.window.onDidClose(() => {
|
|
6737
|
+
this.doAddGroup(group, [0]);
|
|
6738
|
+
}));
|
|
6739
|
+
this._popoutGroups.push(popoutWindow);
|
|
6740
|
+
this.updateWatermark();
|
|
6741
|
+
}
|
|
6067
6742
|
addFloatingGroup(item, coord, options) {
|
|
6068
6743
|
var _a, _b, _c, _d, _e, _f;
|
|
6069
6744
|
let group;
|
|
@@ -6083,9 +6758,13 @@ class DockviewComponent extends BaseGrid {
|
|
|
6083
6758
|
this.doRemoveGroup(item, { skipDispose: true });
|
|
6084
6759
|
}
|
|
6085
6760
|
}
|
|
6086
|
-
group.model.
|
|
6087
|
-
const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
|
|
6088
|
-
|
|
6761
|
+
group.model.location = 'floating';
|
|
6762
|
+
const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
|
|
6763
|
+
? Math.max(coord.x, 0)
|
|
6764
|
+
: DEFAULT_FLOATING_GROUP_POSITION.left;
|
|
6765
|
+
const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
|
|
6766
|
+
? Math.max(coord.y, 0)
|
|
6767
|
+
: DEFAULT_FLOATING_GROUP_POSITION.top;
|
|
6089
6768
|
const overlay = new Overlay({
|
|
6090
6769
|
container: this.gridview.element,
|
|
6091
6770
|
content: group.element,
|
|
@@ -6129,12 +6808,12 @@ class DockviewComponent extends BaseGrid {
|
|
|
6129
6808
|
}), {
|
|
6130
6809
|
dispose: () => {
|
|
6131
6810
|
disposable.dispose();
|
|
6132
|
-
group.model.
|
|
6133
|
-
remove(this.
|
|
6811
|
+
group.model.location = 'grid';
|
|
6812
|
+
remove(this._floatingGroups, floatingGroupPanel);
|
|
6134
6813
|
this.updateWatermark();
|
|
6135
6814
|
},
|
|
6136
6815
|
});
|
|
6137
|
-
this.
|
|
6816
|
+
this._floatingGroups.push(floatingGroupPanel);
|
|
6138
6817
|
this.updateWatermark();
|
|
6139
6818
|
}
|
|
6140
6819
|
orthogonalize(position) {
|
|
@@ -6170,16 +6849,18 @@ class DockviewComponent extends BaseGrid {
|
|
|
6170
6849
|
}
|
|
6171
6850
|
updateOptions(options) {
|
|
6172
6851
|
var _a, _b;
|
|
6173
|
-
const
|
|
6852
|
+
const changed_orientation = typeof options.orientation === 'string' &&
|
|
6174
6853
|
this.gridview.orientation !== options.orientation;
|
|
6175
|
-
const
|
|
6854
|
+
const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
|
|
6176
6855
|
options.floatingGroupBounds !== this.options.floatingGroupBounds;
|
|
6856
|
+
const changed_rootOverlayOptions = options.rootOverlayModel !== undefined &&
|
|
6857
|
+
options.rootOverlayModel !== this.options.rootOverlayModel;
|
|
6177
6858
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
6178
|
-
if (
|
|
6859
|
+
if (changed_orientation) {
|
|
6179
6860
|
this.gridview.orientation = options.orientation;
|
|
6180
6861
|
}
|
|
6181
|
-
if (
|
|
6182
|
-
for (const group of this.
|
|
6862
|
+
if (changed_floatingGroupBounds) {
|
|
6863
|
+
for (const group of this._floatingGroups) {
|
|
6183
6864
|
switch (this.options.floatingGroupBounds) {
|
|
6184
6865
|
case 'boundedWithinViewport':
|
|
6185
6866
|
group.overlay.minimumInViewportHeight = undefined;
|
|
@@ -6200,12 +6881,15 @@ class DockviewComponent extends BaseGrid {
|
|
|
6200
6881
|
group.overlay.setBounds({});
|
|
6201
6882
|
}
|
|
6202
6883
|
}
|
|
6884
|
+
if (changed_rootOverlayOptions) {
|
|
6885
|
+
this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
|
|
6886
|
+
}
|
|
6203
6887
|
this.layout(this.gridview.width, this.gridview.height, true);
|
|
6204
6888
|
}
|
|
6205
6889
|
layout(width, height, forceResize) {
|
|
6206
6890
|
super.layout(width, height, forceResize);
|
|
6207
|
-
if (this.
|
|
6208
|
-
for (const floating of this.
|
|
6891
|
+
if (this._floatingGroups) {
|
|
6892
|
+
for (const floating of this._floatingGroups) {
|
|
6209
6893
|
// ensure floting groups stay within visible boundaries
|
|
6210
6894
|
floating.overlay.setBounds();
|
|
6211
6895
|
}
|
|
@@ -6273,10 +6957,16 @@ class DockviewComponent extends BaseGrid {
|
|
|
6273
6957
|
collection[panel.id] = panel.toJSON();
|
|
6274
6958
|
return collection;
|
|
6275
6959
|
}, {});
|
|
6276
|
-
const floats = this.
|
|
6960
|
+
const floats = this._floatingGroups.map((group) => {
|
|
6277
6961
|
return {
|
|
6278
|
-
data:
|
|
6279
|
-
position:
|
|
6962
|
+
data: group.group.toJSON(),
|
|
6963
|
+
position: group.overlay.toJSON(),
|
|
6964
|
+
};
|
|
6965
|
+
});
|
|
6966
|
+
const popoutGroups = this._popoutGroups.map((group) => {
|
|
6967
|
+
return {
|
|
6968
|
+
data: group.group.toJSON(),
|
|
6969
|
+
position: group.window.dimensions(),
|
|
6280
6970
|
};
|
|
6281
6971
|
});
|
|
6282
6972
|
const result = {
|
|
@@ -6287,10 +6977,13 @@ class DockviewComponent extends BaseGrid {
|
|
|
6287
6977
|
if (floats.length > 0) {
|
|
6288
6978
|
result.floatingGroups = floats;
|
|
6289
6979
|
}
|
|
6980
|
+
if (popoutGroups.length > 0) {
|
|
6981
|
+
result.popoutGroups = popoutGroups;
|
|
6982
|
+
}
|
|
6290
6983
|
return result;
|
|
6291
6984
|
}
|
|
6292
6985
|
fromJSON(data) {
|
|
6293
|
-
var _a;
|
|
6986
|
+
var _a, _b;
|
|
6294
6987
|
this.clear();
|
|
6295
6988
|
if (typeof data !== 'object' || data === null) {
|
|
6296
6989
|
throw new Error('serialized layout must be a non-null object');
|
|
@@ -6357,7 +7050,16 @@ class DockviewComponent extends BaseGrid {
|
|
|
6357
7050
|
width: position.width,
|
|
6358
7051
|
}, { skipRemoveGroup: true, inDragMode: false });
|
|
6359
7052
|
}
|
|
6360
|
-
|
|
7053
|
+
const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
|
|
7054
|
+
for (const serializedPopoutGroup of serializedPopoutGroups) {
|
|
7055
|
+
const { data, position } = serializedPopoutGroup;
|
|
7056
|
+
const group = createGroupFromSerializedState(data);
|
|
7057
|
+
this.addPopoutGroup(group, {
|
|
7058
|
+
skipRemoveGroup: true,
|
|
7059
|
+
position: position !== null && position !== void 0 ? position : undefined,
|
|
7060
|
+
});
|
|
7061
|
+
}
|
|
7062
|
+
for (const floatingGroup of this._floatingGroups) {
|
|
6361
7063
|
floatingGroup.overlay.setBounds();
|
|
6362
7064
|
}
|
|
6363
7065
|
if (typeof activeGroup === 'string') {
|
|
@@ -6389,7 +7091,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
6389
7091
|
this._onDidRemoveGroup.fire(group);
|
|
6390
7092
|
}
|
|
6391
7093
|
// iterate over a reassigned array since original array will be modified
|
|
6392
|
-
for (const floatingGroup of [...this.
|
|
7094
|
+
for (const floatingGroup of [...this._floatingGroups]) {
|
|
6393
7095
|
floatingGroup.dispose();
|
|
6394
7096
|
}
|
|
6395
7097
|
// fires clean-up events and clears the underlying HTML gridview.
|
|
@@ -6481,7 +7183,8 @@ class DockviewComponent extends BaseGrid {
|
|
|
6481
7183
|
group.model.openPanel(panel);
|
|
6482
7184
|
this.doSetGroupAndPanelActive(group);
|
|
6483
7185
|
}
|
|
6484
|
-
else if (referenceGroup.api.
|
|
7186
|
+
else if (referenceGroup.api.location === 'floating' ||
|
|
7187
|
+
target === 'center') {
|
|
6485
7188
|
panel = this.createPanel(options, referenceGroup);
|
|
6486
7189
|
referenceGroup.model.openPanel(panel);
|
|
6487
7190
|
}
|
|
@@ -6525,6 +7228,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
6525
7228
|
}
|
|
6526
7229
|
group.model.removePanel(panel);
|
|
6527
7230
|
if (!options.skipDispose) {
|
|
7231
|
+
this.overlayRenderContainer.detatch(panel);
|
|
6528
7232
|
panel.dispose();
|
|
6529
7233
|
}
|
|
6530
7234
|
if (group.size === 0 && options.removeEmptyGroup) {
|
|
@@ -6541,7 +7245,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
6541
7245
|
}
|
|
6542
7246
|
updateWatermark() {
|
|
6543
7247
|
var _a, _b;
|
|
6544
|
-
if (this.groups.filter((x) =>
|
|
7248
|
+
if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
|
|
6545
7249
|
if (!this.watermark) {
|
|
6546
7250
|
this.watermark = this.createWatermarkComponent();
|
|
6547
7251
|
this.watermark.init({
|
|
@@ -6616,19 +7320,40 @@ class DockviewComponent extends BaseGrid {
|
|
|
6616
7320
|
}
|
|
6617
7321
|
}
|
|
6618
7322
|
doRemoveGroup(group, options) {
|
|
6619
|
-
|
|
6620
|
-
|
|
6621
|
-
if (
|
|
6622
|
-
|
|
6623
|
-
|
|
6624
|
-
|
|
7323
|
+
if (group.api.location === 'floating') {
|
|
7324
|
+
const floatingGroup = this._floatingGroups.find((_) => _.group === group);
|
|
7325
|
+
if (floatingGroup) {
|
|
7326
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
7327
|
+
floatingGroup.group.dispose();
|
|
7328
|
+
this._groups.delete(group.id);
|
|
7329
|
+
this._onDidRemoveGroup.fire(group);
|
|
7330
|
+
}
|
|
7331
|
+
remove(this._floatingGroups, floatingGroup);
|
|
7332
|
+
floatingGroup.dispose();
|
|
7333
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
7334
|
+
const groups = Array.from(this._groups.values());
|
|
7335
|
+
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
7336
|
+
}
|
|
7337
|
+
return floatingGroup.group;
|
|
6625
7338
|
}
|
|
6626
|
-
|
|
6627
|
-
|
|
6628
|
-
|
|
6629
|
-
|
|
7339
|
+
throw new Error('failed to find floating group');
|
|
7340
|
+
}
|
|
7341
|
+
if (group.api.location === 'popout') {
|
|
7342
|
+
const selectedGroup = this._popoutGroups.find((_) => _.group === group);
|
|
7343
|
+
if (selectedGroup) {
|
|
7344
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
7345
|
+
selectedGroup.group.dispose();
|
|
7346
|
+
this._groups.delete(group.id);
|
|
7347
|
+
this._onDidRemoveGroup.fire(group);
|
|
7348
|
+
}
|
|
7349
|
+
selectedGroup.dispose();
|
|
7350
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
7351
|
+
const groups = Array.from(this._groups.values());
|
|
7352
|
+
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
7353
|
+
}
|
|
7354
|
+
return selectedGroup.group;
|
|
6630
7355
|
}
|
|
6631
|
-
|
|
7356
|
+
throw new Error('failed to find popout group');
|
|
6632
7357
|
}
|
|
6633
7358
|
return super.doRemoveGroup(group, options);
|
|
6634
7359
|
}
|
|
@@ -6660,8 +7385,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
6660
7385
|
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
6661
7386
|
if (sourceGroup && sourceGroup.size < 2) {
|
|
6662
7387
|
const [targetParentLocation, to] = tail(targetLocation);
|
|
6663
|
-
|
|
6664
|
-
if (!isFloating) {
|
|
7388
|
+
if (sourceGroup.api.location === 'grid') {
|
|
6665
7389
|
const sourceLocation = getGridLocation(sourceGroup.element);
|
|
6666
7390
|
const [sourceParentLocation, from] = tail(sourceLocation);
|
|
6667
7391
|
if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
|
|
@@ -6707,12 +7431,25 @@ class DockviewComponent extends BaseGrid {
|
|
|
6707
7431
|
}
|
|
6708
7432
|
}
|
|
6709
7433
|
else {
|
|
6710
|
-
|
|
6711
|
-
|
|
6712
|
-
|
|
6713
|
-
|
|
6714
|
-
|
|
6715
|
-
|
|
7434
|
+
switch (sourceGroup.api.location) {
|
|
7435
|
+
case 'grid':
|
|
7436
|
+
this.gridview.removeView(getGridLocation(sourceGroup.element));
|
|
7437
|
+
break;
|
|
7438
|
+
case 'floating': {
|
|
7439
|
+
const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
|
|
7440
|
+
if (!selectedFloatingGroup) {
|
|
7441
|
+
throw new Error('failed to find floating group');
|
|
7442
|
+
}
|
|
7443
|
+
selectedFloatingGroup.dispose();
|
|
7444
|
+
break;
|
|
7445
|
+
}
|
|
7446
|
+
case 'popout': {
|
|
7447
|
+
const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
|
|
7448
|
+
if (!selectedPopoutGroup) {
|
|
7449
|
+
throw new Error('failed to find popout group');
|
|
7450
|
+
}
|
|
7451
|
+
selectedPopoutGroup.dispose();
|
|
7452
|
+
}
|
|
6716
7453
|
}
|
|
6717
7454
|
const referenceLocation = getGridLocation(referenceGroup.element);
|
|
6718
7455
|
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
|
|
@@ -6774,7 +7511,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
6774
7511
|
const contentComponent = options.component;
|
|
6775
7512
|
const tabComponent = (_a = options.tabComponent) !== null && _a !== void 0 ? _a : this.options.defaultTabComponent;
|
|
6776
7513
|
const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
|
|
6777
|
-
const panel = new DockviewPanel(options.id, this, this._api, group, view);
|
|
7514
|
+
const panel = new DockviewPanel(options.id, this, this._api, group, view, { renderer: options.renderer });
|
|
6778
7515
|
panel.init({
|
|
6779
7516
|
title: (_b = options.title) !== null && _b !== void 0 ? _b : options.id,
|
|
6780
7517
|
params: (_c = options === null || options === void 0 ? void 0 : options.params) !== null && _c !== void 0 ? _c : {},
|