dockview-core 1.13.0 → 1.13.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.
Files changed (33) hide show
  1. package/dist/cjs/dockview/dockviewComponent.js +2 -1
  2. package/dist/cjs/events.d.ts +13 -2
  3. package/dist/cjs/events.js +44 -12
  4. package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -4
  5. package/dist/cjs/gridview/baseComponentGridview.js +3 -7
  6. package/dist/dockview-core.amd.js +43 -15
  7. package/dist/dockview-core.amd.js.map +1 -1
  8. package/dist/dockview-core.amd.min.js +2 -2
  9. package/dist/dockview-core.amd.min.js.map +1 -1
  10. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  11. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  12. package/dist/dockview-core.amd.noStyle.js +43 -15
  13. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  14. package/dist/dockview-core.cjs.js +43 -15
  15. package/dist/dockview-core.cjs.js.map +1 -1
  16. package/dist/dockview-core.esm.js +43 -15
  17. package/dist/dockview-core.esm.js.map +1 -1
  18. package/dist/dockview-core.esm.min.js +2 -2
  19. package/dist/dockview-core.esm.min.js.map +1 -1
  20. package/dist/dockview-core.js +43 -15
  21. package/dist/dockview-core.js.map +1 -1
  22. package/dist/dockview-core.min.js +2 -2
  23. package/dist/dockview-core.min.js.map +1 -1
  24. package/dist/dockview-core.min.noStyle.js +2 -2
  25. package/dist/dockview-core.min.noStyle.js.map +1 -1
  26. package/dist/dockview-core.noStyle.js +43 -15
  27. package/dist/dockview-core.noStyle.js.map +1 -1
  28. package/dist/esm/dockview/dockviewComponent.js +2 -1
  29. package/dist/esm/events.d.ts +13 -2
  30. package/dist/esm/events.js +37 -6
  31. package/dist/esm/gridview/baseComponentGridview.d.ts +3 -4
  32. package/dist/esm/gridview/baseComponentGridview.js +4 -8
  33. package/package.json +1 -1
