dockview-core 1.7.3 → 1.7.5

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 (166) hide show
  1. package/dist/cjs/api/dockviewPanelApi.js +1 -1
  2. package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
  3. package/dist/cjs/api/panelApi.d.ts.map +1 -1
  4. package/dist/cjs/api/panelApi.js +3 -5
  5. package/dist/cjs/api/panelApi.js.map +1 -1
  6. package/dist/cjs/dnd/abstractDragHandler.d.ts +2 -2
  7. package/dist/cjs/dnd/abstractDragHandler.d.ts.map +1 -1
  8. package/dist/cjs/dnd/abstractDragHandler.js +28 -23
  9. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  10. package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
  11. package/dist/cjs/dnd/droptarget.js +1 -0
  12. package/dist/cjs/dnd/droptarget.js.map +1 -1
  13. package/dist/cjs/dnd/groupDragHandler.d.ts +0 -1
  14. package/dist/cjs/dnd/groupDragHandler.d.ts.map +1 -1
  15. package/dist/cjs/dnd/groupDragHandler.js +0 -3
  16. package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
  17. package/dist/cjs/dockview/components/panel/content.d.ts.map +1 -1
  18. package/dist/cjs/dockview/components/panel/content.js +2 -2
  19. package/dist/cjs/dockview/components/panel/content.js.map +1 -1
  20. package/dist/cjs/dockview/components/tab/tab.d.ts +2 -2
  21. package/dist/cjs/dockview/components/tab/tab.d.ts.map +1 -1
  22. package/dist/cjs/dockview/components/tab/tab.js +2 -7
  23. package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
  24. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  25. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +27 -3
  26. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  27. package/dist/cjs/dockview/dockviewComponent.d.ts +1 -1
  28. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  29. package/dist/cjs/dockview/dockviewComponent.js +23 -21
  30. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  31. package/dist/cjs/dockview/dockviewGroupPanelModel.js +2 -2
  32. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  33. package/dist/cjs/dockview/dockviewPanel.d.ts +5 -4
  34. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
  35. package/dist/cjs/dockview/dockviewPanel.js +33 -5
  36. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  37. package/dist/cjs/dockview/dockviewPanelModel.d.ts +4 -3
  38. package/dist/cjs/dockview/dockviewPanelModel.d.ts.map +1 -1
  39. package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
  40. package/dist/cjs/dockview/types.d.ts +1 -5
  41. package/dist/cjs/dockview/types.d.ts.map +1 -1
  42. package/dist/cjs/dockview/types.js.map +1 -1
  43. package/dist/cjs/dom.js +1 -5
  44. package/dist/cjs/dom.js.map +1 -1
  45. package/dist/cjs/events.d.ts +17 -0
  46. package/dist/cjs/events.d.ts.map +1 -1
  47. package/dist/cjs/events.js +96 -9
  48. package/dist/cjs/events.js.map +1 -1
  49. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
  50. package/dist/cjs/gridview/baseComponentGridview.js +2 -3
  51. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  52. package/dist/cjs/gridview/basePanelView.d.ts.map +1 -1
  53. package/dist/cjs/gridview/basePanelView.js +41 -8
  54. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  55. package/dist/cjs/gridview/branchNode.d.ts +1 -1
  56. package/dist/cjs/gridview/branchNode.d.ts.map +1 -1
  57. package/dist/cjs/gridview/branchNode.js +3 -3
  58. package/dist/cjs/gridview/branchNode.js.map +1 -1
  59. package/dist/cjs/gridview/gridview.d.ts.map +1 -1
  60. package/dist/cjs/gridview/gridview.js +4 -2
  61. package/dist/cjs/gridview/gridview.js.map +1 -1
  62. package/dist/cjs/gridview/gridviewPanel.js +2 -2
  63. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  64. package/dist/cjs/lifecycle.d.ts +1 -1
  65. package/dist/cjs/lifecycle.d.ts.map +1 -1
  66. package/dist/cjs/lifecycle.js +3 -3
  67. package/dist/cjs/lifecycle.js.map +1 -1
  68. package/dist/cjs/splitview/splitview.d.ts +3 -2
  69. package/dist/cjs/splitview/splitview.d.ts.map +1 -1
  70. package/dist/cjs/splitview/splitview.js +103 -86
  71. package/dist/cjs/splitview/splitview.js.map +1 -1
  72. package/dist/cjs/splitview/splitviewComponent.d.ts +2 -2
  73. package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -1
  74. package/dist/cjs/splitview/splitviewComponent.js +36 -20
  75. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  76. package/dist/cjs/splitview/splitviewPanel.d.ts.map +1 -1
  77. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  78. package/dist/dockview-core.amd.js +281 -194
  79. package/dist/dockview-core.amd.min.js +2 -2
  80. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  81. package/dist/dockview-core.amd.noStyle.js +281 -194
  82. package/dist/dockview-core.cjs.js +281 -194
  83. package/dist/dockview-core.esm.js +281 -194
  84. package/dist/dockview-core.esm.min.js +2 -2
  85. package/dist/dockview-core.js +281 -194
  86. package/dist/dockview-core.min.js +2 -2
  87. package/dist/dockview-core.min.noStyle.js +2 -2
  88. package/dist/dockview-core.noStyle.js +281 -194
  89. package/dist/esm/api/dockviewPanelApi.js +1 -1
  90. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  91. package/dist/esm/api/panelApi.d.ts.map +1 -1
  92. package/dist/esm/api/panelApi.js +3 -5
  93. package/dist/esm/api/panelApi.js.map +1 -1
  94. package/dist/esm/dnd/abstractDragHandler.d.ts +2 -2
  95. package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -1
  96. package/dist/esm/dnd/abstractDragHandler.js +15 -10
  97. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  98. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  99. package/dist/esm/dnd/droptarget.js +1 -0
  100. package/dist/esm/dnd/droptarget.js.map +1 -1
  101. package/dist/esm/dnd/groupDragHandler.d.ts +0 -1
  102. package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -1
  103. package/dist/esm/dnd/groupDragHandler.js +0 -3
  104. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  105. package/dist/esm/dockview/components/panel/content.d.ts.map +1 -1
  106. package/dist/esm/dockview/components/panel/content.js +2 -2
  107. package/dist/esm/dockview/components/panel/content.js.map +1 -1
  108. package/dist/esm/dockview/components/tab/tab.d.ts +2 -2
  109. package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -1
  110. package/dist/esm/dockview/components/tab/tab.js +2 -7
  111. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  112. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
  113. package/dist/esm/dockview/components/titlebar/tabsContainer.js +5 -3
  114. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  115. package/dist/esm/dockview/dockviewComponent.d.ts +1 -1
  116. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  117. package/dist/esm/dockview/dockviewComponent.js +23 -21
  118. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  119. package/dist/esm/dockview/dockviewGroupPanelModel.js +2 -2
  120. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  121. package/dist/esm/dockview/dockviewPanel.d.ts +5 -4
  122. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  123. package/dist/esm/dockview/dockviewPanel.js +11 -5
  124. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  125. package/dist/esm/dockview/dockviewPanelModel.d.ts +4 -3
  126. package/dist/esm/dockview/dockviewPanelModel.d.ts.map +1 -1
  127. package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
  128. package/dist/esm/dockview/types.d.ts +1 -5
  129. package/dist/esm/dockview/types.d.ts.map +1 -1
  130. package/dist/esm/dockview/types.js.map +1 -1
  131. package/dist/esm/dom.js +1 -5
  132. package/dist/esm/dom.js.map +1 -1
  133. package/dist/esm/events.d.ts +17 -0
  134. package/dist/esm/events.d.ts.map +1 -1
  135. package/dist/esm/events.js +77 -9
  136. package/dist/esm/events.js.map +1 -1
  137. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
  138. package/dist/esm/gridview/baseComponentGridview.js +2 -3
  139. package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
  140. package/dist/esm/gridview/basePanelView.d.ts.map +1 -1
  141. package/dist/esm/gridview/basePanelView.js +16 -5
  142. package/dist/esm/gridview/basePanelView.js.map +1 -1
  143. package/dist/esm/gridview/branchNode.d.ts +1 -1
  144. package/dist/esm/gridview/branchNode.d.ts.map +1 -1
  145. package/dist/esm/gridview/branchNode.js +3 -3
  146. package/dist/esm/gridview/branchNode.js.map +1 -1
  147. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  148. package/dist/esm/gridview/gridview.js +4 -2
  149. package/dist/esm/gridview/gridview.js.map +1 -1
  150. package/dist/esm/gridview/gridviewPanel.js +2 -2
  151. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  152. package/dist/esm/lifecycle.d.ts +1 -1
  153. package/dist/esm/lifecycle.d.ts.map +1 -1
  154. package/dist/esm/lifecycle.js +3 -3
  155. package/dist/esm/lifecycle.js.map +1 -1
  156. package/dist/esm/splitview/splitview.d.ts +3 -2
  157. package/dist/esm/splitview/splitview.d.ts.map +1 -1
  158. package/dist/esm/splitview/splitview.js +90 -86
  159. package/dist/esm/splitview/splitview.js.map +1 -1
  160. package/dist/esm/splitview/splitviewComponent.d.ts +2 -2
  161. package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -1
  162. package/dist/esm/splitview/splitviewComponent.js +22 -16
  163. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  164. package/dist/esm/splitview/splitviewPanel.d.ts.map +1 -1
  165. package/dist/esm/splitview/splitviewPanel.js.map +1 -1
  166. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.7.3
