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
|
*/
|
|
@@ -232,6 +232,14 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
232
232
|
// noop
|
|
233
233
|
},
|
|
234
234
|
};
|
|
235
|
+
function from(func) {
|
|
236
|
+
return {
|
|
237
|
+
dispose: () => {
|
|
238
|
+
func();
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
Disposable.from = from;
|
|
235
243
|
})(Disposable || (Disposable = {}));
|
|
236
244
|
class CompositeDisposable {
|
|
237
245
|
get isDisposed() {
|
|
@@ -416,6 +424,61 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
416
424
|
function quasiDefaultPrevented(event) {
|
|
417
425
|
return event[QUASI_PREVENT_DEFAULT_KEY];
|
|
418
426
|
}
|
|
427
|
+
function addStyles(document, styleSheetList) {
|
|
428
|
+
const styleSheets = Array.from(styleSheetList);
|
|
429
|
+
for (const styleSheet of styleSheets) {
|
|
430
|
+
if (styleSheet.href) {
|
|
431
|
+
const link = document.createElement('link');
|
|
432
|
+
link.href = styleSheet.href;
|
|
433
|
+
link.type = styleSheet.type;
|
|
434
|
+
link.rel = 'stylesheet';
|
|
435
|
+
document.head.appendChild(link);
|
|
436
|
+
}
|
|
437
|
+
let cssTexts = [];
|
|
438
|
+
try {
|
|
439
|
+
if (styleSheet.cssRules) {
|
|
440
|
+
cssTexts = Array.from(styleSheet.cssRules).map((rule) => rule.cssText);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
catch (err) {
|
|
444
|
+
// security errors (lack of permissions), ignore
|
|
445
|
+
}
|
|
446
|
+
for (const rule of cssTexts) {
|
|
447
|
+
const style = document.createElement('style');
|
|
448
|
+
style.appendChild(document.createTextNode(rule));
|
|
449
|
+
document.head.appendChild(style);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
function getDomNodePagePosition(domNode) {
|
|
454
|
+
const { left, top, width, height } = domNode.getBoundingClientRect();
|
|
455
|
+
return {
|
|
456
|
+
left: left + window.scrollX,
|
|
457
|
+
top: top + window.scrollY,
|
|
458
|
+
width: width,
|
|
459
|
+
height: height,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Check whether an element is in the DOM (including the Shadow DOM)
|
|
464
|
+
* @see https://terodox.tech/how-to-tell-if-an-element-is-in-the-dom-including-the-shadow-dom/
|
|
465
|
+
*/
|
|
466
|
+
function isInDocument(element) {
|
|
467
|
+
let currentElement = element;
|
|
468
|
+
while (currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentNode) {
|
|
469
|
+
if (currentElement.parentNode === document) {
|
|
470
|
+
return true;
|
|
471
|
+
}
|
|
472
|
+
else if (currentElement.parentNode instanceof DocumentFragment) {
|
|
473
|
+
// handle shadow DOMs
|
|
474
|
+
currentElement = currentElement.parentNode.host;
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
currentElement = currentElement.parentNode;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return false;
|
|
481
|
+
}
|
|
419
482
|
|
|
420
483
|
function tail(arr) {
|
|
421
484
|
if (arr.length === 0) {
|
|
@@ -613,6 +676,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
613
676
|
Sizing.Invisible = Invisible;
|
|
614
677
|
})(exports.Sizing || (exports.Sizing = {}));
|
|
615
678
|
class Splitview {
|
|
679
|
+
get contentSize() {
|
|
680
|
+
return this._contentSize;
|
|
681
|
+
}
|
|
616
682
|
get size() {
|
|
617
683
|
return this._size;
|
|
618
684
|
}
|
|
@@ -678,7 +744,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
678
744
|
this.sashes = [];
|
|
679
745
|
this._size = 0;
|
|
680
746
|
this._orthogonalSize = 0;
|
|
681
|
-
this.
|
|
747
|
+
this._contentSize = 0;
|
|
682
748
|
this._proportions = undefined;
|
|
683
749
|
this._startSnappingEnabled = true;
|
|
684
750
|
this._endSnappingEnabled = true;
|
|
@@ -797,7 +863,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
797
863
|
);
|
|
798
864
|
});
|
|
799
865
|
// Initialize content size and proportions for first layout
|
|
800
|
-
this.
|
|
866
|
+
this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
801
867
|
this.saveProportions();
|
|
802
868
|
}
|
|
803
869
|
}
|
|
@@ -1071,7 +1137,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1071
1137
|
this.addView(view, sizing, to);
|
|
1072
1138
|
}
|
|
1073
1139
|
layout(size, orthogonalSize) {
|
|
1074
|
-
const previousSize = Math.max(this.size, this.
|
|
1140
|
+
const previousSize = Math.max(this.size, this._contentSize);
|
|
1075
1141
|
this.size = size;
|
|
1076
1142
|
this.orthogonalSize = orthogonalSize;
|
|
1077
1143
|
if (!this.proportions) {
|
|
@@ -1081,9 +1147,23 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1081
1147
|
this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
|
|
1082
1148
|
}
|
|
1083
1149
|
else {
|
|
1150
|
+
let total = 0;
|
|
1084
1151
|
for (let i = 0; i < this.viewItems.length; i++) {
|
|
1085
1152
|
const item = this.viewItems[i];
|
|
1086
|
-
|
|
1153
|
+
const proportion = this.proportions[i];
|
|
1154
|
+
if (typeof proportion === 'number') {
|
|
1155
|
+
total += proportion;
|
|
1156
|
+
}
|
|
1157
|
+
else {
|
|
1158
|
+
size -= item.size;
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
for (let i = 0; i < this.viewItems.length; i++) {
|
|
1162
|
+
const item = this.viewItems[i];
|
|
1163
|
+
const proportion = this.proportions[i];
|
|
1164
|
+
if (typeof proportion === 'number' && total > 0) {
|
|
1165
|
+
item.size = clamp(Math.round((proportion * size) / total), item.minimumSize, item.maximumSize);
|
|
1166
|
+
}
|
|
1087
1167
|
}
|
|
1088
1168
|
}
|
|
1089
1169
|
this.distributeEmptySpace();
|
|
@@ -1120,12 +1200,12 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1120
1200
|
}
|
|
1121
1201
|
}
|
|
1122
1202
|
saveProportions() {
|
|
1123
|
-
if (this.proportionalLayout && this.
|
|
1124
|
-
this._proportions = this.viewItems.map((i) => i.size / this.
|
|
1203
|
+
if (this.proportionalLayout && this._contentSize > 0) {
|
|
1204
|
+
this._proportions = this.viewItems.map((i) => i.visible ? i.size / this._contentSize : undefined);
|
|
1125
1205
|
}
|
|
1126
1206
|
}
|
|
1127
1207
|
layoutViews() {
|
|
1128
|
-
this.
|
|
1208
|
+
this._contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1129
1209
|
let sum = 0;
|
|
1130
1210
|
const x = [];
|
|
1131
1211
|
this.updateSashEnablement();
|
|
@@ -1219,7 +1299,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1219
1299
|
}
|
|
1220
1300
|
else if (snappedAfter &&
|
|
1221
1301
|
collapsesDown[index] &&
|
|
1222
|
-
(position < this.
|
|
1302
|
+
(position < this._contentSize || this.endSnappingEnabled)) {
|
|
1223
1303
|
this.updateSash(sash, exports.SashState.MAXIMUM);
|
|
1224
1304
|
}
|
|
1225
1305
|
else {
|
|
@@ -1508,7 +1588,6 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1508
1588
|
setVisible(visible) {
|
|
1509
1589
|
if (this.view.setVisible) {
|
|
1510
1590
|
this.view.setVisible(visible);
|
|
1511
|
-
this._onDidChange.fire({});
|
|
1512
1591
|
}
|
|
1513
1592
|
}
|
|
1514
1593
|
layout(size, orthogonalSize) {
|
|
@@ -1540,10 +1619,14 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1540
1619
|
get minimumSize() {
|
|
1541
1620
|
return this.children.length === 0
|
|
1542
1621
|
? 0
|
|
1543
|
-
: Math.max(...this.children.map((c) =>
|
|
1622
|
+
: Math.max(...this.children.map((c, index) => this.splitview.isViewVisible(index)
|
|
1623
|
+
? c.minimumOrthogonalSize
|
|
1624
|
+
: 0));
|
|
1544
1625
|
}
|
|
1545
1626
|
get maximumSize() {
|
|
1546
|
-
return Math.min(...this.children.map((c) =>
|
|
1627
|
+
return Math.min(...this.children.map((c, index) => this.splitview.isViewVisible(index)
|
|
1628
|
+
? c.maximumOrthogonalSize
|
|
1629
|
+
: Number.POSITIVE_INFINITY));
|
|
1547
1630
|
}
|
|
1548
1631
|
get minimumOrthogonalSize() {
|
|
1549
1632
|
return this.splitview.minimumSize;
|
|
@@ -1601,6 +1684,8 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1601
1684
|
this.children = [];
|
|
1602
1685
|
this._onDidChange = new Emitter();
|
|
1603
1686
|
this.onDidChange = this._onDidChange.event;
|
|
1687
|
+
this._onDidVisibilityChange = new Emitter();
|
|
1688
|
+
this.onDidVisibilityChange = this._onDidVisibilityChange.event;
|
|
1604
1689
|
this._orthogonalSize = orthogonalSize;
|
|
1605
1690
|
this._size = size;
|
|
1606
1691
|
this.element = document.createElement('div');
|
|
@@ -1635,7 +1720,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1635
1720
|
styles,
|
|
1636
1721
|
});
|
|
1637
1722
|
}
|
|
1638
|
-
this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
|
|
1723
|
+
this.addDisposables(this._onDidChange, this._onDidVisibilityChange, this.splitview.onDidSashEnd(() => {
|
|
1639
1724
|
this._onDidChange.fire({});
|
|
1640
1725
|
}));
|
|
1641
1726
|
this.setupChildrenEvents();
|
|
@@ -1658,7 +1743,15 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1658
1743
|
if (this.splitview.isViewVisible(index) === visible) {
|
|
1659
1744
|
return;
|
|
1660
1745
|
}
|
|
1746
|
+
const wereAllChildrenHidden = this.splitview.contentSize === 0;
|
|
1661
1747
|
this.splitview.setViewVisible(index, visible);
|
|
1748
|
+
const areAllChildrenHidden = this.splitview.contentSize === 0;
|
|
1749
|
+
// If all children are hidden then the parent should hide the entire splitview
|
|
1750
|
+
// If the entire splitview is hidden then the parent should show the splitview when a child is shown
|
|
1751
|
+
if ((visible && wereAllChildrenHidden) ||
|
|
1752
|
+
(!visible && areAllChildrenHidden)) {
|
|
1753
|
+
this._onDidVisibilityChange.fire(visible);
|
|
1754
|
+
}
|
|
1662
1755
|
}
|
|
1663
1756
|
moveChild(from, to) {
|
|
1664
1757
|
if (from === to) {
|
|
@@ -1722,13 +1815,20 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1722
1815
|
}
|
|
1723
1816
|
setupChildrenEvents() {
|
|
1724
1817
|
this._childrenDisposable.dispose();
|
|
1725
|
-
this._childrenDisposable = exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
|
|
1818
|
+
this._childrenDisposable = new CompositeDisposable(exports.DockviewEvent.any(...this.children.map((c) => c.onDidChange))((e) => {
|
|
1726
1819
|
/**
|
|
1727
1820
|
* indicate a change has occured to allows any re-rendering but don't bubble
|
|
1728
1821
|
* event because that was specific to this branch
|
|
1729
1822
|
*/
|
|
1730
1823
|
this._onDidChange.fire({ size: e.orthogonalSize });
|
|
1731
|
-
})
|
|
1824
|
+
}), ...this.children.map((c, i) => {
|
|
1825
|
+
if (c instanceof BranchNode) {
|
|
1826
|
+
return c.onDidVisibilityChange((visible) => {
|
|
1827
|
+
this.setChildVisible(i, visible);
|
|
1828
|
+
});
|
|
1829
|
+
}
|
|
1830
|
+
return Disposable.NONE;
|
|
1831
|
+
}));
|
|
1732
1832
|
}
|
|
1733
1833
|
dispose() {
|
|
1734
1834
|
this._childrenDisposable.dispose();
|
|
@@ -1889,7 +1989,69 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1889
1989
|
get maximumHeight() {
|
|
1890
1990
|
return this.root.maximumHeight;
|
|
1891
1991
|
}
|
|
1992
|
+
maximizedView() {
|
|
1993
|
+
var _a;
|
|
1994
|
+
return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
|
|
1995
|
+
}
|
|
1996
|
+
hasMaximizedView() {
|
|
1997
|
+
return this._maximizedNode !== undefined;
|
|
1998
|
+
}
|
|
1999
|
+
maximizeView(view) {
|
|
2000
|
+
const location = getGridLocation(view.element);
|
|
2001
|
+
const [_, node] = this.getNode(location);
|
|
2002
|
+
if (!(node instanceof LeafNode)) {
|
|
2003
|
+
return;
|
|
2004
|
+
}
|
|
2005
|
+
if (this._maximizedNode === node) {
|
|
2006
|
+
return;
|
|
2007
|
+
}
|
|
2008
|
+
if (this.hasMaximizedView()) {
|
|
2009
|
+
this.exitMaximizedView();
|
|
2010
|
+
}
|
|
2011
|
+
function hideAllViewsBut(parent, exclude) {
|
|
2012
|
+
for (let i = 0; i < parent.children.length; i++) {
|
|
2013
|
+
const child = parent.children[i];
|
|
2014
|
+
if (child instanceof LeafNode) {
|
|
2015
|
+
if (child !== exclude) {
|
|
2016
|
+
parent.setChildVisible(i, false);
|
|
2017
|
+
}
|
|
2018
|
+
}
|
|
2019
|
+
else {
|
|
2020
|
+
hideAllViewsBut(child, exclude);
|
|
2021
|
+
}
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2024
|
+
hideAllViewsBut(this.root, node);
|
|
2025
|
+
this._maximizedNode = node;
|
|
2026
|
+
this._onDidMaxmizedNodeChange.fire();
|
|
2027
|
+
}
|
|
2028
|
+
exitMaximizedView() {
|
|
2029
|
+
if (!this._maximizedNode) {
|
|
2030
|
+
return;
|
|
2031
|
+
}
|
|
2032
|
+
function showViewsInReverseOrder(parent) {
|
|
2033
|
+
for (let index = parent.children.length - 1; index >= 0; index--) {
|
|
2034
|
+
const child = parent.children[index];
|
|
2035
|
+
if (child instanceof LeafNode) {
|
|
2036
|
+
parent.setChildVisible(index, true);
|
|
2037
|
+
}
|
|
2038
|
+
else {
|
|
2039
|
+
showViewsInReverseOrder(child);
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2042
|
+
}
|
|
2043
|
+
showViewsInReverseOrder(this.root);
|
|
2044
|
+
this._maximizedNode = undefined;
|
|
2045
|
+
this._onDidMaxmizedNodeChange.fire();
|
|
2046
|
+
}
|
|
1892
2047
|
serialize() {
|
|
2048
|
+
if (this.hasMaximizedView()) {
|
|
2049
|
+
/**
|
|
2050
|
+
* do not persist maximized view state but we must first exit any maximized views
|
|
2051
|
+
* before serialization to ensure the correct dimensions are persisted
|
|
2052
|
+
*/
|
|
2053
|
+
this.exitMaximizedView();
|
|
2054
|
+
}
|
|
1893
2055
|
const root = serializeBranchNode(this.getView(), this.orientation);
|
|
1894
2056
|
return {
|
|
1895
2057
|
root,
|
|
@@ -1901,7 +2063,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1901
2063
|
dispose() {
|
|
1902
2064
|
this.disposable.dispose();
|
|
1903
2065
|
this._onDidChange.dispose();
|
|
2066
|
+
this._onDidMaxmizedNodeChange.dispose();
|
|
1904
2067
|
this.root.dispose();
|
|
2068
|
+
this._maximizedNode = undefined;
|
|
1905
2069
|
this.element.remove();
|
|
1906
2070
|
}
|
|
1907
2071
|
clear() {
|
|
@@ -1942,6 +2106,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
1942
2106
|
const oldRoot = this._root;
|
|
1943
2107
|
if (oldRoot) {
|
|
1944
2108
|
oldRoot.dispose();
|
|
2109
|
+
this._maximizedNode = undefined;
|
|
1945
2110
|
this.element.removeChild(oldRoot.element);
|
|
1946
2111
|
}
|
|
1947
2112
|
this._root = root;
|
|
@@ -2028,9 +2193,12 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2028
2193
|
constructor(proportionalLayout, styles, orientation) {
|
|
2029
2194
|
this.proportionalLayout = proportionalLayout;
|
|
2030
2195
|
this.styles = styles;
|
|
2196
|
+
this._maximizedNode = undefined;
|
|
2031
2197
|
this.disposable = new MutableDisposable();
|
|
2032
2198
|
this._onDidChange = new Emitter();
|
|
2033
2199
|
this.onDidChange = this._onDidChange.event;
|
|
2200
|
+
this._onDidMaxmizedNodeChange = new Emitter();
|
|
2201
|
+
this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
|
|
2034
2202
|
this.element = document.createElement('div');
|
|
2035
2203
|
this.element.className = 'grid-view';
|
|
2036
2204
|
this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
|
|
@@ -2044,6 +2212,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2044
2212
|
return parent.isChildVisible(index);
|
|
2045
2213
|
}
|
|
2046
2214
|
setViewVisible(location, visible) {
|
|
2215
|
+
if (this.hasMaximizedView()) {
|
|
2216
|
+
this.exitMaximizedView();
|
|
2217
|
+
}
|
|
2047
2218
|
const [rest, index] = tail(location);
|
|
2048
2219
|
const [, parent] = this.getNode(rest);
|
|
2049
2220
|
if (!(parent instanceof BranchNode)) {
|
|
@@ -2052,6 +2223,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2052
2223
|
parent.setChildVisible(index, visible);
|
|
2053
2224
|
}
|
|
2054
2225
|
moveView(parentLocation, from, to) {
|
|
2226
|
+
if (this.hasMaximizedView()) {
|
|
2227
|
+
this.exitMaximizedView();
|
|
2228
|
+
}
|
|
2055
2229
|
const [, parent] = this.getNode(parentLocation);
|
|
2056
2230
|
if (!(parent instanceof BranchNode)) {
|
|
2057
2231
|
throw new Error('Invalid location');
|
|
@@ -2059,6 +2233,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2059
2233
|
parent.moveChild(from, to);
|
|
2060
2234
|
}
|
|
2061
2235
|
addView(view, size, location) {
|
|
2236
|
+
if (this.hasMaximizedView()) {
|
|
2237
|
+
this.exitMaximizedView();
|
|
2238
|
+
}
|
|
2062
2239
|
const [rest, index] = tail(location);
|
|
2063
2240
|
const [pathToParent, parent] = this.getNode(rest);
|
|
2064
2241
|
if (parent instanceof BranchNode) {
|
|
@@ -2091,6 +2268,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2091
2268
|
return this.removeView(location, sizing);
|
|
2092
2269
|
}
|
|
2093
2270
|
removeView(location, sizing) {
|
|
2271
|
+
if (this.hasMaximizedView()) {
|
|
2272
|
+
this.exitMaximizedView();
|
|
2273
|
+
}
|
|
2094
2274
|
const [rest, index] = tail(location);
|
|
2095
2275
|
const [pathToParent, parent] = this.getNode(rest);
|
|
2096
2276
|
if (!(parent instanceof BranchNode)) {
|
|
@@ -2828,6 +3008,24 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2828
3008
|
moveToPrevious(options) {
|
|
2829
3009
|
this.component.moveToPrevious(options);
|
|
2830
3010
|
}
|
|
3011
|
+
maximizeGroup(panel) {
|
|
3012
|
+
this.component.maximizeGroup(panel.group);
|
|
3013
|
+
}
|
|
3014
|
+
hasMaximizedGroup() {
|
|
3015
|
+
return this.component.hasMaximizedGroup();
|
|
3016
|
+
}
|
|
3017
|
+
exitMaxmizedGroup() {
|
|
3018
|
+
this.component.exitMaximizedGroup();
|
|
3019
|
+
}
|
|
3020
|
+
get onDidMaxmizedGroupChange() {
|
|
3021
|
+
return this.component.onDidMaxmizedGroupChange;
|
|
3022
|
+
}
|
|
3023
|
+
/**
|
|
3024
|
+
* Add a popout group in a new Window
|
|
3025
|
+
*/
|
|
3026
|
+
addPopoutGroup(item, options) {
|
|
3027
|
+
this.component.addPopoutGroup(item, options);
|
|
3028
|
+
}
|
|
2831
3029
|
}
|
|
2832
3030
|
|
|
2833
3031
|
class DragAndDropObserver extends CompositeDisposable {
|
|
@@ -2838,36 +3036,48 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2838
3036
|
this.target = null;
|
|
2839
3037
|
this.registerListeners();
|
|
2840
3038
|
}
|
|
3039
|
+
onDragEnter(e) {
|
|
3040
|
+
this.target = e.target;
|
|
3041
|
+
this.callbacks.onDragEnter(e);
|
|
3042
|
+
}
|
|
3043
|
+
onDragOver(e) {
|
|
3044
|
+
e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
|
|
3045
|
+
if (this.callbacks.onDragOver) {
|
|
3046
|
+
this.callbacks.onDragOver(e);
|
|
3047
|
+
}
|
|
3048
|
+
}
|
|
3049
|
+
onDragLeave(e) {
|
|
3050
|
+
if (this.target === e.target) {
|
|
3051
|
+
this.target = null;
|
|
3052
|
+
this.callbacks.onDragLeave(e);
|
|
3053
|
+
}
|
|
3054
|
+
}
|
|
3055
|
+
onDragEnd(e) {
|
|
3056
|
+
this.target = null;
|
|
3057
|
+
this.callbacks.onDragEnd(e);
|
|
3058
|
+
}
|
|
3059
|
+
onDrop(e) {
|
|
3060
|
+
this.callbacks.onDrop(e);
|
|
3061
|
+
}
|
|
2841
3062
|
registerListeners() {
|
|
2842
3063
|
this.addDisposables(addDisposableListener(this.element, 'dragenter', (e) => {
|
|
2843
|
-
this.
|
|
2844
|
-
this.callbacks.onDragEnter(e);
|
|
3064
|
+
this.onDragEnter(e);
|
|
2845
3065
|
}, true));
|
|
2846
3066
|
this.addDisposables(addDisposableListener(this.element, 'dragover', (e) => {
|
|
2847
|
-
|
|
2848
|
-
if (this.callbacks.onDragOver) {
|
|
2849
|
-
this.callbacks.onDragOver(e);
|
|
2850
|
-
}
|
|
3067
|
+
this.onDragOver(e);
|
|
2851
3068
|
}, true));
|
|
2852
3069
|
this.addDisposables(addDisposableListener(this.element, 'dragleave', (e) => {
|
|
2853
|
-
|
|
2854
|
-
this.target = null;
|
|
2855
|
-
this.callbacks.onDragLeave(e);
|
|
2856
|
-
}
|
|
3070
|
+
this.onDragLeave(e);
|
|
2857
3071
|
}));
|
|
2858
3072
|
this.addDisposables(addDisposableListener(this.element, 'dragend', (e) => {
|
|
2859
|
-
this.
|
|
2860
|
-
this.callbacks.onDragEnd(e);
|
|
3073
|
+
this.onDragEnd(e);
|
|
2861
3074
|
}));
|
|
2862
3075
|
this.addDisposables(addDisposableListener(this.element, 'drop', (e) => {
|
|
2863
|
-
this.
|
|
3076
|
+
this.onDrop(e);
|
|
2864
3077
|
}));
|
|
2865
3078
|
}
|
|
2866
3079
|
}
|
|
2867
3080
|
|
|
2868
|
-
function numberOrFallback(maybeNumber, fallback) {
|
|
2869
|
-
return typeof maybeNumber === 'number' ? maybeNumber : fallback;
|
|
2870
|
-
}
|
|
2871
3081
|
function directionToPosition(direction) {
|
|
2872
3082
|
switch (direction) {
|
|
2873
3083
|
case 'above':
|
|
@@ -2900,6 +3110,16 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2900
3110
|
throw new Error(`invalid position '${position}'`);
|
|
2901
3111
|
}
|
|
2902
3112
|
}
|
|
3113
|
+
const DEFAULT_ACTIVATION_SIZE = {
|
|
3114
|
+
value: 20,
|
|
3115
|
+
type: 'percentage',
|
|
3116
|
+
};
|
|
3117
|
+
const DEFAULT_SIZE = {
|
|
3118
|
+
value: 50,
|
|
3119
|
+
type: 'percentage',
|
|
3120
|
+
};
|
|
3121
|
+
const SMALL_WIDTH_BOUNDARY = 100;
|
|
3122
|
+
const SMALL_HEIGHT_BOUNDARY = 100;
|
|
2903
3123
|
class Droptarget extends CompositeDisposable {
|
|
2904
3124
|
get state() {
|
|
2905
3125
|
return this._state;
|
|
@@ -2912,7 +3132,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2912
3132
|
this.onDrop = this._onDrop.event;
|
|
2913
3133
|
// use a set to take advantage of #<set>.has
|
|
2914
3134
|
this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
|
|
2915
|
-
this.
|
|
3135
|
+
this.dnd = new DragAndDropObserver(this.element, {
|
|
2916
3136
|
onDragEnter: () => undefined,
|
|
2917
3137
|
onDragOver: (e) => {
|
|
2918
3138
|
if (this._acceptedTargetZonesSet.size === 0) {
|
|
@@ -2960,7 +3180,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2960
3180
|
this.element.append(this.targetElement);
|
|
2961
3181
|
}
|
|
2962
3182
|
this.toggleClasses(quadrant, width, height);
|
|
2963
|
-
this.
|
|
3183
|
+
this._state = quadrant;
|
|
2964
3184
|
},
|
|
2965
3185
|
onDragLeave: () => {
|
|
2966
3186
|
this.removeDropTarget();
|
|
@@ -2979,11 +3199,15 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2979
3199
|
this._onDrop.fire({ position: state, nativeEvent: e });
|
|
2980
3200
|
}
|
|
2981
3201
|
},
|
|
2982
|
-
})
|
|
3202
|
+
});
|
|
3203
|
+
this.addDisposables(this._onDrop, this.dnd);
|
|
2983
3204
|
}
|
|
2984
3205
|
setTargetZones(acceptedTargetZones) {
|
|
2985
3206
|
this._acceptedTargetZonesSet = new Set(acceptedTargetZones);
|
|
2986
3207
|
}
|
|
3208
|
+
setOverlayModel(model) {
|
|
3209
|
+
this.options.overlayModel = model;
|
|
3210
|
+
}
|
|
2987
3211
|
dispose() {
|
|
2988
3212
|
this.removeDropTarget();
|
|
2989
3213
|
super.dispose();
|
|
@@ -2995,19 +3219,19 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
2995
3219
|
event[Droptarget.USED_EVENT_ID] = true;
|
|
2996
3220
|
}
|
|
2997
3221
|
/**
|
|
2998
|
-
* Check is the event has already been used by another instance
|
|
3222
|
+
* Check is the event has already been used by another instance of DropTarget
|
|
2999
3223
|
*/
|
|
3000
3224
|
isAlreadyUsed(event) {
|
|
3001
3225
|
const value = event[Droptarget.USED_EVENT_ID];
|
|
3002
3226
|
return typeof value === 'boolean' && value;
|
|
3003
3227
|
}
|
|
3004
3228
|
toggleClasses(quadrant, width, height) {
|
|
3005
|
-
var _a, _b
|
|
3229
|
+
var _a, _b;
|
|
3006
3230
|
if (!this.overlayElement) {
|
|
3007
3231
|
return;
|
|
3008
3232
|
}
|
|
3009
|
-
const isSmallX = width <
|
|
3010
|
-
const isSmallY = height <
|
|
3233
|
+
const isSmallX = width < SMALL_WIDTH_BOUNDARY;
|
|
3234
|
+
const isSmallY = height < SMALL_HEIGHT_BOUNDARY;
|
|
3011
3235
|
const isLeft = quadrant === 'left';
|
|
3012
3236
|
const isRight = quadrant === 'right';
|
|
3013
3237
|
const isTop = quadrant === 'top';
|
|
@@ -3016,20 +3240,17 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3016
3240
|
const leftClass = !isSmallX && isLeft;
|
|
3017
3241
|
const topClass = !isSmallY && isTop;
|
|
3018
3242
|
const bottomClass = !isSmallY && isBottom;
|
|
3019
|
-
let size =
|
|
3020
|
-
|
|
3021
|
-
|
|
3243
|
+
let size = 1;
|
|
3244
|
+
const sizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : DEFAULT_SIZE;
|
|
3245
|
+
if (sizeOptions.type === 'percentage') {
|
|
3246
|
+
size = clamp(sizeOptions.value, 0, 100) / 100;
|
|
3022
3247
|
}
|
|
3023
|
-
|
|
3248
|
+
else {
|
|
3024
3249
|
if (rightClass || leftClass) {
|
|
3025
|
-
size =
|
|
3026
|
-
clamp(0, this.options.overlayModel.size.value, width) /
|
|
3027
|
-
width;
|
|
3250
|
+
size = clamp(0, sizeOptions.value, width) / width;
|
|
3028
3251
|
}
|
|
3029
3252
|
if (topClass || bottomClass) {
|
|
3030
|
-
size =
|
|
3031
|
-
clamp(0, this.options.overlayModel.size.value, height) /
|
|
3032
|
-
height;
|
|
3253
|
+
size = clamp(0, sizeOptions.value, height) / height;
|
|
3033
3254
|
}
|
|
3034
3255
|
}
|
|
3035
3256
|
const translate = (1 - size) / 2;
|
|
@@ -3051,39 +3272,22 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3051
3272
|
transform = '';
|
|
3052
3273
|
}
|
|
3053
3274
|
this.overlayElement.style.transform = transform;
|
|
3054
|
-
toggleClass(this.overlayElement, 'small-
|
|
3055
|
-
toggleClass(this.overlayElement, 'small-
|
|
3056
|
-
toggleClass(this.overlayElement, '
|
|
3057
|
-
toggleClass(this.overlayElement, '
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
case 'top':
|
|
3062
|
-
this._state = 'top';
|
|
3063
|
-
break;
|
|
3064
|
-
case 'left':
|
|
3065
|
-
this._state = 'left';
|
|
3066
|
-
break;
|
|
3067
|
-
case 'bottom':
|
|
3068
|
-
this._state = 'bottom';
|
|
3069
|
-
break;
|
|
3070
|
-
case 'right':
|
|
3071
|
-
this._state = 'right';
|
|
3072
|
-
break;
|
|
3073
|
-
case 'center':
|
|
3074
|
-
this._state = 'center';
|
|
3075
|
-
break;
|
|
3076
|
-
}
|
|
3275
|
+
toggleClass(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
|
|
3276
|
+
toggleClass(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
|
|
3277
|
+
toggleClass(this.overlayElement, 'dv-drop-target-left', isLeft);
|
|
3278
|
+
toggleClass(this.overlayElement, 'dv-drop-target-right', isRight);
|
|
3279
|
+
toggleClass(this.overlayElement, 'dv-drop-target-top', isTop);
|
|
3280
|
+
toggleClass(this.overlayElement, 'dv-drop-target-bottom', isBottom);
|
|
3281
|
+
toggleClass(this.overlayElement, 'dv-drop-target-center', quadrant === 'center');
|
|
3077
3282
|
}
|
|
3078
3283
|
calculateQuadrant(overlayType, x, y, width, height) {
|
|
3079
|
-
var _a, _b
|
|
3080
|
-
const
|
|
3081
|
-
|
|
3082
|
-
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);
|
|
3284
|
+
var _a, _b;
|
|
3285
|
+
const activationSizeOptions = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) !== null && _b !== void 0 ? _b : DEFAULT_ACTIVATION_SIZE;
|
|
3286
|
+
const isPercentage = activationSizeOptions.type === 'percentage';
|
|
3083
3287
|
if (isPercentage) {
|
|
3084
|
-
return calculateQuadrantAsPercentage(overlayType, x, y, width, height, value);
|
|
3288
|
+
return calculateQuadrantAsPercentage(overlayType, x, y, width, height, activationSizeOptions.value);
|
|
3085
3289
|
}
|
|
3086
|
-
return calculateQuadrantAsPixels(overlayType, x, y, width, height, value);
|
|
3290
|
+
return calculateQuadrantAsPixels(overlayType, x, y, width, height, activationSizeOptions.value);
|
|
3087
3291
|
}
|
|
3088
3292
|
removeDropTarget() {
|
|
3089
3293
|
if (this.targetElement) {
|
|
@@ -3135,12 +3339,22 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3135
3339
|
return 'center';
|
|
3136
3340
|
}
|
|
3137
3341
|
|
|
3342
|
+
exports.DockviewDropTargets = void 0;
|
|
3343
|
+
(function (DockviewDropTargets) {
|
|
3344
|
+
DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
|
|
3345
|
+
DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
|
|
3346
|
+
DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
|
|
3347
|
+
DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
|
|
3348
|
+
})(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
|
|
3349
|
+
|
|
3138
3350
|
class ContentContainer extends CompositeDisposable {
|
|
3139
3351
|
get element() {
|
|
3140
3352
|
return this._element;
|
|
3141
3353
|
}
|
|
3142
|
-
constructor() {
|
|
3354
|
+
constructor(accessor, group) {
|
|
3143
3355
|
super();
|
|
3356
|
+
this.accessor = accessor;
|
|
3357
|
+
this.group = group;
|
|
3144
3358
|
this.disposable = new MutableDisposable();
|
|
3145
3359
|
this._onDidFocus = new Emitter();
|
|
3146
3360
|
this.onDidFocus = this._onDidFocus.event;
|
|
@@ -3150,11 +3364,38 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3150
3364
|
this._element.className = 'content-container';
|
|
3151
3365
|
this._element.tabIndex = -1;
|
|
3152
3366
|
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
|
|
3157
|
-
|
|
3367
|
+
this.dropTarget = new Droptarget(this.element, {
|
|
3368
|
+
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
3369
|
+
canDisplayOverlay: (event, position) => {
|
|
3370
|
+
if (this.group.locked === 'no-drop-target' ||
|
|
3371
|
+
(this.group.locked && position === 'center')) {
|
|
3372
|
+
return false;
|
|
3373
|
+
}
|
|
3374
|
+
const data = getPanelData();
|
|
3375
|
+
if (!data &&
|
|
3376
|
+
event.shiftKey &&
|
|
3377
|
+
this.group.location !== 'floating') {
|
|
3378
|
+
return false;
|
|
3379
|
+
}
|
|
3380
|
+
if (data && data.viewId === this.accessor.id) {
|
|
3381
|
+
if (data.groupId === this.group.id) {
|
|
3382
|
+
if (position === 'center') {
|
|
3383
|
+
// don't allow to drop on self for center position
|
|
3384
|
+
return false;
|
|
3385
|
+
}
|
|
3386
|
+
if (data.panelId === null) {
|
|
3387
|
+
// don't allow group move to drop anywhere on self
|
|
3388
|
+
return false;
|
|
3389
|
+
}
|
|
3390
|
+
}
|
|
3391
|
+
const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
|
|
3392
|
+
data.groupId === this.group.id;
|
|
3393
|
+
return !groupHasOnePanelAndIsActiveDragElement;
|
|
3394
|
+
}
|
|
3395
|
+
return this.group.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
|
|
3396
|
+
},
|
|
3397
|
+
});
|
|
3398
|
+
this.addDisposables(this.dropTarget);
|
|
3158
3399
|
}
|
|
3159
3400
|
show() {
|
|
3160
3401
|
this.element.style.display = '';
|
|
@@ -3162,23 +3403,43 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3162
3403
|
hide() {
|
|
3163
3404
|
this.element.style.display = 'none';
|
|
3164
3405
|
}
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
this.panel = undefined;
|
|
3406
|
+
renderPanel(panel, options = { asActive: true }) {
|
|
3407
|
+
const doRender = options.asActive ||
|
|
3408
|
+
(this.panel && this.group.isPanelActive(this.panel));
|
|
3409
|
+
if (this.panel &&
|
|
3410
|
+
this.panel.view.content.element.parentElement === this._element) {
|
|
3411
|
+
/**
|
|
3412
|
+
* If the currently attached panel is mounted directly to the content then remove it
|
|
3413
|
+
*/
|
|
3414
|
+
this._element.removeChild(this.panel.view.content.element);
|
|
3175
3415
|
}
|
|
3176
3416
|
this.panel = panel;
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3417
|
+
let container;
|
|
3418
|
+
switch (panel.api.renderer) {
|
|
3419
|
+
case 'onlyWhenVisibile':
|
|
3420
|
+
this.accessor.overlayRenderContainer.detatch(panel);
|
|
3421
|
+
if (this.panel) {
|
|
3422
|
+
if (doRender) {
|
|
3423
|
+
this._element.appendChild(this.panel.view.content.element);
|
|
3424
|
+
}
|
|
3425
|
+
}
|
|
3426
|
+
container = this._element;
|
|
3427
|
+
break;
|
|
3428
|
+
case 'always':
|
|
3429
|
+
if (panel.view.content.element.parentElement === this._element) {
|
|
3430
|
+
this._element.removeChild(panel.view.content.element);
|
|
3431
|
+
}
|
|
3432
|
+
container = this.accessor.overlayRenderContainer.attach({
|
|
3433
|
+
panel,
|
|
3434
|
+
referenceContainer: this,
|
|
3435
|
+
});
|
|
3436
|
+
break;
|
|
3437
|
+
}
|
|
3438
|
+
if (doRender) {
|
|
3439
|
+
const _onDidFocus = panel.view.content.onDidFocus;
|
|
3440
|
+
const _onDidBlur = panel.view.content.onDidBlur;
|
|
3441
|
+
const focusTracker = trackFocus(container);
|
|
3442
|
+
const disposable = new CompositeDisposable();
|
|
3182
3443
|
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
3183
3444
|
if (_onDidFocus) {
|
|
3184
3445
|
disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
|
|
@@ -3186,17 +3447,23 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3186
3447
|
if (_onDidBlur) {
|
|
3187
3448
|
disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
|
|
3188
3449
|
}
|
|
3189
|
-
this.
|
|
3450
|
+
this.disposable.value = disposable;
|
|
3451
|
+
}
|
|
3452
|
+
}
|
|
3453
|
+
openPanel(panel) {
|
|
3454
|
+
if (this.panel === panel) {
|
|
3455
|
+
return;
|
|
3190
3456
|
}
|
|
3191
|
-
this.
|
|
3457
|
+
this.renderPanel(panel);
|
|
3192
3458
|
}
|
|
3193
3459
|
layout(_width, _height) {
|
|
3194
3460
|
// noop
|
|
3195
3461
|
}
|
|
3196
3462
|
closePanel() {
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3463
|
+
if (this.panel) {
|
|
3464
|
+
if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
|
|
3465
|
+
this._element.removeChild(this.panel.view.content.element);
|
|
3466
|
+
}
|
|
3200
3467
|
this.panel = undefined;
|
|
3201
3468
|
}
|
|
3202
3469
|
}
|
|
@@ -3206,14 +3473,6 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3206
3473
|
}
|
|
3207
3474
|
}
|
|
3208
3475
|
|
|
3209
|
-
exports.DockviewDropTargets = void 0;
|
|
3210
|
-
(function (DockviewDropTargets) {
|
|
3211
|
-
DockviewDropTargets[DockviewDropTargets["Tab"] = 0] = "Tab";
|
|
3212
|
-
DockviewDropTargets[DockviewDropTargets["Panel"] = 1] = "Panel";
|
|
3213
|
-
DockviewDropTargets[DockviewDropTargets["TabContainer"] = 2] = "TabContainer";
|
|
3214
|
-
DockviewDropTargets[DockviewDropTargets["Edge"] = 3] = "Edge";
|
|
3215
|
-
})(exports.DockviewDropTargets || (exports.DockviewDropTargets = {}));
|
|
3216
|
-
|
|
3217
3476
|
class DragHandler extends CompositeDisposable {
|
|
3218
3477
|
constructor(el) {
|
|
3219
3478
|
super();
|
|
@@ -3388,7 +3647,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3388
3647
|
}, true));
|
|
3389
3648
|
}
|
|
3390
3649
|
isCancelled(_event) {
|
|
3391
|
-
if (this.group.api.
|
|
3650
|
+
if (this.group.api.location === 'floating' && !_event.shiftKey) {
|
|
3392
3651
|
return true;
|
|
3393
3652
|
}
|
|
3394
3653
|
return false;
|
|
@@ -3590,7 +3849,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3590
3849
|
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
3591
3850
|
if (isFloatingGroupsEnabled &&
|
|
3592
3851
|
event.shiftKey &&
|
|
3593
|
-
|
|
3852
|
+
this.group.api.location !== 'floating') {
|
|
3594
3853
|
event.preventDefault();
|
|
3595
3854
|
const { top, left } = this.element.getBoundingClientRect();
|
|
3596
3855
|
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
@@ -3655,7 +3914,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3655
3914
|
}), tab.onChanged((event) => {
|
|
3656
3915
|
var _a;
|
|
3657
3916
|
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
3658
|
-
const isFloatingWithOnePanel = this.group.api.
|
|
3917
|
+
const isFloatingWithOnePanel = this.group.api.location === 'floating' && this.size === 1;
|
|
3659
3918
|
if (isFloatingGroupsEnabled &&
|
|
3660
3919
|
!isFloatingWithOnePanel &&
|
|
3661
3920
|
event.shiftKey) {
|
|
@@ -3738,15 +3997,37 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3738
3997
|
}
|
|
3739
3998
|
return isAncestor(document.activeElement, this.contentContainer.element);
|
|
3740
3999
|
}
|
|
3741
|
-
get
|
|
3742
|
-
return this.
|
|
3743
|
-
}
|
|
3744
|
-
set
|
|
3745
|
-
this.
|
|
3746
|
-
this.
|
|
3747
|
-
toggleClass(this.container, 'dv-groupview-
|
|
3748
|
-
|
|
3749
|
-
|
|
4000
|
+
get location() {
|
|
4001
|
+
return this._location;
|
|
4002
|
+
}
|
|
4003
|
+
set location(value) {
|
|
4004
|
+
this._location = value;
|
|
4005
|
+
toggleClass(this.container, 'dv-groupview-floating', false);
|
|
4006
|
+
toggleClass(this.container, 'dv-groupview-popout', false);
|
|
4007
|
+
switch (value) {
|
|
4008
|
+
case 'grid':
|
|
4009
|
+
this.contentContainer.dropTarget.setTargetZones([
|
|
4010
|
+
'top',
|
|
4011
|
+
'bottom',
|
|
4012
|
+
'left',
|
|
4013
|
+
'right',
|
|
4014
|
+
'center',
|
|
4015
|
+
]);
|
|
4016
|
+
break;
|
|
4017
|
+
case 'floating':
|
|
4018
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4019
|
+
this.contentContainer.dropTarget.setTargetZones(value
|
|
4020
|
+
? ['center']
|
|
4021
|
+
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
4022
|
+
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
4023
|
+
break;
|
|
4024
|
+
case 'popout':
|
|
4025
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4026
|
+
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
4027
|
+
break;
|
|
4028
|
+
}
|
|
4029
|
+
this.groupPanel.api._onDidLocationChange.fire({
|
|
4030
|
+
location: this.location,
|
|
3750
4031
|
});
|
|
3751
4032
|
}
|
|
3752
4033
|
constructor(container, accessor, id, options, groupPanel) {
|
|
@@ -3759,7 +4040,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3759
4040
|
this.groupPanel = groupPanel;
|
|
3760
4041
|
this._isGroupActive = false;
|
|
3761
4042
|
this._locked = false;
|
|
3762
|
-
this.
|
|
4043
|
+
this._location = 'grid';
|
|
3763
4044
|
this.mostRecentlyUsed = [];
|
|
3764
4045
|
this._onDidChange = new Emitter();
|
|
3765
4046
|
this.onDidChange = this._onDidChange.event;
|
|
@@ -3782,35 +4063,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3782
4063
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
3783
4064
|
toggleClass(this.container, 'groupview', true);
|
|
3784
4065
|
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
3785
|
-
this.contentContainer = new ContentContainer();
|
|
3786
|
-
this.dropTarget = new Droptarget(this.contentContainer.element, {
|
|
3787
|
-
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
3788
|
-
canDisplayOverlay: (event, position) => {
|
|
3789
|
-
if (this.locked === 'no-drop-target' ||
|
|
3790
|
-
(this.locked && position === 'center')) {
|
|
3791
|
-
return false;
|
|
3792
|
-
}
|
|
3793
|
-
const data = getPanelData();
|
|
3794
|
-
if (!data && event.shiftKey && !this.isFloating) {
|
|
3795
|
-
return false;
|
|
3796
|
-
}
|
|
3797
|
-
if (data && data.viewId === this.accessor.id) {
|
|
3798
|
-
if (data.groupId === this.id) {
|
|
3799
|
-
if (position === 'center') {
|
|
3800
|
-
// don't allow to drop on self for center position
|
|
3801
|
-
return false;
|
|
3802
|
-
}
|
|
3803
|
-
if (data.panelId === null) {
|
|
3804
|
-
// don't allow group move to drop anywhere on self
|
|
3805
|
-
return false;
|
|
3806
|
-
}
|
|
3807
|
-
}
|
|
3808
|
-
const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
|
|
3809
|
-
return !groupHasOnePanelAndIsActiveDragElement;
|
|
3810
|
-
}
|
|
3811
|
-
return this.canDisplayOverlay(event, position, exports.DockviewDropTargets.Panel);
|
|
3812
|
-
},
|
|
3813
|
-
});
|
|
4066
|
+
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
3814
4067
|
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
3815
4068
|
this.header.hidden = !!options.hideHeader;
|
|
3816
4069
|
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
@@ -3824,7 +4077,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3824
4077
|
this.accessor.doSetGroupActive(this.groupPanel, true);
|
|
3825
4078
|
}), this.contentContainer.onDidBlur(() => {
|
|
3826
4079
|
// noop
|
|
3827
|
-
}), this.dropTarget.onDrop((event) => {
|
|
4080
|
+
}), this.contentContainer.dropTarget.onDrop((event) => {
|
|
3828
4081
|
this.handleDropEvent(event.nativeEvent, event.position);
|
|
3829
4082
|
}), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
3830
4083
|
}
|
|
@@ -3873,6 +4126,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
3873
4126
|
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
3874
4127
|
}
|
|
3875
4128
|
}
|
|
4129
|
+
rerender(panel) {
|
|
4130
|
+
this.contentContainer.renderPanel(panel, { asActive: false });
|
|
4131
|
+
}
|
|
3876
4132
|
indexOf(panel) {
|
|
3877
4133
|
return this.tabsContainer.indexOf(panel.id);
|
|
3878
4134
|
}
|
|
@@ -4064,12 +4320,12 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
4064
4320
|
doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
|
|
4065
4321
|
const existingPanel = this._panels.indexOf(panel);
|
|
4066
4322
|
const hasExistingPanel = existingPanel > -1;
|
|
4323
|
+
this.tabsContainer.show();
|
|
4324
|
+
this.contentContainer.show();
|
|
4067
4325
|
this.tabsContainer.openPanel(panel, index);
|
|
4068
4326
|
if (!skipSetActive) {
|
|
4069
4327
|
this.contentContainer.openPanel(panel);
|
|
4070
4328
|
}
|
|
4071
|
-
this.tabsContainer.show();
|
|
4072
|
-
this.contentContainer.show();
|
|
4073
4329
|
if (hasExistingPanel) {
|
|
4074
4330
|
// TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
|
|
4075
4331
|
return;
|
|
@@ -4185,7 +4441,6 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
4185
4441
|
for (const panel of this.panels) {
|
|
4186
4442
|
panel.dispose();
|
|
4187
4443
|
}
|
|
4188
|
-
this.dropTarget.dispose();
|
|
4189
4444
|
this.tabsContainer.dispose();
|
|
4190
4445
|
this.contentContainer.dispose();
|
|
4191
4446
|
}
|
|
@@ -4224,7 +4479,22 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
4224
4479
|
if (this.disableResizing) {
|
|
4225
4480
|
return;
|
|
4226
4481
|
}
|
|
4227
|
-
if (!
|
|
4482
|
+
if (!this._element.offsetParent) {
|
|
4483
|
+
/**
|
|
4484
|
+
* offsetParent === null is equivalent to display: none being set on the element or one
|
|
4485
|
+
* of it's parents. In the display: none case the size will become (0, 0) which we do
|
|
4486
|
+
* not want to propagate.
|
|
4487
|
+
*
|
|
4488
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
|
|
4489
|
+
*
|
|
4490
|
+
* You could use checkVisibility() but at the time of writing it's not supported across
|
|
4491
|
+
* all Browsers
|
|
4492
|
+
*
|
|
4493
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility
|
|
4494
|
+
*/
|
|
4495
|
+
return;
|
|
4496
|
+
}
|
|
4497
|
+
if (!isInDocument(this._element)) {
|
|
4228
4498
|
/**
|
|
4229
4499
|
* since the event is dispatched through requestAnimationFrame there is a small chance
|
|
4230
4500
|
* the component is no longer attached to the DOM, if that is the case the dimensions
|
|
@@ -4316,6 +4586,21 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
4316
4586
|
isVisible(panel) {
|
|
4317
4587
|
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
4318
4588
|
}
|
|
4589
|
+
maximizeGroup(panel) {
|
|
4590
|
+
this.gridview.maximizeView(panel);
|
|
4591
|
+
}
|
|
4592
|
+
isMaximizedGroup(panel) {
|
|
4593
|
+
return this.gridview.maximizedView() === panel;
|
|
4594
|
+
}
|
|
4595
|
+
exitMaximizedGroup() {
|
|
4596
|
+
this.gridview.exitMaximizedView();
|
|
4597
|
+
}
|
|
4598
|
+
hasMaximizedGroup() {
|
|
4599
|
+
return this.gridview.hasMaximizedView();
|
|
4600
|
+
}
|
|
4601
|
+
get onDidMaxmizedGroupChange() {
|
|
4602
|
+
return this.gridview.onDidMaxmizedNodeChange;
|
|
4603
|
+
}
|
|
4319
4604
|
doAddGroup(group, location = [0], size) {
|
|
4320
4605
|
this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
|
|
4321
4606
|
this._onDidAddGroup.fire(group);
|
|
@@ -5092,32 +5377,63 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5092
5377
|
}
|
|
5093
5378
|
}
|
|
5094
5379
|
|
|
5380
|
+
// TODO find a better way to initialize and avoid needing null checks
|
|
5381
|
+
const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
|
|
5095
5382
|
class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
|
5096
|
-
get
|
|
5383
|
+
get location() {
|
|
5097
5384
|
if (!this._group) {
|
|
5098
|
-
throw new Error(
|
|
5385
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5099
5386
|
}
|
|
5100
|
-
return this._group.model.
|
|
5387
|
+
return this._group.model.location;
|
|
5101
5388
|
}
|
|
5102
5389
|
constructor(id, accessor) {
|
|
5103
5390
|
super(id);
|
|
5104
5391
|
this.accessor = accessor;
|
|
5105
|
-
this.
|
|
5106
|
-
this.
|
|
5107
|
-
this.addDisposables(this.
|
|
5392
|
+
this._onDidLocationChange = new Emitter();
|
|
5393
|
+
this.onDidLocationChange = this._onDidLocationChange.event;
|
|
5394
|
+
this.addDisposables(this._onDidLocationChange);
|
|
5108
5395
|
}
|
|
5109
5396
|
moveTo(options) {
|
|
5110
|
-
var _a;
|
|
5397
|
+
var _a, _b, _c;
|
|
5398
|
+
if (!this._group) {
|
|
5399
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5400
|
+
}
|
|
5401
|
+
const group = (_a = options.group) !== null && _a !== void 0 ? _a : this.accessor.addGroup({
|
|
5402
|
+
direction: positionToDirection((_b = options.position) !== null && _b !== void 0 ? _b : 'right'),
|
|
5403
|
+
});
|
|
5404
|
+
this.accessor.moveGroupOrPanel(group, this._group.id, undefined, options.group ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center' : 'center');
|
|
5405
|
+
}
|
|
5406
|
+
maximize() {
|
|
5407
|
+
if (!this._group) {
|
|
5408
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5409
|
+
}
|
|
5410
|
+
if (this.location !== 'grid') {
|
|
5411
|
+
// only grid groups can be maximized
|
|
5412
|
+
return;
|
|
5413
|
+
}
|
|
5414
|
+
this.accessor.maximizeGroup(this._group);
|
|
5415
|
+
}
|
|
5416
|
+
isMaximized() {
|
|
5111
5417
|
if (!this._group) {
|
|
5112
|
-
throw new Error(
|
|
5418
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5419
|
+
}
|
|
5420
|
+
return this.accessor.isMaximizedGroup(this._group);
|
|
5421
|
+
}
|
|
5422
|
+
exitMaximized() {
|
|
5423
|
+
if (!this._group) {
|
|
5424
|
+
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
5425
|
+
}
|
|
5426
|
+
if (this.isMaximized()) {
|
|
5427
|
+
this.accessor.exitMaximizedGroup();
|
|
5113
5428
|
}
|
|
5114
|
-
this.accessor.moveGroupOrPanel(options.group, this._group.id, undefined, (_a = options.position) !== null && _a !== void 0 ? _a : 'center');
|
|
5115
5429
|
}
|
|
5116
5430
|
initialize(group) {
|
|
5117
5431
|
this._group = group;
|
|
5118
5432
|
}
|
|
5119
5433
|
}
|
|
5120
5434
|
|
|
5435
|
+
const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
|
|
5436
|
+
const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
|
|
5121
5437
|
class DockviewGroupPanel extends GridviewPanel {
|
|
5122
5438
|
get panels() {
|
|
5123
5439
|
return this._model.panels;
|
|
@@ -5142,8 +5458,8 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5142
5458
|
}
|
|
5143
5459
|
constructor(accessor, id, options) {
|
|
5144
5460
|
super(id, 'groupview_default', {
|
|
5145
|
-
minimumHeight:
|
|
5146
|
-
minimumWidth:
|
|
5461
|
+
minimumHeight: MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
|
|
5462
|
+
minimumWidth: MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
|
|
5147
5463
|
}, new DockviewGroupPanelApiImpl(id, accessor));
|
|
5148
5464
|
this.api.initialize(this); // cannot use 'this' after after 'super' call
|
|
5149
5465
|
this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
|
|
@@ -5197,8 +5513,10 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5197
5513
|
return this.panel.title;
|
|
5198
5514
|
}
|
|
5199
5515
|
get isGroupActive() {
|
|
5200
|
-
|
|
5201
|
-
|
|
5516
|
+
return this.group.isActive;
|
|
5517
|
+
}
|
|
5518
|
+
get renderer() {
|
|
5519
|
+
return this.panel.renderer;
|
|
5202
5520
|
}
|
|
5203
5521
|
set group(value) {
|
|
5204
5522
|
const isOldGroupActive = this.isGroupActive;
|
|
@@ -5226,10 +5544,12 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5226
5544
|
this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
|
5227
5545
|
this._onDidGroupChange = new Emitter();
|
|
5228
5546
|
this.onDidGroupChange = this._onDidGroupChange.event;
|
|
5547
|
+
this._onDidRendererChange = new Emitter();
|
|
5548
|
+
this.onDidRendererChange = this._onDidRendererChange.event;
|
|
5229
5549
|
this.disposable = new MutableDisposable();
|
|
5230
5550
|
this.initialize(panel);
|
|
5231
5551
|
this._group = group;
|
|
5232
|
-
this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
|
|
5552
|
+
this.addDisposables(this.disposable, this._onDidRendererChange, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
|
|
5233
5553
|
}
|
|
5234
5554
|
moveTo(options) {
|
|
5235
5555
|
var _a;
|
|
@@ -5238,9 +5558,21 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5238
5558
|
setTitle(title) {
|
|
5239
5559
|
this.panel.setTitle(title);
|
|
5240
5560
|
}
|
|
5561
|
+
setRenderer(renderer) {
|
|
5562
|
+
this.panel.setRenderer(renderer);
|
|
5563
|
+
}
|
|
5241
5564
|
close() {
|
|
5242
5565
|
this.group.model.closePanel(this.panel);
|
|
5243
5566
|
}
|
|
5567
|
+
maximize() {
|
|
5568
|
+
this.group.api.maximize();
|
|
5569
|
+
}
|
|
5570
|
+
isMaximized() {
|
|
5571
|
+
return this.group.api.isMaximized();
|
|
5572
|
+
}
|
|
5573
|
+
exitMaximized() {
|
|
5574
|
+
this.group.api.exitMaximized();
|
|
5575
|
+
}
|
|
5244
5576
|
}
|
|
5245
5577
|
|
|
5246
5578
|
class DockviewPanel extends CompositeDisposable {
|
|
@@ -5253,11 +5585,17 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5253
5585
|
get group() {
|
|
5254
5586
|
return this._group;
|
|
5255
5587
|
}
|
|
5256
|
-
|
|
5588
|
+
get renderer() {
|
|
5589
|
+
var _a;
|
|
5590
|
+
return (_a = this._renderer) !== null && _a !== void 0 ? _a : this.accessor.renderer;
|
|
5591
|
+
}
|
|
5592
|
+
constructor(id, accessor, containerApi, group, view, options) {
|
|
5257
5593
|
super();
|
|
5258
5594
|
this.id = id;
|
|
5595
|
+
this.accessor = accessor;
|
|
5259
5596
|
this.containerApi = containerApi;
|
|
5260
5597
|
this.view = view;
|
|
5598
|
+
this._renderer = options.renderer;
|
|
5261
5599
|
this._group = group;
|
|
5262
5600
|
this.api = new DockviewPanelApiImpl(this, this._group, accessor);
|
|
5263
5601
|
this.addDisposables(this.api.onActiveChange(() => {
|
|
@@ -5266,6 +5604,8 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5266
5604
|
// forward the resize event to the group since if you want to resize a panel
|
|
5267
5605
|
// you are actually just resizing the panels parent which is the group
|
|
5268
5606
|
this.group.api.setSize(event);
|
|
5607
|
+
}), this.api.onDidRendererChange((event) => {
|
|
5608
|
+
this.group.model.rerender(this);
|
|
5269
5609
|
}));
|
|
5270
5610
|
}
|
|
5271
5611
|
init(params) {
|
|
@@ -5285,6 +5625,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5285
5625
|
? this._params
|
|
5286
5626
|
: undefined,
|
|
5287
5627
|
title: this.title,
|
|
5628
|
+
renderer: this._renderer,
|
|
5288
5629
|
};
|
|
5289
5630
|
}
|
|
5290
5631
|
setTitle(title) {
|
|
@@ -5300,6 +5641,15 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5300
5641
|
this.api._onDidTitleChange.fire({ title });
|
|
5301
5642
|
}
|
|
5302
5643
|
}
|
|
5644
|
+
setRenderer(renderer) {
|
|
5645
|
+
const didChange = renderer !== this.renderer;
|
|
5646
|
+
if (didChange) {
|
|
5647
|
+
this._renderer = renderer;
|
|
5648
|
+
this.api._onDidRendererChange.fire({
|
|
5649
|
+
renderer: renderer,
|
|
5650
|
+
});
|
|
5651
|
+
}
|
|
5652
|
+
}
|
|
5303
5653
|
update(event) {
|
|
5304
5654
|
var _a;
|
|
5305
5655
|
// merge the new parameters with the existing parameters
|
|
@@ -5518,8 +5868,8 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5518
5868
|
}
|
|
5519
5869
|
|
|
5520
5870
|
class DefaultDockviewDeserialzier {
|
|
5521
|
-
constructor(
|
|
5522
|
-
this.
|
|
5871
|
+
constructor(accessor) {
|
|
5872
|
+
this.accessor = accessor;
|
|
5523
5873
|
}
|
|
5524
5874
|
fromJSON(panelData, group) {
|
|
5525
5875
|
var _a, _b;
|
|
@@ -5533,8 +5883,10 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5533
5883
|
const tabComponent = viewData
|
|
5534
5884
|
? (_b = viewData.tab) === null || _b === void 0 ? void 0 : _b.id
|
|
5535
5885
|
: panelData.tabComponent;
|
|
5536
|
-
const view = new DockviewPanelModel(this.
|
|
5537
|
-
const panel = new DockviewPanel(panelId, this.
|
|
5886
|
+
const view = new DockviewPanelModel(this.accessor, panelId, contentComponent, tabComponent);
|
|
5887
|
+
const panel = new DockviewPanel(panelId, this.accessor, new DockviewApi(this.accessor), group, view, {
|
|
5888
|
+
renderer: panelData.renderer,
|
|
5889
|
+
});
|
|
5538
5890
|
panel.init({
|
|
5539
5891
|
title: title !== null && title !== void 0 ? title : panelId,
|
|
5540
5892
|
params: params !== null && params !== void 0 ? params : {},
|
|
@@ -5914,7 +6266,265 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5914
6266
|
}
|
|
5915
6267
|
}
|
|
5916
6268
|
|
|
6269
|
+
class PopoutWindow extends CompositeDisposable {
|
|
6270
|
+
constructor(id, className, options) {
|
|
6271
|
+
super();
|
|
6272
|
+
this.id = id;
|
|
6273
|
+
this.className = className;
|
|
6274
|
+
this.options = options;
|
|
6275
|
+
this._onDidClose = new Emitter();
|
|
6276
|
+
this.onDidClose = this._onDidClose.event;
|
|
6277
|
+
this._window = null;
|
|
6278
|
+
this.addDisposables(this._onDidClose, {
|
|
6279
|
+
dispose: () => {
|
|
6280
|
+
this.close();
|
|
6281
|
+
},
|
|
6282
|
+
});
|
|
6283
|
+
}
|
|
6284
|
+
dimensions() {
|
|
6285
|
+
if (!this._window) {
|
|
6286
|
+
return null;
|
|
6287
|
+
}
|
|
6288
|
+
const left = this._window.value.screenX;
|
|
6289
|
+
const top = this._window.value.screenY;
|
|
6290
|
+
const width = this._window.value.innerWidth;
|
|
6291
|
+
const height = this._window.value.innerHeight;
|
|
6292
|
+
return { top, left, width, height };
|
|
6293
|
+
}
|
|
6294
|
+
close() {
|
|
6295
|
+
if (this._window) {
|
|
6296
|
+
this._window.disposable.dispose();
|
|
6297
|
+
this._window.value.close();
|
|
6298
|
+
this._window = null;
|
|
6299
|
+
}
|
|
6300
|
+
}
|
|
6301
|
+
open(content) {
|
|
6302
|
+
if (this._window) {
|
|
6303
|
+
throw new Error('instance of popout window is already open');
|
|
6304
|
+
}
|
|
6305
|
+
const url = `${this.options.url}`;
|
|
6306
|
+
const features = Object.entries({
|
|
6307
|
+
top: this.options.top,
|
|
6308
|
+
left: this.options.left,
|
|
6309
|
+
width: this.options.width,
|
|
6310
|
+
height: this.options.height,
|
|
6311
|
+
})
|
|
6312
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
6313
|
+
.join(',');
|
|
6314
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Window/open
|
|
6315
|
+
const externalWindow = window.open(url, this.id, features);
|
|
6316
|
+
if (!externalWindow) {
|
|
6317
|
+
return;
|
|
6318
|
+
}
|
|
6319
|
+
const disposable = new CompositeDisposable();
|
|
6320
|
+
this._window = { value: externalWindow, disposable };
|
|
6321
|
+
const cleanUp = () => {
|
|
6322
|
+
this._onDidClose.fire();
|
|
6323
|
+
this._window = null;
|
|
6324
|
+
};
|
|
6325
|
+
// prevent any default content from loading
|
|
6326
|
+
// externalWindow.document.body.replaceWith(document.createElement('div'));
|
|
6327
|
+
disposable.addDisposables(addDisposableWindowListener(window, 'beforeunload', () => {
|
|
6328
|
+
cleanUp();
|
|
6329
|
+
this.close();
|
|
6330
|
+
}));
|
|
6331
|
+
externalWindow.addEventListener('load', () => {
|
|
6332
|
+
const externalDocument = externalWindow.document;
|
|
6333
|
+
externalDocument.title = document.title;
|
|
6334
|
+
const div = document.createElement('div');
|
|
6335
|
+
div.classList.add('dv-popout-window');
|
|
6336
|
+
div.style.position = 'absolute';
|
|
6337
|
+
div.style.width = '100%';
|
|
6338
|
+
div.style.height = '100%';
|
|
6339
|
+
div.style.top = '0px';
|
|
6340
|
+
div.style.left = '0px';
|
|
6341
|
+
div.classList.add(this.className);
|
|
6342
|
+
div.appendChild(content);
|
|
6343
|
+
externalDocument.body.replaceChildren(div);
|
|
6344
|
+
externalDocument.body.classList.add(this.className);
|
|
6345
|
+
addStyles(externalDocument, window.document.styleSheets);
|
|
6346
|
+
externalWindow.addEventListener('beforeunload', () => {
|
|
6347
|
+
// TODO: indicate external window is closing
|
|
6348
|
+
cleanUp();
|
|
6349
|
+
});
|
|
6350
|
+
});
|
|
6351
|
+
}
|
|
6352
|
+
}
|
|
6353
|
+
|
|
6354
|
+
class DockviewPopoutGroupPanel extends CompositeDisposable {
|
|
6355
|
+
constructor(id, group, options) {
|
|
6356
|
+
var _a;
|
|
6357
|
+
super();
|
|
6358
|
+
this.id = id;
|
|
6359
|
+
this.group = group;
|
|
6360
|
+
this.options = options;
|
|
6361
|
+
this.window = new PopoutWindow(id, (_a = options.className) !== null && _a !== void 0 ? _a : '', {
|
|
6362
|
+
url: this.options.popoutUrl,
|
|
6363
|
+
left: this.options.box.left,
|
|
6364
|
+
top: this.options.box.top,
|
|
6365
|
+
width: this.options.box.width,
|
|
6366
|
+
height: this.options.box.height,
|
|
6367
|
+
});
|
|
6368
|
+
group.model.location = 'popout';
|
|
6369
|
+
this.addDisposables(this.window, {
|
|
6370
|
+
dispose: () => {
|
|
6371
|
+
group.model.location = 'grid';
|
|
6372
|
+
},
|
|
6373
|
+
}, this.window.onDidClose(() => {
|
|
6374
|
+
this.dispose();
|
|
6375
|
+
}));
|
|
6376
|
+
this.window.open(group.element);
|
|
6377
|
+
}
|
|
6378
|
+
}
|
|
6379
|
+
|
|
5917
6380
|
const DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
|
|
6381
|
+
const DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100 };
|
|
6382
|
+
|
|
6383
|
+
function createFocusableElement() {
|
|
6384
|
+
const element = document.createElement('div');
|
|
6385
|
+
element.tabIndex = -1;
|
|
6386
|
+
return element;
|
|
6387
|
+
}
|
|
6388
|
+
class OverlayRenderContainer extends CompositeDisposable {
|
|
6389
|
+
constructor(element) {
|
|
6390
|
+
super();
|
|
6391
|
+
this.element = element;
|
|
6392
|
+
this.map = {};
|
|
6393
|
+
this.addDisposables(Disposable.from(() => {
|
|
6394
|
+
for (const value of Object.values(this.map)) {
|
|
6395
|
+
value.disposable.dispose();
|
|
6396
|
+
value.destroy.dispose();
|
|
6397
|
+
}
|
|
6398
|
+
}));
|
|
6399
|
+
}
|
|
6400
|
+
detatch(panel) {
|
|
6401
|
+
if (this.map[panel.api.id]) {
|
|
6402
|
+
const { disposable, destroy } = this.map[panel.api.id];
|
|
6403
|
+
disposable.dispose();
|
|
6404
|
+
destroy.dispose();
|
|
6405
|
+
delete this.map[panel.api.id];
|
|
6406
|
+
return true;
|
|
6407
|
+
}
|
|
6408
|
+
return false;
|
|
6409
|
+
}
|
|
6410
|
+
attach(options) {
|
|
6411
|
+
const { panel, referenceContainer } = options;
|
|
6412
|
+
if (!this.map[panel.api.id]) {
|
|
6413
|
+
const element = createFocusableElement();
|
|
6414
|
+
element.className = 'dv-render-overlay';
|
|
6415
|
+
this.map[panel.api.id] = {
|
|
6416
|
+
panel,
|
|
6417
|
+
disposable: Disposable.NONE,
|
|
6418
|
+
destroy: Disposable.NONE,
|
|
6419
|
+
element,
|
|
6420
|
+
};
|
|
6421
|
+
}
|
|
6422
|
+
const focusContainer = this.map[panel.api.id].element;
|
|
6423
|
+
if (panel.view.content.element.parentElement !== focusContainer) {
|
|
6424
|
+
focusContainer.appendChild(panel.view.content.element);
|
|
6425
|
+
}
|
|
6426
|
+
if (focusContainer.parentElement !== this.element) {
|
|
6427
|
+
this.element.appendChild(focusContainer);
|
|
6428
|
+
}
|
|
6429
|
+
const resize = () => {
|
|
6430
|
+
// TODO propagate position to avoid getDomNodePagePosition calls, possible performance bottleneck?
|
|
6431
|
+
const box = getDomNodePagePosition(referenceContainer.element);
|
|
6432
|
+
const box2 = getDomNodePagePosition(this.element);
|
|
6433
|
+
focusContainer.style.left = `${box.left - box2.left}px`;
|
|
6434
|
+
focusContainer.style.top = `${box.top - box2.top}px`;
|
|
6435
|
+
focusContainer.style.width = `${box.width}px`;
|
|
6436
|
+
focusContainer.style.height = `${box.height}px`;
|
|
6437
|
+
toggleClass(focusContainer, 'dv-render-overlay-float', panel.group.api.location === 'floating');
|
|
6438
|
+
};
|
|
6439
|
+
const visibilityChanged = () => {
|
|
6440
|
+
if (panel.api.isVisible) {
|
|
6441
|
+
resize();
|
|
6442
|
+
}
|
|
6443
|
+
focusContainer.style.display = panel.api.isVisible ? '' : 'none';
|
|
6444
|
+
};
|
|
6445
|
+
const disposable = new CompositeDisposable(
|
|
6446
|
+
/**
|
|
6447
|
+
* since container is positioned absoutely we must explicitly forward
|
|
6448
|
+
* the dnd events for the expect behaviours to continue to occur in terms of dnd
|
|
6449
|
+
*
|
|
6450
|
+
* the dnd observer does not need to be conditional on whether the panel is visible since
|
|
6451
|
+
* non-visible panels are 'display: none' and in such case the dnd observer will not fire.
|
|
6452
|
+
*/
|
|
6453
|
+
new DragAndDropObserver(focusContainer, {
|
|
6454
|
+
onDragEnd: (e) => {
|
|
6455
|
+
referenceContainer.dropTarget.dnd.onDragEnd(e);
|
|
6456
|
+
},
|
|
6457
|
+
onDragEnter: (e) => {
|
|
6458
|
+
referenceContainer.dropTarget.dnd.onDragEnter(e);
|
|
6459
|
+
},
|
|
6460
|
+
onDragLeave: (e) => {
|
|
6461
|
+
referenceContainer.dropTarget.dnd.onDragLeave(e);
|
|
6462
|
+
},
|
|
6463
|
+
onDrop: (e) => {
|
|
6464
|
+
referenceContainer.dropTarget.dnd.onDrop(e);
|
|
6465
|
+
},
|
|
6466
|
+
onDragOver: (e) => {
|
|
6467
|
+
referenceContainer.dropTarget.dnd.onDragOver(e);
|
|
6468
|
+
},
|
|
6469
|
+
}), panel.api.onDidVisibilityChange((event) => {
|
|
6470
|
+
/**
|
|
6471
|
+
* Control the visibility of the content, however even when not visible (display: none)
|
|
6472
|
+
* the content is still maintained within the DOM hence DOM specific attributes
|
|
6473
|
+
* such as scroll position are maintained when next made visible.
|
|
6474
|
+
*/
|
|
6475
|
+
visibilityChanged();
|
|
6476
|
+
}), panel.api.onDidDimensionsChange(() => {
|
|
6477
|
+
if (!panel.api.isVisible) {
|
|
6478
|
+
return;
|
|
6479
|
+
}
|
|
6480
|
+
resize();
|
|
6481
|
+
}));
|
|
6482
|
+
this.map[panel.api.id].destroy = Disposable.from(() => {
|
|
6483
|
+
focusContainer.removeChild(panel.view.content.element);
|
|
6484
|
+
this.element.removeChild(focusContainer);
|
|
6485
|
+
});
|
|
6486
|
+
queueMicrotask(() => {
|
|
6487
|
+
if (this.isDisposed) {
|
|
6488
|
+
return;
|
|
6489
|
+
}
|
|
6490
|
+
/**
|
|
6491
|
+
* wait until everything has finished in the current stack-frame call before
|
|
6492
|
+
* calling the first resize as other size-altering events may still occur before
|
|
6493
|
+
* the end of the stack-frame.
|
|
6494
|
+
*/
|
|
6495
|
+
visibilityChanged();
|
|
6496
|
+
});
|
|
6497
|
+
// dispose of logic asoccciated with previous reference-container
|
|
6498
|
+
this.map[panel.api.id].disposable.dispose();
|
|
6499
|
+
// and reset the disposable to the active reference-container
|
|
6500
|
+
this.map[panel.api.id].disposable = disposable;
|
|
6501
|
+
return focusContainer;
|
|
6502
|
+
}
|
|
6503
|
+
}
|
|
6504
|
+
|
|
6505
|
+
const DEFAULT_ROOT_OVERLAY_MODEL = {
|
|
6506
|
+
activationSize: { type: 'pixels', value: 10 },
|
|
6507
|
+
size: { type: 'pixels', value: 20 },
|
|
6508
|
+
};
|
|
6509
|
+
function getTheme(element) {
|
|
6510
|
+
function toClassList(element) {
|
|
6511
|
+
const list = [];
|
|
6512
|
+
for (let i = 0; i < element.classList.length; i++) {
|
|
6513
|
+
list.push(element.classList.item(i));
|
|
6514
|
+
}
|
|
6515
|
+
return list;
|
|
6516
|
+
}
|
|
6517
|
+
let theme = undefined;
|
|
6518
|
+
let parent = element;
|
|
6519
|
+
while (parent !== null) {
|
|
6520
|
+
theme = toClassList(parent).find((cls) => cls.startsWith('dockview-theme-'));
|
|
6521
|
+
if (typeof theme === 'string') {
|
|
6522
|
+
break;
|
|
6523
|
+
}
|
|
6524
|
+
parent = parent.parentElement;
|
|
6525
|
+
}
|
|
6526
|
+
return theme;
|
|
6527
|
+
}
|
|
5918
6528
|
class DockviewComponent extends BaseGrid {
|
|
5919
6529
|
get orientation() {
|
|
5920
6530
|
return this.gridview.orientation;
|
|
@@ -5935,8 +6545,12 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5935
6545
|
}
|
|
5936
6546
|
return activeGroup.activePanel;
|
|
5937
6547
|
}
|
|
5938
|
-
|
|
6548
|
+
get renderer() {
|
|
5939
6549
|
var _a;
|
|
6550
|
+
return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisibile';
|
|
6551
|
+
}
|
|
6552
|
+
constructor(options) {
|
|
6553
|
+
var _a, _b;
|
|
5940
6554
|
super({
|
|
5941
6555
|
proportionalLayout: true,
|
|
5942
6556
|
orientation: (_a = options.orientation) !== null && _a !== void 0 ? _a : exports.Orientation.HORIZONTAL,
|
|
@@ -5961,12 +6575,27 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5961
6575
|
this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
|
|
5962
6576
|
this._onDidActivePanelChange = new Emitter();
|
|
5963
6577
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
5964
|
-
this.
|
|
6578
|
+
this._floatingGroups = [];
|
|
6579
|
+
this._popoutGroups = [];
|
|
6580
|
+
const gready = document.createElement('div');
|
|
6581
|
+
gready.className = 'dv-overlay-render-container';
|
|
6582
|
+
this.gridview.element.appendChild(gready);
|
|
6583
|
+
this.overlayRenderContainer = new OverlayRenderContainer(gready);
|
|
5965
6584
|
toggleClass(this.gridview.element, 'dv-dockview', true);
|
|
5966
|
-
|
|
6585
|
+
toggleClass(this.element, 'dv-debug', !!options.debug);
|
|
6586
|
+
this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
|
|
5967
6587
|
this.updateWatermark();
|
|
5968
6588
|
}), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
|
|
5969
6589
|
this._bufferOnDidLayoutChange.fire();
|
|
6590
|
+
}), Disposable.from(() => {
|
|
6591
|
+
// iterate over a copy of the array since .dispose() mutates the original array
|
|
6592
|
+
for (const group of [...this._floatingGroups]) {
|
|
6593
|
+
group.dispose();
|
|
6594
|
+
}
|
|
6595
|
+
// iterate over a copy of the array since .dispose() mutates the original array
|
|
6596
|
+
for (const group of [...this._popoutGroups]) {
|
|
6597
|
+
group.dispose();
|
|
6598
|
+
}
|
|
5970
6599
|
}));
|
|
5971
6600
|
this._options = options;
|
|
5972
6601
|
if (!this.options.components) {
|
|
@@ -5985,7 +6614,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
5985
6614
|
!this.options.watermarkFrameworkComponent) {
|
|
5986
6615
|
this.options.watermarkComponent = Watermark;
|
|
5987
6616
|
}
|
|
5988
|
-
|
|
6617
|
+
this._rootDropTarget = new Droptarget(this.element, {
|
|
5989
6618
|
canDisplayOverlay: (event, position) => {
|
|
5990
6619
|
const data = getPanelData();
|
|
5991
6620
|
if (data) {
|
|
@@ -6018,12 +6647,9 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6018
6647
|
return false;
|
|
6019
6648
|
},
|
|
6020
6649
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
6021
|
-
overlayModel:
|
|
6022
|
-
activationSize: { type: 'pixels', value: 10 },
|
|
6023
|
-
size: { type: 'pixels', value: 20 },
|
|
6024
|
-
},
|
|
6650
|
+
overlayModel: (_b = this.options.rootOverlayModel) !== null && _b !== void 0 ? _b : DEFAULT_ROOT_OVERLAY_MODEL,
|
|
6025
6651
|
});
|
|
6026
|
-
this.addDisposables(
|
|
6652
|
+
this.addDisposables(this._rootDropTarget.onDrop((event) => {
|
|
6027
6653
|
var _a;
|
|
6028
6654
|
const data = getPanelData();
|
|
6029
6655
|
if (data) {
|
|
@@ -6032,10 +6658,59 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6032
6658
|
else {
|
|
6033
6659
|
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
|
|
6034
6660
|
}
|
|
6035
|
-
}),
|
|
6661
|
+
}), this._rootDropTarget);
|
|
6036
6662
|
this._api = new DockviewApi(this);
|
|
6037
6663
|
this.updateWatermark();
|
|
6038
6664
|
}
|
|
6665
|
+
addPopoutGroup(item, options) {
|
|
6666
|
+
var _a;
|
|
6667
|
+
let group;
|
|
6668
|
+
let box = options === null || options === void 0 ? void 0 : options.position;
|
|
6669
|
+
if (item instanceof DockviewPanel) {
|
|
6670
|
+
group = this.createGroup();
|
|
6671
|
+
this.removePanel(item, {
|
|
6672
|
+
removeEmptyGroup: true,
|
|
6673
|
+
skipDispose: true,
|
|
6674
|
+
});
|
|
6675
|
+
group.model.openPanel(item);
|
|
6676
|
+
if (!box) {
|
|
6677
|
+
box = this.element.getBoundingClientRect();
|
|
6678
|
+
}
|
|
6679
|
+
}
|
|
6680
|
+
else {
|
|
6681
|
+
group = item;
|
|
6682
|
+
if (!box) {
|
|
6683
|
+
box = group.element.getBoundingClientRect();
|
|
6684
|
+
}
|
|
6685
|
+
const skip = typeof (options === null || options === void 0 ? void 0 : options.skipRemoveGroup) === 'boolean' &&
|
|
6686
|
+
options.skipRemoveGroup;
|
|
6687
|
+
if (!skip) {
|
|
6688
|
+
this.doRemoveGroup(item, { skipDispose: true });
|
|
6689
|
+
}
|
|
6690
|
+
}
|
|
6691
|
+
const theme = getTheme(this.gridview.element);
|
|
6692
|
+
const popoutWindow = new DockviewPopoutGroupPanel(`${this.id}-${group.id}`, // globally unique within dockview
|
|
6693
|
+
group, {
|
|
6694
|
+
className: theme !== null && theme !== void 0 ? theme : '',
|
|
6695
|
+
popoutUrl: (_a = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _a !== void 0 ? _a : '/popout.html',
|
|
6696
|
+
box: {
|
|
6697
|
+
left: window.screenX + box.left,
|
|
6698
|
+
top: window.screenY + box.top,
|
|
6699
|
+
width: box.width,
|
|
6700
|
+
height: box.height,
|
|
6701
|
+
},
|
|
6702
|
+
});
|
|
6703
|
+
popoutWindow.addDisposables({
|
|
6704
|
+
dispose: () => {
|
|
6705
|
+
remove(this._popoutGroups, popoutWindow);
|
|
6706
|
+
this.updateWatermark();
|
|
6707
|
+
},
|
|
6708
|
+
}, popoutWindow.window.onDidClose(() => {
|
|
6709
|
+
this.doAddGroup(group, [0]);
|
|
6710
|
+
}));
|
|
6711
|
+
this._popoutGroups.push(popoutWindow);
|
|
6712
|
+
this.updateWatermark();
|
|
6713
|
+
}
|
|
6039
6714
|
addFloatingGroup(item, coord, options) {
|
|
6040
6715
|
var _a, _b, _c, _d, _e, _f;
|
|
6041
6716
|
let group;
|
|
@@ -6055,9 +6730,13 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6055
6730
|
this.doRemoveGroup(item, { skipDispose: true });
|
|
6056
6731
|
}
|
|
6057
6732
|
}
|
|
6058
|
-
group.model.
|
|
6059
|
-
const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
|
|
6060
|
-
|
|
6733
|
+
group.model.location = 'floating';
|
|
6734
|
+
const overlayLeft = typeof (coord === null || coord === void 0 ? void 0 : coord.x) === 'number'
|
|
6735
|
+
? Math.max(coord.x, 0)
|
|
6736
|
+
: DEFAULT_FLOATING_GROUP_POSITION.left;
|
|
6737
|
+
const overlayTop = typeof (coord === null || coord === void 0 ? void 0 : coord.y) === 'number'
|
|
6738
|
+
? Math.max(coord.y, 0)
|
|
6739
|
+
: DEFAULT_FLOATING_GROUP_POSITION.top;
|
|
6061
6740
|
const overlay = new Overlay({
|
|
6062
6741
|
container: this.gridview.element,
|
|
6063
6742
|
content: group.element,
|
|
@@ -6101,12 +6780,12 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6101
6780
|
}), {
|
|
6102
6781
|
dispose: () => {
|
|
6103
6782
|
disposable.dispose();
|
|
6104
|
-
group.model.
|
|
6105
|
-
remove(this.
|
|
6783
|
+
group.model.location = 'grid';
|
|
6784
|
+
remove(this._floatingGroups, floatingGroupPanel);
|
|
6106
6785
|
this.updateWatermark();
|
|
6107
6786
|
},
|
|
6108
6787
|
});
|
|
6109
|
-
this.
|
|
6788
|
+
this._floatingGroups.push(floatingGroupPanel);
|
|
6110
6789
|
this.updateWatermark();
|
|
6111
6790
|
}
|
|
6112
6791
|
orthogonalize(position) {
|
|
@@ -6142,16 +6821,18 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6142
6821
|
}
|
|
6143
6822
|
updateOptions(options) {
|
|
6144
6823
|
var _a, _b;
|
|
6145
|
-
const
|
|
6824
|
+
const changed_orientation = typeof options.orientation === 'string' &&
|
|
6146
6825
|
this.gridview.orientation !== options.orientation;
|
|
6147
|
-
const
|
|
6826
|
+
const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
|
|
6148
6827
|
options.floatingGroupBounds !== this.options.floatingGroupBounds;
|
|
6828
|
+
const changed_rootOverlayOptions = options.rootOverlayModel !== undefined &&
|
|
6829
|
+
options.rootOverlayModel !== this.options.rootOverlayModel;
|
|
6149
6830
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
6150
|
-
if (
|
|
6831
|
+
if (changed_orientation) {
|
|
6151
6832
|
this.gridview.orientation = options.orientation;
|
|
6152
6833
|
}
|
|
6153
|
-
if (
|
|
6154
|
-
for (const group of this.
|
|
6834
|
+
if (changed_floatingGroupBounds) {
|
|
6835
|
+
for (const group of this._floatingGroups) {
|
|
6155
6836
|
switch (this.options.floatingGroupBounds) {
|
|
6156
6837
|
case 'boundedWithinViewport':
|
|
6157
6838
|
group.overlay.minimumInViewportHeight = undefined;
|
|
@@ -6172,12 +6853,15 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6172
6853
|
group.overlay.setBounds({});
|
|
6173
6854
|
}
|
|
6174
6855
|
}
|
|
6856
|
+
if (changed_rootOverlayOptions) {
|
|
6857
|
+
this._rootDropTarget.setOverlayModel(options.rootOverlayModel);
|
|
6858
|
+
}
|
|
6175
6859
|
this.layout(this.gridview.width, this.gridview.height, true);
|
|
6176
6860
|
}
|
|
6177
6861
|
layout(width, height, forceResize) {
|
|
6178
6862
|
super.layout(width, height, forceResize);
|
|
6179
|
-
if (this.
|
|
6180
|
-
for (const floating of this.
|
|
6863
|
+
if (this._floatingGroups) {
|
|
6864
|
+
for (const floating of this._floatingGroups) {
|
|
6181
6865
|
// ensure floting groups stay within visible boundaries
|
|
6182
6866
|
floating.overlay.setBounds();
|
|
6183
6867
|
}
|
|
@@ -6245,10 +6929,16 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6245
6929
|
collection[panel.id] = panel.toJSON();
|
|
6246
6930
|
return collection;
|
|
6247
6931
|
}, {});
|
|
6248
|
-
const floats = this.
|
|
6932
|
+
const floats = this._floatingGroups.map((group) => {
|
|
6249
6933
|
return {
|
|
6250
|
-
data:
|
|
6251
|
-
position:
|
|
6934
|
+
data: group.group.toJSON(),
|
|
6935
|
+
position: group.overlay.toJSON(),
|
|
6936
|
+
};
|
|
6937
|
+
});
|
|
6938
|
+
const popoutGroups = this._popoutGroups.map((group) => {
|
|
6939
|
+
return {
|
|
6940
|
+
data: group.group.toJSON(),
|
|
6941
|
+
position: group.window.dimensions(),
|
|
6252
6942
|
};
|
|
6253
6943
|
});
|
|
6254
6944
|
const result = {
|
|
@@ -6259,10 +6949,13 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6259
6949
|
if (floats.length > 0) {
|
|
6260
6950
|
result.floatingGroups = floats;
|
|
6261
6951
|
}
|
|
6952
|
+
if (popoutGroups.length > 0) {
|
|
6953
|
+
result.popoutGroups = popoutGroups;
|
|
6954
|
+
}
|
|
6262
6955
|
return result;
|
|
6263
6956
|
}
|
|
6264
6957
|
fromJSON(data) {
|
|
6265
|
-
var _a;
|
|
6958
|
+
var _a, _b;
|
|
6266
6959
|
this.clear();
|
|
6267
6960
|
if (typeof data !== 'object' || data === null) {
|
|
6268
6961
|
throw new Error('serialized layout must be a non-null object');
|
|
@@ -6329,7 +7022,16 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6329
7022
|
width: position.width,
|
|
6330
7023
|
}, { skipRemoveGroup: true, inDragMode: false });
|
|
6331
7024
|
}
|
|
6332
|
-
|
|
7025
|
+
const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
|
|
7026
|
+
for (const serializedPopoutGroup of serializedPopoutGroups) {
|
|
7027
|
+
const { data, position } = serializedPopoutGroup;
|
|
7028
|
+
const group = createGroupFromSerializedState(data);
|
|
7029
|
+
this.addPopoutGroup(group, {
|
|
7030
|
+
skipRemoveGroup: true,
|
|
7031
|
+
position: position !== null && position !== void 0 ? position : undefined,
|
|
7032
|
+
});
|
|
7033
|
+
}
|
|
7034
|
+
for (const floatingGroup of this._floatingGroups) {
|
|
6333
7035
|
floatingGroup.overlay.setBounds();
|
|
6334
7036
|
}
|
|
6335
7037
|
if (typeof activeGroup === 'string') {
|
|
@@ -6361,7 +7063,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6361
7063
|
this._onDidRemoveGroup.fire(group);
|
|
6362
7064
|
}
|
|
6363
7065
|
// iterate over a reassigned array since original array will be modified
|
|
6364
|
-
for (const floatingGroup of [...this.
|
|
7066
|
+
for (const floatingGroup of [...this._floatingGroups]) {
|
|
6365
7067
|
floatingGroup.dispose();
|
|
6366
7068
|
}
|
|
6367
7069
|
// fires clean-up events and clears the underlying HTML gridview.
|
|
@@ -6453,7 +7155,8 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6453
7155
|
group.model.openPanel(panel);
|
|
6454
7156
|
this.doSetGroupAndPanelActive(group);
|
|
6455
7157
|
}
|
|
6456
|
-
else if (referenceGroup.api.
|
|
7158
|
+
else if (referenceGroup.api.location === 'floating' ||
|
|
7159
|
+
target === 'center') {
|
|
6457
7160
|
panel = this.createPanel(options, referenceGroup);
|
|
6458
7161
|
referenceGroup.model.openPanel(panel);
|
|
6459
7162
|
}
|
|
@@ -6497,6 +7200,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6497
7200
|
}
|
|
6498
7201
|
group.model.removePanel(panel);
|
|
6499
7202
|
if (!options.skipDispose) {
|
|
7203
|
+
this.overlayRenderContainer.detatch(panel);
|
|
6500
7204
|
panel.dispose();
|
|
6501
7205
|
}
|
|
6502
7206
|
if (group.size === 0 && options.removeEmptyGroup) {
|
|
@@ -6513,7 +7217,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6513
7217
|
}
|
|
6514
7218
|
updateWatermark() {
|
|
6515
7219
|
var _a, _b;
|
|
6516
|
-
if (this.groups.filter((x) =>
|
|
7220
|
+
if (this.groups.filter((x) => x.api.location === 'grid').length === 0) {
|
|
6517
7221
|
if (!this.watermark) {
|
|
6518
7222
|
this.watermark = this.createWatermarkComponent();
|
|
6519
7223
|
this.watermark.init({
|
|
@@ -6588,19 +7292,40 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6588
7292
|
}
|
|
6589
7293
|
}
|
|
6590
7294
|
doRemoveGroup(group, options) {
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
if (
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
|
|
7295
|
+
if (group.api.location === 'floating') {
|
|
7296
|
+
const floatingGroup = this._floatingGroups.find((_) => _.group === group);
|
|
7297
|
+
if (floatingGroup) {
|
|
7298
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
7299
|
+
floatingGroup.group.dispose();
|
|
7300
|
+
this._groups.delete(group.id);
|
|
7301
|
+
this._onDidRemoveGroup.fire(group);
|
|
7302
|
+
}
|
|
7303
|
+
remove(this._floatingGroups, floatingGroup);
|
|
7304
|
+
floatingGroup.dispose();
|
|
7305
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
7306
|
+
const groups = Array.from(this._groups.values());
|
|
7307
|
+
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
7308
|
+
}
|
|
7309
|
+
return floatingGroup.group;
|
|
6597
7310
|
}
|
|
6598
|
-
|
|
6599
|
-
|
|
6600
|
-
|
|
6601
|
-
|
|
7311
|
+
throw new Error('failed to find floating group');
|
|
7312
|
+
}
|
|
7313
|
+
if (group.api.location === 'popout') {
|
|
7314
|
+
const selectedGroup = this._popoutGroups.find((_) => _.group === group);
|
|
7315
|
+
if (selectedGroup) {
|
|
7316
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
7317
|
+
selectedGroup.group.dispose();
|
|
7318
|
+
this._groups.delete(group.id);
|
|
7319
|
+
this._onDidRemoveGroup.fire(group);
|
|
7320
|
+
}
|
|
7321
|
+
selectedGroup.dispose();
|
|
7322
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
7323
|
+
const groups = Array.from(this._groups.values());
|
|
7324
|
+
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
7325
|
+
}
|
|
7326
|
+
return selectedGroup.group;
|
|
6602
7327
|
}
|
|
6603
|
-
|
|
7328
|
+
throw new Error('failed to find popout group');
|
|
6604
7329
|
}
|
|
6605
7330
|
return super.doRemoveGroup(group, options);
|
|
6606
7331
|
}
|
|
@@ -6632,8 +7357,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6632
7357
|
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
6633
7358
|
if (sourceGroup && sourceGroup.size < 2) {
|
|
6634
7359
|
const [targetParentLocation, to] = tail(targetLocation);
|
|
6635
|
-
|
|
6636
|
-
if (!isFloating) {
|
|
7360
|
+
if (sourceGroup.api.location === 'grid') {
|
|
6637
7361
|
const sourceLocation = getGridLocation(sourceGroup.element);
|
|
6638
7362
|
const [sourceParentLocation, from] = tail(sourceLocation);
|
|
6639
7363
|
if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
|
|
@@ -6679,12 +7403,25 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6679
7403
|
}
|
|
6680
7404
|
}
|
|
6681
7405
|
else {
|
|
6682
|
-
|
|
6683
|
-
|
|
6684
|
-
|
|
6685
|
-
|
|
6686
|
-
|
|
6687
|
-
|
|
7406
|
+
switch (sourceGroup.api.location) {
|
|
7407
|
+
case 'grid':
|
|
7408
|
+
this.gridview.removeView(getGridLocation(sourceGroup.element));
|
|
7409
|
+
break;
|
|
7410
|
+
case 'floating': {
|
|
7411
|
+
const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === sourceGroup);
|
|
7412
|
+
if (!selectedFloatingGroup) {
|
|
7413
|
+
throw new Error('failed to find floating group');
|
|
7414
|
+
}
|
|
7415
|
+
selectedFloatingGroup.dispose();
|
|
7416
|
+
break;
|
|
7417
|
+
}
|
|
7418
|
+
case 'popout': {
|
|
7419
|
+
const selectedPopoutGroup = this._popoutGroups.find((x) => x.group === sourceGroup);
|
|
7420
|
+
if (!selectedPopoutGroup) {
|
|
7421
|
+
throw new Error('failed to find popout group');
|
|
7422
|
+
}
|
|
7423
|
+
selectedPopoutGroup.dispose();
|
|
7424
|
+
}
|
|
6688
7425
|
}
|
|
6689
7426
|
const referenceLocation = getGridLocation(referenceGroup.element);
|
|
6690
7427
|
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
|
|
@@ -6746,7 +7483,7 @@ define(['exports'], (function (exports) { 'use strict';
|
|
|
6746
7483
|
const contentComponent = options.component;
|
|
6747
7484
|
const tabComponent = (_a = options.tabComponent) !== null && _a !== void 0 ? _a : this.options.defaultTabComponent;
|
|
6748
7485
|
const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
|
|
6749
|
-
const panel = new DockviewPanel(options.id, this, this._api, group, view);
|
|
7486
|
+
const panel = new DockviewPanel(options.id, this, this._api, group, view, { renderer: options.renderer });
|
|
6750
7487
|
panel.init({
|
|
6751
7488
|
title: (_b = options.title) !== null && _b !== void 0 ? _b : options.id,
|
|
6752
7489
|
params: (_c = options === null || options === void 0 ? void 0 : options.params) !== null && _c !== void 0 ? _c : {},
|