dockview-core 1.17.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/component.api.d.ts +3 -3
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +10 -8
- package/dist/cjs/api/dockviewGroupPanelApi.js +1 -0
- package/dist/cjs/api/dockviewPanelApi.d.ts +6 -14
- package/dist/cjs/api/dockviewPanelApi.js +5 -3
- package/dist/cjs/dnd/abstractDragHandler.js +1 -1
- package/dist/cjs/dnd/dnd.d.ts +2 -2
- package/dist/cjs/dnd/droptarget.js +4 -4
- package/dist/cjs/dockview/components/panel/content.d.ts +2 -2
- package/dist/cjs/dockview/components/panel/content.js +3 -1
- package/dist/cjs/dockview/components/tab/defaultTab.d.ts +3 -3
- package/dist/cjs/dockview/components/tab/tab.js +4 -4
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +5 -9
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +1 -2
- package/dist/cjs/dockview/components/watermark/watermark.d.ts +1 -4
- package/dist/cjs/dockview/components/watermark/watermark.js +2 -34
- package/dist/cjs/dockview/dockviewComponent.d.ts +33 -16
- package/dist/cjs/dockview/dockviewComponent.js +103 -38
- package/dist/cjs/dockview/dockviewGroupPanel.js +16 -12
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +4 -3
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +10 -10
- package/dist/cjs/dockview/dockviewPanel.d.ts +4 -4
- package/dist/cjs/dockview/dockviewPanelModel.d.ts +1 -1
- package/dist/cjs/dockview/options.d.ts +12 -0
- package/dist/cjs/dockview/options.js +1 -0
- package/dist/cjs/dom.d.ts +11 -1
- package/dist/cjs/dom.js +19 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +8 -3
- package/dist/cjs/gridview/baseComponentGridview.js +8 -8
- package/dist/cjs/gridview/basePanelView.d.ts +1 -1
- package/dist/cjs/gridview/branchNode.d.ts +1 -1
- package/dist/cjs/gridview/branchNode.js +1 -1
- package/dist/cjs/gridview/gridview.d.ts +9 -1
- package/dist/cjs/gridview/gridview.js +51 -7
- package/dist/cjs/gridview/gridviewPanel.d.ts +4 -0
- package/dist/cjs/gridview/gridviewPanel.js +60 -32
- package/dist/cjs/gridview/leafNode.d.ts +1 -1
- package/dist/cjs/index.d.ts +8 -9
- package/dist/cjs/index.js +14 -7
- package/dist/cjs/overlay/overlay.d.ts +6 -3
- package/dist/cjs/overlay/overlay.js +15 -0
- package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +1 -1
- package/dist/cjs/paneview/defaultPaneviewHeader.js +5 -3
- package/dist/cjs/paneview/paneview.d.ts +3 -3
- package/dist/cjs/paneview/paneview.js +3 -3
- package/dist/cjs/paneview/paneviewComponent.d.ts +2 -2
- package/dist/cjs/paneview/paneviewPanel.d.ts +2 -2
- package/dist/cjs/paneview/paneviewPanel.js +3 -3
- package/dist/cjs/popoutWindow.js +23 -16
- package/dist/cjs/splitview/splitview.d.ts +6 -6
- package/dist/cjs/splitview/splitview.js +18 -17
- package/dist/cjs/splitview/splitviewComponent.d.ts +2 -2
- package/dist/cjs/splitview/viewItem.d.ts +1 -1
- package/dist/cjs/svg.js +1 -1
- package/dist/dockview-core.amd.js +346 -210
- 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 +345 -209
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +346 -210
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +347 -209
- 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 +346 -210
- 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 +345 -209
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +3 -3
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +10 -8
- package/dist/esm/api/dockviewGroupPanelApi.js +1 -0
- package/dist/esm/api/dockviewPanelApi.d.ts +6 -14
- package/dist/esm/api/dockviewPanelApi.js +5 -3
- package/dist/esm/dnd/abstractDragHandler.js +1 -1
- package/dist/esm/dnd/dnd.d.ts +2 -2
- package/dist/esm/dnd/droptarget.js +4 -4
- package/dist/esm/dockview/components/panel/content.d.ts +2 -2
- package/dist/esm/dockview/components/panel/content.js +4 -2
- package/dist/esm/dockview/components/tab/defaultTab.d.ts +3 -3
- package/dist/esm/dockview/components/tab/tab.js +4 -4
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +5 -9
- package/dist/esm/dockview/components/titlebar/voidContainer.js +1 -2
- package/dist/esm/dockview/components/watermark/watermark.d.ts +1 -4
- package/dist/esm/dockview/components/watermark/watermark.js +2 -34
- package/dist/esm/dockview/dockviewComponent.d.ts +33 -16
- package/dist/esm/dockview/dockviewComponent.js +102 -37
- package/dist/esm/dockview/dockviewGroupPanel.js +16 -12
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +4 -3
- package/dist/esm/dockview/dockviewGroupPanelModel.js +10 -10
- package/dist/esm/dockview/dockviewPanel.d.ts +4 -4
- package/dist/esm/dockview/dockviewPanelModel.d.ts +1 -1
- package/dist/esm/dockview/options.d.ts +12 -0
- package/dist/esm/dockview/options.js +1 -0
- package/dist/esm/dom.d.ts +11 -1
- package/dist/esm/dom.js +14 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +8 -3
- package/dist/esm/gridview/baseComponentGridview.js +8 -4
- package/dist/esm/gridview/basePanelView.d.ts +1 -1
- package/dist/esm/gridview/branchNode.d.ts +1 -1
- package/dist/esm/gridview/branchNode.js +1 -1
- package/dist/esm/gridview/gridview.d.ts +9 -1
- package/dist/esm/gridview/gridview.js +51 -7
- package/dist/esm/gridview/gridviewPanel.d.ts +4 -0
- package/dist/esm/gridview/gridviewPanel.js +40 -12
- package/dist/esm/gridview/leafNode.d.ts +1 -1
- package/dist/esm/index.d.ts +8 -9
- package/dist/esm/index.js +5 -6
- package/dist/esm/overlay/overlay.d.ts +6 -3
- package/dist/esm/overlay/overlay.js +11 -0
- package/dist/esm/paneview/defaultPaneviewHeader.d.ts +1 -1
- package/dist/esm/paneview/defaultPaneviewHeader.js +5 -3
- package/dist/esm/paneview/paneview.d.ts +3 -3
- package/dist/esm/paneview/paneview.js +3 -3
- package/dist/esm/paneview/paneviewComponent.d.ts +2 -2
- package/dist/esm/paneview/paneviewPanel.d.ts +2 -2
- package/dist/esm/paneview/paneviewPanel.js +3 -3
- package/dist/esm/popoutWindow.js +24 -17
- package/dist/esm/splitview/splitview.d.ts +6 -6
- package/dist/esm/splitview/splitview.js +18 -17
- package/dist/esm/splitview/splitviewComponent.d.ts +2 -2
- package/dist/esm/splitview/viewItem.d.ts +1 -1
- package/dist/esm/svg.js +1 -1
- package/dist/styles/dockview.css +111 -151
- package/package.json +1 -1
|
@@ -110,6 +110,8 @@ export class DockviewComponent extends BaseGrid {
|
|
|
110
110
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
111
111
|
this._onDidMovePanel = new Emitter();
|
|
112
112
|
this.onDidMovePanel = this._onDidMovePanel.event;
|
|
113
|
+
this._onDidMaximizedGroupChange = new Emitter();
|
|
114
|
+
this.onDidMaximizedGroupChange = this._onDidMaximizedGroupChange.event;
|
|
113
115
|
this._floatingGroups = [];
|
|
114
116
|
this._popoutGroups = [];
|
|
115
117
|
this._onDidRemoveGroup = new Emitter();
|
|
@@ -136,6 +138,11 @@ export class DockviewComponent extends BaseGrid {
|
|
|
136
138
|
if (!this._moving) {
|
|
137
139
|
this._onDidActiveGroupChange.fire(event);
|
|
138
140
|
}
|
|
141
|
+
}), this.onDidMaximizedChange((event) => {
|
|
142
|
+
this._onDidMaximizedGroupChange.fire({
|
|
143
|
+
group: event.panel,
|
|
144
|
+
isMaximized: event.isMaximized,
|
|
145
|
+
});
|
|
139
146
|
}), Event.any(this.onDidAdd, this.onDidRemove)(() => {
|
|
140
147
|
this.updateWatermark();
|
|
141
148
|
}), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange)(() => {
|
|
@@ -234,8 +241,28 @@ export class DockviewComponent extends BaseGrid {
|
|
|
234
241
|
this._api = new DockviewApi(this);
|
|
235
242
|
this.updateWatermark();
|
|
236
243
|
}
|
|
244
|
+
setVisible(panel, visible) {
|
|
245
|
+
switch (panel.api.location.type) {
|
|
246
|
+
case 'grid':
|
|
247
|
+
super.setVisible(panel, visible);
|
|
248
|
+
break;
|
|
249
|
+
case 'floating': {
|
|
250
|
+
const item = this.floatingGroups.find((floatingGroup) => floatingGroup.group === panel);
|
|
251
|
+
if (item) {
|
|
252
|
+
item.overlay.setVisible(visible);
|
|
253
|
+
panel.api._onDidVisibilityChange.fire({
|
|
254
|
+
isVisible: visible,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
case 'popout':
|
|
260
|
+
console.warn('dockview: You cannot hide a group that is in a popout window');
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
237
264
|
addPopoutGroup(itemToPopout, options) {
|
|
238
|
-
var _a, _b, _c;
|
|
265
|
+
var _a, _b, _c, _d, _e;
|
|
239
266
|
if (itemToPopout instanceof DockviewPanel &&
|
|
240
267
|
itemToPopout.group.size === 1) {
|
|
241
268
|
return this.addPopoutGroup(itemToPopout.group, options);
|
|
@@ -256,12 +283,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
256
283
|
}
|
|
257
284
|
const box = getBox();
|
|
258
285
|
const groupId = (_b = (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : this.getNextGroupId();
|
|
259
|
-
if (itemToPopout.api.location.type === 'grid') {
|
|
260
|
-
itemToPopout.api.setVisible(false);
|
|
261
|
-
}
|
|
262
286
|
const _window = new PopoutWindow(`${this.id}-${groupId}`, // unique id
|
|
263
287
|
theme !== null && theme !== void 0 ? theme : '', {
|
|
264
|
-
url: (_c = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _c !== void 0 ? _c : '/popout.html',
|
|
288
|
+
url: (_e = (_c = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _c !== void 0 ? _c : (_d = this.options) === null || _d === void 0 ? void 0 : _d.popoutUrl) !== null && _e !== void 0 ? _e : '/popout.html',
|
|
265
289
|
left: window.screenX + box.left,
|
|
266
290
|
top: window.screenY + box.top,
|
|
267
291
|
width: box.width,
|
|
@@ -275,13 +299,12 @@ export class DockviewComponent extends BaseGrid {
|
|
|
275
299
|
return _window
|
|
276
300
|
.open()
|
|
277
301
|
.then((popoutContainer) => {
|
|
278
|
-
var _a;
|
|
279
302
|
if (_window.isDisposed) {
|
|
280
|
-
return;
|
|
303
|
+
return false;
|
|
281
304
|
}
|
|
282
305
|
if (popoutContainer === null) {
|
|
283
306
|
popoutWindowDisposable.dispose();
|
|
284
|
-
return;
|
|
307
|
+
return false;
|
|
285
308
|
}
|
|
286
309
|
const gready = document.createElement('div');
|
|
287
310
|
gready.className = 'dv-overlay-render-container';
|
|
@@ -290,30 +313,45 @@ export class DockviewComponent extends BaseGrid {
|
|
|
290
313
|
? itemToPopout.group
|
|
291
314
|
: itemToPopout;
|
|
292
315
|
const referenceLocation = itemToPopout.api.location.type;
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
316
|
+
/**
|
|
317
|
+
* The group that is being added doesn't already exist within the DOM, the most likely occurance
|
|
318
|
+
* of this case is when being called from the `fromJSON(...)` method
|
|
319
|
+
*/
|
|
320
|
+
const isGroupAddedToDom = referenceGroup.element.parentElement !== null;
|
|
321
|
+
let group;
|
|
322
|
+
if (!isGroupAddedToDom) {
|
|
323
|
+
group = referenceGroup;
|
|
297
324
|
}
|
|
298
|
-
if (
|
|
299
|
-
|
|
300
|
-
const panel = referenceGroup.model.removePanel(itemToPopout);
|
|
301
|
-
group.model.openPanel(panel);
|
|
302
|
-
});
|
|
325
|
+
else if (options === null || options === void 0 ? void 0 : options.overridePopoutGroup) {
|
|
326
|
+
group = options.overridePopoutGroup;
|
|
303
327
|
}
|
|
304
328
|
else {
|
|
305
|
-
this.
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
329
|
+
group = this.createGroup({ id: groupId });
|
|
330
|
+
this._onDidAddGroup.fire(group);
|
|
331
|
+
}
|
|
332
|
+
group.model.renderContainer = overlayRenderContainer;
|
|
333
|
+
group.layout(_window.window.innerWidth, _window.window.innerHeight);
|
|
334
|
+
if (!(options === null || options === void 0 ? void 0 : options.overridePopoutGroup) && isGroupAddedToDom) {
|
|
335
|
+
if (itemToPopout instanceof DockviewPanel) {
|
|
336
|
+
this.movingLock(() => {
|
|
337
|
+
const panel = referenceGroup.model.removePanel(itemToPopout);
|
|
338
|
+
group.model.openPanel(panel);
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
this.movingLock(() => moveGroupWithoutDestroying({
|
|
343
|
+
from: referenceGroup,
|
|
344
|
+
to: group,
|
|
345
|
+
}));
|
|
346
|
+
switch (referenceLocation) {
|
|
347
|
+
case 'grid':
|
|
348
|
+
referenceGroup.api.setVisible(false);
|
|
349
|
+
break;
|
|
350
|
+
case 'floating':
|
|
351
|
+
case 'popout':
|
|
352
|
+
this.removeGroup(referenceGroup);
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
317
355
|
}
|
|
318
356
|
}
|
|
319
357
|
popoutContainer.classList.add('dv-dockview');
|
|
@@ -323,7 +361,12 @@ export class DockviewComponent extends BaseGrid {
|
|
|
323
361
|
group.model.location = {
|
|
324
362
|
type: 'popout',
|
|
325
363
|
getWindow: () => _window.window,
|
|
364
|
+
popoutUrl: options === null || options === void 0 ? void 0 : options.popoutUrl,
|
|
326
365
|
};
|
|
366
|
+
if (isGroupAddedToDom &&
|
|
367
|
+
itemToPopout.api.location.type === 'grid') {
|
|
368
|
+
itemToPopout.api.setVisible(false);
|
|
369
|
+
}
|
|
327
370
|
this.doSetGroupAndPanelActive(group);
|
|
328
371
|
popoutWindowDisposable.addDisposables(group.api.onDidActiveChange((event) => {
|
|
329
372
|
var _a;
|
|
@@ -335,10 +378,13 @@ export class DockviewComponent extends BaseGrid {
|
|
|
335
378
|
(_a = _window.window) === null || _a === void 0 ? void 0 : _a.focus();
|
|
336
379
|
}));
|
|
337
380
|
let returnedGroup;
|
|
381
|
+
const isValidReferenceGroup = isGroupAddedToDom &&
|
|
382
|
+
referenceGroup &&
|
|
383
|
+
this.getPanel(referenceGroup.id);
|
|
338
384
|
const value = {
|
|
339
385
|
window: _window,
|
|
340
386
|
popoutGroup: group,
|
|
341
|
-
referenceGroup:
|
|
387
|
+
referenceGroup: isValidReferenceGroup
|
|
342
388
|
? referenceGroup.id
|
|
343
389
|
: undefined,
|
|
344
390
|
disposable: {
|
|
@@ -355,9 +401,10 @@ export class DockviewComponent extends BaseGrid {
|
|
|
355
401
|
* window dimensions
|
|
356
402
|
*/
|
|
357
403
|
addDisposableWindowListener(_window.window, 'resize', () => {
|
|
358
|
-
group.layout(window.innerWidth, window.innerHeight);
|
|
404
|
+
group.layout(_window.window.innerWidth, _window.window.innerHeight);
|
|
359
405
|
}), overlayRenderContainer, Disposable.from(() => {
|
|
360
|
-
if (
|
|
406
|
+
if (isGroupAddedToDom &&
|
|
407
|
+
this.getPanel(referenceGroup.id)) {
|
|
361
408
|
this.movingLock(() => moveGroupWithoutDestroying({
|
|
362
409
|
from: group,
|
|
363
410
|
to: referenceGroup,
|
|
@@ -372,21 +419,27 @@ export class DockviewComponent extends BaseGrid {
|
|
|
372
419
|
}
|
|
373
420
|
}
|
|
374
421
|
else if (this.getPanel(group.id)) {
|
|
375
|
-
|
|
422
|
+
this.doRemoveGroup(group, {
|
|
376
423
|
skipDispose: true,
|
|
377
424
|
skipActive: true,
|
|
425
|
+
skipPopoutReturn: true,
|
|
378
426
|
});
|
|
427
|
+
const removedGroup = group;
|
|
379
428
|
removedGroup.model.renderContainer =
|
|
380
429
|
this.overlayRenderContainer;
|
|
381
430
|
removedGroup.model.location = { type: 'grid' };
|
|
382
431
|
returnedGroup = removedGroup;
|
|
432
|
+
this.doAddGroup(removedGroup, [0]);
|
|
433
|
+
this.doSetGroupAndPanelActive(removedGroup);
|
|
383
434
|
}
|
|
384
435
|
}));
|
|
385
436
|
this._popoutGroups.push(value);
|
|
386
437
|
this.updateWatermark();
|
|
438
|
+
return true;
|
|
387
439
|
})
|
|
388
440
|
.catch((err) => {
|
|
389
441
|
console.error('dockview: failed to create popout window', err);
|
|
442
|
+
return false;
|
|
390
443
|
});
|
|
391
444
|
}
|
|
392
445
|
addFloatingGroup(item, options) {
|
|
@@ -490,7 +543,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
490
543
|
: (_c = (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport) !== null && _c !== void 0 ? _c : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
|
|
491
544
|
? undefined
|
|
492
545
|
: (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
|
|
493
|
-
const el = group.element.querySelector('.void-container');
|
|
546
|
+
const el = group.element.querySelector('.dv-void-container');
|
|
494
547
|
if (!el) {
|
|
495
548
|
throw new Error('failed to find drag handle');
|
|
496
549
|
}
|
|
@@ -684,6 +737,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
684
737
|
data: group.popoutGroup.toJSON(),
|
|
685
738
|
gridReferenceGroup: group.referenceGroup,
|
|
686
739
|
position: group.window.dimensions(),
|
|
740
|
+
url: group.popoutGroup.api.location.type === 'popout'
|
|
741
|
+
? group.popoutGroup.api.location.popoutUrl
|
|
742
|
+
: undefined,
|
|
687
743
|
};
|
|
688
744
|
});
|
|
689
745
|
const result = {
|
|
@@ -770,16 +826,16 @@ export class DockviewComponent extends BaseGrid {
|
|
|
770
826
|
}
|
|
771
827
|
const serializedPopoutGroups = (_b = data.popoutGroups) !== null && _b !== void 0 ? _b : [];
|
|
772
828
|
for (const serializedPopoutGroup of serializedPopoutGroups) {
|
|
773
|
-
const { data, position, gridReferenceGroup } = serializedPopoutGroup;
|
|
829
|
+
const { data, position, gridReferenceGroup, url } = serializedPopoutGroup;
|
|
774
830
|
const group = createGroupFromSerializedState(data);
|
|
775
831
|
this.addPopoutGroup((_c = (gridReferenceGroup
|
|
776
832
|
? this.getPanel(gridReferenceGroup)
|
|
777
833
|
: undefined)) !== null && _c !== void 0 ? _c : group, {
|
|
778
|
-
skipRemoveGroup: true,
|
|
779
834
|
position: position !== null && position !== void 0 ? position : undefined,
|
|
780
835
|
overridePopoutGroup: gridReferenceGroup
|
|
781
836
|
? group
|
|
782
837
|
: undefined,
|
|
838
|
+
popoutUrl: url,
|
|
783
839
|
});
|
|
784
840
|
}
|
|
785
841
|
for (const floatingGroup of this._floatingGroups) {
|
|
@@ -793,6 +849,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
793
849
|
}
|
|
794
850
|
}
|
|
795
851
|
catch (err) {
|
|
852
|
+
console.error('dockview: failed to deserialize layout. Reverting changes', err);
|
|
796
853
|
/**
|
|
797
854
|
* Takes all the successfully created groups and remove all of their panels.
|
|
798
855
|
*/
|
|
@@ -860,11 +917,13 @@ export class DockviewComponent extends BaseGrid {
|
|
|
860
917
|
width: options.initialWidth,
|
|
861
918
|
height: options.initialHeight,
|
|
862
919
|
};
|
|
920
|
+
let index;
|
|
863
921
|
if (options.position) {
|
|
864
922
|
if (isPanelOptionsWithPanel(options.position)) {
|
|
865
923
|
const referencePanel = typeof options.position.referencePanel === 'string'
|
|
866
924
|
? this.getGroupPanel(options.position.referencePanel)
|
|
867
925
|
: options.position.referencePanel;
|
|
926
|
+
index = options.position.index;
|
|
868
927
|
if (!referencePanel) {
|
|
869
928
|
throw new Error(`referencePanel '${options.position.referencePanel}' does not exist`);
|
|
870
929
|
}
|
|
@@ -875,6 +934,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
875
934
|
typeof options.position.referenceGroup === 'string'
|
|
876
935
|
? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
|
|
877
936
|
: options.position.referenceGroup;
|
|
937
|
+
index = options.position.index;
|
|
878
938
|
if (!referenceGroup) {
|
|
879
939
|
throw new Error(`referenceGroup '${options.position.referenceGroup}' does not exist`);
|
|
880
940
|
}
|
|
@@ -885,6 +945,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
885
945
|
group.model.openPanel(panel, {
|
|
886
946
|
skipSetActive: options.inactive,
|
|
887
947
|
skipSetGroupActive: options.inactive,
|
|
948
|
+
index,
|
|
888
949
|
});
|
|
889
950
|
if (!options.inactive) {
|
|
890
951
|
this.doSetGroupAndPanelActive(group);
|
|
@@ -914,6 +975,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
914
975
|
group.model.openPanel(panel, {
|
|
915
976
|
skipSetActive: options.inactive,
|
|
916
977
|
skipSetGroupActive: options.inactive,
|
|
978
|
+
index,
|
|
917
979
|
});
|
|
918
980
|
}
|
|
919
981
|
else if (referenceGroup.api.location.type === 'floating' ||
|
|
@@ -922,6 +984,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
922
984
|
referenceGroup.model.openPanel(panel, {
|
|
923
985
|
skipSetActive: options.inactive,
|
|
924
986
|
skipSetGroupActive: options.inactive,
|
|
987
|
+
index,
|
|
925
988
|
});
|
|
926
989
|
referenceGroup.api.setSize({
|
|
927
990
|
width: initial === null || initial === void 0 ? void 0 : initial.width,
|
|
@@ -942,6 +1005,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
942
1005
|
group.model.openPanel(panel, {
|
|
943
1006
|
skipSetActive: options.inactive,
|
|
944
1007
|
skipSetGroupActive: options.inactive,
|
|
1008
|
+
index,
|
|
945
1009
|
});
|
|
946
1010
|
if (!options.inactive) {
|
|
947
1011
|
this.doSetGroupAndPanelActive(group);
|
|
@@ -960,6 +1024,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
960
1024
|
group.model.openPanel(panel, {
|
|
961
1025
|
skipSetActive: options.inactive,
|
|
962
1026
|
skipSetGroupActive: options.inactive,
|
|
1027
|
+
index,
|
|
963
1028
|
});
|
|
964
1029
|
}
|
|
965
1030
|
else {
|
|
@@ -970,6 +1035,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
970
1035
|
group.model.openPanel(panel, {
|
|
971
1036
|
skipSetActive: options.inactive,
|
|
972
1037
|
skipSetGroupActive: options.inactive,
|
|
1038
|
+
index,
|
|
973
1039
|
});
|
|
974
1040
|
if (!options.inactive) {
|
|
975
1041
|
this.doSetGroupAndPanelActive(group);
|
|
@@ -979,7 +1045,6 @@ export class DockviewComponent extends BaseGrid {
|
|
|
979
1045
|
}
|
|
980
1046
|
removePanel(panel, options = {
|
|
981
1047
|
removeEmptyGroup: true,
|
|
982
|
-
skipDispose: false,
|
|
983
1048
|
}) {
|
|
984
1049
|
const group = panel.group;
|
|
985
1050
|
if (!group) {
|
|
@@ -7,30 +7,34 @@ export class DockviewGroupPanel extends GridviewPanel {
|
|
|
7
7
|
get minimumWidth() {
|
|
8
8
|
var _a;
|
|
9
9
|
const activePanelMinimumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumWidth;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
if (typeof activePanelMinimumWidth === 'number') {
|
|
11
|
+
return activePanelMinimumWidth;
|
|
12
|
+
}
|
|
13
|
+
return super.__minimumWidth();
|
|
13
14
|
}
|
|
14
15
|
get minimumHeight() {
|
|
15
16
|
var _a;
|
|
16
17
|
const activePanelMinimumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumHeight;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
if (typeof activePanelMinimumHeight === 'number') {
|
|
19
|
+
return activePanelMinimumHeight;
|
|
20
|
+
}
|
|
21
|
+
return super.__minimumHeight();
|
|
20
22
|
}
|
|
21
23
|
get maximumWidth() {
|
|
22
24
|
var _a;
|
|
23
25
|
const activePanelMaximumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumWidth;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
if (typeof activePanelMaximumWidth === 'number') {
|
|
27
|
+
return activePanelMaximumWidth;
|
|
28
|
+
}
|
|
29
|
+
return super.__maximumWidth();
|
|
27
30
|
}
|
|
28
31
|
get maximumHeight() {
|
|
29
32
|
var _a;
|
|
30
33
|
const activePanelMaximumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumHeight;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
if (typeof activePanelMaximumHeight === 'number') {
|
|
35
|
+
return activePanelMaximumHeight;
|
|
36
|
+
}
|
|
37
|
+
return super.__maximumHeight();
|
|
34
38
|
}
|
|
35
39
|
get panels() {
|
|
36
40
|
return this._model.panels;
|
|
@@ -120,6 +120,7 @@ export type DockviewGroupLocation = {
|
|
|
120
120
|
} | {
|
|
121
121
|
type: 'popout';
|
|
122
122
|
getWindow: () => Window;
|
|
123
|
+
popoutUrl?: string;
|
|
123
124
|
};
|
|
124
125
|
export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
|
|
125
126
|
private readonly event;
|
|
@@ -143,7 +144,7 @@ export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
|
|
|
143
144
|
}
|
|
144
145
|
export declare class DockviewGroupPanelModel extends CompositeDisposable implements IDockviewGroupPanelModel {
|
|
145
146
|
private readonly container;
|
|
146
|
-
private accessor;
|
|
147
|
+
private readonly accessor;
|
|
147
148
|
id: string;
|
|
148
149
|
private readonly options;
|
|
149
150
|
private readonly groupPanel;
|
|
@@ -158,11 +159,12 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
|
|
|
158
159
|
private _prefixHeaderActions;
|
|
159
160
|
private _location;
|
|
160
161
|
private mostRecentlyUsed;
|
|
162
|
+
private _overwriteRenderContainer;
|
|
161
163
|
private readonly _onDidChange;
|
|
162
164
|
readonly onDidChange: Event<IViewSize | undefined>;
|
|
163
165
|
private _width;
|
|
164
166
|
private _height;
|
|
165
|
-
private _panels;
|
|
167
|
+
private readonly _panels;
|
|
166
168
|
private readonly _panelDisposables;
|
|
167
169
|
private readonly _onMove;
|
|
168
170
|
readonly onMove: Event<GroupMoveEvent>;
|
|
@@ -204,7 +206,6 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
|
|
|
204
206
|
set location(value: DockviewGroupLocation);
|
|
205
207
|
constructor(container: HTMLElement, accessor: DockviewComponent, id: string, options: GroupOptions, groupPanel: DockviewGroupPanel);
|
|
206
208
|
focusContent(): void;
|
|
207
|
-
private _overwriteRenderContainer;
|
|
208
209
|
set renderContainer(value: OverlayRenderContainer | null);
|
|
209
210
|
get renderContainer(): OverlayRenderContainer;
|
|
210
211
|
initialize(): void;
|
|
@@ -74,7 +74,7 @@ export class WillShowOverlayLocationEvent {
|
|
|
74
74
|
}
|
|
75
75
|
export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
76
76
|
get element() {
|
|
77
|
-
throw new Error('not supported');
|
|
77
|
+
throw new Error('dockview: not supported');
|
|
78
78
|
}
|
|
79
79
|
get activePanel() {
|
|
80
80
|
return this._activePanel;
|
|
@@ -84,7 +84,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
84
84
|
}
|
|
85
85
|
set locked(value) {
|
|
86
86
|
this._locked = value;
|
|
87
|
-
toggleClass(this.container, 'locked-groupview', value === 'no-drop-target' || value);
|
|
87
|
+
toggleClass(this.container, 'dv-locked-groupview', value === 'no-drop-target' || value);
|
|
88
88
|
}
|
|
89
89
|
get isActive() {
|
|
90
90
|
return this._isGroupActive;
|
|
@@ -155,6 +155,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
155
155
|
this._locked = false;
|
|
156
156
|
this._location = { type: 'grid' };
|
|
157
157
|
this.mostRecentlyUsed = [];
|
|
158
|
+
this._overwriteRenderContainer = null;
|
|
158
159
|
this._onDidChange = new Emitter();
|
|
159
160
|
this.onDidChange = this._onDidChange.event;
|
|
160
161
|
this._width = 0;
|
|
@@ -185,8 +186,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
185
186
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
186
187
|
this._onUnhandledDragOverEvent = new Emitter();
|
|
187
188
|
this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
|
|
188
|
-
this.
|
|
189
|
-
toggleClass(this.container, 'groupview', true);
|
|
189
|
+
toggleClass(this.container, 'dv-groupview', true);
|
|
190
190
|
this._api = new DockviewApi(this.accessor);
|
|
191
191
|
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
192
192
|
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
@@ -418,7 +418,10 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
418
418
|
this.doClose(panel);
|
|
419
419
|
}
|
|
420
420
|
doClose(panel) {
|
|
421
|
-
this.accessor.
|
|
421
|
+
const isLast = this.panels.length === 1 && this.accessor.groups.length === 1;
|
|
422
|
+
this.accessor.removePanel(panel, isLast && this.accessor.options.noPanelsOverlay === 'emptyGroup'
|
|
423
|
+
? { removeEmptyGroup: false }
|
|
424
|
+
: undefined);
|
|
422
425
|
}
|
|
423
426
|
isPanelActive(panel) {
|
|
424
427
|
return this._activePanel === panel;
|
|
@@ -431,8 +434,8 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
431
434
|
return;
|
|
432
435
|
}
|
|
433
436
|
this._isGroupActive = isGroupActive;
|
|
434
|
-
toggleClass(this.container, 'active-group', isGroupActive);
|
|
435
|
-
toggleClass(this.container, 'inactive-group', !isGroupActive);
|
|
437
|
+
toggleClass(this.container, 'dv-active-group', isGroupActive);
|
|
438
|
+
toggleClass(this.container, 'dv-inactive-group', !isGroupActive);
|
|
436
439
|
this.tabsContainer.setActive(this.isActive);
|
|
437
440
|
if (!this._activePanel && this.panels.length > 0) {
|
|
438
441
|
this.doSetActivePanel(this.panels[0]);
|
|
@@ -524,7 +527,6 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
524
527
|
}
|
|
525
528
|
updateContainer() {
|
|
526
529
|
var _a, _b;
|
|
527
|
-
toggleClass(this.container, 'empty', this.isEmpty);
|
|
528
530
|
this.panels.forEach((panel) => panel.runEvents());
|
|
529
531
|
if (this.isEmpty && !this.watermark) {
|
|
530
532
|
const watermark = this.accessor.createWatermarkComponent();
|
|
@@ -538,14 +540,12 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
538
540
|
this.accessor.doSetGroupActive(this.groupPanel);
|
|
539
541
|
}
|
|
540
542
|
});
|
|
541
|
-
this.tabsContainer.hide();
|
|
542
543
|
this.contentContainer.element.appendChild(this.watermark.element);
|
|
543
544
|
}
|
|
544
545
|
if (!this.isEmpty && this.watermark) {
|
|
545
546
|
this.watermark.element.remove();
|
|
546
547
|
(_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
547
548
|
this.watermark = undefined;
|
|
548
|
-
this.tabsContainer.show();
|
|
549
549
|
}
|
|
550
550
|
}
|
|
551
551
|
canDisplayOverlay(event, position, target) {
|
|
@@ -37,10 +37,10 @@ export declare class DockviewPanel extends CompositeDisposable implements IDockv
|
|
|
37
37
|
private _params?;
|
|
38
38
|
private _title;
|
|
39
39
|
private _renderer;
|
|
40
|
-
private _minimumWidth;
|
|
41
|
-
private _minimumHeight;
|
|
42
|
-
private _maximumWidth;
|
|
43
|
-
private _maximumHeight;
|
|
40
|
+
private readonly _minimumWidth;
|
|
41
|
+
private readonly _minimumHeight;
|
|
42
|
+
private readonly _maximumWidth;
|
|
43
|
+
private readonly _maximumHeight;
|
|
44
44
|
get params(): Parameters | undefined;
|
|
45
45
|
get title(): string | undefined;
|
|
46
46
|
get group(): DockviewGroupPanel;
|
|
@@ -7,7 +7,7 @@ export interface IDockviewPanelModel extends IDisposable {
|
|
|
7
7
|
readonly contentComponent: string;
|
|
8
8
|
readonly tabComponent?: string;
|
|
9
9
|
readonly content: IContentRenderer;
|
|
10
|
-
readonly tab
|
|
10
|
+
readonly tab: ITabRenderer;
|
|
11
11
|
update(event: PanelUpdateEvent): void;
|
|
12
12
|
layout(width: number, height: number): void;
|
|
13
13
|
init(params: GroupPanelPartInitParameters): void;
|
|
@@ -50,6 +50,10 @@ export interface DockviewOptions {
|
|
|
50
50
|
* Pixel gap between groups
|
|
51
51
|
*/
|
|
52
52
|
gap?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Define the behaviour of the dock when there are no panels to display. Defaults to `watermark`.
|
|
55
|
+
*/
|
|
56
|
+
noPanelsOverlay?: 'emptyGroup' | 'watermark';
|
|
53
57
|
}
|
|
54
58
|
export interface DockviewDndOverlayEvent {
|
|
55
59
|
nativeEvent: DragEvent;
|
|
@@ -102,10 +106,18 @@ export interface PanelOptions<P extends object = Parameters> {
|
|
|
102
106
|
type RelativePanel = {
|
|
103
107
|
direction?: Direction;
|
|
104
108
|
referencePanel: string | IDockviewPanel;
|
|
109
|
+
/**
|
|
110
|
+
* The index to place the panel within a group, only applicable if the placement is within an existing group
|
|
111
|
+
*/
|
|
112
|
+
index?: number;
|
|
105
113
|
};
|
|
106
114
|
type RelativeGroup = {
|
|
107
115
|
direction?: Direction;
|
|
108
116
|
referenceGroup: string | DockviewGroupPanel;
|
|
117
|
+
/**
|
|
118
|
+
* The index to place the panel within a group, only applicable if the placement is within an existing group
|
|
119
|
+
*/
|
|
120
|
+
index?: number;
|
|
109
121
|
};
|
|
110
122
|
type AbsolutePosition = {
|
|
111
123
|
direction: Omit<Direction, 'within'>;
|
package/dist/esm/dom.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { Event as DockviewEvent } from './events';
|
|
2
|
-
import { IDisposable } from './lifecycle';
|
|
2
|
+
import { IDisposable, CompositeDisposable } from './lifecycle';
|
|
3
|
+
export interface OverflowEvent {
|
|
4
|
+
hasScrollX: boolean;
|
|
5
|
+
hasScrollY: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class OverflowObserver extends CompositeDisposable {
|
|
8
|
+
private readonly _onDidChange;
|
|
9
|
+
readonly onDidChange: DockviewEvent<OverflowEvent>;
|
|
10
|
+
private _value;
|
|
11
|
+
constructor(el: HTMLElement);
|
|
12
|
+
}
|
|
3
13
|
export declare function watchElementResize(element: HTMLElement, cb: (entry: ResizeObserverEntry) => void): IDisposable;
|
|
4
14
|
export declare const removeClasses: (element: HTMLElement, ...classes: string[]) => void;
|
|
5
15
|
export declare const addClasses: (element: HTMLElement, ...classes: string[]) => void;
|
package/dist/esm/dom.js
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { Emitter, addDisposableListener, addDisposableWindowListener, } from './events';
|
|
2
2
|
import { CompositeDisposable } from './lifecycle';
|
|
3
|
+
export class OverflowObserver extends CompositeDisposable {
|
|
4
|
+
constructor(el) {
|
|
5
|
+
super();
|
|
6
|
+
this._onDidChange = new Emitter();
|
|
7
|
+
this.onDidChange = this._onDidChange.event;
|
|
8
|
+
this._value = null;
|
|
9
|
+
this.addDisposables(this._onDidChange, watchElementResize(el, (entry) => {
|
|
10
|
+
const hasScrollX = entry.target.scrollWidth > entry.target.clientWidth;
|
|
11
|
+
const hasScrollY = entry.target.scrollHeight > entry.target.clientHeight;
|
|
12
|
+
this._value = { hasScrollX, hasScrollY };
|
|
13
|
+
this._onDidChange.fire(this._value);
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
3
17
|
export function watchElementResize(element, cb) {
|
|
4
18
|
const observer = new ResizeObserver((entires) => {
|
|
5
19
|
/**
|
|
@@ -8,6 +8,10 @@ import { MovementOptions2 } from '../dockview/options';
|
|
|
8
8
|
import { Resizable } from '../resizable';
|
|
9
9
|
export type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
|
|
10
10
|
export declare function toTarget(direction: Direction): Position;
|
|
11
|
+
export interface MaximizedChanged<T extends IGridPanelView> {
|
|
12
|
+
panel: T;
|
|
13
|
+
isMaximized: boolean;
|
|
14
|
+
}
|
|
11
15
|
export interface BaseGridOptions {
|
|
12
16
|
readonly proportionalLayout: boolean;
|
|
13
17
|
readonly orientation: Orientation;
|
|
@@ -33,6 +37,8 @@ export interface IBaseGrid<T extends IGridPanelView> extends IDisposable {
|
|
|
33
37
|
readonly activeGroup: T | undefined;
|
|
34
38
|
readonly size: number;
|
|
35
39
|
readonly groups: T[];
|
|
40
|
+
readonly onDidMaximizedChange: Event<MaximizedChanged<T>>;
|
|
41
|
+
readonly onDidLayoutChange: Event<void>;
|
|
36
42
|
getPanel(id: string): T | undefined;
|
|
37
43
|
toJSON(): object;
|
|
38
44
|
fromJSON(data: any): void;
|
|
@@ -44,8 +50,6 @@ export interface IBaseGrid<T extends IGridPanelView> extends IDisposable {
|
|
|
44
50
|
isMaximizedGroup(panel: T): boolean;
|
|
45
51
|
exitMaximizedGroup(): void;
|
|
46
52
|
hasMaximizedGroup(): boolean;
|
|
47
|
-
readonly onDidMaximizedGroupChange: Event<void>;
|
|
48
|
-
readonly onDidLayoutChange: Event<void>;
|
|
49
53
|
}
|
|
50
54
|
export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizable implements IBaseGrid<T> {
|
|
51
55
|
private readonly _id;
|
|
@@ -56,6 +60,8 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizab
|
|
|
56
60
|
readonly onDidRemove: Event<T>;
|
|
57
61
|
private readonly _onDidAdd;
|
|
58
62
|
readonly onDidAdd: Event<T>;
|
|
63
|
+
private readonly _onDidMaximizedChange;
|
|
64
|
+
readonly onDidMaximizedChange: Event<MaximizedChanged<T>>;
|
|
59
65
|
private readonly _onDidActiveChange;
|
|
60
66
|
readonly onDidActiveChange: Event<T | undefined>;
|
|
61
67
|
protected readonly _bufferOnDidLayoutChange: AsapEvent;
|
|
@@ -86,7 +92,6 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizab
|
|
|
86
92
|
isMaximizedGroup(panel: T): boolean;
|
|
87
93
|
exitMaximizedGroup(): void;
|
|
88
94
|
hasMaximizedGroup(): boolean;
|
|
89
|
-
get onDidMaximizedGroupChange(): Event<void>;
|
|
90
95
|
protected doAddGroup(group: T, location?: number[], size?: number): void;
|
|
91
96
|
protected doRemoveGroup(group: T, options?: {
|
|
92
97
|
skipActive?: boolean;
|