3
+ * @version 1.7.5
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -119,9 +119,49 @@ var Event;
119
119
  };
120
120
  };
121
121
  })(Event || (Event = {}));
122
- // dumb event emitter with better typings than nodes event emitter
123
- // https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
122
+ class LeakageMonitor {
123
+ constructor() {
124
+ this.events = new Map();
125
+ }
126
+ get size() {
127
+ return this.events.size;
128
+ }
129
+ add(event, stacktrace) {
130
+ this.events.set(event, stacktrace);
131
+ }
132
+ delete(event) {
133
+ this.events.delete(event);
134
+ }
135
+ clear() {
136
+ this.events.clear();
137
+ }
138
+ }
139
+ class Stacktrace {
140
+ static create() {
141
+ var _a;
142
+ return new Stacktrace((_a = new Error().stack) !== null && _a !== void 0 ? _a : '');
143
+ }
144
+ constructor(value) {
145
+ this.value = value;
146
+ }
147
+ print() {
148
+ console.warn(this.value);
149
+ }
150
+ }
151
+ class Listener {
152
+ constructor(callback, stacktrace) {
153
+ this.callback = callback;
154
+ this.stacktrace = stacktrace;
155
+ }
156
+ }
157
+ // relatively simple event emitter taken from https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
124
158
  class Emitter {
159
+ static setLeakageMonitorEnabled(isEnabled) {
160
+ if (isEnabled !== Emitter.ENABLE_TRACKING) {
161
+ Emitter.MEMORY_LEAK_WATCHER.clear();
162
+ }
163
+ Emitter.ENABLE_TRACKING = isEnabled;
164
+ }
125
165
  constructor(options) {
126
166
  this.options = options;
127
167
  this._listeners = [];
@@ -129,11 +169,12 @@ class Emitter {
129
169
  }
130
170
  get event() {
131
171
  if (!this._event) {
132
- this._event = (listener) => {
172
+ this._event = (callback) => {
133
173
  var _a;
134
174
  if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) {
135
- listener(this._last);
175
+ callback(this._last);
136
176
  }
177
+ const listener = new Listener(callback, Emitter.ENABLE_TRACKING ? Stacktrace.create() : undefined);
137
178
  this._listeners.push(listener);
138
179
  return {
139
180
  dispose: () => {
@@ -141,28 +182,50 @@ class Emitter {
141
182
  if (index > -1) {
142
183
  this._listeners.splice(index, 1);
143
184
  }
185
+ else if (Emitter.ENABLE_TRACKING) ;
144
186
  },
145
187
  };
146
188
  };
189
+ if (Emitter.ENABLE_TRACKING) {
190
+ Emitter.MEMORY_LEAK_WATCHER.add(this._event, Stacktrace.create());
191
+ }
147
192
  }
148
193
  return this._event;
149
194
  }
150
195
  fire(e) {
151
196
  this._last = e;
152
197
  for (const listener of this._listeners) {
153
- listener(e);
198
+ listener.callback(e);
154
199
  }
155
200
  }
156
201
  dispose() {
157
- this._listeners = [];
158
- this._disposed = true;
202
+ if (!this._disposed) {
203
+ this._disposed = true;
204
+ if (this._listeners.length > 0) {
205
+ if (Emitter.ENABLE_TRACKING) {
206
+ queueMicrotask(() => {
207
+ var _a;
208
+ // don't check until stack of execution is completed to allow for out-of-order disposals within the same execution block
209
+ for (const listener of this._listeners) {
210
+ console.warn((_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
211
+ }
212
+ });
213
+ }
214
+ this._listeners = [];
215
+ }
216
+ if (Emitter.ENABLE_TRACKING && this._event) {
217
+ Emitter.MEMORY_LEAK_WATCHER.delete(this._event);
218
+ }
219
+ }
159
220
  }
160
221
  }
222
+ Emitter.ENABLE_TRACKING = false;
223
+ Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
161
224
  function addDisposableWindowListener(element, type, listener, options) {
162
225
  element.addEventListener(type, listener, options);
163
226
  return {
164
227
  dispose: () => {
165
- element.removeEventListener(type, listener);
228
+ element.removeEventListener(type, listener, options);
166
229
  },
167
230
  };
168
231
  }
@@ -170,7 +233,7 @@ function addDisposableListener(element, type, listener, options) {
170
233
  element.addEventListener(type, listener, options);
171
234
  return {
172
235
  dispose: () => {
173
- element.removeEventListener(type, listener);
236
+ element.removeEventListener(type, listener, options);
174
237
  },
175
238
  };
176
239
  }
@@ -210,13 +273,13 @@ class CompositeDisposable {
210
273
  }
211
274
  constructor(...args) {
212
275
  this._isDisposed = false;
213
- this.disposables = args;
276
+ this._disposables = args;
214
277
  }
215
278
  addDisposables(...args) {
216
- args.forEach((arg) => this.disposables.push(arg));
279
+ args.forEach((arg) => this._disposables.push(arg));
217
280
  }
218
281
  dispose() {
219
- this.disposables.forEach((arg) => arg.dispose());
282
+ this._disposables.forEach((arg) => arg.dispose());
220
283
  this._isDisposed = true;
221
284
  }
222
285
  }
@@ -306,6 +369,7 @@ class FocusTracker extends CompositeDisposable {
306
369
  this.onDidFocus = this._onDidFocus.event;
307
370
  this._onDidBlur = new Emitter();
308
371
  this.onDidBlur = this._onDidBlur.event;
372
+ this.addDisposables(this._onDidFocus, this._onDidBlur);
309
373
  let hasFocus = isAncestor(document.activeElement, element);
310
374
  let loosingFocus = false;
311
375
  const onFocus = () => {
@@ -350,11 +414,6 @@ class FocusTracker extends CompositeDisposable {
350
414
  refreshState() {
351
415
  this._refreshStateHandler();
352
416
  }
353
- dispose() {
354
- super.dispose();
355
- this._onDidBlur.dispose();
356
- this._onDidFocus.dispose();
357
- }
358
417
  }
359
418
 
360
419
  function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
@@ -583,7 +642,7 @@ class Splitview {
583
642
  this._orthogonalSize = value;
584
643
  }
585
644
  get length() {
586
- return this.views.length;
645
+ return this.viewItems.length;
587
646
  }
588
647
  get proportions() {
589
648
  return this._proportions ? [...this._proportions] : undefined;
@@ -602,12 +661,12 @@ class Splitview {
602
661
  : 'vertical');
603
662
  }
604
663
  get minimumSize() {
605
- return this.views.reduce((r, item) => r + item.minimumSize, 0);
664
+ return this.viewItems.reduce((r, item) => r + item.minimumSize, 0);
606
665
  }
607
666
  get maximumSize() {
608
667
  return this.length === 0
609
668
  ? Number.POSITIVE_INFINITY
610
- : this.views.reduce((r, item) => r + item.maximumSize, 0);
669
+ : this.viewItems.reduce((r, item) => r + item.maximumSize, 0);
611
670
  }
612
671
  get startSnappingEnabled() {
613
672
  return this._startSnappingEnabled;
@@ -631,7 +690,7 @@ class Splitview {
631
690
  }
632
691
  constructor(container, options) {
633
692
  this.container = container;
634
- this.views = [];
693
+ this.viewItems = [];
635
694
  this.sashes = [];
636
695
  this._size = 0;
637
696
  this._orthogonalSize = 0;
@@ -645,12 +704,12 @@ class Splitview {
645
704
  this.onDidAddView = this._onDidAddView.event;
646
705
  this._onDidRemoveView = new Emitter();
647
706
  this.onDidRemoveView = this._onDidRemoveView.event;
648
- this.resize = (index, delta, sizes = this.views.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
649
- if (index < 0 || index > this.views.length) {
707
+ this.resize = (index, delta, sizes = this.viewItems.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
708
+ if (index < 0 || index > this.viewItems.length) {
650
709
  return 0;
651
710
  }
652
711
  const upIndexes = range(index, -1);
653
- const downIndexes = range(index + 1, this.views.length);
712
+ const downIndexes = range(index + 1, this.viewItems.length);
654
713
  //
655
714
  if (highPriorityIndexes) {
656
715
  for (const i of highPriorityIndexes) {
@@ -665,34 +724,34 @@ class Splitview {
665
724
  }
666
725
  }
667
726
  //
668
- const upItems = upIndexes.map((i) => this.views[i]);
727
+ const upItems = upIndexes.map((i) => this.viewItems[i]);
669
728
  const upSizes = upIndexes.map((i) => sizes[i]);
670
729
  //
671
- const downItems = downIndexes.map((i) => this.views[i]);
730
+ const downItems = downIndexes.map((i) => this.viewItems[i]);
672
731
  const downSizes = downIndexes.map((i) => sizes[i]);
673
732
  //
674
- const minDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].minimumSize - sizes[i], 0);
675
- const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].maximumSize - sizes[i], 0);
733
+ const minDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].minimumSize - sizes[i], 0);
734
+ const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].maximumSize - sizes[i], 0);
676
735
  //
677
736
  const maxDeltaDown = downIndexes.length === 0
678
737
  ? Number.POSITIVE_INFINITY
679
- : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].minimumSize, 0);
738
+ : downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].minimumSize, 0);
680
739
  const minDeltaDown = downIndexes.length === 0