@@ -1310,7 +1310,6 @@ var DockviewComponent = /** @class */ (function (_super) {
1310
1310
  };
1311
1311
  DockviewComponent.prototype.addGroup = function (options) {
1312
1312
  var _a;
1313
- var group = this.createGroup(options);
1314
1313
  if (options) {
1315
1314
  var referenceGroup = void 0;
1316
1315
  if ((0, options_1.isGroupOptionsWithPanel)(options)) {
@@ -1344,6 +1343,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1344
1343
  var target = (0, baseComponentGridview_1.toTarget)(options.direction || 'within');
1345
1344
  var location_2 = (0, gridview_1.getGridLocation)(referenceGroup.element);
1346
1345
  var relativeLocation = (0, gridview_1.getRelativeLocation)(this.gridview.orientation, location_2, target);
1346
+ var group = this.createGroup(options);
1347
1347
  this.doAddGroup(group, relativeLocation);
1348
1348
  if (!options.skipSetActive) {
1349
1349
  this.doSetGroupAndPanelActive(group);
@@ -1351,6 +1351,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1351
1351
  return group;
1352
1352
  }
1353
1353
  else {
1354
+ var group = this.createGroup(options);
1354
1355
  this.doAddGroup(group);
1355
1356
  this.doSetGroupAndPanelActive(group);
1356
1357
  return group;
@@ -47,9 +47,20 @@ export declare class Emitter<T> implements IDisposable {
47
47
  }
48
48
  export declare function addDisposableWindowListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
49
49
  export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
50
- export declare class TickDelayedEvent implements IDisposable {
51
- private timer;
50
+ /**
51
+ *
52
+ * Event Emitter that fires events from a Microtask callback, only one event will fire per event-loop cycle.
53
+ *
54
+ * It's kind of like using an `asapScheduler` in RxJs with additional logic to only fire once per event-loop cycle.
55
+ * This implementation exists to avoid external dependencies.
56
+ *
57
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask
58
+ * @see https://rxjs.dev/api/index/const/asapScheduler
59
+ */
60
+ export declare class AsapEvent implements IDisposable {
52
61
  private readonly _onFired;
62
+ private _currentFireCount;
63
+ private _queued;
53
64
  readonly onEvent: Event<void>;
54
65
  fire(): void;
55
66
  dispose(): void;
@@ -11,7 +11,7 @@ var __values = (this && this.__values) || function(o) {
11
11
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.TickDelayedEvent = exports.addDisposableListener = exports.addDisposableWindowListener = exports.Emitter = exports.DockviewEvent = exports.Event = void 0;
14
+ exports.AsapEvent = exports.addDisposableListener = exports.addDisposableWindowListener = exports.Emitter = exports.DockviewEvent = exports.Event = void 0;
15
15
  var Event;
16
16
  (function (Event) {
17
17
  Event.any = function () {
@@ -217,24 +217,56 @@ function addDisposableListener(element, type, listener, options) {
217
217
  };
218
218
  }
219
219
  exports.addDisposableListener = addDisposableListener;
220
- var TickDelayedEvent = /** @class */ (function () {
221
- function TickDelayedEvent() {
220
+ /**
221
+ *
222
+ * Event Emitter that fires events from a Microtask callback, only one event will fire per event-loop cycle.
223
+ *
224
+ * It's kind of like using an `asapScheduler` in RxJs with additional logic to only fire once per event-loop cycle.
225
+ * This implementation exists to avoid external dependencies.
226
+ *
227
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask
228
+ * @see https://rxjs.dev/api/index/const/asapScheduler
229
+ */
230
+ var AsapEvent = /** @class */ (function () {
231
+ function AsapEvent() {
232
+ var _this = this;
222
233
  this._onFired = new Emitter();
223
- this.onEvent = this._onFired.event;
234
+ this._currentFireCount = 0;
235
+ this._queued = false;
236
+ this.onEvent = function (e) {
237
+ /**
238
+ * when the event is first subscribed to take note of the current fire count
239
+ */
240
+ var fireCountAtTimeOfEventSubscription = _this._currentFireCount;
241
+ return _this._onFired.event(function () {
242
+ /**
243
+ * if the current fire count is greater than the fire count at event subscription
244
+ * then the event has been fired since we subscribed and it's ok to "on_next" the event.
245
+ *
246
+ * if the count is not greater then what we are recieving is an event from the microtask
247
+ * queue that was triggered before we actually subscribed and therfore we should ignore it.
248
+ */
249
+ if (_this._currentFireCount > fireCountAtTimeOfEventSubscription) {
250
+ e();
251
+ }
252
+ });
253
+ };
224
254
  }
225
- TickDelayedEvent.prototype.fire = function () {
255
+ AsapEvent.prototype.fire = function () {
226
256
  var _this = this;
227
- if (this.timer) {
228
- clearTimeout(this.timer);
257
+ this._currentFireCount++;
258
+ if (this._queued) {
259
+ return;
229
260
  }
230
- this.timer = setTimeout(function () {
261
+ this._queued = true;
262
+ queueMicrotask(function () {
263
+ _this._queued = false;
231
264
  _this._onFired.fire();
232
- clearTimeout(_this.timer);
233
265
  });
234
266
  };
235
- TickDelayedEvent.prototype.dispose = function () {
267
+ AsapEvent.prototype.dispose = function () {
236
268
  this._onFired.dispose();
237
269
  };
238
- return TickDelayedEvent;
270
+ return AsapEvent;
239
271
  }());
240
- exports.TickDelayedEvent = TickDelayedEvent;
272
+ exports.AsapEvent = AsapEvent;
@@ -1,4 +1,4 @@
1
- import { Event, TickDelayedEvent } from '../events';
1
+ import { Event, AsapEvent } from '../events';
2
2
  import { Gridview, IGridView } from './gridview';
3
3
  import { Position } from '../dnd/droptarget';
4
4
  import { IValueDisposable } from '../lifecycle';
@@ -51,15 +51,14 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizab
51
51
  protected readonly _groups: Map<string, IValueDisposable<T>>;
52
52
  protected readonly gridview: Gridview;
53
53
  protected _activeGroup: T | undefined;
54
- private _onDidLayoutChange;
55
- readonly onDidLayoutChange: Event<void>;
56
54
  private readonly _onDidRemove;
57
55
  readonly onDidRemove: Event<T>;
58
56
  private readonly _onDidAdd;
59
57
  readonly onDidAdd: Event<T>;
60
58
  private readonly _onDidActiveChange;
61
59
  readonly onDidActiveChange: Event<T | undefined>;
62
- protected readonly _bufferOnDidLayoutChange: TickDelayedEvent;
60
+ protected readonly _bufferOnDidLayoutChange: AsapEvent;
61
+ readonly onDidLayoutChange: Event<void>;
63
62
  get id(): string;
64
63
  get size(): number;
65
64
  get groups(): T[];
@@ -56,15 +56,14 @@ var BaseGrid = /** @class */ (function (_super) {
56
56
  var _this = _super.call(this, document.createElement('div'), options.disableAutoResizing) || this;
57
57
  _this._id = nextLayoutId.next();
58
58
  _this._groups = new Map();
59
- _this._onDidLayoutChange = new events_1.Emitter();
60
- _this.onDidLayoutChange = _this._onDidLayoutChange.event;
61
59
  _this._onDidRemove = new events_1.Emitter();
62
60
  _this.onDidRemove = _this._onDidRemove.event;
63
61
  _this._onDidAdd = new events_1.Emitter();
64
62
  _this.onDidAdd = _this._onDidAdd.event;
65
63
  _this._onDidActiveChange = new events_1.Emitter();
66
64
  _this.onDidActiveChange = _this._onDidActiveChange.event;
67
- _this._bufferOnDidLayoutChange = new events_1.TickDelayedEvent();
65
+ _this._bufferOnDidLayoutChange = new events_1.AsapEvent();
66
+ _this.onDidLayoutChange = _this._bufferOnDidLayoutChange.onEvent;
68
67
  _this.element.style.height = '100%';
69
68
  _this.element.style.width = '100%';
70
69
  options.parentElement.appendChild(_this.element);
@@ -79,8 +78,6 @@ var BaseGrid = /** @class */ (function (_super) {
79
78
  _this._bufferOnDidLayoutChange.fire();
80
79
  }), events_1.Event.any(_this.onDidAdd, _this.onDidRemove, _this.onDidActiveChange)(function () {
81
80
  _this._bufferOnDidLayoutChange.fire();
82
- }), _this._bufferOnDidLayoutChange.onEvent(function () {
83
- _this._onDidLayoutChange.fire();
84
81
  }), _this._bufferOnDidLayoutChange);
85
82
  return _this;
86
83
  }
@@ -166,7 +163,7 @@ var BaseGrid = /** @class */ (function (_super) {
166
163
  });
167
164
  BaseGrid.prototype.setVisible = function (panel, visible) {
168
165
  this.gridview.setViewVisible((0, gridview_1.getGridLocation)(panel.element), visible);
169
- this._onDidLayoutChange.fire();
166
+ this._bufferOnDidLayoutChange.fire();
170
167
  };
171
168
  BaseGrid.prototype.isVisible = function (panel) {
172
169
  return this.gridview.isViewVisible((0, gridview_1.getGridLocation)(panel.element));
@@ -278,7 +275,6 @@ var BaseGrid = /** @class */ (function (_super) {
278
275
  this._onDidActiveChange.dispose();
279
276
  this._onDidAdd.dispose();
280
277
  this._onDidRemove.dispose();
281
- this._onDidLayoutChange.dispose();
282
278
  try {
283
279
  for (var _b = __values(this.groups), _c = _b.next(); !_c.done; _c = _b.next()) {
284
280
  var group = _c.value;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.13.0
3
+ * @version 1.13.1
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -250,18 +250,49 @@ define(['exports'], (function (exports) { 'use strict';
250
250
  },
251
251
  };
252
252
  }
253
- class TickDelayedEvent {
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.onEvent = this._onFired.event;
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
- if (this.timer) {
260
- clearTimeout(this.timer);
288
+ this._currentFireCount++;
289
+ if (this._queued) {
290
+ return;
261
291
  }
262
- this.timer = setTimeout(() => {
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 @@ define(['exports'], (function (exports) { 'use strict';
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 TickDelayedEvent();
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 @@ define(['exports'], (function (exports) { 'use strict';
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._onDidLayoutChange.fire();
2639
+ this._bufferOnDidLayoutChange.fire();
2612
2640
  }
2613
2641
  isVisible(panel) {
2614
2642
  return this.gridview.isViewVisible(getGridLocation(panel.element));
@@ -2714,7 +2742,6 @@ define(['exports'], (function (exports) { 'use strict';
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
  }
@@ -7963,7 +7990,6 @@ define(['exports'], (function (exports) { 'use strict';
7963
7990
  }
7964
7991
  addGroup(options) {
7965
7992
  var _a;
7966
- const group = this.createGroup(options);
7967
7993
  if (options) {
7968
7994
  let referenceGroup;
7969
7995
  if (isGroupOptionsWithPanel(options)) {
@@ -7997,6 +8023,7 @@ define(['exports'], (function (exports) { 'use strict';
7997
8023
  const target = toTarget(options.direction || 'within');
7998
8024
  const location = getGridLocation(referenceGroup.element);
7999
8025
  const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
8026
+ const group = this.createGroup(options);
8000
8027
  this.doAddGroup(group, relativeLocation);
8001
8028
  if (!options.skipSetActive) {
8002
8029
  this.doSetGroupAndPanelActive(group);
@@ -8004,6 +8031,7 @@ define(['exports'], (function (exports) { 'use strict';
8004
8031
  return group;
8005
8032
  }
8006
8033
  else {
8034
+ const group = this.createGroup(options);
8007
8035
  this.doAddGroup(group);
8008
8036
  this.doSetGroupAndPanelActive(group);
8009
8037
  return group;