dockview-core 1.13.0 → 1.14.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/dockviewGroupPanelApi.js +4 -5
- package/dist/cjs/api/dockviewPanelApi.js +4 -6
- package/dist/cjs/dockview/dockviewComponent.js +15 -17
- package/dist/cjs/dockview/dockviewPanel.js +1 -10
- package/dist/cjs/events.d.ts +13 -2
- package/dist/cjs/events.js +47 -15
- package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -4
- package/dist/cjs/gridview/baseComponentGridview.js +3 -7
- package/dist/dockview-core.amd.js +66 -53
- 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 +66 -53
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +66 -53
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +66 -53
- 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 +66 -53
- 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 +66 -53
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/dockviewGroupPanelApi.js +3 -4
- package/dist/esm/api/dockviewPanelApi.js +4 -6
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +1 -1
- package/dist/esm/dockview/dockviewComponent.js +15 -17
- package/dist/esm/dockview/dockviewPanel.js +1 -10
- package/dist/esm/events.d.ts +13 -2
- package/dist/esm/events.js +40 -9
- package/dist/esm/gridview/baseComponentGridview.d.ts +3 -4
- package/dist/esm/gridview/baseComponentGridview.js +4 -8
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* dockview-core
|
|
3
|
-
* @version 1.
|
|
3
|
+
* @version 1.14.0
|
|
4
4
|
* @link https://github.com/mathuo/dockview
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
@@ -155,7 +155,7 @@ class Stacktrace {
|
|
|
155
155
|
this.value = value;
|
|
156
156
|
}
|
|
157
157
|
print() {
|
|
158
|
-
console.warn(this.value);
|
|
158
|
+
console.warn('dockview: stacktrace', this.value);
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
class Listener {
|
|
@@ -220,7 +220,7 @@ class Emitter {
|
|
|
220
220
|
var _a;
|
|
221
221
|
// don't check until stack of execution is completed to allow for out-of-order disposals within the same execution block
|
|
222
222
|
for (const listener of this._listeners) {
|
|
223
|
-
console.warn((_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
|
|
223
|
+
console.warn('dockview: stacktrace', (_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
|
|
224
224
|
}
|
|
225
225
|
});
|
|
226
226
|
}
|
|
@@ -250,18 +250,49 @@ function addDisposableListener(element, type, listener, options) {
|
|
|
250
250
|
},
|
|
251
251
|
};
|
|
252
252
|
}
|
|
253
|
-
|
|
253
|
+
/**
|
|
254
|
+
*
|
|
255
|
+
* Event Emitter that fires events from a Microtask callback, only one event will fire per event-loop cycle.
|
|
256
|
+
*
|
|
257
|
+
* It's kind of like using an `asapScheduler` in RxJs with additional logic to only fire once per event-loop cycle.
|
|
258
|
+
* This implementation exists to avoid external dependencies.
|
|
259
|
+
*
|
|
260
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask
|
|
261
|
+
* @see https://rxjs.dev/api/index/const/asapScheduler
|
|
262
|
+
*/
|
|
263
|
+
class AsapEvent {
|
|
254
264
|
constructor() {
|
|
255
265
|
this._onFired = new Emitter();
|
|
256
|
-
this.
|
|
266
|
+
this._currentFireCount = 0;
|
|
267
|
+
this._queued = false;
|
|
268
|
+
this.onEvent = (e) => {
|
|
269
|
+
/**
|
|
270
|
+
* when the event is first subscribed to take note of the current fire count
|
|
271
|
+
*/
|
|
272
|
+
const fireCountAtTimeOfEventSubscription = this._currentFireCount;
|
|
273
|
+
return this._onFired.event(() => {
|
|
274
|
+
/**
|
|
275
|
+
* if the current fire count is greater than the fire count at event subscription
|
|
276
|
+
* then the event has been fired since we subscribed and it's ok to "on_next" the event.
|
|
277
|
+
*
|
|
278
|
+
* if the count is not greater then what we are recieving is an event from the microtask
|
|
279
|
+
* queue that was triggered before we actually subscribed and therfore we should ignore it.
|
|
280
|
+
*/
|
|
281
|
+
if (this._currentFireCount > fireCountAtTimeOfEventSubscription) {
|
|
282
|
+
e();
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
};
|
|
257
286
|
}
|
|
258
287
|
fire() {
|
|
259
|
-
|
|
260
|
-
|
|
288
|
+
this._currentFireCount++;
|
|
289
|
+
if (this._queued) {
|
|
290
|
+
return;
|
|
261
291
|
}
|
|
262
|
-
this.
|
|
292
|
+
this._queued = true;
|
|
293
|
+
queueMicrotask(() => {
|
|
294
|
+
this._queued = false;
|
|
263
295
|
this._onFired.fire();
|
|
264
|
-
clearTimeout(this.timer);
|
|
265
296
|
});
|
|
266
297
|
}
|
|
267
298
|
dispose() {
|
|
@@ -2579,15 +2610,14 @@ class BaseGrid extends Resizable {
|
|
|
2579
2610
|
super(document.createElement('div'), options.disableAutoResizing);
|
|
2580
2611
|
this._id = nextLayoutId$1.next();
|
|
2581
2612
|
this._groups = new Map();
|
|
2582
|
-
this._onDidLayoutChange = new Emitter();
|
|
2583
|
-
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
2584
2613
|
this._onDidRemove = new Emitter();
|
|
2585
2614
|
this.onDidRemove = this._onDidRemove.event;
|
|
2586
2615
|
this._onDidAdd = new Emitter();
|
|
2587
2616
|
this.onDidAdd = this._onDidAdd.event;
|
|
2588
2617
|
this._onDidActiveChange = new Emitter();
|
|
2589
2618
|
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
2590
|
-
this._bufferOnDidLayoutChange = new
|
|
2619
|
+
this._bufferOnDidLayoutChange = new AsapEvent();
|
|
2620
|
+
this.onDidLayoutChange = this._bufferOnDidLayoutChange.onEvent;
|
|
2591
2621
|
this.element.style.height = '100%';
|
|
2592
2622
|
this.element.style.width = '100%';
|
|
2593
2623
|
options.parentElement.appendChild(this.element);
|
|
@@ -2602,13 +2632,11 @@ class BaseGrid extends Resizable {
|
|
|
2602
2632
|
this._bufferOnDidLayoutChange.fire();
|
|
2603
2633
|
}), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
|
|
2604
2634
|
this._bufferOnDidLayoutChange.fire();
|
|
2605
|
-
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
2606
|
-
this._onDidLayoutChange.fire();
|
|
2607
2635
|
}), this._bufferOnDidLayoutChange);
|
|
2608
2636
|
}
|
|
2609
2637
|
setVisible(panel, visible) {
|
|
2610
2638
|
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
|
2611
|
-
this.
|
|
2639
|
+
this._bufferOnDidLayoutChange.fire();
|
|
2612
2640
|
}
|
|
2613
2641
|
isVisible(panel) {
|
|
2614
2642
|
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
@@ -2714,7 +2742,6 @@ class BaseGrid extends Resizable {
|
|
|
2714
2742
|
this._onDidActiveChange.dispose();
|
|
2715
2743
|
this._onDidAdd.dispose();
|
|
2716
2744
|
this._onDidRemove.dispose();
|
|
2717
|
-
this._onDidLayoutChange.dispose();
|
|
2718
2745
|
for (const group of this.groups) {
|
|
2719
2746
|
group.dispose();
|
|
2720
2747
|
}
|
|
@@ -5743,8 +5770,7 @@ class GridviewPanel extends BasePanelView {
|
|
|
5743
5770
|
}
|
|
5744
5771
|
}
|
|
5745
5772
|
|
|
5746
|
-
|
|
5747
|
-
const NOT_INITIALIZED_MESSAGE = 'DockviewGroupPanelApiImpl not initialized';
|
|
5773
|
+
const NOT_INITIALIZED_MESSAGE = 'dockview: DockviewGroupPanelApiImpl not initialized';
|
|
5748
5774
|
class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
|
5749
5775
|
get location() {
|
|
5750
5776
|
if (!this._group) {
|
|
@@ -5817,14 +5843,14 @@ class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
5817
5843
|
}
|
|
5818
5844
|
}
|
|
5819
5845
|
initialize(group) {
|
|
5820
|
-
this._group = group;
|
|
5821
5846
|
/**
|
|
5822
|
-
* TODO: Annoying initialization order caveat
|
|
5847
|
+
* TODO: Annoying initialization order caveat, find a better way to initialize and avoid needing null checks
|
|
5823
5848
|
*
|
|
5824
5849
|
* Due to the order on initialization we know that the model isn't defined until later in the same stack-frame of setup.
|
|
5825
5850
|
* By queuing a microtask we can ensure the setup is completed within the same stack-frame, but after everything else has
|
|
5826
5851
|
* finished ensuring the `model` is defined.
|
|
5827
5852
|
*/
|
|
5853
|
+
this._group = group;
|
|
5828
5854
|
queueMicrotask(() => {
|
|
5829
5855
|
this._mutableDisposable.value =
|
|
5830
5856
|
this._group.model.onDidActivePanelChange((event) => {
|
|
@@ -5978,12 +6004,10 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
5978
6004
|
var _a;
|
|
5979
6005
|
let _trackGroupActive = (_a = previousGroup === null || previousGroup === void 0 ? void 0 : previousGroup.isActive) !== null && _a !== void 0 ? _a : false; // prevent duplicate events with same state
|
|
5980
6006
|
this.groupEventsDisposable.value = new CompositeDisposable(this.group.api.onDidVisibilityChange((event) => {
|
|
5981
|
-
|
|
5982
|
-
|
|
5983
|
-
|
|
5984
|
-
|
|
5985
|
-
!this.isVisible &&
|
|
5986
|
-
this.group.model.isPanelActive(this.panel)) {
|
|
6007
|
+
const hasBecomeHidden = !event.isVisible && this.isVisible;
|
|
6008
|
+
const hasBecomeVisible = event.isVisible && !this.isVisible;
|
|
6009
|
+
const isActivePanel = this.group.model.isPanelActive(this.panel);
|
|
6010
|
+
if (hasBecomeHidden || (hasBecomeVisible && isActivePanel)) {
|
|
5987
6011
|
this._onDidVisibilityChange.fire(event);
|
|
5988
6012
|
}
|
|
5989
6013
|
}), this.group.api.onDidLocationChange((event) => {
|
|
@@ -6069,12 +6093,6 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
6069
6093
|
const didTitleChange = title !== this.title;
|
|
6070
6094
|
if (didTitleChange) {
|
|
6071
6095
|
this._title = title;
|
|
6072
|
-
this.view.update({
|
|
6073
|
-
params: {
|
|
6074
|
-
params: this._params,
|
|
6075
|
-
title: this.title,
|
|
6076
|
-
},
|
|
6077
|
-
});
|
|
6078
6096
|
this.api._onDidTitleChange.fire({ title });
|
|
6079
6097
|
}
|
|
6080
6098
|
}
|
|
@@ -6102,10 +6120,7 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
6102
6120
|
}
|
|
6103
6121
|
// update the view with the updated props
|
|
6104
6122
|
this.view.update({
|
|
6105
|
-
params:
|
|
6106
|
-
params: this._params,
|
|
6107
|
-
title: this.title,
|
|
6108
|
-
},
|
|
6123
|
+
params: this._params,
|
|
6109
6124
|
});
|
|
6110
6125
|
}
|
|
6111
6126
|
updateParentGroup(group, options) {
|
|
@@ -7243,7 +7258,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
7243
7258
|
return element.getBoundingClientRect();
|
|
7244
7259
|
}
|
|
7245
7260
|
const box = getBox();
|
|
7246
|
-
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();
|
|
7261
|
+
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();
|
|
7247
7262
|
if (itemToPopout.api.location.type === 'grid') {
|
|
7248
7263
|
itemToPopout.api.setVisible(false);
|
|
7249
7264
|
}
|
|
@@ -7359,24 +7374,22 @@ class DockviewComponent extends BaseGrid {
|
|
|
7359
7374
|
});
|
|
7360
7375
|
}
|
|
7361
7376
|
}
|
|
7362
|
-
else {
|
|
7363
|
-
|
|
7364
|
-
|
|
7365
|
-
|
|
7366
|
-
|
|
7367
|
-
|
|
7368
|
-
|
|
7369
|
-
|
|
7370
|
-
|
|
7371
|
-
returnedGroup = removedGroup;
|
|
7372
|
-
}
|
|
7377
|
+
else if (this.getPanel(group.id)) {
|
|
7378
|
+
const removedGroup = this.doRemoveGroup(group, {
|
|
7379
|
+
skipDispose: true,
|
|
7380
|
+
skipActive: true,
|
|
7381
|
+
});
|
|
7382
|
+
removedGroup.model.renderContainer =
|
|
7383
|
+
this.overlayRenderContainer;
|
|
7384
|
+
removedGroup.model.location = { type: 'grid' };
|
|
7385
|
+
returnedGroup = removedGroup;
|
|
7373
7386
|
}
|
|
7374
7387
|
}));
|
|
7375
7388
|
this._popoutGroups.push(value);
|
|
7376
7389
|
this.updateWatermark();
|
|
7377
7390
|
})
|
|
7378
7391
|
.catch((err) => {
|
|
7379
|
-
console.error(err);
|
|
7392
|
+
console.error('dockview: failed to create popout window', err);
|
|
7380
7393
|
});
|
|
7381
7394
|
}
|
|
7382
7395
|
addFloatingGroup(item, coord, options) {
|
|
@@ -7419,7 +7432,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
7419
7432
|
this.doRemoveGroup(item, {
|
|
7420
7433
|
skipDispose: true,
|
|
7421
7434
|
skipPopoutReturn: true,
|
|
7422
|
-
skipPopoutAssociated:
|
|
7435
|
+
skipPopoutAssociated: false,
|
|
7423
7436
|
});
|
|
7424
7437
|
}
|
|
7425
7438
|
}
|
|
@@ -7779,7 +7792,6 @@ class DockviewComponent extends BaseGrid {
|
|
|
7779
7792
|
clear() {
|
|
7780
7793
|
const groups = Array.from(this._groups.values()).map((_) => _.value);
|
|
7781
7794
|
const hasActiveGroup = !!this.activeGroup;
|
|
7782
|
-
!!this.activePanel;
|
|
7783
7795
|
for (const group of groups) {
|
|
7784
7796
|
// remove the group will automatically remove the panels
|
|
7785
7797
|
this.removeGroup(group, { skipActive: true });
|
|
@@ -7963,7 +7975,6 @@ class DockviewComponent extends BaseGrid {
|
|
|
7963
7975
|
}
|
|
7964
7976
|
addGroup(options) {
|
|
7965
7977
|
var _a;
|
|
7966
|
-
const group = this.createGroup(options);
|
|
7967
7978
|
if (options) {
|
|
7968
7979
|
let referenceGroup;
|
|
7969
7980
|
if (isGroupOptionsWithPanel(options)) {
|
|
@@ -7997,6 +8008,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
7997
8008
|
const target = toTarget(options.direction || 'within');
|
|
7998
8009
|
const location = getGridLocation(referenceGroup.element);
|
|
7999
8010
|
const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
|
|
8011
|
+
const group = this.createGroup(options);
|
|
8000
8012
|
this.doAddGroup(group, relativeLocation);
|
|
8001
8013
|
if (!options.skipSetActive) {
|
|
8002
8014
|
this.doSetGroupAndPanelActive(group);
|
|
@@ -8004,6 +8016,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
8004
8016
|
return group;
|
|
8005
8017
|
}
|
|
8006
8018
|
else {
|
|
8019
|
+
const group = this.createGroup(options);
|
|
8007
8020
|
this.doAddGroup(group);
|
|
8008
8021
|
this.doSetGroupAndPanelActive(group);
|
|
8009
8022
|
return group;
|
|
@@ -8284,7 +8297,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
8284
8297
|
}
|
|
8285
8298
|
let id = options === null || options === void 0 ? void 0 : options.id;
|
|
8286
8299
|
if (id && this._groups.has(options.id)) {
|
|
8287
|
-
console.warn(`Duplicate group id ${options === null || options === void 0 ? void 0 : options.id}. reassigning group id to avoid errors`);
|
|
8300
|
+
console.warn(`dockview: Duplicate group id ${options === null || options === void 0 ? void 0 : options.id}. reassigning group id to avoid errors`);
|
|
8288
8301
|
id = undefined;
|
|
8289
8302
|
}
|
|
8290
8303
|
if (!id) {
|