681
740
  ? Number.NEGATIVE_INFINITY
682
- : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].maximumSize, 0);
741
+ : downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].maximumSize, 0);
683
742
  //
684
743
  const minDelta = Math.max(minDeltaUp, minDeltaDown);
685
744
  const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
686
745
  //
687
746
  let snapped = false;
688
747
  if (snapBefore) {
689
- const snapView = this.views[snapBefore.index];
748
+ const snapView = this.viewItems[snapBefore.index];
690
749
  const visible = delta >= snapBefore.limitDelta;
691
750
  snapped = visible !== snapView.visible;
692
751
  snapView.setVisible(visible, snapBefore.size);
693
752
  }
694
753
  if (!snapped && snapAfter) {
695
- const snapView = this.views[snapAfter.index];
754
+ const snapView = this.viewItems[snapAfter.index];
696
755
  const visible = delta < snapAfter.limitDelta;
697
756
  snapped = visible !== snapView.visible;
698
757
  snapView.setVisible(visible, snapAfter.size);
@@ -754,7 +813,7 @@ class Splitview {
754
813
  );
755
814
  });
756
815
  // Initialize content size and proportions for first layout
757
- this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
816
+ this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
758
817
  this.saveProportions();
759
818
  }
760
819
  }
@@ -771,18 +830,18 @@ class Splitview {
771
830
  }
772
831
  }
