dockview-core 8.4.0 → 8.5.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/dockview/components/popupService.d.ts +2 -0
- package/dist/cjs/dockview/dockviewComponent.d.ts +4 -0
- package/dist/cjs/dockview/moduleContracts.d.ts +2 -0
- package/dist/dockview-core.js +187 -109
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.noStyle.js +187 -109
- package/dist/package/main.cjs.js +187 -109
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +187 -109
- package/package.json +1 -1
package/dist/package/main.cjs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* dockview-core
|
|
3
|
-
* @version 8.
|
|
3
|
+
* @version 8.5.0
|
|
4
4
|
* @link https://github.com/dockview/dockview
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
@@ -333,21 +333,29 @@ var OverflowObserver = class extends CompositeDisposable {
|
|
|
333
333
|
}
|
|
334
334
|
};
|
|
335
335
|
function watchElementResize(element, cb) {
|
|
336
|
+
const pendingFrames = /* @__PURE__ */ new Set();
|
|
336
337
|
const observer = new ResizeObserver((entires) => {
|
|
337
338
|
/**
|
|
338
339
|
* Fast browser window resize produces Error: ResizeObserver loop limit exceeded.
|
|
339
340
|
* The error isn't visible in browser console, doesn't affect functionality, but degrades performance.
|
|
340
341
|
* See https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded/58701523#58701523
|
|
341
342
|
*/
|
|
342
|
-
|
|
343
|
+
let ran = false;
|
|
344
|
+
let frame;
|
|
345
|
+
frame = requestAnimationFrame(() => {
|
|
346
|
+
ran = true;
|
|
347
|
+
if (frame !== void 0) pendingFrames.delete(frame);
|
|
343
348
|
const firstEntry = entires[0];
|
|
344
349
|
cb(firstEntry);
|
|
345
350
|
});
|
|
351
|
+
if (!ran) pendingFrames.add(frame);
|
|
346
352
|
});
|
|
347
353
|
observer.observe(element);
|
|
348
354
|
return { dispose: () => {
|
|
349
355
|
observer.unobserve(element);
|
|
350
356
|
observer.disconnect();
|
|
357
|
+
for (const frame of pendingFrames) cancelAnimationFrame(frame);
|
|
358
|
+
pendingFrames.clear();
|
|
351
359
|
} };
|
|
352
360
|
}
|
|
353
361
|
const removeClasses = (element, ...classes) => {
|
|
@@ -6063,24 +6071,25 @@ var ContentContainer = class extends CompositeDisposable {
|
|
|
6063
6071
|
else this._element.removeAttribute("aria-labelledby");
|
|
6064
6072
|
}
|
|
6065
6073
|
renderPanel(panel, options) {
|
|
6066
|
-
var _options$asActive
|
|
6067
|
-
const doRender = ((_options$asActive = options === null || options === void 0 ? void 0 : options.asActive) !== null && _options$asActive !== void 0 ? _options$asActive : true) || this.
|
|
6068
|
-
if (
|
|
6069
|
-
var _this$panel
|
|
6070
|
-
this.panel.view.content.element.
|
|
6071
|
-
|
|
6074
|
+
var _options$asActive;
|
|
6075
|
+
const doRender = ((_options$asActive = options === null || options === void 0 ? void 0 : options.asActive) !== null && _options$asActive !== void 0 ? _options$asActive : true) || this.group.isPanelActive(panel);
|
|
6076
|
+
if (doRender || this.panel === panel) {
|
|
6077
|
+
var _this$panel;
|
|
6078
|
+
if (((_this$panel = this.panel) === null || _this$panel === void 0 ? void 0 : _this$panel.view.content.element.parentElement) === this._element) {
|
|
6079
|
+
var _this$panel$view$cont, _this$panel$view$cont2;
|
|
6080
|
+
this.panel.view.content.element.remove();
|
|
6081
|
+
(_this$panel$view$cont = (_this$panel$view$cont2 = this.panel.view.content).onHide) === null || _this$panel$view$cont === void 0 || _this$panel$view$cont.call(_this$panel$view$cont2);
|
|
6082
|
+
}
|
|
6083
|
+
this.panel = panel;
|
|
6072
6084
|
}
|
|
6073
|
-
this.panel = panel;
|
|
6074
6085
|
let container;
|
|
6075
6086
|
switch (panel.api.renderer) {
|
|
6076
6087
|
case "onlyWhenVisible":
|
|
6077
6088
|
this.group.renderContainer.detatch(panel);
|
|
6078
|
-
if (
|
|
6079
|
-
|
|
6080
|
-
|
|
6081
|
-
|
|
6082
|
-
(_this$panel$view$cont3 = (_this$panel$view$cont4 = this.panel.view.content).onShow) === null || _this$panel$view$cont3 === void 0 || _this$panel$view$cont3.call(_this$panel$view$cont4);
|
|
6083
|
-
}
|
|
6089
|
+
if (doRender) {
|
|
6090
|
+
var _panel$view$content$o, _panel$view$content;
|
|
6091
|
+
this._element.appendChild(panel.view.content.element);
|
|
6092
|
+
(_panel$view$content$o = (_panel$view$content = panel.view.content).onShow) === null || _panel$view$content$o === void 0 || _panel$view$content$o.call(_panel$view$content);
|
|
6084
6093
|
}
|
|
6085
6094
|
container = this._element;
|
|
6086
6095
|
break;
|
|
@@ -6109,9 +6118,9 @@ var ContentContainer = class extends CompositeDisposable {
|
|
|
6109
6118
|
closePanel() {
|
|
6110
6119
|
if (this.panel) {
|
|
6111
6120
|
if (this.panel.api.renderer === "onlyWhenVisible") {
|
|
6112
|
-
var _this$panel$view$
|
|
6121
|
+
var _this$panel$view$cont3, _this$panel$view$cont4;
|
|
6113
6122
|
this.panel.view.content.element.remove();
|
|
6114
|
-
(_this$panel$view$
|
|
6123
|
+
(_this$panel$view$cont3 = (_this$panel$view$cont4 = this.panel.view.content).onHide) === null || _this$panel$view$cont3 === void 0 || _this$panel$view$cont3.call(_this$panel$view$cont4);
|
|
6115
6124
|
}
|
|
6116
6125
|
}
|
|
6117
6126
|
this.panel = void 0;
|
|
@@ -10216,16 +10225,21 @@ var TabsContainer = class extends CompositeDisposable {
|
|
|
10216
10225
|
y: event.clientY,
|
|
10217
10226
|
zIndex: (relativeParent === null || relativeParent === void 0 ? void 0 : relativeParent.style.zIndex) ? `calc(${relativeParent.style.zIndex} * 2)` : void 0
|
|
10218
10227
|
};
|
|
10219
|
-
const context = this.createOverflowRenderContext(root, anchor);
|
|
10228
|
+
const { context, rowRenderers } = this.createOverflowRenderContext(root, anchor);
|
|
10220
10229
|
const advancedOverflow = this.accessor.advancedOverflowService;
|
|
10221
|
-
|
|
10222
|
-
|
|
10223
|
-
|
|
10224
|
-
|
|
10225
|
-
|
|
10226
|
-
|
|
10227
|
-
|
|
10228
|
-
|
|
10230
|
+
try {
|
|
10231
|
+
if (advancedOverflow) advancedOverflow.renderOverflow({
|
|
10232
|
+
group: this.group,
|
|
10233
|
+
overflowTabs: [...this._overflowTabs],
|
|
10234
|
+
overflowTabGroups: [...this._overflowTabGroups],
|
|
10235
|
+
pinnedOverflowTabs: [...this._overflowPinnedTabs],
|
|
10236
|
+
context
|
|
10237
|
+
});
|
|
10238
|
+
else context.open(this.renderFreeOverflowList(context));
|
|
10239
|
+
} catch (err) {
|
|
10240
|
+
rowRenderers.dispose();
|
|
10241
|
+
throw err;
|
|
10242
|
+
}
|
|
10229
10243
|
}));
|
|
10230
10244
|
}
|
|
10231
10245
|
/**
|
|
@@ -10246,6 +10260,7 @@ var TabsContainer = class extends CompositeDisposable {
|
|
|
10246
10260
|
if (overflowGroupSet.has(tg.id)) for (const pid of tg.panelIds) panelToGroup.set(pid, tg);
|
|
10247
10261
|
}
|
|
10248
10262
|
const popup = () => this.accessor.getPopupServiceForGroup(this.group);
|
|
10263
|
+
const rowRenderers = new CompositeDisposable();
|
|
10249
10264
|
const buildGroupHeader = (tg) => {
|
|
10250
10265
|
const groupHeader = document.createElement("div");
|
|
10251
10266
|
groupHeader.className = "dv-tabs-overflow-group-header";
|
|
@@ -10275,69 +10290,87 @@ var TabsContainer = class extends CompositeDisposable {
|
|
|
10275
10290
|
return groupHeader;
|
|
10276
10291
|
};
|
|
10277
10292
|
return {
|
|
10278
|
-
|
|
10279
|
-
|
|
10280
|
-
|
|
10281
|
-
|
|
10282
|
-
|
|
10283
|
-
|
|
10284
|
-
|
|
10285
|
-
|
|
10286
|
-
|
|
10287
|
-
|
|
10288
|
-
|
|
10289
|
-
|
|
10290
|
-
|
|
10291
|
-
|
|
10292
|
-
|
|
10293
|
-
|
|
10294
|
-
|
|
10295
|
-
|
|
10296
|
-
|
|
10297
|
-
|
|
10298
|
-
|
|
10299
|
-
|
|
10300
|
-
|
|
10301
|
-
|
|
10302
|
-
|
|
10303
|
-
|
|
10304
|
-
|
|
10305
|
-
|
|
10306
|
-
|
|
10307
|
-
|
|
10308
|
-
|
|
10309
|
-
|
|
10310
|
-
|
|
10311
|
-
|
|
10312
|
-
|
|
10313
|
-
block: "nearest",
|
|
10314
|
-
inline: "nearest"
|
|
10293
|
+
context: {
|
|
10294
|
+
overflowGroupIdForPanel: (panelId) => {
|
|
10295
|
+
var _panelToGroup$get;
|
|
10296
|
+
return (_panelToGroup$get = panelToGroup.get(panelId)) === null || _panelToGroup$get === void 0 ? void 0 : _panelToGroup$get.id;
|
|
10297
|
+
},
|
|
10298
|
+
buildGroupHeader: (tabGroupId) => {
|
|
10299
|
+
const tg = groupById.get(tabGroupId);
|
|
10300
|
+
if (!tg || !overflowGroupSet.has(tg.id)) return;
|
|
10301
|
+
return buildGroupHeader(tg);
|
|
10302
|
+
},
|
|
10303
|
+
buildPinnedHeader: () => {
|
|
10304
|
+
const header = document.createElement("div");
|
|
10305
|
+
header.className = "dv-tabs-overflow-group-header dv-tabs-overflow-pinned-header";
|
|
10306
|
+
const glyph = createPinButton();
|
|
10307
|
+
glyph.classList.add("dv-tabs-overflow-pinned-icon");
|
|
10308
|
+
header.appendChild(glyph);
|
|
10309
|
+
const labelSpan = document.createElement("span");
|
|
10310
|
+
labelSpan.className = "dv-tabs-overflow-group-label";
|
|
10311
|
+
labelSpan.textContent = "Pinned";
|
|
10312
|
+
header.appendChild(labelSpan);
|
|
10313
|
+
return header;
|
|
10314
|
+
},
|
|
10315
|
+
buildRow: (panelId) => {
|
|
10316
|
+
const panel = this.group.panels.find((p) => p.id === panelId);
|
|
10317
|
+
if (!panel) return;
|
|
10318
|
+
const tab = this.tabs.tabs.find((t) => t.panel.id === panelId);
|
|
10319
|
+
const tg = panelToGroup.get(panelId);
|
|
10320
|
+
const tabComponent = panel.view.createTabRenderer("headerOverflow");
|
|
10321
|
+
let rowDisposed = false;
|
|
10322
|
+
const disposeRow = Disposable.from(() => {
|
|
10323
|
+
if (!rowDisposed) {
|
|
10324
|
+
var _tabComponent$dispose;
|
|
10325
|
+
rowDisposed = true;
|
|
10326
|
+
(_tabComponent$dispose = tabComponent.dispose) === null || _tabComponent$dispose === void 0 || _tabComponent$dispose.call(tabComponent);
|
|
10327
|
+
}
|
|
10315
10328
|
});
|
|
10316
|
-
|
|
10317
|
-
|
|
10318
|
-
|
|
10319
|
-
|
|
10320
|
-
|
|
10321
|
-
|
|
10322
|
-
|
|
10323
|
-
|
|
10324
|
-
|
|
10325
|
-
|
|
10326
|
-
|
|
10327
|
-
|
|
10329
|
+
if (rowRenderers.isDisposed) disposeRow.dispose();
|
|
10330
|
+
else rowRenderers.addDisposables(disposeRow);
|
|
10331
|
+
const child = tabComponent.element;
|
|
10332
|
+
const wrapper = document.createElement("div");
|
|
10333
|
+
toggleClass(wrapper, "dv-tab", true);
|
|
10334
|
+
toggleClass(wrapper, "dv-active-tab", panel.api.isActive);
|
|
10335
|
+
toggleClass(wrapper, "dv-inactive-tab", !panel.api.isActive);
|
|
10336
|
+
if (tg) toggleClass(wrapper, "dv-tab--grouped", true);
|
|
10337
|
+
const doActivate = () => {
|
|
10338
|
+
if (tg === null || tg === void 0 ? void 0 : tg.collapsed) tg.expand();
|
|
10339
|
+
tab === null || tab === void 0 || tab.element.scrollIntoView({
|
|
10340
|
+
block: "nearest",
|
|
10341
|
+
inline: "nearest"
|
|
10342
|
+
});
|
|
10343
|
+
this.accessor.withOrigin("user", () => panel.api.setActive());
|
|
10344
|
+
};
|
|
10345
|
+
wrapper.addEventListener("click", (event) => {
|
|
10328
10346
|
popup().close();
|
|
10347
|
+
if (event.defaultPrevented) return;
|
|
10329
10348
|
doActivate();
|
|
10330
|
-
}
|
|
10331
|
-
|
|
10332
|
-
|
|
10333
|
-
|
|
10334
|
-
|
|
10349
|
+
});
|
|
10350
|
+
wrapper.appendChild(child);
|
|
10351
|
+
return {
|
|
10352
|
+
element: wrapper,
|
|
10353
|
+
panel,
|
|
10354
|
+
activate: () => {
|
|
10355
|
+
popup().close();
|
|
10356
|
+
doActivate();
|
|
10357
|
+
},
|
|
10358
|
+
dispose: () => {
|
|
10359
|
+
rowRenderers.removeDisposable(disposeRow);
|
|
10360
|
+
disposeRow.dispose();
|
|
10361
|
+
}
|
|
10362
|
+
};
|
|
10363
|
+
},
|
|
10364
|
+
open: (body) => {
|
|
10365
|
+
popup().openPopover(body, anchor, { onClose: () => rowRenderers.dispose() });
|
|
10366
|
+
},
|
|
10367
|
+
close: () => popup().close(),
|
|
10368
|
+
focusTrigger: () => {
|
|
10369
|
+
root.tabIndex = -1;
|
|
10370
|
+
root.focus();
|
|
10371
|
+
}
|
|
10335
10372
|
},
|
|
10336
|
-
|
|
10337
|
-
focusTrigger: () => {
|
|
10338
|
-
root.tabIndex = -1;
|
|
10339
|
-
root.focus();
|
|
10340
|
-
}
|
|
10373
|
+
rowRenderers
|
|
10341
10374
|
};
|
|
10342
10375
|
}
|
|
10343
10376
|
/**
|
|
@@ -11120,7 +11153,6 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
11120
11153
|
this.rerender(panel);
|
|
11121
11154
|
});
|
|
11122
11155
|
if (this._activePanel) {
|
|
11123
|
-
this.contentContainer.renderPanel(this._activePanel, { asActive: true });
|
|
11124
11156
|
const { width, height } = this.contentDimensions();
|
|
11125
11157
|
this._activePanel.layout(width, height);
|
|
11126
11158
|
}
|
|
@@ -11254,6 +11286,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
11254
11286
|
this.tabsContainer.setRightActionsElement(element);
|
|
11255
11287
|
}
|
|
11256
11288
|
setActive(isGroupActive, force = false) {
|
|
11289
|
+
if (this.isDisposed) return;
|
|
11257
11290
|
if (!force && this.isActive === isGroupActive) return;
|
|
11258
11291
|
this._isGroupActive = isGroupActive;
|
|
11259
11292
|
toggleClass(this.container, "dv-active-group", isGroupActive);
|
|
@@ -14298,13 +14331,14 @@ var ContextMenuController = class {
|
|
|
14298
14331
|
* menu passes the `tabGroup`. No-op when no renderer could be created (no
|
|
14299
14332
|
* factory configured, or the factory declined the component).
|
|
14300
14333
|
*/
|
|
14301
|
-
appendComponentItem(menuEl, item, identity, group, close) {
|
|
14334
|
+
appendComponentItem(menuEl, item, identity, group, close, renderers) {
|
|
14302
14335
|
var _this$accessor$option4, _this$accessor$option5;
|
|
14303
14336
|
const renderer = (_this$accessor$option4 = (_this$accessor$option5 = this.accessor.options).createContextMenuItemComponent) === null || _this$accessor$option4 === void 0 ? void 0 : _this$accessor$option4.call(_this$accessor$option5, {
|
|
14304
14337
|
id: nextContextMenuItemId(),
|
|
14305
14338
|
component: item.component
|
|
14306
14339
|
});
|
|
14307
14340
|
if (!renderer) return;
|
|
14341
|
+
renderers.addDisposables(renderer);
|
|
14308
14342
|
renderer.init(_objectSpread2(_objectSpread2({}, identity), {}, {
|
|
14309
14343
|
group,
|
|
14310
14344
|
api: this.accessor.api,
|
|
@@ -14355,9 +14389,9 @@ var ContextMenuController = class {
|
|
|
14355
14389
|
* default row; an item carrying none of the three renders nothing. Shared
|
|
14356
14390
|
* by both menus, which differ only in `identity`.
|
|
14357
14391
|
*/
|
|
14358
|
-
appendConfigItem(menuEl, item, identity, group, close) {
|
|
14392
|
+
appendConfigItem(menuEl, item, identity, group, close, renderers) {
|
|
14359
14393
|
if (item.element) menuEl.appendChild(item.element);
|
|
14360
|
-
else if (item.component) this.appendComponentItem(menuEl, item, identity, group, close);
|
|
14394
|
+
else if (item.component) this.appendComponentItem(menuEl, item, identity, group, close, renderers);
|
|
14361
14395
|
else if (item.label) menuEl.appendChild(buildItem(item.label, close, () => {
|
|
14362
14396
|
var _item$action;
|
|
14363
14397
|
return (_item$action = item.action) === null || _item$action === void 0 ? void 0 : _item$action.call(item);
|
|
@@ -14369,22 +14403,28 @@ var ContextMenuController = class {
|
|
|
14369
14403
|
event.preventDefault();
|
|
14370
14404
|
const popupService = this.accessor.getPopupServiceForGroup(group);
|
|
14371
14405
|
const close = () => popupService.close();
|
|
14406
|
+
const renderers = new CompositeDisposable();
|
|
14372
14407
|
const menuEl = document.createElement("div");
|
|
14373
14408
|
menuEl.className = "dv-context-menu";
|
|
14374
14409
|
menuEl.setAttribute("role", "menu");
|
|
14375
|
-
|
|
14376
|
-
|
|
14377
|
-
|
|
14378
|
-
|
|
14410
|
+
try {
|
|
14411
|
+
for (const item of items) {
|
|
14412
|
+
if (isItemConfig(item)) {
|
|
14413
|
+
this.appendConfigItem(menuEl, item, { panel }, group, close, renderers);
|
|
14414
|
+
continue;
|
|
14415
|
+
}
|
|
14416
|
+
const el = this.buildBuiltInTabItem(item, panel, group, close);
|
|
14417
|
+
if (el) menuEl.appendChild(el);
|
|
14379
14418
|
}
|
|
14380
|
-
|
|
14381
|
-
|
|
14419
|
+
} catch (err) {
|
|
14420
|
+
renderers.dispose();
|
|
14421
|
+
throw err;
|
|
14382
14422
|
}
|
|
14383
14423
|
popupService.openPopover(menuEl, {
|
|
14384
14424
|
x: event.clientX,
|
|
14385
14425
|
y: event.clientY,
|
|
14386
14426
|
zIndex: popoverZIndexFor(event.target, group)
|
|
14387
|
-
});
|
|
14427
|
+
}, { onClose: () => renderers.dispose() });
|
|
14388
14428
|
}
|
|
14389
14429
|
showForChip(tabGroup, group, event) {
|
|
14390
14430
|
if (!this.accessor.options.getTabGroupChipContextMenuItems) return;
|
|
@@ -14398,22 +14438,28 @@ var ContextMenuController = class {
|
|
|
14398
14438
|
event.preventDefault();
|
|
14399
14439
|
const popupService = this.accessor.getPopupServiceForGroup(group);
|
|
14400
14440
|
const close = () => popupService.close();
|
|
14441
|
+
const renderers = new CompositeDisposable();
|
|
14401
14442
|
const menuEl = document.createElement("div");
|
|
14402
14443
|
menuEl.className = "dv-context-menu";
|
|
14403
14444
|
menuEl.setAttribute("role", "menu");
|
|
14404
|
-
|
|
14405
|
-
|
|
14406
|
-
|
|
14407
|
-
|
|
14408
|
-
|
|
14409
|
-
|
|
14410
|
-
|
|
14411
|
-
|
|
14445
|
+
try {
|
|
14446
|
+
for (const item of items) if (item === "separator") menuEl.appendChild(buildSeparator());
|
|
14447
|
+
else if (item === "rename") menuEl.appendChild(buildRenameInput(tabGroup));
|
|
14448
|
+
else if (item === "colorPicker") menuEl.appendChild(buildColorPicker(tabGroup, this.accessor.tabGroupColorPalette));
|
|
14449
|
+
else if (item === "collapse") menuEl.appendChild(this.buildCollapseItem(tabGroup, close));
|
|
14450
|
+
else if (item === "close") menuEl.appendChild(buildItem("Close All", close, () => {
|
|
14451
|
+
group.panels.filter((p) => tabGroup.containsPanel(p.id)).forEach((p) => p.api.close());
|
|
14452
|
+
}));
|
|
14453
|
+
else if (isItemConfig(item)) this.appendConfigItem(menuEl, item, { tabGroup }, group, close, renderers);
|
|
14454
|
+
} catch (err) {
|
|
14455
|
+
renderers.dispose();
|
|
14456
|
+
throw err;
|
|
14457
|
+
}
|
|
14412
14458
|
popupService.openPopover(menuEl, {
|
|
14413
14459
|
x: event.clientX,
|
|
14414
14460
|
y: event.clientY,
|
|
14415
14461
|
zIndex: popoverZIndexFor(event.target, group)
|
|
14416
|
-
});
|
|
14462
|
+
}, { onClose: () => renderers.dispose() });
|
|
14417
14463
|
}
|
|
14418
14464
|
};
|
|
14419
14465
|
const ContextMenuModule = defineModule({
|
|
@@ -14703,6 +14749,7 @@ var OverlayRenderContainer = class extends CompositeDisposable {
|
|
|
14703
14749
|
const observerDisposable = new MutableDisposable();
|
|
14704
14750
|
const correctLayerPosition = () => {
|
|
14705
14751
|
if (panel.api.location.type === "floating") queueMicrotask(() => {
|
|
14752
|
+
if (disposable.isDisposed) return;
|
|
14706
14753
|
const floatingGroup = this.accessor.getFloatingWindowForGroup(panel.api.group);
|
|
14707
14754
|
if (!floatingGroup) return;
|
|
14708
14755
|
const element = floatingGroup.overlay.element;
|
|
@@ -14937,7 +14984,7 @@ var PopupService = class extends CompositeDisposable {
|
|
|
14937
14984
|
newRoot.prepend(this._element);
|
|
14938
14985
|
this._root = newRoot;
|
|
14939
14986
|
}
|
|
14940
|
-
openPopover(element, position) {
|
|
14987
|
+
openPopover(element, position, options) {
|
|
14941
14988
|
var _position$zIndex;
|
|
14942
14989
|
this.close();
|
|
14943
14990
|
const wrapper = this._window.document.createElement("div");
|
|
@@ -14952,14 +14999,14 @@ var PopupService = class extends CompositeDisposable {
|
|
|
14952
14999
|
this._element.appendChild(wrapper);
|
|
14953
15000
|
this._active = wrapper;
|
|
14954
15001
|
const POINTERDOWN_GRACE_MS = 200;
|
|
14955
|
-
this._activeDisposable.value = createDismissableLayer({
|
|
15002
|
+
this._activeDisposable.value = new CompositeDisposable(createDismissableLayer({
|
|
14956
15003
|
window: this._window,
|
|
14957
15004
|
onDismiss: () => this.close(),
|
|
14958
15005
|
elements: () => this._active ? [this._active] : [],
|
|
14959
15006
|
keys: ["Enter"],
|
|
14960
15007
|
pointerDownGraceMs: POINTERDOWN_GRACE_MS,
|
|
14961
15008
|
resize: true
|
|
14962
|
-
});
|
|
15009
|
+
}), (options === null || options === void 0 ? void 0 : options.onClose) ? Disposable.from(options.onClose) : Disposable.NONE);
|
|
14963
15010
|
this._window.requestAnimationFrame(() => {
|
|
14964
15011
|
shiftAbsoluteElementIntoView(wrapper, this._root);
|
|
14965
15012
|
});
|
|
@@ -16271,7 +16318,9 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
16271
16318
|
this._onWillDrop = new Emitter();
|
|
16272
16319
|
this.onWillDrop = this._onWillDrop.event;
|
|
16273
16320
|
this._mutationDepth = 0;
|
|
16321
|
+
this._syncMutationDepth = 0;
|
|
16274
16322
|
this._pendingLocationChanges = /* @__PURE__ */ new Map();
|
|
16323
|
+
this._openingPopoutWindows = /* @__PURE__ */ new Set();
|
|
16275
16324
|
this._origin = "user";
|
|
16276
16325
|
this._originDepth = 0;
|
|
16277
16326
|
this._onWillMutateLayout = new Emitter();
|
|
@@ -16355,6 +16404,10 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
16355
16404
|
});
|
|
16356
16405
|
}));
|
|
16357
16406
|
this.popupService = new PopupService(this.element);
|
|
16407
|
+
this.addDisposables(this.popupService, Disposable.from(() => {
|
|
16408
|
+
for (const opening of this._openingPopoutWindows) opening.dispose();
|
|
16409
|
+
this._openingPopoutWindows.clear();
|
|
16410
|
+
}));
|
|
16358
16411
|
this._api = new DockviewApi(this);
|
|
16359
16412
|
this.disableResizing = true;
|
|
16360
16413
|
this.element.remove();
|
|
@@ -16503,9 +16556,15 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
16503
16556
|
const popoutWindowDisposable = new CompositeDisposable(_window, _window.onDidClose(() => {
|
|
16504
16557
|
popoutWindowDisposable.dispose();
|
|
16505
16558
|
}));
|
|
16559
|
+
this._openingPopoutWindows.add(popoutWindowDisposable);
|
|
16506
16560
|
const openError = getPopoutUrlError(popoutUrl);
|
|
16507
16561
|
return (openError ? Promise.resolve(null) : _window.open()).then((popoutContainer) => {
|
|
16508
16562
|
var _options$referenceGro, _options$overridePopo4;
|
|
16563
|
+
this._openingPopoutWindows.delete(popoutWindowDisposable);
|
|
16564
|
+
if (this.isDisposed) {
|
|
16565
|
+
popoutWindowDisposable.dispose();
|
|
16566
|
+
return false;
|
|
16567
|
+
}
|
|
16509
16568
|
if (_window.isDisposed) {
|
|
16510
16569
|
const failure = _window.failure;
|
|
16511
16570
|
if (failure && !this.isDisposed) {
|
|
@@ -16699,6 +16758,7 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
16699
16758
|
for (const { panel, from } of movedPanels) this.fireDidMovePanel(panel, from);
|
|
16700
16759
|
return true;
|
|
16701
16760
|
}).catch((err) => {
|
|
16761
|
+
this._openingPopoutWindows.delete(popoutWindowDisposable);
|
|
16702
16762
|
console.error("dockview: failed to create popout.", err);
|
|
16703
16763
|
return false;
|
|
16704
16764
|
});
|
|
@@ -17238,6 +17298,7 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
17238
17298
|
group.dispose();
|
|
17239
17299
|
this._groups.delete(group.id);
|
|
17240
17300
|
this._onDidRemoveGroup.fire(group);
|
|
17301
|
+
this.activateFallbackGroupIfRemoved(group);
|
|
17241
17302
|
});
|
|
17242
17303
|
}
|
|
17243
17304
|
setEdgeGroupCollapsed(group, collapsed) {
|
|
@@ -17434,6 +17495,7 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
17434
17495
|
const record = this._groups.get(temporaryGroup.api.id);
|
|
17435
17496
|
this._groups.delete(temporaryGroup.api.id);
|
|
17436
17497
|
temporaryGroupDisposables.push(Disposable.from(() => {
|
|
17498
|
+
var _this$headerActionsSe2;
|
|
17437
17499
|
/**
|
|
17438
17500
|
* Reclaim the group's own resources, never its panels.
|
|
17439
17501
|
* Staging is driven by the ids in `data.panels` while
|
|
@@ -17451,6 +17513,7 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
17451
17513
|
for (const panel of temporaryGroup.panels.slice()) temporaryGroup.model.removePanel(panel);
|
|
17452
17514
|
});
|
|
17453
17515
|
record === null || record === void 0 || record.disposable.dispose();
|
|
17516
|
+
(_this$headerActionsSe2 = this.headerActionsService) === null || _this$headerActionsSe2 === void 0 || _this$headerActionsSe2.disposeGroup(temporaryGroup);
|
|
17454
17517
|
temporaryGroup.dispose();
|
|
17455
17518
|
}));
|
|
17456
17519
|
return temporaryGroup;
|
|
@@ -18115,9 +18178,12 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
18115
18178
|
*/
|
|
18116
18179
|
mutation(kind, func) {
|
|
18117
18180
|
const close = this.openMutation(kind);
|
|
18181
|
+
this._syncMutationDepth++;
|
|
18118
18182
|
try {
|
|
18119
18183
|
return func();
|
|
18120
18184
|
} finally {
|
|
18185
|
+
this._syncMutationDepth--;
|
|
18186
|
+
if (this._syncMutationDepth === 0) this.releaseDisposedActiveGroup();
|
|
18121
18187
|
close();
|
|
18122
18188
|
}
|
|
18123
18189
|
}
|
|
@@ -18164,6 +18230,7 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
18164
18230
|
return () => {
|
|
18165
18231
|
this._mutationDepth--;
|
|
18166
18232
|
if (this._mutationDepth === 0) {
|
|
18233
|
+
this.releaseDisposedActiveGroup();
|
|
18167
18234
|
this.flushLocationChanges();
|
|
18168
18235
|
this._onDidMutateLayout.fire({
|
|
18169
18236
|
kind,
|
|
@@ -18172,6 +18239,11 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
18172
18239
|
}
|
|
18173
18240
|
};
|
|
18174
18241
|
}
|
|
18242
|
+
/** Covers removals with `skipActive` that disposed the active group. */
|
|
18243
|
+
releaseDisposedActiveGroup() {
|
|
18244
|
+
var _this$_activeGroup;
|
|
18245
|
+
if (!this.isDisposed && ((_this$_activeGroup = this._activeGroup) === null || _this$_activeGroup === void 0 ? void 0 : _this$_activeGroup.model.isDisposed)) this.activateFallbackGroupIfRemoved(this._activeGroup);
|
|
18246
|
+
}
|
|
18175
18247
|
/**
|
|
18176
18248
|
* Coalesce a panel's `onDidLocationChange` to the end of the enclosing
|
|
18177
18249
|
* transaction, or fire it immediately when no transaction is in flight.
|
|
@@ -18309,7 +18381,7 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
18309
18381
|
skipSetActiveGroup: true
|
|
18310
18382
|
}));
|
|
18311
18383
|
if (!removedPanel) throw new Error(`dockview: No panel with id ${sourceItemId}`);
|
|
18312
|
-
if (!options.keepEmptyGroups && sourceGroup.model.size === 0) this.doRemoveGroup(sourceGroup, { skipActive: true });
|
|
18384
|
+
if (!options.keepEmptyGroups && sourceGroup.model.size === 0 && sourceGroup !== destinationGroup) this.doRemoveGroup(sourceGroup, { skipActive: true });
|
|
18313
18385
|
const isDestinationGroupEmpty = destinationGroup.model.size === 0;
|
|
18314
18386
|
this.movingLock(() => {
|
|
18315
18387
|
var _options$skipSetActiv;
|
|
@@ -18474,6 +18546,7 @@ var DockviewComponent = class extends BaseGrid {
|
|
|
18474
18546
|
const from = options.from.group;
|
|
18475
18547
|
const to = options.to.group;
|
|
18476
18548
|
const target = options.to.position;
|
|
18549
|
+
if (target === "center" && from === to) return;
|
|
18477
18550
|
let source = from;
|
|
18478
18551
|
let mergedPanels;
|
|
18479
18552
|
if (target === "center") {
|
|
@@ -19505,6 +19578,7 @@ var PaneviewComponent = class extends Resizable {
|
|
|
19505
19578
|
const queue = [];
|
|
19506
19579
|
const width = this.width;
|
|
19507
19580
|
const height = this.height;
|
|
19581
|
+
this.paneview.dispose();
|
|
19508
19582
|
this.paneview = new Paneview(this.element, {
|
|
19509
19583
|
orientation: "VERTICAL",
|
|
19510
19584
|
descriptor: {
|
|
@@ -19568,7 +19642,11 @@ var PaneviewComponent = class extends Resizable {
|
|
|
19568
19642
|
clear() {
|
|
19569
19643
|
for (const [_, value] of this._viewDisposables.entries()) value.dispose();
|
|
19570
19644
|
this._viewDisposables.clear();
|
|
19645
|
+
const width = this.width;
|
|
19646
|
+
const height = this.height;
|
|
19571
19647
|
this.paneview.dispose();
|
|
19648
|
+
this.paneview = new Paneview(this.element, { orientation: "VERTICAL" });
|
|
19649
|
+
this.layout(width, height);
|
|
19572
19650
|
}
|
|
19573
19651
|
doAddPanel(panel) {
|
|
19574
19652
|
const disposable = new CompositeDisposable(panel.onDidDrop((event) => {
|