773
832
  isViewVisible(index) {
774
- if (index < 0 || index >= this.views.length) {
833
+ if (index < 0 || index >= this.viewItems.length) {
775
834
  throw new Error('Index out of bounds');
776
835
  }
777
- const viewItem = this.views[index];
836
+ const viewItem = this.viewItems[index];
778
837
  return viewItem.visible;
779
838
  }
780
839
  setViewVisible(index, visible) {
781
- if (index < 0 || index >= this.views.length) {
840
+ if (index < 0 || index >= this.viewItems.length) {
782
841
  throw new Error('Index out of bounds');
783
842
  }
784
843
  toggleClass(this.container, 'visible', visible);
785
- const viewItem = this.views[index];
844
+ const viewItem = this.viewItems[index];
786
845
  toggleClass(this.container, 'visible', visible);
787
846
  viewItem.setVisible(visible, viewItem.size);
788
847
  this.distributeEmptySpace(index);
@@ -790,33 +849,33 @@ class Splitview {
790
849
  this.saveProportions();
791
850
  }
792
851
  getViewSize(index) {
793
- if (index < 0 || index >= this.views.length) {
852
+ if (index < 0 || index >= this.viewItems.length) {
794
853
  return -1;
795
854
  }
796
- return this.views[index].size;
855
+ return this.viewItems[index].size;
797
856
  }
798
857
  resizeView(index, size) {
799
- if (index < 0 || index >= this.views.length) {
858
+ if (index < 0 || index >= this.viewItems.length) {
800
859
  return;
801
860
  }
802
- const indexes = range(this.views.length).filter((i) => i !== index);
861
+ const indexes = range(this.viewItems.length).filter((i) => i !== index);
803
862
  const lowPriorityIndexes = [
804
- ...indexes.filter((i) => this.views[i].priority === LayoutPriority.Low),
863
+ ...indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low),
805
864
  index,
806
865
  ];
807
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
808
- const item = this.views[index];
866
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
867
+ const item = this.viewItems[index];
809
868
  size = Math.round(size);
810
869
  size = clamp(size, item.minimumSize, Math.min(item.maximumSize, this._size));
811
870
  item.size = size;
812
871
  this.relayout(lowPriorityIndexes, highPriorityIndexes);
813
872
  }
814
873
  getViews() {
815
- return this.views.map((x) => x.view);
874
+ return this.viewItems.map((x) => x.view);
816
875
  }
817
876
  onDidChange(item, size) {
818
- const index = this.views.indexOf(item);
819
- if (index < 0 || index >= this.views.length) {
877
+ const index = this.viewItems.indexOf(item);
878
+ if (index < 0 || index >= this.viewItems.length) {
820
879
  return;
821
880
  }
822
881
  size = typeof size === 'number' ? size : item.size;
@@ -824,7 +883,7 @@ class Splitview {
824
883
  item.size = size;
825
884
  this.relayout([index]);
826
885
  }
827
- addView(view, size = { type: 'distribute' }, index = this.views.length, skipLayout) {
886
+ addView(view, size = { type: 'distribute' }, index = this.viewItems.length, skipLayout) {
828
887
  const container = document.createElement('div');
829
888
  container.className = 'view';
830
889
  container.appendChild(view.element);
@@ -842,24 +901,25 @@ class Splitview {
842
901
  viewSize = view.minimumSize;
843
902
  }
844
903
  const disposable = view.onDidChange((newSize) => this.onDidChange(viewItem, newSize.size));
845
- const dispose = () => {
846
- disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
847
- this.viewContainer.removeChild(container);
848
- };
849
- const viewItem = new ViewItem(container, view, viewSize, { dispose });
850
- if (index === this.views.length) {
904
+ const viewItem = new ViewItem(container, view, viewSize, {
905
+ dispose: () => {
906
+ disposable.dispose();
907
+ this.viewContainer.removeChild(container);
908
+ },
909
+ });
910
+ if (index === this.viewItems.length) {
851
911
  this.viewContainer.appendChild(container);
852
912
  }
853
913
  else {
854
914
  this.viewContainer.insertBefore(container, this.viewContainer.children.item(index));
855
915
  }
856
- this.views.splice(index, 0, viewItem);
857
- if (this.views.length > 1) {
916
+ this.viewItems.splice(index, 0, viewItem);
917
+ if (this.viewItems.length > 1) {
858
918
  //add sash
859
919
  const sash = document.createElement('div');
860
920
  sash.className = 'sash';
861
921
  const onStart = (event) => {
862
- for (const item of this.views) {
922
+ for (const item of this.viewItems) {
863
923
  item.enabled = false;
864
924
  }
865
925
  const iframes = [
@@ -874,27 +934,29 @@ class Splitview {
874
934
  : event.clientY;
875
935
  const sashIndex = firstIndex(this.sashes, (s) => s.container === sash);
876
936
  //
877
- const sizes = this.views.map((x) => x.size);
937
+ const sizes = this.viewItems.map((x) => x.size);
878
938
  //
879
939
  let snapBefore;
880
940
  let snapAfter;
881
941
  const upIndexes = range(sashIndex, -1);
882
- const downIndexes = range(sashIndex + 1, this.views.length);
883
- const minDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].minimumSize - sizes[i]), 0);
884
- const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].viewMaximumSize - sizes[i]), 0);
942
+ const downIndexes = range(sashIndex + 1, this.viewItems.length);
943
+ const minDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].minimumSize - sizes[i]), 0);
944
+ const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].viewMaximumSize - sizes[i]), 0);
885
945
  const maxDeltaDown = downIndexes.length === 0
886
946
  ? Number.POSITIVE_INFINITY
887
- : downIndexes.reduce((r, i) => r + (sizes[i] - this.views[i].minimumSize), 0);
947
+ : downIndexes.reduce((r, i) => r +
948
+ (sizes[i] - this.viewItems[i].minimumSize), 0);
888
949
  const minDeltaDown = downIndexes.length === 0
889
950
  ? Number.NEGATIVE_INFINITY
890
951
  : downIndexes.reduce((r, i) => r +
891
- (sizes[i] - this.views[i].viewMaximumSize), 0);
952
+ (sizes[i] -
953
+ this.viewItems[i].viewMaximumSize), 0);
892
954
  const minDelta = Math.max(minDeltaUp, minDeltaDown);
893
955
  const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
894
956
  const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
895
957
  const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
896
958
  if (typeof snapBeforeIndex === 'number') {
897
- const snappedViewItem = this.views[snapBeforeIndex];
959
+ const snappedViewItem = this.viewItems[snapBeforeIndex];
898
960
  const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
899
961
  snapBefore = {
900
962
  index: snapBeforeIndex,
@@ -905,7 +967,7 @@ class Splitview {
905
967
  };
906
968
  }
907
969
  if (typeof snapAfterIndex === 'number') {
908
- const snappedViewItem = this.views[snapAfterIndex];
970
+ const snappedViewItem = this.viewItems[snapAfterIndex];
909
971
  const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
910
972
  snapAfter = {
911
973
  index: snapAfterIndex,
@@ -926,7 +988,7 @@ class Splitview {
926
988
  this.layoutViews();
927
989
  };
928
990
  const end = () => {
929
- for (const item of this.views) {
991
+ for (const item of this.viewItems) {
930
992
  item.enabled = true;
931
993
  }
932
994
  for (const iframe of iframes) {
@@ -935,12 +997,10 @@ class Splitview {
935
997
  this.saveProportions();
936
998
  document.removeEventListener('mousemove', mousemove);
937
999
  document.removeEventListener('mouseup', end);
938
- document.removeEventListener('mouseend', end);
939
1000
  this._onDidSashEnd.fire(undefined);
940
1001
  };
941
1002
  document.addEventListener('mousemove', mousemove);
942
1003
  document.addEventListener('mouseup', end);
943
- document.addEventListener('mouseend', end);
944
1004
  };
945
1005
  sash.addEventListener('mousedown', onStart);
946
1006
  const sashItem = {
@@ -966,7 +1026,7 @@ class Splitview {
966
1026
  distributeViewSizes() {
967
1027
  const flexibleViewItems = [];
968
1028
  let flexibleSize = 0;
969
- for (const item of this.views) {
1029
+ for (const item of this.viewItems) {
970
1030
  if (item.maximumSize - item.minimumSize > 0) {
971
1031
  flexibleViewItems.push(item);
972
1032
  flexibleSize += item.size;
@@ -976,17 +1036,17 @@ class Splitview {
976
1036
  for (const item of flexibleViewItems) {
977
1037
  item.size = clamp(size, item.minimumSize, item.maximumSize);
978
1038
  }
979
- const indexes = range(this.views.length);
980
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
981
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
1039
+ const indexes = range(this.viewItems.length);
1040
+ const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
1041
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
982
1042
  this.relayout(lowPriorityIndexes, highPriorityIndexes);
983
1043
  }
984
1044
  removeView(index, sizing, skipLayout = false) {
985
1045
  // Remove view
986
- const viewItem = this.views.splice(index, 1)[0];
1046
+ const viewItem = this.viewItems.splice(index, 1)[0];
987
1047
  viewItem.dispose();
988
1048
  // Remove sash
989
- if (this.views.length >= 1) {
1049
+ if (this.viewItems.length >= 1) {
990
1050
  const sashIndex = Math.max(index - 1, 0);
991
1051
  const sashItem = this.sashes.splice(sashIndex, 1)[0];
992
1052
  sashItem.disposable();
@@ -1001,10 +1061,10 @@ class Splitview {
1001
1061
  return viewItem.view;
1002
1062
  }
1003
1063
  getViewCachedVisibleSize(index) {
1004
- if (index < 0 || index >= this.views.length) {
1064
+ if (index < 0 || index >= this.viewItems.length) {
1005
1065
  throw new Error('Index out of bounds');
1006
1066
  }
1007
- const viewItem = this.views[index];
1067
+ const viewItem = this.viewItems[index];
1008
1068
  return viewItem.cachedVisibleSize;
1009
1069
  }
1010
1070
  moveView(from, to) {
@@ -1020,14 +1080,14 @@ class Splitview {
1020
1080
  this.size = size;
1021
1081
  this.orthogonalSize = orthogonalSize;
1022
1082
  if (!this.proportions) {
1023
- const indexes = range(this.views.length);
1024
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
1025
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
1026
- this.resize(this.views.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1083
+ const indexes = range(this.viewItems.length);
1084
+ const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
1085
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
1086
+ this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1027
1087
  }
1028
1088
  else {
1029
- for (let i = 0; i < this.views.length; i++) {
1030
- const item = this.views[i];
1089
+ for (let i = 0; i < this.viewItems.length; i++) {
1090
+ const item = this.viewItems[i];
1031
1091
  item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
1032
1092
  }
1033
1093
  }
@@ -1035,18 +1095,18 @@ class Splitview {
1035
1095
  this.layoutViews();
1036
1096
  }
1037
1097
  relayout(lowPriorityIndexes, highPriorityIndexes) {
1038
- const contentSize = this.views.reduce((r, i) => r + i.size, 0);
1039
- this.resize(this.views.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1098
+ const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1099
+ this.resize(this.viewItems.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
1040
1100
  this.distributeEmptySpace();
1041
1101
  this.layoutViews();
1042
1102
  this.saveProportions();
1043
1103
  }
1044
1104
  distributeEmptySpace(lowPriorityIndex) {
1045
- const contentSize = this.views.reduce((r, i) => r + i.size, 0);
1105
+ const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1046
1106
  let emptyDelta = this.size - contentSize;
1047
- const indexes = range(this.views.length - 1, -1);
1048
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
1049
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
1107
+ const indexes = range(this.viewItems.length - 1, -1);
1108
+ const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
1109
+ const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
1050
1110
  for (const index of highPriorityIndexes) {
1051
1111
  pushToStart(indexes, index);
1052
1112
  }
@@ -1057,7 +1117,7 @@ class Splitview {
1057
1117
  pushToEnd(indexes, lowPriorityIndex);
1058
1118
  }
1059
1119
  for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {
1060
- const item = this.views[indexes[i]];
1120
+ const item = this.viewItems[indexes[i]];
1061
1121
  const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
1062
1122
  const viewDelta = size - item.size;
1063
1123
  emptyDelta -= viewDelta;
@@ -1066,16 +1126,16 @@ class Splitview {
1066
1126
  }
1067
1127
  saveProportions() {
1068
1128
  if (this.proportionalLayout && this.contentSize > 0) {
1069
- this._proportions = this.views.map((i) => i.size / this.contentSize);
1129
+ this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
1070
1130
  }
1071
1131
  }
1072
1132
  layoutViews() {
1073
- this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
1133
+ this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
1074
1134
  let sum = 0;
1075
1135
  const x = [];
1076
1136
  this.updateSashEnablement();
1077
- for (let i = 0; i < this.views.length - 1; i++) {
1078
- sum += this.views[i].size;
1137
+ for (let i = 0; i < this.viewItems.length - 1; i++) {
1138
+ sum += this.viewItems[i].size;
1079
1139
  x.push(sum);
1080
1140
  const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
1081
1141
  if (this._orientation === Orientation.HORIZONTAL) {
@@ -1087,7 +1147,7 @@ class Splitview {
1087
1147
  this.sashes[i].container.style.top = `${offset}px`;
1088
1148
  }
1089
1149
  }
1090
- this.views.forEach((view, i) => {
1150
+ this.viewItems.forEach((view, i) => {
1091
1151
  if (this._orientation === Orientation.HORIZONTAL) {
1092
1152
  view.container.style.width = `${view.size}px`;
1093
1153
  view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
@@ -1106,7 +1166,7 @@ class Splitview {
1106
1166
  findFirstSnapIndex(indexes) {
1107
1167
  // visible views first
1108
1168
  for (const index of indexes) {
1109
- const viewItem = this.views[index];
1169
+ const viewItem = this.viewItems[index];
1110
1170
  if (!viewItem.visible) {
1111
1171
  continue;
1112
1172
  }
@@ -1116,7 +1176,7 @@ class Splitview {
1116
1176
  }
1117
1177
  // then, hidden views
1118
1178
  for (const index of indexes) {
1119
- const viewItem = this.views[index];
1179
+ const viewItem = this.viewItems[index];
1120
1180
  if (viewItem.visible &&
1121
1181
  viewItem.maximumSize - viewItem.minimumSize > 0) {
1122
1182
  return undefined;
@@ -1129,10 +1189,10 @@ class Splitview {
1129
1189
  }
1130
1190
  updateSashEnablement() {
1131
1191
  let previous = false;
1132
- const collapsesDown = this.views.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
1192
+ const collapsesDown = this.viewItems.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
1133
1193
  previous = false;
1134
- const expandsDown = this.views.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
1135
- const reverseViews = [...this.views].reverse();
1194
+ const expandsDown = this.viewItems.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
1195
+ const reverseViews = [...this.viewItems].reverse();
1136
1196
  previous = false;
1137
1197
  const collapsesUp = reverseViews
1138
1198
  .map((i) => (previous = i.size - i.minimumSize > 0 || previous))
@@ -1144,19 +1204,19 @@ class Splitview {
1144
1204
  let position = 0;
1145
1205
  for (let index = 0; index < this.sashes.length; index++) {
1146
1206
  const sash = this.sashes[index];
1147
- const viewItem = this.views[index];
1207
+ const viewItem = this.viewItems[index];
1148
1208
  position += viewItem.size;
1149
1209
  const min = !(collapsesDown[index] && expandsUp[index + 1]);
1150
1210
  const max = !(expandsDown[index] && collapsesUp[index + 1]);
1151
1211
  if (min && max) {
1152
1212
  const upIndexes = range(index, -1);
1153
- const downIndexes = range(index + 1, this.views.length);
1213
+ const downIndexes = range(index + 1, this.viewItems.length);
1154
1214
  const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
1155
1215
  const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
1156
1216
  const snappedBefore = typeof snapBeforeIndex === 'number' &&
1157
- !this.views[snapBeforeIndex].visible;
1217
+ !this.viewItems[snapBeforeIndex].visible;
1158
1218
  const snappedAfter = typeof snapAfterIndex === 'number' &&
1159
- !this.views[snapAfterIndex].visible;
1219
+ !this.viewItems[snapAfterIndex].visible;
1160
1220
  if (snappedBefore &&
1161
1221
  collapsesUp[index] &&
1162
1222
  (position > 0 || this.startSnappingEnabled)) {
@@ -1216,6 +1276,9 @@ class Splitview {
1216
1276
  break;
1217
1277
  }
1218
1278
  }
1279
+ for (const viewItem of this.viewItems) {
1280
+ viewItem.dispose();
1281
+ }
1219
1282
  this.element.remove();
1220
1283
  }
1221
1284
  }
@@ -1650,7 +1713,7 @@ class BranchNode extends CompositeDisposable {
1650
1713
  throw new Error('Invalid index');
1651
1714
  }
1652
1715
  this.splitview.removeView(index, sizing);
1653
- this._removeChild(index);
1716
+ return this._removeChild(index);
1654
1717
  }
1655
1718
  _addChild(node, index) {
1656
1719
  this.children.splice(index, 0, node);
@@ -1672,10 +1735,10 @@ class BranchNode extends CompositeDisposable {
1672
1735
  });
1673
1736
  }
1674
1737
  dispose() {
1675
- super.dispose();
1676
1738
  this._childrenDisposable.dispose();
1677
- this.children.forEach((child) => child.dispose());
1678
1739
  this.splitview.dispose();
1740
+ this.children.forEach((child) => child.dispose());
1741
+ super.dispose();
1679
1742
  }
1680
1743
  }
1681
1744
 
@@ -1905,7 +1968,8 @@ class Gridview {
1905
1968
  if (oldRoot.children.length === 1) {
1906
1969
  // can remove one level of redundant branching if there is only a single child
1907
1970
  const childReference = oldRoot.children[0];
1908
- oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
1971
+ const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
1972
+ child.dispose();
1909
1973
  oldRoot.dispose();
1910
1974
  this._root.addChild(
1911
1975
  /**
@@ -2012,7 +2076,8 @@ class Gridview {
2012
2076
  if (typeof newSiblingCachedVisibleSize === 'number') {
2013
2077
  newSiblingSize = Sizing.Invisible(newSiblingCachedVisibleSize);
2014
2078
  }
2015
- grandParent.removeChild(parentIndex);
2079
+ const child = grandParent.removeChild(parentIndex);
2080
+ child.dispose();
2016
2081
  const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
2017
2082
  grandParent.addChild(newParent, parent.size, parentIndex);
2018
2083
  const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
@@ -2574,6 +2639,7 @@ class Droptarget extends CompositeDisposable {
2574
2639
  }
2575
2640
  dispose() {
2576
2641
  this.removeDropTarget();
2642
+ super.dispose();
2577
2643
  }
2578
2644
  toggleClasses(quadrant, width, height) {
2579
2645
  var _a, _b, _c, _d;
@@ -2751,8 +2817,8 @@ class ContentContainer extends CompositeDisposable {
2751
2817
  if (this.panel.view) {
2752
2818
  const _onDidFocus = this.panel.view.content.onDidFocus;
2753
2819
  const _onDidBlur = this.panel.view.content.onDidBlur;
2754
- const { onDidFocus, onDidBlur } = trackFocus(this._element);
2755
- disposable.addDisposables(onDidFocus(() => this._onDidFocus.fire()), onDidBlur(() => this._onDidBlur.fire()));
2820
+ const focusTracker = trackFocus(this._element);
2821
+ disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
2756
2822
  if (_onDidFocus) {
2757
2823
  disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
2758
2824
  }
@@ -2791,24 +2857,32 @@ class DragHandler extends CompositeDisposable {
2791
2857
  constructor(el) {
2792
2858
  super();
2793
2859
  this.el = el;
2794
- this.disposable = new MutableDisposable();
2860
+ this.dataDisposable = new MutableDisposable();
2861
+ this.pointerEventsDisposable = new MutableDisposable();
2795
2862
  this._onDragStart = new Emitter();
2796
2863
  this.onDragStart = this._onDragStart.event;
2797
- this.iframes = [];
2864
+ this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
2798
2865
  this.configure();
2799
2866
  }
2800
2867
  configure() {
2801
2868
  this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
2802
- this.iframes = [
2869
+ const iframes = [
2803
2870
  ...getElementsByTagName('iframe'),
2804
2871
  ...getElementsByTagName('webview'),
2805
2872
  ];
2806
- for (const iframe of this.iframes) {
2873
+ this.pointerEventsDisposable.value = {
2874
+ dispose: () => {
2875
+ for (const iframe of iframes) {
2876
+ iframe.style.pointerEvents = 'auto';
2877
+ }
2878
+ },
2879
+ };
2880
+ for (const iframe of iframes) {
2807
2881
  iframe.style.pointerEvents = 'none';
2808
2882
  }
2809
2883
  this.el.classList.add('dv-dragged');
2810
2884
  setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
2811
- this.disposable.value = this.getData(event.dataTransfer);
2885
+ this.dataDisposable.value = this.getData(event.dataTransfer);
2812
2886
  if (event.dataTransfer) {
2813
2887
  event.dataTransfer.effectAllowed = 'move';
2814
2888
  /**
@@ -2823,11 +2897,8 @@ class DragHandler extends CompositeDisposable {
2823
2897
  event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
2824
2898
  }
2825
2899
  }), addDisposableListener(this.el, 'dragend', () => {
2826
- for (const iframe of this.iframes) {
2827
- iframe.style.pointerEvents = 'auto';
2828
- }
2829
- this.iframes = [];
2830
- this.disposable.dispose();
2900
+ this.pointerEventsDisposable.dispose();
2901
+ this.dataDisposable.dispose();
2831
2902
  }));
2832
2903
  }
2833
2904
  }
@@ -2845,13 +2916,12 @@ class Tab extends CompositeDisposable {
2845
2916
  this.onChanged = this._onChanged.event;
2846
2917
  this._onDropped = new Emitter();
2847
2918
  this.onDrop = this._onDropped.event;
2848
- this.addDisposables(this._onChanged, this._onDropped);
2849
2919
  this._element = document.createElement('div');
2850
2920
  this._element.className = 'tab';
2851
2921
  this._element.tabIndex = 0;
2852
2922
  this._element.draggable = true;
2853
2923
  toggleClass(this.element, 'inactive-tab', true);
2854
- this.addDisposables(new (class Handler extends DragHandler {
2924
+ this.addDisposables(this._onChanged, this._onDropped, new (class Handler extends DragHandler {
2855
2925
  constructor() {
2856
2926
  super(...arguments);
2857
2927
  this.panelTransfer = LocalSelectionTransfer.getInstance();
@@ -2864,9 +2934,6 @@ class Tab extends CompositeDisposable {
2864
2934
  },
2865
2935
  };
2866
2936
  }
2867
- dispose() {
2868
- //
2869
- }
2870
2937
  })(this._element));
2871
2938
  this.addDisposables(addDisposableListener(this._element, 'mousedown', (event) => {
2872
2939
  if (event.defaultPrevented) {
@@ -2901,7 +2968,7 @@ class Tab extends CompositeDisposable {
2901
2968
  });
2902
2969
  this.addDisposables(this.droptarget.onDrop((event) => {
2903
2970
  this._onDropped.fire(event);
2904
- }));
2971
+ }), this.droptarget);
2905
2972
  }
2906
2973
  setActive(isActive) {
2907
2974
  toggleClass(this.element, 'active-tab', isActive);
@@ -2916,7 +2983,6 @@ class Tab extends CompositeDisposable {
2916
2983
  }
2917
2984
  dispose() {
2918
2985
  super.dispose();
2919
- this.droptarget.dispose();
2920
2986
  }
2921
2987
  }
2922
2988
 
@@ -2962,9 +3028,6 @@ class GroupDragHandler extends DragHandler {
2962
3028
  },
2963
3029
  };
2964
3030
  }
2965
- dispose() {
2966
- //
2967
- }
2968
3031
  }
2969
3032
 
2970
3033
  class VoidContainer extends CompositeDisposable {
@@ -3120,6 +3183,7 @@ class TabsContainer extends CompositeDisposable {
3120
3183
  const tabToRemove = this.tabs.splice(index, 1)[0];
3121
3184
  const { value, disposable } = tabToRemove;
3122
3185
  disposable.dispose();
3186
+ value.dispose();
3123
3187
  value.element.remove();
3124
3188
  }
3125
3189
  setActivePanel(panel) {
@@ -3163,9 +3227,10 @@ class TabsContainer extends CompositeDisposable {
3163
3227
  }
3164
3228
  dispose() {
3165
3229
  super.dispose();
3166
- this.tabs.forEach((tab) => {
3167
- tab.disposable.dispose();
3168
- });
3230
+ for (const { value, disposable } of this.tabs) {
3231
+ disposable.dispose();
3232
+ value.dispose();
3233
+ }
3169
3234
  this.tabs = [];
3170
3235
  }
3171
3236
  }
@@ -3263,7 +3328,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3263
3328
  container.append(this.tabsContainer.element, this.contentContainer.element);
3264
3329
  this.header.hidden = !!options.hideHeader;
3265
3330
  this.locked = !!options.locked;
3266
- this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
3331
+ this.addDisposables(this.tabsContainer.onDrop((event) => {
3267
3332
  this.handleDropEvent(event.event, 'center', event.index);
3268
3333
  }), this.contentContainer.onDidFocus(() => {
3269
3334
  this.accessor.doSetGroupActive(this.groupPanel, true);
@@ -3271,7 +3336,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
3271
3336
  // noop
3272
3337
  }), this.dropTarget.onDrop((event) => {
3273
3338
  this.handleDropEvent(event.nativeEvent, event.position);
3274
- }));
3339
+ }), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
3275
3340
  }
3276
3341
  initialize() {
3277
3342
  var _a, _b;
@@ -3705,8 +3770,7 @@ class BaseGrid extends Resizable {
3705
3770
  this.layout(0, 0, true); // set some elements height/widths
3706
3771
  this.addDisposables(this.gridview.onDidChange(() => {
3707
3772
  this._bufferOnDidLayoutChange.fire();
3708
- }));
3709
- this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
3773
+ }), Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
3710
3774
  this._bufferOnDidLayoutChange.fire();
3711
3775
  }), this._bufferOnDidLayoutChange.onEvent(() => {
3712
3776
  this._onDidLayoutChange.fire();
@@ -3809,7 +3873,6 @@ class BaseGrid extends Resizable {
3809
3873
  this.gridview.layout(width, height);
3810
3874
  }
3811
3875
  dispose() {
3812
- super.dispose();
3813
3876
  this._onDidActiveGroupChange.dispose();
3814
3877
  this._onDidAddGroup.dispose();
3815
3878
  this._onDidRemoveGroup.dispose();
@@ -3818,6 +3881,7 @@ class BaseGrid extends Resizable {
3818
3881
  group.dispose();
3819
3882
  }
3820
3883
  this.gridview.dispose();
3884
+ super.dispose();
3821
3885
  }
3822
3886
  }
3823
3887
 
@@ -3881,7 +3945,7 @@ class PanelApiImpl extends CompositeDisposable {
3881
3945
  //
3882
3946
  this._onUpdateParameters = new Emitter();
3883
3947
  this.onUpdateParameters = this._onUpdateParameters.event;
3884
- this.addDisposables(this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters, this.onDidFocusChange((event) => {
3948
+ this.addDisposables(this.onDidFocusChange((event) => {
3885
3949
  this._isFocused = event.isFocused;
3886
3950
  }), this.onDidActiveChange((event) => {
3887
3951
  this._isActive = event.isActive;
@@ -3890,14 +3954,12 @@ class PanelApiImpl extends CompositeDisposable {
3890
3954
  }), this.onDidDimensionsChange((event) => {
3891
3955
  this._width = event.width;
3892
3956
  this._height = event.height;
3893
- }));
3957
+ }), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters);
3894
3958
  }
3895
3959
  initialize(panel) {
3896
3960
  this.panelUpdatesDisposable.value = this._onUpdateParameters.event((parameters) => {
3897
3961
  panel.update({
3898
- params: {
3899
- params: parameters,
3900
- },
3962
+ params: parameters,
3901
3963
  });
3902
3964
  });
3903
3965
  }
@@ -3992,12 +4054,12 @@ class BasePanelView extends CompositeDisposable {
3992
4054
  this._element.style.height = '100%';
3993
4055
  this._element.style.width = '100%';
3994
4056
  this._element.style.overflow = 'hidden';
3995
- const { onDidFocus, onDidBlur } = trackFocus(this._element);
3996
- this.addDisposables(this.api, onDidFocus(() => {
4057
+ const focusTracker = trackFocus(this._element);
4058
+ this.addDisposables(this.api, focusTracker.onDidFocus(() => {
3997
4059
  this.api._onDidChangeFocus.fire({ isFocused: true });
3998
- }), onDidBlur(() => {
4060
+ }), focusTracker.onDidBlur(() => {
3999
4061
  this.api._onDidChangeFocus.fire({ isFocused: false });
4000
- }));
4062
+ }), focusTracker);
4001
4063
  }
4002
4064
  focus() {
4003
4065
  this.api._onFocusEvent.fire();
@@ -4018,7 +4080,18 @@ class BasePanelView extends CompositeDisposable {
4018
4080
  }
4019
4081
  update(event) {
4020
4082
  var _a, _b;
4083
+ // merge the new parameters with the existing parameters
4021
4084
  this._params = Object.assign(Object.assign({}, this._params), { params: Object.assign(Object.assign({}, (_a = this._params) === null || _a === void 0 ? void 0 : _a.params), event.params) });
4085
+ /**
4086
+ * delete new keys that have a value of undefined,
4087
+ * allow values of null
4088
+ */
4089
+ for (const key of Object.keys(event.params)) {
4090
+ if (event.params[key] === undefined) {
4091
+ delete this._params.params[key];
4092
+ }
4093
+ }
4094
+ // update the view with the updated props
4022
4095
  (_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
4023
4096
  }
4024
4097
  toJSON() {
@@ -4032,9 +4105,9 @@ class BasePanelView extends CompositeDisposable {
4032
4105
  }
4033
4106
  dispose() {
4034
4107
  var _a;
4035
- super.dispose();
4036
4108
  this.api.dispose();
4037
4109
  (_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
4110
+ super.dispose();
4038
4111
  }
4039
4112
  }
4040
4113
 
@@ -4413,7 +4486,7 @@ class GridviewPanel extends BasePanelView {
4413
4486
  this._maximumHeight = options.maximumHeight;
4414
4487
  }
4415
4488
  this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
4416
- this.addDisposables(this._onDidChange, this.api.onVisibilityChange((event) => {
4489
+ this.addDisposables(this.api.onVisibilityChange((event) => {
4417
4490
  const { isVisible } = event;
4418
4491
  const { accessor } = this._params;
4419
4492
  accessor.setVisible(this, isVisible);
@@ -4442,7 +4515,7 @@ class GridviewPanel extends BasePanelView {
4442
4515
  height: event.height,
4443
4516
  width: event.width,
4444
4517
  });
4445
- }));
4518
+ }), this._onDidChange);
4446
4519
  }
4447
4520
  setVisible(isVisible) {
4448
4521
  this.api._onDidVisibilityChange.fire({ isVisible });
@@ -4599,7 +4672,7 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
4599
4672
  this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
4600
4673
  }
4601
4674
  setTitle(title) {
4602
- this.panel.update({ params: { title } });
4675
+ this.panel.setTitle(title);
4603
4676
  }
4604
4677
  close() {
4605
4678
  this.group.model.closePanel(this.panel);
@@ -4664,12 +4737,18 @@ class DockviewPanel extends CompositeDisposable {
4664
4737
  }
4665
4738
  }
4666
4739
  update(event) {
4667
- const params = event.params;
4668
- this._params = Object.assign(Object.assign({}, (this._params || {})), event.params.params);
4669
- if (params.title !== this.title) {
4670
- this._title = params.title;
4671
- this.api._onDidTitleChange.fire({ title: params.title });
4740
+ // merge the new parameters with the existing parameters
4741
+ this._params = Object.assign(Object.assign({}, (this._params || {})), event.params);
4742
+ /**
4743
+ * delete new keys that have a value of undefined,
4744
+ * allow values of null
4745
+ */
4746
+ for (const key of Object.keys(event.params)) {
4747
+ if (event.params[key] === undefined) {
4748
+ delete this._params[key];
4749
+ }
4672
4750
  }
4751
+ // update the view with the updated props
4673
4752
  this.view.update({
4674
4753
  params: {
4675
4754
  params: this._params,
@@ -5045,7 +5124,7 @@ class DockviewComponent extends BaseGrid {
5045
5124
  size: { type: 'pixels', value: 20 },
5046
5125
  },
5047
5126
  });
5048
- this.addDisposables(dropTarget, dropTarget.onDrop((event) => {
5127
+ this.addDisposables(dropTarget.onDrop((event) => {
5049
5128
  const data = getPanelData();
5050
5129
  if (data) {
5051
5130
  this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
@@ -5053,7 +5132,7 @@ class DockviewComponent extends BaseGrid {
5053
5132
  else {
5054
5133
  this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
5055
5134
  }
5056
- }));
5135
+ }), dropTarget);
5057
5136
  this._api = new DockviewApi(this);
5058
5137
  this.updateWatermark();
5059
5138
  }
@@ -5377,31 +5456,33 @@ class DockviewComponent extends BaseGrid {
5377
5456
  }
5378
5457
  super.doRemoveGroup(group, { skipActive });
5379
5458
  }
5380
- moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
5459
+ moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
5381
5460
  var _a;
5382
- const sourceGroup = groupId
5383
- ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
5461
+ const sourceGroup = sourceGroupId
5462
+ ? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
5384
5463
  : undefined;
5385
- if (itemId === undefined) {
5464
+ if (sourceItemId === undefined) {
5386
5465
  if (sourceGroup) {
5387
- this.moveGroup(sourceGroup, referenceGroup, target);
5466
+ this.moveGroup(sourceGroup, destinationGroup, destinationTarget);
5388
5467
  }
5389
5468
  return;
5390
5469
  }
5391
- if (!target || target === 'center') {
5392
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
5393
- this.panels.find((panel) => panel.id === itemId);
5470
+ if (!destinationTarget || destinationTarget === 'center') {
5471
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
5472
+ this.panels.find((panel) => panel.id === sourceItemId);
5394
5473
  if (!groupItem) {
5395
- throw new Error(`No panel with id ${itemId}`);
5474
+ throw new Error(`No panel with id ${sourceItemId}`);
5396
5475
  }
5397
5476
  if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
5398
5477
  this.doRemoveGroup(sourceGroup);
5399
5478
  }
5400
- referenceGroup.model.openPanel(groupItem, { index });
5479
+ destinationGroup.model.openPanel(groupItem, {
5480
+ index: destinationIndex,
5481
+ });
5401
5482
  }
5402
5483
  else {
5403
- const referenceLocation = getGridLocation(referenceGroup.element);
5404
- const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
5484
+ const referenceLocation = getGridLocation(destinationGroup.element);
5485
+ const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
5405
5486
  if (sourceGroup && sourceGroup.size < 2) {
5406
5487
  const [targetParentLocation, to] = tail(targetLocation);
5407
5488
  const sourceLocation = getGridLocation(sourceGroup.element);
@@ -5419,18 +5500,18 @@ class DockviewComponent extends BaseGrid {
5419
5500
  skipDispose: true,
5420
5501
  });
5421
5502
  // after deleting the group we need to re-evaulate the ref location
5422
- const updatedReferenceLocation = getGridLocation(referenceGroup.element);
5423
- const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, target);
5503
+ const updatedReferenceLocation = getGridLocation(destinationGroup.element);
5504
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
5424
5505
  this.doAddGroup(targetGroup, location);
5425
5506
  }
5426
5507
  }
5427
5508
  else {
5428
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
5429
- this.panels.find((panel) => panel.id === itemId);
5509
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
5510
+ this.panels.find((panel) => panel.id === sourceItemId);
5430
5511
  if (!groupItem) {
5431
- throw new Error(`No panel with id ${itemId}`);
5512
+ throw new Error(`No panel with id ${sourceItemId}`);
5432
5513
  }
5433
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
5514
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
5434
5515
  const group = this.createGroupAtLocation(dropLocation);
5435
5516
  group.model.openPanel(groupItem);
5436
5517
  }
@@ -5524,11 +5605,11 @@ class DockviewComponent extends BaseGrid {
5524
5605
  return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
5525
5606
  }
5526
5607
  dispose() {
5527
- super.dispose();
5528
5608
  this._onDidActivePanelChange.dispose();
5529
5609
  this._onDidAddPanel.dispose();
5530
5610
  this._onDidRemovePanel.dispose();
5531
5611
  this._onDidLayoutFromJSON.dispose();
5612
+ super.dispose();
5532
5613
  }
5533
5614
  }
5534
5615
 
@@ -5786,7 +5867,7 @@ class SplitviewComponent extends Resizable {
5786
5867
  }
5787
5868
  set splitview(value) {
5788
5869
  this._splitview = value;
5789
- this._disposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
5870
+ this._splitviewChangeDisposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
5790
5871
  this._onDidLayoutChange.fire(undefined);
5791
5872
  }), this._splitview.onDidAddView((e) => this._onDidAddView.fire(e)), this._splitview.onDidRemoveView((e) => this._onDidRemoveView.fire(e)));
5792
5873
  }
@@ -5808,7 +5889,7 @@ class SplitviewComponent extends Resizable {
5808
5889
  }
5809
5890
  constructor(options) {
5810
5891
  super(options.parentElement);
5811
- this._disposable = new MutableDisposable();
5892
+ this._splitviewChangeDisposable = new MutableDisposable();
5812
5893
  this._panels = new Map();
5813
5894
  this._onDidLayoutfromJSON = new Emitter();
5814
5895
  this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
@@ -5826,7 +5907,7 @@ class SplitviewComponent extends Resizable {
5826
5907
  options.frameworkComponents = {};
5827
5908
  }
5828
5909
  this.splitview = new Splitview(this.element, options);
5829
- this.addDisposables(this._disposable, this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
5910
+ this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
5830
5911
  }
5831
5912
  updateOptions(options) {
5832
5913
  const hasOrientationChanged = typeof options.orientation === 'string' &&
@@ -5864,15 +5945,15 @@ class SplitviewComponent extends Resizable {
5864
5945
  }
5865
5946
  }
5866
5947
  removePanel(panel, sizing) {
5867
- const disposable = this._panels.get(panel.id);
5868
- if (!disposable) {
5948
+ const item = this._panels.get(panel.id);
5949
+ if (!item) {
5869
5950
  throw new Error(`unknown splitview panel ${panel.id}`);
5870
5951
  }
5871
- disposable.disposable.dispose();
5872
- disposable.value.dispose();
5952
+ item.dispose();
5873
5953
  this._panels.delete(panel.id);
5874
5954
  const index = this.panels.findIndex((_) => _ === panel);
5875
- this.splitview.removeView(index, sizing);
5955
+ const removedView = this.splitview.removeView(index, sizing);
5956
+ removedView.dispose();
5876
5957
  const panels = this.panels;
5877
5958
  if (panels.length > 0) {
5878
5959
  this.setActive(panels[panels.length - 1]);
@@ -5919,7 +6000,7 @@ class SplitviewComponent extends Resizable {
5919
6000
  }
5920
6001
  this.setActive(view, true);
5921
6002
  });
5922
- this._panels.set(view.id, { disposable, value: view });
6003
+ this._panels.set(view.id, disposable);
5923
6004
  }
5924
6005
  toJSON() {
5925
6006
  var _a;
@@ -5992,20 +6073,26 @@ class SplitviewComponent extends Resizable {
5992
6073
  this._onDidLayoutfromJSON.fire();
5993
6074
  }
5994
6075
  clear() {
5995
- for (const [_, value] of this._panels.entries()) {
5996
- value.disposable.dispose();
5997
- value.value.dispose();
6076
+ for (const disposable of this._panels.values()) {
6077
+ disposable.dispose();
5998
6078
  }
5999
6079
  this._panels.clear();
6000
- this.splitview.dispose();
6080
+ while (this.splitview.length > 0) {
6081
+ const view = this.splitview.removeView(0, Sizing.Distribute, true);
6082
+ view.dispose();
6083
+ }
6001
6084
  }
6002
6085
  dispose() {
6003
- for (const [_, value] of this._panels.entries()) {
6004
- value.disposable.dispose();
6005
- value.value.dispose();
6086
+ for (const disposable of this._panels.values()) {
6087
+ disposable.dispose();
6006
6088
  }
6007
6089
  this._panels.clear();
6090
+ const views = this.splitview.getViews();
6091
+ this._splitviewChangeDisposable.dispose();
6008
6092
  this.splitview.dispose();
6093
+ for (const view of views) {
6094
+ view.dispose();
6095
+ }
6009
6096
  super.dispose();
6010
6097
  }
6011
6098
  }